summaryrefslogtreecommitdiff
path: root/include/d/a/obj
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-09-12 22:36:34 +0200
committerGitHub <noreply@github.com>2024-09-12 16:36:34 -0400
commit1180e1f4860d62bccd64bfa2a29eaeebd2c4b019 (patch)
treece6e231ef46aacbdad52ad7f6cbcd9d02dba555e /include/d/a/obj
parente2c4bb7be7fa731a335bce4bc22283d899133e39 (diff)
m3d (#13)
* Initial M3d Pass * `m_bmdl` and `m_bline` left --------- Co-authored-by: elijah-thomas774 <elijahthomas774@gmail.com> Co-authored-by: Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>
Diffstat (limited to 'include/d/a/obj')
-rw-r--r--include/d/a/obj/d_a_obj_base.h57
-rw-r--r--include/d/a/obj/d_a_obj_lava_F200.h26
-rw-r--r--include/d/a/obj/d_a_obj_mole_soil.h39
-rw-r--r--include/d/a/obj/d_a_obj_ring.h38
-rw-r--r--include/d/a/obj/d_a_obj_smoke.h30
-rw-r--r--include/d/a/obj/d_a_obj_sun_light.h31
6 files changed, 209 insertions, 12 deletions
diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h
index d4a30b6a..02a1b24e 100644
--- a/include/d/a/obj/d_a_obj_base.h
+++ b/include/d/a/obj/d_a_obj_base.h
@@ -4,7 +4,25 @@
#include "d/a/d_a_base.h"
#include "m/m_mtx.h"
#include "m/types_m.h"
+#include "nw4r/g3d/g3d_resfile.h"
+// Size: 0xA8
+struct ActorCarryStruct {
+ /* 0x00 */ fLiNdBa_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 */ u8 field_0x8C[0x10]; // mQuat_c
+ /* 0x9C */ void *dtor; // ???
+ /* 0xA0 */ u32 field_0xA0;
+ /* 0xA4 */ u32 field_0xA4;
+};
// Ghidra: ActorObjectBase
// size: 0x330
@@ -26,23 +44,29 @@ public:
f32 forwardSpeed;
f32 forwardAccel;
f32 forwardMaxSpeed;
- // TODO: add the rest
- u8 unk1[0x15C - 0x150];
+ mVec3_c velocity;
/* 0x15C */ mMtx_c worldMatrix;
-
nw4r::math::AABB boundingBox;
- u8 unk_0x1A4[0x330 - 0x1A4];
+ u8 unk_0x1A4[0x1E8 - 0x1A4];
+
+ /* 0x1E8 */ mVec3_c posIncrements;
+
+ u8 unk_0x1F4[0x210 - 0x1F4];
+
+ /* 0x210 */ ActorCarryStruct mActorCarryInfo;
+
+ u8 unk_0x1EC[0x330 - 0x2B8];
public:
// could be their own thing?
- /* 8002de40 */ static void *getOarcFile(char *oarcName, char *fileName);
- /* 8002de60 */ static void *getOarcSubEntry(char *oarcName, char *fileName);
- /* 8002de80 */ static void *getOarcResFile(char *oarcName);
- /* 8002de90 */ static void *getOarcModelFile(char *oarcName);
- /* 8002dea0 */ static void *getOarcZev(char *oarcName);
- /* 8002deb0 */ static void *getOarcDZB(char *dzbName);
- /* 8002ded0 */ static void *getOarcPLC(char *plcName);
+ /* 8002de40 */ static void *getOarcFile(const char *oarcName, const char *fileName);
+ /* 8002de60 */ static void *getOarcSubEntry(const char *oarcName, const char *fileName);
+ /* 8002de80 */ static void *getOarcResFile(const char *oarcName);
+ /* 8002de90 */ static void *getOarcModelFile(const char *oarcName);
+ /* 8002dea0 */ static void *getOarcZev(const char *oarcName);
+ /* 8002deb0 */ static void *getOarcDZB(const char *dzbName);
+ /* 8002ded0 */ static void *getOarcPLC(const char *plcName);
public:
/* 8002def0 */ dAcObjBase_c();
@@ -74,7 +98,7 @@ public:
/* 8002eb30 */ void fn_8002EB30(void *);
/* 8002eb90 */ void putInODesert(f32 depth, mVec3_c *position);
// Disabling makes Items and Link Disappear
- /* 8002ec70 */ void drawModelType1();
+ /* 8002ec70 */ void drawModelType1(m3d::smdl_c *smdl);
// Disabling make Lava and other objects Disappear
/* 8002ecd0 */ void drawModel2();
/* 8002ed20 */ void fn_8002ed20();
@@ -93,6 +117,15 @@ public:
mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2);
/* 8002f260 */ static dAcBase_c *createActorUnkGroup3(char *name, u32 roomId, u32 params1, mVec3_c *pos,
mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id, u8 viewclipId);
+
+protected:
+ inline void setBoundingBox(mVec3_c min, mVec3_c max) {
+ boundingBox.min = min;
+ boundingBox.max = max;
+ }
};
+// Actors' createHeap functions often have patterns that can be matched with this macro
+#define TRY_CREATE(thing) do { bool result = (thing); if (!result) return result; } while (0);
+
#endif
diff --git a/include/d/a/obj/d_a_obj_lava_F200.h b/include/d/a/obj/d_a_obj_lava_F200.h
new file mode 100644
index 00000000..8024801e
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_lava_F200.h
@@ -0,0 +1,26 @@
+#ifndef D_A_OBJ_LAVA_F200_H
+#define D_A_OBJ_LAVA_F200_H
+
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_anmmatclr.h>
+#include <m/m3d/m_anmtexsrt.h>
+#include <m/m3d/m_smdl.h>
+
+class dAcOlavaF200_c : public dAcObjBase_c {
+public:
+ dAcOlavaF200_c() {}
+ virtual ~dAcOlavaF200_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+private:
+ nw4r::g3d::ResFile mBrres;
+ m3d::smdl_c mModels[2];
+ m3d::anmTexSrt_c mTexAnms[2];
+ m3d::anmMatClr_c mClrAnms[2];
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_mole_soil.h b/include/d/a/obj/d_a_obj_mole_soil.h
new file mode 100644
index 00000000..34342bf8
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_mole_soil.h
@@ -0,0 +1,39 @@
+#ifndef D_A_OBJ_MOLE_SOIL_H
+#define D_A_OBJ_MOLE_SOIL_H
+
+#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 dAcOmoleSoil_c : public dAcObjBase_c {
+public:
+ dAcOmoleSoil_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOmoleSoil_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+ STATE_FUNC_DECLARE(dAcOmoleSoil_c, Wait);
+ STATE_FUNC_DECLARE(dAcOmoleSoil_c, Appear);
+ STATE_FUNC_DECLARE(dAcOmoleSoil_c, DisAppear);
+
+private:
+ const static f32 sHalfScale;
+ const static f32 sFullScale;
+
+ u8 getNextState() {
+ return mDesiredNextState;
+ }
+
+ nw4r::g3d::ResFile mBrres;
+ m3d::smdl_c mModel;
+ STATE_MGR_DECLARE(dAcOmoleSoil_c);
+ f32 mScale;
+ u8 mDesiredNextState;
+ bool field_0x391;
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_ring.h b/include/d/a/obj/d_a_obj_ring.h
new file mode 100644
index 00000000..5b5b69e7
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_ring.h
@@ -0,0 +1,38 @@
+#ifndef D_A_OBJ_RING_H
+#define D_A_OBJ_RING_H
+
+#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:
+ dAcOring_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOring_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+ STATE_FUNC_DECLARE(dAcOring_c, Move);
+
+ u8 getArgFromParams() {
+ u32 p = (params & 3);
+ return p != 3 ? p : 0;
+ }
+
+private:
+
+ static u32 ROT_PER_TICK;
+
+ m3d::smdl_c mModel;
+ STATE_MGR_DECLARE(dAcOring_c);
+ u8 field_0x388;
+ f32 field_0x38C;
+
+
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_smoke.h b/include/d/a/obj/d_a_obj_smoke.h
new file mode 100644
index 00000000..dd1f404b
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_smoke.h
@@ -0,0 +1,30 @@
+#ifndef D_A_OBJ_SMOKE_H
+#define D_A_OBJ_SMOKE_H
+
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_anmtexsrt.h>
+#include <m/m3d/m_smdl.h>
+#include <s/s_State.hpp>
+#include <s/s_StateMgr.hpp>
+
+class dAcOsmoke_c : public dAcObjBase_c {
+public:
+ dAcOsmoke_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOsmoke_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+ STATE_FUNC_DECLARE(dAcOsmoke_c, Wait);
+
+private:
+ nw4r::g3d::ResFile mBrres;
+ m3d::smdl_c mModel;
+ m3d::anmTexSrt_c mTexAnm;
+ STATE_MGR_DECLARE(dAcOsmoke_c);
+ u8 mType;
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_sun_light.h b/include/d/a/obj/d_a_obj_sun_light.h
new file mode 100644
index 00000000..b3badc71
--- /dev/null
+++ b/include/d/a/obj/d_a_obj_sun_light.h
@@ -0,0 +1,31 @@
+#ifndef D_A_OBJ_SUN_LIGHT_H
+#define D_A_OBJ_SUN_LIGHT_H
+
+#include <d/a/obj/d_a_obj_base.h>
+#include <m/m3d/m_anmtexsrt.h>
+#include <m/m3d/m_smdl.h>
+#include <s/s_State.hpp>
+#include <s/s_StateMgr.hpp>
+
+class dAcOsunLight_c : public dAcObjBase_c {
+public:
+ dAcOsunLight_c() : mStateMgr(*this, sStateID::null) {}
+ virtual ~dAcOsunLight_c() {}
+ virtual bool createHeap() override;
+ virtual int create() override;
+ virtual int actorExecute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
+ bool isDay();
+
+ STATE_FUNC_DECLARE(dAcOsunLight_c, Wait);
+
+private:
+ nw4r::g3d::ResFile mBrres;
+ m3d::smdl_c mModel;
+ STATE_MGR_DECLARE(dAcOsunLight_c);
+ m3d::anmTexSrt_c mTexAnm;
+};
+
+#endif