mirror of
https://github.com/zeldaret/ss
synced 2026-07-08 22:04:41 -04:00
d_linkage is largely done (#176)
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
@@ -179,6 +179,10 @@ public:
|
||||
y.mVal += (s16)val;
|
||||
}
|
||||
|
||||
void addX(const s32 &fx) {
|
||||
x += fx;
|
||||
}
|
||||
|
||||
mAng x, y, z;
|
||||
|
||||
static mAng3_c Zero;
|
||||
|
||||
Reference in New Issue
Block a user