diff --git a/configure.py b/configure.py index a30734321..b0b143217 100644 --- a/configure.py +++ b/configure.py @@ -1523,7 +1523,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_firewall"), ActorRel(NonMatching, "d_a_obj_flame"), ActorRel(NonMatching, "d_a_obj_ftree"), - ActorRel(NonMatching, "d_a_obj_ganonbed"), + ActorRel(Matching, "d_a_obj_ganonbed", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_obj_gaship"), ActorRel(NonMatching, "d_a_obj_gaship2"), ActorRel(NonMatching, "d_a_obj_gnnbtltaki"), diff --git a/src/d/actor/d_a_obj_AjavW.cpp b/src/d/actor/d_a_obj_AjavW.cpp index b0390fa4d..11ba22e83 100644 --- a/src/d/actor/d_a_obj_AjavW.cpp +++ b/src/d/actor/d_a_obj_AjavW.cpp @@ -150,18 +150,18 @@ static actor_method_class l_daObjAjavW_Method = { }; actor_process_profile_definition g_profile_Obj_AjavW = { - fpcLy_CURRENT_e, - 3, - fpcPi_CURRENT_e, - PROC_Obj_AjavW, - &g_fpcLf_Method.mBase, - sizeof(daObjAjavW_c), - 0, - 0, - &g_fopAc_Method.base, - 0x0056, - &l_daObjAjavW_Method, - fopAcStts_UNK40000_e, - fopAc_ACTOR_e, - fopAc_CULLBOX_CUSTOM_e, + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 3, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_Obj_AjavW, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daObjAjavW_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0056, + /* Actor SubMtd */ &l_daObjAjavW_Method, + /* Status */ fopAcStts_UNK40000_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_CUSTOM_e, }; diff --git a/src/d/actor/d_a_obj_ganonbed.cpp b/src/d/actor/d_a_obj_ganonbed.cpp index 7d1a66b1d..7ae2be609 100644 --- a/src/d/actor/d_a_obj_ganonbed.cpp +++ b/src/d/actor/d_a_obj_ganonbed.cpp @@ -3,66 +3,167 @@ // Translation Unit: d_a_obj_ganonbed.cpp // -#include "d_a_obj_ganonbed.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 daObjGbed_c : public fopAc_ac_c { +public: + void init_mtx(); + s32 _create(); + bool _execute(); + bool _draw(); + bool _delete(); + bool create_heap(); + static BOOL solidHeapCB(fopAc_ac_c *i_this); + +public: + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ J3DModel * mpModel; + /* 0x29C */ dBgW * mpBgW; +}; + +namespace { + static const char l_arcname[] = "Gbed"; +}; /* 00000078-00000100 .text init_mtx__11daObjGbed_cFv */ void daObjGbed_c::init_mtx() { - /* Nonmatching */ + mpModel->setBaseScale(mScale); + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::XYZrotM(shape_angle); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000100-00000124 .text solidHeapCB__11daObjGbed_cFP10fopAc_ac_c */ -void daObjGbed_c::solidHeapCB(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daObjGbed_c::solidHeapCB(fopAc_ac_c* i_this) { + return ((daObjGbed_c*)i_this)->create_heap(); } /* 00000124-00000224 .text create_heap__11daObjGbed_cFv */ -void daObjGbed_c::create_heap() { - /* Nonmatching */ +bool daObjGbed_c::create_heap() { + bool ret = true; + + void* pModelData = dComIfG_getObjectRes(l_arcname, 0x04); + + if (!pModelData) { + JUT_ASSERT(0xb1, 0); + ret = false; + } else { + mpModel = mDoExt_J3DModel__create((J3DModelData*)pModelData, 0x80000, 0x11000022); + mpBgW = dBgW_NewSet((cBgD_t*)dComIfG_getObjectRes(l_arcname, 0x07), cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx()); + + if (!mpModel || !mpBgW) + ret = false; + } + + return ret; } /* 00000224-000002F8 .text _create__11daObjGbed_cFv */ -void daObjGbed_c::_create() { - /* Nonmatching */ +s32 daObjGbed_c::_create() { + fopAcM_SetupActor(this, daObjGbed_c); + + s32 ret = dComIfG_resLoad(&mPhs, l_arcname); + + if (ret == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)solidHeapCB, 0x13e0)) { + if (dComIfG_Bgsp()->Regist(mpBgW, this)) { + ret = cPhs_ERROR_e; + } else { + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + init_mtx(); + } + } else { + ret = cPhs_ERROR_e; + } + } + + return ret; } /* 000002F8-0000038C .text _delete__11daObjGbed_cFv */ -void daObjGbed_c::_delete() { - /* Nonmatching */ +bool daObjGbed_c::_delete() { + dComIfG_resDelete(&mPhs, l_arcname); + + if (heap != NULL && mpBgW != NULL) { + if (mpBgW->ChkUsed()) { + dComIfG_Bgsp()->Release(mpBgW); + } + + mpBgW = NULL; + } + + return true; } /* 0000038C-000003E4 .text _execute__11daObjGbed_cFv */ -void daObjGbed_c::_execute() { - /* Nonmatching */ +bool daObjGbed_c::_execute() { + if (mpBgW != NULL && mpBgW->ChkUsed()) + mpBgW->Move(); + return true; } /* 000003E4-00000444 .text _draw__11daObjGbed_cFv */ -void daObjGbed_c::_draw() { - /* Nonmatching */ +bool daObjGbed_c::_draw() { + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + mDoExt_modelUpdateDL(mpModel); + return true; } /* 00000444-00000464 .text daObjGbed_Create__FP10fopAc_ac_c */ -void daObjGbed_Create(fopAc_ac_c*) { - /* Nonmatching */ +s32 daObjGbed_Create(fopAc_ac_c* i_this) { + return ((daObjGbed_c*)i_this)->_create(); } /* 00000464-00000488 .text daObjGbed_Delete__FP11daObjGbed_c */ -void daObjGbed_Delete(daObjGbed_c*) { - /* Nonmatching */ +BOOL daObjGbed_Delete(daObjGbed_c* i_this) { + return i_this->_delete(); } /* 00000488-000004AC .text daObjGbed_Execute__FP11daObjGbed_c */ -void daObjGbed_Execute(daObjGbed_c*) { - /* Nonmatching */ +BOOL daObjGbed_Execute(daObjGbed_c* i_this) { + return i_this->_execute(); } /* 000004AC-000004D0 .text daObjGbed_Draw__FP11daObjGbed_c */ -void daObjGbed_Draw(daObjGbed_c*) { - /* Nonmatching */ +BOOL daObjGbed_Draw(daObjGbed_c* i_this) { + return i_this->_draw(); } /* 000004D0-000004D8 .text daObjGbed_IsDelete__FP11daObjGbed_c */ -void daObjGbed_IsDelete(daObjGbed_c*) { - /* Nonmatching */ +BOOL daObjGbed_IsDelete(daObjGbed_c* i_this) { + return TRUE; } + +static actor_method_class l_daObjGbed_Method = { + (process_method_func)daObjGbed_Create, + (process_method_func)daObjGbed_Delete, + (process_method_func)daObjGbed_Execute, + (process_method_func)daObjGbed_IsDelete, + (process_method_func)daObjGbed_Draw, +}; + +actor_process_profile_definition g_profile_Obj_Gbed = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 3, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_Obj_Gbed, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daObjGbed_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0059, + /* Actor SubMtd */ &l_daObjGbed_Method, + /* Status */ fopAcStts_UNK40000_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_CUSTOM_e, +};