From 0c21a2dbad045d21d3656b09bd4359712af7fbc4 Mon Sep 17 00:00:00 2001 From: poketannenbaum <155016041+poketannenbaum@users.noreply.github.com> Date: Sat, 27 Apr 2024 21:19:09 -0400 Subject: [PATCH] d_a_obj_xfuta match (#617) * Update d_a_obj_xfuta.cpp * Update d_a_obj_xfuta.h * Update d_a_obj.cpp * Update d_a_obj.h * Update d_a_obj.cpp * Update d_a_obj_xfuta.cpp * Update d_a_obj.cpp * Update d_a_obj.h * Update d_a_obj_xfuta.h * Update d_a_obj_xfuta.cpp * Update d_a_obj_xfuta.cpp * Update configure.py, set d_a_obj_xfuta to matching * Update d_a_obj_xfuta.cpp * Update d_a_obj_xfuta.h --- configure.py | 2 +- include/d/actor/d_a_obj_xfuta.h | 42 ++++++----- src/d/actor/d_a_obj_xfuta.cpp | 119 +++++++++++++++++++++++--------- 3 files changed, 112 insertions(+), 51 deletions(-) diff --git a/configure.py b/configure.py index 2fe291444..b17fd4c98 100644 --- a/configure.py +++ b/configure.py @@ -1587,7 +1587,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_volcano"), ActorRel(NonMatching, "d_a_obj_vtil"), ActorRel(NonMatching, "d_a_obj_vyasi"), - ActorRel(NonMatching, "d_a_obj_xfuta"), + ActorRel(Matching, "d_a_obj_xfuta"), ActorRel(Matching, "d_a_obj_zouK", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_oship"), ActorRel(NonMatching, "d_a_ph"), diff --git a/include/d/actor/d_a_obj_xfuta.h b/include/d/actor/d_a_obj_xfuta.h index 7a2bffb9e..bc4296f15 100644 --- a/include/d/actor/d_a_obj_xfuta.h +++ b/include/d/actor/d_a_obj_xfuta.h @@ -1,25 +1,33 @@ #ifndef D_A_OBJ_XFUTA_H #define D_A_OBJ_XFUTA_H -#include "f_op/f_op_actor.h" #include "SSystem/SComponent/c_phase.h" +#include "d/d_bg_w.h" +#include "f_op/f_op_actor.h" namespace daObjXfuta { - class Act_c : public fopAc_ac_c { - public: - void solidHeapCB(fopAc_ac_c*); - void create_heap(); - s32 _create(); - BOOL _delete(); - void set_mtx(); - BOOL _execute(); - BOOL _draw(); - - public: - /* 0x290 */ void* vtbl; - /* 0x294 */ request_of_phase_process_class mPhs; - /* 0x29C */ J3DModel* mpModel; - }; -}; +class Act_c : public fopAc_ac_c { +public: + virtual ~Act_c() {} + static BOOL solidHeapCB(fopAc_ac_c*); + bool create_heap(); + s32 _create(); + bool _delete(); + void set_mtx(); + bool _execute(); + bool _draw(); + s32 Mthd_Delete(); + s32 Mthd_Create(); + s32 Mthd_Execute(); + s32 Mthd_Draw(); + s32 Mthd_IsDelete(); + static const char M_arcname[]; +public: + /* 0x290 */ // void* vtbl; + /* 0x294 */ request_of_phase_process_class mPhs; + /* 0x29C */ J3DModel* mpModel; + /* 0x2A0 */ Mtx mMtx; +}; +}; // namespace daObjXfuta #endif /* D_A_OBJ_XFUTA_H */ diff --git a/src/d/actor/d_a_obj_xfuta.cpp b/src/d/actor/d_a_obj_xfuta.cpp index 1e0312908..5040efad6 100644 --- a/src/d/actor/d_a_obj_xfuta.cpp +++ b/src/d/actor/d_a_obj_xfuta.cpp @@ -4,79 +4,132 @@ // #include "d/actor/d_a_obj_xfuta.h" +#include "d/d_com_inf_game.h" +#include "d/d_item.h" #include "d/d_procname.h" +#include "dolphin/types.h" + +const char daObjXfuta::Act_c::M_arcname[] = "X_futa"; +namespace daObjXfuta { +static int tev_mode[] = {TEV_TYPE_ACTOR, + TEV_TYPE_BG0, + TEV_TYPE_BG1, + TEV_TYPE_BG2, + TEV_TYPE_BG3, + TEV_TYPE_BG0_FULL, + TEV_TYPE_BG1_FULL, + TEV_TYPE_BG2_FULL, + TEV_TYPE_BG3_FULL, + TEV_TYPE_PLAYER, + 0x5B, + 0x5C, + 0x5D, + 0x5E}; +} /* 00000078-0000009C .text solidHeapCB__Q210daObjXfuta5Act_cFP10fopAc_ac_c */ -void daObjXfuta::Act_c::solidHeapCB(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daObjXfuta::Act_c::solidHeapCB(fopAc_ac_c* i_this) { + return ((Act_c*)i_this)->create_heap(); } /* 0000009C-0000015C .text create_heap__Q210daObjXfuta5Act_cFv */ -void daObjXfuta::Act_c::create_heap() { - /* Nonmatching */ +bool daObjXfuta::Act_c::create_heap() { + J3DModelData* mdl_data; + + mdl_data = (J3DModelData*)(dComIfG_getObjectRes(M_arcname, 0x03)); + + JUT_ASSERT(0x105, mdl_data != 0); + + mpModel = mDoExt_J3DModel__create(mdl_data, 0, 0x11000002); + + bool ret = FALSE; + if (mdl_data != NULL && this->mpModel != NULL) { + ret = TRUE; + } + return ret; } /* 0000015C-00000214 .text _create__Q210daObjXfuta5Act_cFv */ s32 daObjXfuta::Act_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, Act_c); + int phase_state = dComIfG_resLoad(&mPhs, M_arcname); + if (phase_state == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this, solidHeapCB, 0x0)) { + set_mtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + } else { + phase_state = cPhs_ERROR_e; + } + } + return phase_state; } /* 00000214-00000244 .text _delete__Q210daObjXfuta5Act_cFv */ -BOOL daObjXfuta::Act_c::_delete() { - /* Nonmatching */ +bool daObjXfuta::Act_c::_delete() { + dComIfG_resDelete(&mPhs, M_arcname); + return true; } /* 00000244-000002F0 .text set_mtx__Q210daObjXfuta5Act_cFv */ void daObjXfuta::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(), mMtx); + mpModel->calc(); } /* 000002F0-00000338 .text _execute__Q210daObjXfuta5Act_cFv */ -BOOL daObjXfuta::Act_c::_execute() { - /* Nonmatching */ +bool daObjXfuta::Act_c::_execute() { + current.pos = cXyz(home.pos.x, home.pos.y, home.pos.z); + set_mtx(); + return TRUE; } /* 00000338-0000040C .text _draw__Q210daObjXfuta5Act_cFv */ -BOOL daObjXfuta::Act_c::_draw() { - /* Nonmatching */ +bool daObjXfuta::Act_c::_draw() { + if (dComIfGp_demo_mode() != 1) { + cXyz pos(0.0f, 0.0f, 0.0f); + g_env_light.settingTevStruct(tev_mode[1], &pos, &tevStr); + dComIfGd_setListBG(); + g_env_light.setLightTevColorType(mpModel, &tevStr); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + } + return TRUE; } namespace daObjXfuta { namespace { -/* 0000040C-0000042C .text Mthd_Create__Q210daObjXfuta27@unnamed@d_a_obj_xfuta_cpp@FPv */ -void Mthd_Create(void*) { - /* Nonmatching */ + +s32 Mthd_Create(void* i_this) { + return static_cast(i_this)->_create(); } -/* 0000042C-00000450 .text Mthd_Delete__Q210daObjXfuta27@unnamed@d_a_obj_xfuta_cpp@FPv */ -void Mthd_Delete(void*) { - /* Nonmatching */ +s32 Mthd_Delete(void* i_this) { + return static_cast(i_this)->_delete(); } -/* 00000450-00000474 .text Mthd_Execute__Q210daObjXfuta27@unnamed@d_a_obj_xfuta_cpp@FPv */ -void Mthd_Execute(void*) { - /* Nonmatching */ +s32 Mthd_Execute(void* i_this) { + return static_cast(i_this)->_execute(); } -/* 00000474-00000498 .text Mthd_Draw__Q210daObjXfuta27@unnamed@d_a_obj_xfuta_cpp@FPv */ -void Mthd_Draw(void*) { - /* Nonmatching */ +s32 Mthd_Draw(void* i_this) { + return static_cast(i_this)->_draw(); } -/* 00000498-000004A0 .text Mthd_IsDelete__Q210daObjXfuta27@unnamed@d_a_obj_xfuta_cpp@FPv */ -void Mthd_IsDelete(void*) { - /* Nonmatching */ +s32 Mthd_IsDelete(void* i_this) { + return TRUE; } static actor_method_class Mthd_Table = { - (process_method_func)Mthd_Create, - (process_method_func)Mthd_Delete, - (process_method_func)Mthd_Execute, - (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Create, (process_method_func)Mthd_Delete, + (process_method_func)Mthd_Execute, (process_method_func)Mthd_IsDelete, (process_method_func)Mthd_Draw, }; -}; // namespace -}; // namespace daObjXfuta +} // namespace +} // namespace daObjXfuta actor_process_profile_definition g_profile_Obj_Xfuta = { /* LayerID */ fpcLy_CURRENT_e,