diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2025-05-25 15:51:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-25 15:51:35 -0400 |
| commit | fd7d30d32283d03a412e8c401d04418351cf686a (patch) | |
| tree | e88bed25f474f06552cd7a7ea7067a0beead4414 /include/d | |
| parent | 018ef1971cd53aa8e78154789bcf6cac2f19b603 (diff) | |
d_linkage is largely done (#176)
Diffstat (limited to 'include/d')
| -rw-r--r-- | include/d/a/d_a_player.h | 5 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_base.h | 66 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_boomerang.h | 120 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_ring.h | 3 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_switch.h | 6 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_tubo.h | 1 | ||||
| -rw-r--r-- | include/d/col/bg/d_bg_s_acch.h | 2 | ||||
| -rw-r--r-- | include/d/d_linkage.h | 106 |
8 files changed, 253 insertions, 56 deletions
diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index e27a3513..324e27bf 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -2,6 +2,8 @@ #define D_A_PLAYER_H #include "common.h" +#include "d/a/d_a_item.h" +#include "d/col/c/c_bg_s_poly_info.h" #include "d/d_player_mdl.h" #include "toBeSorted/file_manager.h" #include "toBeSorted/minigame_mgr.h" @@ -17,6 +19,9 @@ public: // argument is always false in existing code, true doesn't seem to make a difference void bonk(bool unk = false); bool fn_80202D90(bool); + void fn_80202E00(cBgS_PolyInfo *, f32, f32); + + dAcItem_c *getWhippedItem(); /* overrides omitted */ /* vt 0x310 */ virtual void vt_0x310(); diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h index e27a4930..c8e1cd80 100644 --- a/include/d/a/obj/d_a_obj_base.h +++ b/include/d/a/obj/d_a_obj_base.h @@ -1,12 +1,13 @@ #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/col/c/c_cc_d.h" #include "d/col/c/c_m3d_g_aab.h" -#include "d/col/c/c_m3d_g_lin.h" #include "d/d_jnt_col.h" +#include "d/d_linkage.h" #include "egg/math/eggMath.h" #include "m/m3d/m_shadow.h" #include "m/m3d/m_smdl.h" @@ -16,54 +17,6 @@ #include "m/m_vec.h" #include "m/types_m.h" -class dAcObjBase_c; -class dBgS_Acch; - -// Size: 0xA8 -struct ActorCarryStruct { - /* 0x00 */ dAcRefBase_c actorLink; - /* 0x0C */ fLiNdBa_c *carriedActor; - /* 0x10 */ u32 carryFlags; - /* 0x14 */ int carryType; - /* 0x18 */ u16 field_0x18; - /* 0x1A */ u16 field_0x1A; - /* 0x1C */ mVec3_c field_0x1C; - /* 0x28 */ mMtx_c carryTransMtx; - /* 0x58 */ mMtx_c field_0x58; - /* 0x88 */ s32 isCarried; - /* 0x8C */ f32 field_0x8C; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ f32 field_0x98; - - ActorCarryStruct(); - /* vt 0x9C */ - virtual ~ActorCarryStruct(); - /* 0xA0 */ dJntCol_c *field_0xA0; - /* 0xA4 */ u32 field_0xA4; - - void set(u32 flags, f32 x, f32 y, f32 z, void *unk); - - // not real name, but sure - void bushTpFunc(dBgS_Acch &); - - void fn_80050EA0(dAcObjBase_c *); - void fn_800511E0(dAcObjBase_c *); - void fn_80051190(dAcObjBase_c *); - void fn_80050EB0(dAcObjBase_c *); - - // This will attach pObj onto pOwner, returning if it could attach - bool tryAttachWithRef(dAcObjBase_c *pObj, dAcObjBase_c *pOwner, dAcRefBase_c *pRefLink, int, bool); - - bool testCarryFlag(u32 flag) { - return (carryFlags & flag) != 0; - } - - bool checkCarryType(int type) const { - return (isCarried == 1 && carryType == type); - } -}; - // Ghidra has it as `unk_ActorObjectBase` struct LightingInfo { /* 0x00 */ u8 mField_0x00[0x40 - 0x00]; @@ -121,7 +74,7 @@ public: /* 0x1C0 */ cCcD_Stts mStts; /* 0x1FC */ mVec3_c mStartingPos; /* 0x208 */ mAng3_c mStartingRot; - /* 0x210 */ ActorCarryStruct mActorCarryInfo; + /* 0x210 */ dLinkage_c mLinkage; /* 0x2B8 */ u32 mField_0x2B8; /* 0x2BC */ LightingInfo mLightingInfo; /* 0x32C */ u32 mField_0x32C; @@ -145,6 +98,10 @@ public: return forwardSpeed; } + f32 GetYOffset() const { + return yoffset; + } + bool isStopped() const { return getVelocityMag() <= EGG::Math<f32>::epsilon(); } @@ -167,8 +124,15 @@ public: return mObjectActorFlags & property; } + dLinkage_c &GetLinkage() { + return mLinkage; + } + const dLinkage_c &GetLinkage() const { + return mLinkage; + } + void SetJntCol(dJntCol_c *pCol) { - mActorCarryInfo.field_0xA0 = pCol; + mLinkage.field_0xA0 = pCol; } // could be their own thing? diff --git a/include/d/a/obj/d_a_obj_boomerang.h b/include/d/a/obj/d_a_obj_boomerang.h new file mode 100644 index 00000000..3b2a6261 --- /dev/null +++ b/include/d/a/obj/d_a_obj_boomerang.h @@ -0,0 +1,120 @@ +#ifndef D_A_OBJ_BOOMERANG_H +#define D_A_OBJ_BOOMERANG_H + +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s_acch.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_shadow.h" +#include "d/lyt/d_lyt_fader.h" +#include "m/m3d/m_anmchr.h" +#include "m/m3d/m_anmchrblend.h" +#include "m/m3d/m_mdl.h" +#include "m/m3d/m_proc.h" +#include "m/m_color.h" +#include "nw4r/g3d/res/g3d_resfile.h" +#include "s/s_State.hpp" +#include "toBeSorted/actor_event.h" +#include "toBeSorted/d_emitter.h" + +class dAcBoomerangProcBase_c : public m3d::proc_c { +public: + ~dAcBoomerangProcBase_c() {} +}; +class dAcBoomerangProc_c : public dAcBoomerangProcBase_c { +public: + dAcBoomerangProc_c() : mColor0(0), mColor1(0xFFFFFFFF) {} + ~dAcBoomerangProc_c() {} + + virtual void drawOpa() override; + + mColor mColor0; + mColor mColor1; +}; + +class dAcBoomerang_c : public dAcObjBase_c { +public: + dAcBoomerang_c() + : mStateMgr(*this), + mEventRelated(*this, nullptr), + mEff0(this), + mEff1(this), + mEff2(this), + mEff3(this), + mLytFader(0, dLytFader_c::FADED_OUT) {} + virtual ~dAcBoomerang_c(); + + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual void deleteReady() override; + virtual bool createHeap() override; + virtual int actorExecute() override; + virtual void registerInEvent() override; + + STATE_FUNC_DECLARE(dAcBoomerang_c, Wait); + STATE_FUNC_DECLARE(dAcBoomerang_c, Move); + STATE_FUNC_DECLARE(dAcBoomerang_c, MoveCancelWait); + STATE_FUNC_DECLARE(dAcBoomerang_c, ReturnWait); + STATE_FUNC_DECLARE(dAcBoomerang_c, EventReturnWait); + +public: // TYPES + struct ChrAnimation_t { + const char *mName; + f32 mRate; + }; + enum ChrAnimation_e { + RB_SET = 0, + RB_DEFAULT = 1, + RB_CUT = 2, + RB_HOLD = 3, + RB_HOLD_ED = 4, + RB_BACK = 5, + RB_MAX, + }; + static const ChrAnimation_t sChrAnims[RB_MAX]; + +public: // INLINES + bool checkField_0x8CC(u32 mask) { + return field_0x8CC & mask; + } + +public: // FUNCTIONS + void atHitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB); + + bool tryGrabObject(dAcObjBase_c *pObject); + void setChrAnimation(ChrAnimation_e requestedAnimation); + +private: + /* 0x0330 */ nw4r::g3d::ResFile mResFile; + /* 0x0334 */ m3d::mdl_c mMdl; + /* 0x0358 */ m3d::anmChrBlend_c mAnmChrBlend; + /* 0x0380 */ m3d::anmChr_c mAnmChr[2]; + /* 0x03F0 */ dAcBoomerangProc_c mProc; + /* 0x0410 */ dShadowCircle_c mShadow; + /* 0x0418 */ dAcRef_c<dAcObjBase_c> mGrabbedActor; + /* 0x0424 */ u8 _0x424[0x454 - 0x424]; + /* 0x0454 */ dBgS_Acch mAcch; + /* 0x0804 */ dBgS_AcchCir mAcchCir; + /* 0x0860 */ ActorEventRelated mEventRelated; + /* 0x08B0 */ u8 mCurrentAnimation; + /* 0x08B1 */ u8 _0x8B1[0x8B5 - 0x8B1]; + /* 0x08B5 */ u8 mWindNodeID; + /* 0x08B6 */ u8 mLeftWingNodeID; + /* 0x08B7 */ u8 mRightWingNodeID; + /* 0x08B8 */ u8 _0x8B8[0x8CC - 0x8B8]; + /* 0x08B8 */ u32 field_0x8CC; + /* 0x08D0 */ u8 _0x8D0[0x8FC - 0x8D0]; + /* 0x08FC */ dCcD_Sph mSph0; + /* 0x0A4C */ dCcD_Sph mSph1; + /* 0x0B9C */ EffectsStruct mEff0; + /* 0x0BD0 */ EffectsStruct mEff1; + /* 0x0C04 */ EffectsStruct mEff2; + /* 0x0C38 */ EffectsStruct mEff3; + /* 0x0C6C */ dLytFader_c mLytFader; + /* 0x114C */ u8 _0x114C[0x115C - 0x114C]; + /* 0x115C */ STATE_MGR_DECLARE(dAcBoomerang_c); +}; + +#endif diff --git a/include/d/a/obj/d_a_obj_ring.h b/include/d/a/obj/d_a_obj_ring.h index f43c2f40..232da7d1 100644 --- a/include/d/a/obj/d_a_obj_ring.h +++ b/include/d/a/obj/d_a_obj_ring.h @@ -4,7 +4,6 @@ #include "d/a/obj/d_a_obj_base.h" #include "m/m3d/m_smdl.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" class dAcOring_c : public dAcObjBase_c { public: @@ -24,8 +23,6 @@ public: } private: - static u32 ROT_PER_TICK; - m3d::smdl_c mModel; STATE_MGR_DECLARE(dAcOring_c); u8 field_0x388; diff --git a/include/d/a/obj/d_a_obj_switch.h b/include/d/a/obj/d_a_obj_switch.h index df5b2d54..7a3b67a0 100644 --- a/include/d/a/obj/d_a_obj_switch.h +++ b/include/d/a/obj/d_a_obj_switch.h @@ -3,9 +3,9 @@ #include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_w.h" +#include "d/flag/sceneflag_manager.h" #include "m/m3d/m_mdl.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" #include "toBeSorted/time_area_mgr.h" // OBJ_VSD? @@ -63,6 +63,10 @@ public: static void rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *interactor); + bool checkOnFlag() { + return mOnSceneFlag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(roomid, mOnSceneFlag); + } + private: /* 0x330 */ m3d::mdl_c mModel; /* 0x354 */ dBgW mCollision; diff --git a/include/d/a/obj/d_a_obj_tubo.h b/include/d/a/obj/d_a_obj_tubo.h index 82f26102..1b23f088 100644 --- a/include/d/a/obj/d_a_obj_tubo.h +++ b/include/d/a/obj/d_a_obj_tubo.h @@ -11,6 +11,7 @@ #include "d/d_shadow.h" #include "d/flag/sceneflag_manager.h" #include "m/m3d/m_smdl.h" +#include "m/m_angle.h" #include "m/m_quat.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resfile.h" diff --git a/include/d/col/bg/d_bg_s_acch.h b/include/d/col/bg/d_bg_s_acch.h index c21a4bd3..6682fac3 100644 --- a/include/d/col/bg/d_bg_s_acch.h +++ b/include/d/col/bg/d_bg_s_acch.h @@ -292,7 +292,7 @@ public: bool ChkLineCheckNone() { return mFlags & LINE_CHECK_NONE; } - bool ChkLineCheck() { + bool ChkLineCheck() const { return mFlags & LINE_CHECK; } bool Chk_0x4000000() const { diff --git a/include/d/d_linkage.h b/include/d/d_linkage.h new file mode 100644 index 00000000..fd6fcc39 --- /dev/null +++ b/include/d/d_linkage.h @@ -0,0 +1,106 @@ +#ifndef D_LINKAGE_H +#define D_LINKAGE_H + +#include "common.h" +#include "d/a/d_a_base.h" +#include "d/d_jnt_col.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" + +class dAcObjBase_c; +class dBgS_Acch; + +// Previously Known as `ActorCarryStruct` +// Size: 0xA8 +class dLinkage_c { +public: + dLinkage_c(); + +public: + enum ConnectionType_e { + CONNECTION_0 = 0, + CONNECTION_1 = 1, + CONNECTION_2 = 2, + CONNECTION_3 = 3, + CONNECTION_4 = 4, + CONNECTION_5 = 5, + CONNECTION_6 = 6, + CONNECTION_7 = 7, + CONNECTION_8 = 8, + CONNECTION_9 = 9, + }; + enum State_e { + STATE_0 = 0, + STATE_ACTIVE = 1, + STATE_2 = 2, // Hold? + STATE_3 = 3, // Roll? + STATE_DELETE = 4, + }; + enum Flag_e { + }; + +public: + void onFlag(u32 flag) { + carryFlags |= flag; + } + void offFlag(u32 flag) { + carryFlags &= ~flag; + } + bool checkFlag(u32 flag) const { + return (carryFlags & flag) != 0; + } + + // Int Required on return -> will use enum when possible + int getState() const { + return mState; + } + + bool checkState(State_e state) const { + return mState == state; + } + + bool checkType_1_3_5_6_9() const { + return mType == CONNECTION_1 || mType == CONNECTION_3 || mType == CONNECTION_5 || mType == CONNECTION_6 || + mType == CONNECTION_9; + } + + bool checkConnection(ConnectionType_e type) const { + return (checkState(STATE_ACTIVE) && mType == type); + } + +public: + void set(u32 flags, f32, f32, f32, void *unk); + bool tryAttach(dAcObjBase_c *, dAcObjBase_c *, dAcRefBase_c *, ConnectionType_e, bool); + void fn_80050DC0(dAcObjBase_c *, f32, f32, mAng); + void fn_80050E00(dAcObjBase_c *, f32, f32, mAng); + void fn_80050E40(dAcObjBase_c *, f32, f32, mAng); + void fn_80050EA0(dAcObjBase_c *); + void fn_800511E0(dAcObjBase_c *); + void bushTpFunc(dBgS_Acch &); + void fn_80051190(dAcObjBase_c *); + void fn_80050EB0(dAcObjBase_c *); + bool fn_800513C0() const; + +public: + /* 0x00 */ dAcRefBase_c mControllingActor; + /* 0x0C */ dAcRefBase_c *pLinkedActor; + /* 0x10 */ u32 carryFlags; + /* 0x14 */ ConnectionType_e mType; + /* 0x18 */ u16 field_0x18; + /* 0x1A */ u16 field_0x1A; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ mMtx_c carryTransMtx; + /* 0x58 */ mMtx_c field_0x58; + /* 0x88 */ State_e mState; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 field_0x98; + /* 0x9C vt*/ virtual ~dLinkage_c(); // usually i would like functions sepearte, but this is the placement. + /* 0xA0 */ dJntCol_c *field_0xA0; + /* 0xA4 */ u32 field_0xA4; +}; + +#endif |
