diff --git a/include/d/actor/d_a_player_HIO.h b/include/d/actor/d_a_player_HIO.h index 1fe5deb33..a427db5cf 100644 --- a/include/d/actor/d_a_player_HIO.h +++ b/include/d/actor/d_a_player_HIO.h @@ -748,7 +748,8 @@ public: class daPy_HIO_b_jump_c1 { public: - /* 0x00 */ s16 field_0x0; + /* 0x00 */ u8 field_0x0; + /* 0x01 */ u8 field_0x1; /* 0x02 */ s16 field_0x2; /* 0x04 */ s16 field_0x4; /* 0x06 */ s16 field_0x6; diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 79f8ee0b2..e2ec60343 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -979,7 +979,7 @@ public: BOOL changeFrontWallTypeProc(); int changeSlideProc(); void changeWaitProc(); - void changeLandProc(f32); + int changeLandProc(f32); BOOL setDamagePoint(f32); BOOL checkNormalDamage(int); void setDashDamage(); @@ -1419,7 +1419,7 @@ public: BOOL procSwimMove_init(BOOL); BOOL procSwimMove(); void setSpecialBattle(int); - void changeSpecialBattle(); + int changeSpecialBattle(); BOOL procBtJump_init(fopEn_enemy_c*); BOOL procBtJump(); BOOL procBtJumpCut_init(cXyz*); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 47a1ef627..c167c96c5 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -37,12 +37,14 @@ class J2DOrthoGraph; enum daPy__PlayerStatus0 { daPyStts0_UNK1_e = 0x00000001, + daPyStts0_UNK2_e = 0x00000002, daPyStts0_UNK10_e = 0x00000010, daPyStts0_UNK20_e = 0x00000020, daPyStts0_UNK40_e = 0x00000040, daPyStts0_UNK80_e = 0x00000080, daPyStts0_UNK100_e = 0x00000100, daPyStts0_UNK200_e = 0x00000200, + daPyStts0_UNK400_e = 0x00000400, daPyStts0_BOW_AIM_e = 0x00001000, daPyStts0_UNK2000_e = 0x00002000, daPyStts0_HOOKSHOT_AIM_e = 0x00004000, diff --git a/src/d/actor/d_a_player_HIO.inc b/src/d/actor/d_a_player_HIO.inc index aede334a5..2196da94a 100644 --- a/src/d/actor/d_a_player_HIO.inc +++ b/src/d/actor/d_a_player_HIO.inc @@ -140,7 +140,7 @@ const daPy_HIO_swim_c1 daPy_HIO_swim_c0::m = { }; const daPy_HIO_b_jump_c1 daPy_HIO_b_jump_c0::m = { - 256, 0, 8, 3500, 1.0f, 2.0f, 1.0f, 4.0f, 0.0f, 5.0f, -5.0f, + 1, 0, 0, 8, 3500, 1.0f, 2.0f, 1.0f, 4.0f, 0.0f, 5.0f, -5.0f, -3.75f, 0.6f, 0.0f, 1.0f, 32.5f, 12.5f, -3.75f, 10.0f, 2.5f, 6.5f, }; diff --git a/src/d/actor/d_a_player_battle.inc b/src/d/actor/d_a_player_battle.inc index 37bedbd76..9908a2340 100644 --- a/src/d/actor/d_a_player_battle.inc +++ b/src/d/actor/d_a_player_battle.inc @@ -1,98 +1,511 @@ /** * d_a_player_battle.inc * - * Code relating to (?) (How is this different from the "cut" functions in the sword file?) - * - * This file is not a standalone translation unit and is instead directly + * Code relating to (?) (How is this different from the "cut" functions in the + * sword file?) + * + * 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_HIO.h" #include "d/actor/d_a_player_main.h" /* 8013E250-8013E384 .text setSpecialBattle__9daPy_lk_cFi */ -void daPy_lk_c::setSpecialBattle(int) { - /* Nonmatching */ +void daPy_lk_c::setSpecialBattle(int param_0) { + fopEn_enemy_c *pfVar3; + + if ((param_0 == 0) || (!strcmp(dComIfGp_getStartStageName(), "GTower"))) { + if (mpAttnEntryA != NULL && + mpAttnEntryA->mType == fopAc_Attn_TYPE_BATTLE_e) { + if (mpAttnActorLockOn != NULL && + mpAttnActorLockOn->group == fopAc_ENEMY_e) { + pfVar3 = (fopEn_enemy_c *)mpAttnActorLockOn; + if (!checkPlayerGuard()) { + if (!daPy_dmEcallBack_c::checkCurse()) { + if (mEquipItem == daPyItem_SWORD_e) { + if (pfVar3->getBtAttackType() != 0 && + (pfVar3->getBtStartFrame() - + daPy_HIO_battle_c0::m.field_0x4 <= + pfVar3->getBtNowFrame())) { + if (pfVar3->getBtNowFrame() < + pfVar3->getBtEndFrame()) { + if (pfVar3->getBtMaxDis() > + fopAcM_searchActorDistanceXZ(this, + pfVar3)) { + dComIfGp_setDoStatus(0x1a); + } + } + } + } + } + } + } + } + } + return; } /* 8013E384-8013E454 .text changeSpecialBattle__9daPy_lk_cFv */ -void daPy_lk_c::changeSpecialBattle() { - /* Nonmatching */ +int daPy_lk_c::changeSpecialBattle() { + /* Nonmatching - regalloc */ + fopEn_enemy_c *pfVar3; + + pfVar3 = (fopEn_enemy_c *)mpAttnActorLockOn; + if (((pfVar3 != NULL) && + ((dComIfGp_getDoStatus() == 26 || (m34C5 == 5)))) && + ((m34C5 == 5 || ((doTrigger() && (pfVar3->getBtStartFrame() <= + pfVar3->getBtNowFrame())))))) { + if (pfVar3->getBtAttackType() == 1) { + return procBtJump_init(pfVar3); + } + if (pfVar3->getBtAttackType() == 2) { + return procBtRoll_init(pfVar3); + } + if (pfVar3->getBtAttackType() == 3) { + return procBtVerticalJump_init(pfVar3); + } + if (pfVar3->getBtAttackType() == 4) { + onNoResetFlg1(daPyFlg1_LAST_COMBO_WAIT); + return true; + } + } + return false; } /* 8013E454-8013E72C .text procBtJump_init__9daPy_lk_cFP13fopEn_enemy_c */ -BOOL daPy_lk_c::procBtJump_init(fopEn_enemy_c*) { - /* Nonmatching */ +BOOL daPy_lk_c::procBtJump_init(fopEn_enemy_c *param_0) { + /* Nonmatching - math */ + f32 fVar1; + s16 sVar2; + f32 dVar3; + f32 dVar5; + + cXyz local_34 = (param_0->current.pos - current.pos); + commonProcInit(daPyProc_BT_JUMP_e); + gravity = daPy_HIO_b_jump_c0::m.field_0x20; + setSingleMoveAnime(ANM_MJMP, daPy_HIO_b_jump_c0::m.field_0x8, + daPy_HIO_b_jump_c0::m.field_0x14, -1, + daPy_HIO_b_jump_c0::m.field_0x10); + fVar1 = local_34.y + param_0->getBtHeight(); + if (local_34.y + param_0->getBtHeight() < 30.0f) { + fVar1 = 30.0f; + } + dVar5 = ((-2.0f * fVar1) / gravity); + m35A0 = (-gravity * local_34.abs()); + dVar3 = local_34.absXZ(); + m35A4 = (dVar3 / dVar5); + sVar2 = fopAcM_searchActorAngleY(this, param_0); + current.angle.y = sVar2; + shape_angle.y = current.angle.y; + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2_e); + m34D0 = 0; + m370C.x = param_0->current.pos.x - + param_0->getBtBodyR() * cM_ssin(param_0->shape_angle.y); + m370C.y = param_0->current.pos.y; + m370C.z = param_0->current.pos.z - + param_0->getBtBodyR() * cM_scos(param_0->shape_angle.y); + if (daPy_HIO_b_jump_c0::m.field_0x18 <= 0.0f) { + speed.y = m35A0; + mVelocity = m35A4; + m3570 = 1; + } else { + m3570 = 0; + } + voiceStart(6); + offNoResetFlg0(daPyFlg0_NO_FALL_VOICE); + endFlameDamageEmitter(); + return true; } /* 8013E72C-8013E860 .text procBtJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtJump() { - /* Nonmatching */ + /* Nonmatching - math */ + u32 uVar2; + + if (m3570 == 0) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= + daPy_HIO_b_jump_c0::m.field_0x18) { + speed.y = m35A0; + mVelocity = m35A4; + m3570 = 1; + } + } else { + if (mAcch.ChkGroundHit()) { + return changeLandProc(daPy_HIO_b_jump_c0::m.field_0xC); + } + if (m3570 == 1) { + m34D0++; + if (speed.y < -gravity) { + return procBtJumpCut_init(&m370C); + } + } else { + uVar2 = cM_atan2s(mVelocity, -speed.y); + m34F2 = (s16)(int)(cM_ssin((uVar2 & 0x7fff) << 1) - + daPy_HIO_b_jump_c0::m.field_0x6); + setFallVoice(); + } + } + return true; } /* 8013E860-8013E9D4 .text procBtJumpCut_init__9daPy_lk_cFP4cXyz */ -BOOL daPy_lk_c::procBtJumpCut_init(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::procBtJumpCut_init(cXyz *param_0) { + commonProcInit(daPyProc_BT_JUMP_CUT_e); + setSingleMoveAnime(ANM_MJMPC, daPy_HIO_b_jump_c0::m.field_0x28, + daPy_HIO_b_jump_c0::m.field_0x30, + daPy_HIO_b_jump_c0::m.field_0x4, + daPy_HIO_b_jump_c0::m.field_0x2C); + if (checkNormalSwordEquip()) { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_MJMPCA)); + } else { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_MJMPCMS)); + } + m35EC = daPy_HIO_b_jump_c0::m.field_0x30; + mVelocity = 0.0f; + gravity = 0.0f; + speed.y = 0.0f; + m370C = *param_0; + m3570 = 0; + dComIfGp_setPlayerStatus0(0, (daPyStts0_UNK2_e | daPyStts0_UNK400_e)); + voiceStart(1); + setBlurPosResource(LKANM__BTJUMPCUT_POS); + setExtraFinishCutAtParam(5); + dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + return true; } /* 8013E9D4-8013EBD0 .text procBtJumpCut__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtJumpCut() { - /* Nonmatching */ + /* Nonmatching - branching, math */ + f32 fVar1; + u32 uVar2; + f32 dVar4; + + m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + if ((speed.y < 0.0f) && (daPy_HIO_b_jump_c0::m.field_0x0 == 1)) { + uVar2 = cM_atan2s(mVelocity, -speed.y); + m34F2 = (s16)(int)cM_ssin(((uVar2 & 0x7fff) << 1) - + daPy_HIO_b_jump_c0::m.field_0x6); + } + fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + if (((fVar1 >= daPy_HIO_b_jump_c0::m.field_0x44) && + (fVar1 < daPy_HIO_b_jump_c0::m.field_0x48)) && + (onResetFlg0(daPyRFlg0_UNK2), + !(checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)))) { + onResetFlg0(daPyRFlg0_UNK1); + seStartSwordCut(JA_SE_LK_SW_KAZEKIRI_S); + } + if (mAcch.ChkGroundHit()) { + return changeLandProc(daPy_HIO_b_jump_c0::m.field_0xC); + } else { + if ((m3570 != 0) || + (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) { + gravity = daPy_HIO_b_jump_c0::m.field_0x3C; + speed.y = daPy_HIO_b_jump_c0::m.field_0x34; + mVelocity = daPy_HIO_b_jump_c0::m.field_0x38; + m3570 = 1; + } else { + if ((m3570 == 1) && (speed.y < -gravity) && + daPy_HIO_b_jump_c0::m.field_0x0 == 1) { + m3570 = 2; + setSingleMoveAnime(ANM_JMPEDS, 0.0f, 0.0f, -1, + daPy_HIO_b_jump_c0::m.field_0x40); + offModeFlg(ModeFlg_00000400); + setTextureAnime(0x37, 0); + resetSeAnime(); + } + } + setFallVoice(); + return true; + } } /* 8013EBD0-8013EC50 .text procBtSlide__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtSlide() { - /* Nonmatching */ + /* Nonmatching - floats */ + f32 dVar1 = cLib_addCalc(&mVelocity, 0.0f, daPy_HIO_b_slide_c0::m.field_0x4, + daPy_HIO_b_slide_c0::m.field_0x8, + daPy_HIO_b_slide_c0::m.field_0xC); + if (dVar1 <= 0.001f) { + checkNextMode(0); + } + if (mVelocity < 2.5f) { + resetFootEffect(); + } + return true; } /* 8013EC50-8013EE64 .text procBtRoll_init__9daPy_lk_cFP13fopEn_enemy_c */ -BOOL daPy_lk_c::procBtRoll_init(fopEn_enemy_c*) { - /* Nonmatching */ +BOOL daPy_lk_c::procBtRoll_init(fopEn_enemy_c *param_0) { + /* Nonmatching - math */ + daPy_ANM dVar3; + f32 dVar5; + cXyz local_38; + cXyz local_2c; + + commonProcInit(daPyProc_BT_ROLL_e); + mVelocity = 0.0f; + local_38.x = + 0.5f * (current.pos.x - param_0->current.pos.x - + param_0->getBtBodyR() * cM_ssin(param_0->shape_angle.y)); + local_38.y = 0.5f * param_0->current.pos.y + current.pos.y; + local_38.z = + 0.5f * (current.pos.z - param_0->current.pos.z - + param_0->getBtBodyR() * cM_scos(param_0->shape_angle.y)); + if (m34B8 == 2) { + m34D4 = -0x7ff0; + dVar3 = ANM_MROLLL; + } else { + m34D4 = 0x7ff0; + dVar3 = ANM_MROLLR; + } + setSingleMoveAnime(dVar3, daPy_HIO_b_roll_c0::m.field_0xC, + daPy_HIO_b_roll_c0::m.field_0x10, + daPy_HIO_b_roll_c0::m.field_0x6, + daPy_HIO_b_roll_c0::m.field_0x14); + local_2c = (current.pos - local_38); + dVar5 = local_2c.absXZ(); + m35A0 = dVar5; + m34D6 = cM_atan2s(local_2c.x, local_2c.z); + shape_angle.y = fopAcM_searchActorAngleY(this, param_0); + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2_e); + m34BE = 4; + voiceStart(7); + endFlameDamageEmitter(); + return true; } /* 8013EE64-8013F010 .text procBtRoll__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtRoll() { - /* Nonmatching */ + s16 sVar1 = m34D4; + cLib_addCalcAngleS(&m34D4, 0, daPy_HIO_b_roll_c0::m.field_0x4, + daPy_HIO_b_roll_c0::m.field_0x0, + daPy_HIO_b_roll_c0::m.field_0x2); + s16 sVar3 = sVar1 - m34D4; + if (sVar1 > 0) { + current.angle.y = m34D6 + 0x4000; + } else { + current.angle.y = m34D6 + -0x4000; + } + cXyz local_28; + local_28.x = current.pos.x - m35A0 * cM_ssin(m34D6); + local_28.y = current.pos.y; + local_28.z = current.pos.z - m35A0 * cM_scos(m34D6); + m34D6 += sVar3; + current.pos.x = local_28.x + m35A0 * cM_ssin(m34D6); + current.pos.z = local_28.z + m35A0 * cM_scos(m34D6); + shape_angle.y = m34D6 + 0x8000; + if (abs((int)sVar3) < daPy_HIO_b_roll_c0::m.field_0x2) { + resetFootEffect(); + } + J3DFrameCtrl &frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + if (frameCtrl.getRate() < 0.01f) { + procBtRollCut_init(&local_28); + } else { + if (frameCtrl.checkPass(10.0f)) { + endFlameDamageEmitter(); + } + } + return true; } /* 8013F010-8013F200 .text procBtRollCut_init__9daPy_lk_cFP4cXyz */ -BOOL daPy_lk_c::procBtRollCut_init(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::procBtRollCut_init(cXyz *param_0) { + daPy_ANM dVar4; + + commonProcInit(daPyProc_BT_ROLL_CUT_e); + if ((s16)(current.angle.y - shape_angle.y) > 0) { + dVar4 = ANM_MROLLLC; + m3570 = 1; + m34EC = 1; + setBlurPosResource(LKANM__BTROTATECUTL_POS); + } else { + dVar4 = ANM_MROLLRC; + m3570 = -1; + m34EC = -1; + setBlurPosResource(LKANM__BTROTATECUTR_POS); + } + setSingleMoveAnime(dVar4, daPy_HIO_b_roll_c0::m.field_0x1C, + daPy_HIO_b_roll_c0::m.field_0x20, + daPy_HIO_b_roll_c0::m.field_0x8, + daPy_HIO_b_roll_c0::m.field_0x24); + if (checkNormalSwordEquip()) { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_MROLLCA)); + } else { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_MROLLCMS)); + } + m35EC = daPy_HIO_b_roll_c0::m.field_0x20; + m370C = *param_0; + m34D4 = 0; + mVelocity = daPy_HIO_b_roll_c0::m.field_0x28; + speed.y = daPy_HIO_b_roll_c0::m.field_0x2C; + gravity = daPy_HIO_b_roll_c0::m.field_0x30; + voiceStart(1); + setExtraFinishCutAtParam(15); + offNoResetFlg0(daPyFlg0_NO_FALL_VOICE); + onResetFlg0(daPyRFlg0_UNK2); + onResetFlg0(daPyRFlg0_UNK1); + seStartSwordCut(JA_SE_LK_SW_KAZEKIRI_S); + dComIfGp_setPlayerStatus0(0, (daPyStts0_UNK2_e | daPyStts0_UNK400_e)); + dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + return true; } /* 8013F200-8013F3E8 .text procBtRollCut__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtRollCut() { - /* Nonmatching */ + /* Nonmatching - branching */ + m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + s16 sVar2 = cLib_targetAngleY(¤t.pos, &m370C); + cLib_addCalcAngleS(&shape_angle.y, sVar2, 5, 0x5e8, 0x13c); + current.angle.y = shape_angle.y + (m3570 << 0xe); + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { + if (m34D4 == 0) { + m34D4 = 1; + onResetFlg0(daPyRFlg0_UNK2); + } else if (m34D4 == 1) { + setSingleMoveAnime(ANM_JMPEDS, 0.0f, 0.0f, -1, + daPy_HIO_b_roll_c0::m.field_0x38); + offModeFlg(ModeFlg_00000400); + setTextureAnime(0x37, 0); + resetSeAnime(); + m34D4 = 2; + } + if (m34D4 > 1) { + int iVar3 = m3570; + if (!(iVar3 > 0) || !(m34EC < 0)) { + if ((iVar3 < 0) && (m34EC > 0)) { + cLib_addCalcAngleS(&m34EC, -iVar3, 4, + daPy_HIO_b_roll_c0::m.field_0xA, 0x200); + } else { + m34EC += iVar3 * daPy_HIO_b_roll_c0::m.field_0xA; + } + } + } + if (mAcch.ChkGroundHit()) { + shape_angle.y = shape_angle.y + m34EC; + current.angle.y = shape_angle.y; + return changeLandProc(daPy_HIO_autoJump_c0::m.field_0x24); + } + } else { + onResetFlg0(daPyRFlg0_UNK2); + } + if (speed.y < -gravity) { + gravity = daPy_HIO_b_roll_c0::m.field_0x34; + } + setFallVoice(); + return true; } -/* 8013F3E8-8013F4A8 .text procBtVerticalJump_init__9daPy_lk_cFP13fopEn_enemy_c */ -BOOL daPy_lk_c::procBtVerticalJump_init(fopEn_enemy_c*) { - /* Nonmatching */ +/* 8013F3E8-8013F4A8 .text + * procBtVerticalJump_init__9daPy_lk_cFP13fopEn_enemy_c */ +BOOL daPy_lk_c::procBtVerticalJump_init(fopEn_enemy_c *) { + commonProcInit(daPyProc_BT_VERTICAL_JUMP_e); + setSingleMoveAnime(ANM_MSTEPOVER, daPy_HIO_b_verJump_c0::m.field_0x8, + daPy_HIO_b_verJump_c0::m.field_0xC, + daPy_HIO_b_verJump_c0::m.field_0x0, + daPy_HIO_b_verJump_c0::m.field_0x10); + mVelocity = 0.0f; + gravity = daPy_HIO_b_verJump_c0::m.field_0x14; + speed.y = daPy_HIO_b_verJump_c0::m.field_0x18; + offNoResetFlg0(daPyFlg0_NO_FALL_VOICE); + current.angle.y = shape_angle.y; + voiceStart(6); + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2_e); + endFlameDamageEmitter(); + return true; } /* 8013F4A8-8013F520 .text procBtVerticalJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtVerticalJump() { - /* Nonmatching */ + setFallVoice(); + if (mAcch.ChkGroundHit()) { + changeLandProc(daPy_HIO_autoJump_c0::m.field_0x24); + } else { + if (speed.y < -(gravity * 2.0f)) { + procBtVerticalJumpCut_init(); + } + } + return true; } /* 8013F520-8013F5BC .text procBtVerticalJumpCut_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtVerticalJumpCut_init() { - /* Nonmatching */ + commonProcInit(daPyProc_BT_VERTICAL_JUMP_CUT_e); + setSingleMoveAnime(ANM_MSTEPOVERA, daPy_HIO_b_verJump_c0::m.field_0x1C, + daPy_HIO_b_verJump_c0::m.field_0x20, + daPy_HIO_b_verJump_c0::m.field_0x2, + daPy_HIO_b_verJump_c0::m.field_0x24); + mpCutfBpk->setFrame(0.0f); + mpCutfBtk->setFrame(0.0f); + gravity = daPy_HIO_b_verJump_c0::m.field_0x28; + setExtraFinishCutAtParam(16); + dComIfGp_setPlayerStatus0(0, (daPyStts0_UNK2_e | daPyStts0_UNK400_e)); + return true; } /* 8013F5BC-8013F6E4 .text procBtVerticalJumpCut__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtVerticalJumpCut() { - /* Nonmatching */ + /* Nonmatching - floats, math */ + setFallVoice(); + f32 fVar2 = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - 9.0f; + if (fVar2 < 0.0f) { + fVar2 = 0.0f; + } else if ((mpCutfBpk->getFrameMax() >= fVar2)) { + fVar2 = mpCutfBpk->getFrameMax() - 0.001f; + } + mpCutfBpk->setFrame(fVar2); + mpCutfBtk->setFrame(fVar2); + if (mAcch.ChkGroundHit()) { + procBtVerticalJumpLand_init(); + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { + if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { + voiceStart(1); + onResetFlg0(daPyRFlg0_UNK1); + seStartSwordCut(JA_SE_LK_SW_KAZEKIRI_S); + gravity = daPy_HIO_b_verJump_c0::m.field_0x2C; + } + onResetFlg0(daPyRFlg0_UNK2); + } + } + return true; } /* 8013F6E4-8013F7F0 .text procBtVerticalJumpLand_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtVerticalJumpLand_init() { - /* Nonmatching */ + f32 fVar1 = m35F0 - current.pos.y; + + if (!dComIfGp_event_runCheck()) { + if (fVar1 >= 100.0f * daPy_HIO_fall_c0::m.field_0x10) { + setDamagePoint(-2.0f); + } else { + if (fVar1 >= 100.0f * daPy_HIO_fall_c0::m.field_0x14) { + setDamagePoint(-1.0f); + } + } + } + commonProcInit(daPyProc_BT_VERTICAL_JUMP_LAND_e); + setSingleMoveAnime(ANM_MSTEPOVERLAND, daPy_HIO_b_verJump_c0::m.field_0x30, + daPy_HIO_b_verJump_c0::m.field_0x34, + daPy_HIO_b_verJump_c0::m.field_0x4, + daPy_HIO_b_verJump_c0::m.field_0x38); + dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + if (!checkNoResetFlg0(daPyFlg0_UNK10000000)) { + seStartOnlyReverb(JA_SE_LK_JUMP_ATTACK); + } + return true; } /* 8013F7F0-8013F848 .text procBtVerticalJumpLand__9daPy_lk_cFv */ BOOL daPy_lk_c::procBtVerticalJumpLand() { - /* Nonmatching */ + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { + procBackJump_init(); + mVelocity = daPy_HIO_b_verJump_c0::m.field_0x3C; + speed.y = daPy_HIO_b_verJump_c0::m.field_0x40; + } + return true; } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 586cd7960..5299410d1 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1743,7 +1743,7 @@ void daPy_lk_c::changeWaitProc() { } /* 80110028-8011029C .text changeLandProc__9daPy_lk_cFf */ -void daPy_lk_c::changeLandProc(f32) { +int daPy_lk_c::changeLandProc(f32) { /* Nonmatching */ }