From 9c6714a1a8e1bd8e88f7baafe21a9691709b068f Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 18:47:42 -0500 Subject: [PATCH 1/6] d_a_obj_barrier 100%, function order not matching --- src/d/actor/d_a_obj_barrier.cpp | 80 +++++++++++++++++---------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/src/d/actor/d_a_obj_barrier.cpp b/src/d/actor/d_a_obj_barrier.cpp index 6349ebf10..668f8869f 100644 --- a/src/d/actor/d_a_obj_barrier.cpp +++ b/src/d/actor/d_a_obj_barrier.cpp @@ -62,6 +62,12 @@ public: PROC_BREAK_ORDER, PROC_BREAK_END_WAIT, }; + enum Param_e { + PRM_DAMAGE_W = 0x01, + PRM_DAMAGE_S = 0x10, + PRM_MOYA_W = 0x01, + PRM_MOYA_S = 0x08, + }; daObjBarrier_c(); @@ -81,8 +87,8 @@ public: bool _execute(); bool _draw(); - bool param_get_damage() const { return daObj::PrmAbstract(this, 1, 0x10); } - int param_get_moya() const { return daObj::PrmAbstract(this, 1, 8); } + bool param_get_damage() const { return daObj::PrmAbstract(this, PRM_DAMAGE_W, PRM_DAMAGE_S); } + int param_get_moya() const { return daObj::PrmAbstract(this, PRM_MOYA_W, PRM_MOYA_S); } /* 0x290 */ daObjBarrier_anm_c mAnm; /* 0x2C4 */ request_of_phase_process_class mPhase; @@ -100,7 +106,7 @@ public: }; namespace { -static const char l_arcName[] = "Ycage"; +static const char l_arcname[] = "Ycage"; static const dCcD_SrcCyl l_cyl_at_src = { // dCcD_SrcGObjInf @@ -162,16 +168,15 @@ static const dCcD_SrcCyl l_cyl_tg_src = { }, }; -static cXyz l_ef_scale; +static cXyz l_ef_scale(1.0f, 1.0f, 1.0f); } // namespace /* 000000EC-0000018C .text init_mtx__14daObjBarrier_cFv */ -// NONMATCHING - load order flipped void daObjBarrier_c::init_mtx() { - mAnm.mpModel->setBaseScale(mScale); + mAnm.getMdlP()->setBaseScale(mScale); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); - mAnm.mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mAnm.getMdlP()->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::scaleM(mScale); cMtx_copy(mDoMtx_stack_c::get(), mBgMtx); @@ -185,21 +190,19 @@ int daObjBarrier_c::solidHeapCB(fopAc_ac_c* i_this) { /* 000001B0-00000340 .text init__18daObjBarrier_anm_cFv */ bool daObjBarrier_anm_c::init() { bool rt = true; - void* modelData = dComIfG_getObjectRes(l_arcName, 10); - void* pbtk = dComIfG_getObjectRes(l_arcName, 18); - void* pbrk = dComIfG_getObjectRes(l_arcName, 14); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcname, 10)); + J3DAnmTextureSRTKey* pbtk = static_cast(dComIfG_getObjectRes(l_arcname, 18)); + J3DAnmTevRegKey* pbrk = static_cast(dComIfG_getObjectRes(l_arcname, 14)); if (modelData == NULL || pbtk == NULL || pbrk == NULL) { JUT_PANIC(407); rt = false; } else { - mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x1000200); - BOOL btk_init = mBtk.init( - (J3DModelData*)modelData, (J3DAnmTextureSRTKey*)pbtk, - TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); - BOOL brk_init = mBrk.init( - (J3DModelData*)modelData, (J3DAnmTevRegKey*)pbrk, - TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x1000200); + BOOL btk_init = + mBtk.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + BOOL brk_init = + mBrk.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); if (mpModel == NULL || !btk_init || !brk_init) { rt = false; @@ -218,7 +221,7 @@ bool daObjBarrier_c::create_heap() { if (!anm_init || !eff_init) { rt = false; } else { - cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 22); + cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(l_arcname, 22); mpBgW = dBgW_NewSet(dzb, cBgW::MOVE_BG_e, &mBgMtx); if (mpBgW == NULL) { rt = false; @@ -415,7 +418,6 @@ bool daObjBarrier_ef_c::checkHitActor(fopAc_ac_c* i_checkActor) { } /* 00000D5C-000011B8 .text birth__17daObjBarrier_ef_cFP10fopAc_ac_cf4cXyz4cXyzi */ -// NONMATCHING void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_center, cXyz i_hitPos, int i_isNoEff) { if (!i_isNoEff || !checkHitActor(i_hitActor)) { @@ -428,8 +430,9 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente pos.z = i_center.z + i_radius * -cM_scos(angle.y); pos.y = i_hitPos.y; + int i; int active_flags = mActiveEffFlags; - for (int i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { if (!((active_flags >> i) & 1)) { effect_idx = i; break; @@ -438,7 +441,7 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente if (effect_idx == -1) { f32 var_f1 = -1.0f; - for (int i = 0; i < 4; i++) { // nonmatching + for (i = 0; i < 4; i++) { if (mBtk[i].getFrame() > var_f1) { var_f1 = mBtk[i].getFrame(); effect_idx = i; @@ -446,7 +449,8 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente } } - for (int i = 0; i < 4; i++) { + active_flags = mActiveEffFlags; + for (i = 0; i < 4; i++) { if ((int)((active_flags >> i) & 1) == true) { if (i != effect_idx) { mBtk[i].setPlaySpeed((mBtk[i].getEndFrame() - mBtk[i].getFrame()) / 3.0f); @@ -462,21 +466,21 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente J3DModelData* modelData = mpModel[effect_idx]->getModelData(); - void* btk_anm_p = dComIfG_getObjectRes(l_arcName, 19); + J3DAnmTextureSRTKey* btk_anm_p = static_cast(dComIfG_getObjectRes(l_arcname, 19)); JUT_ASSERT(937, btk_anm_p != 0); - void* bck_anm_p = dComIfG_getObjectRes(l_arcName, 7); + J3DAnmTransform* bck_anm_p = static_cast(dComIfG_getObjectRes(l_arcname, 7)); JUT_ASSERT(942, bck_anm_p != 0); - void* brk_anm_p = dComIfG_getObjectRes(l_arcName, 15); + J3DAnmTevRegKey* brk_anm_p = static_cast(dComIfG_getObjectRes(l_arcname, 15)); JUT_ASSERT(947, brk_anm_p != 0); - mBtk[effect_idx].init(modelData, (J3DAnmTextureSRTKey*)btk_anm_p, TRUE, - J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, true, 0); - mBck[effect_idx].init(modelData, (J3DAnmTransform*)bck_anm_p, TRUE, - J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, true); - mBrk[effect_idx].init(modelData, (J3DAnmTevRegKey*)brk_anm_p, TRUE, - J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, true, 0); + mBtk[effect_idx].init(modelData, btk_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, + true, 0); + mBck[effect_idx].init(modelData, bck_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, + true); + mBrk[effect_idx].init(modelData, brk_anm_p, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, + true, 0); mDoMtx_stack_c::transS(pos.x, pos.y, pos.z); mDoMtx_stack_c::ZXYrotM(0, angle.y, 0); @@ -489,10 +493,10 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente /* 000011B8-000013E0 .text init__17daObjBarrier_ef_cFv */ bool daObjBarrier_ef_c::init() { bool rt = true; - void* modelData = dComIfG_getObjectRes(l_arcName, 11); - void* pbtk = dComIfG_getObjectRes(l_arcName, 19); - void* pbck = dComIfG_getObjectRes(l_arcName, 7); - void* pbrk = dComIfG_getObjectRes(l_arcName, 15); + void* modelData = dComIfG_getObjectRes(l_arcname, 11); + void* pbtk = dComIfG_getObjectRes(l_arcname, 19); + void* pbck = dComIfG_getObjectRes(l_arcname, 7); + void* pbrk = dComIfG_getObjectRes(l_arcname, 15); if (modelData == NULL || pbtk == NULL || pbck == NULL || pbrk == NULL) { JUT_PANIC(1016); @@ -584,7 +588,7 @@ int daObjBarrier_c::_create() { } if (mBarrierActive == true) { - phase = dComIfG_resLoad(&mPhase, l_arcName); + phase = dComIfG_resLoad(&mPhase, l_arcname); } if (phase == cPhs_COMPLEATE_e) { @@ -594,7 +598,7 @@ int daObjBarrier_c::_create() { } else { mpBgW->SetCrrFunc(NULL); mScale.z = mScale.x; - fopAcM_SetMtx(this, mAnm.mpModel->getBaseTRMtx()); + fopAcM_SetMtx(this, mAnm.getMdlP()->getBaseTRMtx()); init_mtx(); mAtStts.Init(0xFF, 0xFF, this); @@ -629,7 +633,7 @@ daObjBarrier_c::daObjBarrier_c() { /* 00001A38-00001AD8 .text _delete__14daObjBarrier_cFv */ bool daObjBarrier_c::_delete() { if (mBarrierActive == true) { - dComIfG_resDelete(&mPhase, l_arcName); + dComIfG_resDelete(&mPhase, l_arcname); if (heap != NULL && mpBgW != NULL) { if (mpBgW->ChkUsed()) { From 860628a7bf281d26b5542c889497b5778bcd0dae Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 19:01:52 -0500 Subject: [PATCH 2/6] Add header for d_a_obj_barrier --- include/d/actor/d_a_obj_barrier.h | 103 ++++++++++++++++++++++++++++ src/d/actor/d_a_obj_barrier.cpp | 108 ++---------------------------- 2 files changed, 109 insertions(+), 102 deletions(-) create mode 100644 include/d/actor/d_a_obj_barrier.h diff --git a/include/d/actor/d_a_obj_barrier.h b/include/d/actor/d_a_obj_barrier.h new file mode 100644 index 000000000..b06aa474b --- /dev/null +++ b/include/d/actor/d_a_obj_barrier.h @@ -0,0 +1,103 @@ +#ifndef D_A_OBJ_BARRIER_H +#define D_A_OBJ_BARRIER_H + +#include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" +#include "d/d_a_obj.h" + +class dBgW; + +class daObjBarrier_anm_c { +public: + daObjBarrier_anm_c() { mBrkFrame = 0.0f; } + + bool init(); + + J3DModel* getMdlP() { return mpModel; } + mDoExt_btkAnm* getBtkAnmP() { return &mBtk; } + mDoExt_brkAnm* getBrkAnmP() { return &mBrk; } + + f32 getBrkFrame() { return mBrkFrame; } + void setBrkFrame(f32 i_frame) { mBrkFrame = i_frame; } + + /* 0x00 */ J3DModel* mpModel; + /* 0x04 */ mDoExt_btkAnm mBtk; + /* 0x18 */ mDoExt_brkAnm mBrk; + /* 0x30 */ f32 mBrkFrame; +}; + +class daObjBarrier_ef_c { +public: + void setDummyTexture(int); + bool checkHitActor(fopAc_ac_c*); + void birth(fopAc_ac_c*, f32, cXyz, cXyz, int); + bool init(); + void create(); + void execute(); + void draw(); + + f32 getBtkFrame(int i_idx) { return mBtk[i_idx].getFrame(); } + + /* 0x000 */ u32 mActiveEffFlags; + /* 0x004 */ J3DModel* mpModel[4]; + /* 0x014 */ mDoExt_btkAnm mBtk[4]; + /* 0x064 */ mDoExt_bckAnm mBck[4]; + /* 0x0A4 */ mDoExt_brkAnm mBrk[4]; + /* 0x104 */ cXyz mPos[4]; + /* 0x134 */ s16 mAngle[4]; + /* 0x13C */ fopAc_ac_c* mHitActor[4]; +}; + +class daObjBarrier_c : public fopAc_ac_c { +public: + enum PROC_e { + PROC_BREAK_START_WAIT, + PROC_BREAK_ORDER, + PROC_BREAK_END_WAIT, + }; + enum Param_e { + PRM_DAMAGE_W = 0x01, + PRM_DAMAGE_S = 0x10, + PRM_MOYA_W = 0x01, + PRM_MOYA_S = 0x08, + }; + + daObjBarrier_c() { + mEffect.mActiveEffFlags = 0; + } + + void init_mtx(); + static int solidHeapCB(fopAc_ac_c*); + bool create_heap(); + bool checkCollision_Tg(); + void checkCollision_At(); + void registCollisionTable(); + void brkAnmPlay(); + void break_start_wait_proc(); + void break_order_proc(); + void break_end_wait_proc(); + bool break_check(); + int _create(); + bool _delete(); + bool _execute(); + bool _draw(); + + bool param_get_damage() const { return daObj::PrmAbstract(this, PRM_DAMAGE_W, PRM_DAMAGE_S); } + int param_get_moya() const { return daObj::PrmAbstract(this, PRM_MOYA_W, PRM_MOYA_S); } + + /* 0x290 */ daObjBarrier_anm_c mAnm; + /* 0x2C4 */ request_of_phase_process_class mPhase; + /* 0x2CC */ dBgW* mpBgW; + /* 0x2D0 */ Mtx mBgMtx; + /* 0x300 */ dCcD_Stts mAtStts; + /* 0x33C */ dCcD_Stts mTgStts; + /* 0x378 */ dCcD_Cyl mAtCyl; + /* 0x4A8 */ dCcD_Cyl mTgCyl; + /* 0x5D8 */ daObjBarrier_ef_c mEffect; + /* 0x724 */ u8 mBarrierActive; + /* 0x728 */ int mMoya; + /* 0x72C */ s16 mEventID; + /* 0x730 */ int mBarrierProc; +}; + +#endif /* D_A_OBJ_BARRIER_H */ diff --git a/src/d/actor/d_a_obj_barrier.cpp b/src/d/actor/d_a_obj_barrier.cpp index 668f8869f..5dd5e1a77 100644 --- a/src/d/actor/d_a_obj_barrier.cpp +++ b/src/d/actor/d_a_obj_barrier.cpp @@ -3,10 +3,10 @@ // Translation Unit: d_a_obj_barrier.cpp // +#include "d/actor/d_a_obj_barrier.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "d/actor/d_a_player_main.h" -#include "d/d_a_obj.h" #include "d/d_com_inf_game.h" #include "d/d_item_data.h" #include "d/d_procname.h" @@ -14,97 +14,6 @@ #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_mtx.h" -class daObjBarrier_anm_c { -public: - daObjBarrier_anm_c() { mBrkFrame = 0.0f; } - - bool init(); - - J3DModel* getMdlP() { return mpModel; } - mDoExt_btkAnm* getBtkAnmP() { return &mBtk; } - mDoExt_brkAnm* getBrkAnmP() { return &mBrk; } - - f32 getBrkFrame() { return mBrkFrame; } - void setBrkFrame(f32 i_frame) { mBrkFrame = i_frame; } - - /* 0x00 */ J3DModel* mpModel; - /* 0x04 */ mDoExt_btkAnm mBtk; - /* 0x18 */ mDoExt_brkAnm mBrk; - /* 0x30 */ f32 mBrkFrame; -}; - -class daObjBarrier_ef_c { -public: - void setDummyTexture(int); - bool checkHitActor(fopAc_ac_c*); - void birth(fopAc_ac_c*, f32, cXyz, cXyz, int); - bool init(); - void create(); - void execute(); - void draw(); - - f32 getBtkFrame(int i_idx) { return mBtk[i_idx].getFrame(); } - - /* 0x000 */ u32 mActiveEffFlags; - /* 0x004 */ J3DModel* mpModel[4]; - /* 0x014 */ mDoExt_btkAnm mBtk[4]; - /* 0x064 */ mDoExt_bckAnm mBck[4]; - /* 0x0A4 */ mDoExt_brkAnm mBrk[4]; - /* 0x104 */ cXyz mPos[4]; - /* 0x134 */ s16 mAngle[4]; - /* 0x13C */ fopAc_ac_c* mHitActor[4]; -}; - -class daObjBarrier_c : public fopAc_ac_c { -public: - enum PROC_e { - PROC_BREAK_START_WAIT, - PROC_BREAK_ORDER, - PROC_BREAK_END_WAIT, - }; - enum Param_e { - PRM_DAMAGE_W = 0x01, - PRM_DAMAGE_S = 0x10, - PRM_MOYA_W = 0x01, - PRM_MOYA_S = 0x08, - }; - - daObjBarrier_c(); - - void init_mtx(); - static int solidHeapCB(fopAc_ac_c*); - bool create_heap(); - bool checkCollision_Tg(); - void checkCollision_At(); - void registCollisionTable(); - void brkAnmPlay(); - void break_start_wait_proc(); - void break_order_proc(); - void break_end_wait_proc(); - bool break_check(); - int _create(); - bool _delete(); - bool _execute(); - bool _draw(); - - bool param_get_damage() const { return daObj::PrmAbstract(this, PRM_DAMAGE_W, PRM_DAMAGE_S); } - int param_get_moya() const { return daObj::PrmAbstract(this, PRM_MOYA_W, PRM_MOYA_S); } - - /* 0x290 */ daObjBarrier_anm_c mAnm; - /* 0x2C4 */ request_of_phase_process_class mPhase; - /* 0x2CC */ dBgW* mpBgW; - /* 0x2D0 */ Mtx mBgMtx; - /* 0x300 */ dCcD_Stts mAtStts; - /* 0x33C */ dCcD_Stts mTgStts; - /* 0x378 */ dCcD_Cyl mAtCyl; - /* 0x4A8 */ dCcD_Cyl mTgCyl; - /* 0x5D8 */ daObjBarrier_ef_c mEffect; - /* 0x724 */ u8 mBarrierActive; - /* 0x728 */ int mMoya; - /* 0x72C */ s16 mEventID; - /* 0x730 */ int mBarrierProc; -}; - namespace { static const char l_arcname[] = "Ycage"; @@ -625,11 +534,6 @@ int daObjBarrier_c::_create() { return phase; } -/* 0000182C-00001A38 .text __ct__14daObjBarrier_cFv */ -daObjBarrier_c::daObjBarrier_c() { - mEffect.mActiveEffFlags = 0; -} - /* 00001A38-00001AD8 .text _delete__14daObjBarrier_cFv */ bool daObjBarrier_c::_delete() { if (mBarrierActive == true) { @@ -685,27 +589,27 @@ bool daObjBarrier_c::_draw() { } /* 00001C1C-00001C3C .text daObjBarrier_Create__FP10fopAc_ac_c */ -int daObjBarrier_Create(fopAc_ac_c* i_this) { +static int daObjBarrier_Create(fopAc_ac_c* i_this) { return static_cast(i_this)->_create(); } /* 00001C3C-00001C60 .text daObjBarrier_Delete__FP14daObjBarrier_c */ -int daObjBarrier_Delete(daObjBarrier_c* i_this) { +static int daObjBarrier_Delete(daObjBarrier_c* i_this) { return static_cast(i_this)->_delete(); } /* 00001C60-00001C84 .text daObjBarrier_Execute__FP14daObjBarrier_c */ -int daObjBarrier_Execute(daObjBarrier_c* i_this) { +static int daObjBarrier_Execute(daObjBarrier_c* i_this) { return static_cast(i_this)->_execute(); } /* 00001C84-00001CA8 .text daObjBarrier_Draw__FP14daObjBarrier_c */ -int daObjBarrier_Draw(daObjBarrier_c* i_this) { +static int daObjBarrier_Draw(daObjBarrier_c* i_this) { return static_cast(i_this)->_draw(); } /* 00001CA8-00001CB0 .text daObjBarrier_IsDelete__FP14daObjBarrier_c */ -int daObjBarrier_IsDelete(daObjBarrier_c* i_this) { +static int daObjBarrier_IsDelete(daObjBarrier_c* i_this) { return 1; } From 119b56cb17c50ad38a446cdb041b058136050839 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 19:26:58 -0500 Subject: [PATCH 3/6] Use static_cast instead of void* hack --- src/d/actor/d_a_mbdoor.cpp | 16 ++++++++-------- src/d/actor/d_a_obj_AjavW.cpp | 6 +++--- src/d/actor/d_a_obj_Vteng.cpp | 4 ++-- src/d/actor/d_a_obj_Ygush00.cpp | 12 ++++++------ src/d/actor/d_a_obj_barrier.cpp | 25 +++++++++++-------------- src/d/actor/d_a_obj_cafelmp.cpp | 4 ++-- src/d/actor/d_a_obj_ganonbed.cpp | 4 ++-- src/d/actor/d_a_obj_monument.cpp | 4 ++-- src/d/d_npc.cpp | 16 ++++++++-------- 9 files changed, 44 insertions(+), 47 deletions(-) diff --git a/src/d/actor/d_a_mbdoor.cpp b/src/d/actor/d_a_mbdoor.cpp index 85258d152..1f251eebc 100644 --- a/src/d/actor/d_a_mbdoor.cpp +++ b/src/d/actor/d_a_mbdoor.cpp @@ -176,24 +176,24 @@ BOOL CheckCreateHeap(fopAc_ac_c* i_this) { /* 000002FC-0000060C .text CreateHeap__10daMbdoor_cFv */ BOOL daMbdoor_c::CreateHeap() { - void* modelData = dComIfG_getObjectRes(getArcName(), getFuBdl()); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(getArcName(), getFuBdl())); JUT_ASSERT(198, modelData != 0) - mpFuModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + mpFuModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); if (!mpFuModel) { return FALSE; } - modelData = dComIfG_getObjectRes(getArcName(), getLBdl()); + modelData = static_cast(dComIfG_getObjectRes(getArcName(), getLBdl())); JUT_ASSERT(209, modelData != 0) - mpLModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + mpLModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); if (!mpLModel) { return FALSE; } - modelData = dComIfG_getObjectRes(getArcName(), getRBdl()); + modelData = static_cast(dComIfG_getObjectRes(getArcName(), getRBdl())); JUT_ASSERT(220, modelData != 0) - mpRModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + mpRModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); if (!mpRModel) { return FALSE; } - modelData = dComIfG_getObjectRes(getArcName(), getToBdl()); + modelData = static_cast(dComIfG_getObjectRes(getArcName(), getToBdl())); JUT_ASSERT(231, modelData != 0) - mpToModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000022); + mpToModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); if (!mpToModel) { return FALSE; } mpBgW = new dBgW(); diff --git a/src/d/actor/d_a_obj_AjavW.cpp b/src/d/actor/d_a_obj_AjavW.cpp index 11ba22e83..bba5cb4b3 100644 --- a/src/d/actor/d_a_obj_AjavW.cpp +++ b/src/d/actor/d_a_obj_AjavW.cpp @@ -41,15 +41,15 @@ BOOL daObjAjavW_c::solidHeapCB(fopAc_ac_c* i_this) { bool daObjAjavW_c::create_heap() { bool ret = true; - void* pModelData = dComIfG_getObjectRes(l_arcname, 0x05); + J3DModelData* pModelData = static_cast(dComIfG_getObjectRes(l_arcname, 0x05)); J3DAnmTextureSRTKey * pBtk = (J3DAnmTextureSRTKey *)dComIfG_getObjectRes(l_arcname, 0x08); if (!pModelData || !pBtk) { JUT_ASSERT(0xa7, 0); ret = false; } else { - mpModel = mDoExt_J3DModel__create((J3DModelData*)pModelData, 0x80000, 0x11000222); - s32 btkRet = mBtkAnm.init((J3DModelData*)pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000222); + s32 btkRet = mBtkAnm.init(pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); mpBgW = dBgW_NewSet((cBgD_t*)dComIfG_getObjectRes(l_arcname, 0x0B), cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx()); if (!mpModel || !btkRet || !mpBgW) diff --git a/src/d/actor/d_a_obj_Vteng.cpp b/src/d/actor/d_a_obj_Vteng.cpp index df3906c43..0756a12eb 100644 --- a/src/d/actor/d_a_obj_Vteng.cpp +++ b/src/d/actor/d_a_obj_Vteng.cpp @@ -54,14 +54,14 @@ BOOL daObjVteng_c::solidHeapCB(fopAc_ac_c* i_this) { bool daObjVteng_c::create_heap() { bool ret = true; - void* pModelData = dComIfG_getObjectRes(l_arcname, 0x08); + J3DModelData* pModelData = static_cast(dComIfG_getObjectRes(l_arcname, 0x08)); J3DAnmTransform * pAnm = (J3DAnmTransform *)dComIfG_getObjectRes(l_arcname, 0x05); if (!pModelData || !pAnm) { JUT_ASSERT(0xb7, 0); ret = false; } else { - mpMorf = new mDoExt_McaMorf((J3DModelData*)pModelData, NULL, NULL, pAnm, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0x3B, -1, 0, NULL, 0x00, 0x11020203); + mpMorf = new mDoExt_McaMorf(pModelData, NULL, NULL, pAnm, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0x3B, -1, 0, NULL, 0x00, 0x11020203); if (!mpMorf) { ret = false; } else { diff --git a/src/d/actor/d_a_obj_Ygush00.cpp b/src/d/actor/d_a_obj_Ygush00.cpp index 3abc496b5..707de1d37 100644 --- a/src/d/actor/d_a_obj_Ygush00.cpp +++ b/src/d/actor/d_a_obj_Ygush00.cpp @@ -64,17 +64,17 @@ bool daObjYgush00_c::create_heap() { bool ret = true; - void* pModelData = dComIfG_getObjectRes(l_arcname, mdl_table[mType]); - J3DAnmTextureSRTKey * pBtk = (J3DAnmTextureSRTKey *)dComIfG_getObjectRes(l_arcname, btk_table[mType]); - J3DAnmTransform * pBck = (J3DAnmTransform *)dComIfG_getObjectRes(l_arcname, bck_table[mType]); + J3DModelData* pModelData = static_cast(dComIfG_getObjectRes(l_arcname, mdl_table[mType])); + J3DAnmTextureSRTKey * pBtk = static_cast(dComIfG_getObjectRes(l_arcname, btk_table[mType])); + J3DAnmTransform * pBck = static_cast(dComIfG_getObjectRes(l_arcname, bck_table[mType])); if (!pModelData || !pBtk || !pBck) { JUT_ASSERT(207, 0); ret = false; } else { - mpModel = mDoExt_J3DModel__create((J3DModelData*)pModelData, 0x80000, 0x11000222); - s32 btkRet = mBtkAnm.init((J3DModelData*)pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); - s32 bckRet = mBckAnm.init((J3DModelData*)pModelData, pBck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000222); + s32 btkRet = mBtkAnm.init(pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + s32 bckRet = mBckAnm.init(pModelData, pBck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); if (!mpModel || !btkRet || !bckRet) ret = false; diff --git a/src/d/actor/d_a_obj_barrier.cpp b/src/d/actor/d_a_obj_barrier.cpp index 5dd5e1a77..e6ec3b50a 100644 --- a/src/d/actor/d_a_obj_barrier.cpp +++ b/src/d/actor/d_a_obj_barrier.cpp @@ -402,28 +402,25 @@ void daObjBarrier_ef_c::birth(fopAc_ac_c* i_hitActor, f32 i_radius, cXyz i_cente /* 000011B8-000013E0 .text init__17daObjBarrier_ef_cFv */ bool daObjBarrier_ef_c::init() { bool rt = true; - void* modelData = dComIfG_getObjectRes(l_arcname, 11); - void* pbtk = dComIfG_getObjectRes(l_arcname, 19); - void* pbck = dComIfG_getObjectRes(l_arcname, 7); - void* pbrk = dComIfG_getObjectRes(l_arcname, 15); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcname, 11)); + J3DAnmTextureSRTKey* pbtk = static_cast(dComIfG_getObjectRes(l_arcname, 19)); + J3DAnmTransform* pbck = static_cast(dComIfG_getObjectRes(l_arcname, 7)); + J3DAnmTevRegKey* pbrk = static_cast(dComIfG_getObjectRes(l_arcname, 15)); if (modelData == NULL || pbtk == NULL || pbck == NULL || pbrk == NULL) { JUT_PANIC(1016); rt = false; } else { for (int i = 0; i < 4; i++) { - mpModel[i] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x5020200); + mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x5020200); setDummyTexture(i); - BOOL btk_init = mBtk[i].init( - (J3DModelData*)modelData, (J3DAnmTextureSRTKey*)pbtk, - TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false, 0); - BOOL bck_init = mBck[i].init( - (J3DModelData*)modelData, (J3DAnmTransform*)pbck, - TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false); - BOOL brk_init = mBrk[i].init( - (J3DModelData*)modelData, (J3DAnmTevRegKey*)pbrk, - TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false, 0); + BOOL btk_init = mBtk[i].init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, + -1, false, 0); + BOOL bck_init = + mBck[i].init(modelData, pbck, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, -1, false); + BOOL brk_init = mBrk[i].init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_ONCE_e, 0.0f, 0, + -1, false, 0); if (mpModel[i] == NULL || !btk_init || !bck_init || !brk_init) { rt = false; diff --git a/src/d/actor/d_a_obj_cafelmp.cpp b/src/d/actor/d_a_obj_cafelmp.cpp index d1d0a2849..f6442a708 100644 --- a/src/d/actor/d_a_obj_cafelmp.cpp +++ b/src/d/actor/d_a_obj_cafelmp.cpp @@ -34,9 +34,9 @@ BOOL CheckCreateHeap(fopAc_ac_c* i_this) { /* 00000098-0000015C .text CreateHeap__14daObjCafelmp_cFv */ BOOL daObjCafelmp_c::CreateHeap() { - void* modelData = dComIfG_getObjectRes("Cafelmp", 0x03); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes("Cafelmp", 0x03)); JUT_ASSERT(0x51, modelData != 0); - mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x00, 0x11020203); + mpModel = mDoExt_J3DModel__create(modelData, 0x00, 0x11020203); if (!mpModel) return FALSE; else diff --git a/src/d/actor/d_a_obj_ganonbed.cpp b/src/d/actor/d_a_obj_ganonbed.cpp index e14718d61..13e3aabd1 100644 --- a/src/d/actor/d_a_obj_ganonbed.cpp +++ b/src/d/actor/d_a_obj_ganonbed.cpp @@ -49,13 +49,13 @@ BOOL daObjGbed_c::solidHeapCB(fopAc_ac_c* i_this) { bool daObjGbed_c::create_heap() { bool ret = true; - void* pModelData = dComIfG_getObjectRes(l_arcname, 0x04); + J3DModelData* pModelData = static_cast(dComIfG_getObjectRes(l_arcname, 0x04)); if (!pModelData) { JUT_ASSERT(0xb1, 0); ret = false; } else { - mpModel = mDoExt_J3DModel__create((J3DModelData*)pModelData, 0x80000, 0x11000022); + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000022); mpBgW = dBgW_NewSet((cBgD_t*)dComIfG_getObjectRes(l_arcname, 0x07), cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx()); if (!mpModel || !mpBgW) diff --git a/src/d/actor/d_a_obj_monument.cpp b/src/d/actor/d_a_obj_monument.cpp index 9775f8387..bd25e8099 100644 --- a/src/d/actor/d_a_obj_monument.cpp +++ b/src/d/actor/d_a_obj_monument.cpp @@ -76,10 +76,10 @@ BOOL daObjMonument::Act_c::solidHeapCB(fopAc_ac_c* i_this) { bool daObjMonument::Act_c::create_heap() { bool ret = true; - void* modelData = dComIfG_getObjectRes(M_arcname, attr(mType).mModelId); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(M_arcname, attr(mType).mModelId)); JUT_ASSERT(0x81, modelData != 0); - mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x00, 0x11020203); + mpModel = mDoExt_J3DModel__create(modelData, 0x00, 0x11020203); if (!mpModel) return false; diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index f2fabcb15..9a8eebfb3 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -537,8 +537,8 @@ bool dNpc_setAnmIDRes(mDoExt_McaMorf* pMorf, int loopMode, float morf, float spe pSoundAnimRes = dComIfG_getObjectIDRes(arcName, soundResId); } - void* pAnimRes = dComIfG_getObjectIDRes(arcName, animResId); - pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + J3DAnmTransform* pAnimRes = static_cast(dComIfG_getObjectIDRes(arcName, animResId)); + pMorf->setAnm(pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); ret = true; } @@ -575,8 +575,8 @@ bool dNpc_setAnm(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int a pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFileIdx); } - void* pAnimRes = dComIfG_getObjectRes(arcName, animFileIdx); - pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + J3DAnmTransform* pAnimRes = static_cast(dComIfG_getObjectRes(arcName, animFileIdx)); + pMorf->setAnm(pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); ret = true; } @@ -682,14 +682,14 @@ u16 fopNpc_npc_c::talk(int param_1) { bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int animFileIdx, int soundFileIdx, const char* arcName) { if(0 <= soundFileIdx) { void* pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFileIdx); - void* pAnimRes = dComIfG_getObjectRes(arcName, animFileIdx); + J3DAnmTransform* pAnimRes = static_cast(dComIfG_getObjectRes(arcName, animFileIdx)); - pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + pMorf->setAnm(pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); } else { - void* pAnimRes = dComIfG_getObjectRes(arcName, animFileIdx); + J3DAnmTransform* pAnimRes = static_cast(dComIfG_getObjectRes(arcName, animFileIdx)); - pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, 0); + pMorf->setAnm(pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, 0); } From bf3f3011f1a4a46f34e895eaf11b5deb17d17373 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 19:28:01 -0500 Subject: [PATCH 4/6] Mark Vteng and swattack as matching --- configure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.py b/configure.py index 0057bd920..94caf03be 100644 --- a/configure.py +++ b/configure.py @@ -1500,7 +1500,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_nz"), ActorRel(NonMatching, "d_a_obj_Itnak"), ActorRel(NonMatching, "d_a_obj_Vds"), - ActorRel(NonMatching, "d_a_obj_Vteng", extra_cflags=['-pragma "nosyminline on"']), + ActorRel(Matching, "d_a_obj_Vteng", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_obj_YLzou"), ActorRel(NonMatching, "d_a_obj_Yboil"), ActorRel(NonMatching, "d_a_obj_adnno"), @@ -1596,7 +1596,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_shutter2"), ActorRel(NonMatching, "d_a_st"), ActorRel(NonMatching, "d_a_steam_tag"), - ActorRel(NonMatching, "d_a_swattack", extra_cflags=['-pragma "nosyminline on"']), + ActorRel(Matching, "d_a_swattack", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_switem", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_swpropeller"), ActorRel(Matching, "d_a_swtact"), From 8b0d90d95c71bdda0960d94fe6c881ec873eeb09 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 12 Nov 2023 17:15:07 -0800 Subject: [PATCH 5/6] c_bg_s work --- include/SSystem/SComponent/c_bg_s.h | 2 +- include/SSystem/SComponent/c_bg_s_gnd_chk.h | 6 +-- include/SSystem/SComponent/c_bg_s_lin_chk.h | 10 ++-- include/SSystem/SComponent/c_bg_s_poly_info.h | 7 +++ include/SSystem/SComponent/c_bg_w.h | 4 +- src/SSystem/SComponent/c_bg_s.cpp | 50 +++++++++++++++++-- src/SSystem/SComponent/c_bg_s_gnd_chk.cpp | 2 +- src/SSystem/SComponent/c_bg_s_lin_chk.cpp | 2 +- src/SSystem/SComponent/c_bg_w.cpp | 4 +- 9 files changed, 67 insertions(+), 20 deletions(-) diff --git a/include/SSystem/SComponent/c_bg_s.h b/include/SSystem/SComponent/c_bg_s.h index 9a22cc946..49c69062f 100644 --- a/include/SSystem/SComponent/c_bg_s.h +++ b/include/SSystem/SComponent/c_bg_s.h @@ -55,7 +55,7 @@ public: s32 GetTriGrp(int, int) const; s32 GetGrpToRoomId(int, int) const; cM3dGPla* GetTriPla(int, int) const; - bool GetTriPnt(cBgS_PolyInfo&, cXyz*, cXyz*, cXyz*) const; + void GetTriPnt(cBgS_PolyInfo&, cXyz*, cXyz*, cXyz*) const; void ShdwDraw(cBgS_ShdwDraw*); s32 GetGrpInf(cBgS_PolyInfo&, int) const; diff --git a/include/SSystem/SComponent/c_bg_s_gnd_chk.h b/include/SSystem/SComponent/c_bg_s_gnd_chk.h index 7a6dca240..23873b4d4 100644 --- a/include/SSystem/SComponent/c_bg_s_gnd_chk.h +++ b/include/SSystem/SComponent/c_bg_s_gnd_chk.h @@ -20,11 +20,11 @@ public: void SetNowY(f32 y) { mNowY = y; } cXyz* GetPointP() { return &m_pos; } u32 GetWallPrecheck() const { return mWallPrecheck; } - void OffWall() { mFlags &= ~2; } + void OffWall() { mFlag &= ~2; } -private: +public: /* 0x24 */ cXyz m_pos; - /* 0x30 */ u32 mFlags; + /* 0x30 */ u32 mFlag; /* 0x34 */ f32 mNowY; /* 0x38 */ u32 mWallPrecheck; /* 0x3C */ u32 mGndPrecheck; diff --git a/include/SSystem/SComponent/c_bg_s_lin_chk.h b/include/SSystem/SComponent/c_bg_s_lin_chk.h index 8efa83a5c..f79757a90 100644 --- a/include/SSystem/SComponent/c_bg_s_lin_chk.h +++ b/include/SSystem/SComponent/c_bg_s_lin_chk.h @@ -10,7 +10,7 @@ class cBgS_LinChk : public cBgS_Chk, public cBgS_PolyInfo { public: /* 0x024 */ cM3dGLin mLin; /* 0x040 */ cXyz field_0x40; - /* 0x04C */ u32 field_0x4c; + /* 0x04C */ u32 mFlag; /* 0x050 */ bool mPreWallChk; /* 0x051 */ bool mPreGroundChk; /* 0x052 */ bool mPreRoofChk; @@ -26,10 +26,10 @@ public: virtual ~cBgS_LinChk() {} - void ClrHit() { field_0x4c &= ~0x10; } - void SetHit() { field_0x4c |= 0x10; } - u32 ChkHit() const { return field_0x4c & 0x10; } - void ClrSttsRoofOff() { field_0x4c &= ~0x20000000; } + void ClrHit() { mFlag &= ~0x10; } + void SetHit() { mFlag |= 0x10; } + u32 ChkHit() const { return mFlag & 0x10; } + void ClrSttsRoofOff() { mFlag &= ~0x20000000; } void SetCross(const cXyz& pos) { mLin.SetEnd(pos); } cXyz& i_GetCross() { return mLin.GetEnd(); } cM3dGLin* GetLinP() { return &mLin; } diff --git a/include/SSystem/SComponent/c_bg_s_poly_info.h b/include/SSystem/SComponent/c_bg_s_poly_info.h index 45c67dd07..95c94b57c 100644 --- a/include/SSystem/SComponent/c_bg_s_poly_info.h +++ b/include/SSystem/SComponent/c_bg_s_poly_info.h @@ -2,6 +2,7 @@ #define C_BG_S_POLY_INFO_H #include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" #include "global.h" class cBgW; @@ -25,6 +26,12 @@ public: void SetPolyInfo(const cBgS_PolyInfo& other) { *this = other; } + void SetActorInfo(int bg_index, void* bgw, unsigned int actor_id) { + JUT_ASSERT(0x59, 0 <= bg_index); + mBgIndex = bg_index; + mpBgW = (cBgW*)bgw; + mActorId = actor_id; + } bool ChkSafe(const void* bgw, unsigned int pid) { if (mpBgW == bgw && mActorId == pid) return true; diff --git a/include/SSystem/SComponent/c_bg_w.h b/include/SSystem/SComponent/c_bg_w.h index 883c303c7..0ca04eacc 100644 --- a/include/SSystem/SComponent/c_bg_w.h +++ b/include/SSystem/SComponent/c_bg_w.h @@ -139,12 +139,12 @@ public: bool Set(cBgD_t*, u32, f32(*)[3][4]); void RwgLineCheck(u16, cBgS_LinChk*); void LineCheckRp(cBgS_LinChk*, int); - void LineCheckGrpRp(cBgS_LinChk*, int, int); + bool LineCheckGrpRp(cBgS_LinChk*, int, int); bool RwgGroundCheckCommon(f32, u16, cBgS_GndChk*); bool RwgGroundCheckGnd(u16, cBgS_GndChk*); bool RwgGroundCheckWall(u16, cBgS_GndChk*); void GroundCrossRp(cBgS_GndChk*, int); - void GroundCrossGrpRp(cBgS_GndChk*, int, int); + bool GroundCrossGrpRp(cBgS_GndChk*, int, int); void CopyOldMtx(); void Move(); void RwgShdwDraw(int, cBgS_ShdwDraw*); diff --git a/src/SSystem/SComponent/c_bg_s.cpp b/src/SSystem/SComponent/c_bg_s.cpp index 9b8381aae..40a2a6247 100644 --- a/src/SSystem/SComponent/c_bg_s.cpp +++ b/src/SSystem/SComponent/c_bg_s.cpp @@ -4,6 +4,8 @@ // #include "SSystem/SComponent/c_bg_s.h" +#include "SSystem/SComponent/c_bg_s_gnd_chk.h" +#include "SSystem/SComponent/c_bg_s_lin_chk.h" #include "SSystem/SComponent/c_bg_w.h" #include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" @@ -69,6 +71,10 @@ bool cBgS::Regist(cBgW* bgw, unsigned int pid, void* actor) { return true; } +static void dummy() { + OSReport("c_bg_s_poly_info.h"); +} + /* 80246600-8024669C .text Release__4cBgSFP4cBgW */ int cBgS::Release(cBgW* bgw) { if (bgw == NULL) @@ -103,13 +109,42 @@ void cBgS::Dt() { } /* 8024676C-802468E4 .text LineCross__4cBgSFP11cBgS_LinChk */ -bool cBgS::LineCross(cBgS_LinChk*) { - /* Nonmatching */ +bool cBgS::LineCross(cBgS_LinChk* chk) { + bool ret = false; + chk->ClearPi(); + chk->ClrHit(); + for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) { + cBgS_ChkElm* elm = &m_chk_element[bg_index]; + if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) { + chk->mPreWallChk = !(chk->mFlag & 0x40000000); + chk->mPreGroundChk = !(chk->mFlag & 0x80000000); + chk->mPreRoofChk = !(chk->mFlag & 0x20000000); + if (elm->m_bgw_base_ptr->LineCheckGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) { + chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id); + ret = true; + } + } + } + if (ret) + chk->SetHit(); + return ret; } /* 802468E4-80246A14 .text GroundCross__4cBgSFP11cBgS_GndChk */ -f32 cBgS::GroundCross(cBgS_GndChk*) { - /* Nonmatching */ +f32 cBgS::GroundCross(cBgS_GndChk* chk) { + chk->SetNowY(-1e+09); + chk->ClearPi(); + chk->mWallPrecheck = (chk->mFlag & 0x02); + chk->mGndPrecheck = (chk->mFlag & 0x01); + for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) { + cBgS_ChkElm* elm = &m_chk_element[bg_index]; + if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) { + if (elm->m_bgw_base_ptr->GroundCrossGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) { + chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id); + } + } + } + return chk->GetNowY(); } /* 80246A14-80246C98 .text ConvDzb__4cBgSFPv */ @@ -203,8 +238,13 @@ cM3dGPla* cBgS::GetTriPla(int bg_index, int poly_index) const { return m_chk_element[bg_index].m_bgw_base_ptr->GetTriPla(poly_index); } +static void dummy2() { + // from c_bg_s_poly_info.h + OSReport("0 <= grp_index && grp_index < pm_bgd->m_g_num"); +} + /* 802470B8-80247178 .text GetTriPnt__4cBgSCFR13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz */ -bool cBgS::GetTriPnt(cBgS_PolyInfo& poly, cXyz* p0, cXyz* p1, cXyz* p2) const { +void cBgS::GetTriPnt(cBgS_PolyInfo& poly, cXyz* p0, cXyz* p1, cXyz* p2) const { s32 id = poly.GetBgIndex(); JUT_ASSERT(0x2f6, 0 <= id && id < 256); if (m_chk_element[id].ChkUsed()) diff --git a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp index d4b2831cf..31be62c52 100644 --- a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp +++ b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp @@ -10,5 +10,5 @@ cBgS_GndChk::cBgS_GndChk() { m_pos = cXyz::Zero; SetActorPid(0xFFFFFFFF); - mFlags = 3; + mFlag = 3; } diff --git a/src/SSystem/SComponent/c_bg_s_lin_chk.cpp b/src/SSystem/SComponent/c_bg_s_lin_chk.cpp index 02e8d6825..f75b5e2b3 100644 --- a/src/SSystem/SComponent/c_bg_s_lin_chk.cpp +++ b/src/SSystem/SComponent/c_bg_s_lin_chk.cpp @@ -13,7 +13,7 @@ void cBgS_LinChk::ct() { mLin.mEnd = zero; field_0x40 = zero; SetActorPid(-1); - field_0x4c = 0; + mFlag = 0; mFrontFlag = 1; mBackFlag = 0; } diff --git a/src/SSystem/SComponent/c_bg_w.cpp b/src/SSystem/SComponent/c_bg_w.cpp index 810b3f594..598189c77 100644 --- a/src/SSystem/SComponent/c_bg_w.cpp +++ b/src/SSystem/SComponent/c_bg_w.cpp @@ -161,7 +161,7 @@ void cBgW::LineCheckRp(cBgS_LinChk*, int) { } /* 80248868-8024898C .text LineCheckGrpRp__4cBgWFP11cBgS_LinChkii */ -void cBgW::LineCheckGrpRp(cBgS_LinChk*, int, int) { +bool cBgW::LineCheckGrpRp(cBgS_LinChk*, int, int) { /* Nonmatching */ } @@ -198,7 +198,7 @@ void cBgW::GroundCrossRp(cBgS_GndChk*, int) { } /* 802491F4-80249368 .text GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii */ -void cBgW::GroundCrossGrpRp(cBgS_GndChk*, int, int) { +bool cBgW::GroundCrossGrpRp(cBgS_GndChk*, int, int) { /* Nonmatching */ } From 505b03d9a393d6c43b473d0eb761736694e18554 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 12 Nov 2023 20:34:44 -0500 Subject: [PATCH 6/6] Fix regalloc in obj_mknjd with a horrible hack --- configure.py | 2 +- src/d/actor/d_a_obj_mknjd.cpp | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/configure.py b/configure.py index 94caf03be..ea7c22a72 100644 --- a/configure.py +++ b/configure.py @@ -1550,7 +1550,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_light"), ActorRel(NonMatching, "d_a_obj_mkie"), ActorRel(NonMatching, "d_a_obj_mkiek"), - ActorRel(NonMatching, "d_a_obj_mknjd"), + ActorRel(Matching, "d_a_obj_mknjd", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_obj_mmrr"), ActorRel(NonMatching, "d_a_obj_msdan"), ActorRel(NonMatching, "d_a_obj_msdan2"), diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index ca420fa27..b7c80b136 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -263,15 +263,15 @@ s16 daObjMknjD::Act_c::XyEventCB(int) { /* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::CreateHeap() { - /* Nonmatching */ - J3DModelData* model_data_d; + const void* temp_r26; // Fakematch to get it to use the same register for model_data_d and jntName if (m043E == true) { - model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_WIND_MDL); + temp_r26 = dComIfG_getObjectRes(M_arcname, ID_WIND_MDL); } else { - model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_EARTH_MDL); + temp_r26 = dComIfG_getObjectRes(M_arcname, ID_EARTH_MDL); } + J3DModelData* model_data_d = (J3DModelData*)temp_r26; J3DModelData* model_data_h = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_BREAK_MDL); JUT_ASSERT(0x123, model_data_d != 0) @@ -284,12 +284,13 @@ int daObjMknjD::Act_c::CreateHeap() { JUTNameTab* nameTable = mMainMdl->getModelData()->getJointName(); for (u16 i = 0; i < mMainMdl->getModelData()->getJointNum(); i++) { - const char* jntName = nameTable->getName(i); + // const char* jntName = nameTable->getName(i); + temp_r26 = nameTable->getName(i); - if (strcmp("MknjL", jntName) == 0) { + if (strcmp("MknjL", (const char*)temp_r26) == 0) { mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBackL); } - else if (strcmp("MknjR", jntName) == 0) { + else if (strcmp("MknjR", (const char*)temp_r26) == 0) { mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBackR); } } @@ -300,10 +301,11 @@ int daObjMknjD::Act_c::CreateHeap() { nameTable = mBreakMdl->getModelData()->getJointName(); for (u16 i = 0; i < mBreakMdl->getModelData()->getJointNum(); i++) { - const char* jntName = nameTable->getName(i); + // const char* jntName = nameTable->getName(i); + temp_r26 = nameTable->getName(i); for (u16 j = 0; j < 20; j++) { - if (strcmp(daObjMknjD_jointName[j], jntName) == 0) { + if (strcmp(daObjMknjD_jointName[j], (const char*)temp_r26) == 0) { mBreakMdl->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Hahen); joint_number_table[curTblIdx++] = j; @@ -944,7 +946,9 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { m0500 = 0; m043F = 9; +#if VERSION != VERSION_JPN fopAcM_seStart(this, JA_SE_PRE_TAKT, 0); +#endif } else { m0500 = 1;