diff --git a/src/d/actor/d_a_obj_bscurtain.cpp b/src/d/actor/d_a_obj_bscurtain.cpp index 4b1ca9b8b..6b23aafaf 100644 --- a/src/d/actor/d_a_obj_bscurtain.cpp +++ b/src/d/actor/d_a_obj_bscurtain.cpp @@ -3,66 +3,171 @@ // Translation Unit: d_a_obj_bscurtain.cpp // -#include "d_a_obj_bscurtain.h" -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JParticle/JPAParticle.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_hostIO.h" +#include "m_Do/m_Do_mtx.h" + +class daObj_Bscurtain_c : fopAc_ac_c { +public: + BOOL CreateHeap(); + s32 CreateInit(); + inline s32 _create(); + inline bool _delete(); + inline bool _execute(); + inline bool _draw(); + void set_mtx(); + static const char M_arcname[4]; + +public: + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ u32 field_0x298; + /* 0x29C */ J3DModel * mpModel; +}; + +class daObj_Bscurtain_HIO_c : public mDoHIO_entry_c { +public: + daObj_Bscurtain_HIO_c(); + virtual ~daObj_Bscurtain_HIO_c() {} + +public: + /* 0x04 */ s8 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ u16 field_0x0c; +}; + +daObj_Bscurtain_HIO_c l_HIO; + +const char daObj_Bscurtain_c::M_arcname[4] = "Ptc"; /* 000000EC-00000118 .text __ct__21daObj_Bscurtain_HIO_cFv */ daObj_Bscurtain_HIO_c::daObj_Bscurtain_HIO_c() { - /* Nonmatching */ + field_0x04 = -1; + field_0x08 = 0.0f; + field_0x0c = 0; } /* 00000118-000001C8 .text set_mtx__17daObj_Bscurtain_cFv */ void daObj_Bscurtain_c::set_mtx() { - /* Nonmatching */ -} - -/* 000001C8-00000204 .text __dt__4cXyzFv */ -cXyz::~cXyz() { - /* Nonmatching */ + static cXyz trans = cXyz::Zero; + mDoMtx_stack_c::transS(trans); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000204-00000224 .text CheckCreateHeap__FP10fopAc_ac_c */ -void CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return ((daObj_Bscurtain_c*)i_this)->CreateHeap(); } /* 00000224-00000334 .text CreateHeap__17daObj_Bscurtain_cFv */ -void daObj_Bscurtain_c::CreateHeap() { - /* Nonmatching */ +BOOL daObj_Bscurtain_c::CreateHeap() { + J3DModelData* modelData; + if ((fpcM_GetParam(this) & 0xFF) != 1 || dComIfGs_isEventBit(0x1F08) != 0) { + modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname, 0x03); + } else { + modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname, 0x04); + } + + JUT_ASSERT(0xa9, modelData != 0); + mpModel = mDoExt_J3DModel__create(modelData, 0x0, 0x11020203); + + return mpModel != NULL; } /* 00000334-00000370 .text CreateInit__17daObj_Bscurtain_cFv */ -void daObj_Bscurtain_c::CreateInit() { - /* Nonmatching */ +s32 daObj_Bscurtain_c::CreateInit() { + set_mtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + return cPhs_COMPLEATE_e; +} + +s32 daObj_Bscurtain_c::_create() { + fopAcM_SetupActor(this, daObj_Bscurtain_c); + + s32 ret = dComIfG_resLoad(&mPhs, M_arcname); + + if (ret == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckCreateHeap, 0x10000)) { + ret = CreateInit(); + } else { + ret = cPhs_ERROR_e; + } + } + + return ret; +} + +bool daObj_Bscurtain_c::_delete() { + dComIfG_resDelete(&mPhs, M_arcname); + return true; +} + +bool daObj_Bscurtain_c::_execute() { + set_mtx(); + return false; +} + +bool daObj_Bscurtain_c::_draw() { + dComIfGd_setListBG(); + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return true; } /* 00000370-00000400 .text daObj_BscurtainCreate__FPv */ -void daObj_BscurtainCreate(void*) { - /* Nonmatching */ +s32 daObj_BscurtainCreate(void* i_this) { + return ((daObj_Bscurtain_c*)i_this)->_create(); } /* 00000400-00000430 .text daObj_BscurtainDelete__FPv */ -void daObj_BscurtainDelete(void*) { - /* Nonmatching */ +BOOL daObj_BscurtainDelete(void* i_this) { + return ((daObj_Bscurtain_c*)i_this)->_delete(); } /* 00000430-00000454 .text daObj_BscurtainExecute__FPv */ -void daObj_BscurtainExecute(void*) { - /* Nonmatching */ +BOOL daObj_BscurtainExecute(void* i_this) { + return ((daObj_Bscurtain_c*)i_this)->_execute(); } /* 00000454-000004F8 .text daObj_BscurtainDraw__FPv */ -void daObj_BscurtainDraw(void*) { - /* Nonmatching */ +BOOL daObj_BscurtainDraw(void* i_this) { + return ((daObj_Bscurtain_c*)i_this)->_draw(); } /* 000004F8-00000500 .text daObj_BscurtainIsDelete__FPv */ -void daObj_BscurtainIsDelete(void*) { - /* Nonmatching */ +BOOL daObj_BscurtainIsDelete(void* i_this) { + return TRUE; } -/* 00000500-00000548 .text __dt__21daObj_Bscurtain_HIO_cFv */ -daObj_Bscurtain_HIO_c::~daObj_Bscurtain_HIO_c() { - /* Nonmatching */ -} +static actor_method_class daObj_BscurtainMethodTable = { + (process_method_func)daObj_BscurtainCreate, + (process_method_func)daObj_BscurtainDelete, + (process_method_func)daObj_BscurtainExecute, + (process_method_func)daObj_BscurtainIsDelete, + (process_method_func)daObj_BscurtainDraw, +}; +actor_process_profile_definition g_profile_Obj_Bscurtain = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 3, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_Obj_Bscurtain, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daObj_Bscurtain_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x01BE, + /* Actor SubMtd */ &daObj_BscurtainMethodTable, + /* Status */ fopAcStts_UNK40000_e | fopAcStts_NOCULLEXEC_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_4_e, +};