diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-09-24 18:15:38 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-09-24 18:15:38 -0400 |
| commit | e9199fba27c8f193dc0c7d36daf73006d8dc5e19 (patch) | |
| tree | 32bc11c6d45b2cc14b8a2139072f787b558d462e /include | |
| parent | fe566ba5dbc764a01774643f8a47b7ff5d53fd87 (diff) | |
| parent | df3d2023e89b5b89f2ecb9f53faa9b0e61e2c958 (diff) | |
Merge remote-tracking branch 'upstream/HEAD' into d_a_e_skytail
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/a/d_a_bombf.h | 3 | ||||
| -rw-r--r-- | include/d/a/d_a_player.h | 60 | ||||
| -rw-r--r-- | include/d/a/e/d_a_en_base.h | 6 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_base.h | 3 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_bomb.h | 137 | ||||
| -rw-r--r-- | include/d/col/bg/d_bg_pc.h | 1 | ||||
| -rw-r--r-- | include/d/col/bg/d_bg_s_acch.h | 27 | ||||
| -rw-r--r-- | include/d/col/c/c_cc_d.h | 17 | ||||
| -rw-r--r-- | include/d/col/c/c_m3d_g_pla.h | 7 | ||||
| -rw-r--r-- | include/d/col/cc/d_cc_s.h | 3 | ||||
| -rw-r--r-- | include/d/d_linkage.h | 27 | ||||
| -rw-r--r-- | include/d/d_player_act.h | 11 | ||||
| -rw-r--r-- | include/d/d_stage.h | 7 | ||||
| -rw-r--r-- | include/d/d_vec.h | 11 | ||||
| -rw-r--r-- | include/d/lyt/meter/d_lyt_meter_item_select.h | 3 | ||||
| -rw-r--r-- | include/d/t/d_t_alldie.h | 32 | ||||
| -rw-r--r-- | include/d/t/d_t_view_clip.h | 49 | ||||
| -rw-r--r-- | include/s/s_State.hpp | 10 | ||||
| -rw-r--r-- | include/toBeSorted/minigame_mgr.h | 34 | ||||
| -rw-r--r-- | include/toBeSorted/time_area_mgr.h | 4 |
20 files changed, 389 insertions, 63 deletions
diff --git a/include/d/a/d_a_bombf.h b/include/d/a/d_a_bombf.h index 5a0d6c54..9b7897ec 100644 --- a/include/d/a/d_a_bombf.h +++ b/include/d/a/d_a_bombf.h @@ -12,7 +12,6 @@ public: dAcBombf_c() : mStateMgr(*this) {} virtual ~dAcBombf_c() {} virtual bool createHeap() override; - virtual int create() override; virtual int actorExecute() override; virtual int draw() override; virtual int doDelete() override; @@ -31,7 +30,7 @@ private: /* 0x394 */ UNKWORD field_0x394; /* 0x398 */ cBgS_PolyInfo field_0x398; /* 0x3C4 */ TimeAreaStruct mTimeAreaStruct; - /* 0x3D0 */ bool field_0x3D0; + /* 0x3D0 */ bool mIsUnderground; /* 0x3D1 */ u8 mDespawnSceneFlag; /* 0x3D2 */ u8 field_0x3D2; /* 0x3D3 */ u8 field_0x3D3; diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index e5e6669c..69849bc9 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -4,6 +4,7 @@ #include "common.h" #include "d/a/d_a_base.h" #include "d/a/d_a_item.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/col/c/c_bg_s_poly_info.h" #include "d/d_player_mdl.h" #include "m/m_angle.h" @@ -32,13 +33,44 @@ public: /* vt 0x314 */ virtual void vt_0x314(); /* vt 0x318 */ virtual void vt_0x318(); + struct ObjectArray { + static const size_t sNumObjects = 16; + + bool insert(dAcObjBase_c *); + void execute(); + dAcObjBase_c *get(s32 index); + void removeBombs(); + + dAcObjRef_c mObjs[sNumObjects]; + u32 mCounter[sNumObjects]; + }; + protected: - /* 0x137C */ u8 _0x137C[0x16F0 - 0x137C]; + /* 0x137C */ ObjectArray mOwnedObjects; + /* 0x147C */ ObjectArray mOwnedProjectiles; + /* 0x157C */ u8 _0x157C[0x16F0 - 0x157C]; /* 0x16F0 */ nw4r::g3d::ResFile mHeldResFile; /* 0x16F4 */ u8 _0x16F4[0x4564 - 0x16F4]; /* 0x4564 */ f32 field_0x4564; public: + // Bomb Function [0x80202CA0 - 0x80202DF0?] + static f32 getBombDistanceUnknown0(); + static s32 getBombExplodeTimer(); + static f32 getBombAcceleration(); + static f32 getBombMaxSpeed(); + static f32 getBombUnknown0_0(); + static f32 getBombUnknown0_1(); + static f32 getBombUnknown1_0(); + static f32 getBombUnknown1_1(); + static f32 getBombAcceleration_1(); + static f32 getBombMaxSpeed_1(); + static f32 getBombBounceSpeed(); + static f32 getBombParticleScale(); + static f32 getBombExplodeRadius(); + static f32 getBombStopSpeedY(); + static f32 getBombMaxSpeedY(); + // Beetle Functions [0x8021AA70 - 0x8021BE20] s16 getBeetleFlightTime(); mAng getBeetleAngle0(); @@ -58,6 +90,7 @@ public: void setBeetleFlashClr(const mColor &); void setBeetleBackAnim(); s32 getBeetleWarningTimeLeft(); + void setBeetleReleasedObject(dAcObjBase_c *pObj); // Item select/equip/use functions [0x801E3160 - 0x801E7AD0] ? static s32 calcItemWheelSelection(bool reset, s32 numOptions); @@ -75,6 +108,20 @@ public: f32 fn_802097C0(); // 1000.0f f32 fn_802097D0(); // 4000.0f + // Minigame Functions [0x8023BB60 - 0x8023BDD0] + static bool isInMinigameInsectCapture(); + static bool isInMinigamePumpkinCarry(); + static bool isInMinigameBambooCutting(); + static bool isInMinigameThrillDigger(); + static bool isInMinigameFunFunIsland(); + static bool isInMinigameHouseCleaning(); + static bool isInMinigameTrialTimeAttack(); + static bool isInMinigameBossRush(); + static bool isInMinigamePumpkinArchery(); + static bool isInMinigameHarpPlaying(); + static bool isInMinigameRollerCoaster(); + static bool isInMinigameSprialChargeTutorial(); + public: f32 getField_0x4564() const { return field_0x4564; @@ -117,6 +164,14 @@ public: return LINK2; } + static bool insertOwnedObject(dAcObjBase_c *pObj) { + return LINK2->mOwnedObjects.insert(pObj); + } + + ObjectArray &getOwnedObjects() { + return mOwnedObjects; + } + void onShieldUpdate(); static dAcPy_c *LINK; @@ -130,9 +185,6 @@ public: } static s32 getCurrentBugNetType(); - static bool isInBambooCuttingMinigame() { - return MinigameManager::isInMinigameState(MinigameManager::BAMBOO_CUTTING); - } static bool isItemRestrictedByBokoBase(ITEM_ID item); static u32 getCurrentHealthCapacity(); diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index 30d477b1..ac03f2b2 100644 --- a/include/d/a/e/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h @@ -5,6 +5,7 @@ #include "d/a/obj/d_a_obj_base.h" #include "d/a/obj/d_a_obj_bomb.h" #include "d/d_cc.h" +#include "f/f_list_mg.h" #include "m/m3d/m_mdl.h" #include "m/m_angle.h" #include "m/m_vec.h" @@ -86,6 +87,7 @@ public: bool fn_80030570(m3d::mdl_c &, u8, f32); // lighting related void fn_800306D0(); void fn_80030700(); + static void fn_800307E0(mVec3_c *pPos, s32); dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper); static void fn_80030980(m3d::mdl_c &, s32, bool markDirty); bool isWithinCameraView(f32, f32); @@ -95,6 +97,10 @@ public: bool ChkCrossPlayer(f32 height); + static dAcEnBase_c *GetNextEnemy(dAcEnBase_c *pParent) { + return static_cast<dAcEnBase_c *>(getNextObject(&sEnemyList, pParent)); + } + protected: // TODO: Make accessors for this list to auto-convert to dAcEnBase? static fLiMgBa_c sEnemyList; diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index ccd41832..d82181ef 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -1,7 +1,6 @@ #ifndef D_A_OBJ_BASE_H #define D_A_OBJ_BASE_H -#include "c/c_math.h" #include "common.h" #include "d/a/d_a_base.h" #include "d/a/d_a_salbage_if.h" @@ -14,11 +13,9 @@ #include "m/m3d/m_shadow.h" #include "m/m3d/m_smdl.h" #include "m/m_angle.h" -#include "m/m_color.h" #include "m/m_mtx.h" #include "m/m_vec.h" #include "m/types_m.h" -#include "nw4r/math/math_arithmetic.h" // Ghidra: ActorObjectBase // size: 0x330 diff --git a/include/d/a/obj/d_a_obj_bomb.h b/include/d/a/obj/d_a_obj_bomb.h index 9d0bfe99..bba6e2e6 100644 --- a/include/d/a/obj/d_a_obj_bomb.h +++ b/include/d/a/obj/d_a_obj_bomb.h @@ -9,25 +9,64 @@ #include "d/col/cc/d_cc_d.h" #include "d/d_shadow.h" #include "m/m3d/m_smdl.h" +#include "m/m_angle.h" #include "m/m_mtx.h" +#include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_State.hpp" -#include "s/s_StateID.hpp" #include "toBeSorted/d_emitter.h" -// This may need its own file and could be independent of a bomb -class UnkBombColInfo : public cBgS_PolyInfo { -public: - UnkBombColInfo() : field_0x10(0), field_0x14(0), field_0x18(0) {} - u32 field_0x10; - u32 field_0x14; - u32 field_0x18; -}; - class dAcBomb_c : public dAcObjBase_c { public: - dAcBomb_c() : mStateMgr(*this), mSelfRef(this), mEffect1(this), mEffect2(this) {} - virtual ~dAcBomb_c(); + dAcBomb_c() : mStateMgr(*this), mUnkRef(this), mEffect1(this), mEffect2(this) {} + virtual ~dAcBomb_c() {} + + enum Type_e { + BOMB_0 = 0, // Explode + BOMBF = 1, + BOMBF_CRAWLSPACE = 2, + BOMB_PLAYER_CARRY = 3, // Carry + BOMB_4 = 4, // Explode + BOMB_5 = 5, // Flower + BOMB_EXPLODE_NO_DAMAGE = 6, + BOMB_BOCO_CARRY = 7, + BOMB_MAX, + }; + + enum Flag_e { + FLAG_PLAYER_MAKE = (1 << 0), + FLAG_CHAIN_BOMB = (1 << 1), // When another bomb blows another bomb up + FLAG_BOMB_HIT = (1 << 2), + FLAG_0x8 = (1 << 3), + FLAG_0x10 = (1 << 4), + FLAG_UNDERWATER = (1 << 5), + FLAG_0x40 = (1 << 6), + FLAG_0x80 = (1 << 7), + FLAG_0x100 = (1 << 8), + FLAG_NEAR_TIMEDOOR = (1 << 9), + FLAG_0x400 = (1 << 10), + FLAG_FALL_IN_WATER = (1 << 11), + FLAG_DELETE_BOMB = (1 << 12), + FLAG_0x2000 = (1 << 13), + FLAG_0x4000 = (1 << 14), + FLAG_0x8000 = (1 << 15), + FLAG_0x10000 = (1 << 16), + FLAG_0x20000 = (1 << 17), + FLAG_ROLL = (1 << 18), + FLAG_0x80000 = (1 << 19), + FLAG_0x100000 = (1 << 20), + FLAG_0x200000 = (1 << 21), + FLAG_0x400000 = (1 << 22), + FLAG_FUSE_PAUSED = (1 << 23), // Like in cutscenes + FLAG_FLOWER = (1 << 24), + FLAG_BEETLE_CARRY = (1 << 25), + FLAG_0x4000000 = (1 << 26), + FLAG_BOKO_CARRY = (1 << 27), + FLAG_0x10000000 = (1 << 28), + FLAG_0x20000000 = (1 << 29), + FLAG_0x40000000 = (1 << 30), + FLAG_0x80000000 = (1 << 31), + }; /* vt 0x08 */ virtual int create() override; /* vt 0x14 */ virtual int doDelete() override; @@ -44,36 +83,80 @@ public: STATE_FUNC_DECLARE(dAcBomb_c, Carry); STATE_FUNC_DECLARE(dAcBomb_c, WindCarry); + STATE_MGR_DEFINE_UTIL_ISSTATE(dAcBomb_c); + STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcBomb_c); + STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcBomb_c); + STATE_MGR_DEFINE_UTIL_GETOLDSTATEID(dAcBomb_c); + STATE_MGR_DEFINE_UTIL_GETNEWSTATEID(dAcBomb_c); + STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcBomb_c); + + void coHitCallback(cCcD_Obj *i_objInfB); + void tgHitCallback(dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfA, cCcD_Obj *i_objInfB); + + void setTarget(const mVec3_c &t); + + void setRoomId(); + void setSmokePos(); + bool checkWaterIn(); void setTransformFromFlower(const mMtx_c &); + void setPickupTarget(); + bool checkExplode(); + void lookAt(); + void bounceWall(mAng angle); + void getVelocity(mVec3_c &out); + void setBombColor(); + void rollTo(const mVec3_c &dir); + void rollToInternal(const mVec3_c &dir); - void Off_0xA3C(u32 mask) { - field_0xA3C &= ~mask; + s16 getFuseTimer() const { + return mFuseTime; + } + bool checkFlag(u32 mask) const { + return (mFlag & mask); + } + void unsetFlag(u32 mask) { + mFlag &= ~mask; } - void On_0xA3C(u32 mask) { - field_0xA3C |= mask; + void setFlag(u32 mask) { + mFlag |= mask; } + u32 getBombType() const { + return mParams; + } + +private: + bool createModel(); + public: - /* 0x330 */ nw4r::g3d::ResFile mBrres; + /* 0x330 */ nw4r::g3d::ResFile mRes; /* 0x334 */ m3d::smdl_c mMdl; /* 0x350 */ dShadowCircle_c mShdw; /* 0x358 */ dBgS_BombAcch mAcch; /* 0x708 */ dBgS_AcchCir mAcchCir; - /* 0x764 */ dCcD_Sph mCcDSph; + /* 0x764 */ dCcD_Sph mSph; /* 0x8B4 */ mMtx_c mMtx; /* 0x8E4 */ dBgS_BombLinChk mLinChk; - /* 0x97C */ UnkBombColInfo mUnkInfo; - /* 0x9B4 */ u8 _9B4[0x9B8 - 0x9B4]; - /* 0x9B8 */ dAcBomb_c *mSelfRef; - /* 0x9BC */ u8 _9BC[0x9D4 - 0x9BC]; + /* 0x97C */ cBgS_PolyInfo mUnkInfo; + /* 0x9A8 */ dAcObjRef_unk mUnkRef; /* 0x9D4 */ dEmitter_c mEffect1; /* 0xA08 */ dEmitter_c mEffect2; - /* 0xA3C */ u32 field_0xA3C; - /* 0xA40 */ u32 field_0xA40; - /* 0xA44 */ s16 field_0xA44; - /* 0xA46 */ u8 _3[0xA50 - 0xA46]; + /* 0xA3C */ u32 mFlag; + /* 0xA40 */ u8 mRollFrameTimer; // Set to `60` upon roll - Uses additional force to roll bomb + /* 0xA41 */ u8 mMainMatID; + /* 0xA42 */ u8 field_0xA42; + /* 0xA44 */ s16 mFuseTime; + /* 0xA46 */ u16 mCarryTimer; + /* 0xA48 */ mAng mGndAngle; + /* 0xA4A */ mAng mRollRotationY; + /* 0xA4C */ f32 mRollSpeed; /* 0xA50 */ f32 field_0xA50; - /* 0xA54 */ u8 _4[0xA9C - 0xA54]; + /* 0xA54 */ mVec3_c mSmokePosNext; + /* 0xA60 */ mVec3_c mSmokePosPrev; + /* 0xA6C */ mVec3_c mSmokePos; + /* 0xA78 */ mVec3_c mExternalTranslation; + /* 0xA84 */ mVec3_c mHitForce; + /* 0xA90 */ mVec3_c mStreamForce; /* 0xA9C */ STATE_MGR_DECLARE(dAcBomb_c); }; diff --git a/include/d/col/bg/d_bg_pc.h b/include/d/col/bg/d_bg_pc.h index e3b05ced..a5845962 100644 --- a/include/d/col/bg/d_bg_pc.h +++ b/include/d/col/bg/d_bg_pc.h @@ -61,6 +61,7 @@ enum dBgPc_Attribute { POLY_ATTR_DAMAGE = 13, POLY_ATTR_SLOPE_RUN = 15, POLY_ATTR_SAND_DEEP_SLOW = 16, + POLY_ATTR_CURSED_WATER = 17, }; class dBgPc { public: diff --git a/include/d/col/bg/d_bg_s_acch.h b/include/d/col/bg/d_bg_s_acch.h index 6756420f..f1227411 100644 --- a/include/d/col/bg/d_bg_s_acch.h +++ b/include/d/col/bg/d_bg_s_acch.h @@ -524,6 +524,12 @@ public: const dBgS_GndChk &GetGnd() const { return mGnd; } + dBgS_WtrChk &GetWtr() { + return mWtr; + } + const dBgS_WtrChk &GetWtr() const { + return mWtr; + } dBgS_RoofChk &GetRoof() { return mRoof; @@ -532,8 +538,17 @@ public: return mRoof; } - void SetField_0xD4(f32 v) { - field_0x0D4 = v; + void SetGndChkOffset(f32 v) { + mGndChkOffset = v; + } + void SetRoofCrrHeight(f32 v) { + mRoofCrrHeight = v; + } + void SetWaterCheckOffset(f32 v) { + mWtrCheckOffset = v; + } + void SetWtrChkMode(u8 v) { + mWtrMode = v; } public: @@ -555,12 +570,12 @@ public: /* 0x0A8 */ f32 field_0x0A8; /* 0x0AC */ f32 field_0x0AC; /* 0x0B0 */ f32 mGroundHeight; - /* 0x0B4 */ f32 field_0x0B4; + /* 0x0B4 */ f32 mGndChkOffset; /* 0x0B8 */ cM3dGPla mPlane_0x0B8; /* 0x0C8 */ f32 field_0x0C8; /* 0x0CC */ f32 field_0x0CC; /* 0x0D0 */ f32 mRoofHeight; - /* 0x0D4 */ f32 field_0x0D4; + /* 0x0D4 */ f32 mRoofCrrHeight; /* 0x0D8 */ f32 field_0x0D8; /* 0x0DC */ cBgS_PolyInfo *mpOutPolyInfo; /* 0x0E0 */ f32 mRoofH_0x0E0; @@ -572,9 +587,9 @@ public: /* 0x1D0 */ f32 field_0x1D0; /* 0x1D4 */ dBgS_GndChk mGnd; /* 0x264 */ dBgS_RoofChk mRoof; - /* 0x2F4 */ f32 field_0x2F4; + /* 0x2F4 */ f32 mWtrCheckOffset; /* 0x2F8 */ dBgS_WtrChk mWtr; - /* 0x390 */ u8 field_0x390; + /* 0x390 */ u8 mWtrMode; /* 0x394 */ s32 field_0x394; /* 0x398 */ mVec3_c field_0x398; /* 0x3A4 */ mVec3_c field_0x3A4; diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index fa5fec03..a6165353 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -526,6 +526,9 @@ public: void SetSrcModifer(u32 modifier) { mSrc.mInfo.mModifier = modifier; } + u32 GetSrcModifer() const { + return mSrc.mInfo.mModifier; + } void OnSrcModifer(u32 m) { mSrc.mInfo.mModifier |= m; } @@ -949,6 +952,10 @@ public: mAt.SetCallback(cb); } + void SetTgCallback(cCcD_HitCallback cb) { + mTg.SetCallback(cb); + } + void SetCoCallback(cCcD_HitCallback cb) { mCo.SetCallback(cb); } @@ -1006,6 +1013,13 @@ public: void OnAt_0x4000() { mAt.OnSPrm(0x4000); } + // Related to Beetle (no hook) + u32 ChkAt_0x4000() { + return mAt.MskSPrm(0x4000); + } + u32 GetAtSrcModifier() const { + return mAt.GetSrcModifer(); + } void SetAtInfo_0x0(u8 amount) { @@ -1115,6 +1129,9 @@ public: void ClrCo_0x400() { mCo.OffSPrm(0x400); } + u32 ChkCo_0x8000() { + return mCo.MskSPrm(0x8000); + } void OnCo_0x8000() { mCo.OnSPrm(0x8000); } diff --git a/include/d/col/c/c_m3d_g_pla.h b/include/d/col/c/c_m3d_g_pla.h index 2e178d45..9fdf5ffb 100644 --- a/include/d/col/c/c_m3d_g_pla.h +++ b/include/d/col/c/c_m3d_g_pla.h @@ -5,6 +5,7 @@ #include "d/col/c/c_m3d.h" #include "m/m_angle.h" #include "m/m_vec.h" +#include "nw4r/math/math_types.h" #include "rvl/MTX/vec.h" // Plane with a normal @@ -29,8 +30,12 @@ public: mD = -VECDotProduct(mNormal, point); } + void SetupNP(const mVec3_c &normal, const mVec3_c &point) { + mNormal = normal; + mD = -nw4r::math::VEC3Dot(mNormal, point); + } + // Unused - // void SetupNP(const mVec3_c &, const mVec3_c &); // bool getCrossY(const mVec3_c &, f32 *) const; // void Set(const cM3dGPla *); diff --git a/include/d/col/cc/d_cc_s.h b/include/d/col/cc/d_cc_s.h index 65b6d518..ae0f4945 100644 --- a/include/d/col/cc/d_cc_s.h +++ b/include/d/col/cc/d_cc_s.h @@ -41,6 +41,9 @@ public: dCcMassS_Mng &GetMassMng() { return mMassMng; } + void SetMass(cCcD_Obj *p_obj, u8 priority) { + mMassMng.SetObj(p_obj, priority); + } void Ct(); void Dt(); diff --git a/include/d/d_linkage.h b/include/d/d_linkage.h index 2739ab49..9cf24418 100644 --- a/include/d/d_linkage.h +++ b/include/d/d_linkage.h @@ -19,15 +19,15 @@ public: public: enum ConnectionType_e { CONNECTION_0 = 0, - CONNECTION_1 = 1, + CONNECTION_1 = 1, // Standard CONNECTION_2 = 2, CONNECTION_3 = 3, - CONNECTION_4 = 4, - CONNECTION_5 = 5, - CONNECTION_6 = 6, - CONNECTION_7 = 7, - CONNECTION_8 = 8, - CONNECTION_9 = 9, + CONNECTION_4 = 4, // clawshot + CONNECTION_5 = 5, // Beetle + CONNECTION_6 = 6, // From Sword Swing? + CONNECTION_7 = 7, // Whip + CONNECTION_8 = 8, // Arrow/Heartf + CONNECTION_9 = 9, // Chandelier/lotus flower }; enum State_e { STATE_0 = 0, @@ -87,6 +87,19 @@ public: return field_0xA0->getArrowOffsetPosAndAngle(param_1, param_2, param_3, param_4, param_5); } + dAcBase_c *getControllingActor() { + return static_cast<dAcBase_c *>(mControllingActor.p_owner); + } + + void setField_0x8C_0x90(f32 f0, f32 f1) { + field_0x8C = f0; + field_0x90 = f1; + } + void setField_0x94_0x98(f32 f0, f32 f1) { + field_0x94 = f0; + field_0x98 = f1; + } + public: void set(u32 flags, f32, f32, f32, void *unk); bool tryAttach(dAcObjBase_c *, dAcObjBase_c *, dAcRefBase_c *, ConnectionType_e, bool); diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h index a9a9a2b3..4c1e77a2 100644 --- a/include/d/d_player_act.h +++ b/include/d/d_player_act.h @@ -2,12 +2,13 @@ #define D_A_PLAYER_ACT_H #include "d/a/d_a_base.h" -#include "d/a/obj/d_a_obj_bomb.h" +#include "d/a/obj/d_a_obj_base.h" #include "d/d_player_base.h" #include "m/m_vec.h" class dAcEnBase_c; class dAcOFairy_c; +class dAcBomb_c; // Does this one have a vtable? // Name unknown @@ -247,7 +248,7 @@ public: return false; } /* vt 0x1B8 */ virtual void canHandleGameOver() {} - /* vt 0x1BC */ virtual UNKWORD vt_0x1BC() { + /* vt 0x1BC */ virtual dAcObjBase_c *getBeetleHeldActor() { return 0; } @@ -414,7 +415,7 @@ public: /* vt 0x2A4 */ virtual bool isRunningUpWall() { return false; } - /* vt 0x2A8 */ virtual void lookTowardItem() {} + /* vt 0x2A8 */ virtual void lookTowardItem(const mVec3_c &, u32, mAng, f32, f32, f32) {} /* vt 0x2AC */ virtual void vt_0x2AC() {} /* vt 0x2B0 */ virtual void vt_0x2B0() {} /* vt 0x2B4 */ virtual void triggerMoveEventMaybe(u32, u32, u32, const mVec3_c *, const mAng &, u32, u32) {} @@ -550,6 +551,10 @@ public: FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR, }; + enum dAcPy_FLG1 { + ActFLG1_INCRAWLSPACE = 0x400000 + }; + inline bool checkFlags0x340(u32 mask) const { return (someFlags_0x340 & mask) != 0; } diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 5b69d38d..c3d95b9e 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -163,8 +163,13 @@ public: s8 getCurrRoomId() const { return curr_room_id; } + bool isRoomID(s32 id) const { + return curr_room_id == id; + } - dFader_c& getFader() { return mFader; } + dFader_c &getFader() { + return mFader; + } bool fn_801B3EE0(); void fn_801B3F20(); diff --git a/include/d/d_vec.h b/include/d/d_vec.h index 5c9dbfda..11e5c87c 100644 --- a/include/d/d_vec.h +++ b/include/d/d_vec.h @@ -6,7 +6,7 @@ /** * @brief Gets a point on a XZ circle. - * + * * @param center the circle center. Will also hold the result. * @param angle the Y angle. * @param radius the circle radius. @@ -15,10 +15,15 @@ inline static void getXZCirclePoint(mVec3_c ¢er, const mAng &angle, f32 radi center.x += radius * angle.sin(); center.z += radius * angle.cos(); } +inline static void setXYZCirclePoint(mVec3_c ¢er, const mAng &angle, f32 radius, f32 y) { + center.x = radius * angle.sin(); + center.y = y; + center.z = radius * angle.cos(); +} /** * @brief Converts a 2D vector to a 3D vector holding the original's vector coordinates in its XY components. - * + * * @param v The 2D vector * @return mVec3_c The 3D vector */ @@ -28,7 +33,7 @@ inline mVec3_c vec2ToVec3XY(const mVec2_c &v) { /** * @brief Computes left x right - * + * * @param result the result * @param left left operant * @param right right operand diff --git a/include/d/lyt/meter/d_lyt_meter_item_select.h b/include/d/lyt/meter/d_lyt_meter_item_select.h index 1ef2dc50..e9af596d 100644 --- a/include/d/lyt/meter/d_lyt_meter_item_select.h +++ b/include/d/lyt/meter/d_lyt_meter_item_select.h @@ -169,9 +169,6 @@ public: virtual ~dLytMeterItemSelect_c() {} - static bool isInSpiralChargeTutorialMinigame(); - static bool isInRollercoasterMinigame(); - // This enum might be used externally too? enum InternalItem_e { I_BOMB_BAG, diff --git a/include/d/t/d_t_alldie.h b/include/d/t/d_t_alldie.h new file mode 100644 index 00000000..3fe18e82 --- /dev/null +++ b/include/d/t/d_t_alldie.h @@ -0,0 +1,32 @@ +#ifndef D_T_ALL_DIE_H +#define D_T_ALL_DIE_H + +#include "d/t/d_tg.h" +#include "m/m_mtx.h" +#include "toBeSorted/time_area_mgr.h" + +class dTgAllDie_c : public dTg_c { +public: + dTgAllDie_c() {} + virtual ~dTgAllDie_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual int actorExecute() override; + + static dTgAllDie_c *getNearestToPlayer(s32 roomId); + +private: + /* 0x0FC */ mMtx_c mArea; + /* 0x12C */ TimeAreaStruct mTimeArea; + /* 0x138 */ s32 mNumEnemiesInArea; + /* 0x13C */ u16 mTimer0x13C; + /* 0x13E */ u8 mType; + /* 0x13F */ u8 mSceneflag; + /* 0x140 */ u8 mTimer0x140; + /* 0x144 */ u32 field_0x144; + /* 0x145 */ u8 field_0x148; +}; + +#endif diff --git a/include/d/t/d_t_view_clip.h b/include/d/t/d_t_view_clip.h new file mode 100644 index 00000000..0b81b35c --- /dev/null +++ b/include/d/t/d_t_view_clip.h @@ -0,0 +1,49 @@ +#ifndef D_T_VIEW_CLIP_H +#define D_T_VIEW_CLIP_H + +#include "d/t/d_tg.h" +#include "m/m_mtx.h" + +class dTgViewClip_c : public dTg_c { +public: + static const s32 sNumEntries = 0x40; + + enum Flag_e { + FLAG_NORMAL = 0, + FLAG_FORCE_ON = (1 << 0), + FLAG_FORCE_OFF = (1 << 1), + }; + + enum Type_e { + TYPE_FORCE_ON, + TYPE_FORCE_OFF, + }; + + dTgViewClip_c() {} + virtual ~dTgViewClip_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual int actorExecute() override; + + void setViewClip(u8 setBit); + static void resetViewClip(); + static f32 getCull(s32 idx, f32 cullDistance); + static bool checkForceOn(s32 idx); + + static u8 getViewClipBit(s32 idx, u8 setBit); + static void setViewClipBit(s32 idx, u8 setBit); + + static void setViewClip(s32 idx, u8 value); + +private: + /* 0x0DC */ mMtx_c mArea; + /* 0x12C */ u8 mIndex; + /* 0x12D */ u8 mType; + /* 0x12E */ u8 mAreaIndex; + + static u8 sViewClips[sNumEntries]; +}; + +#endif diff --git a/include/s/s_State.hpp b/include/s/s_State.hpp index 807a1bd9..fb8ab775 100644 --- a/include/s/s_State.hpp +++ b/include/s/s_State.hpp @@ -48,11 +48,21 @@ return *mStateMgr.getStateID() == value; \ } +#define STATE_MGR_DEFINE_UTIL_GETSTATEID(class_name) \ + const sFStateID_c<class_name> &getStateID() const { \ + return (sFStateID_c<class_name> &)*mStateMgr.getStateID(); \ + } + #define STATE_MGR_DEFINE_UTIL_GETOLDSTATEID(class_name) \ const sFStateID_c<class_name> &getOldStateID() const { \ return (sFStateID_c<class_name> &)*mStateMgr.getOldStateID(); \ } +#define STATE_MGR_DEFINE_UTIL_GETNEWSTATEID(class_name) \ + const sFStateID_c<class_name> &getNewStateID() const { \ + return (sFStateID_c<class_name> &)*mStateMgr.getNewStateID(); \ + } + // Use this when you need need sFStateID_c vtables to appear in a different order #define STATE_MGR_DEFINE_UTIL_INSTANCIATE_STATE(class_name) \ bool dummy_need_state_instanciation(const sFStateID_c<class_name> &value) const { \ diff --git a/include/toBeSorted/minigame_mgr.h b/include/toBeSorted/minigame_mgr.h index 941d3ed6..644d452a 100644 --- a/include/toBeSorted/minigame_mgr.h +++ b/include/toBeSorted/minigame_mgr.h @@ -31,12 +31,42 @@ public: static MinigameManager *GetInstance() { return sInstance; } - static bool checkInBossRush() { - return isInMinigameState(BOSS_RUSH); + static bool checkInInsectCapture() { + return isInMinigameState(INSECT_CAPTURE); + } + static bool checkInPumpkinCarry() { + return isInMinigameState(PUMPKIN_CARRY); + } + static bool checkInBambooCutting() { + return isInMinigameState(BAMBOO_CUTTING); + } + static bool checkInThrillDigger() { + return isInMinigameState(THRILL_DIGGER); } static bool checkInFunFunIsland() { return isInMinigameState(FUN_FUN_ISLAND); } + static bool checkInHouseCleaning() { + return isInMinigameState(HOUSE_CLEANING); + } + static bool checkInTrialTimeAttack() { + return isInMinigameState(TRIAL_TIME_ATTACK); + } + static bool checkInBossRush() { + return isInMinigameState(BOSS_RUSH); + } + static bool checkInPumpkinArchery() { + return isInMinigameState(PUMPKIN_ARCHERY); + } + static bool checkInHarpPlaying() { + return isInMinigameState(HARP_PLAYING); + } + static bool checkInRollerCoaster() { + return isInMinigameState(ROLLERCOASTER); + } + static bool checkInSprialChargeTutorial() { + return isInMinigameState(SPIRAL_CHARGE_TUTORIAL); + } private: MinigameManager() {} diff --git a/include/toBeSorted/time_area_mgr.h b/include/toBeSorted/time_area_mgr.h index 04c2a360..2732d577 100644 --- a/include/toBeSorted/time_area_mgr.h +++ b/include/toBeSorted/time_area_mgr.h @@ -41,7 +41,7 @@ struct TimeAreaStruct { return fabsf(field_0x00) <= FLT_EPSILON; } - f32 getDistMaybe() { + f32 getDistMaybe() const { return field_0x00; } @@ -72,6 +72,8 @@ public: s32 fn_800B9B60(s32 roomId, const mVec3_c &position); f32 fn_800B9CE0(const mVec3_c &position); + static bool fn_800BBD40(); + bool isInLanayruMiningFacility() const { return mIsInLanayruMiningFacility; } |
