summaryrefslogtreecommitdiff
path: root/src/d/actor
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-08-13 12:47:18 -0700
committerGitHub <noreply@github.com>2025-08-13 22:47:18 +0300
commitc724824c5c74df5a02f65fee82aa67219b96e5b2 (patch)
tree9cdf0f0fc58c3c08c0d38e56de3d6da1317a0cef /src/d/actor
parent3de1f91acb6737ae4d9da49b924f54300cdcc0e6 (diff)
d_a_obj_key / d_a_obj_keyhole / d_a_obj_smallkey (#2584)
* obj_key equivalent * obj_keyhole done * obj_smallkey done * use macro
Diffstat (limited to 'src/d/actor')
-rw-r--r--src/d/actor/d_a_door_bossL1.cpp2
-rw-r--r--src/d/actor/d_a_door_bossL5.cpp2
-rw-r--r--src/d/actor/d_a_e_mk.cpp6
-rw-r--r--src/d/actor/d_a_obj_key.cpp1139
-rw-r--r--src/d/actor/d_a_obj_keyhole.cpp1889
-rw-r--r--src/d/actor/d_a_obj_smallkey.cpp1185
6 files changed, 1897 insertions, 2326 deletions
diff --git a/src/d/actor/d_a_door_bossL1.cpp b/src/d/actor/d_a_door_bossL1.cpp
index 54e79537a4..5c6bac96f9 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 e0603d74b0..daf7f4c78f 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 f13a81285b..04447a5115 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<e_db_class*>(i_actor)->health = 1000;
+ static_cast<e_db_class*>(i_actor)->enemy.health = 1000;
} else if (fopAcM_GetName(i_actor) == PROC_E_DB_LEAF) {
fopAcM_delete(static_cast<e_db_leaf_class*>(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 34bc1d6111..fda4b61cb9 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++;
+ }
-/* ############################################################################################## */
-/* 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);
+ return NULL;
+}
/* 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
-}
-
-/* 80C3FB84-80C3FBC0 000864 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */
-// cXyz::~cXyz() {
-extern "C" void __dt__4cXyzFv() {
- // 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;
}
-/* ############################################################################################## */
-/* 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;
-/* ############################################################################################## */
-/* 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
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_key", 5);
+ JUT_ASSERT(969, modelData != 0);
-/* 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
-}
+ for (int i = 0; i < 2; i++) {
+ if (i == 1) {
+ modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_key", 3);
+ JUT_ASSERT(975, modelData != 0);
+ }
-/* 80C40DE4-80C40E2C 001AC4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
+ a_this->key_s.model[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (a_this->key_s.model[i] == NULL) {
+ return 0;
+ }
-/* 80C40E2C-80C40E74 001B0C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
+ a_this->key_s.pos[i] = i_this->current.pos;
+ }
-/* 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
+ a_this->sound.init(&i_this->current.pos, 1);
+ return 1;
}
-/* 80C40EE4-80C40F20 001BC4 003C+00 1/1 0/0 0/0 .text __dt__5csXyzFv */
-// csXyz::~csXyz() {
-extern "C" void __dt__5csXyzFv() {
- // NONMATCHING
-}
+/* 80C40AB8-80C40DE4 001798 032C+00 1/0 0/0 0/0 .text daObj_Key_Create__FP10fopAc_ac_c */
+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);
-/* 80C40F20-80C40F24 001C00 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */
-// csXyz::csXyz() {
-extern "C" void __ct__5csXyzFv() {
- /* empty function */
-}
+ 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));
-/* 80C40F24-80C40F28 001C04 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
-// cXyz::cXyz() {
-extern "C" void __ct__4cXyzFv() {
- /* empty function */
-}
+ if (strcmp(dComIfGp_getStartStageName(), "F_SP118") != 0) {
+ if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 && dComIfGs_isStageMiddleBoss()) {
+ return cPhs_ERROR_e;
+ }
-/* 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
-}
+ int swbit = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18;
+ if (swbit != 0xFF && dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(i_this))) {
+ return cPhs_ERROR_e;
+ }
+ }
-/* 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
-}
+ OS_REPORT("OBJ_KEY//////////////OBJ_KEY SET 1 !!\n");
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80C40F70, __sinit_d_a_obj_key_cpp);
-#pragma pop
+ if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x1020)) {
+ OS_REPORT("//////////////OBJ_KEY SET NON !!\n");
+ return cPhs_ERROR_e;
+ }
-/* 80C40FAC-80C40FB4 001C8C 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80C40FAC() {
- // NONMATCHING
-}
+ OS_REPORT("//////////////OBJ_KEY SET 2 !!\n");
-/* 80C40FB4-80C40FBC 001C94 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80C40FB4() {
- // NONMATCHING
-}
+ 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;
-/* 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
+ daObj_Key_Execute(a_this);
+ }
+
+ return phase_state;
}
-/* 80C4107C-80C4107C 000090 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 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,
+};
+
+/* 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 885e0987a7..f22577523c 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"
-
-
-
-//
-// 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,
-};
+#include "d/d_com_inf_game.h"
+#include "d/d_s_play.h"
+#include "d/actor/d_a_player.h"
+#include "Z2AudioLib/Z2Instances.h"
-/* 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;
+
+ 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];
+ }
+ }
}
-/* ############################################################################################## */
-/* 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
-
/* 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;
+
+ 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];
+ }
+ }
}
-/* ############################################################################################## */
-/* 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);
-
/* 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
-
-/* 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];
+UNK_REL_BSS
-/* 80C43CE8-80C43CF4 000048 000C+00 1/1 0/0 0/0 .bss @3650 */
-static u8 lit_3650[12];
+/* 80C43CE5 0003+00 data_80C43CE5 None */
+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);
+
+ 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);
+ }
+ }
}
-/* ############################################################################################## */
-/* 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
-
/* 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;
+ }
-/* 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
-}
+ dComIfG_resDelete(&i_this->phase, i_this->arcname);
-/* ############################################################################################## */
-/* 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
-}
-
-/* 80C434AC-80C434E8 00234C 003C+00 2/2 0/0 0/0 .text __dt__5csXyzFv */
-void __dt__5csXyzFv() {
-//asm csXyz::~csXyz() {
- // NONMATCHING
-}
-
-/* 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
-}
-
-/* 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
-}
+ if (i_this->HIOInit) {
+ l_HIOInit = FALSE;
+ mDoHIO_DELETE_CHILD(l_HIO.id);
+ }
-/* 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
-}
+ if (actor->heap != NULL) {
+ i_this->sound.stopAnime();
+ }
-/* 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
+ return 1;
}
-/* 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
+/* 80C42DC8-80C4307C 001C68 02B4+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
+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;
}
-/* 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
+/* 80C4307C-80C434AC 001F1C 0430+00 1/0 0/0 0/0 .text daObj_Keyhole_Create__FP10fopAc_ac_c */
+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;
}
-#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
+/* 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,
+};
-/* 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
+/* 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
+};
-/* 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 8d2d484111..c78ee9a3ea 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"
-
-
-//
-// 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:
-//
-
-/* ############################################################################################## */
+#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
+
/* 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;
+
+ 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();
+ }
-/* 80CD9E3C-80CD9E84 0006FC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
+ 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
-}
-
-/* ############################################################################################## */
-/* 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);
+ 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());
+}
/* 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
-}
-
-/* 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
+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;
}
-/* 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
+/* 80CDA680-80CDA7E8 000F40 0168+00 1/1 0/0 0/0 .text bg_check__7daKey_cFv */
+void daKey_c::bg_check() {
+ f32 temp_f31 = 0.7f;
-/* 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
+ if (mAcch.ChkWallHit() != 0) {
+ if (speedF > 5.0f) {
+ Reflect(&speed, mAcchCir, 1.0f);
+ }
+ current.angle.y = cM_atan2s(speed.x, speed.z);
+ }
-/* 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
+ if (mAcch.ChkGroundLanding()) {
+ cXyz sp8(speed);
+ if (speedF > 5.0f) {
+ Reflect(&sp8, mAcchCir, temp_f31);
+ }
-/* 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);
+ speed.y = -mPrevSpeed.y * temp_f31;
+ if (speed.y < 3.0f) {
+ fopAcM_SetSpeedF(this, 0.0f);
+ }
-/* 80CDA680-80CDA7E8 000F40 0168+00 1/1 0/0 0/0 .text bg_check__7daKey_cFv */
-void daKey_c::bg_check() {
- // NONMATCHING
+ 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<u32>(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<u32>(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<u32>(attention_info.flags, 0x10);
+ attention_info.distances[fopAc_attn_CARRY_e] = 16;
+ attention_info.position = current.pos;
-/* ############################################################################################## */
-/* 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
+ effectSet();
+ setStatus(STATUS_WAIT_e);
+ return 1;
+}
/* 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<u32>(attention_info.flags, 0x10);
+
+ speedF *= 0.9f;
+ if (speedF < 1.0f) {
+ speedF = 0.0f;
+ }
+ } else {
+ cLib_offBit<u32>(attention_info.flags, 0x10);
+ }
+
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ if (fopAcM_checkCarryNow(this)) {
+ cLib_offBit<u32>(attention_info.flags, 0x10);
+ if (player->getGrabUpStart()) {
+ fopAcM_cancelCarryNow(this);
+ initActionOrderGetDemo();
+ }
+ } else {
+ cLib_onBit<u32>(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<u32>(attention_info.flags, 0x10);
+ mCcCyl.OffTgSPrmBit(1);
+ mCcCyl.OffCoSPrmBit(1);
+ hide();
+ effectStop();
+
+ fopAcM_orderItemEvent(this, 0, 0);
+ eventInfo.onCondition(8);
+
+ mItemId = fopAcM_createItemForTrBoxDemo(&current.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);
+ }
-/* ############################################################################################## */
-/* 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
+ return 1;
+}
/* 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<u32>(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<u8>(&mSwOnTimer) == 0) {
+ show();
+ actionWaitInit();
+ }
-/* ############################################################################################## */
-/* 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);
+ seStartTwinkle_private(Z2SE_OBJ_KEY_TWINKLE_HIDDEN);
+ return 1;
+}
/* 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<u32>(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, &current.pos, &mEffRot, &eff_scale[0], 0xFF, &mEffect[0], fopAcM_GetRoomNo(this), NULL, NULL, NULL);
+ dComIfGp_particle_set(0x82BF, &current.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<u32>(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,
+ };
-/* 80CDB5D4-80CDB628 001E94 0054+00 1/1 0/0 0/0 .text draw__7daKey_cFv */
-void daKey_c::draw() {
- // NONMATCHING
-}
-
-/* 80CDB628-80CDB674 001EE8 004C+00 1/1 0/0 0/0 .text _delete__7daKey_cFv */
-void daKey_c::_delete() {
- // NONMATCHING
-}
+ mPrevSpeed = speed;
+ field_0x930++;
-/* 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
-}
+ (this->*l_demoFunc[mStatus])();
-/* 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
-}
+ eyePos = current.pos;
+ attention_info.position = current.pos;
-/* 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
-}
+ effectCtrl();
+ setBaseMtx();
-/* 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
-}
+ mCcCyl.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCcCyl);
-/* 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
+ dTres_c::setPosition(getSaveBitNo(), &current.pos);
+ field_0x984 = 0;
+ return 1;
}
-/* 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
-}
+/* 80CDB5D4-80CDB628 001E94 0054+00 1/1 0/0 0/0 .text draw__7daKey_cFv */
+int daKey_c::draw() {
+ if (!chkDraw()) {
+ return 1;
+ }
-/* 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 */
+ DrawBase();
+ return 1;
}
-/* 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 */
+/* 80CDB628-80CDB674 001EE8 004C+00 1/1 0/0 0/0 .text _delete__7daKey_cFv */
+int daKey_c::_delete() {
+ effectStop();
+ DeleteBase(dItem_data::getFieldArc(m_itemNo));
+ return 1;
}
-/* 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 */
+/* 80CDB674-80CDB694 001F34 0020+00 1/0 0/0 0/0 .text daKey_Draw__FP7daKey_c */
+static int daKey_Draw(daKey_c* i_this) {
+ return i_this->draw();
}
-/* 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 */
+/* 80CDB694-80CDB6B4 001F54 0020+00 1/0 0/0 0/0 .text daKey_Execute__FP7daKey_c */
+static int daKey_Execute(daKey_c* i_this) {
+ return i_this->execute();
}
-/* 80CDB7C0-80CDB7DC 002080 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
-extern "C" void func_80CDB7C0(void* _this, u8* param_0) {
- // NONMATCHING
+/* 80CDB6B4-80CDB6D4 001F74 0020+00 1/0 0/0 0/0 .text daKey_Delete__FP7daKey_c */
+static int daKey_Delete(daKey_c* i_this) {
+ fpc_ProcID id = fopAcM_GetID(i_this);
+ return i_this->_delete();
}
-/* 80CDB7DC-80CDB7E4 00209C 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80CDB7DC() {
- // NONMATCHING
+/* 80CDB6D4-80CDB6F4 001F94 0020+00 1/0 0/0 0/0 .text daKey_Create__FP10fopAc_ac_c */
+static int daKey_Create(fopAc_ac_c* i_this) {
+ fpc_ProcID id = fopAcM_GetID(i_this);
+ return ((daKey_c*)i_this)->create();
}
-/* 80CDB7E4-80CDB7EC 0020A4 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80CDB7E4() {
- // 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,
+};
-/* 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
+};