diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp index 27e8753d..43e52119 100755 --- a/src/core/Pad.cpp +++ b/src/core/Pad.cpp @@ -1167,6 +1167,11 @@ void CPad::ProcessPCSpecificStuff(void) ; } +void attachtest (maple_device_t *dev) +{ + CPad::GetPad(0)->IsDualAnalog = false; +} + void CPad::Update(int16 pad) { OldState = NewState; @@ -1433,30 +1438,64 @@ void CPad::Update(int16 pad) #endif { #ifdef RW_DC + if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64))) + { + // if (contMaple == nullptr) + // CPad::GetPad(0)->IsDualAnalog = false; + // else + CPad::GetPad(0)->IsDualAnalog = true; + } //CPad::IsDualAnalog = cont_has_capabilities(contMaple, CONT_CAPABILITIES_DUAL_ANALOG); //Query controller about Dual analog capabilities if (pad == 0) { - NewState.DPadUp = state->dpad_up; //This part could be inside a compiler directive to preserve the old code and just use this block if compil - NewState.DPadDown = state->dpad_down; //I also changed CControllerState inside Pad.h and created these values for DC controllers - NewState.DPadLeft = state->dpad_left; - NewState.DPadRight = state->dpad_right; - NewState.A = state->a; - NewState.B = state->b; - NewState.C = state->c; - NewState.D = state->d; - NewState.X = state->x; - NewState.Y = state->y; - NewState.Z = state->z; - NewState.Start = state->start; - NewState.RightTrigger = state->rtrig; - NewState.LeftTrigger = state->ltrig; - NewState.LeftStickX = state->joyx; - NewState.LeftStickY = state->joyy; - NewState.RightStickX = state->joy2x; - NewState.RightStickY = state->joy2y; - NewState.RightShock = state->dpad_left; + if (contMaple == NULL) + { + CPad::GetPad(0)->IsDualAnalog = false; + NewState.DPadUp = 0; + NewState.DPadDown = 0; + NewState.DPadLeft = 0; + NewState.DPadRight = 0; + NewState.A = 0; + NewState.B = 0; + NewState.C = 0; + NewState.D = 0; + NewState.X = 0; + NewState.Y = 0; + NewState.Z = 0; + NewState.Start = 0; + NewState.RightTrigger = 0; + NewState.LeftTrigger = 0; + NewState.LeftStickX = 0; + NewState.LeftStickY = 0; + NewState.RightStickX = 0; + NewState.RightStickY = 0; + NewState.RightShock = 0; + } + else + { + NewState.DPadUp = state->dpad_up; //This part could be inside a compiler directive to preserve the old code and just use this block if compil + NewState.DPadDown = state->dpad_down; //I also changed CControllerState inside Pad.h and created these values for DC controllers + NewState.DPadLeft = state->dpad_left; + NewState.DPadRight = state->dpad_right; + NewState.A = state->a; + NewState.B = state->b; + NewState.C = state->c; + NewState.D = state->d; + NewState.X = state->x; + NewState.Y = state->y; + NewState.Z = state->z; + NewState.Start = state->start; + NewState.RightTrigger = state->rtrig; + NewState.LeftTrigger = state->ltrig; + NewState.LeftStickX = state->joyx; + NewState.LeftStickY = state->joyy; + NewState.RightStickX = state->joy2x; + NewState.RightStickY = state->joy2y; + NewState.RightShock = state->dpad_left; + } + } else @@ -1482,32 +1521,29 @@ void CPad::Update(int16 pad) NewState.RightShock = 0; } - auto contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); - auto state = (cont_state_t *)maple_dev_status(contMaple); - - if (contMaple == nullptr) - { - //CPad::GetPad(0)->IsDualAnalog = false; - NewState.DPadUp = 0; - NewState.DPadDown = 0; - NewState.DPadLeft = 0; - NewState.DPadRight = 0; - NewState.A = 0; - NewState.B = 0; - NewState.C = 0; - NewState.D = 0; - NewState.X = 0; - NewState.Y = 0; - NewState.Z = 0; - NewState.Start = 0; - NewState.RightTrigger = 0; - NewState.LeftTrigger = 0; - NewState.LeftStickX = 0; - NewState.LeftStickY = 0; - NewState.RightStickX = 0; - NewState.RightStickY = 0; - NewState.RightShock = 0; - } + // if (old_contMaple == nullptr && contMaple != nullptr) + // { + // CPad::GetPad(0)->IsDualAnalog = false; + // NewState.DPadUp = 0; + // NewState.DPadDown = 0; + // NewState.DPadLeft = 0; + // NewState.DPadRight = 0; + // NewState.A = 0; + // NewState.B = 0; + // NewState.C = 0; + // NewState.D = 0; + // NewState.X = 0; + // NewState.Y = 0; + // NewState.Z = 0; + // NewState.Start = 0; + // NewState.RightTrigger = 0; + // NewState.LeftTrigger = 0; + // NewState.LeftStickX = 0; + // NewState.LeftStickY = 0; + // NewState.RightStickX = 0; + // NewState.RightStickY = 0; + // NewState.RightShock = 0; + // } #else NewState = ReconcileTwoControllersInput(PCTempKeyState, PCTempJoyState); @@ -1526,21 +1562,44 @@ void CPad::Update(int16 pad) bHornHistory[iCurrHornHistory] = GetHorn(); -#ifdef RW_DC - if (((NewState.RightStickY > 64 && OldState.RightStickY > 64)) || ((NewState.RightStickY) < -64 && (OldState.RightStickY < -64))) - { - if (contMaple == nullptr) - CPad::GetPad(0)->IsDualAnalog = false; - else - CPad::GetPad(0)->IsDualAnalog = true; - } -#endif + +#ifdef RW_DC + auto old_contMaple = contMaple; + auto n_dev = maple_enum_count(); + contMaple = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + state = (cont_state_t *)maple_dev_status(contMaple); +#endif + // if (n_dev == 0) + // { + // CPad::GetPad(0)->IsDualAnalog = false; + // NewState.DPadUp = 0; + // NewState.DPadDown = 0; + // NewState.DPadLeft = 0; + // NewState.DPadRight = 0; + // NewState.A = 0; + // NewState.B = 0; + // NewState.C = 0; + // NewState.D = 0; + // NewState.X = 0; + // NewState.Y = 0; + // NewState.Z = 0; + // NewState.Start = 0; + // NewState.RightTrigger = 0; + // NewState.LeftTrigger = 0; + // NewState.LeftStickX = 0; + // NewState.LeftStickY = 0; + // NewState.RightStickX = 0; + // NewState.RightStickY = 0; + // NewState.RightShock = 0; + // } + if ( !bDisplayNoControllerMessage ) CGame::bDemoMode = false; } + void CPad::DoCheats(void) { #ifdef DETECT_PAD_INPUT_SWITCH