From f989efc58159a20738b5539c7e5d9d15de00c75c Mon Sep 17 00:00:00 2001 From: 123456789758 <205478182+123456789758@users.noreply.github.com> Date: Mon, 25 Aug 2025 19:01:22 -0400 Subject: [PATCH] d_a_himo2 - 94% matching ( + misc. cleanup) (#866) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ‎ ‎ ‎ <‎ ‎ ‎> --- include/d/actor/d_a_btd.h | 5 +- include/d/actor/d_a_himo2.h | 102 +- include/d/actor/d_a_player.h | 4 +- include/d/actor/d_a_player_main.h | 1 - include/d/actor/d_a_ship.h | 2 +- include/d/actor/d_a_ykgr.h | 16 +- src/d/actor/d_a_ff.cpp | 2 +- src/d/actor/d_a_himo2.cpp | 1777 +++++++++++++++++++++++++++-- src/d/actor/d_a_npc_fa1.cpp | 10 +- src/d/actor/d_a_player_rope.inc | 8 +- 10 files changed, 1824 insertions(+), 103 deletions(-) diff --git a/include/d/actor/d_a_btd.h b/include/d/actor/d_a_btd.h index 56bef9288..8338c0604 100644 --- a/include/d/actor/d_a_btd.h +++ b/include/d/actor/d_a_btd.h @@ -15,7 +15,10 @@ public: /* 0x032C */ cXyz field_0x32C; /* 0x0338 */ u8 field_0x0338[0x0360 - 0x0338]; /* 0x0360 */ f32 field_0x360; - /* 0x0364 */ u8 field_0x0364[0x6E16 - 0x0364]; + /* 0x0364 */ u8 field_0x0364[0x6190 - 0x0364]; + /* 0x6190 */ u8 field_0x6190; + /* 0x6191 */ u8 field_0x6191[0x6E15 - 0x6191]; + /* 0x6E15 */ u8 field_0x6e15; /* 0x6E16 */ s16 field_0x6e16; }; diff --git a/include/d/actor/d_a_himo2.h b/include/d/actor/d_a_himo2.h index 4641c8e28..60193b18c 100644 --- a/include/d/actor/d_a_himo2.h +++ b/include/d/actor/d_a_himo2.h @@ -1,31 +1,101 @@ #ifndef D_A_HIMO2_H #define D_A_HIMO2_H +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_hostIO.h" struct himo2_s { - -}; + /* 0x00 */ u8 m00[0x0C - 0x00]; + /* 0x0C */ f32 m0C; + /* 0x10 */ cXyz m10; + /* 0x1C */ s16 m1C; + /* 0x1E */ s16 m1E; + /* 0x20 */ u8 m20[0x24 - 0x20]; +}; // Size: 0x24 class himo2_class : public fopAc_ac_c { public: BOOL setTargetPos(cXyz*, float*, float*); public: - /* Place member variables here */ - // TODO: is this right? - /* 0x290 */ u8 field_0x290[0x2DC - 0x290]; - /* 0x2DC */ s32 field_0x2DC; - /* 0x2E0 */ u8 field_0x2E0[0x15F8 - 0x2E0]; - /* 0x15FC */ cXyz field_0x15F8; -}; - -class himo2HIO_c { -public: - ~himo2HIO_c(); - -public: - /* Place member variables here */ + /* 0x0290 */ u8 m0290[0x029C - 0x0290]; + /* 0x029C */ s16 m029C; + /* 0x029E */ s16 m029E; + /* 0x02A0 */ s16 m02A0; + /* 0x02A2 */ s16 m02A2; + /* 0x02A2 */ s16 m02A4; + /* 0x02A6 */ u8 m02A6[0x02B4 - 0x02A6]; + /* 0x02B4 */ cXyz m02B4; + /* 0x02C0 */ u8 m02C0[0x02CC - 0x02C0]; + /* 0x02CC */ s32 m02CC; + /* 0x02D0 */ u8 m02D0[0x02D8 - 0x02D0]; + /* 0x02D8 */ u32 m02D8; + /* 0x02DC */ s32 m02DC; + /* 0x02E0 */ s8 m02E0; + /* 0x02E1 */ u8 m02E1[0x02E4 - 0x02E1]; + /* 0x02E4 */ f32 m02E4; + /* 0x02E8 */ u8 m02E8[0x02EC - 0x02E8]; + /* 0x02EC */ cXyz m02EC[2]; + /* 0x0304 */ u8 m0304[0x0308 - 0x0304]; + /* 0x0308 */ s16 m0308; + /* 0x030A */ u8 m030A[0x0310 - 0x030A]; + /* 0x0310 */ himo2_s m0310[100]; + /* 0x1120 */ himo2_s m1120[100]; + /* 0x1F30 */ mDoExt_3DlineMat1_c m1F30; + /* 0x1F6C */ s32 m1F6C; + /* 0x1F70 */ f32 m1F70; + /* 0x1F74 */ u8 m1F74[0x1F84 - 0x1F74]; + /* 0x1F84 */ cXyz m1F84; + /* 0x1F90 */ s16 m1F90; + /* 0x1F92 */ s16 m1F92; + /* 0x1F94 */ s16 m1F94; + /* 0x1F96 */ u8 m1F96[0x1F98 - 0x1F96]; + /* 0x1F98 */ mDoExt_3DlineMat1_c m1F98; + /* 0x1FD4 */ f32 m1FD4; + /* 0x1FD8 */ mDoExt_3DlineMat1_c m1FD8; + /* 0x2014 */ dCcD_Stts m2014; + /* 0x2050 */ dCcD_Sph m2050; + /* 0x217C */ fopAc_ac_c* m217C; + /* 0x2180 */ fpc_ProcID m2180; + /* 0x2184 */ f32 m2184; + /* 0x2188 */ f32 m2188; + /* 0x218C */ fopAc_ac_c* m218C; + /* 0x2190 */ u8 m2190[0x24AC - 0x2190]; + /* 0x24AC */ u8 m24AC; + /* 0x24AD */ u8 m24AD[0x24B0 - 0x24AD]; + /* 0x24B0 */ J3DModel* m24B0; + /* 0x24B4 */ f32 m24B4; + /* 0x24B8 */ f32 m24B8; + /* 0x24BC */ s32 m24BC; + /* 0x24C0 */ s32 m24C0; + /* 0x24C4 */ f32 m24C4; + /* 0x24C8 */ s16 m24C8; + /* 0x24CA */ s16 m24CA; + /* 0x24CC */ cXyz m24CC; + /* 0x24D8 */ s8 m24D8; + /* 0x24D9 */ s8 m24D9; + /* 0x24DA */ u8 m24DA[0x24DC - 0x24DA]; + /* 0x24DC */ cXyz m24DC; + /* 0x24E8 */ cXyz m24E8; + /* 0x24F4 */ f32 m24F4; + /* 0x24F8 */ f32 m24F8; + /* 0x24FC */ f32 m24FC; + /* 0x2500 */ f32 m2500; + /* 0x2504 */ cXyz m2504; + /* 0x2510 */ s16 m2510; + /* 0x2512 */ s16 m2512; + /* 0x2514 */ f32 m2514; + /* 0x2518 */ f32 m2518; + /* 0x251C */ s8 m251C; + /* 0x251C */ u8 m251D[0x2520 - 0x251D]; + /* 0x2520 */ f32 m2520; + /* 0x2524 */ cXyz m2524; + /* 0x2530 */ f32 m2530; + /* 0x2534 */ dBgS_AcchCir m2534; + /* 0x2574 */ dBgS_ObjAcch m2574; }; #endif /* D_A_HIMO2_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 4d7139d61..ddabd5ad0 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -554,8 +554,8 @@ public: BOOL checkBowMiniGame() const { return mDemo.getDemoMode() == daPy_demo_c::DEMO_BOW_MINIGAME_e; } void checkSoupPowerUp() const {} void checkSubjectAccept() const {} - void getRopeJumpLand() const {} - void checkRopeForceEnd() const {} + BOOL getRopeJumpLand() const { return checkResetFlg0(daPyRFlg0_UNK200); } + BOOL checkRopeForceEnd() const { return checkResetFlg0(daPyRFlg0_UNK40000000); } virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 449626f76..79d0607d5 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -337,7 +337,6 @@ public: daPy_footData_c(); public: - // TODO: is this right? /* 0x000 */ u8 field_0x000; /* 0x001 */ u8 field_0x001; /* 0x002 */ s16 field_0x002; diff --git a/include/d/actor/d_a_ship.h b/include/d/actor/d_a_ship.h index 1168c6a59..596fbb999 100644 --- a/include/d/actor/d_a_ship.h +++ b/include/d/actor/d_a_ship.h @@ -176,7 +176,7 @@ public: mWhirlActor = NULL; } - void onCb1Ride() { mStateFlag |= 0x40000000; } + void onCb1Ride() { onStateFlg(daSFLG_UNK40000000_e); } void onCraneHookFlg() { onStateFlg(daSFLG_UNK800_e); } void onCrashFlg() { onStateFlg(daSFLG_UNK4_e); } void onFantomGanonBattle() {} diff --git a/include/d/actor/d_a_ykgr.h b/include/d/actor/d_a_ykgr.h index 403bebaff..aa6f7ac8b 100644 --- a/include/d/actor/d_a_ykgr.h +++ b/include/d/actor/d_a_ykgr.h @@ -37,11 +37,23 @@ public: inline bool _delete(); inline bool _draw(); inline bool _execute(); - void hide() {} + void hide() { + if (m_emitter == NULL) { + return; + } + m_emitter->setStatus(JPAEmtrStts_StopDraw); + return; + } void setAimRate(float) {} void setAlpha(unsigned char alpha) { m_alpha = alpha; } inline void set_mtx(); - void show() {} + void show() { + if (m_emitter == NULL) { + return; + } + m_emitter->clearStatus(JPAEmtrStts_StopDraw); + return; + } void start() { if (m_emitter != NULL) { m_alpha_flag = 1; diff --git a/src/d/actor/d_a_ff.cpp b/src/d/actor/d_a_ff.cpp index e92fb6a3a..08a4e3f06 100644 --- a/src/d/actor/d_a_ff.cpp +++ b/src/d/actor/d_a_ff.cpp @@ -297,7 +297,7 @@ static cPhs_State daFf_Create(fopAc_ac_c* i_this) { int uVar1 = fopAcM_GetParam(a_this) & 0xFF; if (uVar1 != 0) { fopAcM_SetParam(a_this, fopAcM_GetParam(a_this) & 0xFF00); - for (int iVar7 = 0; iVar7 < uVar1; iVar7 = iVar7 + 1) { + for (int i = 0; i < uVar1; i++) { fopAcM_prm_class* pfVar4 = fopAcM_CreateAppend(); pfVar4->base.position.x = a_this->current.pos.x + cM_rndFX(500.0f); pfVar4->base.position.y = a_this->current.pos.y; diff --git a/src/d/actor/d_a_himo2.cpp b/src/d/actor/d_a_himo2.cpp index 94ec5b158..73ba658a4 100644 --- a/src/d/actor/d_a_himo2.cpp +++ b/src/d/actor/d_a_himo2.cpp @@ -1,92 +1,1682 @@ /** * d_a_himo2.cpp - * Item - Grappling Hook + * Item - Grappling Hook / ロープ (Rope) */ #include "d/dolzel.h" // IWYU pragma: keep +#include "d/actor/d_a_bk.h" +#include "d/actor/d_a_ykgr.h" #include "d/actor/d_a_himo2.h" +#include "d/actor/d_a_btd.h" +#include "d/actor/d_a_dr2.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_priority.h" #include "d/d_cc_d.h" +#include "d/d_s_play.h" +#include "d/res/res_link.h" +#include "f_op/f_op_camera.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_hostIO.h" + +class himo2HIO_c : public JORReflexible { +public: + himo2HIO_c() { + m06 = 0; + m08 = 15000; + m0A = 1000; + m0C = 600; + m0E = 400; + m10 = 60.0f; + m14 = 1500.0f; + m18 = 1000.0f; + m1C = 2.3f; + m20 = 1.9f; + } + virtual ~himo2HIO_c() {}; + +public: + /* 0x04 */ s8 mNo; + /* 0x06 */ s16 m06; + /* 0x08 */ s16 m08; + /* 0x0A */ s16 m0A; + /* 0x0C */ s16 m0C; + /* 0x0E */ s16 m0E; + /* 0x10 */ f32 m10; + /* 0x14 */ f32 m14; + /* 0x18 */ f32 m18; + /* 0x1C */ f32 m1C; + /* 0x20 */ f32 m20; +}; + +himo2HIO_c l_himo2HIO; +f32 rope_scale; +static btd_class* btd; +dr2_class* dr; /* 800EB60C-800EBABC .text spin_draw__FP11himo2_class */ -void spin_draw(himo2_class*) { - /* Nonmatching */ +void spin_draw(himo2_class* param_1) { + /* Nonmatching - regalloc, cXyz */ + f32 fVar1; + s16 sVar2; + s16 sVar3; + s16 sVar4; + int iVar6; + cXyz* pcVar7; + s16 sVar8; + s16 sVar9; + int iVar11; + f32 dVar12; + cXyz local_504; + cXyz local_510; + cXyz local_51c; + cXyz local_528; + + sVar4 = 0; + sVar2 = param_1->m2510; + local_504.y = (param_1->m217C->scale.y - 1.0f) * 8.0f; + local_504.z *= -7.0f; + fVar1 = param_1->m217C->scale.y; + if ((fopAcM_GetParam(param_1->m217C) & 0x0F) == 3) { + local_504.y += REG8_F(8) + -3.0f; + local_504.z += REG8_F(9) + 1.5f; + } + if (fVar1 < 0.7f) { + local_504.y += 3.0f; + } + if (param_1->m251C != 0) { + sVar9 = 700; + local_504.x = REG0_F(0) * 10.0f - 15.0f; + } else { + sVar9 = -700; + local_504.x = REG0_F(0) * 10.0f + 15.0f; + } + local_504.x = local_504.x + param_1->m24B8; + local_504.y = local_504.y + -152.5f; + local_504.z = param_1->m24B4 + 26.0f + local_504.z; + mDoMtx_YrotS(*calc_mtx, sVar2); + MtxPosition(&local_504, &local_510); + local_51c.x = param_1->m217C->current.pos.x + local_510.x; + local_51c.y = param_1->m217C->current.pos.y + local_510.y; + local_51c.z = param_1->m217C->current.pos.z + local_510.z; + local_504.x = 0.0f; + local_504.y = 0.0f; + local_504.z = 3.90625f; + sVar8 = -0x30d4; + pcVar7 = param_1->m1F30.mpLines->mpSegments + param_1->m1F6C; + iVar11 = 0; + iVar6 = 0; + dVar12 = -200000.0f; + cXyz local_4f8[100]; + for (; iVar11 < 100; iVar11++, iVar6 += 12) { + local_4f8[iVar6].y = dVar12; + if (iVar11 < 50) { + sVar3 = sVar8 + REG0_S(2) + 100; + } else if ((iVar11 >= 50) && (param_1->m24BC + 49 <= iVar11)) { + sVar3 = sVar8 + param_1->m24C8; + if (100 - (REG0_S(4) + 5) >= iVar11) { + sVar3 = REG0_S(5) + sVar3 + -1000; + } + if ((param_1->m217C != NULL) && (fopAcM_GetParam(param_1->m217C) != 0)) { + sVar4 = REG0_S(4) + sVar4 + -400; + } + } else { + if (param_1->m24BC == 0) { + sVar3 = sVar8 + REG0_S(2) + 70; + } else { + sVar3 = sVar8 + 50; + } + } + mDoMtx_YrotS(*calc_mtx, sVar2); + mDoMtx_ZrotM(*calc_mtx, sVar4); + mDoMtx_XrotM(*calc_mtx, sVar8); + mDoMtx_YrotM(*calc_mtx, sVar9); + MtxPosition(&local_504, &local_510); + local_51c.x = local_51c.x + local_510.x; + local_51c.y = local_51c.y + local_510.y; + local_51c.z = local_51c.z + local_510.z; + if (iVar11 == REG0_S(6) + 48) { + param_1->m2504 = local_51c; + } + if ((param_1->m24D8 < 2) || (iVar11 >= 50)) { + if (iVar11 == 99) { + MtxTrans(local_51c.x, local_51c.y, local_51c.z, false); + mDoMtx_YrotM(*calc_mtx, sVar2); + mDoMtx_ZrotM(*calc_mtx, sVar4); + mDoMtx_XrotM(*calc_mtx, sVar8); + mDoMtx_YrotM(*calc_mtx, sVar9); + MtxTrans(0.0f, 0.0f, -3.0f, true); + mDoMtx_XrotM(*calc_mtx, param_1->m24CA); + local_528.x = 0.0f; + local_528.y = 0.0f; + local_528.z = 15.0f; + MtxPosition(&local_528, ¶m_1->m24CC); + MtxScale(0.2f, 0.2f, 0.2f, true); + J3DModel* pJVar10 = param_1->m24B0; + pJVar10->setBaseTRMtx(*calc_mtx); + g_env_light.setLightTevColorType(pJVar10, ¶m_1->tevStr); + mDoExt_modelUpdateDL(pJVar10); + } else { + local_4f8[iVar6] = local_51c; + } + } + sVar8 = sVar3; + } + iVar6 = 99; + for (iVar11 = 0; iVar11 < 100; iVar11++, iVar6++) { + if (local_4f8[iVar6].y > -100000.0f) { + pcVar7->x = local_4f8[iVar6].x; + pcVar7->y = local_4f8[iVar6].y; + pcVar7->z = local_4f8[iVar6].z; + param_1->m1F6C++; + pcVar7++; + } + } } /* 800EBABC-800EBCD0 .text himo2_control__FP11himo2_classP7himo2_s */ -void himo2_control(himo2_class*, himo2_s*) { - /* Nonmatching */ +void himo2_control(himo2_class* param_1, himo2_s* param_2) { + /* Nonmatching - for loop, regalloc */ + f32 fVar1; + f32 fVar2; + int i; + int iVar4; + int iVar5; + himo2_s* puVar5; + f32 dVar6; + f32 dVar7; + f32 dVar8; + f32 dVar9; + cXyz local_74; + cXyz local_68; + + local_68.x = 0.0f; + local_68.y = 0.0f; + if (param_1->m02DC == 0) { + local_68.z = param_1->m2188 * 15.625f * (REG8_F(18) + 0.002f); + } else { + local_68.z = param_1->m2188 * 15.625f * (REG0_F(1) + 0.0007f); + } + i = param_1->m02CC + 1; + puVar5 = param_2 + i; + dVar9 = 0.0f; + for (; i < 100; i++) { + dVar8 = ((puVar5->m10.y + param_1->m02E4) - puVar5[-1].m10.y); + fVar1 = puVar5->m10.x - puVar5[-1].m10.x; + dVar7 = fVar1; + fVar2 = puVar5->m10.z - puVar5[-1].m10.z; + dVar6 = fVar2; + iVar4 = cM_atan2s(fVar1, fVar2); + dVar6 = std::sqrtf((dVar7 * dVar7) + (dVar6 * dVar6)); + iVar5 = cM_atan2s(dVar8, dVar6); + mDoMtx_YrotS(*calc_mtx, iVar4); + mDoMtx_XrotM(*calc_mtx, -iVar5); + MtxPosition(&local_68, &local_74); + puVar5->m10.x = puVar5[-1].m10.x + local_74.x; + puVar5->m10.y = puVar5[-1].m10.y + local_74.y; + puVar5->m10.z = puVar5[-1].m10.z + local_74.z; + puVar5++; + } } /* 800EBCD0-800EBFEC .text himo2_control2__FP11himo2_classP7himo2_s */ -void himo2_control2(himo2_class*, himo2_s*) { - /* Nonmatching */ +void himo2_control2(himo2_class* param_1, himo2_s* param_2) { + /* Nonmatching - for loop, regalloc */ + cXyz local_b4; + cXyz local_a8; + + local_a8.x = 0.0f; + local_a8.y = 0.0f; + himo2_s* puVar6 = param_2 + 98; + if (param_1->m02DC == 0) { + local_a8.z = param_1->m2188 * 15.625f * (REG8_F(18) + 0.002f); + } else { + local_a8.z = param_1->m2188 * 15.625f * (REG0_F(1) + 0.0007f); + } + f32 dVar9 = 0.0f; + f32 dVar8 = (REG8_F(17) + 10.0f); + int iVar4 = param_1->m02CC; + f32 dVar10 = dVar9; + for (; ++iVar4 < 100;) { + f32 dVar11 = (puVar6->m10.y - puVar6[1].m10.y); + int iVar3 = param_1->m02DC; + if ((iVar3 >= 0) && (iVar3 < 4)) { + if (iVar3 != 0) { + int uStack_94 = 99 - iVar4 ^ 0x80000000; + dVar8 = (param_1->m2530 * uStack_94) * 0.01f; + } + dVar10 = dVar8 * cM_ssin((param_1->m02D8 * (REG0_S(5) + 700) + iVar4 * (REG0_S(6) + 2000)) & 0xFFFF); + dVar9 = dVar8 * cM_scos((param_1->m02D8 * (REG0_S(7) + 500) + iVar4 * (REG0_S(8) + 2000)) & 0xFFFF); + } + f32 fVar1 = dVar10 + (puVar6->m10.x - puVar6[1].m10.x); + f32 dVar7 = fVar1; + f32 fVar2 = dVar9 + (puVar6->m10.z - puVar6[1].m10.z); + f32 dVar6 = fVar2; + iVar3 = cM_atan2s(fVar1, fVar2); + dVar6 = std::sqrtf((dVar7 * dVar7) + (dVar6 * dVar6)); + int iVar5 = cM_atan2s(dVar11, dVar6); + puVar6[1].m1E = iVar3; + puVar6[1].m1C = -iVar5; + mDoMtx_YrotS(*calc_mtx, iVar3); + mDoMtx_XrotM(*calc_mtx, -iVar5); + MtxPosition(&local_a8, &local_b4); + puVar6->m10.x = puVar6[1].m10.x + local_b4.x; + puVar6->m10.y = puVar6[1].m10.y + local_b4.y; + puVar6->m10.z = puVar6[1].m10.z + local_b4.z; + puVar6++; + } } /* 800EBFEC-800EC1E4 .text himo2_draw__FP11himo2_classP7himo2_s */ -void himo2_draw(himo2_class*, himo2_s*) { - /* Nonmatching */ +void himo2_draw(himo2_class* param_1, himo2_s* param_2) { + /* Nonmatching - regalloc */ + daPy_py_c* apdVar1 = (daPy_py_c*)dComIfGp_getPlayer(0); + cXyz* pcVar6 = param_1->m1F30.mpLines->mpSegments + param_1->m1F6C; + pcVar6->x = param_1->m02B4.x; + pcVar6->y = param_1->m02B4.y; + pcVar6->z = param_1->m02B4.z; + param_1->m1F6C++; + int iVar2 = param_1->m02CC; + himo2_s* phVar4 = param_2 + iVar2 + 1; + pcVar6++; + for (; iVar2 < 98; iVar2++, phVar4++) { + if (iVar2 == 97) { + if ((param_1->m02DC == 0) && (param_1->m2188 < REG0_F(3) + 50.0f)) { + MTXCopy(apdVar1->getLeftHandMatrix(), *calc_mtx); + MtxTrans(10.0f, 0.0f, 0.0f, true); + mDoMtx_YrotM(*calc_mtx, 0x4000); + } else { + MtxTrans(phVar4->m10.x, phVar4->m10.y, phVar4->m10.z, false); + mDoMtx_YrotM(*calc_mtx, phVar4->m1E); + mDoMtx_XrotM(*calc_mtx, phVar4->m1C); + MtxTrans(0.0f, 0.0f, 12.0f, true); + MtxRotX(M_PI, 1); + MtxRotZ(M_PI, 1); + } + MtxScale(0.2f, 0.2f, 0.2f, true); + cXyz local_38; + local_38.x = 0.0f; + local_38.y = 0.0f; + local_38.z = 15.0f; + MtxPosition(&local_38, ¶m_1->m24CC); + J3DModel* pJVar5 = param_1->m24B0; + pJVar5->setBaseTRMtx(*calc_mtx); + g_env_light.setLightTevColorType(pJVar5, ¶m_1->tevStr); + mDoExt_modelUpdateDL(pJVar5); + } else { + pcVar6->x = phVar4->m10.x; + pcVar6->y = phVar4->m10.y; + pcVar6->z = phVar4->m10.z; + param_1->m1F6C++; + pcVar6++; + } + } } /* 800EC1E4-800EC300 .text himo_hang_draw__FP11himo2_class */ -void himo_hang_draw(himo2_class*) { - /* Nonmatching */ +void himo_hang_draw(himo2_class* param_1) { + /* Nonmatching - for loop */ + cXyz* pcVar3 = param_1->m1F30.mpLines->mpSegments + param_1->m1F6C; + cXyz local_38 = param_1->m02EC[0] - param_1->m2504; + for (int uVar2 = 0; uVar2 < 5; uVar2++, pcVar3++, param_1->m1F6C++) { + pcVar3->x = param_1->m2504.x + local_38.x * 0.25f * uVar2; + pcVar3->y = param_1->m2504.y + local_38.y * 0.25f * uVar2; + pcVar3->z = param_1->m2504.z + local_38.z * 0.25f * uVar2; + } } /* 800EC300-800EC338 .text himo2_disp__FP11himo2_class */ -void himo2_disp(himo2_class*) { - /* Nonmatching */ +void himo2_disp(himo2_class* param_1) { + if (param_1->m02DC < 10) { + himo2_draw(param_1, ¶m_1->m0310[0]); + } else { + himo_hang_draw(param_1); + } } /* 800EC338-800ECBE8 .text daHimo2_Draw__FP11himo2_class */ -static BOOL daHimo2_Draw(himo2_class*) { - /* Nonmatching */ +static BOOL daHimo2_Draw(himo2_class* param_1) { + /* Nonmatching - cXyz */ + f32 fVar1; + int iVar3; + int iVar5; + cXyz* pcVar7; + int iVar8; + f32 dVar10; + f32 dVar11; + f32 dVar12; + f32 dVar13; + f32 dVar14; + cXyz local_a4c; + cXyz local_a40; + cXyz local_a34; + cXyz local_a28; + cXyz local_a1c; + f32 local_b0; + f32 local_a8; + + if (((param_1->m24D9 >= 0) && (param_1->m029E == 0)) && + (param_1->m02DC != 0 || (!(daPy_getPlayerActorClass()->checkPlayerNoDraw()) && !(daPy_getPlayerActorClass()->checkPlayerGuard())))) + { + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¶m_1->current.pos, ¶m_1->tevStr); + param_1->m1F6C = 0; + dComIfGd_setListP1(); + if (param_1->m24D8 != 0) { + spin_draw(param_1); + } + if ((param_1->m24D9 == 0) || (param_1->m24D9 >= 3)) { + himo2_disp(param_1); + } + if (param_1->m1F6C > 200) { + dComIfGd_setList(); + return TRUE; + } else { + pcVar7 = param_1->m1F30.mpLines->mpSegments; + cXyz local_a10[200]; + iVar3 = 0; + for (iVar5 = 0; iVar5 < param_1->m1F6C; iVar5++) { + local_a10[iVar3].x = pcVar7->x; + local_a10[iVar3].y = pcVar7->y; + local_a10[iVar3].z = pcVar7->z; + pcVar7++; + iVar3 = iVar3 + 12; + } + iVar3 = 0; + for (iVar5 = 0; iVar5 < param_1->m1F6C; iVar5++) { + pcVar7[-1].x = local_a10[iVar3].x; + pcVar7[0].y = local_a10[iVar3].y; + pcVar7[0].z = local_a10[iVar3].z; + iVar3 = iVar3 + 12; + pcVar7 = pcVar7 + -1; + } + GXColor local_a50 = {200, 0x96, 50, 0xFF}; + param_1->m1F30.update((u16)param_1->m1F6C, rope_scale, local_a50, 0, ¶m_1->tevStr); + dComIfGd_set3DlineMat(¶m_1->m1F30); + daPy_py_c* apdVar2 = (daPy_py_c*)dComIfGp_getPlayer(0); + mDoMtx_YrotS(*calc_mtx, -apdVar2->shape_angle.y); + local_a40 = param_1->m02EC[1] - param_1->m1F84; + MtxPosition(&local_a40, &local_a28); + local_a28.z = local_a28.z * (REG0_F(5) + 500.0f); + if (local_a28.z > 16384.0f) { + local_a28.z = 16384.0f; + } + if (local_a28.z < -16384.0f) { + local_a28.z = -16384.0f; + } + local_b0 = local_a28.z; + cLib_addCalcAngleS2(¶m_1->m1F90, local_a28.z, 2, REG0_S(2) + 0x800); + local_a28.x *= REG0_F(6) + -200.0f; + fVar1 = REG0_F(7) + 4000.0f; + if (local_a28.x > fVar1) { + local_a28.x = fVar1; + } + if (local_a28.x < -fVar1) { + local_a28.x = -fVar1; + } + local_a8 = local_a28.x; + cLib_addCalcAngleS2(¶m_1->m1F94, local_a28.x, 2, REG0_S(2) + 0x800); + if (local_a28.y < REG0_F(8) + -20.0f) { + cLib_addCalcAngleS2(¶m_1->m1F92, -0x8000, 2, 0x1000); + } else { + cLib_addCalcAngleS2(¶m_1->m1F92, 0, 2, 0x1000); + } + param_1->m1F84 = param_1->m02EC[1]; + local_a1c.z = 0.0f; + local_a1c.x = 0.0f; + dVar13 = ((REG0_F(10) + param_1->m2188 * (REG0_F(9) + 3.0f)) - 120.0f); + iVar5 = 0; + iVar3 = 0; + dVar14 = 300.0f; + dVar10 = 15.0f; + dVar11 = 1.0f; + dVar12 = -20000.0f; + for (int iVar9 = 0; iVar9 < 5; iVar9++) { + pcVar7 = param_1->m1F98.mpLines->mPosArr[iVar3 + -8]; + + if (dVar13 > (dVar14 * (4 - iVar9))) { + cLib_addCalc0(¶m_1->m1F70, dVar11, (REG0_F(11) + 0.2f)); + } else { + cLib_addCalc2(¶m_1->m1F70, 1.0f, 1.0f, REG0_F(12) + 0.1f); + } + + local_a1c.y = (dVar10 * param_1->m1F70); + mDoMtx_YrotS(*calc_mtx, apdVar2->shape_angle.y); + iVar8 = ((dVar11 - param_1->m1F70) * (dVar12 + REG0_F(13))); + local_a8 = iVar8; + mDoMtx_ZrotM(*calc_mtx, param_1->m1F92 + iVar9 * (REG0_S(0) + param_1->m1F94 + -2000) + iVar8); + mDoMtx_XrotM(*calc_mtx, param_1->m1F90); + MtxTrans(0.0f, -local_a1c.y, 0.0f, true); + for (int j = 0; j < 32; j++, pcVar7++) { + mDoMtx_XrotM(*calc_mtx, 0x800); + MtxPosition(&local_a1c, pcVar7); + param_1->m02EC[1] += *pcVar7; + } + iVar5 += 4; + iVar3 += 24; + } + GXColor local_a54 = {200, 0x96, 50, 0xFF}; + param_1->m1F98.update(0x20, rope_scale, local_a54, 0, ¶m_1->tevStr); + dComIfGd_set3DlineMat(¶m_1->m1F98); + pcVar7 = ((param_1->m1FD8).mpLines)->mpSegments; + local_a8 = param_1->m2188; + if (((int)param_1->m2188 & REG0_S(4) + 64) != 0) { + fVar1 = REG0_F(14) + 15.0f; + } else { + fVar1 = 0.0f; + } + cLib_addCalc2(¶m_1->m1FD4, fVar1, 1.0f, REG0_F(15) + 4.0f); + local_a4c = param_1->m02EC[0] - param_1->m02EC[1]; + mDoMtx_YrotS(*calc_mtx, (cM_atan2s(local_a4c.x, local_a4c.z) + REG0_S(0) + -0x4000)); + local_a1c.x = 0.0f; + local_a1c.y = (REG0_F(7) + -10.0f - param_1->m1FD4) * param_1->m1F70; + local_a1c.z = (REG0_F(8) + 10.0f + param_1->m1FD4) * param_1->m1F70; + MtxPosition(&local_a1c, &local_a28); + local_a34.x = local_a34.x * 0.06666667f; + local_a34.y = local_a34.y * 0.06666667f; + local_a34.z = local_a34.z * 0.06666667f; + int uVar6 = 0; + int uVar4 = 0; + for (int i = 0; i < 16; i++) { + f32 fVar1 = cM_ssin(uVar4 & 0xFFFF); + pcVar7->x = param_1->m02EC[0].x + local_a34.x * uVar6 + local_a28.x * fVar1; + pcVar7->y = param_1->m02EC[0].y + local_a34.y * uVar6 + local_a28.y * fVar1; + pcVar7->z = param_1->m02EC[0].z + local_a34.z * uVar6 + local_a28.z * fVar1; + pcVar7++; + uVar6 += 1; + uVar4 += 0x888; + } + GXColor local_a58 = {200, 0x96, 50, 0xFF}; + param_1->m1FD8.update(16, rope_scale, local_a58, 0, ¶m_1->tevStr); + dComIfGd_set3DlineMat(¶m_1->m1FD8); + dComIfGd_setList(); + } + } + return TRUE; } /* 800ECBE8-800ECC54 .text s_a_d_sub__FPvPv */ -void s_a_d_sub(void*, void*) { - /* Nonmatching */ +void* s_a_d_sub(void* param_1, void* param_2) { + if ((fopAc_IsActor(param_1)) && (fopAcM_GetName(param_1) == PROC_KUI)) { + himo2_class* rope = (himo2_class*)param_2; + (&rope->m218C)[rope->m24AC] = (fopAc_ac_c*)param_1; + rope->m24AC++; + } + return NULL; } /* 800ECC54-800ED19C .text search_target__FP11himo2_class4cXyz */ -void search_target(himo2_class*, cXyz) { - /* Nonmatching */ +fopAc_ac_c* search_target(himo2_class* param_1, cXyz param_2) { + /* Nonmatching - cXyz, regalloc */ + bool bVar1; + f32 fVar2; + f32 fVar3; + f32 fVar4; + f32 fVar5; + f32 fVar6; + f32 fVar7; + f32 fVar8; + f32 fVar9; + daPy_py_c* apdVar11; + s16 sVar12; + s16 sVar13; + s16 sVar14; + s16 sVar15; + int iVar16; + uint uVar17; + fopAc_ac_c* pfVar18; + int iVar19; + f32 dVar21; + f32 dVar22; + cXyz local_60; + cXyz local_54; + + apdVar11 = daPy_getPlayerActorClass(); + param_1->m24AC = 0; + for (int iVar16 = 0, iVar19 = 100; iVar19 != 0; iVar16 += 4, iVar19--) { + (¶m_1->m218C)[iVar16] = NULL; + } + fpcEx_Search(s_a_d_sub, param_1); + mDoMtx_YrotS(*calc_mtx, -apdVar11->shape_angle.y); + dVar22 = 100.0f; + sVar12 = 0x4000 - l_himo2HIO.m08; + sVar13 = l_himo2HIO.m08 + 0x4000; + if (param_1->m24AC != 0) { + uVar17 = 0; + do { + do { + if ((uint)(s8)param_1->m24AC <= uVar17) { + return NULL; + } + pfVar18 = (¶m_1->m218C)[uVar17]; + bVar1 = fopAcM_GetParam(pfVar18) != 0; + local_54.x = apdVar11->current.pos.x - pfVar18->current.pos.x; + local_54.z = apdVar11->current.pos.z - pfVar18->current.pos.z; + iVar16 = cM_atan2s(local_54.x, local_54.z); + sVar14 = pfVar18->current.angle.y - iVar16; + if ((sVar14 >= -1) || (!bVar1)) { + sVar14 = -sVar14; + param_1->m251C = 1; + } else { + param_1->m251C = 0; + } + if ((bVar1) || (sVar12 > sVar14 && (sVar14 < sVar13))) { + local_54.x = pfVar18->current.pos.x - apdVar11->current.pos.x; + local_54.y = pfVar18->current.pos.y - apdVar11->current.pos.y; + local_54.z = pfVar18->current.pos.z - apdVar11->current.pos.z; + MtxPosition(&local_54, &local_60); + if ((local_60.z > 100.0f) && (bVar1 || (std::fabsf(local_60.y) < l_himo2HIO.m14))) { + dVar21 = std::sqrtf(local_60.x * local_60.x + local_60.z * local_60.z); + if (dVar21 < dVar22) { + fVar2 = dComIfGp_getCamera(0)->mLookat.mEye.x; + fVar4 = dComIfGp_getCamera(0)->mLookat.mEye.y; + fVar5 = dComIfGp_getCamera(0)->mLookat.mEye.z; + fVar6 = param_2.x - fVar2; + fVar3 = param_2.y; + fVar8 = param_2.z - fVar5; + fVar2 = pfVar18->current.pos.x - fVar2; + fVar7 = pfVar18->current.pos.y - fVar4; + fVar5 = pfVar18->current.pos.z - fVar5; + iVar16 = cM_atan2s(fVar6, fVar8); + iVar19 = cM_atan2s(fVar2, fVar5); + sVar14 = iVar19 - iVar16; + if (sVar14 < 0) { + sVar14 = -sVar14; + } + fVar9 = std::sqrtf(fVar5 * fVar5 + fVar2 * fVar2 + fVar7 * fVar7); + sVar15 = cM_atan2s((pfVar18->scale).z * l_himo2HIO.m10, fVar9); + if (sVar15 < 0) { + sVar15 = -sVar15; + } + if ((-sVar15 > sVar14) && (sVar14 < sVar15)) { + fVar6 = std::sqrtf(fVar6 * fVar6 + fVar8 * fVar8); + iVar16 = cM_atan2s(fVar3 - fVar4, fVar6); + fVar2 = std::sqrtf(fVar2 * fVar2 + fVar5 * fVar5); + iVar19 = cM_atan2s(fVar7, fVar2); + sVar14 = l_himo2HIO.m0C; + if (bVar1) { + sVar14 = 2000; + } + if ((-iVar16 < -iVar19 + l_himo2HIO.m0E) && ((-iVar19 + iVar16) < sVar14)) { + return pfVar18; + } + } + } + } + } + uVar17++; + } while (uVar17 != (s8)param_1->m24AC); + uVar17 = 0; + dVar22 = (dVar22 + 100.0f); + if (bVar1) { + fVar2 = 2000.0f; + } else { + fVar2 = l_himo2HIO.m18; + } + } while (!(dVar22 > fVar2)); + } + return NULL; } /* 800ED19C-800ED2E0 .text setTargetPos__11himo2_classFP4cXyzPfPf */ -BOOL himo2_class::setTargetPos(cXyz*, float*, float*) { - /* Nonmatching */ +BOOL himo2_class::setTargetPos(cXyz* param_1, float* param_2, float* param_3) { + /* Nonmatching - pfVar1 */ + *param_2 = -1.0f; + *param_3 = -1.0f; + m2524 = *param_1; + fopAc_ac_c* pfVar1 = search_target(this, m2524); + m217C = pfVar1; + if (pfVar1 != NULL) { + if (fopAcM_GetParam(m217C) != 0) { + *param_2 = 700.0f; + *param_3 = 100.0f; + } else { + *param_2 = (fopAcM_GetParam(m217C) >> 0x10 & 0x0F) * 100.0f; + *param_3 = (fopAcM_GetParam(m217C) >> 0x14 & 0x0F) * 100.0f; + if (*param_2 >= 1500.0f) { + *param_2 = -1.0f; + } + if (*param_3 >= 1500.0f) { + *param_3 = -1.0f; + } + } + return TRUE; + } else { + return FALSE; + } } /* 800ED2E0-800ED32C .text dr_a_sub__FPvPv */ -void dr_a_sub(void*, void*) { - /* Nonmatching */ +void* dr_a_sub(void* param_1, void* param_2) { + if ((fopAc_IsActor(param_1)) && (fopAcM_GetName(param_1) == PROC_DR2)) { + return param_1; + } else { + return param_2 = NULL; + } } /* 800ED32C-800ED378 .text b_a_sub__FPvPv */ -void b_a_sub(void*, void*) { - /* Nonmatching */ +void* b_a_sub(void* param_1, void* param_2) { + if ((fopAc_IsActor(param_1)) && (fopAcM_GetName(param_1) == PROC_BTD)) { + return param_1; + } else { + return param_2 = NULL; + } } /* 800ED378-800ED688 .text himo2_bg_check__FP11himo2_class */ -void himo2_bg_check(himo2_class*) { - /* Nonmatching */ +int himo2_bg_check(himo2_class* param_1) { + u8 flag; + u32 uVar3; + int iVar4; + JPABaseEmitter* pJVar5; + csXyz local_38; + + if (param_1->m02A2 != 0) { + return FALSE; + } else { + param_1->m2574.CrrPos(g_dComIfG_gameInfo.play.mBgS); + if ((param_1->m2574.ChkWallHit() || param_1->m2574.ChkRoofHit()) || param_1->m2574.ChkGroundHit()) { + param_1->m02DC = 9; + param_1->speedF *= -1.0f; + param_1->m0308 = 30; + cBgS_PolyInfo local_24; + flag = param_1->m2574.GetOnePolyInfo(&local_24); + JUT_ASSERT(1569, flag == NULL); + uVar3 = dComIfG_Bgsp()->GetMtrlSndId(local_24); + mDoAud_seStart(JA_SE_LK_SW_HIT_S, ¶m_1->current.pos, uVar3, dComIfGp_getReverb(fopAcM_GetRoomNo(param_1))); + iVar4 = dComIfG_Bgsp()->GetAttributeCode(local_24); + if ((iVar4 == dBgS_Attr_WOOD_e) || (iVar4 == dBgS_Attr_STONE_e)) { + local_38.x = param_1->current.angle.x; + local_38.y = param_1->current.angle.y; + local_38.z = param_1->current.angle.z; + local_38.y = param_1->current.angle.y + 0x8000; + mDoAud_seStart(JA_SE_LK_MS_WEP_HIT, ¶m_1->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(param_1))); + if (iVar4 == dBgS_Attr_WOOD_e) { + pJVar5 = dComIfGp_particle_set( + dPa_name::ID_COMMON_002B, + ¶m_1->current.pos, + &local_38, + NULL, + 0xFF, + NULL, + -1, + ¶m_1->tevStr.mColorK0, + ¶m_1->tevStr.mColorK0, + NULL + ); + if (pJVar5 != NULL) { + pJVar5->mSpread = 0.2f; + pJVar5->mVolumeSweep = 0.15f; + } + } else { + local_38.x = local_38.x + 0x4000; + pJVar5 = dComIfGp_particle_set(dPa_name::ID_COMMON_002C, ¶m_1->current.pos, &local_38); + if (pJVar5 != NULL) { + pJVar5->mInitialVelAxis = 15.0f; + } + dKy_Sound_set(param_1->current.pos, 100, fopAcM_GetID(param_1), 5); + } + if (pJVar5 != NULL) { + pJVar5->mRate = 8.0f; + pJVar5->mMaxFrame = 1; + } + } + return true; + } else { + return false; + } + } } /* 800ED688-800ED6F4 .text pl_pos_add__FP11himo2_class */ -void pl_pos_add(himo2_class*) { - /* Nonmatching */ +void pl_pos_add(himo2_class* param_1) { + cXyz local_28 = daPy_getPlayerActorClass()->old.pos - daPy_getPlayerActorClass()->current.pos; + param_1->current.pos += local_28; } /* 800ED6F4-800F0038 .text new_himo2_move__FP11himo2_class */ -void new_himo2_move(himo2_class*) { - /* Nonmatching */ +void new_himo2_move(himo2_class* param_1) { + /* Nonmatching - cXyz, regalloc */ + f32 fVar1; + bool bVar2; + bool bVar3; + bool bVar4; + dAttention_c* this_00; + uint uVar6; + daPy_py_c* this_01; + int iVar8; + s16 sVar15; + int iVar9; + s16 psVar11; + daYkgr_c* pdVar13; + int __x; + f32 dVar19; + f32 dVar20; + f32 dVar21; + f32 dVar22; + f32 dVar23; + f32 dVar24; + f32 dVar25; + f32 fVar26; + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + dComIfGp_getPlayerCameraID(0); + camera_class* camera = (camera_class*)dComIfGp_getCamera(0); + cXyz local_140 = param_1->m02EC[0]; + cXyz local_110 = param_1->m02EC[1]; + fVar26 = param_1->current.pos.x - local_140.x; + dVar19 = (param_1->current.pos.y - local_140.y); + fVar1 = param_1->current.pos.z - local_140.z; + fVar26 = std::sqrtf(fVar1 * fVar1 + fVar26 * fVar26 + (dVar19 * dVar19)); + param_1->m2188 = fVar26; + if (param_1->m0308 != 0) { + param_1->m0308--; + } + if (param_1->m02A2 != 0) { + param_1->m02A2--; + } + if (param_1->m029C != 0) { + param_1->m029C--; + } + if (param_1->m029E != 0) { + param_1->m029E--; + } + if (param_1->m02A0 != 0) { + param_1->m02A0--; + } + this_00 = &dComIfGp_getAttention(); + if (this_00->Lockon()) { + rope_scale = l_himo2HIO.m20; + } else { + rope_scale = l_himo2HIO.m1C; + param_1->m029E = 0; + } + bVar3 = false; + bVar4 = false; + bVar2 = false; + fopAc_ac_c* pfVar17 = NULL; + if (((this_00->LockonTruth() & 0xFF) != 0) && (pfVar17 = this_00->LockonTarget(0), pfVar17 != NULL)) { + param_1->m2524 = pfVar17->eyePos; + bVar3 = true; + } + if ((param_1->m02DC != 0) && (param_1->m24D9 < 3)) { + this_01 = (daPy_py_c*)daPy_getPlayerLinkActorClass(); + if ((this_01->checkRopeForceEnd()) && (!param_1->eventInfo.checkCommandDemoAccrpt())) { + param_1->m24D9 = 0; + param_1->m24D8 = 0; + fopAcM_SetParam(param_1, 0); + param_1->m0308 = 0x1E; + if (param_1->m02DC == 11) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNCOIL, 0); + param_1->m02DC = 0; + } else { + param_1->m02DC = 9; + } + if ((param_1->m217C != NULL) && (fopAcM_GetName(param_1) == PROC_KUI)) { + param_1->m217C->health = 0; + } + param_1->m217C = NULL; + } + } + cXyz local_11c; + switch (param_1->m02DC) { + case 0: { + param_1->speedF = 0.0f; + if ((uVar6 == 0) && player->checkRopeReadyAnime()) { + mDoMtx_YrotS(*calc_mtx, player->shape_angle.y); + mDoMtx_ZrotM(*calc_mtx, REG0_S(2) + -12000); + mDoMtx_YrotM(*calc_mtx, param_1->m02D8 * (REG0_S(3) + 0x2000)); + local_110.x = 0.0f; + local_110.y = 0.0f; + local_110.z = REG0_F(11) + 70.0f; + MtxPosition(&local_110, ¶m_1->current.pos); + param_1->current.pos += local_140; + param_1->m02CC = REG0_S(5) + 0x60; + if ((param_1->m02D8 & 7) == 0) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_COIL_1, 0); + } + } else { + iVar8 = (param_1->m2188 * (REG0_F(3) + 0.060000002f)); + param_1->m02CC = 97 - iVar8; + cLib_addCalc2(¶m_1->current.pos.x, local_140.x, 1.0f, param_1->m2500 * 200.0f); + cLib_addCalc2(¶m_1->current.pos.y, local_140.y, 1.0f, param_1->m2500 * 200.0f); + cLib_addCalc2(¶m_1->current.pos.z, local_140.z, 1.0f, param_1->m2500 * 200.0f); + cLib_addCalc2(¶m_1->m2500, 1.0f, 1.0f, 0.005f); + local_110 = param_1->current.pos - local_140; + iVar8 = -1; + iVar8 = local_110.abs(); + if (dVar21 > 5.0f) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNWIND, 0); + } + } + if (fopAcM_GetParam(param_1) == 1) { + param_1->m2500 = 0.0f; + param_1->m02E4 = 0.0f; + param_1->m0308 = REG0_S(2) + 0x28; + param_1->m029E = 0; + param_1->m02A0 = REG0_S(9) + 10; + param_1->m02A2 = 3; + camera = (camera_class*)dComIfGp_getCamera(0); + dVar20 = param_1->m2524.x - camera->mLookat.mEye.x; + dVar22 = param_1->m2524.y - camera->mLookat.mEye.y; + dVar21 = param_1->m2524.z - camera->mLookat.mEye.z; + local_110.z = REG0_F(15) * 100.0f + 1000.0f; + dVar23 = (dVar21 * dVar21); + dVar24 = (dVar20 * dVar20); + fVar26 = std::sqrtf(dVar23 + (dVar24 + (dVar22 * dVar22))); + if (local_110.z > fVar26) { + psVar11 = cM_atan2s(dVar20, dVar21); + fVar26 = std::sqrtf(dVar24 + dVar23); + iVar9 = cM_atan2s(dVar22, fVar26); + mDoMtx_YrotS(*calc_mtx, psVar11); + mDoMtx_XrotM(*calc_mtx, -iVar9); + local_110.x = 0.0f; + local_110.y = 0.0f; + MtxPosition(&local_110, &local_11c); + param_1->m2524.x = camera->mLookat.mEye.x + local_11c.x; + param_1->m2524.y = camera->mLookat.mEye.y + local_11c.y; + param_1->m2524.z = camera->mLookat.mEye.z + local_11c.z; + } + himo2_s* phVar18 = ¶m_1->m0310[100]; + if (uVar6 != 0) { + param_1->m02DC = 2; + param_1->m2530 = 4.0f; + param_1->m02CC = REG0_S(6) + 0x5A; + param_1->current.pos = local_140; + for (int iVar8 = 0; iVar8 < 100; iVar8++) { + phVar18->m10 = local_140; + phVar18++; + } + } else { + param_1->m02DC = 1; + param_1->m0308 = REG0_S(4) + 2; + param_1->m2530 = 4.0f; + param_1->m02CC = REG0_S(6) + 0x5A; + param_1->current.pos = local_140; + for (int iVar8 = 0; iVar8 < 100; iVar8++) { + phVar18->m10 = local_140; + phVar18++; + } + } + } + break; + } + case 1: { + mDoMtx_YrotS(*calc_mtx, param_1->shape_angle.y); + mDoMtx_ZrotM(*calc_mtx, REG0_S(2) + -12000); + mDoMtx_YrotM(*calc_mtx, param_1->m02D8 * (REG0_S(3) + 0x2000)); + local_110.x = 0.0f; + local_110.y = 0.0f; + local_110.z = REG0_F(11) + 70.0f; + MtxPosition(&local_110, ¶m_1->current.pos); + param_1->current.pos += local_140; + param_1->m02CC = REG0_S(5) + 0x60; + if ((param_1->m02D8 & 7) == 0) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_SWING_ROUND, 0); + } + sVar15 = param_1->m02D8 * (REG0_S(3) + 0x2000); + if (((REG0_S(7) + -20000) >= sVar15) && (sVar15 < (REG0_S(7) + -0x2e20))) { + bVar2 = true; + } + if ((param_1->m0308 == 0) && (bVar2)) { + param_1->m02DC = 3; + if (bVar3) { + param_1->m0308 = REG0_S(4) + 70; + param_1->m217C = pfVar17; + fpc_ProcID fVar10 = fopAcM_GetID(pfVar17); + param_1->m2180 = fVar10; + } else { + param_1->m0308 = REG0_S(2) + 20; + param_1->m2180 = fpcM_ERROR_PROCESS_ID_e; + } + local_110 = param_1->m2524 - param_1->current.pos; + psVar11 = cM_atan2s(local_110.x, local_110.z); + param_1->current.angle.y = psVar11; + fVar26 = std::sqrtf(local_110.x * local_110.x + local_110.z * local_110.z); + iVar8 = cM_atan2s(local_110.y, fVar26); + param_1->current.angle.x = -iVar8; + fopAcM_seStart(param_1, JA_SE_LK_ROPE_LAUNCH, 0); + } + break; + } + case 2: { + param_1->m02CC = REG0_S(0); + cXyz local_134; + if (param_1->m217C != NULL) { + if (((fopAcM_GetParam(param_1) & 0xF0) == 0) && ((fopAcM_GetParam(param_1->m217C) & 0x0F) == 3)) { + local_134 = param_1->m217C->current.pos; + } else { + local_134 = param_1->m2524; + } + mDoMtx_YrotS(*calc_mtx, param_1->current.angle.y); + mDoMtx_XrotM(*calc_mtx, param_1->current.angle.x); + local_110.y = 0.0f; + local_110.x = 0.0f; + local_110.z = REG0_F(14) * 100.0f + 100.0f; + MtxPosition(&local_110, &local_11c); + local_134.x = local_134.x + local_11c.x; + local_134.y = local_134.y + local_11c.y; + local_134.z = local_134.z + local_11c.z; + } else { + local_134 = param_1->m2524; + } + dVar25 = (local_134.x - param_1->current.pos.x); + dVar23 = (local_134.y - param_1->current.pos.y); + dVar20 = (local_134.z - param_1->current.pos.z); + dVar24 = (dVar20 * dVar20); + dVar22 = (dVar25 * dVar25); + fVar26 = std::sqrtf(dVar24 + (dVar22 + (dVar23 * dVar23))); + dVar21 = fVar26; + fVar26 = std::sqrtf(dVar22 + dVar24); + dVar22 = fVar26; + iVar8 = (dVar21 * (REG0_F(3) + -5.0f)); + sVar15 = iVar8; + if (sVar15 < (REG0_S(2) + -3000)) { + sVar15 = REG0_S(2) + -3000; + } + if ((param_1->m217C != NULL) || ((param_1->speedF * 10.0f) > dVar21)) { + param_1->current.angle.y = cM_atan2s(dVar25, dVar20); + param_1->current.angle.x = -cM_atan2s(dVar23, dVar22); + } + param_1->speedF = 20.0f; + mDoMtx_YrotS(*calc_mtx, param_1->current.angle.y); + mDoMtx_XrotM(*calc_mtx, param_1->current.angle.x + sVar15); + local_110.y = 0.0f; + local_110.x = 0.0f; + local_110.z = param_1->speedF; + MtxPosition(&local_110, ¶m_1->speed); + param_1->current.pos += param_1->speed; + pl_pos_add(param_1); + if (param_1->m217C != NULL) { + if ((dVar21 < (param_1->speedF * 10.0f)) || (param_1->m0308 == 0)) { + param_1->m02DC = 10; + param_1->m24D9 = 0xFF; + param_1->m24D8 = 1; + if (btd != 0) { + fopAcM_OffStatus(btd, 0x4000); + } + } else if ((param_1->m02A2 == 0) && param_1->m2050.ChkAtHit()) { + param_1->m02DC = 9; + param_1->speedF *= -1.0f; + param_1->m0308 = 0x28; + param_1->m217C = NULL; + } else if (!himo2_bg_check(param_1)) { + if ((param_1->m02A2 == 0) && param_1->m2050.ChkAtHit()) { + param_1->m02DC = 9; + param_1->speedF *= -1.0f; + param_1->m0308 = 0x28; + } else if (param_1->m0308 == 0) { + param_1->m02DC = 8; + param_1->m0308 = 50; + fopAcM_seStart(param_1, JA_SE_LK_ROPE_MAXLENGTH, 0); + } + } + } else if ((CPad_CHECK_TRIG_X(0) || CPad_CHECK_TRIG_Y(0) || CPad_CHECK_TRIG_Z(0)) && (param_1->m02A0 == 0)) { + param_1->m02DC = 8; + param_1->m0308 = 0x28; + fopAcM_seStart(param_1, JA_SE_LK_ROPE_MAXLENGTH, 0); + param_1->m217C = NULL; + } + break; + } + case 3: { + param_1->m02CC = REG0_S(0); + pfVar17 = fopAcM_SearchByID(param_1->m2180); + if (pfVar17 != NULL) { + local_110 = pfVar17->eyePos - param_1->current.pos; + cLib_addCalcAngleS2(¶m_1->current.angle.y, cM_atan2s(local_110.x, local_110.z), 2, REG0_S(1) + 0x800); + fVar26 = std::sqrtf(local_110.x * local_110.x + local_110.z * local_110.z); + cLib_addCalcAngleS2(¶m_1->current.angle.x, -cM_atan2s(local_110.y, fVar26), 2, REG0_S(1) + 0x800); + __x = local_110.abs(); + if (dVar21 < (REG0_F(3) + 50.0f)) { + bVar4 = true; + } + } + param_1->speedF = REG0_F(14) + 30.0f; + mDoMtx_YrotS(*calc_mtx, param_1->current.angle.y); + mDoMtx_XrotM(*calc_mtx, param_1->current.angle.x); + local_110.y = 0.0f; + local_110.x = 0.0f; + local_110.z = param_1->speedF; + MtxPosition(&local_110, ¶m_1->speed); + param_1->current.pos += param_1->speed; + pl_pos_add(param_1); + iVar8 = himo2_bg_check(param_1); + if (iVar8 != 0) { + bVar4 = true; + param_1->m2500 = 0.1f; + } + if ((param_1->m02A2 == 0) && param_1->m2050.ChkAtHit()) { + bVar4 = true; + param_1->m2500 = 0.1f; + } + if (param_1->m0308 == 0) { + bVar4 = true; + param_1->m2500 = 0.02f; + } + if (((CPad_CHECK_TRIG_X(0) || CPad_CHECK_TRIG_Y(0) || CPad_CHECK_TRIG_Z(0)) && (param_1->m02A0 == 0)) || (bVar4)) { + param_1->m02DC = 5; + } + break; + } + case 4: { + pfVar17 = fopAcM_SearchByID(param_1->m2180); + if (pfVar17 == NULL) { + param_1->m02DC = 5; + } else { + mDoMtx_YrotS(*calc_mtx, (param_1->m02D8 << 13)); + local_110.x = 0.0f; + local_110.y = 0.0f; + local_110.z = param_1->m2184; + MtxPosition(&local_110, &local_11c); + param_1->current.pos = pfVar17->eyePos + local_11c; + cLib_addCalc0(¶m_1->m2184, 1.0f, 5.0f); + if (param_1->m2184 < 0.1f) { + fopAcM_SetParam(param_1, 0); + } + iVar8 = (param_1->m2188 * (REG0_F(5) + 0.060000002f)); + iVar8 = 97 - iVar8; + if ((iVar8 < param_1->m02CC) || (param_1->m2184 < 0.1f)) { + param_1->m02CC = iVar8; + } + if ((CPad_CHECK_TRIG_X(0) || CPad_CHECK_TRIG_Y(0)) || CPad_CHECK_TRIG_Z(0)) { + param_1->m02DC = 5; + sVar15 = fopAcM_GetName(pfVar17); + if (sVar15 == PROC_BK) { + bk_class* boko; + boko->dr.mAction = 0; + boko->dr.mMode = 0; + } + } + } + param_1->m02E4 = -5.0f; + break; + } + case 5: { + param_1->m02CC = REG0_S(0); + cLib_addCalc2(¶m_1->current.pos.x, local_140.x, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->current.pos.y, local_140.y, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->current.pos.z, local_140.z, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->m2500, 1.0f, 1.0f, 0.01f); + pl_pos_add(param_1); + local_110 = param_1->current.pos - local_140; + iVar8 = -1; + iVar8 = local_110.abs(); + if (dVar21 > 5.0f) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNWIND, 0); + } else { + fopAcM_SetParam(param_1, 0); + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNCOIL, 0); + param_1->m02DC = 0; + param_1->m217C = NULL; + param_1->m24D8 = 0; + } + break; + } + case 8: { + cLib_addCalc2(¶m_1->speedF, -50.0f, 1.0f, 6.0f); + } + case 9: { + cLib_addCalc2(¶m_1->current.pos.x, local_140.x, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->current.pos.y, local_140.y, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->current.pos.z, local_140.z, 1.0f, (REG0_F(15) + 400.0f) * param_1->m2500); + cLib_addCalc2(¶m_1->m2500, 1.0f, 1.0f, 0.01f); + pl_pos_add(param_1); + local_110 = param_1->current.pos - local_140; + iVar8 = -1; + iVar8 = local_110.abs(); + if (dVar21 > 5.0f) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNWIND, 0); + } else { + fopAcM_SetParam(param_1, 0); + param_1->m02DC = 0; + param_1->current.pos = local_140; + param_1->m029E = REG0_S(6) + 20; + } + param_1->m02CC = REG0_S(0); + break; + } + case 10: { + iVar8 = (param_1->m2188 * (REG0_F(1) + 0.060000002f)); + param_1->m02CC = 100 - iVar8; + param_1->current.pos = param_1->m2504; + cLib_addCalc2(¶m_1->m02E4, -6.25f, 1.0f, 0.375f); + if (fopAcM_GetParam(param_1) == 3) { + param_1->m02DC = 11; + if ((fopAcM_GetParam(param_1->m217C) & 0xF0) != 0) { + dComIfGs_onEventBit(0x540); + } else { + dComIfGs_onEventBit(0x580); + } + } + param_1->m217C->health = 1; + } + case 11: { + param_1->current.pos = param_1->m2504; + iVar8 = (param_1->m2188 * (REG0_F(2) + 0.060000002f)); + param_1->m02CC = 100 - iVar8; + param_1->m217C->health = 3; + if (fopAcM_GetParam(param_1) == 4) { + fopAcM_SetParam(param_1, 0); + fopAcM_seStart(param_1, JA_SE_LK_ROPE_UNCOIL, 0); + param_1->m02DC = 0; + param_1->m217C->health = 0; + param_1->m217C = NULL; + if (param_1->m24D9 != 0) { + param_1->m24D9 = 6; + param_1->m029C = 120; + } + param_1->m24D8 = 0; + } + } + } + dVar21 = 0.0f; + switch (param_1->m24D9) { + default: + break; + case -1: { + if (!param_1->eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(param_1, dEvtFlag_NOPARTNER_e, 0xFFFF, 0); + param_1->eventInfo.onCondition(dEvtCnd_UNK2_e); + break; + } + param_1->m24F4 = REG0_F(12) + 50.0f; + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(2); + param_1->m24D9 = 2; + param_1->m24B4 = -400.0f; + param_1->m24BC = 0; + param_1->m24C8 = 0; + param_1->m24C4 = 0.0f; + param_1->m24CA = 0; + if (param_1->m251C != 0) { + param_1->m2510 = param_1->m217C->current.angle.y + -0x4000; + } else { + param_1->m2510 = param_1->m217C->current.angle.y + 0x4000; + } + if ((fopAcM_GetParam(param_1->m217C) & 0xF0) != 0) { + param_1->m24B8 = REG0_F(6) + -90.0f; + param_1->m2514 = -1.0f; + param_1->m2518 = REG0_F(7) + 1.0f; + param_1->m24FC = REG0_F(16) + 3.5f; + } else { + param_1->m24B8 = 0.0f; + if (l_himo2HIO.m06 == 2) { + param_1->m2514 = 1.0f; + param_1->m2518 = -1.0f; + } else if (l_himo2HIO.m06 < 2) { + if (l_himo2HIO.m06 == 0) { + fVar26 = cM_rndF(1.0f); + if (fVar26 < 0.5f) { + param_1->m2514 = 1.0f; + } else { + param_1->m2514 = -1.0f; + } + fVar26 = cM_rndF(1.0f); + if (fVar26 < 0.5f) { + param_1->m2518 = 1.0f; + } else { + param_1->m2518 = -1.0f; + } + } else if (l_himo2HIO.m06 < -1) { + param_1->m2514 = 1.0f; + param_1->m2518 = 1.0f; + } + } else if (l_himo2HIO.m06 == 4) { + param_1->m2514 = -1.0f; + param_1->m2518 = -1.0f; + } else if (l_himo2HIO.m06 < 4) { + param_1->m2514 = -1.0f; + param_1->m2518 = 1.0f; + } + if (param_1->m2518 < 0.0f) { + param_1->m24FC = REG0_F(6) + 3.0f; + } else { + param_1->m24FC = 1.0f; + } + } + param_1->m24E8 = param_1->m217C->current.pos; + } + case 2: { + cLib_addCalc0(¶m_1->m24B8, (REG0_F(7) + 3.0f), dVar19); + cLib_addCalc2(¶m_1->m24B4, -144.0f, 1.0f, 10.0f); + if (param_1->m24B4 > -145.0f) { + if (param_1->m24BC < 400) { + fVar26 = 20.0f - ((param_1->m217C->scale).y - 1.0f) * 17.0f; + if (fVar26 < 0.5f) { + fVar26 = 0.5f; + } + iVar8 = (param_1->m24C4 / fVar26); + param_1->m24C0 = param_1->m24BC; + param_1->m24BC += iVar8; + param_1->m24C4 += 1.0f; + iVar9 = param_1->m24C0; + if (iVar9 == 0) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_COIL_1, 0); + } else if ((iVar9 >= 13) && (param_1->m24BC <= iVar8 + 13)) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_COIL_2, 0); + } else if ((iVar9 >= 26) && (param_1->m24BC <= iVar8 + 26)) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_COIL_3, 0); + } else if ((iVar9 >= 39) && (param_1->m24BC <= iVar8 + 39)) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_COIL_3, 0); + } + } + if ((fopAcM_GetParam(param_1->m217C) & 0x0F) == 3) { + fVar26 = ((param_1->m217C->scale).y - 0.14f) + REG8_F(7); + } else { + fVar26 = (param_1->m217C->scale).y; + } + uVar6 = (uint)(4000.0f - (fVar26 - 1.0f) * 2000.0f); + sVar15 = uVar6; + cLib_addCalcAngleS2(¶m_1->m24C8, sVar15, 1, (sVar15 >> 3) + (u16)(sVar15 < 0 && (uVar6 & 7) != 0)); + if (param_1->m24BC < 49) { + if (param_1->m24CA == 9000) { + param_1->m24CA = 0x238c; + } else if (param_1->m24CA < 9000) { + param_1->m24CA = 9000; + if ((fopAcM_GetParam(param_1->m217C) & 0xF0) != 0) { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_HOOK_BODY, 0); + } else { + fopAcM_seStart(param_1, JA_SE_LK_ROPE_HOOK_WOOD, 0); + } + } + } + } + cLib_addCalc2(¶m_1->m24E8.x, param_1->m217C->current.pos.x, 0.3f, 100.0f); + cLib_addCalc2(¶m_1->m24E8.y, param_1->m217C->current.pos.y, 0.3f, 100.0f); + cLib_addCalc2(¶m_1->m24E8.z, param_1->m217C->current.pos.z, 0.3f, 100.0f); + param_1->m24DC = param_1->m217C->current.pos; + mDoMtx_YrotS(*calc_mtx, param_1->m2510); + local_110.x = (REG0_F(5) * 10.0f + 50.0f) * param_1->m2514; + local_110.y = (REG0_F(4) * 10.0f - 200.0f) + 140.0f; + local_110.z = ((REG0_F(3) * 10.0f + 200.f) - 80.0f) * param_1->m2518; + MtxPosition(&local_110, &local_11c); + param_1->m24DC.x = param_1->m24DC.x + local_11c.x * param_1->m24FC; + param_1->m24DC.y = param_1->m24DC.y + local_11c.y * param_1->m24FC; + param_1->m24DC.z = param_1->m24DC.z + local_11c.z * param_1->m24FC; + if ((fopAcM_GetParam(param_1->m217C) & 0xF0) != 0) { + cLib_addCalc2(¶m_1->m24FC, REG0_F(6) + 1.8f, REG0_F(4) + 0.2f, REG0_F(5) + 0.1f); + } else { + cLib_addCalc2(¶m_1->m24FC, 1.0f, REG0_F(4) + 0.2f, REG0_F(5) + 0.1f); + } + } + case 3: { + param_1->m217C->health = 2; + mDoMtx_YrotS(*calc_mtx, param_1->m217C->current.angle.y); + local_110.x = ((REG0_F(11) + 2000.0f) - 800.0f) - 300.0f; + local_110.y = param_1->m217C->home.pos.y + REG0_F(12) + 2000.0f; + local_110.z = REG0_F(13) + 1000.0f; + MtxPosition(&local_110, &local_11c); + cLib_addCalc2(¶m_1->m24DC.x, local_11c.x, 0.3f, 200.0f); + cLib_addCalc2(¶m_1->m24DC.y, local_11c.y, 0.3f, 200.0f); + cLib_addCalc2(¶m_1->m24DC.z, local_11c.z, 0.3f, 200.0f); + cLib_addCalc2(¶m_1->m24E8.y, param_1->m217C->home.pos.y + 2500.0f + REG0_F(14), 0.3f, 100.0f); + cLib_addCalc2(¶m_1->m24F4, REG0_F(13) + 80.0f, 1.0f, 2.0f); + if (param_1->m029C < 30) { + btd->field_0x6e15 = 0xB4; + } + if (param_1->m029C == 30) { + fopAcM_seStartCurrent((fopAc_ac_c*)dr, JA_SE_CM_BTD_ROPE_SET, 0); + } + if (((dComIfGp_getStartStageName()[0] != 'X') && (param_1->m029C <= 1)) && (!dComIfGs_isEventBit(0x420))) { + dKy_custom_colset(0, 4, 1.0f); + } + if ((param_1->m029C != 0) || (REG0_S(8) != 0)) { + break; + } + btd->field_0x6e15 = 1; + param_1->m24D9 = 4; + if ((dComIfGp_getStartStageName()[0] == 'X') || (dComIfGs_isEventBit(0x420))) { + param_1->m029C = 0; + } else { + dComIfGs_onEventBit(0x420); + param_1->m029C = REG0_S(2) + 62; + pdVar13->hide(); + } + param_1->m02E0 = 0; + param_1->m217C->health = 0; + if (btd != 0) { + fopAcM_OnStatus(btd, 0x4000); + } + } + case 4: { + dKy_custom_colset(0, 4, 1.0f); + if (param_1->m029C == (s16)(REG0_S(2) + 57)) { + mDoAud_seStart(JA_SE_CV_DRG_SET_ROPE, 0, 0, 0); + } + if (param_1->m029C <= 1) { + dKy_custom_colset(0, 4, 0.0f); + } + if ((param_1->m029C == 0) && (REG0_S(8) == 0)) { + dr->unk_50C = 0; + dKy_custom_colset(0, 4, 0.0f); + param_1->m24D9 = 5; + param_1->m029C = 50; + param_1->m02E0 = 0; + fopAcM_SetParam(param_1, 2); + dComIfGp_event_reset(); + param_1->m02A4 = 20; + sVar15 = fopAcM_searchPlayerAngleY(param_1); + param_1->m2510 = sVar15 + 0x8000; + param_1->m2512 = param_1->m2510; + param_1->m24F4 = 65.0f; + param_1->m24F8 = 65.0f; + mDoMtx_YrotS(*calc_mtx, param_1->m2510); + local_110.x = REG0_F(7) + 100.0f + 200.0f; + local_110.y = param_1->current.pos.y + 700.0f + REG0_F(8); + local_110.z = REG0_F(9) + -500.0f; + MtxPosition(&local_110, ¶m_1->m24DC); + param_1->m24DC.x = param_1->m24DC.x + param_1->current.pos.x * (REG0_F(15) + 0.55f); + param_1->m24DC.z = param_1->m24DC.z + param_1->current.pos.z * (REG0_F(15) + 0.55f); + param_1->m24E8 = pdVar13->current.pos; + param_1->m24E8.y = param_1->m24E8.y - 50.0f; + pdVar13->show(); + } else { + param_1->m24F4 = REG0_F(12) + 50.0f; + dr->unk_50C = 1; + dVar19 = 2000.0f; + param_1->m24DC.x = ((REG0_F(14) + 3000.0f) - 10000.0f) + 2000.0f; + param_1->m24DC.y = REG0_F(15) + 10000.0f + 2000.0f + 9720.0f; + param_1->m24DC.z = (REG0_F(16) + 6000.0f) - 2000.0f; + param_1->m24E8.x = REG0_F(17); + param_1->m24E8.y = (REG0_F(18) + 10000.0f + 2000.0f + 9720.0f) - 300.0f; + param_1->m24E8.z = REG0_F(19); + } + break; + } + case 5: { + if (param_1->m029C == 0) { + if (param_1->m02E0 == 0) { + mDoAud_seStart(JA_SE_CV_DRG_ROCKFALL_1, 0, 0, 0); + } else if (param_1->m02E0 == 1) { + mDoAud_seStart(JA_SE_CV_DRG_ROCKFALL_1_2, 0, 0, 0); + } else if (param_1->m02E0 >= 2) { + mDoAud_seStart(JA_SE_CV_DRG_ROCKFALL_1_3, 0, 0, 0); + param_1->m02E0 = 2; + } + param_1->m02E0++; + param_1->m029C = 50; + } + dVar21 = g_mDoCPd_cpadInfo[0].mCStickPosY; + } + case 6: { + iVar8 = g_mDoCPd_cpadInfo[0].mCStickPosX * (REG0_F(6) + 1000.0f); + param_1->m2512 += iVar8; + cLib_addCalcAngleS2(¶m_1->m2510, param_1->m2512, 4, 0x1000); + if (dVar21 <= -0.1f) { + fVar26 = std::fabsf(dVar21); + cLib_addCalc2(¶m_1->m24F8, REG0_F(7) + 70.0f, 1.0f, fVar26 * 3.0f); + } else if (dVar21 >= 0.1f) { + fVar26 = ::std::fabsf(dVar21); + cLib_addCalc2(¶m_1->m24F8, REG0_F(8) + 20.0f, 1.0f, fVar26 * 3.0f); + } + cLib_addCalc2(¶m_1->m24F4, param_1->m24F8, 0.1f, 10.0f); + mDoMtx_YrotS(*calc_mtx, param_1->m2510); + local_110.x = REG0_F(7) + 100.0f + 200.0f; + local_110.y = param_1->current.pos.y + 700.0f + REG0_F(8); + local_110.z = REG0_F(9) + -500.0f; + MtxPosition(&local_110, ¶m_1->m24DC); + param_1->m24DC.x = param_1->m24DC.x + param_1->current.pos.x * (REG0_F(15) + 0.55f); + param_1->m24DC.z = param_1->m24DC.z + param_1->current.pos.z * (REG0_F(15) + 0.55f); + cLib_addCalc2(¶m_1->m24E8.x, param_1->current.pos.x, 0.3f, 100.0f); + cLib_addCalc2(¶m_1->m24E8.y, (param_1->current.pos.y - 50.0f) + REG0_F(10), 0.3f, 100.0f); + cLib_addCalc2(¶m_1->m24E8.z, param_1->current.pos.z, 0.3f, 100.0f); + if ((param_1->m02A4 == 0) && (!player->checkPlayerFly())) { + camera->mCamera.Start(); + param_1->m24D9 = 0; + param_1->m24D8 = 0; + fopAcM_SetParam(param_1, 0); + param_1->m02DC = 0; + param_1->m217C = NULL; + dComIfGp_event_reset(); + } + break; + } + case 7: { + if (player->getRopeJumpLand() || (param_1->m029C == 0)) { + if (!param_1->eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(param_1, dEvtFlag_STAFF_ALL_e, 0xFFFF, 0); + param_1->eventInfo.onCondition(dEvtCnd_UNK2_e); + } + dr->unk_4CA = 0x5A; + cLib_addCalc2(¶m_1->m24F8, REG0_F(8) + 20.0f, 1.0f, REG0_F(9) + 2.0f); + } else { + param_1->m24D9 = 7; + param_1->m029C = 10; + } + if (param_1->m029C != 0) { + break; + } + if (dr->unk_4BA < 9) { + param_1->m24D9 = 0; + camera->mCamera.Reset(param_1->m24DC, param_1->m24E8); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + break; + } + param_1->m24F4 = REG0_F(12) + 50.0f; + fopAcM_OnStatus(btd, 0x4000); + param_1->m24D9 = 8; + param_1->m24E8.x = 0.0f; + param_1->m24E8.y = REG0_F(5) * 0.1f + 3000.0f; + param_1->m24E8.z = REG0_F(6) * 0.1f; + mDoMtx_YrotS(*calc_mtx, btd->current.angle.y); + local_110.x = REG0_F(7) * 0.1f; + local_110.y = REG0_F(8) * 0.1f + 1000.0f; + local_110.z = REG0_F(9) * 0.1f + 1400.0f; + MtxPosition(&local_110, ¶m_1->m24DC); + param_1->m24F4 = REG0_F(13) + 80.0f; + param_1->m029C = 210; + dBgS_LinChk dStack_104; + dStack_104.Set(¶m_1->m24E8, ¶m_1->m24DC, param_1); + if (dComIfG_Bgsp()->LineCross(&dStack_104)) { + param_1->m24DC = dStack_104.GetCross(); + } + } + case 8: { + dr->unk_40A = 3; + if (param_1->m029C == 200) { + mDoAud_seStart(JA_SE_CV_DRG_ROCKFALL_2, 0, 0, 0); + } + if (param_1->m029C == 170) { + fopAcM_seStartCurrent((fopAc_ac_c*)dr, JA_SE_CM_BTD_BEF_ROCK_FALL, 0); + } + if (param_1->m029C > 150) { + fVar26 = 2000.0f; + } else { + fVar26 = 100.0f; + } + cLib_addCalc2(&dr->unk_414, fVar26, 0.5f, 100.0f); + if (param_1->m029C <= 120) { + cLib_addCalc2(¶m_1->m24E8.y, REG0_F(5) * 0.1f + 650.0f, 1.0f, 100.0f); + cLib_addCalc2(¶m_1->m24DC.y, 0.0f, 0.5f, 100.0f); + if (param_1->m029C == (s16)(REG0_S(4) + 0x6E)) { + param_1->m2520 = REG0_F(11) + 50.0f; + btd->field_0x6e15 = 0xB4; + } + if (param_1->m029C < 81) { + cLib_addCalc2(¶m_1->m24F4, REG0_F(14) + 40.0f, 0.5f, 2.0f); + } + } + if (param_1->m029C == 2) { + btd->field_0x6e15 = 1; + } + if (param_1->m029C == 0) { + if (btd->field_0x6190 >= 3) { + param_1->m24D9 = 9; + param_1->m029C = 220; + } else { + param_1->m24D9 = 0; + cXyz local_164 = param_1->eyePos; + local_164.x *= 0.9f; + local_164.z *= 0.9f; + camera->mCamera.Reset(param_1->eyePos, local_164); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + fopAcM_OffStatus(btd, 0x4000); + dComIfGp_event_reset(); + } + dr->unk_40A = 0; + } + break; + } + case 9: { + cLib_addCalc2(¶m_1->m24F4, REG0_F(4) + 50.0f, 0.5f, 3.0f); + cLib_addCalc2(¶m_1->m24E8.y, btd->eyePos.y + REG0_F(5) * 0.1f + 200.0f, 0.2f, 1000.0f); + mDoMtx_YrotS(*calc_mtx, btd->current.angle.y); + local_110.x = REG0_F(7) * 0.1f + -300.0f; + local_110.y = REG0_F(8) * 0.1f + 100.0f; + local_110.z = REG0_F(9) * 0.1f + 2000.0f; + MtxPosition(&local_110, &local_11c); + cLib_addCalc2(¶m_1->m24DC.x, local_11c.x, 0.1f, 50.0f); + cLib_addCalc2(¶m_1->m24DC.y, local_11c.y, 0.1f, 50.0f); + cLib_addCalc2(¶m_1->m24DC.z, local_11c.z, 0.1f, 50.0f); + if (param_1->m029C == 99) { + btd->field_0x6e15 = 0xB4; + } + if (param_1->m029C == 40) { + btd->field_0x6e15 = 1; + } + if (param_1->m029C == 0) { + param_1->m24D9 = 0; + cXyz local_170 = param_1->eyePos; + local_170.x *= 0.9f; + local_170.z *= 0.9f; + camera->mCamera.Reset(param_1->eyePos, local_170); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + fopAcM_OffStatus(btd, 0x4000); + dComIfGp_event_reset(); + } + break; + } + } + if (param_1->m24D9 < 0) { + dVar21 = cM_ssin(param_1->m02D8 * 0x3300); + dVar22 = (param_1->m2520 * dVar21); + dVar21 = cM_scos(param_1->m02D8 * 0x3000); + cXyz local_188; + cXyz local_17c; + local_188.y = (param_1->m2520 * dVar21); + local_17c.x = (param_1->m24DC.x + dVar22); + local_17c.y = param_1->m24DC.y + local_188.y; + local_17c.z = param_1->m24DC.z; + local_188.x = (param_1->m24E8.x + dVar22); + local_188.y = param_1->m24E8.y + local_188.y; + local_188.z = param_1->m24E8.z; + dVar21 = cM_scos(param_1->m02D8 * 0x1C00); + iVar8 = ((param_1->m2520 * dVar21) * 7.5f); + camera->mCamera.Set(local_188, local_17c, iVar8, param_1->m24F4); + cLib_addCalc0(¶m_1->m2520, (REG0_F(16) + 2.0f), dVar19); + sVar15 = 0; + if ((param_1->m217C != NULL) && ((fopAcM_GetParam(param_1->m217C) & 0xF0) != 0)) { + sVar15 = -50; + } + if (((sVar15 + 0x82) < param_1->m24BC) && (REG0_S(8) == 0)) { + if ((fopAcM_GetParam(param_1->m217C) & 0xF0) == 0) { + if (dr->unk_4BA < 10) { + param_1->m24D9 = 4; + param_1->m24D8 = 2; + param_1->m029C = 0; + if (btd != 0) { + fopAcM_OnStatus(btd, 0x4000); + } + } else { + param_1->m24D9 = 3; + param_1->m029C = REG0_S(2) + 65; + } + param_1->m24D8 = 2; + } else if (param_1->m24D9 == 2) { + camera->mCamera.Start(); + param_1->m24D9 = 0; + param_1->m24D8 = 2; + fopAcM_SetParam(param_1, 2); + dComIfGp_event_reset(); + } + } + } + if (param_1->m02CC < 2) { + param_1->m02CC = 2; + } } /* 800F01BC-800F062C .text daHimo2_Execute__FP11himo2_class */ -static BOOL daHimo2_Execute(himo2_class*) { - /* Nonmatching */ +static BOOL daHimo2_Execute(himo2_class* param_1) { + /* Nonmatching - last for loop, regalloc */ + daPy_py_c* apdVar1; + himo2_s* phVar3; + int iVar4; + int iVar5; + f32 dVar7; + f32 dVar8; + f32 dVar9; + f32 fVar10; + cXyz local_c8; + + apdVar1 = daPy_getPlayerActorClass(); + if (btd == NULL) { + btd = (btd_class*)fpcEx_Search(b_a_sub, param_1); + } + if (dr == NULL) { + dr = (dr2_class*)fpcEx_Search(dr_a_sub, param_1); + } + param_1->m02D8++; + rope_scale = l_himo2HIO.m1C; + local_c8.x = 4.0f; + local_c8.y = 0.0f; + local_c8.z = 0.0f; + if (apdVar1->getRopeGrabRightHand()) { + MTXCopy(apdVar1->getLeftHandMatrix(), *calc_mtx); + MtxPosition(&local_c8, ¶m_1->m02EC[1]); + MTXCopy(apdVar1->getRightHandMatrix(), *calc_mtx); + MtxPosition(&local_c8, ¶m_1->m02EC[0]); + } else { + MTXCopy(apdVar1->getLeftHandMatrix(), *calc_mtx); + MtxPosition(&local_c8, ¶m_1->m02EC[0]); + MTXCopy(apdVar1->getRightHandMatrix(), *calc_mtx); + MtxPosition(&local_c8, ¶m_1->m02EC[1]); + } + param_1->m02B4 = param_1->m02EC[0]; + iVar5 = param_1->m02CC + -50; + if (iVar5 < 3) { + iVar5 = 3; + } + dBgS_GndChk local_bc; + phVar3 = ¶m_1->m1120[0]; + dVar7 = 60.0f; + dVar8 = 5.0f; + dVar9 = -100000.0f; + for (iVar4 = 0; iVar4 < iVar5; iVar4++) { + if (param_1->m02DC != 2) { + local_bc.m_pos.x = phVar3->m10.x; + local_bc.m_pos.y = phVar3->m10.y + dVar7; + local_bc.m_pos.z = phVar3->m10.z; + fVar10 = dComIfG_Bgsp()->GroundCross(&local_bc); + phVar3->m0C = (dVar8 + fVar10); + } else { + phVar3->m0C = dVar9; + } + phVar3++; + } + new_himo2_move(param_1); + phVar3 = ¶m_1->m0310[0]; + for (iVar5 = 0; iVar5 < param_1->m02CC++; iVar5++, phVar3++) { + phVar3->m10 = param_1->m02B4; + } + himo2_control(param_1, phVar3); + param_1->m0310[99].m10 = param_1->current.pos; + himo2_control2(param_1, phVar3); + if ((param_1->m02DC == 2) || (param_1->m02DC == 3)) { + param_1->m2050.SetR(20.0f); + } else { + param_1->m2050.SetR(-100.0f); + } + param_1->m2050.SetC(param_1->current.pos); + dComIfG_Ccsp()->Set(¶m_1->m2050); + param_1->eyePos = param_1->current.pos; + return TRUE; } /* 800F062C-800F0634 .text daHimo2_IsDelete__FP11himo2_class */ @@ -96,50 +1686,97 @@ static BOOL daHimo2_IsDelete(himo2_class*) { /* 800F0634-800F0670 .text daHimo2_Delete__FP11himo2_class */ static BOOL daHimo2_Delete(himo2_class*) { - /* Nonmatching */ + mDoHIO_deleteChild(l_himo2HIO.mNo); + return TRUE; } /* 800F0670-800F07F4 .text CallbackCreateHeap__FP10fopAc_ac_c */ -static BOOL CallbackCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static int CallbackCreateHeap(fopAc_ac_c* i_this) { + /* Nonmatching - "a_this->m1FD8.init" */ + ResTIMG* pRVar1; + J3DModelData* modelData; + himo2_class* a_this = (himo2_class*)i_this; + + pRVar1 = (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_ROPE); + if (!a_this->m1F30.init(1, 200, pRVar1, 0)) { + return FALSE; + } else { + modelData = (J3DModelData*)dComIfG_getObjectRes("Link", LINK_BDL_ROPEEND); + JUT_ASSERT(3933, modelData != NULL); + a_this->m24B0 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (a_this->m24B0 == NULL) { + return FALSE; + } else { + pRVar1 = (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_ROPE); + if (!a_this->m1F98.init(5, 0x20, pRVar1, 0)) { + return FALSE; + } else { + pRVar1 = (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_ROPE); + return a_this->m1FD8.init(1, 16, pRVar1, 0) != FALSE; + } + } + } } /* 800F07F4-800F0B08 .text daHimo2_Create__FP10fopAc_ac_c */ -static cPhs_State daHimo2_Create(fopAc_ac_c*) { - /* Nonmatching */ - static dCcD_SrcSph sph_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ AT_TYPE_GRAPPLING_HOOK, - /* SrcObjAt Atp */ 1, - /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsEnemy_e | cCcD_AtSPrm_VsOther_e, - /* SrcObjTg Type */ 0, - /* SrcObjTg SPrm */ 0, - /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ dCcG_SE_UNK5, - /* SrcGObjAt HitMark */ dCcG_AtHitMark_Unk1_e, - /* SrcGObjAt Spl */ dCcG_At_Spl_UNK0, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ 0, - /* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ 0, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGSphS - {{ - /* Center */ {0.0f, 0.0f, 0.0f}, - /* Radius */ 20.0f, - }}, - }; -} +static cPhs_State daHimo2_Create(fopAc_ac_c* i_this) { + /* Nonmatching - regalloc */ + cPhs_State phase_state; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + himo2_class* a_this = (himo2_class*)i_this; -/* 800F0B98-800F0BE0 .text __dt__10himo2HIO_cFv */ -himo2HIO_c::~himo2HIO_c() { - /* Nonmatching */ + fopAcM_SetupActor(i_this, himo2_class); + if (!fopAcM_entrySolidHeap(a_this, CallbackCreateHeap, REG0_S(9) + 0x9050)) { + phase_state = cPhs_ERROR_e; + } else { + a_this->m24B0->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + a_this->m02CC = REG0_S(1) + 96; + a_this->current.pos = player->getLeftHandPos(); + a_this->m2574.Set(&a_this->current.pos, &a_this->old.pos, a_this, 1, &a_this->m2534, &a_this->speed, NULL, NULL); + a_this->m2534.SetWall(30.0f, 30.0f); + a_this->m2574.ClrRoofNone(); + a_this->m2574.m_roof_crr_height = REG0_F(7) + 60.0f; + a_this->m2500 = 1.0f; + l_himo2HIO.mNo = mDoHIO_createChild("ロープ", &l_himo2HIO); // Rope + rope_scale = 2.0f; + static dCcD_SrcSph sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_GRAPPLING_HOOK, + /* SrcObjAt Atp */ 1, + /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsEnemy_e | cCcD_AtSPrm_VsOther_e, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ dCcG_SE_UNK5, + /* SrcGObjAt HitMark */ dCcG_AtHitMark_Unk1_e, + /* SrcGObjAt Spl */ dCcG_At_Spl_UNK0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ 0, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, + 0.0f, + 0.0f, + /* Radius */ 20.0f, + }, + }; + a_this->m2014.Init(0xFF, 0xFF, a_this); + a_this->m2050.Set(sph_src); + a_this->m2050.SetStts(&a_this->m2014); + btd = 0; + dr = 0; + phase_state = cPhs_COMPLEATE_e; + } + return phase_state; } static actor_method_class l_daHimo2_Method = { diff --git a/src/d/actor/d_a_npc_fa1.cpp b/src/d/actor/d_a_npc_fa1.cpp index 425ffa051..85a0ba908 100644 --- a/src/d/actor/d_a_npc_fa1.cpp +++ b/src/d/actor/d_a_npc_fa1.cpp @@ -272,7 +272,7 @@ int daNpc_Fa1_c::createInit() { if (isTypeTimer()) { setStatus(1); fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e); - current.angle.y += (s16)(cLib_getRndValue((u16)0, (u16)0xFF) * 0x100); + current.angle.y += (s16)(cLib_getRndValue(0, 0xFF) * 0x100); } else { setTypeNormal(); } @@ -396,7 +396,7 @@ void daNpc_Fa1_c::init_normal_move() { speedF = l_HIO.prm.m08; gravity = 0.1f; maxFallSpeed = -1.0f; - mTimer = cLib_getRndValue((u16)l_HIO.prm.m44, (u16)60); + mTimer = cLib_getRndValue(l_HIO.prm.m44, 60); if (isTypeArea()) { init_areaMove(); } else { @@ -423,7 +423,7 @@ void daNpc_Fa1_c::normal_move() { /* 800FBA68-800FBAB0 .text init_straight__11daNpc_Fa1_cFv */ void daNpc_Fa1_c::init_straight() { setSubMode(NormalSubMode_STRAIGHT_e); - mMoveTimer = cLib_getRndValue((u8)60, (u8)60); + mMoveTimer = cLib_getRndValue(60, 60); gravity = 0.1f; } @@ -448,7 +448,7 @@ void daNpc_Fa1_c::straight() { /* 800FBBC8-800FBC10 .text init_turn__11daNpc_Fa1_cFv */ void daNpc_Fa1_c::init_turn() { setSubMode(NormalSubMode_TURN_e); - mMoveTimer = cLib_getRndValue((u8)60, (u8)60); + mMoveTimer = cLib_getRndValue(60, 60); gravity = 0.1f; } @@ -937,7 +937,7 @@ cPhs_State daNpc_Fa1_c::_create() { return cPhs_ERROR_e; } if (l_HIO.mNo < 0) { - l_HIO.mNo = mDoHIO_createChild("回復妖精", &l_HIO); // Recovery Fairy + l_HIO.mNo = mDoHIO_createChild("回復妖精", &l_HIO); // Recovery Fairy l_hio_counter = 1; } else { l_hio_counter++; diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc index eac8bdda8..21e79a76b 100644 --- a/src/d/actor/d_a_player_rope.inc +++ b/src/d/actor/d_a_player_rope.inc @@ -345,7 +345,7 @@ BOOL daPy_lk_c::checkNextActionRopeReady() { if (cancelItemUpperReadyAnime()) { return true; } - } else if (((rope->field_0x2DC == 5) || (rope->field_0x2DC == 8)) || (rope->field_0x2DC == 9)) { + } else if (((rope->m02DC == 5) || (rope->m02DC == 8)) || (rope->m02DC == 9)) { return procRopeThrowCatch_init(); } else { checkNextRopeMode(); @@ -543,7 +543,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) { mEquipItem = dItem_GRAPPLING_HOOK_e; local_84 = param_0->current.pos - current.pos; dVar8 = (local_84.abs() - 95.0f); - dVar9 = ((himo2_class*)param_0)->field_0x15F8.y; + dVar9 = ((himo2_class*)param_0)->m1120[34].m10.y; if (dVar8 > dVar9) { dVar8 = dVar9; } @@ -1047,7 +1047,7 @@ BOOL daPy_lk_c::procRopeDown_init() { } } else { himo2_class* rope = (himo2_class*)mActorKeepRope.getActor(); - m35A4 = mRopePos.y - rope->field_0x15F8.y; + m35A4 = mRopePos.y - rope->m1120[34].m10.y; } if (current.pos.y <= m35A4) { return procRopeHangWait_init(1); @@ -1237,7 +1237,7 @@ BOOL daPy_lk_c::procRopeThrowCatch() { if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { m34D0--; himo2_class* rope = (himo2_class*)mActorKeepEquip.getActor(); - if (rope->field_0x2DC == 0 || (m34D0 == 0)) { + if (rope->m02DC == 0 || (m34D0 == 0)) { checkNextRopeMode(); } }