summaryrefslogtreecommitdiff
path: root/include/d/a
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2025-05-25 15:51:35 -0400
committerGitHub <noreply@github.com>2025-05-25 15:51:35 -0400
commitfd7d30d32283d03a412e8c401d04418351cf686a (patch)
treee88bed25f474f06552cd7a7ea7067a0beead4414 /include/d/a
parent018ef1971cd53aa8e78154789bcf6cac2f19b603 (diff)
d_linkage is largely done (#176)
Diffstat (limited to 'include/d/a')
-rw-r--r--include/d/a/d_a_player.h5
-rw-r--r--include/d/a/obj/d_a_obj_base.h66
-rw-r--r--include/d/a/obj/d_a_obj_boomerang.h120
-rw-r--r--include/d/a/obj/d_a_obj_ring.h3
-rw-r--r--include/d/a/obj/d_a_obj_switch.h6
-rw-r--r--include/d/a/obj/d_a_obj_tubo.h1
6 files changed, 146 insertions, 55 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"