From a3560350c729be23c8ed294226fdf4bdd30a8dfd Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 19 Oct 2024 15:39:43 -0400 Subject: [PATCH] d_a_sail and d_a_pirate_flag cleanup --- include/d/actor/d_a_pirate_flag.h | 8 ++++---- include/d/actor/d_a_sail.h | 14 +++++++------- src/d/actor/d_a_pirate_flag.cpp | 10 ++++------ src/d/actor/d_a_sail.cpp | 14 ++++++++------ 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 3f23f1e5a..753fbf88a 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 ecbfc59c1..252373552 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 87f2e6c12..ffba34fb0 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 b57bdbb7c..44dd18de9 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 }