diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-09-20 11:53:53 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-09-20 11:53:53 -0400 |
| commit | 600cefbc7dd1e00772c591be90a86f4567d2ab43 (patch) | |
| tree | e8ae834bf980256571cefba4ee74f1d2b840b9cc /src | |
| parent | 9481f3ab62d690bd6534cb0adf7e02db5579b333 (diff) | |
unrelated Bomb Changes
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/a/e/d_a_e_ks.cpp | 14 | ||||
| -rw-r--r-- | src/REL/d/a/e/d_a_e_remly.cpp | 4 | ||||
| -rw-r--r-- | src/REL/d/a/e/d_a_e_sm.cpp | 2 | ||||
| -rw-r--r-- | src/REL/d/a/obj/d_a_obj_tubo.cpp | 2 | ||||
| -rw-r--r-- | src/d/a/d_a_item.cpp | 2 | ||||
| -rw-r--r-- | src/d/a/d_a_player.cpp | 105 | ||||
| -rw-r--r-- | src/d/a/obj/d_a_obj_boomerang.cpp | 2 | ||||
| -rw-r--r-- | src/d/col/bg/d_bg_s_acch.cpp | 24 |
8 files changed, 130 insertions, 25 deletions
diff --git a/src/REL/d/a/e/d_a_e_ks.cpp b/src/REL/d/a/e/d_a_e_ks.cpp index baee6dfc..e35e6123 100644 --- a/src/REL/d/a/e/d_a_e_ks.cpp +++ b/src/REL/d/a/e/d_a_e_ks.cpp @@ -187,7 +187,7 @@ void dAcEKs_c::setStartingState() { changeState(StateID_Move); mCurrentState = mStartingState; mAcch.ClrRoofNone(); - mAcch.SetField_0xD4(55.f); + mAcch.SetRoofCrrHeight(55.f); mAcch.SetGroundUpY(30.f); mAcchCir.SetWall(20.f, 60.f); } break; @@ -199,14 +199,14 @@ void dAcEKs_c::setStartingState() { } mAcch.ClrRoofHit(); mAcch.SetGroundUpY(0.f); - mAcch.SetField_0xD4(0.f); + mAcch.SetRoofCrrHeight(0.f); mAcchCir.SetWall(0.f, 5.f); } break; case EKS_STARTSTATE_PathMove: { mCurrentState = mStartingState; mAcch.ClrRoofNone(); - mAcch.SetField_0xD4(55.f); + mAcch.SetRoofCrrHeight(55.f); mAcch.SetGroundUpY(30.f); mAcchCir.SetWall(20.f, 60.f); changeState(StateID_PathMove); @@ -1789,7 +1789,7 @@ void dAcEKs_c::initializeState_Wait() { mRotation.y = field_0xD8A; mRotation.x = mAng(0); mAcch.ClrRoofHit(); - mAcch.SetField_0xD4(0); + mAcch.SetRoofCrrHeight(0); mAcch.SetGroundUpY(0); setBattleBgmRelated(0); @@ -2042,7 +2042,7 @@ void dAcEKs_c::finalizeState_WakeUp() { mAngle.y = mRotation.y; mAcch.ClrRoofNone(); mAcchCir.SetWall(20, 60); - mAcch.SetField_0xD4(55); + mAcch.SetRoofCrrHeight(55); mAcch.SetGroundUpY(30); } @@ -2116,7 +2116,7 @@ void dAcEKs_c::initializeState_WaitReady() { field_0xDA5 = 0; field_0xD50 = 30; mAcch.ClrRoofHit(); - mAcch.SetField_0xD4(0.f); + mAcch.SetRoofCrrHeight(0.f); mAcch.SetGroundUpY(0.f); field_0xDAD = 0; field_0xDAE = 0; @@ -2853,7 +2853,7 @@ void dAcEKs_c::initializeState_WindBlow() { mAcceleration = -0.5f; mAcch.ClrRoofNone(); mAcchCir.SetWall(20, 60); - mAcch.SetField_0xD4(55); + mAcch.SetRoofCrrHeight(55); mAcch.SetGroundUpY(30); } void dAcEKs_c::executeState_WindBlow() { diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp index 90ad9b28..5df1fc7d 100644 --- a/src/REL/d/a/e/d_a_e_remly.cpp +++ b/src/REL/d/a/e/d_a_e_remly.cpp @@ -208,7 +208,7 @@ int dAcEremly_c::actorCreate() { field_0xA50.z = mPosition.z; mAcchCir.SetWall(mScaleF * 10.f, mScaleF * 60.f); - mAcch.SetField_0xD4(100.f + _weird_zero); + mAcch.SetRoofCrrHeight(100.f + _weird_zero); field_0xB04 = 60.f; if (mIsHorwellsPet == 0) { @@ -1113,7 +1113,7 @@ void dAcEremly_c::initializeState_Fly() { mYOffset = 0.f; mAnmStep = 0; - mAcch.SetField_0xD4(f); + mAcch.SetRoofCrrHeight(f); mVelocity.x = mVelocity.z = 0.f; mSpeed = 0.f; diff --git a/src/REL/d/a/e/d_a_e_sm.cpp b/src/REL/d/a/e/d_a_e_sm.cpp index f63d96b7..af8edaca 100644 --- a/src/REL/d/a/e/d_a_e_sm.cpp +++ b/src/REL/d/a/e/d_a_e_sm.cpp @@ -164,7 +164,7 @@ int dAcEsm_c::actorCreate() { mAcchCir.SetWall(mScaleTarget.y * 100.f, mScaleTarget.x * 100.f); mStts.SetRank(10); mObjAcch.SetGndThinCellingOff(); - mObjAcch.field_0x390 = 1; + mObjAcch.SetWtrChkMode(1); mMaxSpeed = -40.f; diff --git a/src/REL/d/a/obj/d_a_obj_tubo.cpp b/src/REL/d/a/obj/d_a_obj_tubo.cpp index c204164b..91607903 100644 --- a/src/REL/d/a/obj/d_a_obj_tubo.cpp +++ b/src/REL/d/a/obj/d_a_obj_tubo.cpp @@ -320,7 +320,7 @@ void dAcOtubo_c::finalizeState_Grab() { mSph.OnAtSet(); } mObjAcch.ClrRoofNone(); - mObjAcch.field_0x0D4 = 50.f; + mObjAcch.SetRoofCrrHeight(50.f); } void dAcOtubo_c::initializeState_Put() {} diff --git a/src/d/a/d_a_item.cpp b/src/d/a/d_a_item.cpp index 3de0f79f..1606c315 100644 --- a/src/d/a/d_a_item.cpp +++ b/src/d/a/d_a_item.cpp @@ -774,7 +774,7 @@ int dAcItem_c::create() { getItemFlagStruct(getItemId())->field_0x01 * 0.5f, getItemFlagStruct(getItemId())->field_0x00 * 0.6f ); mObjAcch.Set(this, 1, &mAcchCir); - mObjAcch.field_0x0D4 = 50.0f; + mObjAcch.SetRoofCrrHeight(50.0f); mObjAcch.SetClrSpeedY(); mObjAcch.SetField_0xC(4); mAcceleration = -2.0f; diff --git a/src/d/a/d_a_player.cpp b/src/d/a/d_a_player.cpp index acffedc2..c11544aa 100644 --- a/src/d/a/d_a_player.cpp +++ b/src/d/a/d_a_player.cpp @@ -1,5 +1,14 @@ #include "d/a/d_a_player.h" +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/a/obj/d_a_obj_bomb.h" +#include "f/f_profile.h" +#include "f/f_profile_name.h" + +#include <stddef.h> + dAcPy_c *dAcPy_c::LINK; // TODO: Disable this pragma when the ctors are matching @@ -8,3 +17,99 @@ dAcPy_c::dAcPy_c() {} #pragma dont_inline reset dAcPy_c::~dAcPy_c() {} + +namespace { +bool isProfile(dAcBase_c *pActor, ProfileName profile) { + return pActor && pActor->mProfileName == profile; +} +} // namespace + +bool dAcPy_c::ObjectArray::insert(dAcObjBase_c *pObj) { + for (size_t i = 0; i < sNumObjects; ++i) { + if (mObjs[i].get() != pObj) { + continue; + } + + if (isProfile(pObj, fProfile::BOMB)) { + mCounter[i] = MAX(0, static_cast<dAcBomb_c *>(pObj)->get0xA44()) + 3; + } else { + mCounter[i] = 90; + } + return true; + } + + for (size_t i = 0; i < sNumObjects; ++i) { + if (mObjs[i].get() != nullptr) { + continue; + } + + mObjs[i].link(pObj); + + if (isProfile(pObj, fProfile::BOMB)) { + mCounter[i] = MAX(0, static_cast<dAcBomb_c *>(pObj)->get0xA44()) + 3; + } else { + mCounter[i] = 90; + } + return true; + } + + return false; +} + +void dAcPy_c::ObjectArray::execute() { + // Unlink Object as needed + for (int i = 0; i < sNumObjects; ++i) { + dAcObjBase_c *pObj = mObjs[i].get(); + if (isProfile(pObj, fProfile::BOMB)) { + if (static_cast<dAcBomb_c *>(pObj)->isState(dAcBomb_c::StateID_Explode)) { + mObjs[i].unlink(); + mCounter[i] = 0; + } + } else { + if (--mCounter[i] == 0) { + mObjs[i].unlink(); + } + } + } + + // Try to bubble objects left + // This seems buggy if multiple objects arent link consecutively + int lastOccupiedObject = sNumObjects; + for (int i = sNumObjects - 1; i >= 0; --i) { + // Skip Occupied objects + if (mObjs[i].isLinked()) { + lastOccupiedObject = i; + continue; + } + + if (lastOccupiedObject != sNumObjects) { + mObjs[i].link(mObjs[lastOccupiedObject].get()); + mCounter[i] = mCounter[lastOccupiedObject]; + mObjs[lastOccupiedObject].unlink(); + + lastOccupiedObject = sNumObjects; + } + } +} + +dAcObjBase_c *dAcPy_c::ObjectArray::get(s32 index) { + if (index >= sNumObjects) { + return nullptr; + } + + return mObjs[index].get(); +} + +void dAcPy_c::ObjectArray::removeBombs() { + for (int i = 0; i < sNumObjects; ++i) { + dAcObjBase_c *pObj = get(i); + if (pObj != nullptr) { + if (pObj->mProfileName == fProfile::BOMB) { + dAcBomb_c *pBomb = static_cast<dAcBomb_c *>(pObj); + pBomb->deleteRequest(); + pBomb->mEffect1.remove(true); + pBomb->mEffect2.remove(true); + } + } + } +} diff --git a/src/d/a/obj/d_a_obj_boomerang.cpp b/src/d/a/obj/d_a_obj_boomerang.cpp index fa901893..e1bb4ab2 100644 --- a/src/d/a/obj/d_a_obj_boomerang.cpp +++ b/src/d/a/obj/d_a_obj_boomerang.cpp @@ -184,7 +184,7 @@ int dAcBoomerang_c::create() { mAcch.Set(this, 1, &mAcchCir); mAcch.SetGroundUpY(20.f); - mAcch.SetField_0xD4(30.f); + mAcch.SetRoofCrrHeight(30.f); mAcch.ClrRoofNone(); mAcch.SetBeetle(); mAcch.OnWaterGrp(); diff --git a/src/d/col/bg/d_bg_s_acch.cpp b/src/d/col/bg/d_bg_s_acch.cpp index 63242f60..0746b8ae 100644 --- a/src/d/col/bg/d_bg_s_acch.cpp +++ b/src/d/col/bg/d_bg_s_acch.cpp @@ -53,19 +53,19 @@ dBgS_Acch::dBgS_Acch() field_0x0A8(0.0f), field_0x0AC(0.0f), mGroundHeight(-1e9f), - field_0x0B4(120.0f), + mGndChkOffset(120.0f), field_0x0C8(0.0f), field_0x0CC(0.0f), mRoofHeight(1e9f), - field_0x0D4(1.0f), + mRoofCrrHeight(1.0f), field_0x0D8(0.0f), mpOutPolyInfo(nullptr), mRoofH_0x0E0(0.0f), mGroundH_0x0E4(0.0f), field_0x0E8(1e9f), field_0x1D0(-1.0f), - field_0x2F4(1000.0f), - field_0x390(0), + mWtrCheckOffset(1000.0f), + mWtrMode(0), field_0x394(0) { SetPolyPassChk(GetPolyPassChkInfo()); SetGrpPassChk(GetGrpPassChkInfo()); @@ -159,7 +159,7 @@ void dBgS_Acch::GroundCheck(dBgS &bgs, bool param2) { mVec3_c gnd_pos = *GetPos(); // This Ordering is weird - f32 temp = (field_0x0B4 - field_0x0A8) + field_0x0AC; + f32 temp = (mGndChkOffset - field_0x0A8) + field_0x0AC; if (mFlags & ACCH_FLAG_0x20000) { if (temp <= 1.1f) { temp = 1.1f; @@ -199,7 +199,7 @@ void dBgS_Acch::GroundCheck(dBgS &bgs, bool param2) { } if (gnd_pos.y < mpPos->y + field_0x0E8 && - mpPos->y + field_0x0E8 < (field_0x0B4 - field_0x0A8) + field_0x0AC + mpPos->y) { + mpPos->y + field_0x0E8 < (mGndChkOffset - field_0x0A8) + field_0x0AC + mpPos->y) { gnd_pos.y = mpPos->y + field_0x0E8; } @@ -277,11 +277,11 @@ void dBgS_Acch::GroundRoofProc(dBgS &bgs, bool param2) { mRoofHeight = bgs.RoofChk(&mRoof); if (mRoofHeight != 1e9f) { - if (mpPos->y + field_0x0D4 > mRoofHeight) { - field_0x0D8 = mRoofHeight - field_0x0D4; + if (mpPos->y + mRoofCrrHeight > mRoofHeight) { + field_0x0D8 = mRoofHeight - mRoofCrrHeight; SetRoofHit(); - } else if (field_0x0C8 + field_0x0D4 > mRoofHeight) { - field_0x0D8 = mRoofHeight - field_0x0D4; + } else if (field_0x0C8 + mRoofCrrHeight > mRoofHeight) { + field_0x0D8 = mRoofHeight - mRoofCrrHeight; SetRoofHit(); } } @@ -414,8 +414,8 @@ void dBgS_Acch::SphCheck() { if (height > field_0x0A8 && field_0x0A8 > 0.0f) { height = field_0x0A8; } - if (height > field_0x0D4 && field_0x0D4 > 1.0f) { - height = field_0x0D4; + if (height > mRoofCrrHeight && mRoofCrrHeight > 1.0f) { + height = mRoofCrrHeight; } height *= 0.8f; } |
