From b7c6893d8cd55fbcc381a957324ca1d0930bd303 Mon Sep 17 00:00:00 2001 From: Maide <34639600+Kelebek1@users.noreply.github.com> Date: Thu, 7 Aug 2025 20:15:10 +0100 Subject: [PATCH] d_a_obj_tenmado (#837) * d_a_obj_tenmado * PR --- configure.py | 2 +- include/d/actor/d_a_obj_tenmado.h | 24 +++++-- src/d/actor/d_a_obj_tenmado.cpp | 108 +++++++++++++++++++++++++++--- 3 files changed, 119 insertions(+), 15 deletions(-) diff --git a/configure.py b/configure.py index 018a5d10a..0b579999f 100755 --- a/configure.py +++ b/configure.py @@ -1428,7 +1428,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_shmrgrd", extra_cflags=["-sym off"]), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_swpush", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_obj_table"), - ActorRel(NonMatching, "d_a_obj_tenmado"), + ActorRel(Matching, "d_a_obj_tenmado"), ActorRel(NonMatching, "d_a_obj_tide"), ActorRel(Matching, "d_a_obj_timer"), ActorRel(Equivalent, "d_a_obj_toripost", extra_cflags=['-pragma "nosyminline on"']), # weak func order diff --git a/include/d/actor/d_a_obj_tenmado.h b/include/d/actor/d_a_obj_tenmado.h index 208d5ddb1..777e1a8c6 100644 --- a/include/d/actor/d_a_obj_tenmado.h +++ b/include/d/actor/d_a_obj_tenmado.h @@ -2,12 +2,21 @@ #define D_A_OBJ_TENMADO_H #include "d/d_bg_s_movebg_actor.h" +#include "d/d_a_obj.h" namespace daObjTenmado { class Act_c : public dBgS_MoveBgActor { + enum Prm_e { + PRM_SWSAVE_W = 8, + PRM_SWSAVE_S = 0, + + PRM_SWSAVE2_W = 8, + PRM_SWSAVE2_S = 8, + }; + public: - void prm_get_swSave() const {} - void prm_get_swSave2() const {} + s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); } + s32 prm_get_swSave2() const { return daObj::PrmAbstract(this, PRM_SWSAVE2_W, PRM_SWSAVE2_S); } virtual BOOL CreateHeap(); virtual BOOL Create(); @@ -18,10 +27,17 @@ namespace daObjTenmado { void init_mtx(); virtual BOOL Execute(Mtx**); virtual BOOL Draw(); + + static Mtx M_tmp_mtx; + static const char M_arcname[]; public: - /* Place member variables here */ - }; + /* 0x2C8 */ f32 m2C8; + /* 0x2CC */ s32 m2CC; + /* 0x2D0 */ request_of_phase_process_class mPhase; + /* 0x2D8 */ J3DModel* mModel1; + /* 0x2DC */ J3DModel* mModel2; + }; // size = 0x2E0 }; #endif /* D_A_OBJ_TENMADO_H */ diff --git a/src/d/actor/d_a_obj_tenmado.cpp b/src/d/actor/d_a_obj_tenmado.cpp index ec861365c..aae543798 100644 --- a/src/d/actor/d_a_obj_tenmado.cpp +++ b/src/d/actor/d_a_obj_tenmado.cpp @@ -4,52 +4,140 @@ */ #include "d/actor/d_a_obj_tenmado.h" +#include "d/res/res_tenmado.h" #include "d/d_procname.h" #include "d/d_priority.h" +#include "d/d_com_inf_game.h" +#include "f_op/f_op_actor_mng.h" + +Mtx daObjTenmado::Act_c::M_tmp_mtx; +const char daObjTenmado::Act_c::M_arcname[] = "Tenmado"; /* 00000078-000001B4 .text CreateHeap__Q212daObjTenmado5Act_cFv */ BOOL daObjTenmado::Act_c::CreateHeap() { - /* Nonmatching */ + J3DModelData* model_data_l = (J3DModelData*)dComIfG_getObjectRes(M_arcname, TENMADO_BDL_MMADOL); + JUT_ASSERT(85, model_data_l != NULL); + + mModel1 = mDoExt_J3DModel__create(model_data_l, 0, 0x11020203); + if (mModel1 == NULL) { + return FALSE; + } + + J3DModelData* model_data_r = (J3DModelData*)dComIfG_getObjectRes(M_arcname, TENMADO_BDL_MMADOR); + JUT_ASSERT(94, model_data_r != NULL); + + mModel2 = mDoExt_J3DModel__create(model_data_r, 0, 0x11020203); + if (mModel2 == NULL) { + return FALSE; + } + return TRUE; } /* 000001B4-0000029C .text Create__Q212daObjTenmado5Act_cFv */ BOOL daObjTenmado::Act_c::Create() { - /* Nonmatching */ + fopAcM_SetMtx(this, mModel1->getBaseTRMtx()); + init_mtx(); + fopAcM_setCullSizeBox(this, -500.0f, -500.0f, -500.0f, 500.0f, 500.0f, 500.0f); + if (fopAcM_isSwitch(this, prm_get_swSave())) { + fopAcM_onSwitch(this, prm_get_swSave2()); + m2C8 = 200.0f; + m2CC = 3; + } else { + m2C8 = 0.0f; + m2CC = 0; + } + return TRUE; } /* 0000029C-00000394 .text Mthd_Create__Q212daObjTenmado5Act_cFv */ cPhs_State daObjTenmado::Act_c::Mthd_Create() { - /* Nonmatching */ + cPhs_State phase_state; + + fopAcM_SetupActor(this, daObjTenmado::Act_c); + + phase_state = dComIfG_resLoad(&mPhase, M_arcname); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(M_arcname, TENMADO_DZB_MMADO, NULL, 0xF00); + JUT_ASSERT(146, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e)) + } + return phase_state; } /* 00000394-0000039C .text Delete__Q212daObjTenmado5Act_cFv */ BOOL daObjTenmado::Act_c::Delete() { - /* Nonmatching */ + return TRUE; } /* 0000039C-000003E8 .text Mthd_Delete__Q212daObjTenmado5Act_cFv */ BOOL daObjTenmado::Act_c::Mthd_Delete() { - /* Nonmatching */ + BOOL ret = MoveBGDelete(); + dComIfG_resDeleteDemo(&mPhase, M_arcname); + return ret; } /* 000003E8-000004D8 .text set_mtx__Q212daObjTenmado5Act_cFv */ void daObjTenmado::Act_c::set_mtx() { - /* Nonmatching */ + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + cMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx); + mDoMtx_stack_c::transM(-m2C8, 0.0f, 0.0f); + mModel1->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(m2C8, 0.0f, 0.0f); + mModel2->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 000004D8-00000530 .text init_mtx__Q212daObjTenmado5Act_cFv */ void daObjTenmado::Act_c::init_mtx() { - /* Nonmatching */ + mModel1->setBaseScale(scale); + mModel2->setBaseScale(scale); + set_mtx(); } /* 00000530-00000694 .text Execute__Q212daObjTenmado5Act_cFPPA3_A4_f */ -BOOL daObjTenmado::Act_c::Execute(Mtx**) { - /* Nonmatching */ +BOOL daObjTenmado::Act_c::Execute(Mtx** mtx) { + switch (m2CC) { + case 0: + if (fopAcM_isSwitch(this, prm_get_swSave())) { + m2CC = 1; + } + break; + + case 1: + fopAcM_seStartCurrent(this, JA_SE_OBJ_TENMADO_SHTR_OP, 0); + m2CC = 2; + break; + + case 2: + m2C8 += 1.0f; + if (m2C8 >= 100.0f) { + m2C8 = 100.0f; + m2CC = 3; + } else if (m2C8 >= 80.0f) { + fopAcM_onSwitch(this, prm_get_swSave2()); + } + break; + + case 3: + break; + } + + set_mtx(); + *mtx = &M_tmp_mtx; + return TRUE; } /* 00000694-00000750 .text Draw__Q212daObjTenmado5Act_cFv */ BOOL daObjTenmado::Act_c::Draw() { - /* Nonmatching */ + g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mModel1, &tevStr); + g_env_light.setLightTevColorType(mModel2, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mModel1); + mDoExt_modelUpdateDL(mModel2); + dComIfGd_setList(); + return TRUE; } namespace daObjTenmado {