diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 0faeff9b3..5a6eb35e6 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -977,7 +977,7 @@ public: BOOL checkIceSlipFall(); void setFrontWallType(); BOOL changeFrontWallTypeProc(); - void changeSlideProc(); + int changeSlideProc(); void changeWaitProc(); void changeLandProc(f32); BOOL setDamagePoint(f32); @@ -1346,13 +1346,13 @@ public: BOOL procClimbMoveSide_init(int); BOOL procClimbMoveSide(); void setBlendWHideMoveAnime(f32); - void getWHideModePolygon(cXyz*, cXyz*, cXyz*, int); + int getWHideModePolygon(cXyz*, cXyz*, cXyz*, int); void getWHideBasePos(cXyz*); void getWHideNextPos(cXyz*, cXyz*); BOOL checkWHideBackWall(cXyz*); BOOL checkWHideFrontFloor(cXyz*); BOOL checkWHideModeChange(cXyz*); - void changeWHideEndProc(cXyz*); + int changeWHideEndProc(cXyz*); BOOL procWHideReady_init(cM3dGPla*, cXyz*); BOOL procWHideReady(); BOOL procWHideWait_init(); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 3f24631b6..47a1ef627 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -38,6 +38,8 @@ class J2DOrthoGraph; enum daPy__PlayerStatus0 { daPyStts0_UNK1_e = 0x00000001, daPyStts0_UNK10_e = 0x00000010, + daPyStts0_UNK20_e = 0x00000020, + daPyStts0_UNK40_e = 0x00000040, daPyStts0_UNK80_e = 0x00000080, daPyStts0_UNK100_e = 0x00000100, daPyStts0_UNK200_e = 0x00000200, diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 699c0c296..586cd7960 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1733,7 +1733,7 @@ BOOL daPy_lk_c::changeFrontWallTypeProc() { } /* 8010FEC4-8010FFB0 .text changeSlideProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSlideProc() { +int daPy_lk_c::changeSlideProc() { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player_whide.inc b/src/d/actor/d_a_player_whide.inc index 7461ab4df..88bff6230 100644 --- a/src/d/actor/d_a_player_whide.inc +++ b/src/d/actor/d_a_player_whide.inc @@ -2,92 +2,646 @@ * d_a_player_whide.inc * * Code relating to "wall hiding" (sidling). - * - * 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_HIO.h" #include "d/actor/d_a_player_main.h" /* 8013707C-801371E0 .text setBlendWHideMoveAnime__9daPy_lk_cFf */ -void daPy_lk_c::setBlendWHideMoveAnime(f32) { - /* Nonmatching */ +void daPy_lk_c::setBlendWHideMoveAnime(f32 param_0) { + float fVar1; + float fVar2; + float fVar3; + float fVar4; + float fVar5; + float fVar6; + float fVar7; + float fVar8; + s16 sVar1; + daPy_ANM dVar5; + daPy_ANM dVar6; + + if (!checkNoResetFlg0(daPyFlg0_UNK10000)) { + fVar1 = daPy_HIO_wall_c0::m.field_0x14; + fVar5 = daPy_HIO_wall_c0::m.field_0x40; + dVar6 = ANM_WALL; + sVar1 = daPy_HIO_wall_c0::m.field_0x8; + fVar6 = daPy_HIO_wall_c0::m.field_0x60; + fVar3 = daPy_HIO_wall_c0::m.field_0x58; + if (m34B8 == 2) { + dVar5 = ANM_WALLWR; + } else { + dVar5 = ANM_WALLWL; + } + } else { + fVar1 = daPy_HIO_wall_c0::m.field_0x18; + fVar5 = daPy_HIO_wall_c0::m.field_0x44; + dVar6 = ANM_WALLDW; + sVar1 = daPy_HIO_wall_c0::m.field_0xA; + fVar6 = daPy_HIO_wall_c0::m.field_0x64; + fVar3 = daPy_HIO_wall_c0::m.field_0x5C; + if (m34B8 == 2) { + dVar5 = ANM_WALLWRDW; + } else { + dVar5 = ANM_WALLWLDW; + } + } + fVar5 *= fVar4; + fVar7 = mVelocity / mMaxNormalSpeed; + if (fVar7 < 0.0f) { + fVar7 = 0.0f; + } + if (fVar7 < fVar3) { + fVar4 = 1.0f - fVar7 / fVar3; + m3598 = 1.0f; + } else { + fVar4 = 0.0f; + fVar2 = 1.0f; + m3598 = (fVar2 - ((fVar2 - fVar6) * (fVar7 - fVar3)) / (fVar2 - fVar3)); + } + setMoveAnime(fVar4, fVar1, 0.0f, dVar5, dVar6, 5, fVar5); + mFrameCtrlUnder[UNDER_MOVE0_e].setEnd(sVar1); + mFrameCtrlUnder[UNDER_MOVE1_e].setFrame( + mFrameCtrlUnder[UNDER_MOVE1_e].getEnd() - 0.001f); + mFrameCtrlUnder[UNDER_MOVE1_e].setRate(0.0f); + mAnmRatioUnder[UNDER_MOVE1_e].getAnmTransform()->setFrame( + mFrameCtrlUnder[UNDER_MOVE1_e].getFrame()); + return; } -/* 801371E0-80137608 .text getWHideModePolygon__9daPy_lk_cFP4cXyzP4cXyzP4cXyzi */ -void daPy_lk_c::getWHideModePolygon(cXyz*, cXyz*, cXyz*, int) { - /* Nonmatching */ +/* 801371E0-80137608 .text + * getWHideModePolygon__9daPy_lk_cFP4cXyzP4cXyzP4cXyzi */ +int daPy_lk_c::getWHideModePolygon(cXyz *param_0, cXyz *param_1, cXyz *param_2, + int param_3) { + /* Nonmatching - floats, branching, regalloc */ + int iVar4; + float dVar11; + float dVar10; + float dVar9; + + if (param_0 != NULL) { + mLinkLinChk.Set(param_0, param_1, this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + return false; + } + } + cM3dGPla *pfVar2 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + s16 uVar3 = cM_atan2s(pfVar2->GetNP()->x, pfVar2->GetNP()->z); + if (std::fabsf(pfVar2->GetNP()->y) > 0.05f) { + return false; + } else if (iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk), + iVar4 == 3) { + return false; + } else { + param_2->x = mLinkLinChk.GetCrossP()->x; + param_2->y = mLinkLinChk.GetCrossP()->y; + param_2->z = mLinkLinChk.GetCrossP()->z; + cXyz local_3c; + local_3c.x = + param_2->x + cM_ssin(uVar3) * daPy_HIO_wall_c0::m.field_0x50; + local_3c.y = param_2->y; + local_3c.z = + param_2->z + cM_ssin(uVar3) * daPy_HIO_wall_c0::m.field_0x50; + mGndChk.SetPos(&local_3c); + float dVar8 = dComIfG_Bgsp()->GroundCross(&mGndChk); + float fVar1; + if ((C_BG_MIN_HEIGHT != dVar8) && + (!(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y >= 0.5f))) { + return false; + } else { + if (param_3 == 4) { + fVar1 = 49.9f; + } else { + fVar1 = 99.8f; + } + dVar8 = fVar1; + s16 sVar7 = uVar3; + cXyz local_48; + cM3dGPla *pfVar5; + if (param_3 != 3) { + dVar10 = param_2->z; + dVar9 = pfVar2->GetNP()->x; + dVar11 = dVar10 - (dVar8 * dVar9); + local_3c.set(param_2->x + (dVar9 * 1.25f) + (dVar8 * dVar10), + param_2->y, + (dVar11 + (pfVar2->GetNP()->z * 1.25f))); + local_48.set(local_3c.x - (2.5f * dVar9) - (2.5f * dVar10), + local_3c.y, local_3c.z); + mLinkLinChk.Set(&local_3c, &local_48, this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + return false; + } + pfVar5 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + iVar4 = cM_atan2s(pfVar5->GetNP()->x, pfVar5->GetNP()->z); + if (sVar7 != (s16)iVar4) { + return false; + } + } + if (param_3 != 2) { + dVar10 = param_2->z; + dVar9 = pfVar2->GetNP()->x; + dVar11 = dVar10 + (dVar8 * dVar9); + local_3c.set(param_2->x - (dVar9 * 1.25f) + (dVar8 * dVar10), + param_2->y, + (dVar11 + (pfVar2->GetNP()->z * 1.25f))); + local_48.set(local_3c.x - (2.5f * dVar9) - (2.5f * dVar10), + local_3c.y, local_3c.z); + mLinkLinChk.Set(&local_3c, &local_48, this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + return false; + } + pfVar5 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + iVar4 = cM_atan2s(pfVar5->GetNP()->x, pfVar5->GetNP()->z); + if (sVar7 != (s16)iVar4) { + return false; + } + } + if (param_3 != 4) { + if (param_3 == 2) { + sVar7 = sVar7 - shape_angle.y; + param_2->x += + daPy_HIO_wall_c0::m.field_0x54 * pfVar2->GetNP()->z; + param_2->z -= + daPy_HIO_wall_c0::m.field_0x54 * pfVar2->GetNP()->x; + } else { + sVar7 = sVar7 - shape_angle.y; + param_2->x -= + daPy_HIO_wall_c0::m.field_0x54 * pfVar2->GetNP()->z; + param_2->z += + daPy_HIO_wall_c0::m.field_0x54 * pfVar2->GetNP()->x; + } + } + if (sVar7 > 0x2aaa) { + return false; + } else if (abs((int)(s16)((sVar7 + -0x8000) - (current.angle.y))) > + 0x1555) { + return false; + } + } + } } /* 80137608-80137640 .text getWHideBasePos__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::getWHideBasePos(cXyz*) { - /* Nonmatching */ +void daPy_lk_c::getWHideBasePos(cXyz *param_0) { + /* Nonmatching - floats */ + f32 fVar3; + + if (checkNoResetFlg0(daPyFlg0_UNK10000)) { + fVar3 = 89.9f; + } else { + fVar3 = 125.0f; + } + param_0->set(current.pos.x, current.pos.y + fVar3, current.pos.z); + return; } /* 80137640-8013769C .text getWHideNextPos__9daPy_lk_cFP4cXyzP4cXyz */ -void daPy_lk_c::getWHideNextPos(cXyz*, cXyz*) { - /* Nonmatching */ +void daPy_lk_c::getWHideNextPos(cXyz *param_0, cXyz *param_1) { + param_1->set( + param_0->x + cM_ssin(current.angle.y) * daPy_HIO_wall_c0::m.field_0x54, + param_0->y, + param_0->z + cM_scos(current.angle.y) * daPy_HIO_wall_c0::m.field_0x54); + return; } /* 8013769C-80137754 .text checkWHideBackWall__9daPy_lk_cFP4cXyz */ -BOOL daPy_lk_c::checkWHideBackWall(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::checkWHideBackWall(cXyz *param_0) { + if (param_0 == NULL) { + return true; + } else { + cXyz local_18; + local_18.set(param_0->x - 25.0f * cM_ssin(shape_angle.y), param_0->y, + param_0->z - 25.0f * cM_scos(shape_angle.y)); + mLinkLinChk.Set(param_0, &local_18, (fopAc_ac_c *)this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + return true; + } + return false; + } } /* 80137754-80137828 .text checkWHideFrontFloor__9daPy_lk_cFP4cXyz */ -BOOL daPy_lk_c::checkWHideFrontFloor(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::checkWHideFrontFloor(cXyz *param_0) { + float dVar5; + float dVar6; + cXyz local_10; + + local_10.set(param_0->x + 40.0f * cM_ssin(shape_angle.y), param_0->y, + param_0->z + 40.0f * cM_scos(shape_angle.y)); + mGndChk.SetPos(&local_10); + dVar6 = dComIfG_Bgsp()->GroundCross(&mGndChk); + if ((checkNoResetFlg0(daPyFlg0_UNK80000000)) && + (dVar5 = current.pos.y, dVar5 > dVar6)) { + dVar6 = dVar5; + } + return (std::fabsf(dVar6 - current.pos.y) < 5.0f); } /* 80137828-80137914 .text checkWHideModeChange__9daPy_lk_cFP4cXyz */ -BOOL daPy_lk_c::checkWHideModeChange(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::checkWHideModeChange(cXyz *param_0) { + /* Nonmatching - floats */ + if (!checkNoResetFlg0(daPyFlg0_UNK10000)) { + if (!checkWHideFrontFloor(param_0)) { + dComIfGp_setRStatus(0); + } else if (spActionButton()) { + return true; + } + } else { + cXyz local_18; + local_18.set(param_0->x, current.pos.y + 125.0f, param_0->z); + if (((!spActionButton()) && (!mAcch.ChkRoofHit())) && + (checkWHideBackWall(&local_18))) { + return -1; + } + } + if ((checkModeFlg(ModeFlg_00000001)) && + (mCurProc != daPyProc_WHIDE_PEEP_e)) { + setTextureAnime(mAnmDataTable[ANM_WALL].mTexAnmIdx, 0); + } + return false; } /* 80137914-80137A00 .text changeWHideEndProc__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::changeWHideEndProc(cXyz*) { - /* Nonmatching */ +int daPy_lk_c::changeWHideEndProc(cXyz *param_0) { + /* Nonmatching - floats */ + dComIfGp_setDoStatus(16); + dComIfGp_setRStatus(15); + if (((!doButton() && + ((!checkNoResetFlg0(daPyFlg0_UNK10000) || !mAcch.ChkRoofHit()))) || + ((m_anm_heap_upper[UPPER_MOVE2_e].mIdx != LKANM_BCK_REST && + swordTrigger()))) || + !checkWHideBackWall(param_0)) { + mVelocity = 0.7f * mMaxNormalSpeed; + current.angle.y = shape_angle.y; + return checkNextMode(0); + } + if (checkNoResetFlg0(daPyFlg0_UNK10000) && mAcch.ChkRoofHit()) { + onModeFlg(ModeFlg_04000000); + } else { + offModeFlg(ModeFlg_04000000); + } + return false; } -/* 80137A00-80137BD8 .text procWHideReady_init__9daPy_lk_cFP8cM3dGPlaP4cXyz */ -BOOL daPy_lk_c::procWHideReady_init(cM3dGPla*, cXyz*) { - /* Nonmatching */ +/* 80137A00-80137BD8 .text + * procWHideReady_init__9daPy_lk_cFP8cM3dGPlaP4cXyz */ +BOOL daPy_lk_c::procWHideReady_init(cM3dGPla *param_0, cXyz *param_1) { + s32 uVar1 = mModeFlg >> 4 & 1; + offNoResetFlg0(daPyFlg0_UNK10000); + commonProcInit(daPyProc_WHIDE_READY_e); + mVelocity = 0.0f; + current.angle.y = shape_angle.y; + m370C.x = param_1->x; + m370C.y = param_1->y; + m370C.z = param_1->z; + if (param_0 != NULL) { + m34D4 = cM_atan2s(param_0->mNormal.x, param_0->mNormal.z); + m370C.x += param_0->mNormal.x * daPy_HIO_wall_c0::m.field_0x50; + m370C.z += param_0->mNormal.z * daPy_HIO_wall_c0::m.field_0x50; + } else { + m34D4 = m352C; + m370C.x += cM_ssin(m352C) * daPy_HIO_wall_c0::m.field_0x50; + m370C.z += cM_scos(m352C) * daPy_HIO_wall_c0::m.field_0x50; + } + if (mEquipItem == daPyItem_NONE_e) { + if (checkEquipAnime()) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + } + setSingleMoveAnime(ANM_WALL, 0.0f, daPy_HIO_wall_c0::m.field_0x24, -1, + daPy_HIO_wall_c0::m.field_0x34); + m3570 = 1; + } else { + setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); + setAnimeUnequip(); + m3570 = 0; + } + if ((uVar1) != 0) { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK1_e); + } + return true; } /* 80137BD8-80137CD0 .text procWHideReady__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideReady() { - /* Nonmatching */ + if (changeWHideEndProc(NULL)) { + return true; + } else { + if (m3570 == 0) { + if (m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff) { + setSingleMoveAnime(ANM_WALL, 0.0f, + daPy_HIO_wall_c0::m.field_0x24, -1, + daPy_HIO_wall_c0::m.field_0x34); + m3570 = 1; + } + return true; + } else { + cLib_addCalc(¤t.pos.x, m370C.x, 0.25f, 10.0f, 4.0f); + cLib_addCalc(¤t.pos.z, m370C.z, 0.25f, 10.0f, 4.0f); + if (!cLib_addCalcAngleS(&shape_angle.y, m34D4, 2, 0x2000, 0x800)) { + daPy_matAnm_c::m_maba_flg = 0; + daPy_matAnm_c::m_maba_timer = 1; + procWHideWait_init(); + } + } + } + return true; } /* 80137CD0-80137DF0 .text procWHideWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideWait_init() { - /* Nonmatching */ + f32 fVar1; + daPy_ANM dVar3; + f32 dVar4; + f32 dVar5; + s16 sVar2; + + if (!checkNoResetFlg0(daPyFlg0_UNK10000)) { + dVar3 = ANM_WALL; + sVar2 = daPy_HIO_wall_c0::m.field_0x0; + dVar4 = daPy_HIO_wall_c0::m.field_0x38; + } else { + dVar3 = ANM_WALLDW; + sVar2 = daPy_HIO_wall_c0::m.field_0x2; + dVar4 = daPy_HIO_wall_c0::m.field_0x3C; + } + if (mCurProc == daPyProc_WHIDE_READY_e) { + fVar1 = daPy_HIO_wall_c0::m.field_0x24; + } else { + fVar1 = sVar2 - 0.001f; + } + dVar5 = fVar1; + commonProcInit(daPyProc_WHIDE_WAIT_e); + mVelocity = 0.0f; + setSingleMoveAnime(dVar3, daPy_HIO_wall_c0::m.field_0xC, dVar5, sVar2, + dVar4); + current.angle.y = shape_angle.y; + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK1_e); + return true; } /* 80137DF0-80138074 .text procWHideWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideWait() { - /* Nonmatching */ + /* Nonmatching - floats, branching */ + cXyz cStack_24; + cXyz cStack_3c; + cXyz cStack_48; + int iVar1; + + getWHideBasePos(&cStack_3c); + if (changeWHideEndProc(&cStack_3c)) { + return true; + } else if (iVar1 = checkWHideModeChange(&cStack_3c), iVar1 == 1) { + setSingleMoveAnime(ANM_WALLDW, daPy_HIO_wall_c0::m.field_0x10, + daPy_HIO_wall_c0::m.field_0x28, + daPy_HIO_wall_c0::m.field_0x2, + daPy_HIO_wall_c0::m.field_0x3C); + onNoResetFlg0(daPyFlg0_UNK10000); + mAcchCir[2].SetWallH(89.9f); + } else if (iVar1 == -1) { + setSingleMoveAnime(ANM_WALLDW, -daPy_HIO_wall_c0::m.field_0x10, + daPy_HIO_wall_c0::m.field_0x28, + daPy_HIO_wall_c0::m.field_0x2, + daPy_HIO_wall_c0::m.field_0x3C); + mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(daPy_HIO_wall_c0::m.field_0x2 - + 0.001f); + mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame( + mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + offNoResetFlg0(daPyFlg0_UNK10000); + mAcchCir[2].SetWallH(125.0f); + } + cM3dGPla *triPla; + if (((mStickDistance > 0.05f) && (C_BG_MIN_HEIGHT != mAcch.GetGroundH())) && + (triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd), + triPla->GetNP()->y >= 0.5f)) { + iVar1 = getDirectionFromCurrentAngle(); + if ((iVar1 == 3 || (iVar1 == 2))) { + if (iVar1 == 3) { + current.angle.y = shape_angle.y + -0x4000; + m34B8 = 3; + } else { + current.angle.y = shape_angle.y + 0x4000; + m34B8 = 2; + } + + getWHideNextPos(&cStack_3c, &cStack_48); + iVar1 = checkWHideBackWall(&cStack_48); + if ((iVar1 != 0) && ((!checkNoResetFlg0(daPyFlg0_UNK10000) || + (checkWHideFrontFloor(&cStack_48))))) { + procWHideMove_init(); + } else if (iVar1 == 0) { + cStack_48 += (cStack_48 - cStack_3c) * 0.25f; + mLinkLinChk.Set(&cStack_3c, &cStack_48, this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + procWHidePeep_init(); + } + } + } + } else { + current.angle.y = shape_angle.y; + return true; + } } /* 80138074-801380F0 .text procWHideMove_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideMove_init() { - /* Nonmatching */ + commonProcInit(daPyProc_WHIDE_MOVE_e); + if (m34B8 == 2) { + current.angle.y = shape_angle.y + 0x4000; + } else { + current.angle.y = shape_angle.y + -0x4000; + } + setBlendWHideMoveAnime(1.0f); + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK1_e); + return true; } /* 801380F0-8013852C .text procWHideMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideMove() { - /* Nonmatching */ + if (changeSlideProc()) { + return true; + } else { + cXyz acStack_24; + getWHideBasePos(&acStack_24); + s16 uVar1 = current.angle.y; + if (changeWHideEndProc(&acStack_24)) { + if ((!doButton()) && (mStickDistance > 0.05f)) { + uint uVar3 = (uint)uVar1; + current.pos.x += 50.0f * cM_ssin(uVar3); + current.pos.z += 50.0f * cM_scos(uVar3); + } + return true; + } else { + cM3dGPla *triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + s16 sVar8 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z); + f32 fVar2; + if ((checkWHideModeChange(&acStack_24))) { + fVar2 = 0.0f; + } else { + if ((mStickDistance > 0.05f) && + (C_BG_MIN_HEIGHT != mAcch.GetGroundH()) && + (triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd), + triPla->GetNP()->y >= 0.5f)) { + int iVar6 = getDirectionFromCurrentAngle(); + if (iVar6 == 1) { + current.angle.y -= -0x8000; + mVelocity *= 0.5f; + if (m34B8 == 2) { + m34B8 = 3; + } else { + m34B8 = 2; + } + setBlendWHideMoveAnime(2.0f); + } + if ((iVar6 == 0) || (iVar6 == 1)) { + fVar2 = daPy_HIO_move_c0::m.field_0x14; + fVar2 *= mStickDistance; + } else { + fVar2 = 0.0f; + } + } else { + fVar2 = 0.0f; + } + } + cXyz cStack_30; + setNormalSpeedF(fVar2, 0.5f, 2.0f, 0.25f); + getWHideNextPos(&acStack_24, &cStack_30); + if ((checkNoResetFlg0(daPyFlg0_UNK10000)) && + (!checkWHideFrontFloor(&cStack_30))) { + mVelocity = 0.0f; + procWHideWait_init(); + } else { + cXyz cStack_3c; + triPla = (cM3dGPla *)getWHideModePolygon( + &acStack_24, &cStack_30, &cStack_3c, m34B8); + if (triPla != NULL) { + procWHideReady_init(triPla, &cStack_3c); + } else { + if (std::fabsf(mVelocity) <= 0.001f) { + procWHideWait_init(); + } else { + if (((C_BG_MIN_HEIGHT == mAcch.GetGroundH()) || + (!(dComIfG_Bgsp() + ->GetTriPla(mAcch.m_gnd) + ->GetNP() + ->y >= 0.5f))) || + (!checkWHideBackWall(&cStack_30))) { + mVelocity = 0.0f; + procWHideWait_init(); + } else { + cXyz cStack_48; + if ((sVar8 != shape_angle.y) && + (triPla = (cM3dGPla *)getWHideModePolygon( + NULL, NULL, &cStack_48, m34B8), + triPla != 0)) { + if ((s16)(current.angle.y - shape_angle.y) > + 0) { + current.angle.y = sVar8 + 0x4000; + } else { + current.angle.y = sVar8 - 0x4000; + } + shape_angle.y = sVar8; + current.pos.x += + 8.0f * cM_ssin(current.angle.y); + current.pos.z += + 8.0f * cM_scos(current.angle.y); + } + current.pos.x -= 0.8f * + daPy_HIO_wall_c0::m.field_0x50 * + cM_ssin(shape_angle.y); + current.pos.z -= 0.8f * + daPy_HIO_wall_c0::m.field_0x50 * + cM_scos(shape_angle.y); + setBlendWHideMoveAnime(-1.0f); + return true; + } + } + } + } + } + } } /* 8013852C-801385EC .text procWHidePeep_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHidePeep_init() { - /* Nonmatching */ + f32 fVar1; + f32 fVar2; + f32 fVar3; + s16 sVar4; + daPy_ANM dVar2; + + commonProcInit(daPyProc_WHIDE_PEEP_e); + if (!checkNoResetFlg0(daPyFlg0_UNK10000)) { + fVar1 = daPy_HIO_wall_c0::m.field_0x1C; + fVar3 = daPy_HIO_wall_c0::m.field_0x48; + fVar2 = daPy_HIO_wall_c0::m.field_0x2C; + sVar4 = daPy_HIO_wall_c0::m.field_0x4; + if (m34B8 == 2) { + dVar2 = ANM_WALLPR; + } else { + dVar2 = ANM_WALLPL; + } + } else { + fVar1 = daPy_HIO_wall_c0::m.field_0x20; + fVar3 = daPy_HIO_wall_c0::m.field_0x4C; + fVar2 = daPy_HIO_wall_c0::m.field_0x30; + sVar4 = daPy_HIO_wall_c0::m.field_0x6; + if (m34B8 == 2) { + dVar2 = ANM_WALLPRDW; + } else { + dVar2 = ANM_WALLPLDW; + } + } + setSingleMoveAnime(dVar2, fVar1, fVar2, sVar4, fVar3); + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK1_e); + return true; } /* 801385EC-801387A4 .text procWHidePeep__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHidePeep() { - /* Nonmatching */ + cXyz cStack_38; + + getWHideBasePos(&cStack_38); + if (changeWHideEndProc(&cStack_38)) { + return true; + } else { + f32 dVar3 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); + if (std::fabsf(dVar3) < 0.01f) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < + (mFrameCtrlUnder[UNDER_MOVE0_e].getStart() + 1)) { + return procWHideWait_init(); + } + } + if (std::fabsf(dVar3) < 0.01f) { + if (m34B8 == 2) { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK40_e); + } else { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK20_e); + } + if (!checkNoResetFlg0(daPyFlg0_UNK10000)) { + dVar3 = daPy_HIO_wall_c0::m.field_0x1C; + } else { + dVar3 = daPy_HIO_wall_c0::m.field_0x20; + } + } + if (checkWHideModeChange(&cStack_38)) { + if (dVar3 > 0.0f) { + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3); + } + } else if (mStickDistance > 0.05f) { + int iVar1 = getDirectionFromCurrentAngle(); + if (((iVar1 != 0) && (dVar3 > 0.0f)) || + ((iVar1 == 0 && (dVar3 < 0.0f)))) { + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3); + } + } else if (dVar3 > 0.0f) { + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3); + } + } + return true; }