From 5c23199fe28b03db56f17ab6e265df842606b41e Mon Sep 17 00:00:00 2001 From: Erin Moon Date: Mon, 4 Jan 2021 09:37:08 -0600 Subject: [PATCH] close-to-matching mDoCPd_c::convert() (#61) --- .../JSystem/JUtility/JUTGamePad/JUTGamePad.h | 28 +++---- .../m_Do_controller_pad/m_Do_controller_pad.h | 4 +- libs/JSystem/JUtility/JUTGamePad.cpp | 22 +++--- src/m_Do/m_Do_controller_pad.cpp | 75 +++++++++---------- src/m_Do/m_Do_main.cpp | 8 +- tools/clang-format-all.sh | 0 6 files changed, 65 insertions(+), 72 deletions(-) mode change 100644 => 100755 tools/clang-format-all.sh diff --git a/include/JSystem/JUtility/JUTGamePad/JUTGamePad.h b/include/JSystem/JUtility/JUTGamePad/JUTGamePad.h index 49248000836..ec56f569d30 100644 --- a/include/JSystem/JUtility/JUTGamePad/JUTGamePad.h +++ b/include/JSystem/JUtility/JUTGamePad/JUTGamePad.h @@ -36,19 +36,19 @@ public: u32 update(PADStatus const*, u32 unk); void setRepeat(u32 unk0, u32 unk1, u32 unk2); - u32 button_flags; + u32 mButtonFlags; - u32 field_0x4; - u32 field_0x8; + u32 mPressedButtonFlags; + u32 mReleasedButtonFlags; - u8 analog_a; - u8 analog_b; - u8 trigger_left; - u8 trigger_right; - f32 analog_left; - f32 analog_right; + u8 mAnalogARaw; + u8 mAnalogBRaw; + u8 mTriggerLeftRaw; + u8 mTriggerRightRaw; + f32 mTriggerLeft; + f32 mTriggerRight; - u32 field_0x18; + u32 field_0x18; // padding? u32 field_0x1c; u32 field_0x20; u32 field_0x24; @@ -63,10 +63,10 @@ public: u32 update(s8 unk0, s8 unk1, EStickMode mode, EWhichStick stick, u32 unk2); u32 getButton(u32 unk); - float stick_x; - float stick_y; - float length_from_neutral; - u16 angle; + float mPosX; + float mPosY; + float mValue; + s16 mAngle; s8 field_0xe; s8 field_0xf; }; diff --git a/include/m_Do/m_Do_controller_pad/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad/m_Do_controller_pad.h index 05b8f1d7731..9e0c3ccbe28 100644 --- a/include/m_Do/m_Do_controller_pad/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad/m_Do_controller_pad.h @@ -72,8 +72,8 @@ struct g_HIO_struct { struct mDoCPd_c { void create(); void read(); - static void convert(interface_of_controller_pad* controllerInteface, JUTGamePad* gamePad); - static void LRlockCheck(interface_of_controller_pad* controllerInterface); + static void convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad); + static void LRlockCheck(interface_of_controller_pad* pInterface); static void recalibrate(void); JUTGamePad* gamePad; diff --git a/libs/JSystem/JUtility/JUTGamePad.cpp b/libs/JSystem/JUtility/JUTGamePad.cpp index 8ff7d63b494..0c9d4e08171 100644 --- a/libs/JSystem/JUtility/JUTGamePad.cpp +++ b/libs/JSystem/JUtility/JUTGamePad.cpp @@ -107,14 +107,14 @@ void JUTGamePad::clearForReset() { } void JUTGamePad::CButton::clear() { - this->button_flags = 0; - this->field_0x4 = 0; - this->field_0x8 = 0; + this->mButtonFlags = 0; + this->mPressedButtonFlags = 0; + this->mReleasedButtonFlags = 0; this->field_0x18 = 0; - this->analog_a = 0; - this->analog_b = 0; - this->trigger_left = 0; - this->trigger_right = 0; + this->mAnalogARaw = 0; + this->mAnalogBRaw = 0; + this->mTriggerLeftRaw = 0; + this->mTriggerRightRaw = 0; this->field_0x1c = 0; this->field_0x20 = 0; this->field_0x24 = 0; @@ -129,10 +129,10 @@ asm u32 JUTGamePad::CButton::update(PADStatus const*, u32 unk) { void JUTGamePad::CStick::clear() { float zero = lbl_80456028; // 0.0f - this->stick_x = zero; - this->stick_y = zero; - this->length_from_neutral = zero; - this->angle = 0; + this->mPosX = zero; + this->mPosY = zero; + this->mValue = zero; + this->mAngle = 0; } asm u32 JUTGamePad::CStick::update(s8 unk0, s8 unk1, EStickMode mode, EWhichStick stick, u32 unk2) { diff --git a/src/m_Do/m_Do_controller_pad.cpp b/src/m_Do/m_Do_controller_pad.cpp index 6d38930472d..ac351b0470a 100644 --- a/src/m_Do/m_Do_controller_pad.cpp +++ b/src/m_Do/m_Do_controller_pad.cpp @@ -6,8 +6,10 @@ #include "m_Do/m_Do_main/m_Do_main.h" #include "pad/pad.h" +// TODO: m_cpadInfo uses a bad type in a number of the NONMATCHING functions, +// and references need to be updated to reflect its correct type. + #ifdef NONMATCHING -// TODO: change the cpadinfo stuff to use the new type of m_cpadInfo void mDoCPd_c::create() { JUTGamePad* JUTGamePad_ptr; cpadInfo* m_cpadInfo_addr; @@ -86,50 +88,41 @@ asm void mDoCPd_c::read() { #endif #ifdef NONMATCHING -void mDoCPd_c::convert(interface_of_controller_pad* controllerInterface, JUTGamePad* gamePad) { - controllerInterface->button_flags = gamePad->buttons.button_flags; - controllerInterface->field_0x34 = gamePad->buttons.field_0x4; - controllerInterface->stick_x = gamePad->control_stick.stick_x; - controllerInterface->stick_y = gamePad->control_stick.stick_y; - controllerInterface->length_from_neutral = gamePad->control_stick.length_from_neutral; - controllerInterface->controlStick_angle = gamePad->control_stick.angle; - controllerInterface->cStick_x = gamePad->c_stick.stick_x; - controllerInterface->cStick_y = gamePad->c_stick.stick_y; - controllerInterface->cStick_length_from_neutral = gamePad->c_stick.length_from_neutral; - controllerInterface->cStick_angle = gamePad->c_stick.angle; - controllerInterface->analog_a = - (gamePad->buttons.analog_a - lbl_80451A30) * - lbl_80451A20; //@3709 * - //(float)((double)CONCAT44(0x43300000,(uint)(gamePad->buttons).analog_a) - //- @3713); - if (controllerInterface->analog_a > lbl_80451A24) { - controllerInterface->analog_a = lbl_80451A24; +// off on load order, regalloc, const placement (int-to-float conversion magic). +void mDoCPd_c::convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad) { + pInterface->mButtonFlags = pPad->buttons.mButtonFlags; + pInterface->mPressedButtonFlags = pPad->buttons.mPressedButtonFlags; + pInterface->mMainStickPosX = pPad->control_stick.mPosX; + pInterface->mMainStickPosY = pPad->control_stick.mPosY; + pInterface->mMainStickValue = pPad->control_stick.mValue; + pInterface->mMainStickAngle = pPad->control_stick.mAngle; + pInterface->mCStickPosX = pPad->c_stick.mPosX; + pInterface->mCStickPosY = pPad->c_stick.mPosY; + pInterface->mCStickValue = pPad->c_stick.mValue; + pInterface->mCStickAngle = pPad->c_stick.mAngle; + + pInterface->mAnalogA = lbl_80451A20 * pPad->buttons.mAnalogARaw; + if (pInterface->mAnalogA > lbl_80451A24 /* 1.0 */) { + pInterface->mAnalogA = lbl_80451A24; } - controllerInterface->analog_b = - (gamePad->buttons.analog_b - lbl_80451A30) * - lbl_80451A20; //@3709 * - //(float)((double)CONCAT44(0x43300000,(uint)(gamePad->buttons).analog_b) - //- @3713); - if (controllerInterface->analog_b > lbl_80451A24) { - controllerInterface->analog_b = lbl_80451A24; + + pInterface->mAnalogB = lbl_80451A20 * pPad->buttons.mAnalogBRaw; + if (pInterface->mAnalogB > lbl_80451A24 /* 1.0 */) { + pInterface->mAnalogB = lbl_80451A24; } - controllerInterface->trigger_left = - (gamePad->buttons.trigger_left - lbl_80451A30) * - lbl_80451A28; //@3711 * - //(float)((double)CONCAT44(0x43300000,(uint)(gamePad->buttons).trigger_left) - //- @3713); - if (controllerInterface->trigger_left > lbl_80451A24) { - controllerInterface->trigger_left = lbl_80451A24; + + // pInterface->mTriggerLeft = pPad->buttons.mTriggerLeftRaw * (1/140.0f); + pInterface->mTriggerLeft = lbl_80451A28 * pPad->buttons.mTriggerLeftRaw; + if (pInterface->mTriggerLeft > lbl_80451A24 /* 1.0 */) { + pInterface->mTriggerLeft = lbl_80451A24; } - controllerInterface->trigger_right = - (gamePad->buttons.trigger_right - lbl_80451A30) * - lbl_80451A28; //@3711 * - //(float)((double)CONCAT44(0x43300000,(uint)(gamePad->buttons).trigger_right) - //- @3713); - if (controllerInterface->trigger_right > lbl_80451A24) { - controllerInterface->trigger_right = lbl_80451A24; + + pInterface->mTriggerRight = lbl_80451A28 * pPad->buttons.mTriggerRightRaw; + if (pInterface->mTriggerRight > lbl_80451A24 /* 1.0 */) { + pInterface->mTriggerRight = lbl_80451A24; } - controllerInterface->error_value = gamePad->error_value; + + pInterface->mGamepadErrorFlags = pPad->error_value; } #else asm void mDoCPd_c::convert(interface_of_controller_pad* controllerInteface, JUTGamePad* gamePad) { diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index d627300ace2..ed3091dd270 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -149,14 +149,14 @@ void debug(void) { CheckHeap(2); } - if (((m_gamePad[2]->buttons.button_flags & ~0x10) == 0x20) && - (m_gamePad[2]->buttons.field_0x4 & 0x10)) { + if (((m_gamePad[2]->buttons.mButtonFlags & ~0x10) == 0x20) && + (m_gamePad[2]->buttons.mPressedButtonFlags & 0x10)) { lbl_80450B18 ^= 0x1; } if (lbl_80450B18) { - if (((m_gamePad[2]->buttons.button_flags & ~0x10) == 0x40) && - (m_gamePad[2]->buttons.field_0x4 & 0x10)) { + if (((m_gamePad[2]->buttons.mButtonFlags & ~0x10) == 0x40) && + (m_gamePad[2]->buttons.mPressedButtonFlags & 0x10)) { lbl_80450588[0] < 0x5 ? lbl_80450588[0]++ : lbl_80450588[0] = 0x1; } diff --git a/tools/clang-format-all.sh b/tools/clang-format-all.sh old mode 100644 new mode 100755