From da7b41ba49528c1b573600d4dc32d7f1e0dbfff1 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 26 Nov 2023 17:43:39 -0500 Subject: [PATCH] Use struct bitfields for pad buttons, matching several functions --- include/JSystem/JUtility/JUTGamePad.h | 8 ++- .../SSystem/SComponent/c_API_controller_pad.h | 22 +++++-- include/d/actor/d_a_agb.h | 13 +++- include/d/actor/d_a_npc_md.h | 2 +- include/m_Do/m_Do_controller_pad.h | 48 +++++++-------- src/d/actor/d_a_agb.cpp | 59 ++++++++----------- src/d/actor/d_a_npc_md.cpp | 5 +- src/m_Do/m_Do_controller_pad.cpp | 56 ++++++++---------- 8 files changed, 114 insertions(+), 99 deletions(-) diff --git a/include/JSystem/JUtility/JUTGamePad.h b/include/JSystem/JUtility/JUTGamePad.h index 0ee10c100..a5eb1c657 100644 --- a/include/JSystem/JUtility/JUTGamePad.h +++ b/include/JSystem/JUtility/JUTGamePad.h @@ -82,6 +82,8 @@ public: u32 getButton() const { return mButton.mButton; } u32 getTrigger() const { return mButton.mTrigger; } + u32 getRelease() const { return mButton.mRelease; } + u32 getRepeat() const { return mButton.mRepeat; } f32 getMainStickX() const { return mMainStick.mPosX; } f32 getMainStickY() const { return mMainStick.mPosY; } @@ -124,7 +126,7 @@ public: void stopMotor() { mRumble.stopMotor(mPortNum); } void stopMotorHard() { mRumble.stopMotorHard(mPortNum); } - static PADStatus & getPortStatus(u32 port) { return mPadStatus[port]; } + static PADStatus & getPortStatus(EPadPort port) { return mPadStatus[port]; } struct CButton { CButton() { clear(); } @@ -221,6 +223,10 @@ public: mRumble.startPatternedRumble(param_2, rumble, param_4); } + // TODO: + void isResetOccurred(int*) {} + void suppressPadReset(u32) {} + /* 0x18 */ CButton mButton; /* 0x48 */ CStick mMainStick; /* 0x58 */ CStick mSubStick; diff --git a/include/SSystem/SComponent/c_API_controller_pad.h b/include/SSystem/SComponent/c_API_controller_pad.h index c1f746112..0babb009d 100644 --- a/include/SSystem/SComponent/c_API_controller_pad.h +++ b/include/SSystem/SComponent/c_API_controller_pad.h @@ -3,6 +3,22 @@ #include "dolphin/types.h" +// made up name +struct controller_pad_buttons { + bool left : 1; + bool right : 1; + bool down : 1; + bool up : 1; + bool z : 1; + bool r : 1; + bool l : 1; + bool a : 1; + bool b : 1; + bool x : 1; + bool y : 1; + bool start : 1; +}; + struct interface_of_controller_pad { /* 0x00 */ f32 mMainStickPosX; /* 0x04 */ f32 mMainStickPosY; @@ -20,10 +36,8 @@ struct interface_of_controller_pad { /* 0x24 */ f32 mAnalogB; /* 0x28 */ f32 mTriggerLeft; /* 0x2C */ f32 mTriggerRight; - /* 0x30 */ u8 mButtonHold0; - /* 0x31 */ u8 mButtonHold1; - /* 0x32 */ u8 mButtonTrig0; - /* 0x33 */ u8 mButtonTrig1; + /* 0x30 */ controller_pad_buttons mButtonHold; + /* 0x32 */ controller_pad_buttons mButtonTrig; /* 0x34 */ s8 mGamepadErrorFlags; /* 0x35 */ u8 mHoldLockL; /* 0x36 */ u8 mTrigLockL; diff --git a/include/d/actor/d_a_agb.h b/include/d/actor/d_a_agb.h index c8ac59c1b..bf4cb4016 100644 --- a/include/d/actor/d_a_agb.h +++ b/include/d/actor/d_a_agb.h @@ -97,7 +97,16 @@ public: struct daAgb_GbaFlg { /* 0x0 */ u16 field_0x0; - /* 0x2 */ u8 field_0x2; + /* 0x2 */ struct { + u8 m7 : 1; + u8 m6 : 1; + u8 m5 : 1; + u8 m4 : 1; + u8 m3 : 1; + u8 m2 : 1; + u8 m1 : 1; + u8 m0 : 1; + } field_0x2; /* 0x3 */ u8 field_0x3; /* 0x4 */ u16 field_0x4; /* 0x6 */ u16 field_0x6; @@ -173,7 +182,7 @@ public: /* 0x650 */ u32 field_0x650; /* 0x654 */ int field_0x654; /* 0x658 */ u16 field_0x658; - /* 0x65A */ u16 field_0x65a; + /* 0x65A */ u16 mPrevButtons; /* 0x65C */ u16 field_0x65c; /* 0x65E */ u16 field_0x65e; /* 0x660 */ u16 mDenyMessage; diff --git a/include/d/actor/d_a_npc_md.h b/include/d/actor/d_a_npc_md.h index c96d1eaf1..ada73db73 100644 --- a/include/d/actor/d_a_npc_md.h +++ b/include/d/actor/d_a_npc_md.h @@ -314,7 +314,7 @@ public: void getStickAngY(int); void calcStickPos(s16, cXyz*); BOOL flyCheck(); - BOOL mirrorCancelCheck(); + bool mirrorCancelCheck(); void setWingEmitter(); void setHane02Emitter(); void deleteHane02Emitter(); diff --git a/include/m_Do/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad.h index 4495ada4a..f835f630e 100644 --- a/include/m_Do/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad.h @@ -7,31 +7,31 @@ extern JUTGamePad* g_mDoCPd_gamePad[4]; extern interface_of_controller_pad g_mDoCPd_cpadInfo[4]; -#define CPad_CHECK_HOLD_A(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold0 & 1) -#define CPad_CHECK_HOLD_B(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold1 >> 7) & 1) -#define CPad_CHECK_HOLD_X(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold1 >> 6) & 1) -#define CPad_CHECK_HOLD_Y(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold1 >> 5) & 1) -#define CPad_CHECK_HOLD_Z(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 3) & 1) -#define CPad_CHECK_HOLD_START(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold1 >> 4) & 1) -#define CPad_CHECK_HOLD_L(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 1) & 1) -#define CPad_CHECK_HOLD_R(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 2) & 1) -#define CPad_CHECK_HOLD_UP(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 4) & 1) -#define CPad_CHECK_HOLD_DOWN(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 5) & 1) -#define CPad_CHECK_HOLD_RIGHT(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 6) & 1) -#define CPad_CHECK_HOLD_LEFT(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonHold0 >> 7) & 1) +#define CPad_CHECK_HOLD_A(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.a) +#define CPad_CHECK_HOLD_B(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.b) +#define CPad_CHECK_HOLD_X(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.x) +#define CPad_CHECK_HOLD_Y(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.y) +#define CPad_CHECK_HOLD_Z(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.z) +#define CPad_CHECK_HOLD_START(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.start) +#define CPad_CHECK_HOLD_L(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.l) +#define CPad_CHECK_HOLD_R(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.r) +#define CPad_CHECK_HOLD_UP(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.up) +#define CPad_CHECK_HOLD_DOWN(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.down) +#define CPad_CHECK_HOLD_RIGHT(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.right) +#define CPad_CHECK_HOLD_LEFT(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonHold.left) -#define CPad_CHECK_TRIG_A(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig0 & 1) -#define CPad_CHECK_TRIG_B(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig1 >> 7) & 1) -#define CPad_CHECK_TRIG_X(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig1 >> 6) & 1) -#define CPad_CHECK_TRIG_Y(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig1 >> 5) & 1) -#define CPad_CHECK_TRIG_Z(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 3) & 1) -#define CPad_CHECK_TRIG_START(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig1 >> 4) & 1) -#define CPad_CHECK_TRIG_L(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 1) & 1) -#define CPad_CHECK_TRIG_R(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 2) & 1) -#define CPad_CHECK_TRIG_UP(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 4) & 1) -#define CPad_CHECK_TRIG_DOWN(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 5) & 1) -#define CPad_CHECK_TRIG_RIGHT(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 6) & 1) -#define CPad_CHECK_TRIG_LEFT(padNo) ((g_mDoCPd_cpadInfo[padNo].mButtonTrig0 >> 7) & 1) +#define CPad_CHECK_TRIG_A(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.a) +#define CPad_CHECK_TRIG_B(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.b) +#define CPad_CHECK_TRIG_X(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.x) +#define CPad_CHECK_TRIG_Y(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.y) +#define CPad_CHECK_TRIG_Z(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.z) +#define CPad_CHECK_TRIG_START(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.start) +#define CPad_CHECK_TRIG_L(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.l) +#define CPad_CHECK_TRIG_R(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.r) +#define CPad_CHECK_TRIG_UP(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.up) +#define CPad_CHECK_TRIG_DOWN(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.down) +#define CPad_CHECK_TRIG_RIGHT(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.right) +#define CPad_CHECK_TRIG_LEFT(padNo) (g_mDoCPd_cpadInfo[padNo].mButtonTrig.left) int mDoCPd_Create(); int mDoCPd_Read(); diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index 808516fc3..ef2fa36a7 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -557,58 +557,51 @@ bool daAgb_c::FlashCheck() { return false; } -#define MASK_INSERT_BUTTON(field, value, fieldshift, valueshift) \ - temp = (bool)(((value) & (1 << valueshift))); \ - (field) = ((temp << fieldshift) & (1 << fieldshift)) | ((field) & ~(1 << fieldshift)) - /* 800D0734-800D0978 .text FlagsRecv__7daAgb_cFv */ void daAgb_c::FlagsRecv() { - // Nonmatching - regalloc and a couple rlwinms interface_of_controller_pad* pad_p = &g_mDoCPd_cpadInfo[mDoGaC_getPortNo()]; u32 temp_r3 = BigLittleChange(mGbaFlg.field_0x0); - u32 temp_r0 = temp_r3 >> 0x10U; - BOOL temp; - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 4, 0x16); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 5, 0x17); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 7, 0x15); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 6, 0x14); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 0, 0x10); - MASK_INSERT_BUTTON(pad_p->mButtonHold1, temp_r3, 7, 0x11); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 2, 0x18); - MASK_INSERT_BUTTON(pad_p->mButtonHold0, temp_r3, 1, 0x19); - MASK_INSERT_BUTTON(pad_p->mButtonHold1, temp_r3, 4, 0x13); - temp = !!temp; + u16 buttons = temp_r3 >> 0x10U; + pad_p->mButtonHold.up = buttons & 0x0040; + pad_p->mButtonHold.down = buttons & 0x0080; + pad_p->mButtonHold.left = buttons & 0x0020; + pad_p->mButtonHold.right = buttons & 0x0010; + pad_p->mButtonHold.a = buttons & 0x0001; + pad_p->mButtonHold.b = buttons & 0x0002; + pad_p->mButtonHold.r = buttons & 0x0100; + pad_p->mButtonHold.l = buttons & 0x0200; + pad_p->mButtonHold.start = buttons & 0x0008; - u32 temp_r5 = temp_r0 & (temp_r0 ^ field_0x65a); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 4, 0x06); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 5, 0x07); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 7, 0x05); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 6, 0x04); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 0, 0x00); - MASK_INSERT_BUTTON(pad_p->mButtonTrig1, temp_r5, 7, 0x01); - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r5, 2, 0x08); - u16 temp_r6 = temp_r5 & 0xFFFF; - MASK_INSERT_BUTTON(pad_p->mButtonTrig0, temp_r6, 1, 0x09); - MASK_INSERT_BUTTON(pad_p->mButtonTrig1, temp_r6, 4, 0x03); + // Buttons just pressed this frame + u16 triggeredButtons = buttons & (buttons ^ mPrevButtons); + pad_p->mButtonTrig.up = triggeredButtons & 0x0040; + pad_p->mButtonTrig.down = triggeredButtons & 0x0080; + pad_p->mButtonTrig.left = triggeredButtons & 0x0020; + pad_p->mButtonTrig.right = triggeredButtons & 0x0010; + pad_p->mButtonTrig.a = triggeredButtons & 0x0001; + pad_p->mButtonTrig.b = triggeredButtons & 0x0002; + pad_p->mButtonTrig.r = triggeredButtons & 0x0100; + pad_p->mButtonTrig.l = triggeredButtons & 0x0200; + pad_p->mButtonTrig.start = triggeredButtons & 0x0008; g_mDoCPd_cpadInfo[mDoGaC_getPortNo()].mGamepadErrorFlags = 0; - field_0x65a = temp_r0; + mPrevButtons = buttons; field_0x673 = mGbaFlg.field_0x3 != 0; field_0x630 = BigLittleChange(mGbaFlg.field_0x4) >> 0x10; field_0x632 = BigLittleChange(mGbaFlg.field_0x6) >> 0x10; - field_0x67a = (mGbaFlg.field_0x2 >> 2); + field_0x67a = mGbaFlg.field_0x2.m2; - if (!dComIfGs_isEventBit(0x1708) && ((mGbaFlg.field_0x2 >> 3) & 1)) { + if (!dComIfGs_isEventBit(0x1708) && mGbaFlg.field_0x2.m3) { dComIfGs_onEventBit(0x1708); } - if (!dComIfGs_isEventBit(0x1A10) && ((mGbaFlg.field_0x2 >> 4) & 1)) { + if (!dComIfGs_isEventBit(0x1A10) && mGbaFlg.field_0x2.m4) { dComIfGs_onEventBit(0x1A10); } - if (!dComIfGs_isEventBit(0x1A08) && ((mGbaFlg.field_0x2 >> 5) & 1)) { + if (!dComIfGs_isEventBit(0x1A08) && mGbaFlg.field_0x2.m5) { dComIfGs_onEventBit(0x1A08); } } diff --git a/src/d/actor/d_a_npc_md.cpp b/src/d/actor/d_a_npc_md.cpp index 34d10459f..2f1e21d57 100644 --- a/src/d/actor/d_a_npc_md.cpp +++ b/src/d/actor/d_a_npc_md.cpp @@ -779,9 +779,8 @@ BOOL daNpc_Md_c::flyCheck() { } /* 0000362C-00003648 .text mirrorCancelCheck__10daNpc_Md_cFv */ -BOOL daNpc_Md_c::mirrorCancelCheck() { - /* Nonmatching */ - return CPad_CHECK_TRIG_B(0); +bool daNpc_Md_c::mirrorCancelCheck() { + return CPad_CHECK_TRIG_B(0) != false; } /* 00003648-00003674 .text setWingEmitter__10daNpc_Md_cFv */ diff --git a/src/m_Do/m_Do_controller_pad.cpp b/src/m_Do/m_Do_controller_pad.cpp index b6a82e344..b9d099ac8 100644 --- a/src/m_Do/m_Do_controller_pad.cpp +++ b/src/m_Do/m_Do_controller_pad.cpp @@ -28,39 +28,33 @@ inline void mDoCPd_TRIGGER_CONV(u8 analog, f32& param_1) { } } -#define MASK_INSERT_BUTTON(field, value, fieldshift, valueshift) \ - temp = (bool)(((value) & (1 << valueshift))); \ - (field) = ((temp << fieldshift) & (1 << fieldshift)) | ((field) & ~(1 << fieldshift)) - /* 80007598-800078C0 .text mDoCPd_Convert__FP27interface_of_controller_padP10JUTGamePad */ static s32 mDoCPd_Convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad) { - // the temp var stuff is hacky but seems required for matching codegen, including the !!temp at the end - BOOL temp; - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 4, 3); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 5, 2); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 7, 0); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 6, 1); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 3, 4); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 2, 5); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 1, 6); - MASK_INSERT_BUTTON(pInterface->mButtonHold0, pPad->mButton.mButton, 0, 8); - MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 7, 9); - MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 6, 10); - MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 5, 11); - MASK_INSERT_BUTTON(pInterface->mButtonHold1, pPad->mButton.mButton, 4, 12); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 4, 3); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 5, 2); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 7, 0); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 6, 1); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 3, 4); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 2, 5); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 1, 6); - MASK_INSERT_BUTTON(pInterface->mButtonTrig0, pPad->mButton.mTrigger, 0, 8); - MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 7, 9); - MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 6, 10); - MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 5, 11); - MASK_INSERT_BUTTON(pInterface->mButtonTrig1, pPad->mButton.mTrigger, 4, 12); - temp = !!temp; + pInterface->mButtonHold.up = pPad->mButton.mButton & CButton::DPAD_UP; + pInterface->mButtonHold.down = pPad->mButton.mButton & CButton::DPAD_DOWN; + pInterface->mButtonHold.left = pPad->mButton.mButton & CButton::DPAD_LEFT; + pInterface->mButtonHold.right = pPad->mButton.mButton & CButton::DPAD_RIGHT; + pInterface->mButtonHold.z = pPad->mButton.mButton & CButton::Z; + pInterface->mButtonHold.r = pPad->mButton.mButton & CButton::R; + pInterface->mButtonHold.l = pPad->mButton.mButton & CButton::L; + pInterface->mButtonHold.a = pPad->mButton.mButton & CButton::A; + pInterface->mButtonHold.b = pPad->mButton.mButton & CButton::B; + pInterface->mButtonHold.x = pPad->mButton.mButton & CButton::X; + pInterface->mButtonHold.y = pPad->mButton.mButton & CButton::Y; + pInterface->mButtonHold.start = pPad->mButton.mButton & CButton::START; + + pInterface->mButtonTrig.up = pPad->mButton.mTrigger & CButton::DPAD_UP; + pInterface->mButtonTrig.down = pPad->mButton.mTrigger & CButton::DPAD_DOWN; + pInterface->mButtonTrig.left = pPad->mButton.mTrigger & CButton::DPAD_LEFT; + pInterface->mButtonTrig.right = pPad->mButton.mTrigger & CButton::DPAD_RIGHT; + pInterface->mButtonTrig.z = pPad->mButton.mTrigger & CButton::Z; + pInterface->mButtonTrig.r = pPad->mButton.mTrigger & CButton::R; + pInterface->mButtonTrig.l = pPad->mButton.mTrigger & CButton::L; + pInterface->mButtonTrig.a = pPad->mButton.mTrigger & CButton::A; + pInterface->mButtonTrig.b = pPad->mButton.mTrigger & CButton::B; + pInterface->mButtonTrig.x = pPad->mButton.mTrigger & CButton::X; + pInterface->mButtonTrig.y = pPad->mButton.mTrigger & CButton::Y; + pInterface->mButtonTrig.start = pPad->mButton.mTrigger & CButton::START; pInterface->mMainStickPosX = pPad->getMainStickX(); pInterface->mMainStickPosY = pPad->getMainStickY();