diff options
| author | Jeff Padgham <jeff.ookami@gmail.com> | 2024-03-03 07:21:16 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-03 17:21:16 +0200 |
| commit | 7ba8c332c7d39db792f7dbfe4e17c00ece24b3d4 (patch) | |
| tree | 1ac5656375e12900809aac3a80160c7168fc4ac7 /rel | |
| parent | 9b87f613c8de640e7df6780fc69a91ef40037762 (diff) | |
d_a_obj_catdoor OK (#2083)
* Decomp OK
* Cleanup pass, removing unused asm
* Updating progress
---------
Co-authored-by: GinNoOokami <noreply>
Diffstat (limited to 'rel')
| -rw-r--r-- | rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.cpp | 349 |
1 files changed, 102 insertions, 247 deletions
diff --git a/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.cpp b/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.cpp index f630b6fac9..66db48c869 100644 --- a/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.cpp +++ b/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.cpp @@ -4,211 +4,122 @@ // #include "rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.h" -#include "JSystem/JKernel/JKRHeap.h" -#include "d/bg/d_bg_w.h" #include "d/com/d_com_inf_game.h" -#include "dol2asm.h" -#include "f_op/f_op_actor.h" #include "f_op/f_op_actor_mng.h" -#include "global.h" -extern const char* l_arcName; -static int createSolidHeap(fopAc_ac_c* i_this); - -struct daObjCatDoor_Door_c { - /* 0x00 */ J3DModel* pmodel; - /* 0x04 */ dBgW bgw; - /* 0xe0 */ Mtx mtx; - /* 0xf4 */ s16 angle; -}; - -class daObjCatDoor_c : public fopAc_ac_c { -public: - daObjCatDoor_c() {} - ~daObjCatDoor_c() { - if (mDoor1.bgw.ChkUsed()) { - dComIfG_Bgsp().Release(&mDoor1.bgw); - } - if (mDoor2.bgw.ChkUsed()) { - dComIfG_Bgsp().Release(&mDoor2.bgw); - } - dComIfG_resDelete(&mPhaseReq, l_arcName); - } - - /* 80BC42B8 */ const s16* attr() const; - /* 80BC43F4 */ void initBaseMtx(); - /* 80BC4454 */ void setBaseMtx(); - /* 80BC4560 */ void calcOpen(); - - u8 getSwitchNo() { return fopAcM_GetParam(this); } - - int createHeap() { - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); - - ASSERT(modelData != NULL); - mDoor1.pmodel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); - mDoor2.pmodel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); - if (mDoor1.pmodel == NULL || mDoor2.pmodel == NULL) { - return 0; - } - - cBgD_t* cbgd = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 7); - if (mDoor1.bgw.Set(cbgd, 1, &mDoor1.mtx)) { - return 0; - } - - cBgD_t* cbgd2 = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 7); - if (mDoor2.bgw.Set(cbgd2, 1, &mDoor2.mtx)) { - return 0; - } - - return 1; - } +// +// Declarations: +// - int draw() { - g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); +static const char* l_arcName = "CatDoor"; - fopAc_ac_c* p1 = static_cast<fopAc_ac_c*>(this); - g_env_light.setLightTevColorType_MAJI(mDoor1.pmodel, &p1->mTevStr); - g_env_light.setLightTevColorType_MAJI(mDoor2.pmodel, &p1->mTevStr); +u32 const daObjCatDoor_c::M_attr = 0x001E0578; - dComIfGd_setListBG(); - mDoExt_modelUpdateDL(mDoor1.pmodel); - mDoExt_modelUpdateDL(mDoor2.pmodel); - dComIfGd_setList(); - return 1; +daObjCatDoor_c::~daObjCatDoor_c() { + if (mDoor1.bgw.ChkUsed()) { + dComIfG_Bgsp().Release(&mDoor1.bgw); } - - int execute() { - if (dComIfGs_isSwitch(fopAcM_GetParam(this) & 0xFF, fopAcM_GetHomeRoomNo(this)) || - mRotSpeed == 0) { - return 1; - } - calcOpen(); - setBaseMtx(); - return 1; + if (mDoor2.bgw.ChkUsed()) { + dComIfG_Bgsp().Release(&mDoor2.bgw); } + dComIfG_resDelete(&mPhaseReq, l_arcName); +} - int create() { - fopAcM_SetupActor(this, daObjCatDoor_c); +int daObjCatDoor_c::createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); - int phase_state = dComIfG_resLoad(&mPhaseReq, l_arcName); - if (phase_state == cPhs_COMPLEATE_e) { - if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x2520)) { - phase_state = cPhs_ERROR_e; - } else { - create_init(); - } - } - return phase_state; + ASSERT(modelData != NULL); + mDoor1.pmodel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + mDoor2.pmodel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mDoor1.pmodel == NULL || mDoor2.pmodel == NULL) { + return 0; } - void create_init() { - ASSERT(getSwitchNo() != 0xff); - fopAcM_setCullSizeBox(this, -200.0f, 0.0f, -20.0f, 200.0f, 260.0f, 100.0f); - if (i_fopAcM_isSwitch(this, getSwitchNo())) { - mDoor1.angle = 0x8800; - mDoor2.angle = 0x7800; - } else { - mDoor1.bgw.SetCrrFunc(NULL); - mDoor1.bgw.SetRoomId(fopAcM_GetRoomNo(this)); - dComIfG_Bgsp().Regist(&mDoor1.bgw, this); - mDoor2.bgw.SetCrrFunc(NULL); - mDoor2.bgw.SetRoomId(fopAcM_GetRoomNo(this)); - dComIfG_Bgsp().Regist(&mDoor2.bgw, this); - } - initBaseMtx(); + cBgD_t* cbgd = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 7); + if (mDoor1.bgw.Set(cbgd, 1, &mDoor1.mtx)) { + return 0; } -private: - /* 0x568 */ request_of_phase_process_class mPhaseReq; - /* 0x570 */ daObjCatDoor_Door_c mDoor1; - /* 0x660 */ daObjCatDoor_Door_c mDoor2; - /* 0x760 */ Mtx mMtx; - /* 0x790 */ s16 mRotSpeed; - -public: - static u32 const M_attr; -}; - -// -// Forward References: -// + cBgD_t* cbgd2 = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 7); + if (mDoor2.bgw.Set(cbgd2, 1, &mDoor2.mtx)) { + return 0; + } -extern "C" static void createSolidHeap__FP10fopAc_ac_c(); -extern "C" void initBaseMtx__14daObjCatDoor_cFv(); -extern "C" static void daObjCatDoor_Draw__FP14daObjCatDoor_c(); -extern "C" static int daObjCatDoor_Execute__FP14daObjCatDoor_c(); -extern "C" static bool daObjCatDoor_IsDelete__FP14daObjCatDoor_c(); -extern "C" static void daObjCatDoor_Delete__FP14daObjCatDoor_c(); -extern "C" static void daObjCatDoor_Create__FP10fopAc_ac_c(); -extern "C" u32 const M_attr__14daObjCatDoor_c; + return 1; +} -// -// External References: -// +int daObjCatDoor_c::draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void push__14mDoMtx_stack_cFv(); -extern "C" void pop__14mDoMtx_stack_cFv(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void __dt__4cBgWFv(); -extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); -extern "C" void __ct__4dBgWFv(); -extern "C" void Move__4dBgWFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void cLib_chaseS__FPsss(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__4dBgW[65]; -extern "C" u8 now__14mDoMtx_stack_c[48]; + fopAc_ac_c* p1 = static_cast<fopAc_ac_c*>(this); + g_env_light.setLightTevColorType_MAJI(mDoor1.pmodel, &p1->mTevStr); + g_env_light.setLightTevColorType_MAJI(mDoor2.pmodel, &p1->mTevStr); -// -// Declarations: -// + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mDoor1.pmodel); + mDoExt_modelUpdateDL(mDoor2.pmodel); + dComIfGd_setList(); + return 1; +} -/* ############################################################################################## */ -/* 80BC49B4-80BC49B8 000000 0004+00 3/3 0/0 0/0 .rodata M_attr__14daObjCatDoor_c */ -SECTION_RODATA u32 const daObjCatDoor_c::M_attr = 0x001E0578; -COMPILER_STRIP_GATE(0x80BC49B4, &daObjCatDoor_c::M_attr); +int daObjCatDoor_c::execute() { + if (dComIfGs_isSwitch(fopAcM_GetParam(this) & 0xFF, fopAcM_GetHomeRoomNo(this)) || + mRotSpeed == 0) + { + return 1; + } + calcOpen(); + setBaseMtx(); + return 1; +} /* 80BC42B8-80BC42C4 000078 000C+00 1/1 0/0 1/1 .text attr__14daObjCatDoor_cCFv */ const s16* daObjCatDoor_c::attr() const { return (const s16*)&daObjCatDoor_c::M_attr; } -/* 80BC49E0-80BC49E4 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -static const char* l_arcName = "CatDoor"; - /* 80BC42C4-80BC43F4 000084 0130+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ static int createSolidHeap(fopAc_ac_c* i_this) { return static_cast<daObjCatDoor_c*>(i_this)->createHeap(); } +int daObjCatDoor_c::create() { + fopAcM_SetupActor(this, daObjCatDoor_c); + + int phase_state = dComIfG_resLoad(&mPhaseReq, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x2520)) { + phase_state = cPhs_ERROR_e; + } else { + create_init(); + } + } + return phase_state; +} + +void daObjCatDoor_c::create_init() { + ASSERT(getSwitchNo() != 0xff); + fopAcM_setCullSizeBox(this, -200.0f, 0.0f, -20.0f, 200.0f, 260.0f, 100.0f); + if (i_fopAcM_isSwitch(this, getSwitchNo())) { + mDoor1.angle = 0x8800; + mDoor2.angle = 0x7800; + } else { + mDoor1.bgw.SetCrrFunc(NULL); + mDoor1.bgw.SetRoomId(fopAcM_GetRoomNo(this)); + dComIfG_Bgsp().Regist(&mDoor1.bgw, this); + mDoor2.bgw.SetCrrFunc(NULL); + mDoor2.bgw.SetRoomId(fopAcM_GetRoomNo(this)); + dComIfG_Bgsp().Regist(&mDoor2.bgw, this); + } + initBaseMtx(); +} + /* 80BC43F4-80BC4454 0001B4 0060+00 1/1 0/0 0/0 .text initBaseMtx__14daObjCatDoor_cFv */ void daObjCatDoor_c::initBaseMtx() { mCullMtx = mMtx; mDoMtx_stack_c::transS(current.pos); mDoMtx_YrotM(mDoMtx_stack_c::get(), shape_angle.y); - MTXCopy(mDoMtx_stack_c::get(), mMtx); + mDoMtx_copy(mDoMtx_stack_c::get(), mMtx); setBaseMtx(); } @@ -264,98 +175,42 @@ static bool daObjCatDoor_IsDelete(daObjCatDoor_c* i_this) { } /* 80BC4768-80BC4848 000528 00E0+00 1/0 0/0 0/0 .text daObjCatDoor_Delete__FP14daObjCatDoor_c */ -#ifdef NONMATCHING // ~dBgW is not inlined static int daObjCatDoor_Delete(daObjCatDoor_c* i_this) { fopAcM_GetID(i_this); i_this->~daObjCatDoor_c(); return 1; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjCatDoor_Delete(daObjCatDoor_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Delete__FP14daObjCatDoor_c.s" -} -#pragma pop -#endif - -/* ############################################################################################## */ -/* 80BC49C4-80BC49C8 000010 0004+00 0/1 0/0 0/0 .rodata @3860 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3860 = -200.0f; -COMPILER_STRIP_GATE(0x80BC49C4, &lit_3860); -#pragma pop - -/* 80BC49C8-80BC49CC 000014 0004+00 0/1 0/0 0/0 .rodata @3861 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3861 = -20.0f; -COMPILER_STRIP_GATE(0x80BC49C8, &lit_3861); -#pragma pop - -/* 80BC49CC-80BC49D0 000018 0004+00 0/1 0/0 0/0 .rodata @3862 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3862 = 200.0f; -COMPILER_STRIP_GATE(0x80BC49CC, &lit_3862); -#pragma pop - -/* 80BC49D0-80BC49D4 00001C 0004+00 0/1 0/0 0/0 .rodata @3863 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3863 = 260.0f; -COMPILER_STRIP_GATE(0x80BC49D0, &lit_3863); -#pragma pop - -/* 80BC49D4-80BC49D8 000020 0004+00 0/1 0/0 0/0 .rodata @3864 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3864 = 100.0f; -COMPILER_STRIP_GATE(0x80BC49D4, &lit_3864); -#pragma pop /* 80BC4848-80BC49AC 000608 0164+00 1/0 0/0 0/0 .text daObjCatDoor_Create__FP10fopAc_ac_c */ -#ifdef NONMATCHING // literals + register init order static int daObjCatDoor_Create(fopAc_ac_c* i_this) { fopAcM_GetID(i_this); - return static_cast<daObjCatDoor_c*>(i_this)->create(); + daObjCatDoor_c* a_this = static_cast<daObjCatDoor_c*>(i_this); + return a_this->create(); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjCatDoor_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Create__FP10fopAc_ac_c.s" -} -#pragma pop -#endif /* ############################################################################################## */ /* 80BC49E4-80BC4A04 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCatDoor_Method */ -SECTION_DATA static void* l_daObjCatDoor_Method[8] = { - (void*)daObjCatDoor_Create__FP10fopAc_ac_c, - (void*)daObjCatDoor_Delete__FP14daObjCatDoor_c, - (void*)daObjCatDoor_Execute__FP14daObjCatDoor_c, - (void*)daObjCatDoor_IsDelete__FP14daObjCatDoor_c, - (void*)daObjCatDoor_Draw__FP14daObjCatDoor_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daObjCatDoor_Method = { + (process_method_func)daObjCatDoor_Create, (process_method_func)daObjCatDoor_Delete, + (process_method_func)daObjCatDoor_Execute, (process_method_func)daObjCatDoor_IsDelete, + (process_method_func)daObjCatDoor_Draw, }; /* 80BC4A04-80BC4A34 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_CatDoor */ -SECTION_DATA extern void* g_profile_Obj_CatDoor[12] = { - (void*)0xFFFFFFFD, (void*)0x0003FFFD, - (void*)0x00B90000, (void*)&g_fpcLf_Method, - (void*)0x00000794, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x02AC0000, (void*)&l_daObjCatDoor_Method, - (void*)0x00044100, (void*)0x000E0000, +extern actor_process_profile_definition g_profile_Obj_CatDoor = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_CatDoor, // mProcName + &g_fpcLf_Method.mBase, // mSubMtd + sizeof(daObjCatDoor_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // mSubMtd + 684, // mPriority + &l_daObjCatDoor_Method, // mSubMtd + 0x44100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // mCullType }; - -/* 80BC49D8-80BC49D8 000024 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ |
