Updated CC collision (#80)

* c_cc_d soooo close

* d_cc_shape_colliders -> d_cc_d

* ported over changes from #43

* Oops, didnt save

* use better collision functions in bombf

* bombf fixes

* bombf actorPostCreate matching

* fix

* small fix for cCcD_UnkAttr Set function

* more cleanup(?) for c_cc_d

* d_cc_mass_s OK

* Initial d_cc_s setup

* some easy funcs

---------

Co-authored-by: robojumper <robojumper@gmail.com>
This commit is contained in:
Elijah Thomas
2024-11-01 17:07:16 -04:00
committed by GitHub
parent 1d17e35316
commit 8a3710824b
74 changed files with 4523 additions and 1963 deletions
+24 -2
View File
@@ -2,18 +2,40 @@
#define D_A_BOMBF_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_bomb.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/time_area_mgr.h"
class dAcBombf_c : public dAcObjBase_c {
public:
dAcBombf_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dAcBombf_c() {}
virtual bool createHeap() override;
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;
virtual int actorCreate() override;
virtual int actorPostCreate() override;
STATE_FUNC_DECLARE(dAcBombf_c, Wait);
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcBombf_c);
void regrowBomb();
/* 0x330 */ m3d::smdl_c mModel;
/* 0x34C */ STATE_MGR_DECLARE(dAcBombf_c);
/* 0x388 */ dAcRef_c<dAcBomb_c> mBombRef;
/* 0x394 */ UNKWORD field_0x394;
/* 0x398 */ cBgS_PolyInfo field_0x398;
/* 0x3C4 */ TimeAreaStruct mTimeAreaStruct;
/* 0x3D0 */ bool field_0x3D0;
/* 0x3D1 */ u8 mDespawnSceneFlag;
/* 0x3D2 */ u8 field_0x3D2;
/* 0x3D3 */ u8 field_0x3D3;
/* 0x3D4 */ u8 field_0x3D4;
};
#endif
+1
View File
@@ -223,6 +223,7 @@ public:
/* 0x35C */ u32 mForceOrPreventActionFlags;
/* 0x360 */ UNKWORD field_0x360;
/* 0x364 */ u32 mActionFlags;
/* 0x368 */ u32 mActionFlagsCont;
inline bool checkFlags0x340(u32 mask) const {
return (someFlags_0x340 & mask) != 0;
+60
View File
@@ -0,0 +1,60 @@
#ifndef D_A_OBJ_ARROW_H
#define D_A_OBJ_ARROW_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateID.hpp"
#include "toBeSorted/effects_struct.h"
class dAcArrow_c : public dAcObjBase_c {
public:
dAcArrow_c() : mPolyInfo(), mStateMgr(*this, sStateID::null) {}
virtual ~dAcArrow_c();
virtual bool createHeap() override;
virtual int create() override;
virtual int doDelete() override;
virtual int actorExecute() override;
virtual int draw() override;
STATE_FUNC_DECLARE(dAcArrow_c, Wait);
STATE_FUNC_DECLARE(dAcArrow_c, Move);
STATE_FUNC_DECLARE(dAcArrow_c, ActorStop);
STATE_FUNC_DECLARE(dAcArrow_c, BgStop);
STATE_FUNC_DECLARE(dAcArrow_c, Bound);
void hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB);
public:
static cCcD_SrcGObj sCcSrcInf;
static dCcD_SrcCps sCc1;
static const dCcD_SrcSph sCc2;
/* 0x330 */ nw4r::g3d::ResFile mResFile;
/* 0x334 */ m3d::smdl_c mModel;
/* 0x350 */ dAcRef_c<dAcObjBase_c> mRef1;
/* 0x35C */ dCcD_Cps mCcCps;
/* 0x4CC */ dCcD_Sph mCcSph;
/* 0x61C */ cBgS_PolyInfo mPolyInfo; // ??
/* 0x648 */ EffectsStruct mEffects;
/* 0x67C */ u32 field_0x67C;
/* 0x680 */ u8 mSubType;
/* 0x681 */ u8 field_0x681;
/* 0x682 */ u8 mDespawnTimer;
/* 0x684 */ s16 field_0x684;
/* 0x686 */ u8 field_0x686[0x688 - 0x686];
/* 0x688 */ u16 field_0x688;
/* 0x68A */ u16 field_0x68A;
/* 0x68C */ u8 field_0x68C[0x6A8 - 0x68C];
/* 0x6A8 */ f32 field_0x6A8;
/* 0x6AC */ u8 field_0x6AC[0x6F8 - 0x6AC];
/* 0x6F8 */ dAcRef_c<dAcObjBase_c> mRef2;
/* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c);
};
#endif
+3 -2
View File
@@ -2,8 +2,8 @@
#define D_A_OBJ_BASE_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/cc/d_cc_d.h"
#include "m/m3d/m_shadow.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
@@ -11,6 +11,7 @@
#include "m/m_vec.h"
#include "m/types_m.h"
// Size: 0xA8
struct ActorCarryStruct {
/* 0x00 */ fLiNdBa_c actorLink;
@@ -68,7 +69,7 @@ public:
/* 0x1B0 */ u8 unk_0x1B0[0x1C0 - 0x1B0];
/* 0x1C0 */ UnkCCDStruct mCCdStruct;
/* 0x1C0 */ cCcD_Stts mStts;
/* 0x1FC */ mVec3_c mStartingPos;
/* 0x208 */ mAng3_c mStartingRot;
@@ -1,20 +1,32 @@
#ifndef D_A_BOMB_H
#define D_A_BOMB_H
#ifndef D_A_OBJ_BOMB_H
#define D_A_OBJ_BOMB_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/bg/d_bg_s_lin_chk.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/c/c_bg_s_poly_info.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_shadow.h"
#include "m/m3d/m_smdl.h"
#include "m/m_mtx.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "s/s_StateID.hpp"
#include "toBeSorted/effects_struct.h"
// This may need its own file and could be independent of a bomb
class UnkBombColInfo : public cBgS_PolyInfo {
public:
UnkBombColInfo() : mField_0x10(0), mField_0x14(0), mField_0x18(0) {}
u32 mField_0x10;
u32 mField_0x14;
u32 mField_0x18;
};
class dAcBomb_c : public dAcObjBase_c {
public:
dAcBomb_c();
dAcBomb_c() : mStateMgr(*this, sStateID::null), mSelfRef(this), mEffect1(this), mEffect2(this) {}
virtual ~dAcBomb_c();
/* vt 0x08 */ virtual int create() override;
@@ -32,19 +44,28 @@ public:
STATE_FUNC_DECLARE(dAcBomb_c, Carry);
STATE_FUNC_DECLARE(dAcBomb_c, WindCarry);
private:
void setTransformFromFlower(const mMtx_c &);
public:
/* 0x330 */ nw4r::g3d::ResFile mBrres;
/* 0x334 */ m3d::smdl_c mMdl;
/* 0x350 */ u8 _0[0x358 - 0x350];
/* 0x350 */ dShadowCircle_c mShdw;
/* 0x358 */ dBgS_BombAcch mAcch;
/* 0x708 */ dBgS_AcchCir mAcchCir;
/* 0x764 */ dCcD_Sph mCcDSph;
/* 0x8B4 */ mMtx_c mMtx;
/* 0x8E4 */ dBgS_BombLinChk mLinChk;
/* 0x97C */ u8 _1[0x9D4 - 0x97C];
/* 0x97C */ UnkBombColInfo mUnkInfo;
/* 0x9B4 */ u8 _0[0x9B8 - 0x9B4];
/* 0x9B8 */ dAcBomb_c *mSelfRef;
/* 0x9BC */ u8 _1[0x9D4 - 0x9BC];
/* 0x9D4 */ EffectsStruct mEffect1;
/* 0xA08 */ EffectsStruct mEffect2;
/* 0xA3C */ u8 _2[0xA9C - 0xA3C];
/* 0xA3C */ u8 _2[0xA44 - 0xA3C];
/* 0xA44 */ s16 mField_0xA44;
/* 0xA46 */ u8 _3[0xA50 - 0xA46];
/* 0xA50 */ f32 mField_0xA50;
/* 0xA54 */ u8 _4[0xA9C - 0xA54];
/* 0xA9C */ STATE_MGR_DECLARE(dAcBomb_c);
};
+3 -3
View File
@@ -2,7 +2,7 @@
#define D_A_O_SPIKE_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "m/m_vec.h"
#include "nw4r/g3d/g3d_resfile.h"
@@ -25,11 +25,11 @@ public:
static const mVec3_c sVec2;
private:
static dCcD_SrcAabb sCcSrc;
static dCcD_SrcUnk sCcSrc;
nw4r::g3d::ResFile mResFile;
m3d::smdl_c mMdl;
dCcD_Aabb mCollision;
dCcD_Unk mCollision;
STATE_MGR_DECLARE(dAcOspike_c);
};
+1 -1
View File
@@ -3,7 +3,7 @@
#include "c/c_math.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_smdl.h"
#include "nw4r/g3d/g3d_resfile.h"
#include "s/s_State.hpp"
+1 -1
View File
@@ -3,7 +3,7 @@
#include "c/c_math.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
+1
View File
@@ -2,6 +2,7 @@
#define C_BG_S_POLY_INFO_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_bg_w.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "m/m_vec.h"
+912
View File
@@ -1,4 +1,916 @@
#ifndef C_CC_D_H
#define C_CC_D_H
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/col/c/c_m3d.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/col/c/c_m3d_g_cps.h"
#include "d/col/c/c_m3d_g_cyl.h"
#include "d/col/c/c_m3d_g_sph.h"
#include "d/col/c/c_m3d_g_tri.h"
#include "d/col/c/c_m3d_g_unk.h"
#include "m/m_vec.h"
#include "nw4r/types_nw4r.h"
class dAcObjBase_c;
class cCcD_CpsAttr;
class cCcD_TriAttr;
class cCcD_UnkAttr;
class cCcD_CylAttr;
class cCcD_SphAttr;
class cCcD_DivideInfo {
private:
/* 0x00 */ u32 mXDivInfo;
/* 0x04 */ u32 mYDivInfo;
/* 0x08 */ u32 mZDivInfo;
/* 0x0C vtable */
public:
cCcD_DivideInfo();
virtual ~cCcD_DivideInfo();
// Following two funcs were probably inlined based on how other classes went
void Set(u32 xDivInfo, u32 yDivInfo, u32 zDivInfo) {
mXDivInfo = xDivInfo;
mYDivInfo = yDivInfo;
mZDivInfo = zDivInfo;
}
bool Chk(cCcD_DivideInfo const &other) const {
if ((mXDivInfo & other.mXDivInfo) && (mZDivInfo & other.mZDivInfo) && (mYDivInfo & other.mYDivInfo)) {
return true;
} else {
return false;
}
}
};
class cCcD_DivideArea : public cM3dGAab {
private:
/* 0x18 */ bool mXDiffIsZero;
/* 0x1C */ f32 mScaledXDiff;
/* 0x20 */ f32 mInvScaledXDiff;
/* 0x24 */ bool mYDiffIsZero;
/* 0x28 */ f32 mScaledYDiff;
/* 0x2C */ f32 mInvScaledYDiff;
/* 0x30 */ bool mZDiffIsZero;
/* 0x34 */ f32 mScaledZDiff;
/* 0x38 */ f32 mInvScaledZDiff;
/* 0x3C vtable */
public:
cCcD_DivideArea();
virtual ~cCcD_DivideArea();
void SetArea(cM3dGAab const &);
void CalcDivideInfo(cCcD_DivideInfo *, cM3dGAab const &);
void CalcDivideInfoOverArea(cCcD_DivideInfo *, cM3dGAab const &);
};
class cCcD_ShapeAttr {
public:
cM3dGAab mAab;
cCcD_DivideInfo mInfo;
enum ShapeType {
SHAPE_SPHERE = 0,
SHAPE_CYLINDER = 1,
SHAPE_CAPSULE = 2,
SHAPE_TRIANGLE = 3,
SHAPE_DEFAULT = 4,
};
struct Shape {
~Shape();
/* 0x00 */ int mField_0x00;
/* 0x04 */ mVec3_c mField_0x04;
/* 0x10 */ mVec3_c mField_0x10;
/* 0x1C */ mVec3_c mField_0x1C;
};
cCcD_ShapeAttr();
/* vt 0x08 */ virtual ~cCcD_ShapeAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *);
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *);
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) = 0;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) = 0;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) = 0;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) = 0;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) = 0;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *);
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) = 0;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) = 0;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) = 0;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) = 0;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) = 0;
/* vt 0x40 */ virtual mVec3_c &GetCoP();
/* vt 0x44 */ virtual void CalcAabBox() = 0;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const = 0;
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const = 0;
/* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) = 0;
cM3dGAab &GetWorkAab() {
return mAab;
}
cM3dGAab const &GetWorkAab() const {
return mAab;
}
static mVec3_c sVirtualCenter;
};
struct cCcD_SrcCpsAttr {
f32 mRadius;
};
class cCcD_CpsAttr : public cCcD_ShapeAttr, public cM3dGCps {
public:
mVec3_c mVirtCenter;
cCcD_CpsAttr();
void Set(const cCcD_SrcCpsAttr &src);
void SetVirtCenter(mVec3_c *);
f32 CrossCoCommon(cCcD_ShapeAttr &, f32);
/* vt 0x08 */ virtual ~cCcD_CpsAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
/* vt 0x44 */ virtual void CalcAabBox() override;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
};
class cCcD_TriAttr : public cCcD_ShapeAttr, public cM3dGTri {
public:
cCcD_TriAttr();
/* vt 0x08 */ virtual ~cCcD_TriAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
/* vt 0x44 */ virtual void CalcAabBox() override;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
};
struct cCcD_SrcUnkAttr {
f32 mMinX, mMinY, mMinZ;
f32 mMaxX, mMaxY, mMaxZ;
mVec3_c &getMin() const {
return *(mVec3_c *)&mMinX;
}
mVec3_c &getMax() const {
return *(mVec3_c *)&mMaxX;
}
};
class cCcD_UnkAttr : public cCcD_ShapeAttr, public cM3dGUnk {
public:
cCcD_UnkAttr();
void Set(const cCcD_SrcUnkAttr &src);
/* vt 0x08 */ virtual ~cCcD_UnkAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
/* vt 0x44 */ virtual void CalcAabBox() override;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
};
struct cCcD_SrcCylAttr {
f32 mRadius;
f32 mHeight;
};
class cCcD_CylAttr : public cCcD_ShapeAttr, public cM3dGCyl {
public:
cCcD_CylAttr();
void Set(const cCcD_SrcCylAttr &);
/* vt 0x08 */ virtual ~cCcD_CylAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
/* vt 0x44 */ virtual void CalcAabBox() override;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
};
struct cCcD_SrcSphAttr {
f32 mRadius;
};
class cCcD_SphAttr : public cCcD_ShapeAttr, public cM3dGSph {
public:
cCcD_SphAttr();
void Set(const cCcD_SrcSphAttr &);
/* vt 0x08 */ virtual ~cCcD_SphAttr();
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
/* vt 0x44 */ virtual void CalcAabBox() override;
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
/* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const override;
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
};
// This has changed bit
class cCcD_Stts {
public:
/* 0x00 */ int mAtApid;
/* 0x04 */ int mAtOldApid;
/* 0x08 */ int mTgApid;
/* 0x0C */ int mTgOldApid;
/* 0x10 */ mVec3_c mField_0x10;
/* 0x1C */ mVec3_c mField_0x1C;
/* 0x28 */ mVec3_c mCcMove;
/* 0x34 */ dAcObjBase_c *mpActor;
/* 0x38 */ int mRank;
cCcD_Stts(dAcObjBase_c *);
void Move();
int GetID() const;
void PlusCcMove(f32, f32, f32);
void ClrCcMove();
int GetWeight(int) const; // idk what to really call it but it removes the rank table
void SetDefaultRank() {
mRank = 0xD;
}
void SetRank(int rank) {
mRank = rank;
}
dAcObjBase_c *GetAc() {
return mpActor;
}
};
struct cCcD_SrcGObjTgInfo {
/* 0x00 */ u16 mField_0x0;
/* 0x02 */ u16 mField_0x2;
};
struct cCcD_SrcGObjTg {
/* 0x00 */ u32 mType;
/* 0x04 */ u32 mSPrm;
/* 0x08 */ cCcD_SrcGObjTgInfo mInfo;
/* 0x0C */ u16 mField_0x0C;
/* 0x0E */ u16 mField_0x0E;
};
enum cCcD_AtModifiers_e {
/* 0x 0000 0001 */ AT_MOD_FIRE = (1 << 0),
/* 0x 0000 0002 */ AT_MOD_0x2 = (1 << 1),
/* 0x 0000 0004 */ AT_MOD_ELECTRIC = (1 << 2),
/* 0x 0000 0008 */ AT_MOD_WIND = (1 << 3),
/* 0x 0000 0010 */ AT_MOD_0x10 = (1 << 4),
/* 0x 0000 0020 */ AT_MOD_0x20 = (1 << 5),
/* 0x 0000 0040 */ AT_MOD_WATER = (1 << 6),
/* 0x 0000 0080 */ AT_MOD_0x80 = (1 << 7),
/* 0x 0000 0100 */ AT_MOD_0x100 = (1 << 8),
/* 0x 0000 0200 */ AT_MOD_STINKY = (1 << 9),
/* 0x 0000 0400 */ AT_MOD_CURSED = (1 << 10),
};
struct cCcD_SrcGObjAtInfo {
/* 0x00 */ u8 mField_0x0;
/* 0x01 */ u8 mField_0x1;
/* 0x02 */ u16 mModifier;
};
enum cCcD_AtSPrm {
AT_SPRM_DAMAGE = 0x4,
};
struct cCcD_SrcGObjAt {
/* 0x00 */ u32 mType;
/* 0x04 */ u32 mSPrm;
/* 0x08 */ cCcD_SrcGObjAtInfo mInfo;
/* 0x0C */ u8 mDamage;
/* 0x0D */ u8 mField_0xD;
/* 0x0E */ u8 mField_0xE;
/* 0x0F */ u8 mField_0xF;
/* 0x10 */ u16 mField_0x10;
/* 0x12 */ s16 mField_0x12;
};
struct cCcD_SrcGObjCo {
/* 0x00 */ u32 mSPrm;
};
struct cCcD_SrcGObj {
/* 0x00 */ cCcD_SrcGObjAt mObjAt;
/* 0x14 */ cCcD_SrcGObjTg mObjTg;
/* 0x1C */ cCcD_SrcGObjCo mObjCo;
};
class dAcObjBase_c;
class cCcD_Obj;
typedef bool (*cCcD_HitCallback)(
dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB
);
typedef int (*cCcD_ShieldChkCallback)(
dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB
);
class cCcD_GAtTgCoCommonBase {
public:
cCcD_HitCallback mHit_cb;
s8 mEffCounter;
dAcRef_c<dAcObjBase_c> mAc;
u32 mRPrm;
cCcD_GAtTgCoCommonBase();
virtual ~cCcD_GAtTgCoCommonBase();
void dt() {
mEffCounter = 0;
ClrActorInfo();
mHit_cb = nullptr;
}
void ClrActorInfo();
void SetHitActor(dAcObjBase_c *);
dAcObjBase_c *GetActor();
void SubtractEffCounter();
bool ChkEffCounter() {
return mEffCounter > 0;
}
void ClrEffCounter() {
mEffCounter = 0;
}
void SetEffCounterTimer() {
mEffCounter = 5;
}
u32 MskRPrm(u32 m) const {
return mRPrm & m;
}
void SetRPrm(u32 f) {
mRPrm = f;
}
void OnRPrm(u32 m) {
mRPrm |= m;
}
void OffRPrm(u32 m) {
mRPrm = (mRPrm & ~m) | m;
}
};
class cCcD_ObjAt : public cCcD_GAtTgCoCommonBase {
public:
cCcD_ObjAt();
virtual ~cCcD_ObjAt();
void Set(const cCcD_SrcGObjAt &);
void SetAtFlag(u32);
void AdjustHitPos(f32, f32);
void SetVec(const mVec3_c &vec) {
mVec = vec;
}
mVec3_c &GetVec() {
return mVec;
}
void SetHitPos(mVec3_c &pos) {
mHitPos = pos;
}
mVec3_c &GetHitPos() {
return mHitPos;
}
void ClrSet() {
OffSPrm(1);
}
u32 ChkSet() {
return MskSPrm(1);
}
void SetCallback(cCcD_HitCallback cb) {
mHit_cb = cb;
}
u32 MskType(u32 mask) const {
return mSrc.mType & mask;
}
void SetType(u32 flag) {
mSrc.mType = flag;
}
void OnType(u32 m) {
mSrc.mType |= m;
}
void OffType(u32 m) {
mSrc.mType &= ~m;
}
u32 MskSPrm(u32 m) const {
return mSrc.mSPrm & m;
}
void SetSPrm(u32 f) {
mSrc.mSPrm = f;
}
void OnSPrm(u32 m) {
mSrc.mSPrm |= m;
}
void OffSPrm(u32 m) {
mSrc.mSPrm &= ~m;
}
u32 MskTgHitSPrm(u32 m) const {
return mTgHitSrc.mSPrm & m;
}
void SetTgHitSPrm(u32 f) {
mTgHitSrc.mSPrm = f;
}
void OnTgHitSPrm(u32 m) {
mTgHitSrc.mSPrm |= m;
}
void OffTgHitSPrm(u32 m) {
mTgHitSrc.mSPrm &= ~m;
}
const cCcD_SrcGObjAt &GetSrc() const {
return mSrc;
}
void SetTgHitSrc(const cCcD_SrcGObjTg &src) {
mTgHitSrc = src;
}
const cCcD_SrcGObjTg &GetTgHitSrc() const {
return mTgHitSrc;
}
public:
/* 0x1C */ cCcD_SrcGObjAt mSrc;
/* 0x30 */ mVec3_c mHitPos;
/* 0x3C */ mVec3_c mVec;
/* 0x48 */ cCcD_SrcGObjTg mTgHitSrc;
/* 0x58 */ cCcD_HitCallback mField_0x58;
};
class cCcD_ObjTg : public cCcD_GAtTgCoCommonBase {
public:
cCcD_ObjTg();
virtual ~cCcD_ObjTg();
void Set(const cCcD_SrcGObjTg &);
void AdjustHitPos(f32, f32);
void SetHitPos(mVec3_c &pos) {
mHitPos = pos;
}
mVec3_c &GetHitPos() {
return mHitPos;
}
u32 GetAtHitType() const {
return mAtHitSrc.mType;
}
void SetFlag_0xA(u16 flag) {
mSrc.mField_0x0E = flag;
}
u16 GetFlag_0xA(u16 mask) const {
return mSrc.mField_0x0E & mask;
}
void ClrSet() {
OffSPrm(1);
}
u32 ChkSet() {
return MskSPrm(1);
}
void Set_0x4C(u32 f) {
mField_0x4C = f;
}
u32 MskType(u32 mask) const {
return mSrc.mType & mask;
}
void SetType(u32 flag) {
mSrc.mType = flag;
}
void OnType(u32 m) {
mSrc.mType |= m;
}
void OffType(u32 m) {
mSrc.mType &= ~m;
}
u32 MskSPrm(u32 m) const {
return mSrc.mSPrm & m;
}
void SetSPrm(u32 f) {
mSrc.mSPrm = f;
}
void OnSPrm(u32 m) {
mSrc.mSPrm |= m;
}
void OffSPrm(u32 m) {
mSrc.mSPrm &= ~m;
}
u32 MskAtHitSPrm(u32 m) const {
return mAtHitSrc.mSPrm & m;
}
void SetAtHitSPrm(u32 f) {
mAtHitSrc.mSPrm = f;
}
void OnAtHitSPrm(u32 m) {
mAtHitSrc.mSPrm |= m;
}
void OffAtHitSPrm(u32 m) {
mAtHitSrc.mSPrm &= ~m;
}
const cCcD_SrcGObjTg &GetSrc() const {
return mSrc;
}
void SetAtHitSrc(const cCcD_SrcGObjAt &src) {
mAtHitSrc = src;
}
const cCcD_SrcGObjAt &GetAtHitSrc() const {
return mAtHitSrc;
}
void Set_0x4B(u8 val) {
mField_0x4B = val;
}
public:
/* 0x1C */ cCcD_SrcGObjTg mSrc;
/* 0x2C */ mVec3_c mField_0x2C;
/* 0x38 */ mVec3_c mHitPos;
/* 0x44 */ s16 *mShieldFrontRangeYAngle;
/* 0x48 */ s16 mShieldRange;
/* 0x4A */ u8 mField_0x4A;
/* 0x4B */ u8 mField_0x4B;
/* 0x4C */ u32 mField_0x4C;
/* 0x50 */ u32 mField_0x50;
/* 0x54 */ cCcD_ShieldChkCallback mField_0x54;
/* 0x58 */ cCcD_SrcGObjAt mAtHitSrc;
/* 0x6C */ mVec3_c mField_0x6C;
/* 0x78 */ cCcD_HitCallback mField_0x78;
};
class cCcD_ObjCo : public cCcD_GAtTgCoCommonBase {
public:
cCcD_ObjCo();
virtual ~cCcD_ObjCo();
void Set(const cCcD_SrcGObjCo &);
void SetCoFlag(u32);
void AdjustHitPos(f32, f32);
void ClrSet() {
OffSPrm(1);
}
u32 ChkSet() {
return MskSPrm(1);
}
u32 MskSPrm(u32 m) const {
return mSrc.mSPrm & m;
}
void SetSPrm(u32 f) {
mSrc.mSPrm = f;
}
void OnSPrm(u32 m) {
mSrc.mSPrm |= m;
}
void OffSPrm(u32 m) {
mSrc.mSPrm &= ~m;
}
const cCcD_SrcGObjCo &GetSrc() const {
return mSrc;
}
void SetCoHitSrc(const cCcD_SrcGObjCo &src) {
mCoHitSrc = src;
}
public:
/* 0x1C */ cCcD_SrcGObjCo mSrc;
/* 0x20 */ u32 mGrp;
/* 0x24 */ cCcD_SrcGObjCo mCoHitSrc;
/* 0x28 */ cCcD_HitCallback mField_0x28_callback;
};
// Maybe ?
class cCcD_ObjInf {
public:
/* 0x000 */ cCcD_ObjAt mObjAt;
/* 0x05C */ cCcD_ObjTg mObjTg;
/* 0x0D8 */ cCcD_ObjCo mObjCo;
};
class cCcD_Obj {
public:
/* 0x000 */ cCcD_ObjAt mAt;
/* 0x05C */ cCcD_ObjTg mTg;
/* 0x0D8 */ cCcD_ObjCo mCo;
/* 0x104 */ cCcD_Stts *mStts;
/* 0x108 */ u32 mField_0x108;
public:
cCcD_Obj();
virtual ~cCcD_Obj();
virtual cCcD_ShapeAttr *GetShapeAttr() = 0;
virtual cCcD_ObjInf *GetGObjInfo();
void ClrSet();
void Set(const cCcD_SrcGObj &);
void ClrAtHit();
void ClrTgHit();
void ClrCoHit();
const mVec3_c &GetAtHitPos() const;
mVec3_c &GetAtHitPos();
bool GetAtFlag0x2() const;
bool GetAtFlag0x4() const;
bool GetAtFlag0x8() const;
const mVec3_c &GetTgHitPos() const;
mVec3_c &GetTgHitPos();
bool GetTgFlag0x4() const;
bool GetTgFlag0x8() const;
bool ChkAtClawshot() const;
bool ChkAtClawshotDebug() const;
bool ChkAtElectrified() const;
bool ChkAtElectrifiedExtra() const;
bool ChkAtWhippable() const;
bool ChkAtBit24() const;
bool ChkAtArrowStick() const;
bool ChkAtWaterScaleBonk() const;
bool ChkAtSwordBonk() const;
dAcObjBase_c *GetAtActor();
bool ChkTgAtHitType(u32) const;
u32 GetTg_0x58() const;
bool ChkTgBit14() const;
u8 GetTgDamage() const;
u16 GetTgDamageFlags() const;
bool ChkTgSkywardStrike() const;
bool ChkTgBit17() const;
bool ChkTgBit18() const;
bool ChkTgBit19() const;
bool ChkTgBit20() const;
bool ChkTgBit23() const;
bool ChkTgBit24() const;
bool ChkTgBit25() const;
u16 GetTgSoundID() const;
s16 GetTg_0x6A() const;
bool ChkTgBit8() const;
u8 GetTg_0x4A() const;
dAcObjBase_c *GetTgActor();
const mVec3_c &GetTg_0x2C() const;
dAcObjBase_c *GetCoActor();
bool ChkCoBit4() const;
void SetAtFlagsUpper(u32);
bool ChkTgBit1() const;
void AdjustHitPos(f32, f32);
static bool fn_80328ad0(dAcObjBase_c *pObj, u32 attype);
// clang-format off
cCcD_Stts* GetStts() {
return mStts;
}
void SetStts(cCcD_Stts &stts) { mStts = &stts; }
void SetAtVec(const mVec3_c &vec) { mAt.SetVec(vec); }
void OnTgCoFlag(u32 f) {
mTg.OnSPrm(f);
mCo.OnSPrm(f);
}
void SetTgFlag(u32 flag) {
mTg.SetType(flag);
}
void SetAtFlag(u32 flag) {
mAt.SetSPrm(flag);
}
void SetTgFlag_0xA(u16 flag) {
mTg.SetFlag_0xA(flag);
}
bool ChkTgHit() {
return mTg.MskSPrm(1) != 0 && mTg.GetActor() != nullptr;
}
bool ChkAtHit() {
return mAt.MskSPrm(1) != 0 && mAt.GetActor() != nullptr;
}
bool ChkCoHit() {
return mCo.MskSPrm(1) != 0 && mCo.GetActor() != nullptr;
}
dAcObjBase_c *GetAc() {
if (mStts == nullptr) {
return nullptr;
} else {
return mStts->mpActor;
}
}
void ClrCoSet() {
mCo.ClrSet();
}
void ClrAtSet() {
mAt.ClrSet();
}
void ClrTgSet() {
mTg.ClrSet();
}
u32 ChkCoSet() {
return mCo.ChkSet();
}
u32 ChkAtSet() {
return mAt.ChkSet();
}
u32 ChkTgSet() {
return mTg.ChkSet();
}
bool ChkAtEffCounter() { return mAt.ChkEffCounter(); }
bool ChkTgEffCounter() { return mTg.ChkEffCounter(); }
void ClrAtEffCounter() { mAt.ClrEffCounter(); }
void ClrTgEffCounter() { mTg.ClrEffCounter(); }
void ClrCoEffCounter() { mCo.ClrEffCounter(); }
void SetAtEffCounterTimer() { mAt.SetEffCounterTimer(); }
void SetTgEffCounterTimer() { mTg.SetEffCounterTimer(); }
void SubtractAtEffCounter() { mAt.SubtractEffCounter(); }
void SubtractTgEffCounter() { mTg.SubtractEffCounter(); }
void SubtractCoEffCounter() { mCo.SubtractEffCounter(); }
void SetTg_0x4C(u32 f) {
mTg.Set_0x4C(f);
}
void SetAtCallback(cCcD_HitCallback cb) {
mAt.SetCallback(cb);
}
u32 ChkTgNoAtHitInfSet() const {
return mTg.MskSPrm(0x40);
}
u32 ChkAtNoTgHitInfSet() const {
return mAt.MskSPrm(0x40);
}
u32 ChkCoNoCoHitInfSet() const {
return mCo.MskSPrm(0x800);
}
// At
u32 ChkAtNoMass() const {
return mAt.MskSPrm(0x400);
}
u32 GetAtGrp() const {
return mAt.MskSPrm(0x3E);
}
u32 ChkAtNoConHit() const {
return mAt.MskSPrm(0x80);
}
u32 ChkAtStopNoConHit() const {
return mAt.MskSPrm(0x200);
}
u32 ChkAtNoGaurd() const {
return mAt.MskSPrm(0x200000);
}
// Tg
u32 GetTgGrp() const {
return mTg.MskSPrm(0x3E);
}
u32 ChkTgNoConHit() const {
return mTg.MskSPrm(0x100);
}
u32 ChkTgStopNoConHit() const {
return mTg.MskSPrm(0x100000);
}
u32 ChkTgShieldFrontRange() const {
return mTg.MskSPrm(0x400);
}
void SetTg_0x4B(u8 val) {
mTg.Set_0x4B(val);
}
// Co
u32 ChkCoSet2() const {
return mCo.MskSPrm(0x800);
}
u32 ChkCoNoCamHit() const {
return mCo.MskSPrm(0x4000);
}
u32 ChkCoSameActorHit() const {
return mCo.MskSPrm(0x1000);
}
/**
* SET HIT
*/
// Actor Objs
void SetAtHit(cCcD_Obj *other) {
mAt.SetHitActor(other->GetAc());
}
void SetTgHit(cCcD_Obj *other) {
mTg.SetHitActor(other->GetAc());
}
void SetCoHit(cCcD_Obj *other) {
mCo.SetHitActor(other->GetAc());
}
// Hit Positions
void SetAtHitPos(mVec3_c &pos) {
mAt.SetHitPos(pos);
}
void SetTgHitPos(mVec3_c &pos) {
mTg.SetHitPos(pos);
}
/**
* SET SOURCES
*/
void SetAtTgHitSrc(cCcD_Obj *tg) {
mAt.SetTgHitSrc(tg->mTg.GetSrc());
}
void SetTgAtHitSrc(cCcD_Obj *at) {
mTg.SetAtHitSrc(at->mAt.GetSrc());
}
void SetCoCoHitSrc(cCcD_Obj *co) {
mCo.SetCoHitSrc(co->mCo.GetSrc());
}
// clang-format on
};
#endif
+60 -46
View File
@@ -1,7 +1,20 @@
#ifndef C_CC_S_H
#define C_CC_S_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
/**
* This still seems to be exist, but looks like was heavily revised.
* No more virtual functions
* a couple more entry arrays (a Matrix one and a model one)
*
* This file is largely here to support future changes?
* - dCcS copies and pastes the content. Otherwise the ctor is weird
*/
enum WeightType {
WeightType_0 = 0,
@@ -9,52 +22,53 @@ enum WeightType {
WeightType_2 = 2,
};
// class cCcS {
// public:
// /* 0x0000 */ cCcD_Obj *mpObjAt[0x100];
// /* 0x0400 */ cCcD_Obj *mpObjTg[0x300];
// /* 0x1000 */ cCcD_Obj *mpObjCo[0x100];
// /* 0x1400 */ cCcD_Obj *mpObj[0x500];
// /* 0x2800 */ u16 mObjAtCount;
// /* 0x2802 */ u16 mObjTgCount;
// /* 0x2804 */ u16 mObjCoCount;
// /* 0x2806 */ u16 mObjCount;
// /* 0x2808 */ cCcD_DivideArea mDivideArea;
// /* 0x2848 vtable */
class cCcS {
public:
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
/* 0x2D00 */ u16 mObjAtCount;
/* 0x2d02 */ u16 mObjTgCount;
/* 0x2D04 */ u16 mObjCoCount;
/* 0x2D06 */ u16 mObjCount;
/* 0x2D08 */ u32 mUnkCount;
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
/* 0x2D4C */ bool mbAreaSet;
/* 0x2D50 */ mMtx_c mAreas[16][2]; // could be a structure?
/* 0x3350 */ int mAreaCount;
// /* 80264A6C */ cCcS();
// /* 80264A94 */ void Ct();
// /* 80264B60 */ void Dt();
// /* 80264B80 */ WeightType GetWt(u8) const;
// /* 80264BA8 */ void Set(cCcD_Obj *);
// /* 80264C5C */ void ClrCoHitInf();
// /* 80264CF0 */ void ClrTgHitInf();
// /* 80264D90 */ void ClrAtHitInf();
// /* 80264E2C */ bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
// /* 80264F40 */ void ChkAtTg();
// /* 8026515C */ bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
// /* 80265230 */ void ChkCo();
// /* 802653A0 vt[2] */ virtual void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
// /* 802653C8 */ void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
// /* 802655E4 */ void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// /* 80265750 vt[3]*/ virtual void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// /* 80265BB4 */ void CalcArea();
// /* 80265CCC */ void Move();
// /* 80265D30 */ void DrawClear();
// /* 80265DF8 vt[4] */ virtual void
// SetCoGObjInf(bool, bool, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *);
// /* 80265DFC vt[5] */ virtual void
// SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *,
// cCcD_GStts *, cCcD_GStts *, cXyz *);
// /* 80265E00 vt[6] */ virtual bool
// ChkNoHitGAtTg(cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_GStts *, cCcD_GStts *);
// /* 80265E08 vt[7] */ virtual bool
// ChkAtTgHitAfterCross(bool, bool, cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *,
// cCcD_GStts *);
// /* 80265E10 vt[8] */ virtual bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *);
// /* 80030BDC vt[9] */ virtual ~cCcS() {}
// /* 80265E18 vt[10] */ virtual void MoveAfterCheck();
// /* 80265DF4 vt[11] */ virtual void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
// }; // Size = 0x284C
cCcS() {}
void Ct();
void Dt();
void Set(cCcD_Obj *);
void ChkCo(mVec3_c *, dAcObjBase_c *);
bool fn_80357c90(mVec3_c *, mVec3_c *, u32, UNKTYPE *);
// WeightType GetWt(u8) const;
// void ClrCoHitInf();
// void ClrTgHitInf();
// void ClrAtHitInf();
// bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
// void ChkAtTg();
// bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
// void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
// void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
// void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
// void CalcArea();
// void Move();
// void DrawClear();
// void SetCoGObjInf(bool, bool, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts
// *); void SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *,
// cCcD_Stts *, cCcD_GStts *, cCcD_GStts *, cXyz *); bool ChkNoHitGAtTg(cCcD_ObjInf const *, cCcD_ObjInf const *,
// cCcD_GStts *, cCcD_GStts *); bool ChkAtTgHitAfterCross(bool, bool, cCcD_ObjInf const *, cCcD_ObjInf const *,
// cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *); bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *); ~cCcS() {} void
// MoveAfterCheck(); void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
};
#endif /* C_CC_S_H */
+48 -42
View File
@@ -3,7 +3,8 @@
#include "common.h"
#include "math.h"
#include "nw4r/math.h"
#include "nw4r/math.h" // IWYU pragma: export
#include "nw4r/types_nw4r.h"
class cM3dGAab;
class cM3dGCps;
@@ -19,64 +20,69 @@ struct cM3d_Range;
extern const f32 G_CM3D_F_ABS_MIN;
bool cM3d_Len2dSqPntAndSegLine(f32, f32, f32, f32, f32, f32, f32 *, f32 *, f32 *);
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *, f32 *);
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla *, const nw4r::math::VEC3 *);
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, f32 *, f32 *);
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla &, const nw4r::math::VEC3 *);
void cM3d_CalcPla(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *);
int cM3d_Check_LinLin(const cM3dGLin *, const cM3dGLin *, f32 *, f32 *);
bool cM3d_Cross_LinPla(const cM3dGLin *, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
int cM3d_Check_LinLin(const cM3dGLin &, const cM3dGLin *, f32 *, f32 *);
bool cM3d_Cross_LinPla(const cM3dGLin &, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
bool cM3d_Cross_MinMaxBoxLine(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *);
bool cM3d_InclusionCheckPosIn3PosBox3d(
const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, f32
);
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri_Front(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_LinTri(const cM3dGLin *, const cM3dGTri *, nw4r::math::VEC3 *, bool, bool);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_LinTri(const cM3dGLin &, const cM3dGTri &, nw4r::math::VEC3 *, bool, bool);
bool cM3d_Cross_LinTri(
const cM3dGLin *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const cM3dGPla *,
const cM3dGLin &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const cM3dGPla *,
nw4r::math::VEC3 *, bool, bool
);
bool cM3d_Cross_LinTri_Easy(const cM3dGTri *, const nw4r::math::VEC3 *);
bool cM3d_Cross_SphPnt(const cM3dGSph *, const nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph(const cM3dGLin *, const cM3dGSph *, nw4r::math::VEC3 *);
bool cM3d_Cross_SphPnt(const cM3dGSph &, const nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph(const cM3dGLin &, const cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *);
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, nw4r::math::VEC3 *);
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *);
bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, f32 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylTri(const cM3dGCyl *, const cM3dGTri *, nw4r::math::VEC3 *);
int cM3d_Cross_CylLin(const cM3dGCyl *, const cM3dGLin *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
int cM3d_Cross_CylPntPnt(const cM3dGCyl *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylPnt(const cM3dGCyl *, const nw4r::math::VEC3 *);
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *);
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, nw4r::math::VEC3 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *);
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, nw4r::math::VEC3 *);
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_SphTri(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, f32 *);
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylTri(const cM3dGCyl &, const cM3dGTri &, nw4r::math::VEC3 *);
int cM3d_Cross_CylLin(const cM3dGCyl &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
int cM3d_Cross_CylPntPnt(const cM3dGCyl &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
bool cM3d_Cross_CylPnt(const cM3dGCyl &, const nw4r::math::VEC3 &);
bool cM3d_Cross_CpsCps(const cM3dGCps &, const cM3dGCps &, nw4r::math::VEC3 *, f32 *, f32 *);
bool cM3d_Cross_CpsCyl(const cM3dGCps &, const cM3dGCyl &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsSph_CrossPos(const cM3dGCps &, const cM3dGSph &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsSph(const cM3dGCps &, const cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, nw4r::math::VEC3 *);
bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, nw4r::math::VEC3 *);
void cM3d_CalcVecZAngle(const nw4r::math::VEC3 &, mAng3_c *);
void cM3d_PlaneCrossLineProcWork(f32, f32, f32, f32, f32, f32, f32, f32 *, f32 *);
int cM3d_2PlaneCrossLine(const cM3dGPla &, const cM3dGPla &, cM3dGLin *);
bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
f32 cM3d_lineVsPosSuisenCross(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
bool fn_803354e0(cM3dGUnk *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_80336110(cM3dGCyl *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_803364e0(cM3dGCyl *, cM3dGUnk *, f32 *);
bool fn_80336d90(cM3dGCps *, cM3dGUnk *, nw4r::math::VEC3 *);
bool fn_80337690(cM3dGUnk *, cM3dGSph *, nw4r::math::VEC3 *);
bool fn_80337780(cM3dGUnk *, cM3dGSph *, f32 *);
bool cM3d_Cross_UnkTri(const cM3dGUnk &, cM3dGTri &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, nw4r::math::VEC3 *);
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, f32 *);
bool cM3d_Cross_CpsUnk(const cM3dGCps &, cM3dGUnk &, nw4r::math::VEC3 *);
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, nw4r::math::VEC3 *);
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, f32 *);
bool cM3d_Normalize(nw4r::math::VEC3 *);
void cM3d_Normalize_Ex(nw4r::math::VEC3 *);
inline bool cM3d_IsZero(f32 f) {
return fabsf(f) < G_CM3D_F_ABS_MIN;
@@ -89,9 +95,9 @@ inline bool cM3d_IsZero_inverted(f32 param_0) {
inline void
cM3d_InDivPos1(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
nw4r::math::VEC3 tmp;
VEC3Scale(&tmp, pVecB, pF);
VEC3Add(pOut, &tmp, pVecA);
nw4r::math::VEC3 tmp2;
VEC3Scale(&tmp2, pVecB, pF);
VEC3Add(pOut, &tmp2, pVecA);
}
inline void
cM3d_InDivPos2(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
+19 -2
View File
@@ -5,7 +5,7 @@
#include "d/col/c/c_m3d.h"
#include "d/col/c/c_m3d_g_lin.h"
#include "d/col/c/c_m3d_g_sph.h"
#include "m/m_vec.h"
// Axis aligned bounding box
class cM3dGAab {
@@ -23,7 +23,6 @@ public:
bool CrossY(const mVec3_c &) const;
bool UnderPlaneYUnder(f32) const;
bool TopPlaneYUnder(f32) const;
void SetMinMax(const cM3dGAab &);
void SetMin(const mVec3_c &min);
void SetMax(const mVec3_c &max);
void CalcCenter(mVec3_c &) const;
@@ -32,6 +31,11 @@ public:
void Set(const cM3dGSph &);
bool Cross(const mVec3_c &) const;
void SetMinMax(const cM3dGAab &aab) {
SetMin(aab.mMin);
SetMax(aab.mMax);
}
void SetMinMax(const mVec3_c &minMax) {
SetMin(minMax);
SetMax(minMax);
@@ -46,6 +50,19 @@ public:
mMax.x = -1000000000.0f;
}
const mVec3_c &GetMax() const {
return mMax;
}
mVec3_c &GetMax() {
return mMax;
}
const mVec3_c &GetMin() const {
return mMin;
}
mVec3_c &GetMin() {
return mMin;
}
const mVec3_c *GetMaxP(void) const {
return &mMax;
}
+1 -1
View File
@@ -18,7 +18,7 @@ public:
void Set(const mVec3_c &, const mVec3_c &, f32);
void SetR(f32 r);
void Set_0x1C(f32);
bool fn_80337f30(cM3dGUnk *, mVec3_c *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool fn_80337f40(const mVec3_c &) const;
f32 GetR() const {
+11 -2
View File
@@ -17,14 +17,23 @@ public:
void SetH(f32);
void SetR(f32);
bool fn_803380e0(cM3dGUnk *, mVec3_c *);
bool fn_803380f0(cM3dGUnk *, f32 *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool Cross(cM3dGUnk &, f32 *);
bool Cross(const mVec3_c &) const;
void Clamp(const mVec3_c &, mVec3_c &) const;
const mVec3_c &GetC() const {
return mCenter;
}
mVec3_c &GetC() {
return mCenter;
}
f32 GetH() const {
return mHeight;
}
f32 GetR() const {
return mRadius;
}
};
#endif
+12 -10
View File
@@ -3,14 +3,16 @@
#include "common.h"
#include "m/m_vec.h"
#include "nw4r/types_nw4r.h"
class cM3dGLin {
public:
typedef nw4r::math::VEC3 VEC3;
typedef EGG::Vector3f Vector3f;
/* 0x00 */ mVec3_c mStart;
/* 0x0C */ mVec3_c mEnd;
// Needs to be mutable for cCcD_CpsAttr::GetPos and cCcD_CpsAttr::GetShapeAccess
/* 0x00 */ mutable mVec3_c mStart;
/* 0x0C */ mutable mVec3_c mEnd;
cM3dGLin() {}
@@ -32,34 +34,34 @@ public:
mEnd = *pEnd;
}
nw4r::math::VEC3 &GetStart() {
mVec3_c &GetStart() {
return mStart;
}
const nw4r::math::VEC3 &GetStart() const {
const mVec3_c &GetStart() const {
return mStart;
}
nw4r::math::VEC3 *GetStartP(void) {
mVec3_c *GetStartP(void) {
return &mStart;
}
const nw4r::math::VEC3 *GetStartP(void) const {
const mVec3_c *GetStartP(void) const {
return &mStart;
}
nw4r::math::VEC3 &GetEnd() {
mVec3_c &GetEnd() {
return mEnd;
}
const nw4r::math::VEC3 &GetEnd() const {
const mVec3_c &GetEnd() const {
return mEnd;
}
nw4r::math::VEC3 *GetEndP(void) {
mVec3_c *GetEndP(void) {
return &mEnd;
}
const nw4r::math::VEC3 *GetEndP(void) const {
const mVec3_c *GetEndP(void) const {
return &mEnd;
}
};
+11 -4
View File
@@ -3,6 +3,7 @@
#include "c/c_math.h"
#include "d/col/c/c_m3d.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
// Plane with a normal
@@ -36,6 +37,12 @@ public:
const mVec3_c *GetNP() const {
return &mNormal;
}
mVec3_c &GetN() {
return mNormal;
}
const mVec3_c &GetN() const {
return mNormal;
}
f32 GetD() const {
return mD;
}
@@ -46,13 +53,13 @@ public:
return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y;
}
s32 GetAngleY() const {
return cM::atan2s(mNormal.x, mNormal.z);
}
f32 GetXZDist() const {
return EGG::Math<f32>::sqrt(mNormal.x * mNormal.x + mNormal.z * mNormal.z);
}
mAng GetAngleY() const {
return cM::atan2s(mNormal.x, mNormal.z);
}
};
#endif
+5 -2
View File
@@ -20,14 +20,17 @@ public:
bool Cross(const cM3dGTri *, f32 *, mVec3_c *);
void Clamp(const mVec3_c &, mVec3_c &) const;
bool fn_80338750(cM3dGUnk *, mVec3_c *);
bool fn_80338760(cM3dGUnk *, f32 *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool Cross(cM3dGUnk &, f32 *);
void SetRatio(f32);
const mVec3_c &GetC() const {
return mCenter;
}
mVec3_c &GetC() {
return mCenter;
}
const f32 &GetR() const {
return mRadius;
+13 -2
View File
@@ -3,6 +3,7 @@
#include "common.h"
#include "d/col/c/c_m3d_g_pla.h"
#include "m/m_vec.h"
class cM3dGTri : public cM3dGPla {
typedef nw4r::math::VEC3 VecType;
@@ -12,13 +13,23 @@ public:
/* 0x1C */ VecType mB;
/* 0x28 */ VecType mC;
const mVec3_c &GetPntA() const {
return *(mVec3_c *)&mA;
}
const mVec3_c &GetPntB() const {
return *(mVec3_c *)&mB;
}
const mVec3_c &GetPntC() const {
return *(mVec3_c *)&mC;
}
cM3dGTri() {}
void SetPos(const VecType *, const VecType *, const VecType *);
void SetBg(const VecType *, const VecType *, const VecType *, const cM3dGPla *pla);
bool cross(const cM3dGLin *lin, VecType *xyz, bool param_2, bool param_3) const {
return cM3d_Cross_LinTri(lin, this, xyz, param_2, param_3);
bool cross(const cM3dGLin &lin, VecType *xyz, bool param_2, bool param_3) const {
return cM3d_Cross_LinTri(lin, *this, xyz, param_2, param_3);
}
};
+10 -10
View File
@@ -2,10 +2,11 @@
#define C_M3D_G_UNK_H
#include "common.h"
#include "d/col/c/c_m3d.h"
#include "d/col/c/c_m3d_g_lin.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
struct cM3dGCps;
struct cM3dGCyl;
struct cM3dGSph;
@@ -16,8 +17,7 @@ public:
/* 0x30 */ mMtx_c mInvMtx;
/* 0x60 */ mVec3_c mMin;
/* 0x6C */ mVec3_c mMax;
/* 0x78 */ mVec3_c mField_0x78;
/* 0x84 */ mVec3_c mField_0x84;
/* 0x78 */ cM3dGLin mLin;
/* 0x90 */ mVec3_c mField_0x90;
/* 0x9C */ mVec3_c mField_0x9C;
/* 0xA8 */ mVec3_c mField_0xA8;
@@ -34,13 +34,13 @@ public:
void Update();
void GetStartEnd(mVec3_c &, mVec3_c &);
void fn_80338c30(cM3dGCps *, mVec3_c *);
bool fn_80338c40(cM3dGUnk *, mVec3_c *);
bool fn_80338ca0(/* TODO */);
bool fn_80338cb0(cM3dGCyl *, mVec3_c *);
bool fn_80338cc0(cM3dGCyl *, f32 *);
bool fn_80338cd0(cM3dGSph *, mVec3_c *);
bool fn_80338ce0(cM3dGSph *, f32 *);
bool Cross(cM3dGCps &, mVec3_c *);
bool Cross(cM3dGTri &, mVec3_c *);
bool Cross(cM3dGUnk &, mVec3_c *);
bool Cross(cM3dGCyl &, mVec3_c *);
bool Cross(cM3dGCyl &, f32 *);
bool Cross(cM3dGSph &, mVec3_c *);
bool Cross(cM3dGSph &, f32 *);
void Set(const mMtx_c &);
void Set(const mVec3_c &, const mAng &);
+59 -487
View File
@@ -1,517 +1,89 @@
#ifndef D_CC_D_H
#define D_CC_D_H
#include "d/a/d_a_base.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/col/c/c_m3d_g_cps.h"
#include "d/col/c/c_m3d_g_cyl.h"
#include "d/col/c/c_m3d_g_sph.h"
#include "d/col/c/c_m3d_g_unk.h"
#include "f/f_base_id.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d.h"
#include "m/m_vec.h"
// Largely modeled off
// https://github.com/zeldaret/tp/blob/main/include/SSystem/SComponent/c_cc_d.h
// https://github.com/zeldaret/tp/blob/main/include/d/cc/d_cc_d.h
// - the SComponent/d split seems to not exist anymore in SS, so we'll just
// go with the d names for this merger of the two
struct dCcD_SrcCps {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x44 */ cCcD_SrcCpsAttr mCpsInf;
};
class dCcD_DivideInfo {
private:
/* 0x00 */ u32 mXDivInfo;
/* 0x04 */ u32 mYDivInfo;
/* 0x08 */ u32 mZDivInfo;
/* 0x0C vtable */
// Capsule
class dCcD_Cps : public cCcD_Obj, public cCcD_CpsAttr {
public:
/* 80328120 */ dCcD_DivideInfo();
/* 80328130 */ virtual ~dCcD_DivideInfo();
// void Set(u32, u32, u32);
// bool Chk(dCcD_DivideInfo const &) const;
}; // Size = 0x10
dCcD_Cps();
virtual ~dCcD_Cps();
class dCcD_DivideArea : public cM3dGAab {
private:
/* 0x18 */ bool mXDiffIsZero;
/* 0x1C */ f32 mScaledXDiff;
/* 0x20 */ f32 mInvScaledXDiff;
/* 0x24 */ bool mYDiffIsZero;
/* 0x28 */ f32 mScaledYDiff;
/* 0x2C */ f32 mInvScaledYDiff;
/* 0x30 */ bool mZDiffIsZero;
/* 0x34 */ f32 mScaledZDiff;
/* 0x38 */ f32 mInvScaledZDiff;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCps &src);
void unknownCalc();
};
struct dCcD_SrcTri {
/* 0x00 */ cCcD_SrcGObj mObjInf;
};
class dCcD_Tri : public cCcD_Obj, public cCcD_TriAttr {
public:
/* vt at 0x3C */
dCcD_DivideArea();
virtual ~dCcD_DivideArea();
/* 803281c0 */ void SetArea(cM3dGAab const &);
/* 803282d0 */ void CalcDivideInfo(dCcD_DivideInfo *, cM3dGAab const &, u32);
/* 80328470 */ void CalcDivideInfoOverArea(dCcD_DivideInfo *, cM3dGAab const &);
}; // Size = 0x40
dCcD_Tri();
virtual ~dCcD_Tri();
class dCcD_GAtTgCoCommonBase {
protected:
/* 0x00 */ u32 field_0x00;
/* 0x04 */ s8 mEffCounter;
/* 0x08 */ dAcRef_c<dAcBase_c> mActor;
/* 0x14 */ u32 field_0x14;
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcTri &src);
};
struct dCcD_SrcCyl {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcCylAttr mCylInf;
};
// Cylinder
class dCcD_Cyl : public cCcD_Obj, public cCcD_CylAttr {
public:
dCcD_GAtTgCoCommonBase();
virtual ~dCcD_GAtTgCoCommonBase();
dCcD_Cyl();
virtual ~dCcD_Cyl();
void resetEffCounter() {
mEffCounter = 0;
}
void resetField0x14() {
field_0x14 = 0;
}
u32 getField0x14() {
return field_0x14;
}
void decreaseCount();
void unlink();
dAcBase_c *getActor();
void setActor(dAcBase_c *);
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcCyl &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
};
struct dCcD_SrcGAtTgCoCommonBase {
/* 0x0 */ u32 mGFlag;
}; // Size: 0x4
struct dCcD_SrcGObjAt {
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
/* 0x04 */ u32 field_0x04;
/* 0x08 */ u32 field_0x08;
/* 0x0C */ u8 mSe; // Sound Effect ID
/* 0x0D */ u8 mHitMark; // Hit Mark particle ID
/* 0x0E */ u8 mSpl;
/* 0x0F */ u8 mMtrl;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ s16 field_0x12;
struct dCcD_SrcSph {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcSphAttr mSphInf;
};
struct dCcD_SrcGObjTg {
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
/* 0x04 */ u32 field_0x04;
/* 0x08 */ u16 field_0x08;
/* 0x10 */ u16 field_0x0A;
/* 0x0C */ u16 field_0x0C;
/* 0x0E */ u16 field_0x0E;
};
struct dCcD_SrcGObjCo {
/* 0x0 */ dCcD_SrcGAtTgCoCommonBase mBase;
};
struct dCcD_SrcGObjInf {
/* 0x00 */ dCcD_SrcGObjAt mGObjAt;
/* 0x14 */ dCcD_SrcGObjTg mGObjTg;
/* 0x24 */ dCcD_SrcGObjCo mGObjCo;
};
class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjAt mSrc;
/* 0x30 */ mVec3_c mHitPos;
/* 0x3C */ mVec3_c mVec;
/* 0x48 */ mVec3_c mRVec;
/* 0x54 */ u8 field_0x4C[0x58 - 0x54];
/* 0x58 */ u32 field_0x58;
// Sphere
class dCcD_Sph : public cCcD_Obj, public cCcD_SphAttr {
public:
dCcD_GObjAt();
virtual ~dCcD_GObjAt();
dCcD_Sph();
virtual ~dCcD_Sph();
void clearFlag() {
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
}
mVec3_c *GetHitPosP() {
return &mHitPos;
}
void SetSomeVec(const mVec3_c &p) {
mVec = p;
}
mVec3_c *GetSomeVec() {
return &mVec;
}
void init(const dCcD_SrcGObjAt *);
void setSomeAtFlags(u32 flags);
void adjustHitPos(f32 dx, f32 dz);
virtual cCcD_ShapeAttr *GetShapeAttr() override;
void Set(const dCcD_SrcSph &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
};
class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjTg mSrc;
/* 0x2C */ u8 field_0x2C[0x38 - 0x2C];
/* 0x38 */ mVec3_c mHitPos;
/* 0x44 */ u32 field_0x44;
/* 0x48 */ u16 field_0x48;
/* 0x4A */ u8 field_0x4A;
/* 0x4B */ u8 field_0x4B;
/* 0x4C */ u32 field_0x4C;
/* 0x50 */ u32 field_0x50;
/* 0x54 */ u32 field_0x54;
/* 0x58 */ u32 field_0x58;
/* 0x5C */ u8 field_0x5C[0x6C - 0x5C];
/* 0x6C */ mVec3_c field_0x6C;
/* 0x78 */ u32 field_0x78;
public:
dCcD_GObjTg();
virtual ~dCcD_GObjTg();
void clearFlag() {
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
}
void setFlag(u32 f) {
mSrc.field_0x04 |= f;
}
void set0x4C(u32 val) {
field_0x4C = val;
}
void setSrcFlag(u32 flag) {
mSrc.base.mGFlag = flag;
}
void setSrc0x0A(u32 flag) {
mSrc.field_0x0A = flag;
}
u32 get0x58() {
return field_0x58;
}
void init(const dCcD_SrcGObjTg *);
void adjustHitPos(f32 dx, f32 dz);
struct dCcD_SrcUnk {
/* 0x00 */ cCcD_SrcGObj mObjInf;
/* 0x40 */ cCcD_SrcUnkAttr mUnkInf;
};
class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase {
private:
/* 0x1C */ dCcD_SrcGObjCo mSrc;
/* 0x20 */ u32 field_0x20;
/* 0x24 */ u16 field_0x24;
/* 0x28 */ u32 field_0x28;
class dCcD_Unk : public cCcD_Obj, public cCcD_UnkAttr {
public:
dCcD_GObjCo();
virtual ~dCcD_GObjCo();
void clearFlag() {
mSrc.mBase.mGFlag = mSrc.mBase.mGFlag & 0xFFFFFFFE;
}
void setFlag(u32 f) {
mSrc.mBase.mGFlag |= f;
}
void init(const dCcD_SrcGObjCo *);
void setSomeAtFlags(u32 flags);
void adjustHitPos(f32 dx, f32 dz);
dCcD_Unk();
virtual ~dCcD_Unk();
void SetGFlag(u32 flag) {
mSrc.mBase.mGFlag = flag;
}
};
virtual cCcD_ShapeAttr *GetShapeAttr() override;
class dCcD_ShapeAttr {
public:
/* 0x00 */ u8 UNK_0x00[0x18 - 0x00];
/* 0x18 */ dCcD_DivideInfo field_0x18;
dCcD_ShapeAttr();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C();
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10();
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() = 0;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() = 0;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() = 0;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() = 0;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28(); // 0x80329110
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() = 0;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() = 0;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() = 0;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() = 0;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() = 0;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter(); // 0x80329120
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() = 0;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() = 0;
/* vt 0x4C */ virtual void getShapeAccess(); // 0x80329090
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() = 0;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54(); // 0x803290F0
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() = 0;
static mVec3_c m_virtual_center;
};
// This is in dAcObjBase_c @ 0x1c0
struct UnkCCDStruct {
u32 field_0x00;
u32 field_0x04;
u32 field_0x08;
u32 field_0x0C;
/* 0x10 */ mVec3_c field_0x10;
/* 0x1C */ mVec3_c field_0x1C;
/* 0x28 */ mVec3_c posIncrements;
dAcBase_c *field_0x34;
s32 field_0x38;
UnkCCDStruct(dAcBase_c *);
void postExecute();
void reset();
fBaseID_e getId();
u32 getSomething(int);
void setField0x38ToMagicValue() {
field_0x38 = 0xD;
}
void setField0x38(s32 val) {
field_0x38 = val;
}
};
// Object Info
class dCcD_GObjInf {
protected:
/* 0x000 */ dCcD_GObjAt mGObjAt;
/* 0x05C */ dCcD_GObjTg mGObjTg;
/* 0x0D8 */ dCcD_GObjCo mGObjCo;
/* 0x104 */ UnkCCDStruct *field_0x104;
/* 0x108 */ u32 field_0x108;
public:
dCcD_GObjInf();
/* vt 0x08 */ virtual ~dCcD_GObjInf();
/* vt 0x0C */ virtual void *dCcD_GObjInf_0x0C() = 0;
/* vt 0x10 */ virtual void dCcD_GObjInf_0x10(); // 0x80328d30
void clear();
void init(const dCcD_SrcGObjInf &src);
static bool weirdConditionCheck(dAcBase_c *ac, u32);
inline void initUnk(UnkCCDStruct &src) {
field_0x104 = &src;
}
inline void clearCoFlag() {
mGObjCo.clearFlag();
}
void setTgCoFlag(u32 f) {
mGObjTg.setFlag(f);
mGObjCo.setFlag(f);
}
inline void setSomeDefendValue(u32 val) {
mGObjTg.set0x4C(val);
}
inline void setAtVec(const mVec3_c &p) {
mGObjAt.SetSomeVec(p);
}
inline void setTgFlag(u32 flag) {
mGObjTg.setSrcFlag(flag);
}
inline mVec3_c *getAtVec() {
return mGObjAt.GetSomeVec();
}
bool someInteractCheck() {
return ((mGObjTg.getField0x14() & 1) != 0 && mGObjTg.getActor() != nullptr);
}
void setTgField0x0A(u32 val) {
mGObjTg.setSrc0x0A(val);
}
void ResetAtHit();
void ResetTgHit();
void ResetCoHit();
mVec3_c *GetAtHitPosP();
mVec3_c *GetAtHitPosP2();
dAcBase_c *GetAtActor();
bool CheckCollidedMask(u32 mask);
dAcBase_c *GetTgActor();
dAcBase_c *GetCoActor();
void adjustHitPos(f32 dx, f32 dz);
};
struct dCcD_SrcCylAttr {
public:
/* 0x00 */ f32 mRadius;
/* 0x04 */ f32 mHeight;
}; // Size = 0x8
struct dCcD_SrcSphAttr {
/* 0x00 */ f32 mRadius;
}; // Size = 0x4
struct dCcD_SrcAabbAttr {
/* 0x00 */ f32 minX, minY, minZ, maxX, maxY, maxZ;
}; // Size = 0x18
struct dCcD_SrcUnk1Attr {};
class cM3dGUnk1 {
public:
/* 0x00 */ cM3dGCps mCps;
/* 0x28 */ mVec3_c mVirtualCenter;
cM3dGUnk1();
};
class cM3dGUnk2 {
public:
};
// Unk1
class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 {
public:
dCcD_ShapeAttr1();
void init(const dCcD_SrcUnk1Attr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr1();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Unk1
class dCcD_ShapeAttr2 : public dCcD_ShapeAttr, public cM3dGUnk2 {
public:
dCcD_ShapeAttr2();
/* vt 0x08 */ virtual ~dCcD_ShapeAttr2();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
// /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Aabb
class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGUnk {
public:
dCcD_ShapeAttr5();
void init(const dCcD_SrcAabbAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr5();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
// /* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Cyl
class dCcD_ShapeAttr3 : public dCcD_ShapeAttr, public cM3dGCyl {
public:
dCcD_ShapeAttr3();
void init(const dCcD_SrcCylAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr3();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
};
// Sph
class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph {
public:
dCcD_ShapeAttr4();
void init(const dCcD_SrcSphAttr &);
/* vt 0x08 */ virtual ~dCcD_ShapeAttr4();
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
/* vt 0x4C */ virtual void getShapeAccess() override;
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
void Set(const dCcD_SrcUnk &src);
};
#endif
+104
View File
@@ -0,0 +1,104 @@
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "m/m_vec.h"
typedef void (*dCcMassS_ObjCallback)(dAcObjBase_c *, mVec3_c *, u32);
class dCcMassS_Obj {
private:
/* 0x00 */ cCcD_Obj *mpObj;
/* 0x04 */ u8 mPriority;
/* 0x08 */ dCcMassS_ObjCallback mpCallback;
/* 0x0C */ cCcD_DivideInfo mDivideInfo;
/* 0x1C vtable*/
public:
dCcMassS_Obj();
virtual ~dCcMassS_Obj();
void Set(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
void Clear();
cCcD_Obj *GetObj() {
return mpObj;
}
u8 GetPriority() const {
return mPriority;
}
dCcMassS_ObjCallback GetCallback() const {
return mpCallback;
}
cCcD_DivideInfo &GetDivideInfo() {
return mDivideInfo;
}
};
class dCcMassS_HitInf {
private:
/* 0x00 */ cCcD_Obj *mpArea;
/* 0x04 */ cCcD_Obj *mpAtObj;
/* 0x08 */ cCcD_Obj *mpCoObj;
/* 0x0C */ f32 mCoHitLen;
/* 0x10 vtable */
public:
dCcMassS_HitInf();
virtual ~dCcMassS_HitInf();
void ClearPointer();
void SetAreaHitObj(cCcD_Obj *obj) {
mpArea = obj;
}
void SetCoHitObj(cCcD_Obj *obj) {
mpCoObj = obj;
}
void SetAtHitObj(cCcD_Obj *obj) {
mpAtObj = obj;
}
void SetCoHitLen(f32 len) {
mCoHitLen = len;
}
cCcD_Obj *GetAtHitObj() const {
return mpAtObj;
}
};
class dCcMassS_Mng {
public:
/* 0x0000 */ cCcD_DivideArea mDivideArea;
/* 0x0040 */ s32 mMassObjCount;
/* 0x0044 */ dCcMassS_Obj mMassObjs[20];
/* 0x02C4 */ s32 mMassAreaCount;
/* 0x02C8 */ dCcMassS_Obj mMassAreas[5];
/* 0x0368 */ cCcD_CylAttr mCylAttr;
/* 0x03A8 */ u8 field_0x3A8;
/* 0x03A9 */ u8 field_0x3A9;
/* 0x03AA */ u8 field_0x3AA;
/* 0x03AB */ u8 mResultCam;
/* 0x03AC */ Vec mCamTopPos;
/* 0x03B8 */ f32 mCamTopDist;
/* 0x03BC */ Vec mCamBottomPos;
/* 0x03C8 */ f32 mCamBottomDist;
/* 0x03CC */ cCcD_CpsAttr mCpsAttr;
/* 0x042C */ cCcD_DivideInfo mDivideInfo;
/* 0x043C vtable */
public:
dCcMassS_Mng();
virtual ~dCcMassS_Mng();
void Ct();
void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3);
void Prepare();
u32 Chk(mVec3_c *p_xyz, dAcObjBase_c **p_actor, dCcMassS_HitInf *p_hitInf);
void Clear();
// Not original names, but made distinct for clarity (original was just one `Set)
void SetObj(cCcD_Obj *p_obj, u8 priority);
void SetArea(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
// void SetCam(cM3dGCps const &cps);
// u8 GetResultCam() const;
// void GetCamTopPos(Vec *p_out);
};
-13
View File
@@ -1,13 +0,0 @@
#ifndef TOSORT_D_CC_MGR_H
#define TOSORT_D_CC_MGR_H
#include "d/col/cc/d_cc_d.h"
class ColliderManager {
public:
static ColliderManager *getColliderManager();
void addCollider(dCcD_GObjInf *collider);
};
#endif
+78
View File
@@ -0,0 +1,78 @@
#include "common.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_mass_s.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
struct mMtxPair {
mMtx_c mMtx;
mMtx_c mInv;
};
class dCcS {
private:
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
/* 0x2D00 */ u16 mObjAtCount;
/* 0x2d02 */ u16 mObjTgCount;
/* 0x2D04 */ u16 mObjCoCount;
/* 0x2D06 */ u16 mObjCount;
/* 0x2D08 */ u32 mUnkCount;
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
/* 0x2D4C */ bool mbAreaSet;
/* 0x2D50 */ mMtxPair mAreas[16]; // could be a structure?
/* 0x3350 */ int mAreaCount;
/* 0x3354*/ dCcMassS_Mng mMassMng;
public:
dCcS();
virtual ~dCcS();
// This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout
void Ct_cCcS();
void Ct();
void Dt();
static bool ChkRemoveActor(dAcObjBase_c *pActor);
static bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
static bool ChkAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *);
void ChkAtTg();
static bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
static void SetCoCommonHitInf(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
void ChkCo();
static bool ChkSheildFrontRange(cCcD_Obj *, cCcD_Obj *);
static bool ChkShield(cCcD_Obj *, cCcD_Obj *, cCcD_ShieldChkCallback *);
static bool ChkAtTgHitAfterCross(bool, bool, cCcD_Obj *, cCcD_Obj *);
static void SetCoObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *);
static void SetPosCorrect(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
static void CalcParticleAngle(cCcD_Obj *, cCcD_Obj *, mAng3_c *, bool);
static void fn_80356fd0(mVec3_c *, cCcD_Obj *, cCcD_Obj *);
static u32 ProcAtTgHitmark(cCcD_Obj *, cCcD_Obj *, mVec3_c *, u32, mVec3_c *);
static void SetAtTgObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, mVec3_c *, bool);
bool ChkCamera(mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
bool
ChkCameraPoint(const mVec3_c &, const mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
bool ChkCo(const mVec3_c &, dAcObjBase_c *);
bool fn_80357c90(const mVec3_c &, const mVec3_c &, u32, UNKTYPE **);
void Set(cCcD_Obj *);
void MoveAfterCheck();
void RemoveDeadObj();
void CalcArea();
void Move();
void MassClear();
void SetArea(mMtx_c *);
void ClearArea();
void AdjustHitPos();
static dCcS *GetInstance();
static dCcS *sInstance;
};
-89
View File
@@ -1,89 +0,0 @@
#ifndef D_CC_SHAPE_COLLIDERS_H
#define D_CC_SHAPE_COLLIDERS_H
#include "d/col/cc/d_cc_d.h"
#include "m/m_vec.h"
struct dCcD_SrcUnk {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x44 */ dCcD_SrcUnk1Attr mUnk1Inf;
}; // Size: ???
class dCcD_Unk1 : public dCcD_GObjInf, public dCcD_ShapeAttr1 {
public:
dCcD_Unk1();
virtual ~dCcD_Unk1();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcUnk &src);
void unknownCalc();
};
struct dCcD_SrcEmpty {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
}; // Size: 0x40
// Not sure what this is, the init function
// doesn't call the shape initializer
class dCcD_Empty : public dCcD_GObjInf, public dCcD_ShapeAttr2 {
public:
dCcD_Empty();
virtual ~dCcD_Empty();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcEmpty &src);
};
struct dCcD_SrcCyl {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcCylAttr mCylAttr;
}; // Size: 0x44
// Cylinder
class dCcD_Cyl : public dCcD_GObjInf, public dCcD_ShapeAttr3 {
public:
dCcD_Cyl();
virtual ~dCcD_Cyl();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcCyl &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
};
struct dCcD_SrcSph {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcSphAttr mSphAttr;
}; // Size: 0x44
// Sphere
class dCcD_Sph : public dCcD_GObjInf, public dCcD_ShapeAttr4 {
public:
dCcD_Sph();
virtual ~dCcD_Sph();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcSph &src);
void setCenter(const mVec3_c &);
void moveCenter(const mVec3_c &);
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
};
struct dCcD_SrcAabb {
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
/* 0x40 */ dCcD_SrcAabbAttr mAabbAttr;
}; // Size: 0x58
class dCcD_Aabb : public dCcD_GObjInf, public dCcD_ShapeAttr5 {
public:
dCcD_Aabb();
virtual ~dCcD_Aabb();
virtual void *dCcD_GObjInf_0x0C() override;
void init(const dCcD_SrcAabb &src);
};
#endif
+9
View File
@@ -0,0 +1,9 @@
#include "m/m3d/m_shadow.h"
// This is unofficial, idk if this is close, but this is a common shadow extension.
//
class dShadowCircle_c : public m3d::mShadowCircle_c {
public:
dShadowCircle_c() {}
virtual ~dShadowCircle_c() {}
};
+2 -2
View File
@@ -2,7 +2,7 @@
#define D_T_REACTION_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_shape_colliders.h"
#include "d/col/cc/d_cc_d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/dowsing_target.h"
@@ -36,7 +36,7 @@ private:
return params & 0xFF;
}
int getParam0x08() {
u32 getParam0x08() {
return (params >> 8) & 0xFF;
}
+1
View File
@@ -2,6 +2,7 @@
#define EGG_MATH_H
#include "common.h"
#include "math.h"
namespace EGG {
-1
View File
@@ -5,7 +5,6 @@
#include "egg/math/eggQuat.h"
#include "egg/math/eggVector.h"
namespace EGG {
struct Matrix34f {
+9
View File
@@ -1,6 +1,7 @@
#ifndef M_ANGLE_H
#define M_ANGLE_H
#include "c/c_math.h"
#include "common.h"
#include "nw4r/math/math_triangular.h"
@@ -9,6 +10,10 @@ struct mAng {
mAng(s16 s) : mVal(s) {}
mAng(const mAng &other) : mVal(other.mVal) {}
static mAng atan2s(f32 a, f32 b) {
return mAng(cM::atan2s(a, b));
}
operator s16() const {
return mVal;
}
@@ -25,6 +30,10 @@ struct mAng {
mVal += other.mVal;
return *this;
}
mAng &operator-=(const mAng &other) {
mVal -= other.mVal;
return *this;
}
s32 step(s16 target, s32 steps, s16 max, s16 min);
+18 -42
View File
@@ -7,9 +7,9 @@
#include "egg/math/eggMatrix.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "nw4r/nw4r_types.h"
#include "nw4r/types_nw4r.h"
class mMtx_c {
class mMtx_c : public EGG::Matrix34f {
typedef f32 (*MtxRef)[4];
typedef const f32 (*MtxRefConst)[4];
@@ -17,16 +17,6 @@ public:
mMtx_c(){};
mMtx_c(f32 xx, f32 xy, f32 xz, f32 xw, f32 yx, f32 yy, f32 yz, f32 yw, f32 zx, f32 zy, f32 zz, f32 zw);
// not sure if this breaks anything but we need a matrix type
// with an inline copy assignment operator
void set(const mMtx_c &r) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
m[i][j] = r.m[i][j];
}
}
}
operator MtxRef() {
return (MtxRef)(this);
}
@@ -36,15 +26,9 @@ public:
operator nw4r::math::MTX34 *() {
return (nw4r::math::MTX34 *)(this);
}
operator EGG::Matrix34f *() {
return (EGG::Matrix34f *)(this);
}
operator nw4r::math::MTX34 &() {
return *(nw4r::math::MTX34 *)(this);
}
operator EGG::Matrix34f &() {
return *(EGG::Matrix34f *)(this);
}
void XrotS(const mAng &angle); ///< Generates a rotation matrix for the X axis with the given angle.
void XrotM(const mAng &angle); ///< Rotates the matrix on the X axis by the given angle.
@@ -53,15 +37,23 @@ public:
void ZrotS(const mAng &angle); ///< Generates a rotation matrix for the Z axis with the given angle.
void ZrotM(const mAng &angle); ///< Rotates the matrix on the Z axis by the given angle.
void ZXYrotS(mAng xRot, mAng yRot,
mAng zRot); ///< Generates the matrix on the Y, X and Z axes by the given angles.
void ZXYrotM(mAng xRot, mAng yRot,
mAng zRot); ///< Rotates the matrix on the Y, X and Z axes by the given angles.
void XYZrotS(mAng xRot, mAng yRot,
mAng zRot); ///< Generates the matrix on the Z, Y and X axes by the given angles.
void ZXYrotS(
const mAng &xRot, const mAng &yRot,
const mAng &zRot
); ///< Generates the matrix on the Y, X and Z axes by the given angles.
void ZXYrotM(
const mAng &xRot, const mAng &yRot,
const mAng &zRot
); ///< Rotates the matrix on the Y, X and Z axes by the given angles.
void XYZrotS(
const mAng &xRot, const mAng &yRot,
const mAng &zRot
); ///< Generates the matrix on the Z, Y and X axes by the given angles.
void XYZrotM(mAng xRot, mAng yRot,
mAng zRot); ///< Rotates the matrix on the Z, Y and X axes by the given angles.
void XYZrotM(
const mAng &xRot, const mAng &yRot,
const mAng &zRot
); ///< Rotates the matrix on the Z, Y and X axes by the given angles.
void toRot(mAng3_c &out) const; ///< Converts the matrix to a rotation vector.
@@ -71,22 +63,6 @@ public:
void rot(int, int); // does some werrd operation to rotate the matrix
bool quatRelated();
void SetTranslation(const mVec3_c &t) {
m[0][3] = t.x;
m[1][3] = t.y;
m[2][3] = t.z;
}
public:
union {
f32 m[3][4];
struct {
f32 xx, xy, xz, xw;
f32 yx, yy, yz, yw;
f32 zx, zy, zz, zw;
};
};
public:
static mMtx_c Identity;
};
+21
View File
@@ -1,9 +1,13 @@
#ifndef M_VEC_H
#define M_VEC_H
#include "c/c_math.h"
#include "common.h"
#include "egg/math/eggVector.h"
#include "m/m_angle.h"
#include "nw4r/types_nw4r.h"
class mAng;
class mVec3_c : public EGG::Vector3f {
public:
@@ -148,6 +152,12 @@ public:
return *this;
}
mVec3_c operator-(f32 f) const {
return mVec3_c(x - f, y - f, z - f);
}
mVec3_c operator+(f32 f) const {
return mVec3_c(x + f, y + f, z + f);
}
mVec3_c &operator-=(f32 f) {
x -= f;
y -= f;
@@ -207,6 +217,17 @@ public:
void rotY(const mAng &angle);
// ???
s32 getAngleY() const {
return mAng(cM::atan2s(x, z));
}
void CopyTo(nw4r::math::VEC3 *p) {
p->x = x;
p->y = y;
p->z = z;
}
static mVec3_c Zero;
static mVec3_c Ex;
static mVec3_c Ey;
+1
View File
@@ -1,5 +1,6 @@
#ifndef NW4R_MATH_ARITHMETIC_H
#define NW4R_MATH_ARITHMETIC_H
#include "math.h"
#include "nw4r/types_nw4r.h" // IWYU pragma: export
#include "rvl/OS.h" // IWYU pragma: export
-189
View File
@@ -1,189 +0,0 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
namespace nw4r {
namespace ut {
template <typename T>
struct TextWriterBase;
template <typename T>
struct TagProcessorBase;
struct Color;
struct FileStream;
namespace detail {
struct RuntimeTypeInfo;
}
} // namespace ut
namespace ef {
struct DrawOrder;
struct DrawInfo;
struct DrawStrategy;
struct DrawStrategyImpl;
struct DrawStrategyBuilder;
struct Effect;
struct EffectSystem;
struct EffectProject;
struct Emitter;
struct EmitterDrawSetting;
struct EmitFormBuilder;
struct ResEmitter;
struct EmitterResource;
struct EmitterForm;
struct EmitterInheritSetting;
struct Particle;
struct ParticleManager;
struct MemoryManager;
struct MemoryManagerBase;
} // namespace ef
namespace math {
class VEC2;
class VEC3;
class MTX33;
class MTX34;
class AABB;
class FRUSTUM;
} // namespace math
namespace snd {
struct FxBase;
struct SoundPlayer;
struct SoundHandle;
struct SeqSoundHandle;
struct SoundArchive;
struct SoundArchivePlayer;
struct Sound3DActor;
struct Sound3DListener;
struct Sound3DManager;
struct SoundHandle;
struct StrmSoundHandle;
struct WaveSoundHandle;
namespace detail {
struct BasicSound;
struct BasicPlayer;
struct ChannelManager;
struct SeqSound;
struct SeqPlayer;
struct MmlParser;
struct MmlSeqTrack;
struct SeqTrack;
struct SeqTrackAllocator;
template <typename T>
struct SoundInstanceManager;
struct StrmBufferPool;
struct StrmSound;
struct NoteOnCallback;
struct PlayerHeap;
struct SoundArchiveFileReader;
struct SoundThread;
struct WaveSound;
struct StrmPlayer;
struct WsdPlayer;
} // namespace detail
} // namespace snd
namespace g3d {
struct AnmObjVis;
struct AnmObjVisNode;
struct AnmObjVisOR;
struct AnmObjVisRes;
struct AnmObj;
struct AnmObjChr;
struct FuncObjCalcWorld;
struct AnmScn;
struct AnmScnRes;
struct CameraAnmResult;
struct Draw1Mat1ShpSwap;
struct DrawResMdlReplacement;
struct FogAnmResult;
struct ResFile;
struct ResMdl;
struct ResPltt;
struct ResTex;
struct ResTexSrt;
struct ResMat;
struct ResTexPlttInfo;
struct ResShp;
struct ResFog;
struct ResAnmChr;
struct ResAnmVis;
struct ResAnmClr;
struct ResAnmTexPat;
struct ResAnmTexSrt;
struct ResAnmShp;
struct ResAnmScn;
struct ResAnmFog;
struct ResAnmCamera;
struct ResVtxPos;
struct ResVtxNrm;
struct ResVtxClr;
struct ResVtxTexCoord;
struct ClrAnmResult;
struct TexPatAnmResult;
struct TexSrtAnmResult;
struct ScnMdl1Mat1Shp;
struct TexSrt;
struct TexSrtTypedef;
struct LightObj;
struct LightAnmResult;
struct LightSet;
struct LightSetting;
struct LightSetData;
struct AmbLightObj;
struct AmbLightAnmResult;
struct Fog;
struct ScnRoot;
struct ScnProc;
struct ScnLeaf;
struct ScnObj;
struct ScnRfl;
struct ScnGroup;
struct ScnMdlSimple;
struct ScnMdl;
struct IScnObjGather;
struct IScnObjCallback;
namespace G3DState {
struct IndMtxOp;
}
} // namespace g3d
namespace lyt {
struct Size;
namespace detail {
struct PaneBase;
struct TexCoordAry;
} // namespace detail
namespace res {
struct Group;
struct Pane;
struct Bounding;
struct AnimationBlock;
struct BinaryFileHeader;
} // namespace res
struct Group;
struct GroupContainer;
struct Pane;
struct DrawInfo;
struct AnimResource;
struct AnimTransform;
struct AnimTransformBasic;
struct AnimationLink;
struct ResourceAccessor;
struct ArcResourceAccessor;
struct FontRefLink;
struct Material;
struct Layout;
struct Bounding;
struct ResBlockSet;
struct TexMap;
} // namespace lyt
} // namespace nw4r
#endif
+1
View File
@@ -1,5 +1,6 @@
#ifndef NW4R_TYPES_H
#define NW4R_TYPES_H
#include "common.h"
#define NW4R_BYTEORDER_BIG 0xFEFF
+3 -1
View File
@@ -1,14 +1,16 @@
#ifndef RVL_SDK_OS_ERROR_H
#define RVL_SDK_OS_ERROR_H
#include "__va_arg.h"
#include "common.h"
#ifdef __cplusplus
extern "C" {
#endif
// Forward declarations
typedef struct OSContext;
typedef struct OSContext OSContext;
#define OSError(...) OSPanic(__FILE__, __LINE__, __VA_ARGS__)
#define OSAssert(exp, ...) \
+2 -4
View File
@@ -25,10 +25,8 @@
mStateMgr.getStateID(); \
}
#define UI_STATE_MGR_DECLARE(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define UI_STATE_MGR_DECLARE(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
#define STATE_MGR(class_name) \
sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#endif
+2
View File
@@ -18,6 +18,8 @@ public:
mpOwner = owner;
}
void remove(bool);
private:
u8 field_0x20[0x28 - 0x20];
/* 0x28 */ dBase_c *mpOwner;