mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 08:42:57 -04:00
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>
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user