From c724824c5c74df5a02f65fee82aa67219b96e5b2 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:47:18 -0700 Subject: [PATCH] d_a_obj_key / d_a_obj_keyhole / d_a_obj_smallkey (#2584) * obj_key equivalent * obj_keyhole done * obj_smallkey done * use macro --- configure.py | 6 +- include/d/actor/d_a_e_db.h | 67 +- include/d/actor/d_a_e_oc.h | 1 + include/d/actor/d_a_e_rdb.h | 2 +- include/d/actor/d_a_obj_key.h | 41 +- include/d/actor/d_a_obj_keyhole.h | 71 +- include/d/actor/d_a_obj_smallkey.h | 98 +- include/d/d_tresure.h | 4 + src/d/actor/d_a_door_bossL1.cpp | 2 +- src/d/actor/d_a_door_bossL5.cpp | 2 +- src/d/actor/d_a_e_mk.cpp | 6 +- src/d/actor/d_a_obj_key.cpp | 1161 +++++++++-------- src/d/actor/d_a_obj_keyhole.cpp | 1893 ++++++++++++---------------- src/d/actor/d_a_obj_smallkey.cpp | 1185 +++++++---------- 14 files changed, 2143 insertions(+), 2396 deletions(-) diff --git a/configure.py b/configure.py index b3b713b3085..323fcbf6e5b 100755 --- a/configure.py +++ b/configure.py @@ -1975,8 +1975,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_katatsumuri"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kazeneko"), ActorRel(NonMatching, "d_a_obj_kbox"), - ActorRel(NonMatching, "d_a_obj_key"), - ActorRel(NonMatching, "d_a_obj_keyhole"), + ActorRel(Equivalent, "d_a_obj_key"), # weak func order + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_keyhole"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ki"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_kiPot"), ActorRel(NonMatching, "d_a_obj_kita"), @@ -2098,7 +2098,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_obj_sekizoa"), # weak function order ActorRel(MatchingFor("GZ2E01"), "d_a_obj_shield"), ActorRel(Equivalent, "d_a_obj_sm_door"), # vtable order - ActorRel(NonMatching, "d_a_obj_smallkey"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smallkey"), ActorRel(NonMatching, "d_a_obj_smgdoor"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smoke"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smtile"), diff --git a/include/d/actor/d_a_e_db.h b/include/d/actor/d_a_e_db.h index cf4d94e43a8..1b5690b8d3f 100644 --- a/include/d/actor/d_a_e_db.h +++ b/include/d/actor/d_a_e_db.h @@ -1,6 +1,10 @@ #ifndef D_A_E_DB_H #define D_A_E_DB_H + #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" /** * @ingroup actors-enemies @@ -10,12 +14,65 @@ * @details * */ -class e_db_class : public fopEn_enemy_c { +class e_db_class { public: - /* 0x5ac */ u8 field_0x5ac[0x66a - 0x5ac]; - /* 0x66A */ s16 field_0x66a; - /* 0x66C */ s16 field_0x66c; - /* 0x66E */ u8 field_0x66e[0x1270 - 0x66e]; + /* 0x0000 */ fopEn_enemy_c enemy; + /* 0x05AC */ request_of_phase_process_class field_0x5ac; + /* 0x05B4 */ u8 field_0x5b4; + /* 0x05B5 */ u8 field_0x5b5; + /* 0x05B6 */ u8 field_0x5b6; + /* 0x05B7 */ u8 field_0x5b7; + /* 0x05B8 */ mDoExt_McaMorfSO* field_0x5b8; + /* 0x05BC */ Z2CreatureEnemy sound; + /* 0x0660 */ int field_0x660; + /* 0x0664 */ u32 field_0x664; + /* 0x0668 */ s16 field_0x668; + /* 0x066A */ s16 field_0x66a; + /* 0x066C */ s16 field_0x66c; + /* 0x0670 */ f32 field_0x670; + /* 0x0674 */ cXyz field_0x674; + /* 0x0680 */ s16 field_0x680; + /* 0x0682 */ u8 field_0x682[0x0684 - 0x0682]; + /* 0x0684 */ s16 field_0x684; + /* 0x0688 */ f32 field_0x688; + /* 0x068C */ f32 field_0x68c; + /* 0x0690 */ f32 field_0x690; + /* 0x0694 */ s16 field_0x694[3]; + /* 0x069A */ s16 field_0x69a; + /* 0x069C */ cXyz field_0x69c[12]; + /* 0x072C */ csXyz field_0x72c[12]; + /* 0x0774 */ J3DModel* field_0x774[11]; + /* 0x07A0 */ u8 field_0x7A0[0x07D4 - 0x07A0]; + /* 0x07D4 */ f32 field_0x7d4[11]; + /* 0x0800 */ u8 field_0x800[0x0804 - 0x0800]; + /* 0x0804 */ mDoExt_3DlineMat1_c field_0x804; + /* 0x0840 */ f32 field_0x840; + /* 0x0844 */ f32 field_0x844; + /* 0x0848 */ f32 field_0x848; + /* 0x084C */ u8 field_0x84C[0x084E - 0x084C]; + /* 0x084E */ s16 field_0x84e; + /* 0x0850 */ u8 field_0x850; + /* 0x0851 */ u8 field_0x851; + /* 0x0852 */ s8 field_0x852; + /* 0x0854 */ f32 field_0x854; + /* 0x0858 */ f32 field_0x858; + /* 0x085C */ s16 field_0x85c; + /* 0x085E */ u8 field_0x85E[0x0860 - 0x085E]; + /* 0x0860 */ s16 field_0x860; + /* 0x0864 */ f32 field_0x864; + /* 0x0868 */ dCcD_Stts field_0x868; + /* 0x08A4 */ dCcD_Sph field_0x8a4; + /* 0x09DC */ dCcD_Sph field_0x9dc; + /* 0x0B14 */ u8 field_0xb14; + /* 0x0B18 */ dCcD_Sph field_0xb18[4]; + /* 0x0FF8 */ dCcU_AtInfo field_0xff8; + /* 0x101C */ dBgS_AcchCir field_0x101c; + /* 0x105C */ dBgS_ObjAcch field_0x105c; + /* 0x1234 */ fpc_ProcID field_0x1234; + /* 0x1238 */ u8 field_0x1238; + /* 0x1239 */ u8 field_0x1239; + /* 0x123A */ u8 field_0x123A[0x126C - 0x123A]; + /* 0x126C */ u8 field_0x126c; }; STATIC_ASSERT(sizeof(e_db_class) == 0x1270); diff --git a/include/d/actor/d_a_e_oc.h b/include/d/actor/d_a_e_oc.h index 1cd72f679ad..d0964399481 100644 --- a/include/d/actor/d_a_e_oc.h +++ b/include/d/actor/d_a_e_oc.h @@ -84,6 +84,7 @@ public: f32 getPlayerRange() const { return mPlayerRange; } int getActionMode() const { return mActionMode; } daE_OC_c* getTalkOc() const { return mpTalk; } + J3DModel* getOcModel() { return mpMorf->getModel(); } private: /* 0x5a0 */ request_of_phase_process_class mPhaseReqs[2]; diff --git a/include/d/actor/d_a_e_rdb.h b/include/d/actor/d_a_e_rdb.h index 7cbda2ddfb0..50f67eebdd0 100644 --- a/include/d/actor/d_a_e_rdb.h +++ b/include/d/actor/d_a_e_rdb.h @@ -193,7 +193,7 @@ public: /* 0x10F4 */ f32 mDemoCamFovy; /* 0x10F8 */ f32 field_0x10f8; /* 0x10FC */ u8 field_0x10fc[0x1104 - 0x10fc]; - /* 0x1104 */ s8 field_0x1104; + /* 0x1104 */ u8 field_0x1104; /* 0x1105 */ u8 field_0x1105[0x1108 - 0x1105]; /* 0x1108 */ dMsgFlow_c mMsgFlow; }; diff --git a/include/d/actor/d_a_obj_key.h b/include/d/actor/d_a_obj_key.h index f518b458bf0..78b5f9e9859 100644 --- a/include/d/actor/d_a_obj_key.h +++ b/include/d/actor/d_a_obj_key.h @@ -2,6 +2,17 @@ #define D_A_OBJ_KEY_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" + +struct obj_key_s { + /* 0x00 */ J3DModel* model[3]; + /* 0x0C */ cXyz pos[3]; + /* 0x30 */ cXyz field_0x30[3]; + /* 0x54 */ csXyz angle[3]; + /* 0x68 */ f32 ground_y[3]; + /* 0x74 */ fpc_ProcID key_actor_id; +}; /** * @ingroup actors-objects @@ -11,9 +22,27 @@ * @details * */ -class obj_key_class : public fopAc_ac_c { -private: - /* 0x568 */ u8 field_0x568[0x9b8 - 0x568]; +class obj_key_class { +public: + /* 0x000 */ fopAc_ac_c actor; + /* 0x568 */ request_of_phase_process_class phase; + /* 0x570 */ obj_key_s key_s; + /* 0x5E8 */ Z2SoundObjSimple sound; + /* 0x608 */ u8 field_0x608[0x60A - 0x608]; + /* 0x60A */ s16 action; + /* 0x60C */ s16 field_0x60c; + /* 0x60E */ s16 timers[2]; + /* 0x612 */ s16 field_0x612; + /* 0x614 */ s16 field_0x614; + /* 0x616 */ s16 field_0x616; + /* 0x618 */ f32 field_0x618; + /* 0x61C */ u8 hide; + /* 0x620 */ dBgS_AcchCir acchcir; + /* 0x660 */ dBgS_ObjAcch acch; + /* 0x838 */ dCcD_Stts ccStts; + /* 0x874 */ dCcD_Sph ccSph; + /* 0x9AC */ u32 field_0x9ac[2]; + /* 0x9B4 */ u8 HIOInit; }; STATIC_ASSERT(sizeof(obj_key_class) == 0x9b8); @@ -21,7 +50,11 @@ STATIC_ASSERT(sizeof(obj_key_class) == 0x9b8); class daObj_Key_HIO_c { public: /* 80C3F40C */ daObj_Key_HIO_c(); - /* 80C40F28 */ ~daObj_Key_HIO_c(); + /* 80C40F28 */ virtual ~daObj_Key_HIO_c() {} + + /* 0x4 */ s8 id; + /* 0x8 */ f32 size; + /* 0xC */ f32 chain_size; }; diff --git a/include/d/actor/d_a_obj_keyhole.h b/include/d/actor/d_a_obj_keyhole.h index 0df0d79a20a..ac3b92ea7f4 100644 --- a/include/d/actor/d_a_obj_keyhole.h +++ b/include/d/actor/d_a_obj_keyhole.h @@ -2,6 +2,20 @@ #define D_A_OBJ_KEYHOLE_H #include "f_op/f_op_actor_mng.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" + +struct kh_chain_s { + /* 0x000 */ J3DModel* model[16]; + /* 0x040 */ cXyz field_0x40; + /* 0x04C */ cXyz field_0x4c; + /* 0x058 */ cXyz field_0x58[16]; + /* 0x118 */ cXyz field_0x118[16]; + /* 0x1D8 */ csXyz field_0x1d8[16]; + /* 0x238 */ f32 field_0x238; + /* 0x23C */ dCcD_Stts ccStts; + /* 0x278 */ dCcD_Sph ccSph[3]; +}; /** * @ingroup actors-objects @@ -11,29 +25,58 @@ * @details * */ -class obj_keyhole_class : public fopAc_ac_c { +class obj_keyhole_class{ public: - void setOpen() { mOpenState = 1; } - bool checkOpenEnd() { return mOpenState == 3; } + void setOpen() { open_state = 1; } + void setOpenEnd() { open_state = 3; } + bool checkOpenEnd() { return open_state == 3; } + bool checkOpen() { return open_state == 1; } -private: - /* 0x0568 */ u8 field_0x0568[0x2ca4 - 0x568]; - /* 0x2ca4 */ u8 mOpenState; - /* 0x2ca5 */ u8 field_0x2ca5[0x2cb8 - 0x2ca5]; + /* 0x0000 */ fopAc_ac_c actor; + /* 0x0568 */ request_of_phase_process_class phase; + /* 0x0570 */ char* arcname; + /* 0x0574 */ mDoExt_McaMorf* lock_modelMorf; + /* 0x0578 */ J3DModel* lock_model; + /* 0x057C */ int chain_num; + /* 0x0580 */ int field_0x580; + /* 0x0584 */ u8 arg0; + /* 0x0588 */ Z2Creature sound; + /* 0x0618 */ s16 hit_timer; + /* 0x061A */ s16 field_0x61a; + /* 0x061C */ s16 action; + /* 0x061E */ s16 mode; + /* 0x0620 */ s16 timers[2]; + /* 0x0624 */ kh_chain_s chain_s[6]; + /* 0x2AE4 */ f32 field_0x2ae4; + /* 0x2AE8 */ f32 field_0x2ae8; + /* 0x2AEC */ s16 field_0x2aec; + /* 0x2AF0 */ f32 field_0x2af0; + /* 0x2AF4 */ f32 field_0x2af4; + /* 0x2AF8 */ f32 field_0x2af8; + /* 0x2AFC */ f32 field_0x2afc; + /* 0x2B00 */ s16 field_0x2b00; + /* 0x2B04 */ dCcD_Stts ccStts; + /* 0x2B40 */ dCcD_Sph ccSph; + /* 0x2C78 */ dCcU_AtInfo atInfo; + /* 0x2C9C */ u32 field_0x2c9c; + /* 0x2CA0 */ u32 field_0x2ca0; + /* 0x2CA4 */ u8 open_state; + /* 0x2CA5 */ u8 HIOInit; + /* 0x2CA6 */ s8 field_0x2ca6; + /* 0x2CA7 */ s8 hide_lock; + /* 0x2CA8 */ cXyz field_0x2ca8; + /* 0x2CB4 */ u8 field_0x2cb4; }; STATIC_ASSERT(sizeof(obj_keyhole_class) == 0x2CB8); -class kh_chain_s { -public: - /* 80C436A0 */ ~kh_chain_s(); - /* 80C437A4 */ kh_chain_s(); -}; - class daObj_Keyhole_HIO_c { public: /* 80C4124C */ daObj_Keyhole_HIO_c(); - /* 80C4394C */ ~daObj_Keyhole_HIO_c(); + /* 80C4394C */ virtual ~daObj_Keyhole_HIO_c() {} + + /* 0x4 */ s8 id; + /* 0x8 */ f32 obj_size; }; diff --git a/include/d/actor/d_a_obj_smallkey.h b/include/d/actor/d_a_obj_smallkey.h index 10be1143810..d6bb966664c 100644 --- a/include/d/actor/d_a_obj_smallkey.h +++ b/include/d/actor/d_a_obj_smallkey.h @@ -2,6 +2,8 @@ #define D_A_OBJ_SMALLKEY_H #include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_itembase.h" +#include "d/d_particle.h" /** * @ingroup actors-objects @@ -11,52 +13,88 @@ * @details * */ -class daKey_c : public fopAc_ac_c { +class daKey_c : public daItemBase_c { +private: + /* 80CDB2E0 */ void seStartTwinkle_private(u32); + public: + enum daKey_Status_e { + STATUS_INIT_e, + STATUS_PARENT_WAIT_e, + STATUS_WAIT_e, + STATUS_ORDER_GET_DEMO_e, + STATUS_GET_DEMO_e, + STATUS_SW_ON_WAIT_e, + STATUS_BOOMERANG_CARRY_e, + STATUS_E_GB_e, + }; + /* 80CD9F2C */ void initBaseMtx(); /* 80CD9F68 */ void setBaseMtx(); - /* 80CD9FDC */ void Create(); - /* 80CDA15C */ bool __CreateHeap(); - /* 80CDA164 */ void create(); + /* 80CD9FDC */ int Create(); + /* 80CDA15C */ int __CreateHeap(); + /* 80CDA164 */ int create(); /* 80CDA680 */ void bg_check(); - /* 80CDA7E8 */ void actionInitInit(); - /* 80CDA81C */ void actionInit(); - /* 80CDA8C8 */ void actionParentWaitInit(); - /* 80CDA8FC */ void actionParentWait(); - /* 80CDA9AC */ void actionWaitInit(); - /* 80CDAA28 */ void actionWait(); - /* 80CDAB74 */ void initActionOrderGetDemo(); - /* 80CDAC18 */ void actionOrderGetDemo(); - /* 80CDAC94 */ void actionGetDemo(); - /* 80CDAD28 */ void actionInitSwOnWait(); - /* 80CDADD4 */ void actionSwOnWait(); - /* 80CDAE54 */ void actionInitBoomerangCarry(); - /* 80CDAF40 */ void actionBoomerangCarry(); + /* 80CDA7E8 */ int actionInitInit(); + /* 80CDA81C */ int actionInit(); + /* 80CDA8C8 */ int actionParentWaitInit(); + /* 80CDA8FC */ int actionParentWait(); + /* 80CDA9AC */ int actionWaitInit(); + /* 80CDAA28 */ int actionWait(); + /* 80CDAB74 */ int initActionOrderGetDemo(); + /* 80CDAC18 */ int actionOrderGetDemo(); + /* 80CDAC94 */ int actionGetDemo(); + /* 80CDAD28 */ int actionInitSwOnWait(); + /* 80CDADD4 */ int actionSwOnWait(); + /* 80CDAE54 */ int actionInitBoomerangCarry(); + /* 80CDAF40 */ int actionBoomerangCarry(); /* 80CDAFB4 */ void effectSet(); /* 80CDB0D8 */ void effectStop(); /* 80CDB128 */ void effectCtrl(); - /* 80CDB2E0 */ void seStartTwinkle_private(u32); - /* 80CDB36C */ void actionInitE_GB(); - /* 80CDB3D8 */ void actionE_GB(); - /* 80CDB404 */ void execute(); - /* 80CDB5D4 */ void draw(); - /* 80CDB628 */ void _delete(); + /* 80CDB36C */ int actionInitE_GB(); + /* 80CDB3D8 */ int actionE_GB(); + /* 80CDB404 */ int execute(); + /* 80CDB5D4 */ int draw(); + /* 80CDB628 */ int _delete(); - void setPos(cXyz pos) { - current.pos = pos; + int getSwNo() { return fopAcM_GetParamBit(this, 16, 8); } + int getSaveBitNo() { return fopAcM_GetParamBit(this, 8, 8); } + + u16 getSwOnWaitTimer() { return field_0x93a & 0x3F; } + + void setStatus(u8 i_status) { mStatus = i_status; } + bool chkStatus(u8 i_status) { return mStatus == i_status; } + + void setPos(cXyz i_pos) { + current.pos = i_pos; } - void startMove(f32 param_1, f32 param_2) { - speedF = param_1; - speed.y = param_2; + void startMove(f32 i_speedF, f32 i_speedY) { + speedF = i_speedF; + speed.y = i_speedY; gravity = -6.0f; actionWaitInit(); } - /* 0x568 */ u8 field_0x568[0x978 - 0x568]; + void seStartTwinkle(u32 i_soundId, cXyz* param_1) { + field_0x978 = *param_1; + mDoAud_seStartLevel(i_soundId, &field_0x978, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + field_0x984 = 1; + } + + /* 0x92C */ fpc_ProcID mItemId; + /* 0x930 */ int field_0x930; + /* 0x934 */ u8 mStatus; + /* 0x935 */ u8 mSwOnTimer; + /* 0x936 */ u8 field_0x936; + /* 0x937 */ u8 mIsPrmInit; + /* 0x938 */ s16 field_0x938; + /* 0x93A */ u16 field_0x93a; + /* 0x93C */ dPa_followEcallBack mEffect[2]; + /* 0x964 */ csXyz mEffRot; + /* 0x96C */ cXyz mPrevSpeed; /* 0x978 */ cXyz field_0x978; /* 0x984 */ u8 field_0x984; - /* 0x985 */ u8 field_0x985[0x988 - 0x985]; }; STATIC_ASSERT(sizeof(daKey_c) == 0x988); diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h index 30c4827465f..9eab96cb47e 100644 --- a/include/d/d_tresure.h +++ b/include/d/d_tresure.h @@ -90,6 +90,10 @@ public: setPosition(i_tboxNo, 11, i_pos, -1); } + static void offStatus(int param_0, int i_flag) { + offStatus(0, param_0, i_flag); + } + static u8 const typeToTypeGroup[17][2]; static type_group_list mTypeGroupListAll[17]; static typeGroupData_c* mTypeGroupData; diff --git a/src/d/actor/d_a_door_bossL1.cpp b/src/d/actor/d_a_door_bossL1.cpp index 54e79537a40..5c6bac96f93 100644 --- a/src/d/actor/d_a_door_bossL1.cpp +++ b/src/d/actor/d_a_door_bossL1.cpp @@ -756,7 +756,7 @@ int daBdoorL1_c::unlockInit() { obj_keyhole_class* keyhole = (obj_keyhole_class*)fopAcM_SearchByID(mKeyHoleId); if (keyhole != NULL) { keyhole->setOpen(); - mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN, &keyhole->current.pos, 0, 0); + mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN, &keyhole->actor.current.pos, 0, 0); } field_0x59b = 1; return 1; diff --git a/src/d/actor/d_a_door_bossL5.cpp b/src/d/actor/d_a_door_bossL5.cpp index e0603d74b05..daf7f4c78f5 100644 --- a/src/d/actor/d_a_door_bossL5.cpp +++ b/src/d/actor/d_a_door_bossL5.cpp @@ -330,7 +330,7 @@ int daBdoorL5_c::unlockInit() { obj_keyhole_class* keyHole = (obj_keyhole_class*)fopAcM_SearchByID(mKeyHoleId); if (keyHole != NULL) { keyHole->setOpen(); - mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN_LV5, &keyHole->current.pos, 0, 0); + mDoAud_seStart(Z2SE_OBJ_BOSS_LOCK_OPEN_LV5, &keyHole->actor.current.pos, 0, 0); } dComIfGs_onSwitch(door_param2_c::getSwbit(this), fopAcM_GetRoomNo(this)); return 1; diff --git a/src/d/actor/d_a_e_mk.cpp b/src/d/actor/d_a_e_mk.cpp index f13a81285bd..04447a51151 100644 --- a/src/d/actor/d_a_e_mk.cpp +++ b/src/d/actor/d_a_e_mk.cpp @@ -89,7 +89,7 @@ static int daE_MK_Draw(e_mk_class* i_this) { static void* s_obj_delete(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor)) { if (fopAcM_GetName(i_actor) == PROC_E_DB) { - static_cast(i_actor)->health = 1000; + static_cast(i_actor)->enemy.health = 1000; } else if (fopAcM_GetName(i_actor) == PROC_E_DB_LEAF) { fopAcM_delete(static_cast(i_actor)); } @@ -216,7 +216,7 @@ static e_db_class* search_db(e_mk_class* i_this) { int i = 0; while (i < target_info_count) { pDekuBaba = (e_db_class*)target_info[i]; - sp44 = pDekuBaba->current.pos - i_this->enemy.current.pos; + sp44 = pDekuBaba->enemy.current.pos - i_this->enemy.current.pos; f32 fVar2 = sp44.abs(); if ((cM_rndF(1.0f) < 0.5f && fVar2 > 500.0f) && fVar2 < fVar1) { @@ -491,7 +491,7 @@ static void e_mk_shoot(e_mk_class* i_this) { break; case 10: - sp48 = i_this->field_0x70c->current.pos - i_this->enemy.current.pos; + sp48 = i_this->field_0x70c->enemy.current.pos - i_this->enemy.current.pos; cLib_addCalcAngleS2(&i_this->enemy.current.angle.y, cM_atan2s(sp48.x, sp48.z), 2, 0x1000); if (i_this->mpModelMorf->checkFrame(15.0f)) { i_this->mSound.startCreatureVoice(Z2SE_EN_MK_V_THROW_BOOM, -1); diff --git a/src/d/actor/d_a_obj_key.cpp b/src/d/actor/d_a_obj_key.cpp index 34bc1d6111a..fda4b61cb94 100644 --- a/src/d/actor/d_a_obj_key.cpp +++ b/src/d/actor/d_a_obj_key.cpp @@ -4,608 +4,673 @@ */ #include "d/actor/d_a_obj_key.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "d/actor/d_a_player.h" #include "d/actor/d_a_obj_smallkey.h" - - - -// -// Forward References: -// - -extern "C" void __ct__15daObj_Key_HIO_cFv(); -extern "C" static void daObj_Key_Draw__FP13obj_key_class(); -extern "C" static void s_count_sub__FPvPv(); -extern "C" static void s_master_sub__FPvPv(); -extern "C" static void masterkey_check__FP13obj_key_class(); -extern "C" static void action_check__FP13obj_key_class(); -extern "C" static void chain_control_00__FP13obj_key_class(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void chain_control_01__FP13obj_key_class(); -extern "C" static void action__FP13obj_key_class(); -extern "C" static void daObj_Key_Execute__FP13obj_key_class(); -extern "C" static bool daObj_Key_IsDelete__FP13obj_key_class(); -extern "C" static void daObj_Key_Delete__FP13obj_key_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daObj_Key_Create__FP10fopAc_ac_c(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__15daObj_Key_HIO_cFv(); -extern "C" void __sinit_d_a_obj_key_cpp(); -extern "C" static void func_80C40FAC(); -extern "C" static void func_80C40FB4(); -extern "C" void setPos__7daKey_cF4cXyz(); -extern "C" extern char const* const d_a_obj_key__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotS__FPA4_fs(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void mDoExt_modelUpdate__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void fpcSch_JudgeByID__FPvPv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void isDungeonItem__12dSv_memBit_cCFi(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC3Vec(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxTrans__FfffUc(); -extern "C" void MtxScale__FfffUc(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void deleteObject__14Z2SoundObjBaseFv(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_20(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_20(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_Counter[12 + 4 /* padding */]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C40FEC-80C40FF0 000000 0004+00 5/5 0/0 0/0 .rodata @3778 */ -SECTION_RODATA static f32 const lit_3778 = 1.0f; -COMPILER_STRIP_GATE(0x80C40FEC, &lit_3778); - -/* 80C40FF0-80C40FF4 000004 0004+00 1/1 0/0 0/0 .rodata @3779 */ -SECTION_RODATA static f32 const lit_3779 = 1.5f; -COMPILER_STRIP_GATE(0x80C40FF0, &lit_3779); - -/* 80C41094-80C41098 000000 0004+00 1/1 0/0 0/0 .data key_eno$4387 */ -SECTION_DATA static u8 key_eno[4] = { - 0x82, - 0x7A, - 0x82, - 0x7B, -}; - -/* 80C41098-80C410B8 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Key_Method */ -static actor_method_class l_daObj_Key_Method = { - (process_method_func)daObj_Key_Create__FP10fopAc_ac_c, - (process_method_func)daObj_Key_Delete__FP13obj_key_class, - (process_method_func)daObj_Key_Execute__FP13obj_key_class, - (process_method_func)daObj_Key_IsDelete__FP13obj_key_class, - (process_method_func)daObj_Key_Draw__FP13obj_key_class, -}; - -/* 80C410B8-80C410E8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_KEY */ -extern actor_process_profile_definition g_profile_OBJ_KEY = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_OBJ_KEY, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(obj_key_class), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 44, // mPriority - &l_daObj_Key_Method, // sub_method - 0x00044100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80C410E8-80C410F4 000054 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80C410F4-80C41100 000060 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80C41100-80C41124 00006C 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80C40FB4, - (void*)NULL, - (void*)NULL, - (void*)func_80C40FAC, -}; - -/* 80C41124-80C41130 000090 000C+00 2/2 0/0 0/0 .data __vt__15daObj_Key_HIO_c */ -SECTION_DATA extern void* __vt__15daObj_Key_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15daObj_Key_HIO_cFv, -}; +#include "d/actor/d_a_e_dn.h" +#include "d/actor/d_a_e_rd.h" +#include "d/actor/d_a_e_rdb.h" +#include "d/actor/d_a_e_oc.h" +#include "d/actor/d_a_e_db.h" +#include "SSystem/SComponent/c_counter.h" /* 80C3F40C-80C3F43C 0000EC 0030+00 1/1 0/0 0/0 .text __ct__15daObj_Key_HIO_cFv */ daObj_Key_HIO_c::daObj_Key_HIO_c() { - // NONMATCHING + id = -1; + size = 1.0f; + chain_size = 1.5f; } /* 80C3F43C-80C3F4D4 00011C 0098+00 1/0 0/0 0/0 .text daObj_Key_Draw__FP13obj_key_class */ -static void daObj_Key_Draw(obj_key_class* param_0) { - // NONMATCHING +static int daObj_Key_Draw(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + + if (!i_this->hide) { + g_env_light.settingTevStruct(16, &actor->current.pos, &actor->tevStr); + + for (int i = 0; i < 2; i++) { + g_env_light.setLightTevColorType_MAJI(i_this->key_s.model[i], &actor->tevStr); + mDoExt_modelUpdate(i_this->key_s.model[i]); + } + } + + return 1; } -/* ############################################################################################## */ /* 80C41138-80C4113C 000008 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_80C41138[4]; - -/* 80C4113C-80C41148 00000C 000C+00 1/1 0/0 0/0 .bss @3773 */ -static u8 lit_3773[12]; +static u8 l_HIOInit; /* 80C41148-80C41158 000018 0010+00 4/4 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[16]; +static daObj_Key_HIO_c l_HIO; /* 80C41158-80C4115A 000028 0002+00 2/2 0/0 0/0 .bss target_info_count */ -static u8 target_info_count[2]; +static s16 target_info_count; /* 80C3F4D4-80C3F540 0001B4 006C+00 1/1 0/0 0/0 .text s_count_sub__FPvPv */ -static void s_count_sub(void* param_0, void* param_1) { - // NONMATCHING +static void* s_count_sub(void* i_actor, void* i_other) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_OBJ_KEY && ((fopAc_ac_c*)i_actor)->field_0x560 != 0) { + ((fopAc_ac_c*)i_actor)->health = target_info_count; + target_info_count++; + } + + return NULL; } -/* ############################################################################################## */ -/* 80C40FF4-80C40FF8 000008 0004+00 2/2 0/0 0/0 .rodata @3836 */ -SECTION_RODATA static f32 const lit_3836 = 40000.0f; -COMPILER_STRIP_GATE(0x80C40FF4, &lit_3836); - /* 80C3F540-80C3F600 000220 00C0+00 1/1 0/0 0/0 .text s_master_sub__FPvPv */ -static void s_master_sub(void* param_0, void* param_1) { - // NONMATCHING +static void* s_master_sub(void* i_actor, void* i_other) { + if ((fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_DN) || + fopAcM_GetName(i_actor) == PROC_E_RD || + fopAcM_GetName(i_actor) == PROC_E_RDB || + fopAcM_GetName(i_actor) == PROC_E_DB || + fopAcM_GetName(i_actor) == PROC_E_HB || + fopAcM_GetName(i_actor) == PROC_E_OC || + fopAcM_GetName(i_actor) == PROC_ALINK) + { + f32 x_dist = ((fopAc_ac_c*)i_actor)->current.pos.x - ((fopAc_ac_c*)i_other)->current.pos.x; + f32 z_dist = ((fopAc_ac_c*)i_actor)->current.pos.z - ((fopAc_ac_c*)i_other)->current.pos.z; + + if ((SQUARE(x_dist) + SQUARE(z_dist)) < SQUARE(200.0f)) { + return i_actor; + } + } + + return NULL; } /* 80C3F600-80C3F6B4 0002E0 00B4+00 1/1 0/0 0/0 .text masterkey_check__FP13obj_key_class */ -static void masterkey_check(obj_key_class* param_0) { - // NONMATCHING +static void masterkey_check(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + + daKey_c* pkey = (daKey_c*)fopAcM_SearchByName(PROC_Obj_SmallKey); + if (pkey != NULL) { + f32 x_dist = actor->current.pos.x - pkey->current.pos.x; + f32 z_dist = actor->current.pos.z - pkey->current.pos.z; + if ((SQUARE(x_dist) + SQUARE(z_dist)) < SQUARE(200.0f)) { + i_this->key_s.key_actor_id = fopAcM_GetID(pkey); + i_this->action = 1; + } + } else if (i_this->timers[0] == 0) { + fopAcM_delete(actor); + } } /* 80C3F6B4-80C3F728 000394 0074+00 1/1 0/0 0/0 .text action_check__FP13obj_key_class */ -static void action_check(obj_key_class* param_0) { - // NONMATCHING +static void action_check(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + + fopAc_ac_c* pactor = (fopAc_ac_c*)fpcM_Search(s_master_sub, i_this); + if (pactor != NULL) { + i_this->action = 3; + actor->parentActorID = fopAcM_GetID(pactor); + } else if (i_this->timers[0] == 0) { + i_this->action = 2; + } } -/* ############################################################################################## */ -/* 80C40FF8-80C40FFC 00000C 0004+00 0/3 0/0 0/0 .rodata @3978 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3978 = 5.0f; -COMPILER_STRIP_GATE(0x80C40FF8, &lit_3978); -#pragma pop - -/* 80C40FFC-80C41000 000010 0004+00 0/2 0/0 0/0 .rodata @3979 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3979 = 20.0f; -COMPILER_STRIP_GATE(0x80C40FFC, &lit_3979); -#pragma pop - -/* 80C41000-80C41004 000014 0004+00 0/2 0/0 0/0 .rodata @3980 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3980[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C41000, &lit_3980); -#pragma pop - -/* 80C41004-80C41008 000018 0004+00 0/1 0/0 0/0 .rodata @3981 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3981 = 41.5f; -COMPILER_STRIP_GATE(0x80C41004, &lit_3981); -#pragma pop - -/* 80C41008-80C4100C 00001C 0004+00 0/2 0/0 0/0 .rodata @3982 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3982 = -20.0f; -COMPILER_STRIP_GATE(0x80C41008, &lit_3982); -#pragma pop - -/* 80C4100C-80C41010 000020 0004+00 0/3 0/0 0/0 .rodata @3983 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3983 = 200.0f; -COMPILER_STRIP_GATE(0x80C4100C, &lit_3983); -#pragma pop - -/* 80C41010-80C41014 000024 0004+00 0/1 0/0 0/0 .rodata @3984 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3984 = 16.0f; -COMPILER_STRIP_GATE(0x80C41010, &lit_3984); -#pragma pop - -/* 80C41014-80C41018 000028 0004+00 0/2 0/0 0/0 .rodata @3985 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3985 = 10.0f; -COMPILER_STRIP_GATE(0x80C41014, &lit_3985); -#pragma pop - /* 80C3F728-80C3FB84 000408 045C+00 1/1 0/0 0/0 .text chain_control_00__FP13obj_key_class */ -static void chain_control_00(obj_key_class* param_0) { - // NONMATCHING +static void chain_control_00(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + + switch (i_this->field_0x60c) { + case 0: + if (i_this->acch.ChkGroundHit()) { + actor->speed.x = cM_rndFX(5.0f); + actor->speed.z = cM_rndFX(5.0f); + actor->speed.y = 20.0f; + + i_this->sound.startSound(JA_SE_CM_MAGBALL_BOUND, 0, -1); + i_this->field_0x60c++; + } + + actor->shape_angle.y += 0x200; + actor->shape_angle.x += 0x900; + break; + case 1: + if (i_this->acch.ChkGroundHit()) { + actor->speed.z = 0.0f; + actor->speed.x = 0.0f; + + i_this->sound.startSound(JA_SE_CM_MAGBALL_BOUND, 0, -1); + i_this->field_0x60c++; + } + /* fallthrough */ + case 2: + cLib_addCalcAngleS2(&actor->shape_angle.x, 0, 1, 0x1000); + cLib_addCalcAngleS2(&actor->shape_angle.z, 0, 1, 0x1000); + break; + } + + cXyz sp48; + cXyz sp3C; + dBgS_GndChk gndchk; + int i; + + i_this->key_s.pos[1] = actor->current.pos; + i_this->key_s.angle[1] = actor->shape_angle; + + cXyz* ppos = i_this->key_s.pos; + csXyz* pangle = i_this->key_s.angle; + f32* pgnd_y = i_this->key_s.ground_y; + + f32 temp_f25 = -20.0f + TREG_F(0); + f32 sp20 = TREG_F(3); + + sp48.y = 0.0f; + sp48.x = 0.0f; + sp48.z = 17.0f + (15.0f + (4.5f + (5.0f + TREG_F(2)))); + + for (i = 0; i >= 0; i--, ppos--, pangle--, pgnd_y--) { + f32 temp_f30 = ppos[0].x - ppos[1].x; + f32 temp_f26; + f32 temp_f29 = ppos[0].z - ppos[1].z; + + f32 var_f28 = ppos[0].y + temp_f25; + if (var_f28 <= *pgnd_y) { + var_f28 = *pgnd_y; + } + + temp_f26 = var_f28 - ppos[1].y; + + s16 spC, spA; + spA = (s16)cM_atan2s(temp_f30, temp_f29); + spC = -cM_atan2s(temp_f26, JMAFastSqrt(SQUARE(temp_f30) + SQUARE(temp_f29))); + + cMtx_YrotS(*calc_mtx, spA); + cMtx_XrotM(*calc_mtx, spC); + MtxPosition(&sp48, &sp3C); + ppos[0].x = ppos[1].x + sp3C.x; + ppos[0].y = ppos[1].y + sp3C.y; + ppos[0].z = ppos[1].z + sp3C.z; + pangle->x = spC; + pangle->y = spA; + + if (((g_Counter.mCounter0 + i) & 15) == 0) { + Vec sp30; + sp30 = *ppos; + sp30.y += 200.0f; + gndchk.SetPos(&sp30); + + *pgnd_y = TREG_F(6) + (5.0f + dComIfG_Bgsp().GroundCross(&gndchk)); + if (*pgnd_y - ppos->y > 200.0f) { + *pgnd_y = ppos->y; + } + } + } + + s16 rot_z = 0; + for (int i = 0; i < 2; i++) { + MtxTrans(i_this->key_s.pos[i].x, i_this->key_s.pos[i].y, i_this->key_s.pos[i].z, 0); + cMtx_YrotM(*calc_mtx, i_this->key_s.angle[i].y); + cMtx_XrotM(*calc_mtx, i_this->key_s.angle[i].x); + + f32 size; + f32 trans_z; + if (i == 1) { + size = l_HIO.size; + trans_z = 2.0f + (14.0f + TREG_F(4)); + cMtx_ZrotM(*calc_mtx, i_this->key_s.angle[i].z); + } else { + size = l_HIO.chain_size; + trans_z = 5.0f + (5.0f + TREG_F(5)); + cMtx_ZrotM(*calc_mtx, rot_z); + rot_z += 0x4000; + } + + MtxScale(size, size, size, 1); + MtxTrans(0.0f, 0.0f, trans_z, 1); + cMtx_XrotM(*calc_mtx, -0x4000); + i_this->key_s.model[i]->setBaseTRMtx(*calc_mtx); + } + + i_this->hide = FALSE; } -/* 80C3FB84-80C3FBC0 000864 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C41018-80C4101C 00002C 0004+00 0/2 0/0 0/0 .rodata @4347 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4347 = 50.0f; -COMPILER_STRIP_GATE(0x80C41018, &lit_4347); -#pragma pop - -/* 80C4101C-80C41020 000030 0004+00 0/1 0/0 0/0 .rodata @4348 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4348 = 10000.0f; -COMPILER_STRIP_GATE(0x80C4101C, &lit_4348); -#pragma pop - -/* 80C41020-80C41024 000034 0004+00 0/1 0/0 0/0 .rodata @4349 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4349 = -1.0f; -COMPILER_STRIP_GATE(0x80C41020, &lit_4349); -#pragma pop - -/* 80C41024-80C41028 000038 0004+00 0/2 0/0 0/0 .rodata @4350 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4350 = 30.0f; -COMPILER_STRIP_GATE(0x80C41024, &lit_4350); -#pragma pop - -/* 80C41028-80C4102C 00003C 0004+00 0/1 0/0 0/0 .rodata @4351 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4351 = 12.0f; -COMPILER_STRIP_GATE(0x80C41028, &lit_4351); -#pragma pop - -/* 80C4102C-80C41030 000040 0004+00 0/1 0/0 0/0 .rodata @4352 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4352 = -5.0f; -COMPILER_STRIP_GATE(0x80C4102C, &lit_4352); -#pragma pop - -/* 80C41030-80C41034 000044 0004+00 0/1 0/0 0/0 .rodata @4353 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4353 = 7.0f; -COMPILER_STRIP_GATE(0x80C41030, &lit_4353); -#pragma pop - -/* 80C41034-80C41038 000048 0004+00 0/2 0/0 0/0 .rodata @4354 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4354 = -3.0f; -COMPILER_STRIP_GATE(0x80C41034, &lit_4354); -#pragma pop - -/* 80C41038-80C4103C 00004C 0004+00 0/1 0/0 0/0 .rodata @4355 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4355 = -15.0f; -COMPILER_STRIP_GATE(0x80C41038, &lit_4355); -#pragma pop - -/* 80C4103C-80C41040 000050 0004+00 0/1 0/0 0/0 .rodata @4356 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4356 = -50.0f; -COMPILER_STRIP_GATE(0x80C4103C, &lit_4356); -#pragma pop - -/* 80C41040-80C41044 000054 0004+00 0/1 0/0 0/0 .rodata @4357 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4357 = -30.0f; -COMPILER_STRIP_GATE(0x80C41040, &lit_4357); -#pragma pop - -/* 80C41044-80C41048 000058 0004+00 0/1 0/0 0/0 .rodata @4358 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4358 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C41044, &lit_4358); -#pragma pop - -/* 80C41048-80C4104C 00005C 0004+00 0/1 0/0 0/0 .rodata @4359 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4359 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C41048, &lit_4359); -#pragma pop - -/* 80C4104C-80C41054 000060 0004+04 0/1 0/0 0/0 .rodata @4360 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4360[1 + 1 /* padding */] = { - 1.0f / 5.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80C4104C, &lit_4360); -#pragma pop - -/* 80C41054-80C4105C 000068 0008+00 0/1 0/0 0/0 .rodata @4361 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4361[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C41054, &lit_4361); -#pragma pop - -/* 80C4105C-80C41064 000070 0008+00 0/1 0/0 0/0 .rodata @4362 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4362[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C4105C, &lit_4362); -#pragma pop - -/* 80C41064-80C4106C 000078 0008+00 0/1 0/0 0/0 .rodata @4363 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4363[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C41064, &lit_4363); -#pragma pop - -/* 80C4106C-80C41070 000080 0004+00 0/1 0/0 0/0 .rodata @4364 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4364 = 44.5f; -COMPILER_STRIP_GATE(0x80C4106C, &lit_4364); -#pragma pop - -/* 80C41070-80C41074 000084 0004+00 0/1 0/0 0/0 .rodata @4365 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4365 = 2.0f; -COMPILER_STRIP_GATE(0x80C41070, &lit_4365); -#pragma pop - -/* 80C41074-80C41078 000088 0004+00 0/1 0/0 0/0 .rodata @4366 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4366 = 8.0f; -COMPILER_STRIP_GATE(0x80C41074, &lit_4366); -#pragma pop - /* 80C3FBC0-80C406EC 0008A0 0B2C+00 1/1 0/0 0/0 .text chain_control_01__FP13obj_key_class */ -static void chain_control_01(obj_key_class* param_0) { - // NONMATCHING +static void chain_control_01(obj_key_class* i_this) { + fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->actor; + + cXyz spC4; + cXyz spB8; + Vec spAC; + dBgS_GndChk gndchk; + int i; + + fopAc_ac_c* pparent = fopAcM_SearchByID(actor->parentActorID); + daKey_c* pkey = (daKey_c*)fopAcM_SearchByID(i_this->key_s.key_actor_id); + + if (pparent == NULL) { + if (pkey != NULL) { + spB8 = actor->current.pos; + spB8.y += 200.0f; + + if (fopAcM_gc_c::gndCheck(&spB8)) { + spB8.y = 50.0f + fopAcM_gc_c::getGroundY(); + } + + pkey->setPos(spB8); + pkey->speed.y = 50.0f; + } + + fopAcM_delete(actor); + return; + } + + if (pkey != NULL) { + cXyz spA0; + spA0 = actor->current.pos; + spA0.x += 10000.0f; + spA0.y += 10000.0f; + + pkey->setPos(spA0); + pkey->seStartTwinkle(Z2SE_OBJ_KEY_TWINKLE, &actor->current.pos); + pkey->speed.y = 0.0f; + pkey->old.pos = actor->current.pos; + } + + cXyz sp94(i_this->key_s.pos[0]); + actor->scale.x = l_HIO.size; + actor->field_0x560 = 0; + u8 sp8 = 0; + + J3DModel* parent_model; + if (fopAcM_GetName(pparent) == PROC_E_DN) { + e_dn_class* dn = (e_dn_class*)pparent; + parent_model = dn->mpModelMorf->getModel(); + + MTXCopy(parent_model->getAnmMtx(1), *calc_mtx); + spC4.set(5.0f + KREG_F(0), 30.0f + KREG_F(1), 20.0f + KREG_F(2)); + MtxPosition(&spC4, &spB8); + } else if (fopAcM_GetName(pparent) == PROC_E_RD) { + e_rd_class* rd = (e_rd_class*)pparent; + parent_model = rd->mpModelMorf->getModel(); + + MTXCopy(parent_model->getAnmMtx(VREG_S(0) + 12), *calc_mtx); + spC4.set(12.0f + VREG_F(0), -5.0f + VREG_F(1), VREG_F(2)); + MtxPosition(&spC4, &spB8); + rd->actor.field_0x567 = 1; + } else if (fopAcM_GetName(pparent) == PROC_E_RDB) { + e_rdb_class* rdb = (e_rdb_class*)pparent; + parent_model = rdb->mpModelMorf->getModel(); + + if (rdb->field_0x1104 != 0) { + MTXCopy(parent_model->getAnmMtx(XREG_S(2) + 21), *calc_mtx); + spC4.set(7.0f + VREG_F(0), -3.0f + VREG_F(1), VREG_F(2)); + } else { + MTXCopy(parent_model->getAnmMtx(XREG_S(2) + 22), *calc_mtx); + spC4.set(-5.0f + VREG_F(0), -15.0f + VREG_F(1), -50.0f + VREG_F(2)); + } + + MtxPosition(&spC4, &spB8); + + if (rdb->field_0xfe5 != 0) { + fopAcM_delete(pkey); + fopAcM_delete(actor); + } + } else if (fopAcM_GetName(pparent) == PROC_E_OC) { + daE_OC_c* oc = (daE_OC_c*)pparent; + parent_model = oc->getOcModel(); + + MTXCopy(parent_model->getAnmMtx(nREG_S(0) + 15), *calc_mtx); + spC4.set(5.0f + nREG_F(0), nREG_F(1), nREG_F(2)); + MtxPosition(&spC4, &spB8); + sp8 = 1; + } else if (fopAcM_GetName(pparent) == PROC_E_DB || fopAcM_GetName(pparent) == PROC_E_HB) { + e_db_class* db = (e_db_class*)pparent; + + if (db->field_0x66a == 20) { + spB8 = db->field_0x69c[2]; + } else { + spB8 = db->field_0x69c[TREG_S(3) + 9]; + } + } else { + MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(TREG_S(3) + 2), *calc_mtx); + spC4.set(-30.0f + KREG_F(0), -15.0f + KREG_F(1), 12.0f + KREG_F(2)); + MtxPosition(&spC4, &spB8); + actor->scale.x = 1.0f; + actor->field_0x560 = 1; + target_info_count = 0; + fpcM_Search(s_count_sub, i_this); + } + + i_this->key_s.pos[0] = spB8; + + cXyz* ppos = &i_this->key_s.pos[1]; + csXyz* pangle = &i_this->key_s.angle[1]; + f32* pgnd_y = &i_this->key_s.ground_y[1]; + + f32 sp20 = -20.0f + TREG_F(0); + + f32 temp_f27; + f32 temp_f31, temp_f30; + temp_f30 = sp94.x - i_this->key_s.pos[0].x; + temp_f31 = sp94.z - i_this->key_s.pos[0].z; + + f32 temp_f29 = (temp_f30 * temp_f30) + (temp_f31 * temp_f31); + + if (temp_f29 > (20.0f + TREG_F(7))) { + temp_f29 = (0.4f + TREG_F(9)) * JMAFastSqrt(temp_f29); + if (i_this->field_0x618 < temp_f29) { + i_this->field_0x618 = temp_f29; + if (i_this->field_0x618 > 20.0f) { + i_this->field_0x618 = 20.0f; + } + + i_this->field_0x616 = cM_rndFX(200.0f); + i_this->field_0x614 = (s16)cM_atan2s(temp_f30, temp_f31); + i_this->field_0x612 = 0; + } + } + + cXyz sp88; + i_this->field_0x612 += (s16)3000; + i_this->field_0x614 += i_this->field_0x616; + cMtx_YrotS(*calc_mtx, i_this->field_0x614); + + spC4.x = spC4.y = 0.0f; + spC4.z = -i_this->field_0x618 * cM_ssin(i_this->field_0x612); + MtxPosition(&spC4, &sp88); + + cLib_addCalc0(&i_this->field_0x618, 0.1f, 0.2f + TREG_F(10)); + + cXyz sp7C(0.0f, 0.0f, 0.0f); + s16 sp10, spE, spC; + + if (sp8) { + spC4 = i_this->key_s.pos[0] - pparent->current.pos; + + spC = cM_atan2s(spC4.x, spC4.z); + spC -= pparent->shape_angle.y; + if (spC > 0x4000 || spC < -0x4000) { + cMtx_YrotS(*calc_mtx, ((pparent->shape_angle.y + TREG_S(5)) - 10000)); + spC4.x = 0.0f; + spC4.y = 0.0f; + spC4.z = (1.0f + TREG_F(17)) * spC4.abs(); + MtxPosition(&spC4, &sp7C); + } + } + + spC4.x = spC4.y = 0.0f; + spC4.z = 15.0f + (20.0f + (4.5f + (5.0f + TREG_F(2)))); + + for (i = 1; i < 3; i++, ppos++, pangle++, pgnd_y++) { + if (i == 2) { + sp88.x *= 2.0f; + sp88.z *= 2.0f; + } + + temp_f30 = sp7C.x + (sp88.x + (ppos[0].x - ppos[-1].x)); + temp_f31 = sp7C.z + (sp88.z + (ppos[0].z - ppos[-1].z)); + + f32 var_f26 = ppos->y + sp20; + if (var_f26 <= *pgnd_y) { + var_f26 = *pgnd_y; + } + + temp_f27 = var_f26 - ppos[-1].y; + + sp10 = -cM_atan2s(temp_f27, temp_f31); + spE = (s16)cM_atan2s(temp_f30, JMAFastSqrt(SQUARE(temp_f27) + SQUARE(temp_f31))); + cMtx_XrotS(*calc_mtx, sp10); + cMtx_YrotM(*calc_mtx, spE); + MtxPosition(&spC4, &spB8); + ppos[0].x = ppos[-1].x + spB8.x; + ppos[0].y = ppos[-1].y + spB8.y; + ppos[0].z = ppos[-1].z + spB8.z; + pangle[-1].x = sp10; + pangle[-1].y = spE; + + if (((g_Counter.mCounter0 + i) & 15) == 0) { + spAC = *ppos; + spAC.y += 200.0f; + gndchk.SetPos(&spAC); + + *pgnd_y = TREG_F(6) + (10.0f + dComIfG_Bgsp().GroundCross(&gndchk)); + if (*pgnd_y - ppos->y > 200.0f) { + *pgnd_y = ppos->y; + } + } + } + + s16 spA; + if (fopAcM_GetName(pparent) == PROC_E_RDB) { + e_rdb_class* rdb = (e_rdb_class*)pparent; + if (rdb->field_0x1104 != 0) { + spA = -(pparent->shape_angle.y + TREG_S(7) + 0x4000); + } else { + spA = -(pparent->shape_angle.y + TREG_S(7)); + } + } else { + spA = -(pparent->shape_angle.y + TREG_S(7) + 0x4000); + } + + f32 var_f28; + f32 var_f25 = 0.0f; + + for (int i = 0; i < 2; i++) { + MtxTrans(i_this->key_s.pos[i].x, i_this->key_s.pos[i].y, i_this->key_s.pos[i].z, 0); + cMtx_XrotM(*calc_mtx, i_this->key_s.angle[i].x); + cMtx_YrotM(*calc_mtx, i_this->key_s.angle[i].y); + spA += (s16)(TREG_S(8) + 0x4000); + + if (i == 1) { + var_f28 = actor->scale.x; + var_f25 = 20.0f + TREG_F(4); + } else { + var_f28 = l_HIO.chain_size; + var_f25 = 3.0f + (5.0f + TREG_F(5)); + } + + cMtx_ZrotM(*calc_mtx, spA); + MtxScale(var_f28, var_f28, var_f28, 1); + + if (i == 1) { + cMtx_XrotM(*calc_mtx, (actor->health * (TREG_S(1) + 500))); + } + + MtxTrans(0.0f, 0.0f, var_f25, 1); + cMtx_XrotM(*calc_mtx, -0x4000); + i_this->key_s.model[i]->setBaseTRMtx(*calc_mtx); + + if (i == 1) { + spC4.set(0.0f, 0.0f, 0.0f); + MtxPosition(&spC4, &actor->current.pos); + actor->shape_angle.y = i_this->key_s.angle[1].y; + } + } + + i_this->hide = FALSE; } /* 80C406EC-80C408B4 0013CC 01C8+00 1/1 0/0 0/0 .text action__FP13obj_key_class */ -static void action(obj_key_class* param_0) { - // NONMATCHING +static void action(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + f32 temp_f31 = -3.0f + TREG_F(12); + BOOL set_particles = TRUE; + + switch (i_this->action) { + case 0: + masterkey_check(i_this); + set_particles = FALSE; + break; + case 1: + action_check(i_this); + set_particles = FALSE; + break; + case 2: + chain_control_00(i_this); + actor->current.pos += actor->speed; + actor->speed.y -= 5.0f; + + actor->current.pos.y += temp_f31; + actor->old.pos.y += temp_f31; + i_this->acch.CrrPos(dComIfG_Bgsp()); + actor->current.pos.y -= temp_f31; + actor->old.pos.y -= temp_f31; + + if (fopAcM_searchPlayerDistance(actor) < 50.0f) { + i_this->action = 3; + actor->parentActorID = fopAcM_GetID(dComIfGp_getPlayer(0)); + } + break; + case 3: + chain_control_01(i_this); + break; + } + + if (set_particles) { + for (int i = 0; i < 2; i++) { + static u16 key_eno[] = {0x827A, 0x827B}; + i_this->field_0x9ac[i] = dComIfGp_particle_set(i_this->field_0x9ac[i], key_eno[i], &actor->current.pos, NULL, NULL); + } + } } /* 80C408B4-80C4093C 001594 0088+00 2/1 0/0 0/0 .text daObj_Key_Execute__FP13obj_key_class */ -static void daObj_Key_Execute(obj_key_class* param_0) { - // NONMATCHING +static int daObj_Key_Execute(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + + for (int i = 0; i < 2; i++) { + if (i_this->timers[i] != 0) { + i_this->timers[i]--; + } + } + + action(i_this); + + i_this->sound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + return 1; } /* 80C4093C-80C40944 00161C 0008+00 1/0 0/0 0/0 .text daObj_Key_IsDelete__FP13obj_key_class */ -static bool daObj_Key_IsDelete(obj_key_class* param_0) { - return true; +static int daObj_Key_IsDelete(obj_key_class* i_this) { + return 1; } -/* ############################################################################################## */ -/* 80C4107C-80C4107C 000090 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C4107C = "Obj_key"; -#pragma pop - /* 80C40944-80C409AC 001624 0068+00 1/0 0/0 0/0 .text daObj_Key_Delete__FP13obj_key_class */ -static void daObj_Key_Delete(obj_key_class* param_0) { - // NONMATCHING +static int daObj_Key_Delete(obj_key_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + fpc_ProcID id = fopAcM_GetID(actor); + dComIfG_resDelete(&i_this->phase, "Obj_key"); + + if (i_this->HIOInit) { + l_HIOInit = FALSE; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (actor->heap != NULL) { + i_this->sound.deleteObject(); + } + + return 1; } /* 80C409AC-80C40AB8 00168C 010C+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + obj_key_class* a_this = (obj_key_class*)i_this; + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_key", 5); + JUT_ASSERT(969, modelData != 0); + + for (int i = 0; i < 2; i++) { + if (i == 1) { + modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_key", 3); + JUT_ASSERT(975, modelData != 0); + } + + a_this->key_s.model[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (a_this->key_s.model[i] == NULL) { + return 0; + } + + a_this->key_s.pos[i] = i_this->current.pos; + } + + a_this->sound.init(&i_this->current.pos, 1); + return 1; } -/* ############################################################################################## */ -/* 80C41078-80C4107C 00008C 0004+00 0/1 0/0 0/0 .rodata @4555 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4555 = -200.0f; -COMPILER_STRIP_GATE(0x80C41078, &lit_4555); -#pragma pop - -/* 80C4107C-80C4107C 000090 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C41084 = "F_SP118"; -SECTION_DEAD static char const* const stringBase_80C4108C = "D_MN09"; -#pragma pop - /* 80C40AB8-80C40DE4 001798 032C+00 1/0 0/0 0/0 .text daObj_Key_Create__FP10fopAc_ac_c */ -static void daObj_Key_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObj_Key_Create(fopAc_ac_c* i_this) { + obj_key_class* a_this = (obj_key_class*)i_this; + fopAcM_SetupActor(i_this, obj_key_class); + + int phase_state = dComIfG_resLoad(&a_this->phase, "Obj_key"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("OBJ_KEY PARAM %x\n", fopAcM_GetParam(i_this)); + + if (strcmp(dComIfGp_getStartStageName(), "F_SP118") != 0) { + if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 && dComIfGs_isStageMiddleBoss()) { + return cPhs_ERROR_e; + } + + int swbit = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(i_this))) { + return cPhs_ERROR_e; + } + } + + OS_REPORT("OBJ_KEY//////////////OBJ_KEY SET 1 !!\n"); + + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x1020)) { + OS_REPORT("//////////////OBJ_KEY SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////OBJ_KEY SET 2 !!\n"); + + if (!l_HIOInit) { + a_this->HIOInit = TRUE; + l_HIOInit = TRUE; + l_HIO.id = mDoHIO_CREATE_CHILD("カギOBJ", &l_HIO); + } + + fopAcM_SetMtx(i_this, a_this->key_s.model[0]->getBaseTRMtx()); + fopAcM_SetMin(i_this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(i_this, 200.0f, 200.0f, 200.0f); + + a_this->acch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &a_this->acchcir, fopAcM_GetSpeed_p(i_this), NULL, NULL); + a_this->acchcir.SetWall(30.0f, 30.0f); + + a_this->action = 0; + a_this->timers[0] = 10; + a_this->key_s.key_actor_id = fpcM_ERROR_PROCESS_ID_e; + a_this->hide = TRUE; + + daObj_Key_Execute(a_this); + } + + return phase_state; } -/* 80C40DE4-80C40E2C 001AC4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} +/* 80C41098-80C410B8 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Key_Method */ +static actor_method_class l_daObj_Key_Method = { + (process_method_func)daObj_Key_Create, + (process_method_func)daObj_Key_Delete, + (process_method_func)daObj_Key_Execute, + (process_method_func)daObj_Key_IsDelete, + (process_method_func)daObj_Key_Draw, +}; -/* 80C40E2C-80C40E74 001B0C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80C40E74-80C40EE4 001B54 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80C40EE4-80C40F20 001BC4 003C+00 1/1 0/0 0/0 .text __dt__5csXyzFv */ -// csXyz::~csXyz() { -extern "C" void __dt__5csXyzFv() { - // NONMATCHING -} - -/* 80C40F20-80C40F24 001C00 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */ -// csXyz::csXyz() { -extern "C" void __ct__5csXyzFv() { - /* empty function */ -} - -/* 80C40F24-80C40F28 001C04 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80C40F28-80C40F70 001C08 0048+00 2/1 0/0 0/0 .text __dt__15daObj_Key_HIO_cFv */ -daObj_Key_HIO_c::~daObj_Key_HIO_c() { - // NONMATCHING -} - -/* 80C40F70-80C40FAC 001C50 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_key_cpp */ -void __sinit_d_a_obj_key_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C40F70, __sinit_d_a_obj_key_cpp); -#pragma pop - -/* 80C40FAC-80C40FB4 001C8C 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80C40FAC() { - // NONMATCHING -} - -/* 80C40FB4-80C40FBC 001C94 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80C40FB4() { - // NONMATCHING -} - -/* 80C40FBC-80C40FD8 001C9C 001C+00 1/1 0/0 0/0 .text setPos__7daKey_cF4cXyz */ -// void daKey_c::setPos(cXyz param_0) { -extern "C" void setPos__7daKey_cF4cXyz() { - // NONMATCHING -} - -/* 80C4107C-80C4107C 000090 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80C410B8-80C410E8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_KEY */ +extern actor_process_profile_definition g_profile_OBJ_KEY = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_OBJ_KEY, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(obj_key_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 44, // mPriority + &l_daObj_Key_Method, // sub_method + 0x00044100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; diff --git a/src/d/actor/d_a_obj_keyhole.cpp b/src/d/actor/d_a_obj_keyhole.cpp index 885e0987a77..f22577523c7 100644 --- a/src/d/actor/d_a_obj_keyhole.cpp +++ b/src/d/actor/d_a_obj_keyhole.cpp @@ -4,1138 +4,887 @@ */ #include "d/actor/d_a_obj_keyhole.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "d/actor/d_a_player.h" +#include "Z2AudioLib/Z2Instances.h" - - -// -// Forward References: -// - -extern "C" void __ct__19daObj_Keyhole_HIO_cFv(); -extern "C" static void nodeCallBack__FP8J3DJointi(); -extern "C" static void daObj_Keyhole_Draw__FP17obj_keyhole_class(); -extern "C" static void chain_control1__FP17obj_keyhole_classP10kh_chain_si(); -extern "C" void __dt__4cXyzFv(); -extern "C" static void chain_control1_2__FP17obj_keyhole_classP10kh_chain_si(); -extern "C" static void chain_control2__FP17obj_keyhole_classP10kh_chain_si(); -extern "C" static void chain_control3__FP17obj_keyhole_classP10kh_chain_si(); -extern "C" static void chain_move__FP17obj_keyhole_class(); -extern "C" static void open__FP17obj_keyhole_class(); -extern "C" static void drop__FP17obj_keyhole_class(); -extern "C" static void daObj_Keyhole_Execute__FP17obj_keyhole_class(); -extern "C" static bool daObj_Keyhole_IsDelete__FP17obj_keyhole_class(); -extern "C" static void daObj_Keyhole_Delete__FP17obj_keyhole_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void daObj_Keyhole_Create__FP10fopAc_ac_c(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__10kh_chain_sFv(); -extern "C" void __ct__10kh_chain_sFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__19daObj_Keyhole_HIO_cFv(); -extern "C" void __sinit_d_a_obj_keyhole_cpp(); -extern "C" extern char const* const d_a_obj_keyhole__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotS__FPA4_fs(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void -__ct__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl(); -extern "C" void setAnm__14mDoExt_McaMorfFP15J3DAnmTransformiffffPv(); -extern "C" void play__14mDoExt_McaMorfFP3VecUlSc(); -extern "C" void entryDL__14mDoExt_McaMorfFv(); -extern "C" void modelCalc__14mDoExt_McaMorfFv(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void addSimpleModel__14dComIfG_play_cFP12J3DModelDataiUc(); -extern "C" void removeSimpleModel__14dComIfG_play_cFP12J3DModelDatai(); -extern "C" void entrySimpleModel__14dComIfG_play_cFP8J3DModeli(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void def_se_set__FP10Z2CreatureP8cCcD_ObjUlP10fopAc_ac_c(); -extern "C" void at_power_check__FP11dCcU_AtInfo(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rndF__Ff(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc2__FPffff(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void MtxTrans__FfffUc(); -extern "C" void MtxScale__FfffUc(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void stopAnime__10Z2CreatureFv(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_16(); -extern "C" void _savegpr_20(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_16(); -extern "C" void _restgpr_20(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80C439E4-80C439E8 000000 0004+00 10/10 0/0 0/0 .rodata @3655 */ -SECTION_RODATA static f32 const lit_3655 = 1.0f; -COMPILER_STRIP_GATE(0x80C439E4, &lit_3655); - -/* 80C43ABC-80C43ABC 0000D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C43ABC = "Obj_keyh"; -SECTION_DEAD static char const* const stringBase_80C43AC5 = "Obj_bkey"; -SECTION_DEAD static char const* const stringBase_80C43ACE = "Obj_bkey2"; -SECTION_DEAD static char const* const stringBase_80C43AD8 = "Obj_bkey3"; -SECTION_DEAD static char const* const stringBase_80C43AE2 = "Obj_bkey5"; -#pragma pop - -/* 80C43AEC-80C43AF8 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80C43AF8-80C43B0C 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80C43B0C-80C43B34 000020 0028+00 0/1 0/0 0/0 .data bmd_d$4377 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 bmd_d[40] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, - 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, -}; -#pragma pop - -/* 80C43B34-80C43B5C 000048 0028+00 0/1 0/0 0/0 .data mdl_f$4378 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mdl_f[40] = { - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80C43B5C-80C43B84 000070 0028+00 0/1 0/0 0/0 .data bck_d$4396 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 bck_d[40] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, -}; -#pragma pop - -/* 80C43B84-80C43BAC 000098 0028+00 0/1 0/0 0/0 .data cbmd_d$4397 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 cbmd_d[40] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, -}; -#pragma pop - -/* 80C43BAC-80C43BD4 -00001 0028+00 1/1 0/0 0/0 .data arc_name$4469 */ -SECTION_DATA static void* arc_name[10] = { - (void*)&d_a_obj_keyhole__stringBase0, - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x12), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x1C), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x26), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), - (void*)(((char*)&d_a_obj_keyhole__stringBase0) + 0x9), -}; - -/* 80C43BD4-80C43C14 0000E8 0040+00 1/1 0/0 0/0 .data cc_sph_src$4485 */ -static dCcD_SrcSph cc_sph_src = { - { - {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdbf, 0x3}, 0x75}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {{0.0f, 0.0f, 0.0f}, 60.0f} // mSph - } // mSphAttr -}; - -/* 80C43C14-80C43C34 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Keyhole_Method */ -static actor_method_class l_daObj_Keyhole_Method = { - (process_method_func)daObj_Keyhole_Create__FP10fopAc_ac_c, - (process_method_func)daObj_Keyhole_Delete__FP17obj_keyhole_class, - (process_method_func)daObj_Keyhole_Execute__FP17obj_keyhole_class, - (process_method_func)daObj_Keyhole_IsDelete__FP17obj_keyhole_class, - (process_method_func)daObj_Keyhole_Draw__FP17obj_keyhole_class, -}; - -/* 80C43C34-80C43C64 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_KEYHOLE */ -extern actor_process_profile_definition g_profile_OBJ_KEYHOLE = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_OBJ_KEYHOLE, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x00002CB8, // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 45, // mPriority - &l_daObj_Keyhole_Method, // sub_method - 0x00044100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80C43C64-80C43C70 000178 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80C43C70-80C43C7C 000184 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80C43C7C-80C43C88 000190 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80C43C88-80C43C94 00019C 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80C43C94-80C43CA0 0001A8 000C+00 2/2 0/0 0/0 .data __vt__19daObj_Keyhole_HIO_c */ -SECTION_DATA extern void* __vt__19daObj_Keyhole_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__19daObj_Keyhole_HIO_cFv, -}; +UNK_REL_DATA /* 80C4124C-80C41270 0000EC 0024+00 1/1 0/0 0/0 .text __ct__19daObj_Keyhole_HIO_cFv */ daObj_Keyhole_HIO_c::daObj_Keyhole_HIO_c() { - // NONMATCHING + id = -1; + obj_size = 1.0f; } -/* ############################################################################################## */ -/* 80C439E8-80C439EC 000004 0004+00 1/9 0/0 0/0 .rodata @3689 */ -SECTION_RODATA static u8 const lit_3689[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C439E8, &lit_3689); - /* 80C41270-80C4134C 000110 00DC+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ -static void nodeCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int nodeCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + int jnt_no = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + obj_keyhole_class* i_this = (obj_keyhole_class*)model->getUserArea(); + + if (i_this != NULL) { + if (jnt_no == 1) { + MTXCopy(model->getAnmMtx(jnt_no), *calc_mtx); + MtxTrans(i_this->field_0x2afc, 0.0f, 0.0f, 1); + cMtx_XrotM(*calc_mtx, i_this->field_0x2b00); + model->setAnmMtx(jnt_no, *calc_mtx); + MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); + } + } + } + + return 1; } /* 80C4134C-80C41454 0001EC 0108+00 1/0 0/0 0/0 .text daObj_Keyhole_Draw__FP17obj_keyhole_class */ -static void daObj_Keyhole_Draw(obj_keyhole_class* param_0) { - // NONMATCHING +static int daObj_Keyhole_Draw(obj_keyhole_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + g_env_light.settingTevStruct(16, &actor->current.pos, &actor->tevStr); + + if (!i_this->hide_lock) { + if (i_this->lock_model != NULL) { + g_env_light.setLightTevColorType_MAJI(i_this->lock_model, &actor->tevStr); + mDoExt_modelUpdateDL(i_this->lock_model); + } else { + g_env_light.setLightTevColorType_MAJI(i_this->lock_modelMorf->getModel(), &actor->tevStr); + i_this->lock_modelMorf->entryDL(); + } + } + + for (int i = 0; i < 6; i++) { + kh_chain_s* chain_s = &i_this->chain_s[i]; + for (int j = 0; j < i_this->chain_num; j++) { + dComIfGp_entrySimpleModel(chain_s->model[j], fopAcM_GetRoomNo(actor)); + } + } + + return 1; } -/* ############################################################################################## */ -/* 80C439EC-80C439F0 000008 0004+00 0/3 0/0 0/0 .rodata @3763 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3763 = 10.0f; -COMPILER_STRIP_GATE(0x80C439EC, &lit_3763); -#pragma pop - -/* 80C439F0-80C439F4 00000C 0004+00 0/5 0/0 0/0 .rodata @3764 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3764 = 30.0f; -COMPILER_STRIP_GATE(0x80C439F0, &lit_3764); -#pragma pop - -/* 80C439F4-80C439F8 000010 0004+00 0/2 0/0 0/0 .rodata @3765 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3765 = -13.0f; -COMPILER_STRIP_GATE(0x80C439F4, &lit_3765); -#pragma pop - /* 80C41454-80C41654 0002F4 0200+00 1/1 0/0 0/0 .text * chain_control1__FP17obj_keyhole_classP10kh_chain_si */ -static void chain_control1(obj_keyhole_class* param_0, kh_chain_s* param_1, int param_2) { - // NONMATCHING +static void chain_control1(obj_keyhole_class* i_this, kh_chain_s* i_chain_s, int unused) { + fopAc_ac_c* actor = &i_this->actor; + cXyz sp24; + cXyz sp18; + int i; + s16 spA, sp8; + + i_chain_s->field_0x58[0] = i_chain_s->field_0x40; + + cXyz* var_r31 = &i_chain_s->field_0x58[1]; + csXyz* sp10 = &i_chain_s->field_0x1d8[1]; + + f32 var_f28; + if (i_this->arg0 == 0) { + var_f28 = 10.0f + i_this->field_0x2ae8 + ZREG_F(4); + } else { + var_f28 = 10.0f + (10.0f + i_this->field_0x2ae8 + ZREG_F(4)); + } + + sp24.x = 0.0f; + sp24.y = 0.0f; + + if (i_this->arg0 == 0) { + sp24.z = 10.0f + TREG_F(0); + } else { + sp24.z = 30.0f + TREG_F(0); + } + + f32 temp_f26 = -13.0f + TREG_F(1); + + for (i = 1; i < i_this->chain_num; i++, var_r31++, sp10++) { + f32 temp_f31 = var_r31[0].x - var_r31[-1].x; + f32 temp_f27; + f32 temp_f30 = var_r31[0].z - var_r31[-1].z; + f32 var_f29 = var_r31[0].y + temp_f26; + + if (var_f29 <= var_f28) { + var_f29 = var_f28; + } + + temp_f27 = var_f29 - var_r31[-1].y; + + spA = (s16)cM_atan2s(temp_f31, temp_f30); + sp8 = -cM_atan2s(temp_f27, JMAFastSqrt(SQUARE(temp_f31) + SQUARE(temp_f30))); + + cMtx_YrotS(*calc_mtx, spA); + cMtx_XrotM(*calc_mtx, sp8); + MtxPosition(&sp24, &sp18); + + var_r31[0].x = var_r31[-1].x + sp18.x; + var_r31[0].y = var_r31[-1].y + sp18.y; + var_r31[0].z = var_r31[-1].z + sp18.z; + } } -/* 80C41654-80C41690 0004F4 003C+00 3/3 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C439F8-80C439FC 000014 0004+00 0/2 0/0 0/0 .rodata @3845 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3845 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C439F8, &lit_3845); -#pragma pop - -/* 80C439FC-80C43A00 000018 0004+00 0/1 0/0 0/0 .rodata @3846 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3846 = -20.0f; -COMPILER_STRIP_GATE(0x80C439FC, &lit_3846); -#pragma pop - -/* 80C43A00-80C43A04 00001C 0004+00 0/1 0/0 0/0 .rodata @3847 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3847 = 33.0f / 50.0f; -COMPILER_STRIP_GATE(0x80C43A00, &lit_3847); -#pragma pop - -/* 80C43A04-80C43A08 000020 0004+00 0/4 0/0 0/0 .rodata @3848 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3848 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C43A04, &lit_3848); -#pragma pop - /* 80C41690-80C419C4 000530 0334+00 1/1 0/0 0/0 .text * chain_control1_2__FP17obj_keyhole_classP10kh_chain_si */ -static void chain_control1_2(obj_keyhole_class* param_0, kh_chain_s* param_1, int param_2) { - // NONMATCHING -} +static void chain_control1_2(obj_keyhole_class* i_this, kh_chain_s* i_chain_s, int unused) { + fopAc_ac_c* actor = &i_this->actor; + cXyz sp48; + cXyz sp3C; + int i; + s16 spA, sp8; -/* ############################################################################################## */ -/* 80C43A08-80C43A0C 000024 0004+00 0/4 0/0 0/0 .rodata @3900 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3900 = 0.5f; -COMPILER_STRIP_GATE(0x80C43A08, &lit_3900); -#pragma pop + i_chain_s->field_0x58[0] = i_chain_s->field_0x40; + + cXyz* var_r31 = &i_chain_s->field_0x58[1]; + cXyz* var_r28 = &i_chain_s->field_0x118[1]; + csXyz* var_r27 = &i_chain_s->field_0x1d8[1]; + + f32 temp_f25; + f32 var_f28; + if (i_this->arg0 == 0) { + var_f28 = 10.0f + i_this->field_0x2ae8 + ZREG_F(4); + } else { + var_f28 = 10.0f + (10.0f + i_this->field_0x2ae8 + ZREG_F(4)); + } + + sp48.x = 0.0f; + sp48.y = 0.0f; + + f32 var_f27, var_f26; + if (i_this->arg0 != 0) { + sp48.z = 30.0f + TREG_F(0); + var_f26 = 0.8f + TREG_F(9); + var_f27 = -20.0f + TREG_F(1); + } else { + sp48.z = 10.0f + TREG_F(0); + var_f26 = 0.66f + TREG_F(9); + var_f27 = -13.0f + TREG_F(1); + } + + cXyz sp30; + + for (i = 1; i < i_this->chain_num; i++, var_r31++, var_r27++, var_r28++) { + sp30.x = (0.2f + TREG_F(7)) * (i_chain_s->field_0x238 * cM_ssin((i_this->field_0x61a * (TREG_S(6) + 5500)) + (i * (TREG_S(5) - 5300)))); + sp30.z = (0.2f + TREG_F(7)) * (i_chain_s->field_0x238 * cM_ssin((i_this->field_0x61a * (TREG_S(6) + 5800)) + (i * (TREG_S(5) - 5500)))); + + temp_f25 = sp30.x + (var_r28[0].x + (var_r31[0].x - var_r31[-1].x)); + f32 var_f29; + f32 temp_f31; + f32 temp_f30 = sp30.z + (var_r28[0].z + (var_r31[0].z - var_r31[-1].z)); + + var_f29 = var_r31[0].y + var_f27; + if (var_f29 <= var_f28) { + var_f29 = var_f28; + } + + temp_f31 = var_f29 - var_r31[-1].y; + + sp8 = -cM_atan2s(temp_f31, temp_f30); + spA = (s16)cM_atan2s(temp_f25, JMAFastSqrt(SQUARE(temp_f31) + SQUARE(temp_f30))); + + cMtx_XrotS(*calc_mtx, sp8); + cMtx_YrotM(*calc_mtx, spA); + MtxPosition(&sp48, &sp3C); + *var_r28 = *var_r31; + + var_r31[0].x = var_r31[-1].x + sp3C.x; + var_r31[0].y = var_r31[-1].y + sp3C.y; + var_r31[0].z = var_r31[-1].z + sp3C.z; + + *var_r28 = (*var_r31 - *var_r28) * var_f26; + var_r27[-1].y = spA; + var_r27[-1].x = sp8; + + if (i == i_this->chain_num - 1) { + var_r27[0] = var_r27[-1]; + } + } +} /* 80C419C4-80C41C84 000864 02C0+00 1/1 0/0 0/0 .text * chain_control2__FP17obj_keyhole_classP10kh_chain_si */ -static void chain_control2(obj_keyhole_class* param_0, kh_chain_s* param_1, int param_2) { - // NONMATCHING -} +static void chain_control2(obj_keyhole_class* i_this, kh_chain_s* i_chain_s, int unused) { + cXyz sp30; + cXyz sp24; + fopAc_ac_c* actor = &i_this->actor; + int i; + s16 spE, spC; -/* ############################################################################################## */ -/* 80C43A0C-80C43A14 000028 0008+00 1/1 0/0 0/0 .rodata @3928 */ -SECTION_RODATA static u8 const lit_3928[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C43A0C, &lit_3928); + i_chain_s->field_0x58[i_this->chain_num - 1] = i_chain_s->field_0x4c; + + cXyz* var_r31 = &i_chain_s->field_0x58[i_this->chain_num - 2]; + csXyz* var_r28 = &i_chain_s->field_0x1d8[i_this->chain_num - 2]; + + sp30.x = 0.0f; + sp30.y = 0.0f; + + if (i_this->arg0 == 0) { + sp30.z = 10.0f + TREG_F(0); + } else { + sp30.z = 30.0f + TREG_F(0); + } + + cXyz sp18; + + for (i = i_this->chain_num - 2; i >= 0; i--, var_r31--, var_r28--) { + sp18.x = (0.2f + TREG_F(7)) * (i_chain_s->field_0x238 * cM_ssin(((i_this->field_0x61a * (TREG_S(6) + 5500)) + (i * (TREG_S(5) + 3300))))); + sp18.y = (0.5f + TREG_F(6)) * (i_chain_s->field_0x238 * cM_ssin(((i_this->field_0x61a * (TREG_S(7) + 6000)) + (i * (TREG_S(5) + 3800))))); + sp18.z = (0.2f + TREG_F(7)) * (i_chain_s->field_0x238 * cM_ssin(((i_this->field_0x61a * (TREG_S(6) + 5800)) + (i * (TREG_S(5) + 3500))))); + + f32 temp_f31 = sp18.x + (var_r31[0].x - var_r31[1].x); + f32 temp_f29 = sp18.y + (var_r31[0].y - var_r31[1].y); + f32 temp_f30 = sp18.z + (var_r31[0].z - var_r31[1].z); + + spC = (s16)cM_atan2s(temp_f31, temp_f30); + spE = -cM_atan2s(temp_f29, JMAFastSqrt(SQUARE(temp_f31) + SQUARE(temp_f30))); + + cMtx_YrotS(*calc_mtx, spC); + cMtx_XrotM(*calc_mtx, spE); + MtxPosition(&sp30, &sp24); + + var_r31[0].x = var_r31[1].x + sp24.x; + var_r31[0].y = var_r31[1].y + sp24.y; + var_r31[0].z = var_r31[1].z + sp24.z; + var_r28[0].x = -spE; + var_r28[0].y = spC + 0x8000; + + if (i == i_this->chain_num - 2) { + var_r28[1] = var_r28[0]; + } + } +} /* 80C41C84-80C41D6C 000B24 00E8+00 1/1 0/0 0/0 .text * chain_control3__FP17obj_keyhole_classP10kh_chain_si */ -static void chain_control3(obj_keyhole_class* param_0, kh_chain_s* param_1, int param_2) { - // NONMATCHING +static void chain_control3(obj_keyhole_class* i_this, kh_chain_s* i_chain_s, int unused) { + cXyz sp30; + cXyz sp24; + + sp30 = i_chain_s->field_0x58[0] - i_chain_s->field_0x40; + + cXyz* var_r28 = i_chain_s->field_0x58; + for (int i = 0; i < i_this->chain_num; i++, var_r28++) { + *var_r28 -= sp30 * ((f32)((i_this->chain_num - 1) - i) / (f32)(i_this->chain_num - 1)); + } } -/* ############################################################################################## */ -/* 80C43A14-80C43A18 000030 0004+00 0/1 0/0 0/0 .rodata @4111 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4111 = 140.0f; -COMPILER_STRIP_GATE(0x80C43A14, &lit_4111); -#pragma pop +UNK_REL_BSS -/* 80C43A18-80C43A1C 000034 0004+00 0/1 0/0 0/0 .rodata @4112 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4112 = 130.0f; -COMPILER_STRIP_GATE(0x80C43A18, &lit_4112); -#pragma pop - -/* 80C43A1C-80C43A20 000038 0004+00 0/1 0/0 0/0 .rodata @4113 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4113 = -140.0f; -COMPILER_STRIP_GATE(0x80C43A1C, &lit_4113); -#pragma pop - -/* 80C43A20-80C43A24 00003C 0004+00 0/1 0/0 0/0 .rodata @4114 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4114 = 170.0f; -COMPILER_STRIP_GATE(0x80C43A20, &lit_4114); -#pragma pop - -/* 80C43A24-80C43A28 000040 0004+00 0/1 0/0 0/0 .rodata @4115 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4115 = -170.0f; -COMPILER_STRIP_GATE(0x80C43A24, &lit_4115); -#pragma pop - -/* 80C43A28-80C43A2C 000044 0004+00 0/1 0/0 0/0 .rodata @4116 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4116 = -100.0f; -COMPILER_STRIP_GATE(0x80C43A28, &lit_4116); -#pragma pop - -/* 80C43A2C-80C43A30 000048 0004+00 0/1 0/0 0/0 .rodata @4117 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4117 = 2.0f; -COMPILER_STRIP_GATE(0x80C43A2C, &lit_4117); -#pragma pop - -/* 80C43A30-80C43A34 00004C 0004+00 0/3 0/0 0/0 .rodata @4118 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4118 = 150.0f; -COMPILER_STRIP_GATE(0x80C43A30, &lit_4118); -#pragma pop - -/* 80C43A34-80C43A38 000050 0004+00 0/2 0/0 0/0 .rodata @4119 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4119 = 7.0f; -COMPILER_STRIP_GATE(0x80C43A34, &lit_4119); -#pragma pop - -/* 80C43A38-80C43A3C 000054 0004+00 0/1 0/0 0/0 .rodata @4120 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4120 = 20.0f; -COMPILER_STRIP_GATE(0x80C43A38, &lit_4120); -#pragma pop - -/* 80C43A3C-80C43A40 000058 0004+00 0/1 0/0 0/0 .rodata @4121 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4121 = 35.0f; -COMPILER_STRIP_GATE(0x80C43A3C, &lit_4121); -#pragma pop - -/* 80C43A40-80C43A44 00005C 0004+00 0/1 0/0 0/0 .rodata @4122 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4122 = 13000.0f; -COMPILER_STRIP_GATE(0x80C43A40, &lit_4122); -#pragma pop - -/* 80C43A44-80C43A48 000060 0004+00 0/1 0/0 0/0 .rodata @4123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4123 = 25.0f; -COMPILER_STRIP_GATE(0x80C43A44, &lit_4123); -#pragma pop - -/* 80C43A48-80C43A4C 000064 0004+00 0/2 0/0 0/0 .rodata @4124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4124 = 12.0f; -COMPILER_STRIP_GATE(0x80C43A48, &lit_4124); -#pragma pop - -/* 80C43A4C-80C43A50 000068 0004+00 0/1 0/0 0/0 .rodata @4125 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4125 = 19.0f / 20.0f; -COMPILER_STRIP_GATE(0x80C43A4C, &lit_4125); -#pragma pop - -/* 80C43A50-80C43A54 00006C 0004+00 0/2 0/0 0/0 .rodata @4126 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4126 = -5.0f; -COMPILER_STRIP_GATE(0x80C43A50, &lit_4126); -#pragma pop - -/* 80C43CA8-80C43CAC 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80C43CAC-80C43CB0 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ -#pragma push -#pragma force_active on -static u8 lit_1107[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CB0-80C43CB4 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ -#pragma push -#pragma force_active on -static u8 lit_1105[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CB4-80C43CB8 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ -#pragma push -#pragma force_active on -static u8 lit_1104[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CB8-80C43CBC 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ -#pragma push -#pragma force_active on -static u8 lit_1099[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CBC-80C43CC0 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ -#pragma push -#pragma force_active on -static u8 lit_1097[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CC0-80C43CC4 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ -#pragma push -#pragma force_active on -static u8 lit_1095[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CC4-80C43CC8 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ -#pragma push -#pragma force_active on -static u8 lit_1094[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CC8-80C43CCC 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ -#pragma push -#pragma force_active on -static u8 lit_1057[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CCC-80C43CD0 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ -#pragma push -#pragma force_active on -static u8 lit_1055[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CD0-80C43CD4 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ -#pragma push -#pragma force_active on -static u8 lit_1053[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CD4-80C43CD8 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ -#pragma push -#pragma force_active on -static u8 lit_1052[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CD8-80C43CDC 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ -#pragma push -#pragma force_active on -static u8 lit_1014[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CDC-80C43CE0 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ -#pragma push -#pragma force_active on -static u8 lit_1012[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CE0-80C43CE4 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ -#pragma push -#pragma force_active on -static u8 lit_1010[1 + 3 /* padding */]; -#pragma pop - -/* 80C43CE4-80C43CE8 -00001 0004+00 2/2 0/0 0/0 .bss None */ -/* 80C43CE4 0001+00 data_80C43CE4 @1009 */ /* 80C43CE5 0003+00 data_80C43CE5 None */ -static u8 struct_80C43CE4[4]; - -/* 80C43CE8-80C43CF4 000048 000C+00 1/1 0/0 0/0 .bss @3650 */ -static u8 lit_3650[12]; +static u8 l_HIOInit; /* 80C43CF4-80C43D00 000054 000C+00 4/4 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[12]; - -/* 80C43D00-80C43D10 000060 000C+04 0/1 0/0 0/0 .bss @3934 */ -#pragma push -#pragma force_active on -static u8 lit_3934[12 + 4 /* padding */]; -#pragma pop - -/* 80C43D10-80C43D1C 000070 000C+00 0/1 0/0 0/0 .bss @3937 */ -#pragma push -#pragma force_active on -static u8 lit_3937[12]; -#pragma pop - -/* 80C43D1C-80C43D28 00007C 000C+00 0/1 0/0 0/0 .bss @3938 */ -#pragma push -#pragma force_active on -static u8 lit_3938[12]; -#pragma pop - -/* 80C43D28-80C43D34 000088 000C+00 0/1 0/0 0/0 .bss @3939 */ -#pragma push -#pragma force_active on -static u8 lit_3939[12]; -#pragma pop - -/* 80C43D34-80C43D40 000094 000C+00 0/1 0/0 0/0 .bss @3940 */ -#pragma push -#pragma force_active on -static u8 lit_3940[12]; -#pragma pop - -/* 80C43D40-80C43D4C 0000A0 000C+00 0/1 0/0 0/0 .bss @3941 */ -#pragma push -#pragma force_active on -static u8 lit_3941[12]; -#pragma pop - -/* 80C43D4C-80C43D94 0000AC 0048+00 0/1 0/0 0/0 .bss lock_pos$3933 */ -#pragma push -#pragma force_active on -static u8 lock_pos[72]; -#pragma pop +static daObj_Keyhole_HIO_c l_HIO; /* 80C41D6C-80C42380 000C0C 0614+00 1/1 0/0 0/0 .text chain_move__FP17obj_keyhole_class */ -static void chain_move(obj_keyhole_class* param_0) { - // NONMATCHING -} +static void chain_move(obj_keyhole_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + fopAc_ac_c* player = dComIfGp_getPlayer(0); -/* ############################################################################################## */ -/* 80C43A54-80C43A58 000070 0004+00 0/2 0/0 0/0 .rodata @4165 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4165 = 8.0f; -COMPILER_STRIP_GATE(0x80C43A54, &lit_4165); -#pragma pop + static cXyz lock_pos[] = { + cXyz(140.0f, 130.0f, 0.0f), + cXyz(-140.0f, 130.0f, 0.0f), + cXyz(170.0f, 30.0f, 0.0f), + cXyz(-170.0f, 30.0f, 0.0f), + cXyz(140.0f, -100.0f, 0.0f), + cXyz(-140.0f, -100.0f, 0.0f), + }; + + f32 var_f31 = 1.0f; + if (i_this->arg0 != 0) { + var_f31 = 2.0f + ZREG_F(0); + } + + for (int i = 0; i < 6; i++) { + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + MtxScale(var_f31, var_f31, var_f31, 1); + MtxPosition(&lock_pos[i], &i_this->chain_s[i].field_0x40); + i_this->chain_s[i].field_0x40 += actor->home.pos; + + if (i_this->field_0x2ca6 == 0) { + chain_control1(i_this, &i_this->chain_s[i], i); + i_this->chain_s[i].field_0x4c = i_this->field_0x2ca8; + chain_control2(i_this, &i_this->chain_s[i], i); + chain_control3(i_this, &i_this->chain_s[i], i); + cLib_addCalc0(&i_this->chain_s[i].field_0x238, 0.2f, 0.5f + TREG_F(5)); + } else { + chain_control1_2(i_this, &i_this->chain_s[i], i); + f32 var_f28 = 0.5f + TREG_F(5); + cLib_addCalc0(&i_this->chain_s[i].field_0x238, 0.2f, var_f28); + } + + if (daPy_getPlayerActorClass() != NULL && daPy_getPlayerActorClass()->checkFrontRollCrash()) { + f32 temp_f30 = i_this->chain_s[i].field_0x58[0].x - player->current.pos.x; + f32 temp_f29 = i_this->chain_s[i].field_0x58[0].z - player->current.pos.z; + + if (JMAFastSqrt(SQUARE(temp_f30) + SQUARE(temp_f29)) < 150.0f) { + i_this->chain_s[i].field_0x238 = 7.0f + TREG_F(4); + } else { + temp_f30 = i_this->chain_s[i].field_0x58[i_this->chain_num - 1].x - player->current.pos.x; + temp_f29 = i_this->chain_s[i].field_0x58[i_this->chain_num - 1].z - player->current.pos.z; + if (JMAFastSqrt(SQUARE(temp_f30) + SQUARE(temp_f29)) < 150.0f) { + i_this->chain_s[i].field_0x238 = 7.0f + TREG_F(4); + } + } + } else { + for (int j = 0; j < 3; j++) { + cXyz sp28; + if (i_this->arg0 == 0) { + sp28 = i_this->chain_s[i].field_0x58[(j * 4) + 4]; + i_this->chain_s[i].ccSph[j].SetR(20.0f + JREG_F(4)); + } else { + sp28 = i_this->chain_s[i].field_0x58[(j * 3) + 3]; + i_this->chain_s[i].ccSph[j].SetR(35.0f + JREG_F(4)); + } + + if (i_this->hit_timer != 0) { + sp28.y -= 13000.0f; + } + + i_this->chain_s[i].ccSph[j].SetC(sp28); + dComIfG_Ccsp()->Set(&i_this->chain_s[i].ccSph[j]); + + if (i_this->chain_s[i].ccSph[j].ChkTgHit()) { + i_this->atInfo.mpCollider = i_this->chain_s[i].ccSph[j].GetTgHitObj(); + i_this->hit_timer = 10; + at_power_check(&i_this->atInfo); + + if (i_this->atInfo.mHitType == 2) { + i_this->chain_s[i].field_0x238 = 25.0f + TREG_F(8); + } else { + i_this->chain_s[i].field_0x238 = 12.0f + TREG_F(4); + } + + i_this->atInfo.mpCollider = i_this->chain_s[i].ccSph[j].GetTgHitObj(); + def_se_set(&i_this->sound, i_this->atInfo.mpCollider, 0x35, NULL); + } + } + } + } + + f32 temp_f31 = 0.25f + (0.7f + TREG_F(2)); + + kh_chain_s* chain; + s16 sp8; + for (int i = 0; i < 6; i++) { + chain = &i_this->chain_s[i]; + sp8 = 0; + + for (int j = 0; j < i_this->chain_num; j++) { + MtxTrans(chain->field_0x58[j].x, chain->field_0x58[j].y, chain->field_0x58[j].z, 0); + + if (i_this->field_0x2ca6 == 0) { + cMtx_YrotM(*calc_mtx, chain->field_0x1d8[j].y); + cMtx_XrotM(*calc_mtx, chain->field_0x1d8[j].x); + } else { + cMtx_XrotM(*calc_mtx, chain->field_0x1d8[j].x); + cMtx_YrotM(*calc_mtx, chain->field_0x1d8[j].y); + } + + cMtx_ZrotM(*calc_mtx, sp8); + MtxScale(temp_f31, temp_f31, temp_f31, 1); + MtxTrans(0.0f, 0.0f, -5.0f + TREG_F(3), 1); + cMtx_YrotM(*calc_mtx, 0x4000); + chain->model[j]->setBaseTRMtx(*calc_mtx); + + sp8 += (s16)(TREG_S(0) + 0x3D00); + } + } +} /* 80C42380-80C42518 001220 0198+00 1/1 0/0 0/0 .text open__FP17obj_keyhole_class */ -static void open(obj_keyhole_class* param_0) { - // NONMATCHING +static void open(obj_keyhole_class* i_this) { + switch (i_this->mode) { + case 0: + cLib_addCalc2(&i_this->field_0x2afc, 8.0f, 1.0f, 1.0f); + if (i_this->field_0x2afc >= 8.0f) { + i_this->mode++; + } + break; + case 1: + cLib_addCalcAngleS2(&i_this->field_0x2b00, 0x1900, 1, 0x320); + if (i_this->field_0x2b00 >= 0x1900) { + i_this->action = 2; + i_this->mode = 0; + i_this->field_0x2ca6 = 1; + } + break; + case 10: + i_this->lock_modelMorf->setPlaySpeed(1.0f); + + if (i_this->lock_modelMorf->checkFrame(30.0f)) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (i_this->lock_modelMorf->isStop()) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER3, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + i_this->action = 2; + i_this->mode = 0; + } + break; + } } -/* ############################################################################################## */ -/* 80C43A58-80C43A5C 000074 0004+00 0/3 0/0 0/0 .rodata @4211 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4211 = 1.5f; -COMPILER_STRIP_GATE(0x80C43A58, &lit_4211); -#pragma pop - -/* 80C43A5C-80C43A60 000078 0004+00 0/1 0/0 0/0 .rodata @4212 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4212 = 4.0f; -COMPILER_STRIP_GATE(0x80C43A5C, &lit_4212); -#pragma pop - -/* 80C43A60-80C43A64 00007C 0004+00 0/3 0/0 0/0 .rodata @4213 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4213 = 40.0f; -COMPILER_STRIP_GATE(0x80C43A60, &lit_4213); -#pragma pop - -/* 80C43A64-80C43A68 000080 0004+00 0/1 0/0 0/0 .rodata @4214 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4214 = 70.0f; -COMPILER_STRIP_GATE(0x80C43A64, &lit_4214); -#pragma pop - -/* 80C43A68-80C43A6C 000084 0004+00 0/2 0/0 0/0 .rodata @4215 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4215 = 100.0f; -COMPILER_STRIP_GATE(0x80C43A68, &lit_4215); -#pragma pop - -/* 80C43A6C-80C43A70 000088 0004+00 0/1 0/0 0/0 .rodata @4216 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4216 = 5.0f; -COMPILER_STRIP_GATE(0x80C43A6C, &lit_4216); -#pragma pop - -/* 80C43A70-80C43A74 00008C 0004+00 0/1 0/0 0/0 .rodata @4217 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4217 = 3.0f; -COMPILER_STRIP_GATE(0x80C43A70, &lit_4217); -#pragma pop - -/* 80C43A74-80C43A78 000090 0004+00 0/1 0/0 0/0 .rodata @4218 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4218 = 10000.0f; -COMPILER_STRIP_GATE(0x80C43A74, &lit_4218); -#pragma pop - -/* 80C43A78-80C43A7C 000094 0004+00 0/1 0/0 0/0 .rodata @4219 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4219 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C43A78, &lit_4219); -#pragma pop - /* 80C42518-80C427D0 0013B8 02B8+00 1/1 0/0 0/0 .text drop__FP17obj_keyhole_class */ -static void drop(obj_keyhole_class* param_0) { - // NONMATCHING +static void drop(obj_keyhole_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + cXyz sp18; + + i_this->hit_timer = 10; + cLib_addCalc0(&i_this->field_0x2af4, 1.0f, 1.5f); + cLib_addCalc0(&i_this->field_0x2af8, 1.0f, 4.0f); + + f32 var_f31; + if (i_this->arg0 == 0) { + var_f31 = 0.0f; + } else { + var_f31 = (40.0f + ZREG_F(7)) * l_HIO.obj_size; + } + + switch (i_this->mode) { + case 0: + if (i_this->arg0 == 0) { + var_f31 = 70.0f; + } else { + var_f31 = (100.0f + ZREG_F(8)) * l_HIO.obj_size; + } + + if (actor->current.pos.y <= i_this->field_0x2ae8 + var_f31) { + actor->current.pos.y = i_this->field_0x2ae8 + var_f31; + i_this->mode = 1; + dComIfGp_getVibration().StartShock(4, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + + f32 var_f30; + if (i_this->arg0 == 0) { + i_this->sound.startCreatureSound(Z2SE_OBJ_KEYLOCK_BOUND, 0, -1); + var_f30 = 0.8f; + } else { + var_f30 = 1.5f; + } + + fopAcM_effSmokeSet1(&i_this->field_0x2c9c, &i_this->field_0x2ca0, &actor->current.pos, NULL, var_f30, &actor->tevStr, 1); + + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + if (cM_rndF(1.0f) < 0.5f) { + sp18.x = 5.0f; + } else { + sp18.x = -5.0f; + } + sp18.y = 12.0f; + sp18.z = 3.0f; + MtxPosition(&sp18, &actor->speed); + + i_this->timers[0] = 10; + i_this->field_0x2ae4 = 10000.0f + ZREG_F(1); + + if (i_this->arg0 != 0) { + actor->speed.x *= 1.5f; + actor->speed.z *= 1.5f; + i_this->field_0x2ca6 = 1; + } + } + break; + case 1: + cLib_addCalcAngleS2(&actor->shape_angle.x, 0, 1, (BREG_S(7) + 0x400)); + i_this->field_0x2aec += (BREG_S(8) + 0x17B8); + if (i_this->timers[0] == 1) { + i_this->setOpenEnd(); + } + break; + } + + actor->current.pos += actor->speed; + actor->speed.y -= 5.0f; + + if (actor->current.pos.y <= (i_this->field_0x2ae8 + var_f31)) { + actor->current.pos.y = i_this->field_0x2ae8 + var_f31; + actor->speed.x *= 0.7f; + actor->speed.z *= 0.7f; + actor->speed.y = 0.0f; + } } -/* ############################################################################################## */ -/* 80C43A7C-80C43A80 000098 0004+00 0/1 0/0 0/0 .rodata @4344 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4344 = 300.0f; -COMPILER_STRIP_GATE(0x80C43A7C, &lit_4344); -#pragma pop - -/* 80C43A80-80C43A84 00009C 0004+00 0/1 0/0 0/0 .rodata @4345 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4345 = 500.0f; -COMPILER_STRIP_GATE(0x80C43A80, &lit_4345); -#pragma pop - -/* 80C43A84-80C43A88 0000A0 0004+00 0/1 0/0 0/0 .rodata @4346 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4346 = 17000.0f; -COMPILER_STRIP_GATE(0x80C43A84, &lit_4346); -#pragma pop - -/* 80C43A88-80C43A8C 0000A4 0004+00 0/1 0/0 0/0 .rodata @4347 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4347 = 90.0f; -COMPILER_STRIP_GATE(0x80C43A88, &lit_4347); -#pragma pop - -/* 80C43A8C-80C43A90 0000A8 0004+00 0/1 0/0 0/0 .rodata @4348 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4348 = 17.0f; -COMPILER_STRIP_GATE(0x80C43A8C, &lit_4348); -#pragma pop - /* 80C427D0-80C42D0C 001670 053C+00 2/1 0/0 0/0 .text daObj_Keyhole_Execute__FP17obj_keyhole_class */ -static void daObj_Keyhole_Execute(obj_keyhole_class* param_0) { - // NONMATCHING +static int daObj_Keyhole_Execute(obj_keyhole_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + cXyz sp34; + cXyz sp28; + + i_this->field_0x61a++; + + for (int i = 0; i < 2; i++) { + if (i_this->timers[i] != 0) { + i_this->timers[i]--; + } + } + + if (i_this->hit_timer != 0) { + i_this->hit_timer--; + } + + switch (i_this->action) { + case 0: + if (i_this->checkOpen()) { + i_this->action = 1; + i_this->field_0x2ca8 = actor->home.pos; + if (i_this->arg0 != 0) { + i_this->mode = 10; + } + } + break; + case 1: + open(i_this); + break; + case 2: + drop(i_this); + break; + } + + s16 sp8 = 0; + if (i_this->action == 0) { + cMtx_YrotS(*calc_mtx, actor->current.angle.y); + sp34.x = 0.2f * (i_this->field_0x2ae4 * cM_ssin(i_this->field_0x61a * (TREG_S(2) + 5800))); + sp34.y = i_this->field_0x2ae4 * cM_ssin(i_this->field_0x61a * (TREG_S(3) + 6400)); + sp34.z = i_this->field_0x2ae4 * cM_ssin(i_this->field_0x61a * (TREG_S(4) + 6000)); + MtxPosition(&sp34, &sp28); + actor->current.pos = actor->home.pos + sp28; + i_this->field_0x2ca8 = actor->current.pos; + + sp8 = 300.0f * (i_this->field_0x2ae4 * cM_ssin((i_this->field_0x61a * (TREG_S(2) + 5800)))); + cLib_addCalc0(&i_this->field_0x2ae4, 0.2f, 0.5f + TREG_F(5)); + } else if (i_this->action == 2) { + sp8 = i_this->field_0x2ae4; + cLib_addCalc0(&i_this->field_0x2ae4, 1.0f, 500.0f + ZREG_F(2)); + } + + mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z); + mDoMtx_stack_c::YrotM(actor->shape_angle.y); + mDoMtx_stack_c::YrotM(i_this->field_0x2aec); + mDoMtx_stack_c::XrotM((s16)sp8); + mDoMtx_stack_c::YrotM(-i_this->field_0x2aec); + + if (i_this->arg0 == 0) { + mDoMtx_stack_c::XrotM(actor->shape_angle.x); + } else { + mDoMtx_stack_c::XrotM(actor->shape_angle.x - 0x4000); + } + + mDoMtx_stack_c::transM(i_this->field_0x2af0, i_this->field_0x2af4, i_this->field_0x2af8); + + J3DModel* spC; + if (i_this->arg0 == 0) { + spC = i_this->lock_model; + spC->setBaseTRMtx(mDoMtx_stack_c::get()); + } else { + spC = i_this->lock_modelMorf->getModel(); + mDoMtx_stack_c::scaleM(l_HIO.obj_size, l_HIO.obj_size, l_HIO.obj_size); + spC->setBaseTRMtx(mDoMtx_stack_c::get()); + + i_this->lock_modelMorf->play(&actor->eyePos, 0, 0); + i_this->lock_modelMorf->modelCalc(); + } + + actor->eyePos = actor->current.pos; + + cXyz sp1C; + MTXCopy(mDoMtx_stack_c::get(), *calc_mtx); + sp34.set(0.0f, 0.0f, 0.0f); + MtxPosition(&sp34, &sp1C); + + if (i_this->hit_timer != 0) { + sp1C.y -= 17000.0f; + } + + i_this->ccSph.SetC(sp1C); + + if (i_this->arg0 == 0) { + i_this->ccSph.SetR(40.0f + JREG_F(3)); + } else { + i_this->ccSph.SetR((90.0f + JREG_F(3)) * l_HIO.obj_size); + } + + dComIfG_Ccsp()->Set(&i_this->ccSph); + + if (i_this->hit_timer == 0 && i_this->ccSph.ChkCoHit()) { + i_this->field_0x2ae4 = 1.5f + TREG_F(14); + } + + if (i_this->ccSph.ChkTgHit()) { + i_this->hit_timer = 10; + i_this->atInfo.mpCollider = i_this->ccSph.GetTgHitObj(); + at_power_check(&i_this->atInfo); + + if (i_this->atInfo.mHitType == 2) { + i_this->field_0x2ae4 = 17.0f + TREG_F(8); + } else { + i_this->field_0x2ae4 = 8.0f + TREG_F(4); + } + + if (i_this->arg0 != 0) { + i_this->field_0x2ae4 *= 0.5f; + } + + def_se_set(&i_this->sound, i_this->atInfo.mpCollider, 0x35, NULL); + } + + if (daPy_getPlayerActorClass() != NULL && daPy_getPlayerActorClass()->checkFrontRollCrash() && fopAcM_searchPlayerDistanceXZ(actor) < 150.0f) { + i_this->field_0x2ae4 = 7.0f + TREG_F(4); + if (i_this->arg0 != 0) { + i_this->field_0x2ae4 *= 0.5f; + } + } + + chain_move(i_this); + i_this->sound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); + return 1; } /* 80C42D0C-80C42D14 001BAC 0008+00 1/0 0/0 0/0 .text * daObj_Keyhole_IsDelete__FP17obj_keyhole_class */ -static bool daObj_Keyhole_IsDelete(obj_keyhole_class* param_0) { - return true; +static int daObj_Keyhole_IsDelete(obj_keyhole_class* i_this) { + return 1; } /* 80C42D14-80C42DC8 001BB4 00B4+00 1/0 0/0 0/0 .text daObj_Keyhole_Delete__FP17obj_keyhole_class */ -static void daObj_Keyhole_Delete(obj_keyhole_class* param_0) { - // NONMATCHING -} +static int daObj_Keyhole_Delete(obj_keyhole_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; + fpc_ProcID id = fopAcM_GetID(actor); -/* ############################################################################################## */ -/* 80C43A90-80C43A94 0000AC 0004+00 0/1 0/0 0/0 .rodata @4456 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4456 = -1.0f; -COMPILER_STRIP_GATE(0x80C43A90, &lit_4456); -#pragma pop + if (i_this->field_0x2cb4 != 0) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(i_this->arcname, i_this->field_0x580); + dComIfGp_removeSimpleModel(modelData, fopAcM_GetRoomNo(actor)); + i_this->field_0x2cb4 = 0; + } + + dComIfG_resDelete(&i_this->phase, i_this->arcname); + + if (i_this->HIOInit) { + l_HIOInit = FALSE; + mDoHIO_DELETE_CHILD(l_HIO.id); + } + + if (actor->heap != NULL) { + i_this->sound.stopAnime(); + } + + return 1; +} /* 80C42DC8-80C4307C 001C68 02B4+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + obj_keyhole_class* a_this = (obj_keyhole_class*)i_this; + void* modelData; + + static int bmd_d[] = { + 7, 11, 11, 7, 11, 11, 11, 11, 11, 11, + }; + + static u32 mdl_f[] = { + 0x80000, 0, 0x80000, 0, 0, 0, 0, 0, 0, 0, + }; + + static int bck_d[] = { + 0, 5, 5, 0, 5, 5, 5, 5, 5, 5, + }; + + static int cbmd_d[] = { + 4, 8, 8, 4, 8, 8, 8, 8, 8, 8, + }; + + if (a_this->arg0 == 0 || a_this->arg0 == 3) { + modelData = dComIfG_getObjectRes(a_this->arcname, bmd_d[a_this->arg0]); + JUT_ASSERT(1189, modelData != 0); + + a_this->lock_model = mDoExt_J3DModel__create((J3DModelData*)modelData, mdl_f[a_this->arg0], 0x11000084); + if (a_this->lock_model == NULL) { + return 0; + } + + a_this->lock_model->setUserArea((u32)a_this); + + for (u16 i = 0; i < a_this->lock_model->getModelData()->getJointNum(); i++) { + if (i == 1) { + a_this->lock_model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); + } + } + } else { + a_this->lock_modelMorf = new mDoExt_McaMorf((J3DModelData*)dComIfG_getObjectRes(a_this->arcname, bmd_d[a_this->arg0]), NULL, NULL, NULL, 0, 1.0f, 0, -1, 1, NULL, mdl_f[a_this->arg0], 0x11000084); + if (a_this->lock_modelMorf == NULL || a_this->lock_modelMorf->getModel() == NULL) { + return 0; + } + + a_this->lock_modelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes(a_this->arcname, bck_d[a_this->arg0]), 0, 0.0f, 0.0f, 0.0f, -1.0f, NULL); + } + + a_this->field_0x580 = cbmd_d[a_this->arg0]; + modelData = dComIfG_getObjectRes(a_this->arcname, a_this->field_0x580); + JUT_ASSERT(1270, modelData != 0); + + for (int i = 0; i < 6; i++) { + for (int j = 0; j < a_this->chain_num; j++) { + a_this->chain_s[i].model[j] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x20000, 0x11000084); + if (a_this->chain_s[i].model[j] == NULL) { + return 0; + } + } + } + + return 1; } -/* ############################################################################################## */ -/* 80C43A94-80C43AA8 0000B0 0014+00 0/1 0/0 0/0 .rodata estimateSizeTbl$4475 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const estimateSizeTbl[20] = { - 0xBF, 0x40, 0xA4, 0xE0, 0x93, 0x60, 0xD0, 0x60, 0xA4, 0xE0, - 0xA4, 0x20, 0xA4, 0xE0, 0xA4, 0xE0, 0xA4, 0xE0, 0xA4, 0xE0, -}; -COMPILER_STRIP_GATE(0x80C43A94, &estimateSizeTbl); -#pragma pop - -/* 80C43AA8-80C43AAC 0000C4 0004+00 0/1 0/0 0/0 .rodata @4627 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4627 = -400.0f; -COMPILER_STRIP_GATE(0x80C43AA8, &lit_4627); -#pragma pop - -/* 80C43AAC-80C43AB0 0000C8 0004+00 0/1 0/0 0/0 .rodata @4628 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4628 = 400.0f; -COMPILER_STRIP_GATE(0x80C43AAC, &lit_4628); -#pragma pop - -/* 80C43AB0-80C43AB4 0000CC 0004+00 0/1 0/0 0/0 .rodata @4629 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4629 = -15.0f; -COMPILER_STRIP_GATE(0x80C43AB0, &lit_4629); -#pragma pop - -/* 80C43AB4-80C43AB8 0000D0 0004+00 0/1 0/0 0/0 .rodata @4630 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4630 = 295.0f; -COMPILER_STRIP_GATE(0x80C43AB4, &lit_4630); -#pragma pop - -/* 80C43AB8-80C43ABC 0000D4 0004+00 0/1 0/0 0/0 .rodata @4631 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4631 = 60.0f; -COMPILER_STRIP_GATE(0x80C43AB8, &lit_4631); -#pragma pop - /* 80C4307C-80C434AC 001F1C 0430+00 1/0 0/0 0/0 .text daObj_Keyhole_Create__FP10fopAc_ac_c */ -static void daObj_Keyhole_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObj_Keyhole_Create(fopAc_ac_c* a_this) { + obj_keyhole_class* i_this = (obj_keyhole_class*)a_this; + fopAcM_SetupActor(a_this, obj_keyhole_class); + + static char* arc_name[] = { + "Obj_keyh", "Obj_bkey", "Obj_bkey2", "Obj_bkey3", "Obj_bkey", + "Obj_bkey5", "Obj_bkey", "Obj_bkey", "Obj_bkey", "Obj_bkey", + }; + + i_this->arg0 = fopAcM_GetParam(a_this); + + if (i_this->arg0 == 0xFF) { + i_this->arg0 = 0; + } + if (i_this->arg0 == 0 || i_this->arg0 == 3) { + i_this->chain_num = 16; + } else { + i_this->chain_num = TREG_S(8) + 12; + } + + i_this->arcname = arc_name[i_this->arg0]; + int phase_state = dComIfG_resLoad(&i_this->phase, i_this->arcname); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("OBJ_KEYHOLE PARAM %x\n", fopAcM_GetParam(a_this)); + u8 swbit = (fopAcM_GetParam(a_this) & 0xFF000000) >> 0x18; + if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(a_this))) { + i_this->action = 1; + } + + OS_REPORT("OBJ_KEYHOLE//////////////OBJ_KEYHOLE SET 1 !!\n"); + + static u16 const estimateSizeTbl[] = { + 0xBF40, 0xA4E0, 0x9360, 0xD060, 0xA4E0, + 0xA420, 0xA4E0, 0xA4E0, 0xA4E0, 0xA4E0, + }; + + ASSERTLINE(1360, i_this->arg0 < sizeof(estimateSizeTbl) / sizeof(estimateSizeTbl[0])); + u32 heapsize = estimateSizeTbl[i_this->arg0]; + OS_REPORT("OBJ_KEYHOLE: arg0=%u 0x%04x\n", i_this->arg0, heapsize); + + if (!fopAcM_entrySolidHeap(a_this, useHeapInit, heapsize)) { + OS_REPORT("//////////////OBJ_KEYHOLE SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////OBJ_KEYHOLE SET 2 !!\n"); + + if (i_this->arg0 == 3) { + i_this->arg0 = 0; + } + + if (!l_HIOInit) { + i_this->HIOInit = TRUE; + l_HIOInit = TRUE; + l_HIO.id = mDoHIO_CREATE_CHILD("リアル施錠", &l_HIO); + } + + if (i_this->lock_model != NULL) { + fopAcM_SetMtx(a_this, i_this->lock_model->getBaseTRMtx()); + } else { + fopAcM_SetMtx(a_this, i_this->lock_modelMorf->getModel()->getBaseTRMtx()); + } + + fopAcM_SetMin(a_this, -400.0f, -400.0f, -400.0f); + fopAcM_SetMax(a_this, 400.0f, 400.0f, 400.0f); + + static dCcD_SrcSph cc_sph_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdbf, 0x3}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 60.0f} // mSph + } // mSphAttr + }; + + i_this->ccStts.Init(0xFF, 0, a_this); + i_this->ccSph.Set(cc_sph_src); + i_this->ccSph.SetStts(&i_this->ccStts); + + for (int i = 0; i < 6; i++) { + i_this->chain_s[i].ccStts.Init(100, 0, a_this); + for (int j = 0; j < 3; j++) { + i_this->chain_s[i].ccSph[j].Set(cc_sph_src); + i_this->chain_s[i].ccSph[j].SetStts(&i_this->chain_s[i].ccStts); + } + } + + i_this->sound.init(&a_this->current.pos, &a_this->eyePos, 3, 1); + + if (i_this->arg0 != 0) { + cXyz sp28(a_this->current.pos.x, 100.0f + a_this->current.pos.y, a_this->current.pos.z); + if (fopAcM_gc_c::gndCheck(&sp28)) { + a_this->home.pos.y = fopAcM_gc_c::getGroundY(); + } + } + + i_this->field_0x2ae8 = a_this->home.pos.y; + a_this->shape_angle.x = 0x4000; + + if (i_this->arg0 == 0) { + a_this->home.pos.y += 150.0f + BREG_F(5); + i_this->field_0x2af4 = BREG_F(0) - 15.0f; + i_this->field_0x2af8 = 40.0f + BREG_F(1); + } else { + a_this->home.pos.y += 45.0f + (100.0f + (150.0f + BREG_F(5))); + i_this->field_0x2af4 = BREG_F(0) - 15.0f; + i_this->field_0x2af8 = 20.0f + (40.0f + BREG_F(1)); + } + + void* modelData = dComIfG_getObjectRes(i_this->arcname, i_this->field_0x580); + JUT_ASSERT(1507, modelData != 0); + + if (dComIfGp_addSimpleModel((J3DModelData*)modelData, fopAcM_GetRoomNo(a_this), 1) == -1) { + OS_REPORT("\x1B[43;30m施錠鎖:シンプルモデル登録失敗しました。\n\x1B[m"); + } + + i_this->field_0x2cb4 = 1; + i_this->atInfo.field_0x18 = 53; + fopAcM_setCullSizeFar(a_this, 1.5f + hREG_F(8)); + daObj_Keyhole_Execute(i_this); + } + + return phase_state; } -/* 80C434AC-80C434E8 00234C 003C+00 2/2 0/0 0/0 .text __dt__5csXyzFv */ -void __dt__5csXyzFv() { -//asm csXyz::~csXyz() { - // NONMATCHING -} +/* 80C43C14-80C43C34 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Keyhole_Method */ +static actor_method_class l_daObj_Keyhole_Method = { + (process_method_func)daObj_Keyhole_Create, + (process_method_func)daObj_Keyhole_Delete, + (process_method_func)daObj_Keyhole_Execute, + (process_method_func)daObj_Keyhole_IsDelete, + (process_method_func)daObj_Keyhole_Draw, +}; -/* 80C434E8-80C435B4 002388 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} +/* 80C43C34-80C43C64 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_KEYHOLE */ +extern actor_process_profile_definition g_profile_OBJ_KEYHOLE = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_OBJ_KEYHOLE, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(obj_keyhole_class), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 45, // mPriority + &l_daObj_Keyhole_Method, // sub_method + 0x00044100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; -/* 80C435B4-80C435FC 002454 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80C435FC-80C43644 00249C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80C43644-80C436A0 0024E4 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C436A0-80C437A4 002540 0104+00 1/1 0/0 0/0 .text __dt__10kh_chain_sFv */ -kh_chain_s::~kh_chain_s() { - // NONMATCHING -} - -/* 80C437A4-80C43878 002644 00D4+00 1/1 0/0 0/0 .text __ct__10kh_chain_sFv */ -kh_chain_s::kh_chain_s() { - // NONMATCHING -} - -/* 80C43878-80C438FC 002718 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80C438FC-80C43900 00279C 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */ -void __ct__5csXyzFv() { - /* empty function */ -} - -/* 80C43900-80C43904 0027A0 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80C43904-80C4394C 0027A4 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C4394C-80C43994 0027EC 0048+00 2/1 0/0 0/0 .text __dt__19daObj_Keyhole_HIO_cFv */ -daObj_Keyhole_HIO_c::~daObj_Keyhole_HIO_c() { - // NONMATCHING -} - -/* 80C43994-80C439D0 002834 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_keyhole_cpp */ -void __sinit_d_a_obj_keyhole_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C43994, __sinit_d_a_obj_keyhole_cpp); -#pragma pop - -/* ############################################################################################## */ -/* 80C43D94-80C43D98 0000F4 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80C43D94[4]; -#pragma pop - -/* 80C43D98-80C43D9C 0000F8 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80C43D98[4]; -#pragma pop - -/* 80C43D9C-80C43DA0 0000FC 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43D9C[4]; -#pragma pop - -/* 80C43DA0-80C43DA4 000100 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DA0[4]; -#pragma pop - -/* 80C43DA4-80C43DA8 000104 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DA4[4]; -#pragma pop - -/* 80C43DA8-80C43DAC 000108 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DA8[4]; -#pragma pop - -/* 80C43DAC-80C43DB0 00010C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DAC[4]; -#pragma pop - -/* 80C43DB0-80C43DB4 000110 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80C43DB0[4]; -#pragma pop - -/* 80C43DB4-80C43DB8 000114 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80C43DB4[4]; -#pragma pop - -/* 80C43DB8-80C43DBC 000118 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80C43DB8[4]; -#pragma pop - -/* 80C43DBC-80C43DC0 00011C 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DBC[4]; -#pragma pop - -/* 80C43DC0-80C43DC4 000120 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DC0[4]; -#pragma pop - -/* 80C43DC4-80C43DC8 000124 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DC4[4]; -#pragma pop - -/* 80C43DC8-80C43DCC 000128 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DC8[4]; -#pragma pop - -/* 80C43DCC-80C43DD0 00012C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80C43DCC[4]; -#pragma pop - -/* 80C43DD0-80C43DD4 000130 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_80C43DD0[4]; -#pragma pop - -/* 80C43DD4-80C43DD8 000134 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80C43DD4[4]; -#pragma pop - -/* 80C43DD8-80C43DDC 000138 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80C43DD8[4]; -#pragma pop - -/* 80C43DDC-80C43DE0 00013C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DDC[4]; -#pragma pop - -/* 80C43DE0-80C43DE4 000140 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DE0[4]; -#pragma pop - -/* 80C43DE4-80C43DE8 000144 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DE4[4]; -#pragma pop - -/* 80C43DE8-80C43DEC 000148 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DE8[4]; -#pragma pop - -/* 80C43DEC-80C43DF0 00014C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DEC[4]; -#pragma pop - -/* 80C43DF0-80C43DF4 000150 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80C43DF0[4]; -#pragma pop - -/* 80C43DF4-80C43DF8 000154 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80C43DF4[4]; -#pragma pop - -/* 80C43ABC-80C43ABC 0000D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES diff --git a/src/d/actor/d_a_obj_smallkey.cpp b/src/d/actor/d_a_obj_smallkey.cpp index 8d2d4841117..c78ee9a3ea0 100644 --- a/src/d/actor/d_a_obj_smallkey.cpp +++ b/src/d/actor/d_a_obj_smallkey.cpp @@ -4,176 +4,13 @@ */ #include "d/actor/d_a_obj_smallkey.h" -#include "d/d_cc_d.h" -#include "dol2asm.h" -#include "JSystem/JParticle/JPAEmitter.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" +#include "d/d_item_data.h" +#include "d/d_tresure.h" +UNK_REL_DATA -// -// Forward References: -// - -extern "C" static void searchParentSub__FPvPv(); -extern "C" static void Reflect__FP4cXyzRC13cBgS_PolyInfof(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" static void -keyGetTgCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf(); -extern "C" static void -keyGetCoCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf(); -extern "C" void initBaseMtx__7daKey_cFv(); -extern "C" void setBaseMtx__7daKey_cFv(); -extern "C" void Create__7daKey_cFv(); -extern "C" bool __CreateHeap__7daKey_cFv(); -extern "C" void create__7daKey_cFv(); -extern "C" void __dt__19dPa_followEcallBackFv(); -extern "C" void cleanup__18dPa_levelEcallBackFv(); -extern "C" void __defctor__19dPa_followEcallBackFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void bg_check__7daKey_cFv(); -extern "C" void actionInitInit__7daKey_cFv(); -extern "C" void actionInit__7daKey_cFv(); -extern "C" void actionParentWaitInit__7daKey_cFv(); -extern "C" void actionParentWait__7daKey_cFv(); -extern "C" void actionWaitInit__7daKey_cFv(); -extern "C" void actionWait__7daKey_cFv(); -extern "C" void initActionOrderGetDemo__7daKey_cFv(); -extern "C" void actionOrderGetDemo__7daKey_cFv(); -extern "C" void actionGetDemo__7daKey_cFv(); -extern "C" void actionInitSwOnWait__7daKey_cFv(); -extern "C" void actionSwOnWait__7daKey_cFv(); -extern "C" void actionInitBoomerangCarry__7daKey_cFv(); -extern "C" void actionBoomerangCarry__7daKey_cFv(); -extern "C" void effectSet__7daKey_cFv(); -extern "C" void effectStop__7daKey_cFv(); -extern "C" void effectCtrl__7daKey_cFv(); -extern "C" void seStartTwinkle_private__7daKey_cFUl(); -extern "C" void actionInitE_GB__7daKey_cFv(); -extern "C" void actionE_GB__7daKey_cFv(); -extern "C" void execute__7daKey_cFv(); -extern "C" void draw__7daKey_cFv(); -extern "C" void _delete__7daKey_cFv(); -extern "C" static void daKey_Draw__FP7daKey_c(); -extern "C" static void daKey_Execute__FP7daKey_c(); -extern "C" static void daKey_Delete__FP7daKey_c(); -extern "C" static void daKey_Create__FP10fopAc_ac_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__18dPa_levelEcallBackFv(); -extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void func_80CDB7C0(void* _this, u8*); -extern "C" static void func_80CDB7DC(); -extern "C" static void func_80CDB7E4(); -extern "C" extern char const* const d_a_obj_smallkey__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_orderItemEvent__FP10fopAc_ac_cUsUs(); -extern "C" void fopAcM_createItemForTrBoxDemo__FPC4cXyziiiPC5csXyzPC4cXyz(); -extern "C" void fopAcM_cancelCarryNow__FP10fopAc_ac_c(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void fpcSch_JudgeByID__FPvPv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void onTbox__12dSv_memBit_cFi(); -extern "C" void offTbox__12dSv_memBit_cFi(); -extern "C" void isTbox__12dSv_memBit_cCFi(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void hide__12daItemBase_cFv(); -extern "C" void show__12daItemBase_cFv(); -extern "C" void chkDraw__12daItemBase_cFv(); -extern "C" void CheckFieldItemCreateHeap__FP10fopAc_ac_c(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void setPtI_Id__14dEvt_control_cFUi(); -extern "C" void endCheckOld__16dEvent_manager_cFPCc(); -extern "C" void __ct__19dPa_followEcallBackFUcUc(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void offStatus__7dTres_cFUcii(); -extern "C" void setPosition__7dTres_cFiUcPC3Veci(); -extern "C" void DeleteBase__12daItemBase_cFPCc(); -extern "C" bool clothCreate__12daItemBase_cFv(); -extern "C" void DrawBase__12daItemBase_cFv(); -extern "C" void RotateYBase__12daItemBase_cFv(); -extern "C" void setListStart__12daItemBase_cFv(); -extern "C" void settingBeforeDraw__12daItemBase_cFv(); -extern "C" void setTevStr__12daItemBase_cFv(); -extern "C" void setShadow__12daItemBase_cFv(); -extern "C" void animEntry__12daItemBase_cFv(); -extern "C" void chkFlag__12daItemBase_cFi(); -extern "C" void getTevFrm__12daItemBase_cFv(); -extern "C" void getBtpFrm__12daItemBase_cFv(); -extern "C" void getShadowSize__12daItemBase_cFv(); -extern "C" void getCollisionH__12daItemBase_cFv(); -extern "C" void getCollisionR__12daItemBase_cFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void cM_atan2s__Fff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void __dt__18JPAEmitterCallBackFv(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void __ptmf_scall(); -extern "C" void __cvt_fp2unsigned(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__19dPa_followEcallBack[10]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" void* field_item_res__10dItem_data[1020]; -extern "C" u8 item_info__10dItem_data[1020 + 4 /* padding */]; -extern "C" extern void* __vt__12daItemBase_c[17 + 1 /* padding */]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80CDBAB0[4]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80CDB7F4-80CDB838 000000 0044+00 6/6 0/0 0/0 .rodata l_cyl_src */ const static dCcD_SrcCyl l_cyl_src = { { @@ -189,670 +26,590 @@ const static dCcD_SrcCyl l_cyl_src = { } // mCyl }; -/* 80CDB838-80CDB83C 000044 0004+00 2/7 0/0 0/0 .rodata @3875 */ -SECTION_RODATA static u8 const lit_3875[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CDB838, &lit_3875); - -/* 80CDB83C-80CDB844 000048 0008+00 0/3 0/0 0/0 .rodata @3876 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3876[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CDB83C, &lit_3876); -#pragma pop - -/* 80CDB844-80CDB84C 000050 0008+00 0/3 0/0 0/0 .rodata @3877 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3877[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CDB844, &lit_3877); -#pragma pop - -/* 80CDB84C-80CDB854 000058 0008+00 0/3 0/0 0/0 .rodata @3878 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3878[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CDB84C, &lit_3878); -#pragma pop - -/* 80CDB854-80CDB858 000060 0004+00 2/6 0/0 0/0 .rodata @3879 */ -SECTION_RODATA static f32 const lit_3879 = 1.0f; -COMPILER_STRIP_GATE(0x80CDB854, &lit_3879); - -/* 80CDB858-80CDB85C 000064 0004+00 0/1 0/0 0/0 .rodata @3880 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3880 = 50.0f; -COMPILER_STRIP_GATE(0x80CDB858, &lit_3880); -#pragma pop - -/* 80CDB85C-80CDB860 000068 0004+00 0/1 0/0 0/0 .rodata @3881 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3881 = 10.0f; -COMPILER_STRIP_GATE(0x80CDB85C, &lit_3881); -#pragma pop - /* 80CD97B8-80CD9B40 000078 0388+00 1/1 0/0 0/0 .text searchParentSub__FPvPv */ -static void searchParentSub(void* param_0, void* param_1) { - // NONMATCHING +static void* searchParentSub(void* i_actor, void* i_data) { + fopAc_ac_c* a_actor = (fopAc_ac_c*)i_actor; + fopAc_ac_c* a_other = (fopAc_ac_c*)i_data; + + if (a_actor != NULL && fopAcM_IsActor(a_actor)) { + if (fopAcM_GetProfName(a_actor) == PROC_OBJ_GM) { + if (a_other->home.pos.abs(a_actor->home.pos) < 1.0f) { + return a_actor; + } + } else if (fopAcM_GetProfName(a_actor) == PROC_E_GB) { + if (a_other->home.pos.abs(a_actor->home.pos) < 50.0f) { + return a_actor; + } + + // “Small Key: position isn't synced with Big Baba!\n” + OS_REPORT("\x1b[43;30m小さい鍵:デカババと位置がずれています!\n\x1b[m"); + } else if (fopAcM_GetProfName(a_actor) == PROC_E_ZM) { + f32 other_dist = a_other->home.pos.abs(a_actor->home.pos); + u8 temp_r27 = fopAcM_GetParamBit(a_actor, 0, 8); + if (other_dist < 10.0f && temp_r27 < 10) { + return a_actor; + } + } + } + + return NULL; } -/* ############################################################################################## */ -/* 80CDB8A8-80CDB8B4 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* 80CDB8B4-80CDB8C8 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop - -/* 80CDB8C8-80CDB8D4 -00001 000C+00 0/1 0/0 0/0 .data @4652 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4652[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionInit__7daKey_cFv, -}; -#pragma pop - -/* 80CDB8D4-80CDB8E0 -00001 000C+00 0/1 0/0 0/0 .data @4653 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4653[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionParentWait__7daKey_cFv, -}; -#pragma pop - -/* 80CDB8E0-80CDB8EC -00001 000C+00 0/1 0/0 0/0 .data @4654 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4654[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWait__7daKey_cFv, -}; -#pragma pop - -/* 80CDB8EC-80CDB8F8 -00001 000C+00 0/1 0/0 0/0 .data @4655 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4655[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionOrderGetDemo__7daKey_cFv, -}; -#pragma pop - -/* 80CDB8F8-80CDB904 -00001 000C+00 0/1 0/0 0/0 .data @4656 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4656[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionGetDemo__7daKey_cFv, -}; -#pragma pop - -/* 80CDB904-80CDB910 -00001 000C+00 0/1 0/0 0/0 .data @4657 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4657[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionSwOnWait__7daKey_cFv, -}; -#pragma pop - -/* 80CDB910-80CDB91C -00001 000C+00 0/1 0/0 0/0 .data @4658 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4658[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionBoomerangCarry__7daKey_cFv, -}; -#pragma pop - -/* 80CDB91C-80CDB928 -00001 000C+00 0/1 0/0 0/0 .data @4659 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4659[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionE_GB__7daKey_cFv, -}; -#pragma pop - -/* 80CDB928-80CDB988 000080 0060+00 0/1 0/0 0/0 .data l_demoFunc$4651 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_demoFunc[96] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80CDB988-80CDB9A8 -00001 0020+00 1/0 0/0 0/0 .data l_daKey_Method */ -static actor_method_class l_daKey_Method = { - (process_method_func)daKey_Create__FP10fopAc_ac_c, - (process_method_func)daKey_Delete__FP7daKey_c, - (process_method_func)daKey_Execute__FP7daKey_c, - 0, - (process_method_func)daKey_Draw__FP7daKey_c, -}; - -/* 80CDB9A8-80CDB9D8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SmallKey */ -extern actor_process_profile_definition g_profile_Obj_SmallKey = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_SmallKey, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daKey_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 237, // mPriority - &l_daKey_Method, // sub_method - 0x00040100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80CDB9D8-80CDB9E4 000130 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80CDB9E4-80CDB9F0 00013C 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80CDB9F0-80CDB9FC 000148 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80CDB9FC-80CDBA20 000154 0024+00 2/2 0/0 0/0 .data __vt__18dPa_levelEcallBack */ -SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18dPa_levelEcallBackFv, - (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)NULL, - (void*)cleanup__18dPa_levelEcallBackFv, -}; - -/* 80CDBA20-80CDBA2C 000178 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80CDBA2C-80CDBA38 000184 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80CDBA38-80CDBA5C 000190 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80CDB7E4, - (void*)NULL, - (void*)NULL, - (void*)func_80CDB7DC, -}; - -/* 80CDBA5C-80CDBAA0 0001B4 0044+00 1/1 0/0 0/0 .data __vt__7daKey_c */ -SECTION_DATA extern void* __vt__7daKey_c[17] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)DrawBase__12daItemBase_cFv, - (void*)setListStart__12daItemBase_cFv, - (void*)settingBeforeDraw__12daItemBase_cFv, - (void*)setTevStr__12daItemBase_cFv, - (void*)setShadow__12daItemBase_cFv, - (void*)animEntry__12daItemBase_cFv, - (void*)RotateYBase__12daItemBase_cFv, - (void*)clothCreate__12daItemBase_cFv, - (void*)__CreateHeap__7daKey_cFv, - (void*)chkFlag__12daItemBase_cFi, - (void*)getTevFrm__12daItemBase_cFv, - (void*)getBtpFrm__12daItemBase_cFv, - (void*)getShadowSize__12daItemBase_cFv, - (void*)getCollisionH__12daItemBase_cFv, - (void*)getCollisionR__12daItemBase_cFv, -}; - -/* 80CDBAA0-80CDBAAC 0001F8 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - /* 80CD9B40-80CD9E3C 000400 02FC+00 1/1 0/0 0/0 .text Reflect__FP4cXyzRC13cBgS_PolyInfof */ -static void Reflect(cXyz* param_0, cBgS_PolyInfo const& param_1, f32 param_2) { - // NONMATCHING -} +static f32 Reflect(cXyz* i_vec, cBgS_PolyInfo const& i_polyinfo, f32 i_scale) { + cM3dGPla plane; -/* 80CD9E3C-80CD9E84 0006FC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING + if (dComIfG_Bgsp().GetTriPla(i_polyinfo, &plane)) { + cXyz reflect_vec; + f32 mag = i_vec->absXZ(); + + VECReflect(i_vec, &plane.mNormal, &reflect_vec); + *i_vec = (reflect_vec * mag) * i_scale; + return i_vec->absXZ(); + } + + return 0.0f; } /* 80CD9E84-80CD9EE0 000744 005C+00 1/1 0/0 0/0 .text * keyGetTgCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void keyGetTgCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, - dCcD_GObjInf* param_3) { - // NONMATCHING +static void keyGetTgCallBack(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, + fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) { + daKey_c* a_tgActor = (daKey_c*)i_tgActor; + + if (a_tgActor != NULL) { + if ((i_atObjInf->ChkAtType(AT_TYPE_40) || i_atObjInf->ChkAtType(AT_TYPE_BOOMERANG)) && !dComIfGp_event_runCheck() && !a_tgActor->chkStatus(6)) { + a_tgActor->actionInitBoomerangCarry(); + } + } } /* 80CD9EE0-80CD9F2C 0007A0 004C+00 1/1 0/0 0/0 .text * keyGetCoCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void keyGetCoCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, - dCcD_GObjInf* param_3) { - // NONMATCHING +static void keyGetCoCallBack(fopAc_ac_c* i_coActorA, dCcD_GObjInf* i_coObjInfA, + fopAc_ac_c* i_coActorB, dCcD_GObjInf* i_coObjInfB) { + daKey_c* a_coActorA = (daKey_c*)i_coActorA; + + if (a_coActorA != NULL && i_coActorB != NULL) { + if (fopAcM_GetName(i_coActorB) == fopAcM_GetName(dComIfGp_getLinkPlayer())) { + a_coActorA->initActionOrderGetDemo(); + } + } } /* 80CD9F2C-80CD9F68 0007EC 003C+00 1/1 0/0 0/0 .text initBaseMtx__7daKey_cFv */ void daKey_c::initBaseMtx() { - // NONMATCHING + mpModel->setBaseScale(scale); + setBaseMtx(); } -/* ############################################################################################## */ -/* 80CDB860-80CDB864 00006C 0004+00 1/2 0/0 0/0 .rodata @4031 */ -SECTION_RODATA static f32 const lit_4031 = 5.0f; -COMPILER_STRIP_GATE(0x80CDB860, &lit_4031); - /* 80CD9F68-80CD9FDC 000828 0074+00 2/2 0/0 0/0 .text setBaseMtx__7daKey_cFv */ void daKey_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::transM(0.0f, 5.0f, 0.0f); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::XrotM(-0x4000); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } -/* ############################################################################################## */ -/* 80CDB864-80CDB868 000070 0004+00 0/1 0/0 0/0 .rodata @4064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4064 = 30.0f; -COMPILER_STRIP_GATE(0x80CDB864, &lit_4064); -#pragma pop - -/* 80CDB868-80CDB86C 000074 0004+00 0/1 0/0 0/0 .rodata @4065 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4065 = -6.0f; -COMPILER_STRIP_GATE(0x80CDB868, &lit_4065); -#pragma pop - -/* 80CDB86C-80CDB874 000078 0008+00 1/2 0/0 0/0 .rodata @4067 */ -SECTION_RODATA static u8 const lit_4067[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CDB86C, &lit_4067); - /* 80CD9FDC-80CDA15C 00089C 0180+00 1/1 0/0 0/0 .text Create__7daKey_cFv */ -void daKey_c::Create() { - // NONMATCHING +int daKey_c::Create() { + initBaseMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + + mAcchCir.SetWall(30.0f, 30.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + + mCcStts.Init(0, 0xFF, this); + mCcCyl.Set(l_cyl_src); + mCcCyl.SetStts(&mCcStts); + mCcCyl.SetCoHitCallback(keyGetCoCallBack); + mCcCyl.SetTgHitCallback(keyGetTgCallBack); + mCcCyl.SetR(dItem_data::getR(m_itemNo)); + mCcCyl.SetH(dItem_data::getH(m_itemNo)); + + fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e); + + if (getSwNo() == 0xFF) { + actionInitInit(); + } else { + actionInitSwOnWait(); + } + + fopAcM_SetGravity(this, -6.0f); + fopAcM_OnCarryType(this, fopAcM_CARRY(fopAcM_CARRY_ITEM | fopAcM_CARRY_LIGHT)); + execute(); + return 1; } /* 80CDA15C-80CDA164 000A1C 0008+00 1/0 0/0 0/0 .text __CreateHeap__7daKey_cFv */ -bool daKey_c::__CreateHeap() { - return true; +int daKey_c::__CreateHeap() { + return 1; } -/* ############################################################################################## */ -/* 80CDB890-80CDB890 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CDB890 = "F_SP118"; -#pragma pop - /* 80CDA164-80CDA404 000A24 02A0+00 1/1 0/0 0/0 .text create__7daKey_cFv */ -void daKey_c::create() { - // NONMATCHING +int daKey_c::create() { + fopAcM_SetupActor(this, daKey_c); + + if (!mIsPrmInit) { + field_0x938 = home.angle.x; + field_0x93a = home.angle.z; + home.angle.z = 0; + home.angle.x = 0; + current.angle.z = 0; + current.angle.x = 0; + shape_angle.z = 0; + shape_angle.x = 0; + mIsPrmInit = TRUE; + } + + m_itemNo = fpcNm_ITEM_SMALL_KEY; + + if (strcmp(dComIfGp_getStartStageName(), "F_SP118") == 0) { + OS_REPORT(" SMKEY 0\n"); + if (dComIfGs_isTbox(getSaveBitNo())) { + OS_REPORT(" SMKEY 1\n"); + dComIfGp_setItemKeyNumCount(-dComIfGs_getKeyNum()); + dComIfGs_offTbox(getSaveBitNo()); + } + } + + if (dComIfGs_isTbox(getSaveBitNo())) { + return cPhs_ERROR_e; + } + + int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo)); + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x840)) { + return cPhs_ERROR_e; + } + + if (!Create()) { + return cPhs_ERROR_e; + } + } + + return phase_state; } -/* 80CDA404-80CDA488 000CC4 0084+00 1/1 0/0 0/0 .text __dt__19dPa_followEcallBackFv */ -// dPa_followEcallBack::~dPa_followEcallBack() { -extern "C" void __dt__19dPa_followEcallBackFv() { - // NONMATCHING -} - -/* 80CDA488-80CDA48C 000D48 0004+00 1/0 0/0 0/0 .text cleanup__18dPa_levelEcallBackFv */ -// void dPa_levelEcallBack::cleanup() { -extern "C" void cleanup__18dPa_levelEcallBackFv() { - /* empty function */ -} - -/* 80CDA48C-80CDA4B4 000D4C 0028+00 1/1 0/0 0/0 .text __defctor__19dPa_followEcallBackFv - */ -// void dPa_followEcallBack::__defctor() { -extern "C" void __defctor__19dPa_followEcallBackFv() { - // NONMATCHING -} - -/* 80CDA4B4-80CDA4FC 000D74 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80CDA4FC-80CDA544 000DBC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80CDA544-80CDA5A0 000E04 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80CDA5A0-80CDA610 000E60 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 80CDA610-80CDA680 000ED0 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CDB874-80CDB878 000080 0004+00 0/1 0/0 0/0 .rodata @4279 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4279 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CDB874, &lit_4279); -#pragma pop - -/* 80CDB878-80CDB87C 000084 0004+00 0/2 0/0 0/0 .rodata @4280 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4280 = 3.0f; -COMPILER_STRIP_GATE(0x80CDB878, &lit_4280); -#pragma pop - -/* 80CDB87C-80CDB880 000088 0004+00 0/1 0/0 0/0 .rodata @4281 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4281 = 2.0f; -COMPILER_STRIP_GATE(0x80CDB87C, &lit_4281); -#pragma pop - -/* 80CDB880-80CDB884 00008C 0004+00 1/2 0/0 0/0 .rodata @4282 */ -SECTION_RODATA static f32 const lit_4282 = -1.0f; -COMPILER_STRIP_GATE(0x80CDB880, &lit_4282); - /* 80CDA680-80CDA7E8 000F40 0168+00 1/1 0/0 0/0 .text bg_check__7daKey_cFv */ void daKey_c::bg_check() { - // NONMATCHING + f32 temp_f31 = 0.7f; + + if (mAcch.ChkWallHit() != 0) { + if (speedF > 5.0f) { + Reflect(&speed, mAcchCir, 1.0f); + } + current.angle.y = cM_atan2s(speed.x, speed.z); + } + + if (mAcch.ChkGroundLanding()) { + cXyz sp8(speed); + if (speedF > 5.0f) { + Reflect(&sp8, mAcchCir, temp_f31); + } + + speed.y = -mPrevSpeed.y * temp_f31; + if (speed.y < 3.0f) { + fopAcM_SetSpeedF(this, 0.0f); + } + + field_0x936++; + fopAcM_seStart(this, Z2SE_OBJ_KEY_BOUND, 2.0f * fabsf(mPrevSpeed.y)); + } } /* 80CDA7E8-80CDA81C 0010A8 0034+00 1/1 0/0 0/0 .text actionInitInit__7daKey_cFv */ -void daKey_c::actionInitInit() { - // NONMATCHING +int daKey_c::actionInitInit() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OffTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + setStatus(STATUS_INIT_e); + return 1; } /* 80CDA81C-80CDA8C8 0010DC 00AC+00 1/0 0/0 0/0 .text actionInit__7daKey_cFv */ -void daKey_c::actionInit() { - // NONMATCHING +int daKey_c::actionInit() { + void* pparent = fpcM_Search(searchParentSub, this); + if (pparent != NULL) { + parentActorID = fopAcM_GetID(pparent); + if (fopAcM_GetProfName(pparent) == PROC_OBJ_GM || fopAcM_GetProfName(pparent) == PROC_E_ZM) { + hide(); + actionParentWaitInit(); + } else if (fopAcM_GetProfName(pparent) == PROC_E_GB) { + show(); + actionInitE_GB(); + } + } else { + show(); + actionWaitInit(); + } + + return 1; } /* 80CDA8C8-80CDA8FC 001188 0034+00 1/1 0/0 0/0 .text actionParentWaitInit__7daKey_cFv */ -void daKey_c::actionParentWaitInit() { - // NONMATCHING +int daKey_c::actionParentWaitInit() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OffTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + setStatus(STATUS_PARENT_WAIT_e); + return 1; } /* 80CDA8FC-80CDA9AC 0011BC 00B0+00 1/0 0/0 0/0 .text actionParentWait__7daKey_cFv */ -void daKey_c::actionParentWait() { - // NONMATCHING +int daKey_c::actionParentWait() { + fopAc_ac_c* pparent = (fopAc_ac_c*)fopAcM_SearchByID(parentActorID); + if (pparent == NULL) { + show(); + actionWaitInit(); + } else if (fopAcM_GetProfName(pparent) == PROC_E_ZM) { + current.pos = pparent->home.pos; + } else { + current.pos = pparent->current.pos; + } + + seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE_HIDDEN); + return 1; } /* 80CDA9AC-80CDAA28 00126C 007C+00 3/3 0/0 1/1 .text actionWaitInit__7daKey_cFv */ -void daKey_c::actionWaitInit() { - // NONMATCHING +int daKey_c::actionWaitInit() { + mCcCyl.OnTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + cLib_offBit(attention_info.flags, 0x10); + attention_info.distances[fopAc_attn_CARRY_e] = 16; + attention_info.position = current.pos; + + effectSet(); + setStatus(STATUS_WAIT_e); + return 1; } -/* ############################################################################################## */ -/* 80CDB884-80CDB888 000090 0004+00 0/1 0/0 0/0 .rodata @4400 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4400 = 9.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CDB884, &lit_4400); -#pragma pop - /* 80CDAA28-80CDAB74 0012E8 014C+00 1/0 0/0 0/0 .text actionWait__7daKey_cFv */ -void daKey_c::actionWait() { - // NONMATCHING +int daKey_c::actionWait() { + fopAcM_posMoveF(this, mCcStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + bg_check(); + + if (mAcch.ChkGroundHit()) { + cLib_onBit(attention_info.flags, 0x10); + + speedF *= 0.9f; + if (speedF < 1.0f) { + speedF = 0.0f; + } + } else { + cLib_offBit(attention_info.flags, 0x10); + } + + daPy_py_c* player = daPy_getPlayerActorClass(); + if (fopAcM_checkCarryNow(this)) { + cLib_offBit(attention_info.flags, 0x10); + if (player->getGrabUpStart()) { + fopAcM_cancelCarryNow(this); + initActionOrderGetDemo(); + } + } else { + cLib_onBit(attention_info.flags, 0x10); + } + + if (field_0x936 == 0) { + shape_angle.x += 4000; + } else { + shape_angle.x = 0; + } + + attention_info.position = current.pos; + seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE); + return 1; } /* 80CDAB74-80CDAC18 001434 00A4+00 2/2 0/0 0/0 .text initActionOrderGetDemo__7daKey_cFv */ -void daKey_c::initActionOrderGetDemo() { - // NONMATCHING +int daKey_c::initActionOrderGetDemo() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OffTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + hide(); + effectStop(); + + fopAcM_orderItemEvent(this, 0, 0); + eventInfo.onCondition(8); + + mItemId = fopAcM_createItemForTrBoxDemo(¤t.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL); + JUT_ASSERT(699, mItemId != fpcM_ERROR_PROCESS_ID_e); + + setStatus(STATUS_ORDER_GET_DEMO_e); + return 1; } /* 80CDAC18-80CDAC94 0014D8 007C+00 1/0 0/0 0/0 .text actionOrderGetDemo__7daKey_cFv */ -void daKey_c::actionOrderGetDemo() { - // NONMATCHING +int daKey_c::actionOrderGetDemo() { + if (eventInfo.checkCommandItem()) { + setStatus(STATUS_GET_DEMO_e); + if (mItemId != fpcM_ERROR_PROCESS_ID_e) { + dComIfGp_event_setItemPartnerId(mItemId); + } + } else { + fopAcM_orderItemEvent(this, 0, 0); + eventInfo.onCondition(8); + } + + return 1; } -/* ############################################################################################## */ -/* 80CDB890-80CDB890 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CDB898 = "DEFAULT_GETITEM"; -#pragma pop - /* 80CDAC94-80CDAD28 001554 0094+00 1/0 0/0 0/0 .text actionGetDemo__7daKey_cFv */ -void daKey_c::actionGetDemo() { - // NONMATCHING +int daKey_c::actionGetDemo() { + if (dComIfGp_evmng_endCheck("DEFAULT_GETITEM")) { + dComIfGs_onTbox(getSaveBitNo()); + dTres_c::offStatus(getSaveBitNo(), 1); + dComIfGp_event_reset(); + fopAcM_delete(this); + } + + return 1; } /* 80CDAD28-80CDADD4 0015E8 00AC+00 1/1 0/0 0/0 .text actionInitSwOnWait__7daKey_cFv */ -void daKey_c::actionInitSwOnWait() { - // NONMATCHING +int daKey_c::actionInitSwOnWait() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OffTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + hide(); + + if (getSwOnWaitTimer() == 63) { + mSwOnTimer = 15; + } else { + mSwOnTimer = getSwOnWaitTimer() + 1; + } + + if (fopAcM_isSwitch(this, getSwNo())) { + mSwOnTimer = 0; + } + + setStatus(STATUS_SW_ON_WAIT_e); + return 1; } /* 80CDADD4-80CDAE54 001694 0080+00 1/0 0/0 0/0 .text actionSwOnWait__7daKey_cFv */ -void daKey_c::actionSwOnWait() { - // NONMATCHING +int daKey_c::actionSwOnWait() { + if (fopAcM_isSwitch(this, getSwNo()) && cLib_calcTimer(&mSwOnTimer) == 0) { + show(); + actionWaitInit(); + } + + seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE_HIDDEN); + return 1; } -/* ############################################################################################## */ -/* 80CDB888-80CDB88C 000094 0004+00 1/1 0/0 0/0 .rodata @4503 */ -SECTION_RODATA static f32 const lit_4503 = 4.0f; -COMPILER_STRIP_GATE(0x80CDB888, &lit_4503); - /* 80CDAE54-80CDAF40 001714 00EC+00 1/1 0/0 0/0 .text actionInitBoomerangCarry__7daKey_cFv */ -void daKey_c::actionInitBoomerangCarry() { - // NONMATCHING +int daKey_c::actionInitBoomerangCarry() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OnTgSPrmBit(1); + mCcCyl.OnCoSPrmBit(1); + + u8 height = dItem_data::getH(m_itemNo); + u8 radius = dItem_data::getR(m_itemNo); + + mCcCyl.SetR(4.0f * radius); + mCcCyl.SetH(4.0f * height); + mCcCyl.OnCoSPrmBit(1); + + setStatus(STATUS_BOOMERANG_CARRY_e); + return 1; } /* 80CDAF40-80CDAFB4 001800 0074+00 1/0 0/0 0/0 .text actionBoomerangCarry__7daKey_cFv */ -void daKey_c::actionBoomerangCarry() { - // NONMATCHING +int daKey_c::actionBoomerangCarry() { + fopAc_ac_c* pboomerang = fopAcM_SearchByName(PROC_BOOMERANG); + if (pboomerang != NULL) { + current.pos = pboomerang->current.pos; + } else { + // "Small Key: can't find boomerang!!!\n" + OS_REPORT_ERROR("小さいカギ:ブーメランが見つかりません!!!\n"); + } + + seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE); + // "Small Key: carrying\n" + OS_REPORT("小さい鍵:引き寄せ中\n"); + return 1; } /* 80CDAFB4-80CDB0D8 001874 0124+00 2/2 0/0 0/0 .text effectSet__7daKey_cFv */ void daKey_c::effectSet() { - // NONMATCHING + if (mEffect[0].getEmitter() == NULL) { + cXyz eff_scale[] = { // needs to be an array to match... + cXyz(1.0f, 1.0f, 1.0f) + }; + mEffRot = shape_angle; + mEffRot.x = -0x4000; + + dComIfGp_particle_set(0x82BE, ¤t.pos, &mEffRot, &eff_scale[0], 0xFF, &mEffect[0], fopAcM_GetRoomNo(this), NULL, NULL, NULL); + dComIfGp_particle_set(0x82BF, ¤t.pos, &mEffRot, &eff_scale[0], 0xFF, &mEffect[1], fopAcM_GetRoomNo(this), NULL, NULL, NULL); + } } /* 80CDB0D8-80CDB128 001998 0050+00 2/2 0/0 0/0 .text effectStop__7daKey_cFv */ void daKey_c::effectStop() { - // NONMATCHING + mEffect[0].remove(); + mEffect[1].remove(); } -/* ############################################################################################## */ -/* 80CDB88C-80CDB890 000098 0004+00 0/1 0/0 0/0 .rodata @4618 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4618 = 1000.0f; -COMPILER_STRIP_GATE(0x80CDB88C, &lit_4618); -#pragma pop - /* 80CDB128-80CDB2E0 0019E8 01B8+00 1/1 0/0 0/0 .text effectCtrl__7daKey_cFv */ void daKey_c::effectCtrl() { - // NONMATCHING + cXyz eff_scale; + f32 cam_dist = current.pos.abs(dComIfGp_getCamera(0)->lookat.eye); + f32 var_f29 = 1000.0f; + f32 max_size = 3.0f; + f32 size = 1.0f; + + if (0.0f != var_f29) { + size = cam_dist / var_f29; + if (size < 1.0f) { + size = 1.0f; + } + } + + if (max_size < 1.0f) { + max_size = 1.0f; + } + + if (size > max_size) { + size = max_size; + } + + eff_scale.setall(size); + + for (int i = 0; i < 2; i++) { + JPABaseEmitter* pemitter = mEffect[i].getEmitter(); + if (pemitter != NULL) { + pemitter->setGlobalScale(eff_scale); + } + } } /* 80CDB2E0-80CDB36C 001BA0 008C+00 5/5 0/0 0/0 .text seStartTwinkle_private__7daKey_cFUl */ -void daKey_c::seStartTwinkle_private(u32 param_0) { - // NONMATCHING +void daKey_c::seStartTwinkle_private(u32 i_soundId) { + if (field_0x984 == 0) { + fopAcM_seStartLevel(this, i_soundId, 0); + } } /* 80CDB36C-80CDB3D8 001C2C 006C+00 1/1 0/0 0/0 .text actionInitE_GB__7daKey_cFv */ -void daKey_c::actionInitE_GB() { - // NONMATCHING +int daKey_c::actionInitE_GB() { + cLib_offBit(attention_info.flags, 0x10); + mCcCyl.OffTgSPrmBit(1); + mCcCyl.OffCoSPrmBit(1); + effectSet(); + fopAcM_SetSpeedF(this, 0.0f); + fopAcM_SetGravity(this, 0.0f); + setStatus(STATUS_E_GB_e); + return 1; } /* 80CDB3D8-80CDB404 001C98 002C+00 1/0 0/0 0/0 .text actionE_GB__7daKey_cFv */ -void daKey_c::actionE_GB() { - // NONMATCHING +int daKey_c::actionE_GB() { + seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE_HIDDEN); + return 1; } /* 80CDB404-80CDB5D4 001CC4 01D0+00 2/2 0/0 0/0 .text execute__7daKey_cFv */ -void daKey_c::execute() { - // NONMATCHING +int daKey_c::execute() { + static int (daKey_c::*l_demoFunc[])() = { + &daKey_c::actionInit, + &daKey_c::actionParentWait, + &daKey_c::actionWait, + &daKey_c::actionOrderGetDemo, + &daKey_c::actionGetDemo, + &daKey_c::actionSwOnWait, + &daKey_c::actionBoomerangCarry, + &daKey_c::actionE_GB, + }; + + mPrevSpeed = speed; + field_0x930++; + + (this->*l_demoFunc[mStatus])(); + + eyePos = current.pos; + attention_info.position = current.pos; + + effectCtrl(); + setBaseMtx(); + + mCcCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCcCyl); + + dTres_c::setPosition(getSaveBitNo(), ¤t.pos); + field_0x984 = 0; + return 1; } /* 80CDB5D4-80CDB628 001E94 0054+00 1/1 0/0 0/0 .text draw__7daKey_cFv */ -void daKey_c::draw() { - // NONMATCHING +int daKey_c::draw() { + if (!chkDraw()) { + return 1; + } + + DrawBase(); + return 1; } /* 80CDB628-80CDB674 001EE8 004C+00 1/1 0/0 0/0 .text _delete__7daKey_cFv */ -void daKey_c::_delete() { - // NONMATCHING +int daKey_c::_delete() { + effectStop(); + DeleteBase(dItem_data::getFieldArc(m_itemNo)); + return 1; } /* 80CDB674-80CDB694 001F34 0020+00 1/0 0/0 0/0 .text daKey_Draw__FP7daKey_c */ -static void daKey_Draw(daKey_c* param_0) { - // NONMATCHING +static int daKey_Draw(daKey_c* i_this) { + return i_this->draw(); } /* 80CDB694-80CDB6B4 001F54 0020+00 1/0 0/0 0/0 .text daKey_Execute__FP7daKey_c */ -static void daKey_Execute(daKey_c* param_0) { - // NONMATCHING +static int daKey_Execute(daKey_c* i_this) { + return i_this->execute(); } /* 80CDB6B4-80CDB6D4 001F74 0020+00 1/0 0/0 0/0 .text daKey_Delete__FP7daKey_c */ -static void daKey_Delete(daKey_c* param_0) { - // NONMATCHING +static int daKey_Delete(daKey_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + return i_this->_delete(); } /* 80CDB6D4-80CDB6F4 001F94 0020+00 1/0 0/0 0/0 .text daKey_Create__FP10fopAc_ac_c */ -static void daKey_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daKey_Create(fopAc_ac_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + return ((daKey_c*)i_this)->create(); } -/* 80CDB6F4-80CDB73C 001FB4 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} +/* 80CDB988-80CDB9A8 -00001 0020+00 1/0 0/0 0/0 .data l_daKey_Method */ +static actor_method_class l_daKey_Method = { + (process_method_func)daKey_Create, + (process_method_func)daKey_Delete, + (process_method_func)daKey_Execute, + (process_method_func)NULL, + (process_method_func)daKey_Draw, +}; -/* 80CDB73C-80CDB7B0 001FFC 0074+00 1/0 0/0 0/0 .text __dt__18dPa_levelEcallBackFv */ -// dPa_levelEcallBack::~dPa_levelEcallBack() { -extern "C" void __dt__18dPa_levelEcallBackFv() { - // NONMATCHING -} - -/* 80CDB7B0-80CDB7B4 002070 0004+00 1/0 0/0 0/0 .text - * execute__18JPAEmitterCallBackFP14JPABaseEmitter */ -// void JPAEmitterCallBack::execute(JPABaseEmitter* param_0) { -extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter() { - /* empty function */ -} - -/* 80CDB7B4-80CDB7B8 002074 0004+00 1/0 0/0 0/0 .text - * executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ -// void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) { -extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter() { - /* empty function */ -} - -/* 80CDB7B8-80CDB7BC 002078 0004+00 1/0 0/0 0/0 .text draw__18JPAEmitterCallBackFP14JPABaseEmitter - */ -// void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) { -extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter() { - /* empty function */ -} - -/* 80CDB7BC-80CDB7C0 00207C 0004+00 1/0 0/0 0/0 .text - * drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ -// void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) { -extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter() { - /* empty function */ -} - -/* 80CDB7C0-80CDB7DC 002080 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80CDB7C0(void* _this, u8* param_0) { - // NONMATCHING -} - -/* 80CDB7DC-80CDB7E4 00209C 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80CDB7DC() { - // NONMATCHING -} - -/* 80CDB7E4-80CDB7EC 0020A4 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80CDB7E4() { - // NONMATCHING -} - -/* 80CDB890-80CDB890 00009C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80CDB9A8-80CDB9D8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SmallKey */ +extern actor_process_profile_definition g_profile_Obj_SmallKey = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_SmallKey, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daKey_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 237, // mPriority + &l_daKey_Method, // sub_method + 0x00040100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +};