diff --git a/Progress.md b/Progress.md index 7491231f837..8c0b905c58f 100644 --- a/Progress.md +++ b/Progress.md @@ -21,8 +21,8 @@ Total | 52.660948% | 2117324 | 4020672 Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- main.dol | 52.660948% | 2117324 | 4020672 -RELs | 36.213275% | 4164644 | 11500324 -Total | 40.474001% | 6281968 | 15520996 +RELs | 36.218319% | 4165224 | 11500324 +Total | 40.477737% | 6282548 | 15520996 ## RELs @@ -369,7 +369,7 @@ d_a_obj_bsGate | 100.000000% | 4424 | 4424 d_a_obj_bubblePilar | 44.760583% | 2580 | 5764 d_a_obj_burnbox | 45.251397% | 1620 | 3580 d_a_obj_carry | 33.422182% | 20564 | 61528 -d_a_obj_catdoor | 82.338611% | 2704 | 3284 +d_a_obj_catdoor | 100.000000% | 3284 | 3284 d_a_obj_cb | 43.008475% | 2436 | 5664 d_a_obj_cblock | 42.294713% | 3008 | 7112 d_a_obj_cboard | 100.000000% | 2648 | 2648 @@ -785,4 +785,4 @@ d_a_vrbox2 | 44.907111% | 2804 | 6244 d_a_warp_bug | 100.000000% | 2024 | 2024 d_a_ykgr | 44.400631% | 2252 | 5072 f_pc_profile_lst | 100.000000% | 28156 | 28156 -Total | 36.213275% | 4164644 | 11500324 +Total | 36.218319% | 4165224 | 11500324 diff --git a/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Create__FP10fopAc_ac_c.s b/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Create__FP10fopAc_ac_c.s deleted file mode 100644 index a4e8e63c343..00000000000 --- a/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Create__FP10fopAc_ac_c.s +++ /dev/null @@ -1,96 +0,0 @@ -lbl_80BC4848: -/* 80BC4848 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80BC484C 7C 08 02 A6 */ mflr r0 -/* 80BC4850 90 01 00 24 */ stw r0, 0x24(r1) -/* 80BC4854 39 61 00 20 */ addi r11, r1, 0x20 -/* 80BC4858 4B 79 D9 85 */ bl _savegpr_29 -/* 80BC485C 3C 80 80 BC */ lis r4, M_attr__14daObjCatDoor_c@ha /* 0x80BC49B4@ha */ -/* 80BC4860 3B A4 49 B4 */ addi r29, r4, M_attr__14daObjCatDoor_c@l /* 0x80BC49B4@l */ -/* 80BC4864 7C 7E 1B 78 */ mr r30, r3 -/* 80BC4868 80 03 04 A0 */ lwz r0, 0x4a0(r3) -/* 80BC486C 54 00 07 39 */ rlwinm. r0, r0, 0, 0x1c, 0x1c -/* 80BC4870 40 82 00 30 */ bne lbl_80BC48A0 -/* 80BC4874 7F C0 F3 79 */ or. r0, r30, r30 -/* 80BC4878 41 82 00 1C */ beq lbl_80BC4894 -/* 80BC487C 7C 1F 03 78 */ mr r31, r0 -/* 80BC4880 4B 45 42 E5 */ bl __ct__10fopAc_ac_cFv -/* 80BC4884 38 7F 05 74 */ addi r3, r31, 0x574 -/* 80BC4888 4B 4B 70 E9 */ bl __ct__4dBgWFv -/* 80BC488C 38 7F 06 6C */ addi r3, r31, 0x66c -/* 80BC4890 4B 4B 70 E1 */ bl __ct__4dBgWFv -lbl_80BC4894: -/* 80BC4894 80 1E 04 A0 */ lwz r0, 0x4a0(r30) -/* 80BC4898 60 00 00 08 */ ori r0, r0, 8 -/* 80BC489C 90 1E 04 A0 */ stw r0, 0x4a0(r30) -lbl_80BC48A0: -/* 80BC48A0 38 7E 05 68 */ addi r3, r30, 0x568 -/* 80BC48A4 3C 80 80 BC */ lis r4, l_arcName@ha /* 0x80BC49E0@ha */ -/* 80BC48A8 38 84 49 E0 */ addi r4, r4, l_arcName@l /* 0x80BC49E0@l */ -/* 80BC48AC 80 84 00 00 */ lwz r4, 0(r4) -/* 80BC48B0 4B 46 86 0D */ bl dComIfG_resLoad__FP30request_of_phase_process_classPCc -/* 80BC48B4 7C 7F 1B 78 */ mr r31, r3 -/* 80BC48B8 2C 1F 00 04 */ cmpwi r31, 4 -/* 80BC48BC 40 82 00 D4 */ bne lbl_80BC4990 -/* 80BC48C0 7F C3 F3 78 */ mr r3, r30 -/* 80BC48C4 3C 80 80 BC */ lis r4, createSolidHeap__FP10fopAc_ac_c@ha /* 0x80BC42C4@ha */ -/* 80BC48C8 38 84 42 C4 */ addi r4, r4, createSolidHeap__FP10fopAc_ac_c@l /* 0x80BC42C4@l */ -/* 80BC48CC 38 A0 25 20 */ li r5, 0x2520 -/* 80BC48D0 4B 45 5B E1 */ bl fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl -/* 80BC48D4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 80BC48D8 40 82 00 0C */ bne lbl_80BC48E4 -/* 80BC48DC 3B E0 00 05 */ li r31, 5 -/* 80BC48E0 48 00 00 B0 */ b lbl_80BC4990 -lbl_80BC48E4: -/* 80BC48E4 7F C3 F3 78 */ mr r3, r30 -/* 80BC48E8 C0 3D 00 10 */ lfs f1, 0x10(r29) -/* 80BC48EC C0 5D 00 0C */ lfs f2, 0xc(r29) -/* 80BC48F0 C0 7D 00 14 */ lfs f3, 0x14(r29) -/* 80BC48F4 C0 9D 00 18 */ lfs f4, 0x18(r29) -/* 80BC48F8 C0 BD 00 1C */ lfs f5, 0x1c(r29) -/* 80BC48FC C0 DD 00 20 */ lfs f6, 0x20(r29) -/* 80BC4900 4B 45 5C 49 */ bl fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff -/* 80BC4904 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80BC4908 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80BC490C 80 1E 00 B0 */ lwz r0, 0xb0(r30) -/* 80BC4910 54 04 06 3E */ clrlwi r4, r0, 0x18 -/* 80BC4914 88 1E 04 BA */ lbz r0, 0x4ba(r30) -/* 80BC4918 7C 05 07 74 */ extsb r5, r0 -/* 80BC491C 4B 47 0A 45 */ bl isSwitch__10dSv_info_cCFii -/* 80BC4920 2C 03 00 00 */ cmpwi r3, 0 -/* 80BC4924 41 82 00 18 */ beq lbl_80BC493C -/* 80BC4928 38 00 88 00 */ li r0, -30720 -/* 80BC492C B0 1E 06 64 */ sth r0, 0x664(r30) -/* 80BC4930 38 00 78 00 */ li r0, 0x7800 -/* 80BC4934 B0 1E 07 5C */ sth r0, 0x75c(r30) -/* 80BC4938 48 00 00 50 */ b lbl_80BC4988 -lbl_80BC493C: -/* 80BC493C 38 00 00 00 */ li r0, 0 -/* 80BC4940 90 1E 06 24 */ stw r0, 0x624(r30) -/* 80BC4944 88 1E 04 E2 */ lbz r0, 0x4e2(r30) -/* 80BC4948 98 1E 05 7D */ stb r0, 0x57d(r30) -/* 80BC494C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80BC4950 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80BC4954 3B A3 0F 38 */ addi r29, r3, 0xf38 -/* 80BC4958 7F A3 EB 78 */ mr r3, r29 -/* 80BC495C 38 9E 05 74 */ addi r4, r30, 0x574 -/* 80BC4960 7F C5 F3 78 */ mr r5, r30 -/* 80BC4964 4B 4B 00 A5 */ bl Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c -/* 80BC4968 38 00 00 00 */ li r0, 0 -/* 80BC496C 90 1E 07 1C */ stw r0, 0x71c(r30) -/* 80BC4970 88 1E 04 E2 */ lbz r0, 0x4e2(r30) -/* 80BC4974 98 1E 06 75 */ stb r0, 0x675(r30) -/* 80BC4978 7F A3 EB 78 */ mr r3, r29 -/* 80BC497C 38 9E 06 6C */ addi r4, r30, 0x66c -/* 80BC4980 7F C5 F3 78 */ mr r5, r30 -/* 80BC4984 4B 4B 00 85 */ bl Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c -lbl_80BC4988: -/* 80BC4988 7F C3 F3 78 */ mr r3, r30 -/* 80BC498C 4B FF FA 69 */ bl initBaseMtx__14daObjCatDoor_cFv -lbl_80BC4990: -/* 80BC4990 7F E3 FB 78 */ mr r3, r31 -/* 80BC4994 39 61 00 20 */ addi r11, r1, 0x20 -/* 80BC4998 4B 79 D8 91 */ bl _restgpr_29 -/* 80BC499C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80BC49A0 7C 08 03 A6 */ mtlr r0 -/* 80BC49A4 38 21 00 20 */ addi r1, r1, 0x20 -/* 80BC49A8 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Delete__FP14daObjCatDoor_c.s b/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Delete__FP14daObjCatDoor_c.s deleted file mode 100644 index 02a2a5b266a..00000000000 --- a/asm/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor/daObjCatDoor_Delete__FP14daObjCatDoor_c.s +++ /dev/null @@ -1,62 +0,0 @@ -lbl_80BC4768: -/* 80BC4768 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80BC476C 7C 08 02 A6 */ mflr r0 -/* 80BC4770 90 01 00 14 */ stw r0, 0x14(r1) -/* 80BC4774 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80BC4778 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80BC477C 41 82 00 B4 */ beq lbl_80BC4830 -/* 80BC4780 38 7F 05 74 */ addi r3, r31, 0x574 -/* 80BC4784 4B 6A 3A 51 */ bl ChkUsed__9cBgW_BgIdCFv -/* 80BC4788 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 80BC478C 41 82 00 18 */ beq lbl_80BC47A4 -/* 80BC4790 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80BC4794 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80BC4798 38 63 0F 38 */ addi r3, r3, 0xf38 -/* 80BC479C 38 9F 05 74 */ addi r4, r31, 0x574 -/* 80BC47A0 4B 4A FA B1 */ bl Release__4cBgSFP9dBgW_Base -lbl_80BC47A4: -/* 80BC47A4 38 7F 06 6C */ addi r3, r31, 0x66c -/* 80BC47A8 4B 6A 3A 2D */ bl ChkUsed__9cBgW_BgIdCFv -/* 80BC47AC 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 80BC47B0 41 82 00 18 */ beq lbl_80BC47C8 -/* 80BC47B4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80BC47B8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80BC47BC 38 63 0F 38 */ addi r3, r3, 0xf38 -/* 80BC47C0 38 9F 06 6C */ addi r4, r31, 0x66c -/* 80BC47C4 4B 4A FA 8D */ bl Release__4cBgSFP9dBgW_Base -lbl_80BC47C8: -/* 80BC47C8 38 7F 05 68 */ addi r3, r31, 0x568 -/* 80BC47CC 3C 80 80 BC */ lis r4, l_arcName@ha /* 0x80BC49E0@ha */ -/* 80BC47D0 38 84 49 E0 */ addi r4, r4, l_arcName@l /* 0x80BC49E0@l */ -/* 80BC47D4 80 84 00 00 */ lwz r4, 0(r4) -/* 80BC47D8 4B 46 88 31 */ bl dComIfG_resDelete__FP30request_of_phase_process_classPCc -/* 80BC47DC 34 1F 06 68 */ addic. r0, r31, 0x668 -/* 80BC47E0 41 82 00 20 */ beq lbl_80BC4800 -/* 80BC47E4 34 7F 06 6C */ addic. r3, r31, 0x66c -/* 80BC47E8 41 82 00 18 */ beq lbl_80BC4800 -/* 80BC47EC 3C 80 80 3B */ lis r4, __vt__4dBgW@ha /* 0x803ABA80@ha */ -/* 80BC47F0 38 04 BA 80 */ addi r0, r4, __vt__4dBgW@l /* 0x803ABA80@l */ -/* 80BC47F4 90 1F 06 70 */ stw r0, 0x670(r31) -/* 80BC47F8 38 80 00 00 */ li r4, 0 -/* 80BC47FC 4B 4B 4B 41 */ bl __dt__4cBgWFv -lbl_80BC4800: -/* 80BC4800 34 1F 05 70 */ addic. r0, r31, 0x570 -/* 80BC4804 41 82 00 20 */ beq lbl_80BC4824 -/* 80BC4808 34 7F 05 74 */ addic. r3, r31, 0x574 -/* 80BC480C 41 82 00 18 */ beq lbl_80BC4824 -/* 80BC4810 3C 80 80 3B */ lis r4, __vt__4dBgW@ha /* 0x803ABA80@ha */ -/* 80BC4814 38 04 BA 80 */ addi r0, r4, __vt__4dBgW@l /* 0x803ABA80@l */ -/* 80BC4818 90 1F 05 78 */ stw r0, 0x578(r31) -/* 80BC481C 38 80 00 00 */ li r4, 0 -/* 80BC4820 4B 4B 4B 1D */ bl __dt__4cBgWFv -lbl_80BC4824: -/* 80BC4824 7F E3 FB 78 */ mr r3, r31 -/* 80BC4828 38 80 00 00 */ li r4, 0 -/* 80BC482C 4B 45 44 61 */ bl __dt__10fopAc_ac_cFv -lbl_80BC4830: -/* 80BC4830 38 60 00 01 */ li r3, 1 -/* 80BC4834 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80BC4838 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80BC483C 7C 08 03 A6 */ mtlr r0 -/* 80BC4840 38 21 00 10 */ addi r1, r1, 0x10 -/* 80BC4844 4E 80 00 20 */ blr diff --git a/include/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.h b/include/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.h index dd4499dd379..2b144aaaa21 100644 --- a/include/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.h +++ b/include/rel/d/a/obj/d_a_obj_catdoor/d_a_obj_catdoor.h @@ -1,5 +1,44 @@ #ifndef D_A_OBJ_CATDOOR_H #define D_A_OBJ_CATDOOR_H +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "SSystem/SComponent/c_phase.h" +#include "d/bg/d_bg_w.h" + +struct daObjCatDoor_Door_c { + /* 0x00 */ J3DModel* pmodel; + /* 0x04 */ dBgW bgw; + /* 0xe0 */ Mtx mtx; + /* 0xf4 */ s16 angle; +}; + +class daObjCatDoor_c : public fopAc_ac_c { +public: + inline ~daObjCatDoor_c(); + + /* 80BC42B8 */ const s16* attr() const; + /* 80BC43F4 */ void initBaseMtx(); + /* 80BC4454 */ void setBaseMtx(); + /* 80BC4560 */ void calcOpen(); + + u8 getSwitchNo() { return fopAcM_GetParam(this); } + + inline int createHeap(); + inline int draw(); + inline int execute(); + inline int create(); + inline void create_init(); + +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; +}; #endif /* D_A_OBJ_CATDOOR_H */ 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 f630b6fac98..66db48c8699 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; - } - - int draw() { - g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); - - fopAc_ac_c* p1 = static_cast(this); - g_env_light.setLightTevColorType_MAJI(mDoor1.pmodel, &p1->mTevStr); - g_env_light.setLightTevColorType_MAJI(mDoor2.pmodel, &p1->mTevStr); - - dComIfGd_setListBG(); - mDoExt_modelUpdateDL(mDoor1.pmodel); - mDoExt_modelUpdateDL(mDoor2.pmodel); - dComIfGd_setList(); - return 1; - } - - int execute() { - if (dComIfGs_isSwitch(fopAcM_GetParam(this) & 0xFF, fopAcM_GetHomeRoomNo(this)) || - mRotSpeed == 0) { - return 1; - } - calcOpen(); - setBaseMtx(); - return 1; - } - - int 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 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(); - } - -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: -// - -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; - -// -// External References: -// - -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]; // // Declarations: // -/* ############################################################################################## */ -/* 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); +static const char* l_arcName = "CatDoor"; + +u32 const daObjCatDoor_c::M_attr = 0x001E0578; + +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); +} + +int daObjCatDoor_c::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; +} + +int daObjCatDoor_c::draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); + + fopAc_ac_c* p1 = static_cast(this); + g_env_light.setLightTevColorType_MAJI(mDoor1.pmodel, &p1->mTevStr); + g_env_light.setLightTevColorType_MAJI(mDoor2.pmodel, &p1->mTevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mDoor1.pmodel); + mDoExt_modelUpdateDL(mDoor2.pmodel); + dComIfGd_setList(); + return 1; +} + +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(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(i_this)->create(); + daObjCatDoor_c* a_this = static_cast(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 */