diff options
| author | robojumper <robojumper@gmail.com> | 2024-09-12 22:36:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-12 16:36:34 -0400 |
| commit | 1180e1f4860d62bccd64bfa2a29eaeebd2c4b019 (patch) | |
| tree | ce6e231ef46aacbdad52ad7f6cbcd9d02dba555e /include/d | |
| parent | e2c4bb7be7fa731a335bce4bc22283d899133e39 (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')
| -rw-r--r-- | include/d/a/e/d_a_e_hb_leaf.h | 59 | ||||
| -rw-r--r-- | include/d/a/e/d_a_en_base.h (renamed from include/d/a/en/d_a_en_base.h) | 0 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_base.h | 57 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_lava_F200.h | 26 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_mole_soil.h | 39 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_ring.h | 38 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_smoke.h | 30 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_sun_light.h | 31 |
8 files changed, 268 insertions, 12 deletions
diff --git a/include/d/a/e/d_a_e_hb_leaf.h b/include/d/a/e/d_a_e_hb_leaf.h new file mode 100644 index 00000000..5ac98cd0 --- /dev/null +++ b/include/d/a/e/d_a_e_hb_leaf.h @@ -0,0 +1,59 @@ +#ifndef D_A_E_HB_LEAF_H +#define D_A_E_HB_LEAF_H + +#include <c/c_math.h> +#include <d/a/obj/d_a_obj_base.h> +#include <m/m3d/m_anmmdl.h> +#include <m/m3d/m_anmtexpat.h> + +extern "C" bool fn_800B9D80(f32, f32, f32 *, int, const mVec3_c &, u32); + +class dAcEhb_leaf_c : public dAcObjBase_c { +public: + dAcEhb_leaf_c() : someFloat(unkFloat0), field_0x3CC(0), field_0x3DE(0) {} + virtual ~dAcEhb_leaf_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int actorExecute() override; + virtual int draw() override; + virtual int doDelete() override; + + void setAnm(const char *anm, f32 pos); + +private: + const static f32 unkFloat0; + const static f32 unkFloat1; + + m3d::mdlAnmChr mModel; // 0x330 + m3d::anmTexPat_c mAnm; // 0x398 + + f32 someFloat; // 0x3C4 + UNKWORD field_0x3C8; // 0x3C8 + u8 field_0x3CC; // 0x3CC + mVec3_c mStartingPos; // 0x3D0 + u16 someRot; // 0x3DC + u8 field_0x3DE; // 0x3DE + u8 mType; // 0x3DF + + bool isNearZero() { + return fabsf(someFloat) <= FLT_EPSILON; + } + + bool isHidden() { + return mType != 0 && isNearZero() ? true : false; + } + + void doCheck() { + fn_800B9D80(10.0f, 0.2f, &someFloat, roomid, mStartingPos, 0); + } + + int getParam1() { + return params & 7; + } + + int getParam2() { + return params >> 7 & 3; + } +}; + +#endif diff --git a/include/d/a/en/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index a24957ba..a24957ba 100644 --- a/include/d/a/en/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h 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 |
