From 25916fb244e9c7bb7b17cd85a8b293b9bc52124f Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 10 Nov 2023 21:34:25 -0800 Subject: [PATCH] d_a_obj_cafelmp --- configure.py | 2 +- src/d/actor/d_a_obj_cafelmp.cpp | 130 +++++++++++++++++++++++++++----- 2 files changed, 113 insertions(+), 19 deletions(-) diff --git a/configure.py b/configure.py index 63ed30503..e54250699 100644 --- a/configure.py +++ b/configure.py @@ -1256,7 +1256,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_barrel"), ActorRel(NonMatching, "d_a_obj_barrel2"), ActorRel(NonMatching, "d_a_obj_bscurtain"), - ActorRel(NonMatching, "d_a_obj_cafelmp"), + ActorRel(Matching, "d_a_obj_cafelmp"), ActorRel(NonMatching, "d_a_obj_coming"), ActorRel(NonMatching, "d_a_obj_demo_barrel"), ActorRel(NonMatching, "d_a_obj_doguu"), diff --git a/src/d/actor/d_a_obj_cafelmp.cpp b/src/d/actor/d_a_obj_cafelmp.cpp index 171e8787c..89a33014a 100644 --- a/src/d/actor/d_a_obj_cafelmp.cpp +++ b/src/d/actor/d_a_obj_cafelmp.cpp @@ -3,51 +3,145 @@ // Translation Unit: d_a_obj_cafelmp.cpp // -#include "d_a_obj_cafelmp.h" -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "d/d_bg_w.h" +#include "d/d_com_inf_game.h" +#include "d/d_procname.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" + +class daObjCafelmp_c : public fopAc_ac_c { +public: + inline s32 _create(); + inline bool _execute(); + inline bool _draw(); + inline bool _delete(); + inline bool create_heap(); + BOOL CreateHeap(); + void CreateInit(); + void set_mtx(); + +public: + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ J3DModel * mpModel; +}; /* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */ -void CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return ((daObjCafelmp_c*)i_this)->CreateHeap(); } /* 00000098-0000015C .text CreateHeap__14daObjCafelmp_cFv */ -void daObjCafelmp_c::CreateHeap() { - /* Nonmatching */ +BOOL daObjCafelmp_c::CreateHeap() { + void* modelData = dComIfG_getObjectRes("Cafelmp", 0x03); + JUT_ASSERT(0x51, modelData != 0); + mpModel = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x00, 0x11020203); + if (!mpModel) + return FALSE; + else + return TRUE; } /* 0000015C-000001CC .text CreateInit__14daObjCafelmp_cFv */ void daObjCafelmp_c::CreateInit() { - /* Nonmatching */ + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -600.0f, -0.0f, -600.0f, 600.0f, 900.0f, 600.0f); + fopAcM_setCullSizeFar(this, 1.0f); + set_mtx(); } /* 000001CC-0000024C .text set_mtx__14daObjCafelmp_cFv */ void daObjCafelmp_c::set_mtx() { - /* Nonmatching */ + mpModel->setBaseScale(mScale); + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::YrotM(current.angle.y); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + +s32 daObjCafelmp_c::_create() { + fopAcM_SetupActor(this, daObjCafelmp_c); + + s32 ret = dComIfG_resLoad(&mPhs, "Cafelmp"); + + if (ret == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckCreateHeap, 0x680) == 0) { + ret = cPhs_ERROR_e; + } else { + CreateInit(); + } + } + + return ret; +} + +bool daObjCafelmp_c::_delete() { + dComIfG_resDelete(&mPhs, "Cafelmp"); + return true; +} + +bool daObjCafelmp_c::_execute() { + current.angle.y += 0xda; + set_mtx(); + return true; +} + +bool daObjCafelmp_c::_draw() { + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return true; } /* 0000024C-000002EC .text daObjCafelmp_Create__FPv */ -void daObjCafelmp_Create(void*) { - /* Nonmatching */ +s32 daObjCafelmp_Create(void* i_this) { + return ((daObjCafelmp_c*)i_this)->_create(); } /* 000002EC-0000031C .text daObjCafelmp_Delete__FPv */ -void daObjCafelmp_Delete(void*) { - /* Nonmatching */ +BOOL daObjCafelmp_Delete(void* i_this) { + return ((daObjCafelmp_c*)i_this)->_delete(); } /* 0000031C-000003C0 .text daObjCafelmp_Draw__FPv */ -void daObjCafelmp_Draw(void*) { - /* Nonmatching */ +BOOL daObjCafelmp_Draw(void* i_this) { + return ((daObjCafelmp_c*)i_this)->_draw(); } /* 000003C0-000003F0 .text daObjCafelmp_Execute__FPv */ -void daObjCafelmp_Execute(void*) { - /* Nonmatching */ +BOOL daObjCafelmp_Execute(void* i_this) { + return ((daObjCafelmp_c*)i_this)->_execute(); } /* 000003F0-000003F8 .text daObjCafelmp_IsDelete__FPv */ -void daObjCafelmp_IsDelete(void*) { - /* Nonmatching */ +BOOL daObjCafelmp_IsDelete(void* i_this) { + return TRUE; } +static actor_method_class l_daObjCafelmp_Method = { + (process_method_func)daObjCafelmp_Create, + (process_method_func)daObjCafelmp_Delete, + (process_method_func)daObjCafelmp_Execute, + (process_method_func)daObjCafelmp_IsDelete, + (process_method_func)daObjCafelmp_Draw, +}; + +actor_process_profile_definition g_profile_Obj_Cafelmp = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 7, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_Obj_Cafelmp, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daObjCafelmp_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0077, + /* Actor SubMtd */ &l_daObjCafelmp_Method, + /* Status */ fopAcStts_UNK40000_e | fopAcStts_CULL_e | fopAcStts_NOCULLEXEC_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_CUSTOM_e, +};