// // Generated by dtk // Translation Unit: m_Do_controller_pad.cpp // #include "m_Do/m_Do_controller_pad.h" #include "JSystem/JUtility/JUTGba.h" #include "SSystem/SComponent/c_lib.h" #include "f_ap/f_ap_game.h" #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_gba_com.h" #include "m_Do/m_Do_main.h" JUTGamePad* g_mDoCPd_gamePad[4]; interface_of_controller_pad g_mDoCPd_cpadInfo[4]; inline void mDoCPd_ANALOG_CONV(u8 analog, f32& param_1) { param_1 = analog * (1.0f / 15.0f); if (param_1 > 1.0f) { param_1 = 1.0f; } } inline void mDoCPd_TRIGGER_CONV(u8 analog, f32& param_1) { param_1 = analog * 0.0071428571827709675f; if (param_1 > 1.0f) { param_1 = 1.0f; } } #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->mMainStickPosX = pPad->getMainStickX(); pInterface->mMainStickPosY = pPad->getMainStickY(); pInterface->mMainStickValue = pPad->getMainStickValue(); pInterface->mMainStickAngle = pPad->getMainStickAngle(); pInterface->mCStickPosX = pPad->getSubStickX(); pInterface->mCStickPosY = pPad->getSubStickY(); pInterface->mCStickValue = pPad->getSubStickValue(); pInterface->mCStickAngle = pPad->getSubStickAngle(); mDoCPd_ANALOG_CONV(pPad->getAnalogA(), pInterface->mAnalogA); mDoCPd_ANALOG_CONV(pPad->getAnalogB(), pInterface->mAnalogB); mDoCPd_TRIGGER_CONV(pPad->getAnalogL(), pInterface->mTriggerLeft); mDoCPd_TRIGGER_CONV(pPad->getAnalogR(), pInterface->mTriggerRight); pInterface->mGamepadErrorFlags = pPad->getErrorStatus(); return 1; } /* 800078C0-80007A70 .text mDoCPd_Read__Fv */ int mDoCPd_Read() { JUTGamePad::read(); if (!mDoRst::isReset() && mDoRst::is3ButtonReset()) { JUTGamePad* pad = JUTGamePad::getGamePad(mDoRst::get3ButtonResetPort()); if (!pad->isPushing3ButtonReset()) { mDoRst::off3ButtonReset(); } } JUTGamePad** pad = g_mDoCPd_gamePad; interface_of_controller_pad* interface = g_mDoCPd_cpadInfo; for (int i = 0; i < 4; i++) { if (*pad == NULL) { cLib_memSet(interface++, 0, sizeof(interface_of_controller_pad)); } else { mDoCPd_Convert(interface++, *pad); } pad++; } for (int i = 0; i < 4; i++) { f32 threshold_lo = g_HIO.mTriggerThreshLo; f32 threshold_hi = g_HIO.mTriggerThreshHi; f32 trigL = g_mDoCPd_cpadInfo[i].mTriggerLeft; g_mDoCPd_cpadInfo[i].mTrigLockL = false; g_mDoCPd_cpadInfo[i].mTrigLockR = false; if (trigL > threshold_lo) { if (g_mDoCPd_cpadInfo[i].mHoldLockL != true) { g_mDoCPd_cpadInfo[i].mTrigLockL = true; } g_mDoCPd_cpadInfo[i].mHoldLockL = true; } else if (trigL < threshold_hi) { g_mDoCPd_cpadInfo[i].mHoldLockL = false; } f32 trigR = g_mDoCPd_cpadInfo[i].mTriggerRight; if (trigR > threshold_lo) { if (g_mDoCPd_cpadInfo[i].mHoldLockR != true) { g_mDoCPd_cpadInfo[i].mTrigLockR = true; } g_mDoCPd_cpadInfo[i].mHoldLockR = true; } else if (trigR < threshold_hi) { g_mDoCPd_cpadInfo[i].mHoldLockR = false; } } g_mDoGaC_gbaCom.mDoGaC_Connect(); return 1; } /* 80007A70-80007BBC .text mDoCPd_Create__Fv */ // NONMATCHING - weird ending int mDoCPd_Create() { JUTGamePad::mSuppressPadReset = 1; JUTGamePad* pad = new JUTGamePad(JUTGamePad::Port_1); g_mDoCPd_gamePad[0] = pad; g_mDoCPd_gamePad[1] = NULL; if (mDoMain::developmentMode) { g_mDoCPd_gamePad[2] = new JUTGamePad(JUTGamePad::Port_3); g_mDoCPd_gamePad[3] = new JUTGamePad(JUTGamePad::Port_4); } else { g_mDoCPd_gamePad[2] = NULL; g_mDoCPd_gamePad[3] = NULL; } JUTGamePad::setAnalogMode(3); #if VERSION == VERSION_JPN JUTGamePad::clearResetOccurred(); JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); #else if (!mDoRst::isReset()) { JUTGamePad::clearResetOccurred(); JUTGamePad::setResetCallback(mDoRst_resetCallBack, NULL); } #endif JUTGba::create(); g_mDoGaC_gbaCom.mDoGaC_Initial(TestDataManager, 16); for (int i = 0; i < 4; i++) { g_mDoCPd_cpadInfo[i].mHoldLockL = g_mDoCPd_cpadInfo[i].mTrigLockL = false; g_mDoCPd_cpadInfo[i].mHoldLockR = g_mDoCPd_cpadInfo[i].mTrigLockR = false; } return 1; }