summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2025-04-05 22:31:17 -0400
committerGitHub <noreply@github.com>2025-04-05 22:31:17 -0400
commit2d5c305a9c075c8beef6bbfd6b4f5a93086bc614 (patch)
tree270bc02524efecc3e2a45b3413f94678e18674f9
parent8da4c851e2fcaceb55bec953a9a637d8e5c29b43 (diff)
parentd3c253dcef76f2f859a1e6cee3cb8fa78e733581 (diff)
Merge pull request #735 from 123456789758/d_a_player_rope
d_a_player_rope.inc - Almost all matching except minor issues (also extra matches in d_a_player_vomit).
-rw-r--r--include/d/actor/d_a_himo2.h5
-rw-r--r--include/d/actor/d_a_player.h1
-rw-r--r--include/d/actor/d_a_player_main.h12
-rw-r--r--src/d/actor/d_a_player_rope.inc1095
-rw-r--r--src/d/actor/d_a_player_vomit.inc62
5 files changed, 1077 insertions, 98 deletions
diff --git a/include/d/actor/d_a_himo2.h b/include/d/actor/d_a_himo2.h
index 4c4dbcaf..4641c8e2 100644
--- a/include/d/actor/d_a_himo2.h
+++ b/include/d/actor/d_a_himo2.h
@@ -13,6 +13,11 @@ public:
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 {
diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h
index 16eca54f..fe5e4010 100644
--- a/include/d/actor/d_a_player.h
+++ b/include/d/actor/d_a_player.h
@@ -161,6 +161,7 @@ public:
daPyRFlg0_UNK8000000 = 0x08000000,
daPyRFlg0_UNK10000000 = 0x10000000,
daPyRFlg0_ARROW_SHOOT = 0x20000000,
+ daPyRFlg0_UNK40000000 = 0x40000000,
// 0x00000001 and 0x00000002 set in daPy_lk_c::dProcLastCombo
// 0x00001000 set in daPy_lk_c::procCrawlMove_init, checked in checkNoCollisionCorret__9daPy_lk_cFv
// 0x04000000 set in daPy_lk_c::procShipPaddle
diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h
index e135cbdb..5d3135c7 100644
--- a/include/d/actor/d_a_player_main.h
+++ b/include/d/actor/d_a_player_main.h
@@ -1492,14 +1492,14 @@ public:
BOOL procShipRestart();
BOOL checkRopeAnime() const;
void freeRopeItem();
- BOOL checkRopeRoofHit(s16);
- void changeRopeSwingProc();
- void changeRopeEndProc(int);
+ f32 checkRopeRoofHit(s16);
+ int changeRopeSwingProc();
+ int changeRopeEndProc(int);
BOOL checkSpecialRope();
- void changeRopeToHangProc();
+ int changeRopeToHangProc();
BOOL checkRopeSwingWall(cXyz*, cXyz*, s16*, f32*);
void setBlendRopeMoveAnime(int);
- void throwRope();
+ int throwRope();
BOOL checkNextActionRopeReady();
BOOL checkNextRopeMode();
BOOL checkHangRopeActorNull();
@@ -1511,7 +1511,7 @@ public:
BOOL procRopeSwing();
BOOL procRopeHangWait_init(int);
BOOL procRopeHangWait();
- void specialRopeHangUp();
+ int specialRopeHangUp();
BOOL procRopeUp_init();
BOOL procRopeUp();
BOOL procRopeDown_init();
diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc
index bcaf2b2d..d0d8b3a8 100644
--- a/src/d/actor/d_a_player_rope.inc
+++ b/src/d/actor/d_a_player_rope.inc
@@ -2,54 +2,130 @@
* d_a_player_rope.inc
*
* Code relating to the Grappling Hook item.
- *
- * This file is not a standalone translation unit and is instead directly
+ *
+ * This file is not a standalone translation unit and is instead directly
* included into d_a_player_main.cpp.
- *
- * The original name of this file is not known, but a best guess was taken
+ *
+ * The original name of this file is not known, but a best guess was taken
* based on the original names of the functions it contains.
*/
-#include "d/actor/d_a_player_main.h"
-#include "d/actor/d_a_player_HIO.h"
-#include "d/actor/d_a_himo2.h"
+ #include "d/actor/d_a_player_main.h"
+ #include "d/actor/d_a_player_HIO.h"
+ #include "d/actor/d_a_himo2.h"
#include "d/d_attention.h"
+#include "d/d_procname.h"
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_audio.h"
/* 80142D08-80142D68 .text checkRopeAnime__9daPy_lk_cCFv */
BOOL daPy_lk_c::checkRopeAnime() const {
- /* Nonmatching */
+ return ((checkRopeReadyAnime()) ||
+ ((m_anm_heap_upper[UPPER_MOVE2_e]).mIdx == LKANM_BCK_ROPETHROW));
}
/* 80142D68-80142E0C .text freeRopeItem__9daPy_lk_cFv */
void daPy_lk_c::freeRopeItem() {
- /* Nonmatching */
+ if (mEquipItem == dItem_GRAPPLING_HOOK_e) {
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ if (mActorKeepEquip.getActor() != NULL) {
+ onResetFlg0(daPyRFlg0_UNK40000000);
+ }
+ if (pfVar2 != NULL) {
+ if (fopAcM_GetName(pfVar2) == PROC_HIMO2) {
+ fopAcM_SetParam(pfVar2, 4);
+ mActorKeepRope.clearData();
+ onResetFlg0(daPyRFlg0_UNK40000000);
+ } else if (fopAcM_GetName(pfVar2) == PROC_HIMO3) {
+ mEquipItem = daPyItem_NONE_e;
+ fopAcM_SetParam(pfVar2, 3);
+ mActorKeepRope.clearData();
+ }
+ }
+ }
+ return;
}
/* 80142E0C-80142E98 .text checkRopeRoofHit__9daPy_lk_cFs */
-BOOL daPy_lk_c::checkRopeRoofHit(s16) {
- /* Nonmatching */
+f32 daPy_lk_c::checkRopeRoofHit(s16 param_0) {
+ cXyz local_c;
+
+ local_c.set(current.pos.x - 15.0f * cM_ssin(param_0), current.pos.y,
+ current.pos.z - 15.0f * cM_scos(param_0));
+ mRoofChk.SetPos(local_c);
+ dComIfG_Bgsp()->RoofChk(&mRoofChk);
+ return;
}
/* 80142E98-80142FC8 .text changeRopeSwingProc__9daPy_lk_cFv */
-void daPy_lk_c::changeRopeSwingProc() {
- /* Nonmatching */
+int daPy_lk_c::changeRopeSwingProc() {
+ /* Nonmatching - floats */
+ if (mCyl.ChkCoHit() != 0) {
+ fopAc_ac_c* pfVar2 = mCyl.GetCoHitAc();
+ if (((pfVar2 != NULL)) && (fopAcM_GetName(pfVar2) == PROC_HIMO3)) {
+ cXyz local_24 = (pfVar2->current.pos - current.pos);
+ if ((local_24.abs() - 95.0f >= 100.0f) && (pfVar2->current.pos.y > current.pos.y)) {
+ return procRopeSwing_init(pfVar2, 0x1800);
+ }
+ }
+ }
+ return false;
}
/* 80142FC8-801430D4 .text changeRopeEndProc__9daPy_lk_cFi */
-void daPy_lk_c::changeRopeEndProc(int) {
- /* Nonmatching */
+int daPy_lk_c::changeRopeEndProc(int param_0) {
+ dComIfGp_setDoStatus(0x16);
+ if (((doTrigger()) || (cancelTrigger())) || (!checkRopeTag()) && itemTrigger()) {
+ freeRopeItem();
+ voiceStart(6);
+ if ((cancelTrigger()) && (!checkBossGomaStage())) {
+ setAnimeEquipSword(0);
+ }
+ if (param_0 != 0) {
+ procFall_init(1, daPy_HIO_wallCatch_c0::m.field_0x54);
+ }
+ onNoResetFlg0(daPyFlg0_UNK400000);
+ onNoResetFlg1(daPyFlg1_UNK8000000);
+ return true;
+ }
+ return false;
}
/* 801430D4-80143138 .text checkSpecialRope__9daPy_lk_cFv */
BOOL daPy_lk_c::checkSpecialRope() {
- /* Nonmatching */
+ if ((!strcmp(dComIfGp_getStartStageName(), "GanonK")) && ((mActorKeepEquip.getActor() == NULL)))
+ {
+ return true;
+ } else {
+ return false;
+ }
}
/* 80143138-8014327C .text changeRopeToHangProc__9daPy_lk_cFv */
-void daPy_lk_c::changeRopeToHangProc() {
- /* Nonmatching */
+int daPy_lk_c::changeRopeToHangProc() {
+ if (m3570 == 0) {
+ return false;
+ }
+ f32 fVar1 = cM_ssin(shape_angle.y);
+ f32 fVar2 = cM_scos(shape_angle.y);
+ cXyz local_1c;
+ cXyz local_28;
+ local_1c.set(mRopePos.x - 20.0f * fVar1, mRopePos.y, mRopePos.z - 20.0f * fVar2);
+ local_28.set(local_1c.x + 50.0f * fVar1, local_1c.y, local_1c.z + 50.0f * fVar2);
+ mLinkLinChk.Set(&local_1c, &local_28, this);
+ if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
+ return false;
+ } else {
+ cM3dGPla* pfVar4 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
+ s16 iVar5 = cM_atan2s(pfVar4->GetNP()->x, pfVar4->GetNP()->z);
+ if (cLib_distanceAngleS(iVar5, shape_angle.y + 0x8000) > 0x2000) {
+ return false;
+ } else {
+ m352C = iVar5;
+ procRopeUpHang_init();
+ return true;
+ }
+ }
}
/* 8014327C-80143694 .text checkRopeSwingWall__9daPy_lk_cFP4cXyzP4cXyzPsPf */
@@ -60,33 +136,223 @@ BOOL daPy_lk_c::checkRopeSwingWall(cXyz*, cXyz*, s16*, f32*) {
}
/* 80143694-80143A44 .text setBlendRopeMoveAnime__9daPy_lk_cFi */
-void daPy_lk_c::setBlendRopeMoveAnime(int) {
- /* Nonmatching */
+void daPy_lk_c::setBlendRopeMoveAnime(int param_0) {
+ /* Nonmatching - floats, branching */
+ float fVar1;
+ u16* puVar3;
+ daPy_ANM dVar4;
+ float dVar5;
+ float dVar6;
+ float local_48;
+
+ dVar5 = std::fabsf(m35A4 * m35A8);
+ if (checkModeFlg(ModeFlg_00000400)) {
+ local_48 = 0.0f;
+ dVar4 = ANM_ROPESWINGB;
+ } else {
+ local_48 = m_pbCalc[PART_UNDER_e]->getRatio(1);
+ if (m34D0 != 0) {
+ if (m34D0 == -1) {
+ dVar4 = ANM_ROPESWINGF;
+ } else {
+ dVar4 = ANM_ROPESWINGB;
+ }
+ dVar6 = 1.0f;
+ cLib_chaseF(&local_48, dVar6, 0.05f);
+ if (((m34D0 == -1) && (M_PI / 2 < dVar5)) || ((m34D0 == 1 && (-M_PI / 2 < dVar5)))) {
+ m34D0 = 0;
+ }
+ } else {
+ if (((param_0 != 0) || (mStickDistance <= 0.05f)) || (spActionButton())) {
+ if (dVar5 <= M_PI / 2) {
+ dVar4 = ANM_ROPESWINGB;
+ } else {
+ dVar4 = ANM_ROPESWINGF;
+ }
+ dVar6 = ((0.6f * m34D4)) / daPy_HIO_rope_c0::m.field_0x0;
+ if (checkSpecialRope()) {
+ dVar6 *= 8.0f;
+ }
+ if (dVar6 > 0.6f) {
+ dVar6 = 0.6f;
+ }
+ } else {
+ if ((M_PI / 2 > dVar5) && (M_PI / 10 <= dVar5)) {
+ setMoveAnime(0.0f, daPy_HIO_rope_c0::m.field_0x18, 1.0f, ANM_ROPECATCH,
+ ANM_ROPESWINGF, 7, 7.0f);
+ m34D0 = -1;
+ return;
+ }
+ if ((-M_PI / 2 > dVar5) && (-2.8274333f <= dVar5)) {
+ setMoveAnime(0.0f, daPy_HIO_rope_c0::m.field_0x18, 1.0f, ANM_ROPECATCH,
+ ANM_ROPESWINGB, 7, 7.0f);
+ m34D0 = 1;
+ return;
+ }
+ if (dVar5 <= M_PI / 2) {
+ dVar4 = ANM_ROPESWINGB;
+ } else {
+ dVar4 = ANM_ROPESWINGF;
+ }
+ dVar6 = (0.6f * m34D4) / daPy_HIO_rope_c0::m.field_0x0;
+ if (checkSpecialRope()) {
+ dVar6 *= 8.0f;
+ }
+ if (dVar6 > 0.6f) {
+ dVar6 = 0.6f;
+ }
+ }
+ }
+ puVar3 = (u16*)getAnmData(dVar4);
+ if (*puVar3 != (m_anm_heap_under[UNDER_MOVE1_e]).mIdx) {
+ cLib_addCalc(&local_48, -dVar6, 0.5f, 0.05f, 0.005f);
+ if (local_48 <= 0.0f) {
+ local_48 = 0.0f;
+ } else {
+ if (dVar4 == ANM_ROPESWINGB) {
+ dVar4 = ANM_ROPESWINGF;
+ } else {
+ dVar4 = ANM_ROPESWINGB;
+ }
+ }
+ } else {
+ if (m34D0 == 0) {
+ cLib_addCalc(&local_48, dVar6, 0.5f, 0.05f, 0.005f);
+ }
+ }
+ }
+ if (param_0 != 0) {
+ fVar1 = daPy_HIO_rope_c0::m.field_0x20;
+ } else {
+ fVar1 = -1.0f;
+ }
+ setMoveAnime(local_48, daPy_HIO_rope_c0::m.field_0x18, 1.0f, ANM_ROPECATCH, dVar4, 7, fVar1);
+ return;
}
/* 80143A44-80143C5C .text throwRope__9daPy_lk_cFv */
-void daPy_lk_c::throwRope() {
- /* Nonmatching */
+int daPy_lk_c::throwRope() {
+ /* Nonmatching - floats */
+ himo2_class* rope = (himo2_class*)mActorKeepEquip.getActor();
+ setActAnimeUpper(LKANM_BCK_ROPETHROW, UPPER_MOVE2_e, daPy_HIO_rope_c0::m.field_0x44,
+ daPy_HIO_rope_c0::m.field_0x48, daPy_HIO_rope_c0::m.field_0x8, -1.0f);
+ setPriTextureAnime(0x48, 0);
+ mVelocity = 0.0f;
+ if (m34B8 != 3) {
+ m34B8 = 3;
+ }
+ current.angle.y = shape_angle.y + -0x4000;
+ onModeFlg(ModeFlg_00000001);
+ setBlendAtnMoveAnime(daPy_HIO_rope_c0::m.field_0x4C);
+ cXyz local_1c;
+ if (mCurProc == daPyProc_ROPE_MOVE_e) {
+ fopAc_ac_c* pfVar4 = mpAttnActorLockOn;
+ if (pfVar4 != NULL) {
+ local_1c = pfVar4->eyePos;
+ } else {
+ f32 fVar3 = 500.0f * cM_scos(mBodyAngle.x);
+ local_1c.set(current.pos.x + fVar3 * cM_ssin(shape_angle.y),
+ (100.0f + current.pos.y) - 500.0f * cM_ssin(mBodyAngle.x),
+ current.pos.z + fVar3 * cM_scos(shape_angle.y));
+ }
+ cXyz local_28;
+ local_28.set(current.pos.x, current.pos.y + 100.0f, current.pos.z);
+ mRopeLinChk.Set(&local_28, &local_1c, this);
+ if (dComIfG_Bgsp()->LineCross(&mRopeLinChk)) {
+ local_1c = *mRopeLinChk.GetCrossP();
+ }
+ } else {
+ checkSightLine(2200.0f, &local_1c);
+ }
+ rope->setTargetPos(&local_1c, &m3600, &m3604);
+ fopAcM_SetParam(rope, 1);
+ seStartOnlyReverb(JA_SE_LK_ROPE_LAUNCH);
+ mSightPacket.offDrawFlg();
+ resetFootEffect();
+ return true;
}
/* 80143C5C-80143DF4 .text checkNextActionRopeReady__9daPy_lk_cFv */
BOOL daPy_lk_c::checkNextActionRopeReady() {
- /* Nonmatching */
+ /* Nonmatching - branching */
+ himo2_class* pnVar3 = (himo2_class*)mActorKeepEquip.getActor();
+ u32 uVar2 = fopAcM_GetParam(pnVar3);
+ if (uVar2 == 2) {
+ procRopeReady_init();
+ } else if (uVar2 == 0) {
+ if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == LKANM_BCK_ROPETHROW) {
+ if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) {
+ procRopeThrowCatch_init();
+ } else {
+ return true;
+ }
+ } else {
+ if (!mpAttention->Lockon()) {
+ g_dComIfG_gameInfo.play.mCurrButtonAAction = 7;
+ }
+ if (((itemButton()) && (mEquipItem == getReadyItem())) && (m355C == 0)) {
+ m355E = 1;
+ } else {
+ if ((!itemButton()) && (m355E != 0)) {
+ m355E = 0;
+ if (throwRope()) {
+ return true;
+ }
+ }
+ }
+ if ((cancelItemUpperReadyAnime())) {
+ return true;
+ }
+ }
+ } else {
+ if (((pnVar3->field_0x2DC == 5) || (pnVar3->field_0x2DC == 8)) ||
+ (pnVar3->field_0x2DC == 9))
+ {
+ procRopeThrowCatch_init();
+ } else {
+ checkNextRopeMode();
+ return true;
+ }
+ if (0 < m355C) {
+ m355C--;
+ }
+ }
+ return false;
}
/* 80143DF4-80143EAC .text checkNextRopeMode__9daPy_lk_cFv */
BOOL daPy_lk_c::checkNextRopeMode() {
- /* Nonmatching */
+ if ((!checkRopeReadyAnime()) && (!fopAcM_GetParam(mActorKeepEquip.getActor()))) {
+ m355C = 10;
+ m355E = 0;
+ seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT);
+ }
+ if (mpAttention->Lockon()) {
+ procRopeMove_init();
+ } else {
+ procRopeSubject_init();
+ }
+ return;
}
/* 80143EAC-80143F3C .text checkHangRopeActorNull__9daPy_lk_cFv */
BOOL daPy_lk_c::checkHangRopeActorNull() {
- /* Nonmatching */
+ if (mActorKeepRope.getActor() == NULL) {
+ if (checkRopeTag()) {
+ mEquipItem = daPyItem_NONE_e;
+ }
+ procFall_init(1, daPy_HIO_wallCatch_c0::m.field_0x54);
+ onNoResetFlg0(daPyFlg0_UNK400000);
+ onNoResetFlg1(daPyFlg1_UNK8000000);
+ return true;
+ } else {
+ return false;
+ }
}
/* 80143F3C-80144038 .text procRopeSubject_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeSubject_init() {
- if(mCurProc == daPyProc_ROPE_SUBJECT_e) {
+ if (mCurProc == daPyProc_ROPE_SUBJECT_e) {
return false;
}
@@ -94,7 +360,7 @@ BOOL daPy_lk_c::procRopeSubject_init() {
mVelocity = 0.0f;
- if(fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) {
+ if (fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) {
setActAnimeUpper(LKANM_BCK_ROPETHROWWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, -1.0f);
setSingleMoveAnime(ANM_ATNRS, 0.0f, 0.0f, -1, daPy_HIO_rope_c0::m.field_0x54);
}
@@ -114,24 +380,23 @@ BOOL daPy_lk_c::procRopeSubject_init() {
/* 80144038-8014422C .text procRopeSubject__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeSubject() {
- if(!checkItemModeActorPointer()) {
+ if (!checkItemModeActorPointer()) {
return true;
}
himo2_class* grapple = (himo2_class*)mActorKeepEquip.getActor();
- if(fopAcM_GetParam(grapple) == 0) {
+ if (fopAcM_GetParam(grapple) == 0) {
dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK40000_e);
- }
- else {
+ } else {
dComIfGp_setPlayerStatus0(0, daPyStts0_UNK40000_e);
}
- if(mpAttention->Lockon()) {
+ if (mpAttention->Lockon()) {
setSpeedAndAngleAtn();
}
- if(checkNextMode(0) == 0 && setBodyAngleToCamera()) {
- if(mBodyAngle.x > 0) {
+ if (checkNextMode(0) == 0 && setBodyAngleToCamera()) {
+ if (mBodyAngle.x > 0) {
mBodyAngle.x = 0;
}
@@ -140,21 +405,19 @@ BOOL daPy_lk_c::procRopeSubject() {
mSightPacket.onDrawFlg();
mSightPacket.setPos(&sight);
- if(grapple->setTargetPos(&sight, &m3600, &m3604)) {
+ if (grapple->setTargetPos(&sight, &m3600, &m3604)) {
mSightPacket.onDrawFlg();
- if(mSightPacket.getLockFlg()) {
+ if (mSightPacket.getLockFlg()) {
mSightPacket.incFrame();
- if(mSightPacket.checkSEFrame()) {
+ if (mSightPacket.checkSEFrame()) {
mDoAud_seStart(JA_SE_INDICATOR_1);
}
- }
- else {
+ } else {
mSightPacket.onLockFlg();
mDoAud_seStart(JA_SE_INDICATOR_1);
}
- }
- else {
+ } else {
mSightPacket.offLockFlg();
}
}
@@ -164,96 +427,802 @@ BOOL daPy_lk_c::procRopeSubject() {
/* 8014422C-80144464 .text procRopeReady_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeReady_init() {
- /* Nonmatching */
+ /* Nonmatching - "extsh" mFrame */
+ fopAc_ac_c* pfVar3 = mActorKeepEquip.getActor();
+ commonProcInit(daPyProc_ROPE_READY_e);
+ setMoveAnime(0.5f, daPy_HIO_rope_c0::m.field_0x18, 1.0f, ANM_ROPECATCH, ANM_ROPESWINGB, 7,
+ daPy_HIO_rope_c0::m.field_0x20);
+ mFrameCtrlUnder[UNDER_MOVE0_e].mStart = daPy_HIO_rope_c0::m.field_0x1C;
+ mFrameCtrlUnder[UNDER_MOVE0_e].mFrame = daPy_HIO_rope_c0::m.field_0x0;
+ mFrameCtrlUnder[UNDER_MOVE0_e].mEnd = daPy_HIO_rope_c0::m.field_0x4;
+ mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(
+ mFrameCtrlUnder[UNDER_MOVE0_e].getFrame());
+ m3688 = current.pos;
+ m35F0 = m3688.y;
+ m35F4 = m3688.y;
+ current.pos.y += 95.0f;
+ m370C.x = pfVar3->current.pos.x;
+ if (m3600 >= 0.0f) {
+ m370C.y = pfVar3->current.pos.y - m3600;
+ } else {
+ if ((checkBossGomaStage()) && (pfVar3->current.pos.y - current.pos.y > 700.0f)) {
+ m370C.y = pfVar3->current.pos.y - 700.0f;
+ } else {
+ mGndChk.SetPos(&pfVar3->current.pos);
+ f32 dVar4 = dComIfG_Bgsp()->GroundCross(&mGndChk);
+ if (dVar4 > ((current.pos.y - 125.0f) - 50.0f)) {
+ m370C.y = 50.0f + (125.0f + dVar4);
+ } else {
+ m370C.y = current.pos.y;
+ }
+ }
+ }
+ m3600 = m370C.y;
+ m370C.z = pfVar3->current.pos.z;
+ gravity = 0.0f;
+ mVelocity = 0.0f;
+ m35A0 = 0.0f;
+ fopAcM_SetParam(pfVar3, 3);
+ m34D4 = 0x1800;
+ shape_angle.y = cM_atan2s((m370C.x - current.pos.x), (m370C.z - current.pos.z));
+ current.angle.y = shape_angle.y;
+ mRopePos = pfVar3->current.pos;
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ return true;
}
/* 80144464-80144620 .text procRopeReady__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeReady() {
- /* Nonmatching */
+ /* Nonmatching - floats */
+ if (!checkItemModeActorPointer()) {
+ return true;
+ }
+ fopAc_ac_c* pfVar2 = mActorKeepEquip.getActor();
+ mRopePos = pfVar2->current.pos;
+ m370C.x = mRopePos.x;
+ m370C.z = mRopePos.z;
+ cXyz local_48 = (m370C - current.pos);
+ f32 dVar5 = local_48.abs();
+ cLib_chaseF(&m35A0, 50.0f, 5.0f);
+ shape_angle.x = (0.025f * (m34D4 * m35A0));
+ if (dVar5 > m35A0) {
+ current.pos += local_48 * (m35A0 / dVar5);
+ }
+ if (dVar5 <= (2.0f * m35A0)) {
+ procRopeSwing_init(mActorKeepEquip.getActor(), shape_angle.x);
+ }
+ return true;
}
/* 80144620-80144C58 .text procRopeSwing_init__9daPy_lk_cFP10fopAc_ac_cs */
-BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c*, s16) {
- /* Nonmatching */
+BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) {
+ /* Nonmatching - floats, regalloc */
+ float dVar8;
+ float dVar9;
+ cXyz local_84;
+ cXyz local_78;
+
+ himo2_class* pfVar7 = (himo2_class*)param_0;
+ commonProcInit(daPyProc_ROPE_SWING_e);
+ if (param_0 != NULL) {
+ mActorKeepRope.setData(param_0);
+ if (fopAcM_GetName(param_0) == PROC_HIMO3) {
+ fopAcM_SetParam(param_0, 1);
+ deleteEquipItem(TRUE);
+ mEquipItem = dItem_GRAPPLING_HOOK_e;
+ local_84 = (param_0->current.pos - current.pos);
+ dVar8 = (local_84.abs() - 95.0f);
+ dVar9 = pfVar7->field_0x15F8.y;
+ if (dVar8 > dVar9) {
+ dVar8 = dVar9;
+ }
+ local_84.normalize();
+ current.pos = (param_0->current.pos - (local_84 * dVar8));
+ }
+ } else {
+ param_0 = mActorKeepRope.getActor();
+ }
+ local_84 = (param_0->current.pos - current.pos);
+ m35A0 = local_84.abs();
+ f32 dVar11 = std::sqrtf(2.0f / m35A0);
+ m35A4 = dVar11;
+ dVar11 = (M_PI / 2 / m35A4);
+ if (pfVar7 != NULL) {
+ m34D4 = daPy_HIO_rope_c0::m.field_0x0;
+ if (checkSpecialRope()) {
+ m34D4 *= 0.125f;
+ }
+ f32 fVar1 = cM_ssin(shape_angle.y);
+ f32 fVar2 = cM_scos(shape_angle.y);
+ local_78.x = fVar2 * local_84.x - fVar1 * local_84.z;
+ local_78.y = local_84.y;
+ local_78.z = fVar1 * local_84.x + fVar2 * local_84.z;
+ s16 sVar4 = cM_atan2s(-local_78.x, local_78.z);
+ if (sVar4 > m34D4) {
+ sVar4 = m34D4;
+ } else if (sVar4 < -m34D4) {
+ sVar4 = -m34D4;
+ }
+
+ dVar8 = ((f32)sVar4 / m34D4);
+ dVar9 = std::sqrtf(1.0f - (dVar8 * dVar8));
+ dVar8 = cM_atan2f(dVar8, dVar9);
+ m35A8 = (dVar8 / m35A4);
+ dVar8 = std::sqrtf(local_78.y * local_78.y + local_78.z * local_78.z);
+ m34D6 = cM_atan2s(-local_78.x, dVar8);
+ if (m34D6 > 0) {
+ m35AC = dVar11;
+ } else {
+ m35AC = -dVar11;
+ }
+ } else {
+ m34D4 = abs(param_1);
+ if (param_1 < 0) {
+ m35A8 = dVar11;
+ } else {
+ m35A8 = -dVar11;
+ }
+ m34D6 = 0;
+ m35AC = 0.0f;
+ }
+ current.angle.y = shape_angle.y;
+ mVelocity = 0.0f;
+ speed.y = 0.0f;
+ gravity = 0.0f;
+ mRopePos = param_0->current.pos;
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ if ((pfVar7 == NULL) || (mActorKeepEquip.getActor() != NULL)) {
+ offModeFlg(ModeFlg_00000400);
+ onModeFlg(ModeFlg_00000100);
+ setTextureAnime(8, 0);
+ } else {
+ setBlendRopeMoveAnime(1);
+ }
+ if (pfVar7 == NULL) {
+ m_old_fdata->initOldFrameMorf(15.0f, 0, 0x2A);
+ }
+ mFrameCtrlUnder[UNDER_MOVE0_e].mStart = daPy_HIO_rope_c0::m.field_0x1C;
+ mFrameCtrlUnder[UNDER_MOVE0_e].mFrame = daPy_HIO_rope_c0::m.field_0x0;
+ mFrameCtrlUnder[UNDER_MOVE0_e].mEnd = daPy_HIO_rope_c0::m.field_0x4;
+ if ((pfVar7 != NULL) && (mActorKeepEquip.getActor() == NULL)) {
+ mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(
+ mFrameCtrlUnder[UNDER_MOVE0_e].getFrame());
+ }
+ m34D0 = 0;
+ shape_angle.x = param_1;
+ return true;
}
/* 80144C58-801456D8 .text procRopeSwing__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeSwing() {
- /* Nonmatching */
- static cXyz local_height_offset;
+ /* Nonmatching - floats, regalloc, math */
+ fopAc_ac_c* pfVar5;
+ short sVar8;
+ short sVar9;
+ short sVar10;
+ float dVar11;
+ float dVar12;
+ float dVar13;
+ short local_98[2];
+ float local_94;
+ cXyz cStack_90;
+ cXyz local_6c;
+ float local_48;
+
+ if (checkHangRopeActorNull()) {
+ return true;
+ }
+ mDoMtx_multVecZero(mpCLModel->getAnmMtx(1), &local_6c);
+ pfVar5 = mActorKeepRope.getActor();
+ mRopePos = pfVar5->current.pos;
+ dComIfGp_setRStatus(0x13);
+ dVar12 = (m35A8 * m35A4);
+ dVar13 = (m35AC * m35A4);
+ mDoMtx_stack_c::ZrotS(-shape_angle.z);
+ mDoMtx_stack_c::XrotM(-shape_angle.x);
+ mDoMtx_stack_c::YrotM(-shape_angle.y);
+ mDoMtx_stack_c::transM(-current.pos.x, -current.pos.y, -current.pos.z);
+ mDoMtx_stack_c::multVec(&local_6c, &cStack_90);
+ if (checkSpecialRope()) {
+ dVar13 = 0.0f;
+ dVar12 = dVar13;
+ } else {
+ if ((0.0f <= dVar12) && (dVar12 <= M_PI / 2)) {
+ dVar12 = -0.45f * cM_ssin(cM_rad2s(dVar12));
+ } else {
+ if (dVar12 <= -M_PI / 2) {
+ dVar12 = 0.45f * cM_ssin(cM_rad2s(dVar12));
+ } else {
+ dVar12 = 0.0f;
+ }
+ }
+ if ((0.0f <= dVar13) && (dVar13 <= M_PI / 2)) {
+ dVar13 = -0.45f * cM_ssin(cM_rad2s(dVar13));
+ } else {
+ if (dVar13 <= -M_PI / 2) {
+ dVar13 = 0.45f * cM_ssin(cM_rad2s(dVar13));
+ } else {
+ dVar13 = 0.0f;
+ }
+ }
+ }
+ dVar11 = 1.0f;
+ m35A8 = m35A8 + (dVar11 + dVar12);
+ m35AC = m35AC + (dVar11 + dVar13);
+ local_94 = m35A8 * m35A4;
+ dVar12 = (m35AC * m35A4);
+ if (local_94 >= M_PI) {
+ local_94 = local_94 - M_PI * 2;
+ m35A8 = local_94 / m35A4;
+ }
+ if (dVar12 >= M_PI) {
+ dVar12 = (dVar12 - M_PI * 2);
+ m35AC = (dVar12 / m35A4);
+ }
+ if ((checkModeFlg(ModeFlg_00000400)) && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) {
+ offModeFlg(ModeFlg_00000400);
+ onModeFlg(ModeFlg_00000100);
+ setTextureAnime(8, 0);
+ }
+ setBlendRopeMoveAnime(0);
+ if (checkSpecialRope()) {
+ sVar10 = daPy_HIO_rope_c0::m.field_0x0 * 0.125f;
+ sVar8 = 4;
+ sVar9 = 8;
+ } else {
+ sVar10 = daPy_HIO_rope_c0::m.field_0x0;
+ sVar8 = 0x20;
+ sVar9 = 0x40;
+ }
+ if (spActionButton()) {
+ cLib_chaseS(&m34D4, 0, sVar8 * 10);
+ cLib_chaseS(&m34D6, 0, sVar8 * 10);
+ } else {
+ cLib_chaseS(&m34D6, 0, sVar8);
+ if (std::fabsf(mStickDistance) > 0.05f) {
+ m34D4 += sVar9 * std::abs(cM_scos(cM_rad2s((local_94))));
+ } else {
+ cLib_chaseS(&m34D4, 0, sVar8);
+ }
+ }
+ if (sVar10 > m34D4) {
+ m34D4 = sVar10;
+ }
+ local_98[0] = -m34D4 * cM_ssin(cM_rad2s(local_94));
+ local_48 = m34D6 * cM_ssin(cM_rad2s(dVar12));
+ if (m34D0 != 0) {
+ m_pbCalc[PART_UNDER_e]->setRatio(1, dVar13);
+ sVar8 = m34D4 * cM_ssin(cM_rad2s(local_94)) + (-m34D4 * (0.5f * m34D0) * dVar13);
+ } else {
+ sVar8 = -m34D4 * cM_ssin(cM_rad2s((local_48 - 0.62831855f)));
+ }
+ cLib_addCalcAngleS(&shape_angle.x, sVar8, 8, 0xc00, 0x100);
+ dVar13 = cM_scos(cM_rad2s(dVar12));
+ cLib_addCalcAngleS(&shape_angle.z, m34D6 * cM_ssin(cM_rad2s((dVar12 - 1.0995574f))), 8,
+ (1024.0f + (2048.0f * dVar13)), (128.0f + (128.0f * dVar13)));
+ local_6c.set(0.0f, -m35A0, 0.0f);
+ mDoMtx_stack_c::transS(mRopePos.x, mRopePos.y, mRopePos.z);
+ mDoMtx_stack_c::ZXYrotM(local_98[0], shape_angle.y, local_98[1]);
+ mDoMtx_stack_c::multVec(&cStack_90, &current.pos);
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ sVar8 = shape_angle.y;
+ mDoMtx_stack_c::ZXYrotM(-m34D4 * cM_ssin(cM_rad2s((local_94 + m35A4))), sVar8, local_98[0]);
+ mDoMtx_stack_c::multVec(&local_6c, &cStack_90);
+ if (!checkRopeSwingWall(&local_6c, &cStack_90, local_98, &local_94)) {
+ static cXyz local_height_offset(0.0f, -105.0f, 0.0f);
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);
+ mDoMtx_stack_c::multVec(&local_height_offset, &cStack_90);
+ if (!checkRopeSwingWall(&current.pos, &cStack_90, local_98, &local_94)) {
+ resetFootEffect();
+ }
+ }
+ dVar12 = ((f32)m34D4 / sVar10);
+ if (changeRopeEndProc(0)) {
+ dVar13 = (m35A0 / (100.0f * daPy_HIO_rope_c0::m.field_0x14));
+ if (dVar13 < 1.0f) {
+ dVar13 = 1.0f;
+ }
+ mVelocity = (dVar12 * dVar13) * daPy_HIO_rope_c0::m.field_0xC;
+ if (std::abs(local_94) > M_PI / 2) {
+ current.angle.y = shape_angle.y + 0x8000;
+ }
+ speed.y = (dVar12 * dVar13) * daPy_HIO_rope_c0::m.field_0x10;
+ procFall_init(0, daPy_HIO_wallCatch_c0::m.field_0x54);
+ onNoResetFlg1(daPyFlg1_UNK8000000);
+ } else {
+ if ((m34D4 == 0) && (m34D6 == 0)) {
+ procRopeHangWait_init(0);
+ } else if (dVar12 > 0.6f) {
+ if (cM_scos(cM_rad2s(local_94)) > 0.77f) {
+ mDoAud_seStart(JA_SE_LK_ROPE_SWING_F, &mRopePos, NULL, mReverb);
+ }
+ }
+ }
+ return true;
}
/* 801456D8-801457FC .text procRopeHangWait_init__9daPy_lk_cFi */
-BOOL daPy_lk_c::procRopeHangWait_init(int) {
- /* Nonmatching */
+BOOL daPy_lk_c::procRopeHangWait_init(int param_0) {
+ commonProcInit(daPyProc_ROPE_HANG_WAIT_e);
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ current.pos.x = mRopePos.x;
+ current.pos.z = mRopePos.z;
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ gravity = 0.0f;
+ if (param_0 == 0) {
+ m34D0 = daPy_HIO_rope_c0::m.field_0x6;
+ setSingleMoveAnime(ANM_ROPECATCH, 1.0f, mFrameCtrlUnder[UNDER_MOVE0_e].getEnd() - 0.001f,
+ -1, daPy_HIO_rope_c0::m.field_0x28);
+ setTextureAnime(2, 0);
+ } else {
+ m34D0 = -1;
+ setSingleMoveAnime(ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1,
+ daPy_HIO_rope_c0::m.field_0x28);
+ }
+ m34D4 = 0;
+ return true;
}
/* 801457FC-80145B38 .text procRopeHangWait__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeHangWait() {
/* Nonmatching */
+ bool bVar1;
+ int iVar2;
+ s16 unaff_r29;
+ float dVar4;
+
+ dComIfGp_setRStatus(0x13);
+ if (0 < (int)m34D0) {
+ m34D0--;
+ }
+ if (checkHangRopeActorNull()) {
+ return true;
+ }
+ if (!changeRopeEndProc(1)) {
+ bVar1 = false;
+ fopAc_ac_c* pfVar3 = mActorKeepRope.getActor();
+ mRopePos = pfVar3->current.pos;
+ current.pos.x = mRopePos.x;
+ current.pos.z = mRopePos.z;
+ s16 r30 = 0;
+ if (mStickDistance > 0.05f) {
+ iVar2 = getDirectionFromAngle(m34DC);
+ if (spActionButton()) {
+ if (iVar2 == 0) {
+ if (abs((int)m34D4) <= 0x80) {
+ procRopeUp_init();
+ }
+ bVar1 = true;
+ unaff_r29 = 0;
+ } else if (iVar2 == 1) {
+ if (abs((int)m34D4) <= 0x80) {
+ procRopeDown_init();
+ }
+ bVar1 = true;
+ unaff_r29 = 0;
+ } else if (iVar2 == 2) {
+ s16 r5 = 512.0f * mStickDistance;
+ if (r5 > m34D4) {
+ s16 r0 = 64.0f * mStickDistance;
+ m34D4 += r0;
+ if (m34D4 > r5) {
+ m34D4 = r5;
+ }
+ unaff_r29 = m34D4;
+ } else {
+ unaff_r29 = r5;
+ }
+ } else {
+ s16 r5 = -512.0f * mStickDistance;
+ if (r5 < m34D4) {
+ s16 r0 = 64.0f * mStickDistance;
+ m34D4 -= r0;
+ if (m34D4 < r5) {
+ m34D4 = r5;
+ }
+ unaff_r29 = m34D4;
+ } else {
+ unaff_r29 = r5;
+ }
+ }
+ bVar1 = true;
+ if (m34D0 != -1) {
+ m34D0 = -1;
+ setSingleMoveAnime(ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1,
+ daPy_HIO_rope_c0::m.field_0x2C);
+ }
+ } else if ((iVar2 == 0) || (iVar2 == 1)) {
+ procRopeSwingStart_init();
+ }
+ unaff_r29 = 0;
+ bVar1 = true;
+ } else if (m34D0 == 0) {
+ m34D0 = -1;
+ setSingleMoveAnime(ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1,
+ daPy_HIO_rope_c0::m.field_0x2C);
+ }
+ unaff_r29 = 0;
+ bVar1 = true;
+ if (bVar1) {
+ cLib_addCalcAngleS(&m34D4, unaff_r29, 3, 0x40, 0x10);
+ if (m34D4 > 0) {
+ dVar4 = checkRopeRoofHit(shape_angle.y + 0x2000);
+ } else {
+ dVar4 = checkRopeRoofHit(shape_angle.y + -0x2000);
+ }
+ if (5.0f + (dVar4 - 60.0f) > current.pos.y) {
+ shape_angle.y = shape_angle.y + m34D4;
+ current.angle.y = shape_angle.y;
+ }
+ }
+ }
+ return true;
}
/* 80145B38-80145C3C .text specialRopeHangUp__9daPy_lk_cFv */
-void daPy_lk_c::specialRopeHangUp() {
- /* Nonmatching */
+int daPy_lk_c::specialRopeHangUp() {
+ /* Nonmatching - floats, shape_angle.y */
+ uint uVar1;
+ int iVar2;
+
+ if (checkSpecialRope()) {
+ uVar1 = (int)shape_angle.y ^ 0x4000;
+ iVar2 = abs((((int)uVar1 >> 1) - (uVar1 & 0x4000)) >> 0x1f);
+ if (iVar2 != 0) {
+ current.pos.z = -15.8f;
+ shape_angle.y = 0;
+ } else {
+ current.pos.z = 15.8f;
+ shape_angle.y = -0x8000;
+ }
+ current.pos.x = 361.39999f;
+ current.pos.y = 4464.7998f;
+ old.pos = current.pos;
+ current.angle.y = shape_angle.y;
+ m3724 = current.pos;
+ m352C = shape_angle.y + 0x8000;
+ setSingleMoveAnime(ANM_VJMP, 1.0f, 10.0f, -1, 3.0f);
+ return procHangStart_init();
+ } else {
+ return false;
+ }
}
/* 80145C3C-80145DBC .text procRopeUp_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeUp_init() {
- /* Nonmatching */
+ /* Nonmatching - floats */
+ fopAc_ac_c* pfVar3 = mActorKeepRope.getActor();
+ mRopePos = pfVar3->current.pos;
+ m3570 = 0;
+ f32 dVar4;
+ if (checkBossGomaStage()) {
+ dVar4 = (mRopePos.y - 200.0f);
+ } else {
+ dVar4 = (mRopePos.y - 100.0f);
+ f32 dVar5 = checkRopeRoofHit(shape_angle.y);
+ dVar5 = (dVar5 - 60.0f);
+ if (dVar5 < dVar4) {
+ dVar4 = dVar5;
+ } else if ((fopAcM_GetName(pfVar3)) == PROC_HIMO2 || (checkSpecialRope())) {
+ m3570 = 1;
+ }
+ }
+ if (dVar4 <= current.pos.y) {
+ if (specialRopeHangUp()) {
+ return true;
+ } else {
+ if (changeRopeToHangProc()) {
+ return true;
+ } else {
+ return procRopeHangWait_init(0);
+ }
+ }
+ } else {
+ commonProcInit(daPyProc_ROPE_UP_e);
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ setSingleMoveAnime(ANM_ROPECLIMB, daPy_HIO_rope_c0::m.field_0x30, 0.0f, -1,
+ daPy_HIO_rope_c0::m.field_0x34);
+ mFrameCtrlUnder[UNDER_MOVE0_e].mAttribute = 0;
+ m35A0 = dVar4;
+ gravity = 0.0f;
+ return true;
+ }
}
/* 80145DBC-80145F64 .text procRopeUp__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeUp() {
- /* Nonmatching */
+ dComIfGp_setRStatus(0x13);
+ if (checkHangRopeActorNull()) {
+ return true;
+ }
+ if (!changeRopeEndProc(1)) {
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ current.pos.x = mRopePos.x;
+ current.pos.z = mRopePos.z;
+ if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) {
+ int iVar1 = getDirectionFromAngle(m34DC);
+ if (mStickDistance <= 0.05f) {
+ procRopeHangWait_init(0);
+ } else {
+ if (!spActionButton()) {
+ procRopeSwingStart_init();
+ } else if (iVar1 == 1) {
+ procRopeDown_init();
+ } else if (iVar1 == 0) {
+ if (m35A0 <= current.pos.y) {
+ if (!specialRopeHangUp()) {
+ procRopeHangWait_init(0);
+ }
+ } else {
+ setSingleMoveAnime(ANM_ROPECLIMB, daPy_HIO_rope_c0::m.field_0x30, 0.0f, -1,
+ -1.0f);
+ mFrameCtrlUnder[UNDER_MOVE0_e].setAttribute(0);
+ }
+ } else {
+ procRopeHangWait_init(0);
+ }
+ }
+ } else {
+ cLib_chaseF(&current.pos.y, m35A0, 5.0f);
+ if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= 12.0f) {
+ onResetFlg0(daPyRFlg0_ROPE_GRAB_RIGHT_HAND);
+ }
+ }
+ }
+ return true;
}
/* 80145F64-801460EC .text procRopeDown_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeDown_init() {
- /* Nonmatching */
+ /* Nonmatching - floats */
+ fopAc_ac_c* pfVar4 = mActorKeepRope.getActor();
+ mRopePos = pfVar4->current.pos;
+ if (mActorKeepEquip.getActor() != NULL) {
+ if (m3604 >= 0.0f) {
+ m35A4 = m3600 - m3604;
+ } else if (checkBossGomaStage()) {
+ m35A4 = m3600 - 100.0f;
+ } else {
+ m35A4 = m3600 - 300.0f;
+ mGndChk.SetPos(&mRopePos);
+ f32 dVar5 = dComIfG_Bgsp()->GroundCross(&mGndChk);
+ if (dVar5 > ((m35A4 - 125.0f) - 50.0f)) {
+ m35A4 = 50.0f + (125.0f + dVar5);
+ }
+ }
+ } else {
+ himo2_class* pfVar5 = (himo2_class*)mActorKeepRope.getActor();
+ m35A4 = mRopePos.y - pfVar5->field_0x15F8.y;
+ }
+ if (current.pos.y <= m35A4) {
+ return procRopeHangWait_init(1);
+ } else {
+ commonProcInit(daPyProc_ROPE_DOWN_e);
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ setSingleMoveAnime(ANM_ROPEDOWN, daPy_HIO_rope_c0::m.field_0x38, 0.0f, -1,
+ daPy_HIO_rope_c0::m.field_0x3C);
+ gravity = 0.0f;
+ m35A0 = 0.0f;
+ return true;
+ }
}
/* 801460EC-80146240 .text procRopeDown__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeDown() {
- /* Nonmatching */
+ dComIfGp_setRStatus(0x13);
+ if ((checkHangRopeActorNull())) {
+ return true;
+ }
+ if (!changeRopeEndProc(1)) {
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ current.pos.x = mRopePos.x;
+ current.pos.z = mRopePos.z;
+ int iVar1 = getDirectionFromAngle(m34DC);
+ if (mStickDistance <= 0.05f) {
+ procRopeHangWait_init(1);
+ } else {
+ if (!spActionButton()) {
+ procRopeSwingStart_init();
+ } else if (iVar1 == 0) {
+ procRopeUp_init();
+ } else if (iVar1 == 1) {
+ m35A0 += 1.5f;
+ if (m35A0 > daPy_HIO_rope_c0::m.field_0x40) {
+ m35A0 = daPy_HIO_rope_c0::m.field_0x40;
+ }
+ if (cLib_chaseF(&current.pos.y, m35A4, m35A0)) {
+ procRopeHangWait_init(1);
+ }
+ } else {
+ procRopeHangWait_init(1);
+ }
+ }
+ }
+ return true;
}
/* 80146240-801463E8 .text procRopeSwingStart_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeSwingStart_init() {
- /* Nonmatching */
+ /* Nonmatching - floats */
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ commonProcInit(daPyProc_ROPE_SWING_START_e);
+ m35A0 = mRopePos.abs(current.pos);
+ m35A4 = 500.0f / m35A0;
+ if (m35A4 > 1.0f) {
+ m35A4 = 1.0f;
+ }
+ setSingleMoveAnime(ANM_ROPESWINGB, 1.0f, 0.0f, -1, 20.0f);
+ m34D4 = 2048.0f * m35A4;
+ if (checkSpecialRope()) {
+ m34D4 *= 0.125f;
+ }
+ gravity = 0.0f;
+ m34D0 = 0;
+ pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ return true;
}
/* 801463E8-80146610 .text procRopeSwingStart__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeSwingStart() {
- /* Nonmatching */
+ /* Nonmatching - floats */
+ dComIfGp_setRStatus(0x13);
+ cXyz local_28;
+ local_28.set(0.0f, -m35A0, 0.0f);
+ if (checkHangRopeActorNull()) {
+ return true;
+ }
+ if (!changeRopeEndProc(1)) {
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ if (m34D0 == 1) {
+ if (!cLib_addCalcAngleS(&shape_angle.x, m34D4, 5, 0x180, 0x40)) {
+ procRopeSwing_init(NULL, shape_angle.x);
+ }
+ } else {
+ if (!cLib_addCalcAngleS(&shape_angle.x, m34D4, 5, 0xa0, 0x40)) {
+ if (m34D4 > 0) {
+ setSingleMoveAnime(ANM_ROPESWINGF, 1.0f, 0.0f, -1, 10.0f);
+ m34D4 = -4096.0f * m35A4;
+ } else {
+ setSingleMoveAnime(ANM_ROPESWINGB, 1.0f, 0.0f, -1, 10.0f);
+ m34D4 = 4096.0f * m35A4;
+ }
+ m34D0 = 1;
+ if (checkSpecialRope()) {
+ m34D4 *= 0.125f;
+ }
+ }
+ }
+ if (mAcch.ChkWallHit()) {
+ procRopeSwing_init(NULL, shape_angle.x);
+ }
+ }
+ mDoMtx_stack_c::transS(mRopePos.x, mRopePos.y, mRopePos.z);
+ mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, 0);
+ mDoMtx_stack_c::multVec(&local_28, &current.pos);
+ return true;
}
/* 80146610-801466E8 .text procRopeMove_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeMove_init() {
- /* Nonmatching */
+ if (mCurProc == daPyProc_ROPE_MOVE_e) {
+ return false;
+ }
+ commonProcInit(daPyProc_ROPE_MOVE_e);
+ if (m34B8 == 2) {
+ current.angle.y = shape_angle.y + 0x4000;
+ } else {
+ m34B8 = 3;
+ current.angle.y = shape_angle.y + -0x4000;
+ }
+ if (fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) {
+ setActAnimeUpper(LKANM_BCK_ROPETHROWWAIT, UPPER_MOVE2_e, daPy_HIO_rope_c0::m.field_0x50,
+ 0.0f, -1, -1.0f);
+ setBlendAtnMoveAnime(daPy_HIO_rope_c0::m.field_0x54);
+ }
+ dComIfGp_setPlayerStatus0(0, daPyStts0_ROPE_AIM_e);
+ return true;
}
/* 801466E8-80146848 .text procRopeMove__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeMove() {
- /* Nonmatching */
+ if (!checkItemModeActorPointer()) {
+ return true;
+ }
+ if ((fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) && (checkRopeReadyAnime())) {
+ if (mpAttnActorLockOn != NULL) {
+ setSpeedAndAngleAtnActor();
+ } else {
+ if ((m355E == 0) && (!mpAttention->Lockon())) {
+ resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
+ } else {
+ setSpeedAndAngleAtn();
+ }
+ }
+ }
+ if (checkNextMode(0) == 0) {
+ f32 fVar1 = -1.0f;
+ if (std::abs(mVelocity) < 0.001f) {
+ onModeFlg(ModeFlg_00000001);
+ if (m34B8 != 3) {
+ m34B8 = 3;
+ fVar1 = daPy_HIO_basic_c0::m.field_0xC;
+ }
+ } else {
+ offModeFlg(ModeFlg_00000001);
+ }
+ setBlendAtnMoveAnime(fVar1);
+ setBodyAngleXReadyAnime();
+ }
+ return true;
}
/* 80146848-801468C4 .text procRopeThrowCatch_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeThrowCatch_init() {
- /* Nonmatching */
+ commonProcInit(daPyProc_ROPE_THROW_CATCH_e);
+ setSingleMoveAnime(ANM_ROPETHROWCATCH, daPy_HIO_rope_c0::m.field_0x58,
+ daPy_HIO_rope_c0::m.field_0x5C, daPy_HIO_rope_c0::m.field_0xA,
+ daPy_HIO_rope_c0::m.field_0x64);
+ mVelocity = 0.0f;
+ dComIfGp_setPlayerStatus0(0, daPyStts0_ROPE_AIM_e);
+ m34D0 = 0x1e;
+ return true;
}
/* 801468C4-801469A8 .text procRopeThrowCatch__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeThrowCatch() {
- /* Nonmatching */
+ if (!checkItemModeActorPointer()) {
+ return true;
+ }
+ if (mpAttention->Lockon()) {
+ dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK40000_e);
+ } else {
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK40000_e);
+ }
+ if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) {
+ m34D0--;
+ himo2_class* rope = (himo2_class*)mActorKeepEquip.getActor();
+ if ((rope->field_0x2DC == 0 || (m34D0 == 0))) {
+ checkNextRopeMode();
+ }
+ }
+ return true;
}
/* 801469A8-80146A44 .text procRopeUpHang_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeUpHang_init() {
- /* Nonmatching */
+ commonProcInit(daPyProc_ROPE_UP_HANG_e);
+ dComIfGp_setPlayerStatus0(0, daPyStts0_UNK800000_e);
+ setSingleMoveAnime(ANM_VJMP, 1.0f, 10.0f, -1, 3.0f);
+ gravity = 0.0f;
+ shape_angle.y = m352C + 0x8000;
+ current.angle.y = shape_angle.y;
+ mVelocity = 0.0f;
+ speed.y = 0.0f;
+ current.pos.y -= 80.0f;
+ return true;
}
/* 80146A44-80146AF0 .text procRopeUpHang__9daPy_lk_cFv */
BOOL daPy_lk_c::procRopeUpHang() {
- /* Nonmatching */
+ if (checkHangRopeActorNull()) {
+ return true;
+ }
+ fopAc_ac_c* pfVar2 = mActorKeepRope.getActor();
+ mRopePos = pfVar2->current.pos;
+ current.pos.x = mRopePos.x;
+ current.pos.z = mRopePos.z;
+ if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) {
+ m3724 = mRopePos;
+ m352C = shape_angle.y + 0x8000;
+ procHangStart_init();
+ }
+ return true;
}
diff --git a/src/d/actor/d_a_player_vomit.inc b/src/d/actor/d_a_player_vomit.inc
index 59a47715..78db64c9 100644
--- a/src/d/actor/d_a_player_vomit.inc
+++ b/src/d/actor/d_a_player_vomit.inc
@@ -16,7 +16,6 @@
/* 8014F8A0-8014F994 .text checkJumpFlower__9daPy_lk_cFv */
BOOL daPy_lk_c::checkJumpFlower() {
- /* Nonmatching - floats, branching */
fopAc_ac_c* iVar1;
short sVar3;
@@ -24,17 +23,16 @@ BOOL daPy_lk_c::checkJumpFlower() {
if (((mCyl.ChkCoHit()) && (iVar1 != 0)) && (fopAcM_GetName(iVar1) == PROC_JBO)) {
if (checkModeFlg(ModeFlg_MIDAIR)) {
if ((speed.y <= 0.0f) && (current.pos.y > iVar1->current.pos.y - 50.0f)) {
- procVomitWait_init();
+ return procVomitWait_init();
}
} else if ((sVar3 = fopAcM_searchActorAngleY(this, iVar1),
cLib_distanceAngleS(sVar3, shape_angle.y) < 0x2000) &&
(mStickDistance > 0.2f))
{
- procVomitReady_init(sVar3, fopAcM_searchActorDistanceXZ(this, iVar1));
+ return procVomitReady_init(sVar3, fopAcM_searchActorDistanceXZ(this, iVar1));
}
- } else {
- return false;
}
+ return false;
}
/* 8014F994-8014FA88 .text procVomitReady_init__9daPy_lk_cFsf */
@@ -94,40 +92,46 @@ BOOL daPy_lk_c::procVomitWait_init() {
/* 8014FC20-8014FD8C .text procVomitWait__9daPy_lk_cFv */
BOOL daPy_lk_c::procVomitWait() {
- /* Nonmatching - floats, branching */
- int iVar1;
- s16 sVar2;
+ /* Nonmatching - floats */
+ s16 r30 = 0;
if (checkNoResetFlg1(daPyFlg1_FORCE_VOMIT_JUMP)) {
- sVar2 = 0;
procVomitJump_init(0);
- } else if (mStickDistance > 0.05f) {
- iVar1 = getDirectionFromAngle(m34DC);
- if (iVar1 == 2) {
- sVar2 = (int)(512.0f * mStickDistance);
- if (sVar2 > m34D4) {
- m34D4 += (int)(64.0f * mStickDistance);
- if (m34D4 > sVar2) {
- m34D4 = sVar2;
+ } else {
+ if (mStickDistance > 0.05f) {
+ int iVar1 = getDirectionFromAngle(m34DC);
+ if (iVar1 == 2) {
+ s16 r5 = 512.0f * mStickDistance;
+ if (r5 > m34D4) {
+ s16 r0 = 64.0f * mStickDistance;
+ m34D4 += r0;
+ if (m34D4 > r5) {
+ m34D4 = r5;
+ }
+ r30 = m34D4;
+ } else {
+ r30 = r5;
}
- sVar2 = m34D4;
- }
- } else if (iVar1 == 3) {
- sVar2 = (int)(-512.0f * mStickDistance);
- if (sVar2 < m34D4) {
- m34D4 -= (int)(64.0f * mStickDistance);
- if (m34D4 < sVar2) {
- m34D4 = sVar2;
+ } else if (iVar1 == 3) {
+ s16 r5 = -512.0f * mStickDistance;
+ if (r5 < m34D4) {
+ s16 r0 = 64.0f * mStickDistance;
+ m34D4 -= r0;
+ if (m34D4 < r5) {
+ m34D4 = r5;
+ }
+ r30 = m34D4;
+ } else {
+ r30 = r5;
}
- sVar2 = m34D4;
} else {
- sVar2 = 0;
+ r30 = 0;
}
} else {
- sVar2 = 0;
+ r30 = 0;
}
- cLib_addCalcAngleS(&m34D4, sVar2, 3, 0x40, 0x10);
+ cLib_addCalcAngleS(&m34D4, r30, 3, 0x40, 0x10);
shape_angle.y += m34D4;
current.angle.y = shape_angle.y;
}