d_linkage is largely done (#176)

This commit is contained in:
Elijah Thomas
2025-05-25 15:51:35 -04:00
committed by GitHub
parent 018ef1971c
commit fd7d30d322
23 changed files with 738 additions and 161 deletions
+5
View File
@@ -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();
+15 -51
View File
@@ -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?
+120
View File
@@ -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
-3
View File
@@ -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;
+5 -1
View File
@@ -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;
+1
View File
@@ -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"
+1 -1
View File
@@ -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 {
+106
View File
@@ -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
+4
View File
@@ -179,6 +179,10 @@ public:
y.mVal += (s16)val;
}
void addX(const s32 &fx) {
x += fx;
}
mAng x, y, z;
static mAng3_c Zero;