summaryrefslogtreecommitdiff
path: root/src/d/d_pad.cpp
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2025-06-15 17:25:25 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2025-06-15 17:25:25 -0400
commit4766819367d5887e595bf11c3612807d2bff6d16 (patch)
tree753b15c230f6b92a978c7091d48b60f814ad9225 /src/d/d_pad.cpp
parent48493a4fc4e7c317cbdf9a224dd51a781aef6280 (diff)
d_reset naming
Diffstat (limited to 'src/d/d_pad.cpp')
-rw-r--r--src/d/d_pad.cpp86
1 files changed, 77 insertions, 9 deletions
diff --git a/src/d/d_pad.cpp b/src/d/d_pad.cpp
index e7ab853b..5b90deef 100644
--- a/src/d/d_pad.cpp
+++ b/src/d/d_pad.cpp
@@ -1,17 +1,19 @@
#include "d/d_pad.h"
#include "common.h"
+#include "d/a/d_a_player.h"
#include "d/d_gfx.h"
#include "d/snd/d_snd_player_mgr.h"
#include "egg/core/eggController.h"
#include "egg/core/eggHeap.h"
+#include "m/m_angle.h"
+#include "m/m_mtx.h"
#include "m/m_pad.h"
#include "m/m_vec.h"
#include "rvl/KPAD/KPAD.h"
+#include "rvl/MTX/vec.h"
#include "rvl/WPAD/WPAD.h"
-#include "rvl/WPAD.h"
-
namespace dPad {
ex_c ex_c::m_ex[4];
@@ -118,14 +120,80 @@ void beginPad_BR() {
}
}
- ex_c::m_ex[0].fn_800572A0();
+ dPad::ex_c &ex = ex_c::m_ex[0];
+ ex.fn_800572A0();
if (mPad::getCore(0)->isConnected()) {
- ex_c::m_ex[0].getUnifiedWpadStatus(0);
- ex_c::m_ex[0].fn_80059300(0);
- ex_c::m_ex[0].fn_80056AF0(0);
- ex_c::m_ex[0].fn_80056B90(0);
- ex_c::m_ex[0].fn_80056CE0(0);
- ex_c::m_ex[0].fn_80056DF0(0);
+ ex.getUnifiedWpadStatus(0);
+ ex.fn_80059300(0);
+ ex.fn_80056AF0(0);
+ ex.fn_80056B90(0);
+ ex.fn_80056CE0(0);
+ ex.fn_80056DF0(0);
+ bool isDpdReviseEnabled = KPADIsEnableMplsDpdRevise(0) >= 0.f;
+ if (ex.field_0x22CE) {
+ if (isDpdReviseEnabled) {
+ KPADDisableMplsDpdRevise(0);
+ }
+ } else {
+ if (!isDpdReviseEnabled) {
+ KPADEnableMplsDpdRevise(0);
+ }
+ }
+ ex.field_0x22CE = false;
+
+ const dAcPy_c *player = dAcPy_c::GetLink();
+ if (player && player->isAttacking()) {
+ mMtx_c m;
+ m.XrotS(mAng::deg2short(-30.f));
+ mVec3_c baseZ;
+ KPADVec kpadvec;
+ baseZ.x = m.m[0][2];
+ baseZ.y = m.m[1][2];
+ baseZ.z = m.m[2][2];
+ kpadvec[2].x = m.m[0][2];
+ kpadvec[2].y = m.m[1][2];
+ kpadvec[2].z = m.m[2][2];
+ mVec3_c tmpCross;
+ VECCrossProduct(ex.field_0x2268, baseZ, tmpCross);
+
+ if (0.05f < VECMag(tmpCross)) {
+ tmpCross.normalize();
+ kpadvec[0].x = tmpCross.x;
+ kpadvec[0].y = tmpCross.y;
+ kpadvec[0].z = tmpCross.z;
+ } else {
+ kpadvec[0].x = baseZ.x;
+ kpadvec[0].y = baseZ.y;
+ kpadvec[0].z = baseZ.z;
+ }
+ tmpCross.x = kpadvec[0].x;
+ tmpCross.y = kpadvec[0].y;
+ tmpCross.z = kpadvec[0].z;
+
+ mVec3_c tmpCross2;
+ VECCrossProduct(baseZ, tmpCross, tmpCross2);
+ if (VECMag(tmpCross2) > 0.05f) {
+ tmpCross2.normalize();
+ kpadvec[1].x = tmpCross2.x;
+ kpadvec[1].y = tmpCross2.y;
+ kpadvec[1].z = tmpCross2.z;
+ } else {
+ kpadvec[1].x = baseZ.x;
+ kpadvec[1].y = baseZ.y;
+ kpadvec[1].z = baseZ.z;
+ }
+ tmpCross2.x = kpadvec[1].x;
+ tmpCross2.y = kpadvec[1].y;
+ tmpCross2.z = kpadvec[1].z;
+
+ KPADSetMplsDirReviseBase(0, kpadvec);
+ KPADEnableMplsDpdRevise(0);
+ } else {
+ disableMplsDirRevise(0);
+ }
+
+ KPADEnableMplsAccRevise(0);
+ KPADSetMplsAccReviseParam(0, 0.03f, 0.4f);
}
ex_c::m_current_ex = &ex_c::m_ex[mPad::getCurrentCoreID()];