summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_key.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/actor/d_a_obj_key.cpp')
-rw-r--r--src/d/actor/d_a_obj_key.cpp1139
1 files changed, 602 insertions, 537 deletions
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
+};