From 3816b8d8f0d8dc33f8fd77d2f9c02b45558dbb93 Mon Sep 17 00:00:00 2001 From: Azurpourpre <100833633+Azurpourpre@users.noreply.github.com> Date: Sat, 11 Jan 2025 05:48:07 +0100 Subject: [PATCH] d_a_obj_rforce match (#686) * d_a_obj_rforce match * Adding suggestions (Pull Request zeldaret/tww/#686) --- configure.py | 2 +- include/d/actor/d_a_obj_rforce.h | 20 ++++-- src/d/actor/d_a_obj_rforce.cpp | 102 ++++++++++++++++++++++++------- 3 files changed, 95 insertions(+), 29 deletions(-) diff --git a/configure.py b/configure.py index 82db35ad7..bf32cafa3 100644 --- a/configure.py +++ b/configure.py @@ -1687,7 +1687,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_pfall"), ActorRel(NonMatching, "d_a_obj_plant"), ActorRel(NonMatching, "d_a_obj_rflw"), - ActorRel(NonMatching, "d_a_obj_rforce"), + ActorRel(Matching, "d_a_obj_rforce"), ActorRel(NonMatching, "d_a_obj_smplbg"), ActorRel(NonMatching, "d_a_obj_tapestry"), ActorRel(NonMatching, "d_a_obj_tntrap"), diff --git a/include/d/actor/d_a_obj_rforce.h b/include/d/actor/d_a_obj_rforce.h index 2722b55fc..0016341ba 100644 --- a/include/d/actor/d_a_obj_rforce.h +++ b/include/d/actor/d_a_obj_rforce.h @@ -1,21 +1,29 @@ #ifndef D_A_OBJ_RFORCE_H #define D_A_OBJ_RFORCE_H +#include "d/d_bg_s.h" #include "f_op/f_op_actor.h" namespace daObjRforce { class Act_c : public fopAc_ac_c { public: - void solidHeapCB(fopAc_ac_c*); - void create_heap(); + static BOOL solidHeapCB(fopAc_ac_c*); + bool create_heap(); s32 _create(); - BOOL _delete(); + bool _delete(); void set_mtx(); - BOOL _execute(); - BOOL _draw(); + bool _execute(); + bool _draw(); + + virtual ~Act_c() {}; public: - /* Place member variables here */ + static const char M_arcname[8]; + + /* 0x294 */ request_of_phase_process_class mPhs; + /* 0x29C */ J3DModel* mpModel; + /* 0x2A0 */ dBgW* mpBgw; + /* 0x2A4 */ Mtx mtx; }; }; diff --git a/src/d/actor/d_a_obj_rforce.cpp b/src/d/actor/d_a_obj_rforce.cpp index 488ad7363..75e129f10 100644 --- a/src/d/actor/d_a_obj_rforce.cpp +++ b/src/d/actor/d_a_obj_rforce.cpp @@ -4,68 +4,126 @@ // #include "d/actor/d_a_obj_rforce.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" +#include "d/res/res_stptetu.h" + +const char daObjRforce::Act_c::M_arcname[] = "StpTetu"; /* 00000078-0000009C .text solidHeapCB__Q211daObjRforce5Act_cFP10fopAc_ac_c */ -void daObjRforce::Act_c::solidHeapCB(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daObjRforce::Act_c::solidHeapCB(fopAc_ac_c* this_i) { + return static_cast(this_i)->create_heap(); } /* 0000009C-00000220 .text create_heap__Q211daObjRforce5Act_cFv */ -void daObjRforce::Act_c::create_heap() { - /* Nonmatching */ +bool daObjRforce::Act_c::create_heap() { + + J3DModelData* mdl_data = static_cast(dComIfG_getObjectRes(M_arcname, STPTETU_BDL_STPTETU)); + JUT_ASSERT(0x57, mdl_data != NULL); + mpModel = mDoExt_J3DModel__create(mdl_data, 0, 0x11000002); + + set_mtx(); + + cBgD_t* bgw_data = static_cast(dComIfG_getObjectRes(M_arcname, 0x07)); + JUT_ASSERT(0x64, bgw_data != NULL); + if(bgw_data != NULL){ + mpBgw = new dBgW(); + if(mpBgw != NULL){ + if(mpBgw->Set(bgw_data, cBgW::MOVE_BG_e, &mtx) == true) return false; + } + } + + bool ret = false; + if(mdl_data != NULL && mpModel != NULL && bgw_data != NULL && mpBgw != NULL){ + ret = true; + } + return ret; } /* 00000220-000002F8 .text _create__Q211daObjRforce5Act_cFv */ s32 daObjRforce::Act_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, Act_c); + + s32 ret = dComIfG_resLoad(&mPhs, M_arcname); + + if(ret == cPhs_COMPLEATE_e){ + if(fopAcM_entrySolidHeap(this, solidHeapCB, 0)){ + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + dComIfG_Bgsp()->Regist(mpBgw, this); + mpBgw->SetCrrFunc(dBgS_MoveBGProc_Typical); + } + else { + ret = cPhs_ERROR_e; + } + } + + return ret; } /* 000002F8-00000384 .text _delete__Q211daObjRforce5Act_cFv */ -BOOL daObjRforce::Act_c::_delete() { - /* Nonmatching */ +bool daObjRforce::Act_c::_delete() { + if(heap != NULL && mpBgw != NULL && mpBgw->ChkUsed()){ + dComIfG_Bgsp()->Release(mpBgw); + } + dComIfG_resDelete(&mPhs, M_arcname); + return true; } /* 00000384-00000430 .text set_mtx__Q211daObjRforce5Act_cFv */ void daObjRforce::Act_c::set_mtx() { - /* Nonmatching */ + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mtx); + mpModel->calc(); } /* 00000430-00000468 .text _execute__Q211daObjRforce5Act_cFv */ -BOOL daObjRforce::Act_c::_execute() { - /* Nonmatching */ +bool daObjRforce::Act_c::_execute() { + set_mtx(); + mpBgw->Move(); + return true; } /* 00000468-00000508 .text _draw__Q211daObjRforce5Act_cFv */ -BOOL daObjRforce::Act_c::_draw() { - /* Nonmatching */ +bool daObjRforce::Act_c::_draw() { + g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); + dComIfGd_setListBG(); + + g_env_light.setLightTevColorType(mpModel, &tevStr); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + + return true; } namespace daObjRforce { namespace { /* 00000508-00000528 .text Mthd_Create__Q211daObjRforce28@unnamed@d_a_obj_rforce_cpp@FPv */ -void Mthd_Create(void*) { - /* Nonmatching */ +s32 Mthd_Create(void* obj) { + return static_cast(obj)->_create(); } /* 00000528-0000054C .text Mthd_Delete__Q211daObjRforce28@unnamed@d_a_obj_rforce_cpp@FPv */ -void Mthd_Delete(void*) { - /* Nonmatching */ +s32 Mthd_Delete(void* obj) { + return static_cast(obj)->_delete(); } /* 0000054C-00000570 .text Mthd_Execute__Q211daObjRforce28@unnamed@d_a_obj_rforce_cpp@FPv */ -void Mthd_Execute(void*) { - /* Nonmatching */ +int Mthd_Execute(void* obj) { + return static_cast(obj)->_execute(); } /* 00000570-00000594 .text Mthd_Draw__Q211daObjRforce28@unnamed@d_a_obj_rforce_cpp@FPv */ -void Mthd_Draw(void*) { - /* Nonmatching */ +int Mthd_Draw(void* obj) { + return static_cast(obj)->_draw(); } /* 00000594-0000059C .text Mthd_IsDelete__Q211daObjRforce28@unnamed@d_a_obj_rforce_cpp@FPv */ -void Mthd_IsDelete(void*) { - /* Nonmatching */ +BOOL Mthd_IsDelete(void*) { + return TRUE; } static actor_method_class Mthd_Table = {