From 256665d6c1f906053937c6d76c3c49bcd705fd33 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 10 Feb 2024 17:40:02 -0500 Subject: [PATCH] d_bg_w_deform OK --- configure.py | 2 +- include/d/d_bg_w.h | 2 +- include/d/d_bg_w_deform.h | 16 ++++++++++++++++ include/d/d_bg_w_sv.h | 6 +++++- src/d/d_bg_w_deform.cpp | 27 ++++++++++++++++++++++----- 5 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 include/d/d_bg_w_deform.h diff --git a/configure.py b/configure.py index 1248bbc94..c45a217b9 100644 --- a/configure.py +++ b/configure.py @@ -394,7 +394,7 @@ config.libs = [ Object(Matching, "d/d_bg_s_spl_grp_chk.cpp"), Object(Matching, "d/d_bg_s_wtr_chk.cpp"), Object(NonMatching, "d/d_bg_w.cpp"), - Object(NonMatching, "d/d_bg_w_deform.cpp"), + Object(Matching, "d/d_bg_w_deform.cpp"), Object(NonMatching, "d/d_bg_w_hf.cpp"), Object(NonMatching, "d/d_bg_w_sv.cpp"), Object(Matching, "d/d_cc_d.cpp"), diff --git a/include/d/d_bg_w.h b/include/d/d_bg_w.h index 956a1625e..efd46cd71 100644 --- a/include/d/d_bg_w.h +++ b/include/d/d_bg_w.h @@ -70,7 +70,7 @@ public: /* 0xB8 */ u16 mRoomNo; /* 0xBA */ u8 mFlag; /* 0xBB */ u8 mRoomNo2; -}; +}; // Size: 0xBC dBgW* dBgW_NewSet(cBgD_t*, unsigned long, float(*)[3][4]); diff --git a/include/d/d_bg_w_deform.h b/include/d/d_bg_w_deform.h new file mode 100644 index 000000000..691b9a6ad --- /dev/null +++ b/include/d/d_bg_w_deform.h @@ -0,0 +1,16 @@ +#ifndef D_BG_W_DEFORM_H +#define D_BG_W_DEFORM_H + +#include "d/d_bg_w_sv.h" +#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" + +class dBgWDeform : public dBgWSv, public J3DSkinDeform { +public: + bool Set(cBgD_t*, J3DModel*, u32); + +public: + /* 0x00 */ /* dBgWSv */ + /* 0xC4 */ /* J3DSkinDeform */ +}; // Size: 0xDC + +#endif /* D_BG_W_DEFORM_H */ diff --git a/include/d/d_bg_w_sv.h b/include/d/d_bg_w_sv.h index 4f5fe9f51..cc942b87d 100644 --- a/include/d/d_bg_w_sv.h +++ b/include/d/d_bg_w_sv.h @@ -17,6 +17,10 @@ public: virtual void CrrPos(cBgS_PolyInfo&, void*, bool, cXyz*, csXyz*, csXyz*); void TransPosWork(cXyz*, int, int, int); virtual void TransPos(cBgS_PolyInfo&, void*, bool, cXyz*, csXyz*, csXyz*); -}; + +public: + /* 0xBC */ u32 mBC; + /* 0xC0 */ Vec* mC0; +}; // Size: 0xC4 #endif /* D_BG_W_SV_H */ diff --git a/src/d/d_bg_w_deform.cpp b/src/d/d_bg_w_deform.cpp index 25a83e114..0f64eb0e3 100644 --- a/src/d/d_bg_w_deform.cpp +++ b/src/d/d_bg_w_deform.cpp @@ -3,11 +3,28 @@ // Translation Unit: d_bg_w_deform.cpp // -#include "d_bg_w_deform.h" -#include "dolphin/types.h" +#include "d/d_bg_w_deform.h" +#include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphAnimator/J3DModelData.h" /* 800A9928-800A9A48 .text Set__10dBgWDeformFP6cBgD_tP8J3DModelUl */ -void dBgWDeform::Set(cBgD_t*, J3DModel*, unsigned long) { - /* Nonmatching */ +bool dBgWDeform::Set(cBgD_t* bgd, J3DModel* pmodel, u32 r30) { + JUT_ASSERT(32, pmodel->getModelData()->isDeformablePositionFormat() == true); + if (cBgW::Set(bgd, 0x33, NULL)) { + return true; + } + mBC = r30; + if (pmodel->setSkinDeform(this, 1) == J3DErrType_OutOfMemory) { + return true; + } + pmodel->offFlag(J3DMdlFlag_SkinNrmCpu); + pmodel->onFlag(J3DMdlFlag_SkinPosCpu); + if (mBC & 1) { + return false; + } + mC0 = new Vec[pm_bgd->m_v_num]; + if (mC0 == NULL) { + return true; + } + return false; } -