summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2024-10-19 15:39:43 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2024-10-19 15:39:43 -0400
commita3560350c729be23c8ed294226fdf4bdd30a8dfd (patch)
treed483e64f16d4cd22831d86948a5e54e84bd5627d
parentde34ef5fb6c9b7ca7d5a358e7b20aa516b369cf3 (diff)
d_a_sail and d_a_pirate_flag cleanup
-rw-r--r--include/d/actor/d_a_pirate_flag.h8
-rw-r--r--include/d/actor/d_a_sail.h14
-rw-r--r--src/d/actor/d_a_pirate_flag.cpp10
-rw-r--r--src/d/actor/d_a_sail.cpp14
4 files changed, 23 insertions, 23 deletions
diff --git a/include/d/actor/d_a_pirate_flag.h b/include/d/actor/d_a_pirate_flag.h
index 3f23f1e5..753fbf88 100644
--- a/include/d/actor/d_a_pirate_flag.h
+++ b/include/d/actor/d_a_pirate_flag.h
@@ -20,16 +20,16 @@ public:
virtual ~daPirate_Flag_packet_c() {}
- void changeCurrentPos() { m87E ^= 1; }
- s16 getEscapeNrmAngle() { return m87A; }
MtxP getMtx() { return mMtx; }
+ void setTevStr(dKy_tevstr_c* i_tevStr) { mTevStr = i_tevStr; }
+ cXyz* getPos() { return mPos[m87E]; }
cXyz* getNrm() { return mNrm[m87E]; }
cXyz* getOffsetVec() { return m74C; } // Guessed based on size in debug maps
- cXyz* getPos() { return mPos[m87E]; }
+ s16 getEscapeNrmAngle() { return m87A; }
+ void changeCurrentPos() { m87E ^= 1; }
void setNrmMtx() {
cMtx_YrotS(*calc_mtx, m878);
}
- void setTevStr(dKy_tevstr_c* i_tevStr) { mTevStr = i_tevStr; }
void setCorrectNrmAngle(s16, f32);
void setBackNrm();
diff --git a/include/d/actor/d_a_sail.h b/include/d/actor/d_a_sail.h
index ecbfc59c..25237355 100644
--- a/include/d/actor/d_a_sail.h
+++ b/include/d/actor/d_a_sail.h
@@ -17,12 +17,12 @@ public:
}
Mtx* getMtx() { return &mMtx; }
- cXyz* getNrm() { return m0C74 + (0x54 * m1C3A); }
- cXyz* getPos() { return m00A4 + (0x54 * m1C3A); }
- cXyz* getPosSpd() { return m0884; }
- Mtx* getStickMtx() { return &mStickMtx; }
Mtx* getTexMtx() { return &mTexMtx; }
+ Mtx* getStickMtx() { return &mStickMtx; }
void setTevStr(dKy_tevstr_c* tevStr) { mTevStr = tevStr; }
+ cXyz* getPos() { return mPos[m1C3A]; }
+ cXyz* getPosSpd() { return m0884; }
+ cXyz* getNrm() { return mNrm[m1C3A]; }
void setCorrectNrmAngle(s16, f32);
void setNrmMtx();
@@ -36,10 +36,10 @@ public:
/* 0x0040 */ Mtx mTexMtx;
/* 0x0070 */ Mtx mStickMtx;
/* 0x00A0 */ dKy_tevstr_c* mTevStr;
- /* 0x00A4 */ cXyz m00A4[0x54 * 2];
+ /* 0x00A4 */ cXyz mPos[2][0x54];
/* 0x0884 */ cXyz m0884[0x54];
- /* 0x0C74 */ cXyz m0C74[0x54 * 2];
- /* 0x1454 */ cXyz m1454[0x54 * 2];
+ /* 0x0C74 */ cXyz mNrm[2][0x54];
+ /* 0x1454 */ cXyz m1454[2][0x54];
/* 0x1C34 */ s16 m1C34;
/* 0x1C36 */ s16 m1C36;
/* 0x1C38 */ s16 m1C38;
diff --git a/src/d/actor/d_a_pirate_flag.cpp b/src/d/actor/d_a_pirate_flag.cpp
index 87f2e6c1..ffba34fb 100644
--- a/src/d/actor/d_a_pirate_flag.cpp
+++ b/src/d/actor/d_a_pirate_flag.cpp
@@ -145,7 +145,7 @@ void daPirate_Flag_packet_c::setCorrectNrmAngle(s16 param_0, f32 param_1) {
void daPirate_Flag_packet_c::setBackNrm() {
cXyz* a = getNrm();
cXyz* b = m4F4[m87E];
- for (int i = 0; i < (s32)ARRAY_SIZE(mNrm[0]); i++) {
+ for (int i = 0; i < (s32)ARRAY_SIZE(*mNrm); i++) {
b->setall(0.0f);
*b -= *a;
@@ -473,11 +473,9 @@ static void pirate_flag_move(pirate_flag_class* i_this) {
i_this->mPacket.setBackNrm();
#if VERSION == VERSION_JPN
- // WTH is even happening here? This just seems like an overflow.
- // 7500 is bigger than the total size of pirate_flag_class.
- // 7500 / sizeof(cXyz) = 7500 / 12 = 625 = 25 * 25
- // Each buffer contains 25 elements.
- DCStoreRangeNoSync(i_this->mPacket.getPos(), 7500);
+ // Bug: The number of bytes (0x1D4C) passed here is way too large and causes an overflow.
+ // The below sizeof calculation is a guess as to what led the devs to arriving at this wrong number.
+ DCStoreRangeNoSync(i_this->mPacket.getPos(), sizeof(*i_this->mPacket.mPos) * sizeof(*i_this->mPacket.mNrm) / sizeof(cXyz));
#else
DCStoreRangeNoSync(i_this->mPacket.getPos(), sizeof(*i_this->mPacket.mPos));
DCStoreRangeNoSync(i_this->mPacket.getNrm(), sizeof(*i_this->mPacket.mNrm));
diff --git a/src/d/actor/d_a_sail.cpp b/src/d/actor/d_a_sail.cpp
index b57bdbb7..44dd18de 100644
--- a/src/d/actor/d_a_sail.cpp
+++ b/src/d/actor/d_a_sail.cpp
@@ -465,8 +465,8 @@ void daSail_packet_c::setNrmMtx() {
/* 00000398-00000424 .text setBackNrm__15daSail_packet_cFv */
void daSail_packet_c::setBackNrm() {
- cXyz* vtxNrm1 = m0C74 + (0x54 * m1C3A);
- cXyz* vtxNrm2 = m1454 + (0x54 * m1C3A);
+ cXyz* vtxNrm1 = getNrm();
+ cXyz* vtxNrm2 = m1454[m1C3A];
for (int i = 0; i < 0x54; i++) {
vtxNrm2->setall(0.0f);
*vtxNrm2 -= *vtxNrm1;
@@ -897,11 +897,13 @@ static void sail_move(sail_class* i_this) {
i_this->mSailPacket.setBackNrm();
#if VERSION == VERSION_JPN
- DCStoreRangeNoSync(i_this->mSailPacket.getPos(), 0x14ac0);
+ // Bug: The number of bytes (0x14AC0) passed here is way too large and causes an overflow.
+ // The below sizeof calculation is a guess as to what led the devs to arriving at this wrong number.
+ DCStoreRangeNoSync(i_this->mSailPacket.getPos(), sizeof(*i_this->mSailPacket.mPos) * sizeof(*i_this->mSailPacket.mNrm) / sizeof(cXyz));
#else
- DCStoreRangeNoSync(i_this->mSailPacket.getPos() + 0 * 0x54, 0x03f0);
- DCStoreRangeNoSync(i_this->mSailPacket.getPos() + 3 * 0x54, 0x03f0);
- DCStoreRangeNoSync(i_this->mSailPacket.getPos() + 5 * 0x54, 0x03f0);
+ DCStoreRangeNoSync(i_this->mSailPacket.getPos(), sizeof(*i_this->mSailPacket.mPos));
+ DCStoreRangeNoSync(i_this->mSailPacket.getNrm(), sizeof(*i_this->mSailPacket.mNrm));
+ DCStoreRangeNoSync(i_this->mSailPacket.getNrm() + sizeof(i_this->mSailPacket.mNrm) / sizeof(cXyz), sizeof(*i_this->mSailPacket.m1454)); // Fakematch?
#endif
}