From ddf4fc0677f6b93162389063168458244e14ac59 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Mon, 11 Aug 2025 02:22:28 -0400 Subject: [PATCH] Misc framework fixes (#2578) --- configure.py | 10 +- include/JSystem/J2DGraph/J2DAnimation.h | 2 + include/SSystem/SComponent/c_cc_d.h | 376 ++++++++++++----------- include/SSystem/SComponent/c_m3d_g_sph.h | 3 +- include/d/actor/d_a_npc_kolin.h | 3 + include/d/actor/d_a_npc_kolinb.h | 3 + include/d/actor/d_a_npc_saru.h | 14 +- include/d/actor/d_a_npc_ykm.h | 4 + include/d/d_cc_d.h | 146 +++++---- include/m_Do/m_Do_graphic.h | 9 + src/SSystem/SComponent/c_cc_d.cpp | 16 + src/d/actor/d_a_npc_saru.cpp | 2 +- src/d/d_cc_d.cpp | 4 + src/d/d_drawlist.cpp | 27 +- src/m_Do/m_Do_graphic.cpp | 7 +- 15 files changed, 369 insertions(+), 257 deletions(-) diff --git a/configure.py b/configure.py index b01e941a72d..047080338d7 100755 --- a/configure.py +++ b/configure.py @@ -432,9 +432,9 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_audio.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_controller_pad.cpp"), Object(NonMatching, "m_Do/m_Re_controller_pad.cpp"), - Object(Equivalent, "m_Do/m_Do_graphic.cpp"), # weak func order + Object(MatchingFor("GZ2E01"), "m_Do/m_Do_graphic.cpp"), Object(NonMatching, "m_Do/m_Do_machine.cpp"), - Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_mtx.cpp", extra_cflags=["-sym off"]), + Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_mtx.cpp"), Object(NonMatching, "m_Do/m_Do_ext.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_lib.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_Reset.cpp"), @@ -564,7 +564,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_particle_name.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_particle_copoly.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_path.cpp"), - Object(NonMatching, "d/d_drawlist.cpp"), + Object(Equivalent, "d/d_drawlist.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_kankyo_data.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_kankyo_wether.cpp"), Object(NonMatching, "d/d_kankyo_rain.cpp"), @@ -591,7 +591,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_bg_w_base.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(NonMatching, "d/d_bg_w_kcol.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_bg_w_sv.cpp"), - Object(Equivalent, "d/d_cc_d.cpp"), # weak func order + Object(Equivalent, "d/d_cc_d.cpp", extra_cflags=['-sym off']), # weak func order Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_cc_mass_s.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(NonMatching, "d/d_cc_s.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_cc_uty.cpp"), @@ -658,7 +658,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_meter_map.cpp"), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_meter_string.cpp"), Object(MatchingFor("GZ2E01"), "d/d_meter2_draw.cpp"), - Object(Equivalent, "d/d_meter2_info.cpp"), + Object(MatchingFor("GZ2E01"), "d/d_meter2_info.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(MatchingFor("GZ2E01", "GZ2J01"), "d/d_meter2.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_out_font.cpp"), Object(NonMatching, "d/d_msg_class.cpp"), diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h index b736b79119f..eb393c3fadd 100644 --- a/include/JSystem/J2DGraph/J2DAnimation.h +++ b/include/JSystem/J2DGraph/J2DAnimation.h @@ -31,6 +31,8 @@ public: mFrameMax = 0; } /* 80053C94 */ virtual ~J2DAnmBase() {} + // this is supposed to be inline, but doing so causes problems + // with where the vtable is placed in the final framework.dol /* 800569B0 */ virtual void searchUpdateMaterialID(J2DScreen*); s16 getFrameMax() const { return mFrameMax; } diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index 72c2f633a8a..8944ccc1334 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -6,6 +6,7 @@ #include "SSystem/SComponent/c_m3d_g_cyl.h" #include "SSystem/SComponent/c_m3d_g_sph.h" #include "SSystem/SComponent/c_m3d_g_tri.h" +#include "SSystem/SComponent/c_m3d_g_vtx.h" #include "f_pc/f_pc_manager.h" typedef struct _GXColor GXColor; @@ -64,192 +65,18 @@ enum cCcD_ObjAtType { /* 0xD8000000 */ AT_TYPE_UNK = 0xD8000000 }; -class cCcD_ShapeAttr { -public: - /* 0x00 */ cM3dGAab mAab; - /* 0x1C vtable */ - - struct Shape { - /* 80167BBC */ ~Shape() {} - - /* 0x00 */ int _0; - /* 0x04 */ cXyz _4; - /* 0x10 */ f32 _10; - /* 0x14 */ f32 _14; - }; - cCcD_ShapeAttr() {} - /* 8008556C vt[2] */ virtual ~cCcD_ShapeAttr() {} - /* 802649D8 vt[3] */ virtual bool CrossAtTg(cCcD_ShapeAttr const&, cXyz*) const { - return false; - } - /* vt[4] */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const = 0; - /* vt[5] */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const = 0; - /* vt[6] */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const = 0; - /* vt[7] */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const = 0; - /* vt[8] */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const = 0; - /* vt[9] */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const = 0; - /* 802649E0 vt[10]*/ virtual bool CrossCo(cCcD_ShapeAttr const&, f32*) const { return false; } - /* vt[11]*/ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const = 0; - /* vt[12]*/ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const = 0; - /* vt[13]*/ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const = 0; - /* vt[14]*/ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const = 0; - /* vt[15]*/ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const = 0; - /* vt[16]*/ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const = 0; - /* 80084E38 vt[17]*/ virtual const cXyz& GetCoCP() const { return m_virtual_center; } - /* 80084E2C vt[18]*/ virtual cXyz& GetCoCP() { return m_virtual_center; } - /* vt[19]*/ virtual void CalcAabBox() = 0; - /* vt[20]*/ virtual bool GetNVec(cXyz const&, cXyz*) const = 0; - /* 80263A64 vt[21]*/ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; - - cM3dGAab& GetWorkAab() { return mAab; } - cM3dGAab const& GetWorkAab() const { return mAab; } - - static cXyz m_virtual_center; -}; - -STATIC_ASSERT(0x20 == sizeof(cCcD_ShapeAttr)); - struct cCcD_SrcTriAttr { cM3dGTriS mTri; }; -class cCcD_TriAttr : public cCcD_ShapeAttr, public cM3dGTri { -public: - /* 80263C04 */ virtual void CalcAabBox(); - /* 80263C9C */ virtual bool GetNVec(cXyz const&, cXyz*) const; - /* 80263A88 */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; - /* 80263BCC */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; - /* 80263B90 */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; - /* 80084E54 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { - return shape.CrossAtTg(*this, xyz); - } - /* 80084E4C */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } - /* 80084E44 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } - /* 80263B58 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; - /* 80084EBC */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { - return shape.CrossCo(*this, f); - } - /* 80084EB4 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } - /* 80084EAC */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const { return false; } - /* 80084EA4 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } - /* 80084E9C */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } - /* 80084E94 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const { return false; } - /* 80084E8C */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const { return false; } - /* 80264938 */ virtual ~cCcD_TriAttr() {} - cCcD_TriAttr() {} -}; - struct cCcD_SrcCpsAttr { cM3dGCpsS mCps; }; -class cCcD_CpsAttr : public cCcD_ShapeAttr, public cM3dGCps { -public: - cCcD_CpsAttr() {} - void Set(const cCcD_SrcCpsAttr& pSrc) { cM3dGCps::Set(pSrc.mCps); } - void Set(const cXyz& pStart, const cXyz& pEnd, float radius) { - cM3dGCps::Set(pStart, pEnd, radius); - } - - /* 80085450 */ virtual ~cCcD_CpsAttr() {} - /* 80263DC0 */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; - /* 80263E04 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; - /* 80084FE4 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { - return shape.CrossAtTg(*this, xyz); - } - /* 80084FDC */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } - /* 80084FD4 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } - /* 80263D38 */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; - /* 80263D7C */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; - /* 80263F24 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; - /* 80263ED4 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; - /* 80263F74 */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; - /* 80085034 */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { - return shape.CrossCo(*this, f); - } - /* 8008502C */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } - /* 80085024 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } - /* 8008501C */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } - /* 80263FC4 */ virtual void CalcAabBox(); - /* 80264014 */ virtual bool GetNVec(cXyz const&, cXyz*) const; -}; - -STATIC_ASSERT(0x40 == sizeof(cCcD_CpsAttr)); - struct cCcD_SrcSphAttr { cM3dGSphS mSph; }; -class cCcD_SphAttr : public cCcD_ShapeAttr, public cM3dGSph { -public: - cCcD_SphAttr() {} - void Set(const cCcD_SrcSphAttr& src) { cM3dGSph::Set(src.mSph); } - - /* 8008721C */ virtual ~cCcD_SphAttr() {} - /* 80084B44 */ virtual const cXyz& GetCoCP() const { return mCenter; } - /* 80037A54 */ virtual cXyz& GetCoCP() { return mCenter; } - /* 80084B5C */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { - return shape.CrossAtTg(*this, xyz); - } - /* 80084B54 */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } - /* 80084B4C */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } - /* 80084BAC */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { - return shape.CrossCo(*this, f); - } - /* 80084BA4 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } - /* 80084B9C */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } - /* 80084B94 */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } - /* 80264538 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; - /* 802645C0 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; - /* 802644EC */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; - /* 8026457C */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; - /* 80264688 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; - /* 80264644 */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; - /* 802645F8 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; - /* 802646E0 */ virtual void CalcAabBox(); - /* 8026476C */ virtual bool GetNVec(cXyz const&, cXyz*) const; - /* 80264808 */ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; - - const cM3dGSph* GetShapeP() const { return this; } - -}; // Size = 0x34 - -STATIC_ASSERT(0x34 == sizeof(cCcD_SphAttr)); - -class cCcD_CylAttr : public cCcD_ShapeAttr, public cM3dGCyl { -public: - cCcD_CylAttr() {} - /* 800854E0 */ virtual ~cCcD_CylAttr() {} - /* 80084CC0 */ virtual const cXyz& GetCoCP() const { return mCenter; } - /* 8026420C */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; - /* 802641C8 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; - /* 80264250 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; - /* 80084CD8 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { - return shape.CrossAtTg(*this, xyz); - } - /* 80084CD0 */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } - /* 80084CC8 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } - /* 8026417C */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; - /* 80264288 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; - /* 80264310 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; - /* 80084D28 */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { - return shape.CrossCo(*this, f); - } - /* 80084D20 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } - /* 80084D18 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } - /* 80084D10 */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } - /* 802642CC */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; - /* 80037A4C */ virtual cXyz& GetCoCP() { return mCenter; } - /* 80264368 */ virtual void CalcAabBox(); - /* 802643D0 */ virtual bool GetNVec(cXyz const&, cXyz*) const; - /* 802644B8 */ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; - - const cM3dGCyl* GetShapeP() const { return this; } - -}; // Size = 0x38 - -STATIC_ASSERT(0x38 == sizeof(cCcD_CylAttr)); - class cCcD_DivideInfo { private: /* 0x00 */ u32 mXDivInfo; @@ -384,6 +211,7 @@ public: void setRPrm(s32 rprm) { mRPrm = rprm; } s32 getRPrm() const { return mRPrm; } cCcD_Obj* GetHitObj() { return mHitObj; } + const cCcD_Obj* GetHitObj() const { return mHitObj; } u32 MskSPrm(u32 mask) const { return mSPrm & mask; } u32 MskRPrm(u32 mask) { return mRPrm & mask; } void OnSPrmBit(u32 flag) { mSPrm |= flag; } @@ -551,6 +379,51 @@ public: STATIC_ASSERT(0x40 == sizeof(cCcD_ObjHitInf)); +class cCcD_ShapeAttr { +public: + /* 0x00 */ cM3dGAab mAab; + /* 0x1C vtable */ + + struct Shape { + /* 80167BBC */ ~Shape() {} + + /* 0x00 */ int _0; + /* 0x04 */ cXyz _4; + /* 0x10 */ f32 _10; + /* 0x14 */ f32 _14; + }; + cCcD_ShapeAttr() {} + /* 8008556C vt[2] */ virtual ~cCcD_ShapeAttr() {} + /* 802649D8 vt[3] */ virtual bool CrossAtTg(cCcD_ShapeAttr const&, cXyz*) const { + return false; + } + /* vt[4] */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const = 0; + /* vt[5] */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const = 0; + /* vt[6] */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const = 0; + /* vt[7] */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const = 0; + /* vt[8] */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const = 0; + /* vt[9] */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const = 0; + /* 802649E0 vt[10]*/ virtual bool CrossCo(cCcD_ShapeAttr const&, f32*) const { return false; } + /* vt[11]*/ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const = 0; + /* vt[12]*/ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const = 0; + /* vt[13]*/ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const = 0; + /* vt[14]*/ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const = 0; + /* vt[15]*/ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const = 0; + /* vt[16]*/ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const = 0; + /* 80084E38 vt[17]*/ virtual const cXyz& GetCoCP() const { return m_virtual_center; } + /* 80084E2C vt[18]*/ virtual cXyz& GetCoCP() { return m_virtual_center; } + /* vt[19]*/ virtual void CalcAabBox() = 0; + /* vt[20]*/ virtual bool GetNVec(cXyz const&, cXyz*) const = 0; + /* 80263A64 vt[21]*/ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; + + cM3dGAab& GetWorkAab() { return mAab; } + cM3dGAab const& GetWorkAab() const { return mAab; } + + static cXyz m_virtual_center; +}; + +STATIC_ASSERT(0x20 == sizeof(cCcD_ShapeAttr)); + class cCcD_GObjInf; class cCcD_Obj : public cCcD_ObjHitInf { @@ -591,6 +464,161 @@ public: /* 800851A0 */ virtual cCcD_GObjInf* GetGObjInf() { return this; } }; +class cCcD_PntAttr : public cCcD_ShapeAttr, public cM3dGVtx { +public: + cCcD_PntAttr() {} + virtual ~cCcD_PntAttr() {} + virtual bool GetNVec(cXyz const&, cXyz*) const; + virtual bool CrossAtTg(cCcD_ShapeAttr const& param_0, cXyz* param_1) const { + return param_0.CrossAtTg(*this, param_1); + } + virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } + virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const { return false; } + virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const { return false; } + virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } + virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const { return false; } + virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const { return false; } + virtual bool CrossCo(const cCcD_ShapeAttr& param_0, f32* param_1) const { + return param_0.CrossCo(*this, param_1); + } + virtual bool CrossCo(const cCcD_PntAttr&, f32*) const { return false; } + virtual bool CrossCo(const cCcD_CpsAttr&, f32*) const { return false; } + virtual bool CrossCo(const cCcD_TriAttr&, f32*) const { return false; } + virtual bool CrossCo(const cCcD_AabAttr&, f32*) const { return false; } + virtual bool CrossCo(const cCcD_CylAttr&, f32*) const { return false; } + virtual bool CrossCo(const cCcD_SphAttr&, f32*) const { return false; } + virtual void CalcAabBox() {} +}; + +class cCcD_CpsAttr : public cCcD_ShapeAttr, public cM3dGCps { +public: + cCcD_CpsAttr() {} + void Set(const cCcD_SrcCpsAttr& pSrc) { cM3dGCps::Set(pSrc.mCps); } + void Set(const cXyz& pStart, const cXyz& pEnd, float radius) { + cM3dGCps::Set(pStart, pEnd, radius); + } + + /* 80085450 */ virtual ~cCcD_CpsAttr() {} + /* 80263DC0 */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; + /* 80263E04 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; + /* 80084FE4 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { + return shape.CrossAtTg(*this, xyz); + } + /* 80084FDC */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } + /* 80084FD4 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } + /* 80263D38 */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; + /* 80263D7C */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; + /* 80263F24 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; + /* 80263ED4 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; + /* 80263F74 */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; + /* 80085034 */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { + return shape.CrossCo(*this, f); + } + /* 8008502C */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } + /* 80085024 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } + /* 8008501C */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } + /* 80263FC4 */ virtual void CalcAabBox(); + /* 80264014 */ virtual bool GetNVec(cXyz const&, cXyz*) const; +}; + +STATIC_ASSERT(0x40 == sizeof(cCcD_CpsAttr)); + +class cCcD_TriAttr : public cCcD_ShapeAttr, public cM3dGTri { +public: + /* 80263C04 */ virtual void CalcAabBox(); + /* 80263C9C */ virtual bool GetNVec(cXyz const&, cXyz*) const; + /* 80263A88 */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; + /* 80263BCC */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; + /* 80263B90 */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; + /* 80084E54 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { + return shape.CrossAtTg(*this, xyz); + } + /* 80084E4C */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } + /* 80084E44 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } + /* 80263B58 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; + /* 80084EBC */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { + return shape.CrossCo(*this, f); + } + /* 80084EB4 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } + /* 80084EAC */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const { return false; } + /* 80084EA4 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } + /* 80084E9C */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } + /* 80084E94 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const { return false; } + /* 80084E8C */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const { return false; } + /* 80264938 */ virtual ~cCcD_TriAttr() {} + cCcD_TriAttr() {} +}; + +class cCcD_CylAttr : public cCcD_ShapeAttr, public cM3dGCyl { +public: + cCcD_CylAttr() {} + /* 800854E0 */ virtual ~cCcD_CylAttr() {} + /* 80084CC0 */ virtual const cXyz& GetCoCP() const { return *GetCP(); } + /* 8026420C */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; + /* 802641C8 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; + /* 80264250 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; + /* 80084CD8 */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { + return shape.CrossAtTg(*this, xyz); + } + /* 80084CD0 */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } + /* 80084CC8 */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } + /* 8026417C */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; + /* 80264288 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; + /* 80264310 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; + /* 80084D28 */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { + return shape.CrossCo(*this, f); + } + /* 80084D20 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } + /* 80084D18 */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } + /* 80084D10 */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } + /* 802642CC */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; + /* 80037A4C */ virtual cXyz& GetCoCP() { return *GetCP(); } + /* 80264368 */ virtual void CalcAabBox(); + /* 802643D0 */ virtual bool GetNVec(cXyz const&, cXyz*) const; + /* 802644B8 */ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; + + const cM3dGCyl* GetShapeP() const { return this; } + +}; // Size = 0x38 + +STATIC_ASSERT(0x38 == sizeof(cCcD_CylAttr)); + +class cCcD_SphAttr : public cCcD_ShapeAttr, public cM3dGSph { +public: + cCcD_SphAttr() {} + void Set(const cCcD_SrcSphAttr& src) { cM3dGSph::Set(src.mSph); } + + /* 8008721C */ virtual ~cCcD_SphAttr() {} + /* 80084B44 */ virtual const cXyz& GetCoCP() const { return *GetCP(); } + /* 80037A54 */ virtual cXyz& GetCoCP() { return *GetCP(); } + /* 80084B5C */ virtual bool CrossAtTg(cCcD_ShapeAttr const& shape, cXyz* xyz) const { + return shape.CrossAtTg(*this, xyz); + } + /* 80084B54 */ virtual bool CrossAtTg(cCcD_PntAttr const&, cXyz*) const { return false; } + /* 80084B4C */ virtual bool CrossAtTg(cCcD_AabAttr const&, cXyz*) const { return false; } + /* 80084BAC */ virtual bool CrossCo(cCcD_ShapeAttr const& shape, f32* f) const { + return shape.CrossCo(*this, f); + } + /* 80084BA4 */ virtual bool CrossCo(cCcD_PntAttr const&, f32*) const { return false; } + /* 80084B9C */ virtual bool CrossCo(cCcD_TriAttr const&, f32*) const { return false; } + /* 80084B94 */ virtual bool CrossCo(cCcD_AabAttr const&, f32*) const { return false; } + /* 80264538 */ virtual bool CrossAtTg(cCcD_CylAttr const&, cXyz*) const; + /* 802645C0 */ virtual bool CrossAtTg(cCcD_TriAttr const&, cXyz*) const; + /* 802644EC */ virtual bool CrossAtTg(cCcD_CpsAttr const&, cXyz*) const; + /* 8026457C */ virtual bool CrossAtTg(cCcD_SphAttr const&, cXyz*) const; + /* 80264688 */ virtual bool CrossCo(cCcD_CpsAttr const&, f32*) const; + /* 80264644 */ virtual bool CrossCo(cCcD_SphAttr const&, f32*) const; + /* 802645F8 */ virtual bool CrossCo(cCcD_CylAttr const&, f32*) const; + /* 802646E0 */ virtual void CalcAabBox(); + /* 8026476C */ virtual bool GetNVec(cXyz const&, cXyz*) const; + /* 80264808 */ virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const; + + const cM3dGSph* GetShapeP() const { return this; } + +}; // Size = 0x34 + +STATIC_ASSERT(0x34 == sizeof(cCcD_SphAttr)); + STATIC_ASSERT(0x58 == sizeof(cCcD_GObjInf)); #endif /* C_CC_D_H */ diff --git a/include/SSystem/SComponent/c_m3d_g_sph.h b/include/SSystem/SComponent/c_m3d_g_sph.h index 217dcefc04a..98cac290271 100644 --- a/include/SSystem/SComponent/c_m3d_g_sph.h +++ b/include/SSystem/SComponent/c_m3d_g_sph.h @@ -33,6 +33,7 @@ public: void GetMinMaxCube(cXyz&, cXyz&) const; const cXyz& GetC(void) const { return mCenter; } const cXyz* GetCP() const { return &mCenter; } + cXyz* GetCP() { return &mCenter; } const f32 GetR(void) const { return mRadius; } f32 GetCX(void) const { return mCenter.x; } f32 GetCY(void) const { return mCenter.y; } @@ -50,4 +51,4 @@ extern "C" { void Set__8cM3dGSphFRC4cXyzf(void); } -#endif \ No newline at end of file +#endif diff --git a/include/d/actor/d_a_npc_kolin.h b/include/d/actor/d_a_npc_kolin.h index 335e0b93101..7272eaa67fa 100644 --- a/include/d/actor/d_a_npc_kolin.h +++ b/include/d/actor/d_a_npc_kolin.h @@ -67,6 +67,9 @@ public: /* 80558AF8 */ int follow(void*); /* 80558C4C */ int clothWait(void*); /* 80558E90 */ int talk(void*); +#if DEBUG + int test(void*); +#endif /* 8055A3B8 */ daNpc_Kolin_c( daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, daNpcT_motionAnmData_c const* i_motionAnmData, diff --git a/include/d/actor/d_a_npc_kolinb.h b/include/d/actor/d_a_npc_kolinb.h index 394d5684ee4..2aa0d11e18d 100644 --- a/include/d/actor/d_a_npc_kolinb.h +++ b/include/d/actor/d_a_npc_kolinb.h @@ -115,6 +115,9 @@ public: /* 80A4738C */ int cutThankYou(int); /* 80A4742C */ int wait(void*); /* 80A475D4 */ int talk(void*); +#if DEBUG + int test(void*); +#endif /* 80A4854C */ daNpc_Kolinb_c( daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, daNpcT_motionAnmData_c const* i_motionAnmData, diff --git a/include/d/actor/d_a_npc_saru.h b/include/d/actor/d_a_npc_saru.h index 66a2a517835..853162d58cf 100644 --- a/include/d/actor/d_a_npc_saru.h +++ b/include/d/actor/d_a_npc_saru.h @@ -12,12 +12,9 @@ * */ -struct daNpc_Saru_HIO_c -#ifdef DEBUG -: public mDoHIO_entry_c -#endif +struct daNpc_Saru_HIOParam { -public: + /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ s16 scared_time; // 怯える時間 - Scared Time /* 0x8E */ s16 field_0x8e; @@ -31,7 +28,12 @@ public: void genMessage(JORMContext*); #endif - static const daNpc_Saru_HIO_c m; + static const daNpc_Saru_HIOParam m; +}; + +class daNpc_Saru_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Saru_HIOParam param; }; class daNpc_Saru_c : public daNpcT_c { diff --git a/include/d/actor/d_a_npc_ykm.h b/include/d/actor/d_a_npc_ykm.h index ae3ae0b183a..592425dd2db 100644 --- a/include/d/actor/d_a_npc_ykm.h +++ b/include/d/actor/d_a_npc_ykm.h @@ -38,6 +38,10 @@ struct daNpc_ykM_HIOParam { class daNpc_ykM_Param_c : public JORReflexible { public: +#if DEBUG + virtual void genMessage(JORMContext*); +#endif + /* 80B5D6C8 */ virtual ~daNpc_ykM_Param_c() {} void genMessage(JORMContext*); diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index 644a4402673..a8cb913d249 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -109,56 +109,13 @@ struct dCcD_SrcCps { /* 0x30 */ cCcD_SrcCpsAttr mCpsAttr; }; // Size: 0x4C -class dCcD_GStts : public cCcD_GStts { -public: - /* 80083760 */ dCcD_GStts(); - /* 800837F8 */ void Ct(); - /* 80083830 */ void Move(); - /* 8008523C */ virtual ~dCcD_GStts() {} - void ClrAt() { mAt = 0; } - void ClrTg() { mTg = 0; } - void SetAtApid(fpc_ProcID id) { mAtApid = id; } - void SetTgApid(fpc_ProcID id) { mTgApid = id; } - u8 GetRoomId() { return mRoomId; } - void SetRoomId(int id) { mRoomId = id; } - fpc_ProcID GetAtOldApid() { return mAtOldApid; } - fpc_ProcID GetTgOldApid() { return mTgOldApid; } - bool ChkNoActor() { return field_0x1C & 1;} - bool ChkNoneActorPerfTblId() { return field_0x08 == 0xFFFF; } - dCcG_At_Spl GetAtSpl() { return (dCcG_At_Spl)mAt; } - void SetAtSpl(dCcG_At_Spl spl) { mAt = spl; } - dCcG_Tg_Spl GetTgSpl() { return (dCcG_Tg_Spl)mTg; } - void SetTgSpl(dCcG_Tg_Spl spl) { mTg = spl; } - void OnNoActor() { field_0x1C |= 1; } - - // private: - /* 0x04 */ u8 mAt; - /* 0x05 */ u8 mTg; - /* 0x06 */ u8 mRoomId; - /* 0x08 */ u16 field_0x08; - /* 0x0C */ int mAtApid; - /* 0x10 */ int mAtOldApid; - /* 0x14 */ int mTgApid; - /* 0x18 */ int mTgOldApid; - /* 0x1C */ int field_0x1C; -}; // Size = 0x20 - -class dCcD_Stts : public cCcD_Stts, public dCcD_GStts { -public: - dCcD_Stts() {} - /* 80083850 */ virtual cCcD_GStts* GetGStts(); - /* 80083860 */ void Init(int weight, int, fopAc_ac_c* pactor); - /* 800838F4 */ virtual void Ct(); - /* 80083928 */ virtual void ClrAt(); - /* 80083934 */ virtual void ClrTg(); - /* 800851AC */ virtual ~dCcD_Stts() {} - -}; // Size = 0x3C +// unused, existence is inferred +struct dCcD_SrcPnt { +}; class dCcD_GObjInf; typedef void (*dCcD_HitCallback)(fopAc_ac_c* i_actorA, dCcD_GObjInf* i_objInfA, fopAc_ac_c* i_actorB, dCcD_GObjInf* i_objInfB); - // Attack/Defense/Correction Collider Common Base class dCcD_GAtTgCoCommonBase { public: @@ -272,6 +229,52 @@ public: void Set(dCcD_SrcGObjCo const& pSrc) { dCcD_GAtTgCoCommonBase::Set(pSrc.mBase); } }; // Size = 0x1C ? +class dCcD_GStts : public cCcD_GStts { +public: + /* 80083760 */ dCcD_GStts(); + /* 800837F8 */ void Ct(); + /* 80083830 */ void Move(); + /* 8008523C */ virtual ~dCcD_GStts() {} + void ClrAt() { mAt = 0; } + void ClrTg() { mTg = 0; } + void SetAtApid(fpc_ProcID id) { mAtApid = id; } + void SetTgApid(fpc_ProcID id) { mTgApid = id; } + u8 GetRoomId() { return mRoomId; } + void SetRoomId(int id) { mRoomId = id; } + fpc_ProcID GetAtOldApid() { return mAtOldApid; } + fpc_ProcID GetTgOldApid() { return mTgOldApid; } + bool ChkNoActor() { return field_0x1C & 1;} + bool ChkNoneActorPerfTblId() { return field_0x08 == 0xFFFF; } + dCcG_At_Spl GetAtSpl() { return (dCcG_At_Spl)mAt; } + void SetAtSpl(dCcG_At_Spl spl) { mAt = spl; } + dCcG_Tg_Spl GetTgSpl() { return (dCcG_Tg_Spl)mTg; } + void SetTgSpl(dCcG_Tg_Spl spl) { mTg = spl; } + void OnNoActor() { field_0x1C |= 1; } + + // private: + /* 0x04 */ u8 mAt; + /* 0x05 */ u8 mTg; + /* 0x06 */ u8 mRoomId; + /* 0x08 */ u16 field_0x08; + /* 0x0C */ int mAtApid; + /* 0x10 */ int mAtOldApid; + /* 0x14 */ int mTgApid; + /* 0x18 */ int mTgOldApid; + /* 0x1C */ int field_0x1C; +}; // Size = 0x20 + +class dCcD_Stts : public cCcD_Stts, public dCcD_GStts { +public: + dCcD_Stts() {} + /* 80083850 */ virtual cCcD_GStts* GetGStts(); + /* 80083860 */ void Init(int weight, int, fopAc_ac_c* pactor); + /* 800838F4 */ virtual void Ct(); + /* 80083928 */ virtual void ClrAt(); + /* 80083934 */ virtual void ClrTg(); + /* 800851AC */ virtual ~dCcD_Stts() {} + +}; // Size = 0x3C + // Object Info class dCcD_GObjInf : public cCcD_GObjInf { public: @@ -420,6 +423,36 @@ protected: /* 0x0E8 */ dCcD_GObjCo mGObjCo; }; // Size = 0x104 +// Point (unused, existence is inferred) +// Including this definition (and its GetShapeAttr impl) causes functions +// from cCcD_PntAttr to be emitted in debug, matching what's seen in ShieldD. +class dCcD_Pnt : public dCcD_GObjInf, public cCcD_PntAttr { +public: + /* 80084814 */ cCcD_ShapeAttr* GetShapeAttr(); + /* 8008506C */ virtual ~dCcD_Pnt() {} + dCcD_Pnt() {} +}; // Size = 0x144 + +// Capsule +class dCcD_Cps : public dCcD_GObjInf, public cCcD_CpsAttr { +public: + /* 800847D0 */ void Set(dCcD_SrcCps const&); + /* 80084814 */ cCcD_ShapeAttr* GetShapeAttr(); + /* 80084824 */ void CalcAtVec(); + /* 80084854 */ void CalcTgVec(); + /* 8008506C */ virtual ~dCcD_Cps() {} + dCcD_Cps() {} +}; // Size = 0x144 + +// Triangle +class dCcD_Tri : public dCcD_GObjInf, public cCcD_TriAttr { +public: + /* 80084884 */ void Set(dCcD_SrcTri const&); + /* 800848A4 */ cCcD_ShapeAttr* GetShapeAttr(); + /* 80084EF4 */ virtual ~dCcD_Tri() {} + dCcD_Tri() {} +}; + // Cylinder class dCcD_Cyl : public dCcD_GObjInf, public cCcD_CylAttr { public: @@ -443,27 +476,6 @@ public: /* 80084BF4 */ virtual ~dCcD_Sph() {} }; // Size = 0x138 - -// Capsule -class dCcD_Cps : public dCcD_GObjInf, public cCcD_CpsAttr { -public: - /* 800847D0 */ void Set(dCcD_SrcCps const&); - /* 80084814 */ cCcD_ShapeAttr* GetShapeAttr(); - /* 80084824 */ void CalcAtVec(); - /* 80084854 */ void CalcTgVec(); - /* 8008506C */ virtual ~dCcD_Cps() {} - dCcD_Cps() {} -}; // Size = 0x144 - -// Triangle -class dCcD_Tri : public dCcD_GObjInf, public cCcD_TriAttr { -public: - /* 80084884 */ void Set(dCcD_SrcTri const&); - /* 800848A4 */ cCcD_ShapeAttr* GetShapeAttr(); - /* 80084EF4 */ virtual ~dCcD_Tri() {} - dCcD_Tri() {} -}; - dCcD_GObjInf* dCcD_GetGObjInf(cCcD_Obj* param_0); #endif /* D_CC_D_CC_D_H */ diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 1440a781146..c19da2cedac 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -4,6 +4,12 @@ #include "JSystem/JFramework/JFWDisplay.h" #include "dolphin/mtx.h" #include "global.h" +// Possibly fakematch? +// Using `sym off` for this header fixes cXyz::~cXyz being incorrectly placed in +// a separate .text section. +#pragma sym off +#include "SSystem/SComponent/c_xyz.h" +#pragma sym on int mDoGph_Create(); void mDoGph_drawFilterQuad(s8 param_0, s8 param_1); @@ -176,6 +182,9 @@ public: static u8 mFade; #if PLATFORM_WII || PLATFORM_SHIELD + static cXyz m_nowEffPos; + static cXyz m_oldEffPos; + static cXyz m_oldOldEffPos; static u8 mWide; static ResTIMG* m_fullFrameBufferTimg; static void* m_fullFrameBufferTex; diff --git a/src/SSystem/SComponent/c_cc_d.cpp b/src/SSystem/SComponent/c_cc_d.cpp index 713ba728a03..55ac56a417f 100644 --- a/src/SSystem/SComponent/c_cc_d.cpp +++ b/src/SSystem/SComponent/c_cc_d.cpp @@ -299,6 +299,22 @@ void cCcD_ShapeAttr::getShapeAccess(cCcD_ShapeAttr::Shape* pshape) const { pshape->_4.x = 0.0f; } +bool cCcD_PntAttr::GetNVec(cXyz const& param_0, cXyz* param_1) const { + param_1->x = param_0.x - vtx.x; + param_1->y = param_0.y - vtx.y; + param_1->z = param_0.z - vtx.z; + if (cM3d_IsZero(PSVECMag(param_1))) { + param_1->x = 0.0f; + param_1->y = 0.0f; + param_1->z = 0.0f; + return false; + } else { + PSVECNormalize(param_1, param_1); + return true; + } +} + + /* 80263A88-80263B58 25E3C8 00D0+00 1/0 1/0 0/0 .text * CrossAtTg__12cCcD_TriAttrCFRC12cCcD_CpsAttrP4cXyz */ bool cCcD_TriAttr::CrossAtTg(const cCcD_CpsAttr& cpsAttr, cXyz* pxyz) const { diff --git a/src/d/actor/d_a_npc_saru.cpp b/src/d/actor/d_a_npc_saru.cpp index 2187d575542..5c958206c8f 100644 --- a/src/d/actor/d_a_npc_saru.cpp +++ b/src/d/actor/d_a_npc_saru.cpp @@ -248,7 +248,7 @@ daNpc_Saru_c::~daNpc_Saru_c() { /* ############################################################################################## */ /* 80AC44F8-80AC4588 000000 0090+00 9/9 0/0 0/0 .rodata m__18daNpc_Saru_Param_c */ -daNpc_Saru_HIO_c const daNpc_Saru_Param_c::m = { +daNpc_Saru_HIOParam const daNpc_Saru_Param_c::m = { 140.0f, -3.0f, 1.0f, diff --git a/src/d/d_cc_d.cpp b/src/d/d_cc_d.cpp index 9b1a1d15c8c..87506ebee25 100644 --- a/src/d/d_cc_d.cpp +++ b/src/d/d_cc_d.cpp @@ -364,6 +364,10 @@ dCcD_GObjInf* dCcD_GetGObjInf(cCcD_Obj* p_obj) { return (dCcD_GObjInf*)p_obj->GetGObjInf(); } +cCcD_ShapeAttr* dCcD_Pnt::GetShapeAttr() { + return this; +} + /* 800847D0-80084814 07F110 0044+00 0/0 1/1 20/20 .text Set__8dCcD_CpsFRC11dCcD_SrcCps */ void dCcD_Cps::Set(dCcD_SrcCps const& src) { dCcD_GObjInf::Set(src.mObjInf); diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index aaa698ba56e..4ed9d944957 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -4,17 +4,18 @@ // #include "d/d_drawlist.h" -#include "d/d_s_play.h" +#include "JSystem/J2DGraph/J2DAnimation.h" +#include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J2DGraph/J2DScreen.h" #include "JSystem/J3DGraphBase/J3DDrawBuffer.h" #include "SSystem/SComponent/c_bg_s_shdw_draw.h" #include "SSystem/SComponent/c_math.h" #include "d/d_com_inf_game.h" +#include "d/d_s_play.h" #include "dol2asm.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_mtx.h" -#include "JSystem/J2DGraph/J2DGrafContext.h" class dDlst_blo_c : public dDlst_base_c { public: @@ -911,6 +912,11 @@ void dDlst_2DMt_c::draw() { } } +// stand-in for a stripped function that calls J2DPicture::getTexture +JUTTexture* dummy_getTexture(J2DPicture* picture) { + return picture->getTexture(0); +} + /* 80053A00-80053A9C 04E340 009C+00 0/0 1/1 0/0 .text __ct__10dDlst_2D_cFP7ResTIMGssssUc */ dDlst_2D_c::dDlst_2D_c(ResTIMG* i_timg, s16 i_posX, s16 i_posY, s16 i_sizeX, s16 i_sizeY, @@ -934,6 +940,23 @@ void dDlst_blo_c::draw() { mScreen.draw(field_0x120, field_0x124, dComIfGp_getCurrentGrafPort()); } +// stand-in for a function that pulls in a bunch of inline functions but was presumably stripped +void dummy_misc() { + J2DScreen* screen; + J2DPane* pane; + J2DPicture* picture; + J2DAnmBase* anmBase; + J2DAnmColor* anmColor; + delete anmBase; + picture->setBlack(JUtility::TColor(0, 0, 0, 0)); + picture->setWhite(JUtility::TColor(0, 0, 0, 0)); + pane->getTypeID(); + pane->makeMatrix(0.0f, 0.0f); + pane->calcMtx(); + screen->clearAnmTransform(); + anmColor->searchUpdateMaterialID(screen); +} + /* 80053CDC-80053CEC 04E61C 0010+00 0/0 2/2 0/0 .text init__8cM_rnd_cFiii */ void cM_rnd_c::init(int s0, int s1, int s2) { seed0 = s0; diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index fe637f1093d..a7f09f999b7 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -17,7 +17,12 @@ #include "m_Do/m_Do_machine.h" #include "m_Do/m_Do_main.h" #include "SSystem/SComponent/c_math.h" +// Possibly fakematch? +// Using `sym off` for this header fixes J2DOrthoGraph::~J2DOrthoGraph being +// incorrectly placed in a separate .text section. +#pragma sym off #include "JSystem/J2DGraph/J2DOrthoGraph.h" +#pragma sym on #include "JSystem/JParticle/JPADrawInfo.h" #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JFramework/JFWSystem.h" @@ -510,7 +515,7 @@ static void drawDepth2(view_class* param_0, view_port_class* param_1, int param_ GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3s16(x_orig, y_orig_pos, -5); GXTexCoord2s8(0, 0); - GXPosition3s16(width, y_orig_pos, -5); + GXPosition3s16(width, y_orig_pos, -5); GXTexCoord2s8(1, 0); GXPosition3s16(width, height, -5); GXTexCoord2s8(1, 1);