Files
tww/src/d/actor/d_a_player_whide.inc
T
LagoLunatic ab5659b201 d_a_player_main cleanup and some demo matches (#1016)
* d_a_player_main cleanup and some demo matches

* Add unions for player_main procvars

* Make d_a_player_main fields private
2026-05-21 19:18:46 -04:00

599 lines
20 KiB
C++

/**
* d_a_player_whide.inc
*
* Code relating to "wall hiding" (sidling).
*
* 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
* based on the original names of the functions it contains.
*/
#include "d/dolzel.h" // IWYU pragma: keep
#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 param_0) {
f32 fVar1;
f32 fVar5;
daPy_ANM dVar6;
s16 sVar1;
f32 fVar6;
f32 fVar3;
daPy_ANM dVar5;
if (!checkNoResetFlg0(daPyFlg0_UNK10000)) {
fVar1 = m_HIO->mWall.m.field_0x14;
fVar5 = m_HIO->mWall.m.field_0x40;
dVar6 = ANM_WALL;
sVar1 = m_HIO->mWall.m.field_0x8;
fVar6 = m_HIO->mWall.m.field_0x60;
fVar3 = m_HIO->mWall.m.field_0x58;
if (mDirection == DIR_LEFT) {
dVar5 = ANM_WALLWR;
} else {
dVar5 = ANM_WALLWL;
}
} else {
fVar1 = m_HIO->mWall.m.field_0x18;
fVar5 = m_HIO->mWall.m.field_0x44;
dVar6 = ANM_WALLDW;
sVar1 = m_HIO->mWall.m.field_0xA;
fVar6 = m_HIO->mWall.m.field_0x64;
fVar3 = m_HIO->mWall.m.field_0x5C;
if (mDirection == DIR_LEFT) {
dVar5 = ANM_WALLWRDW;
} else {
dVar5 = ANM_WALLWLDW;
}
}
fVar5 *= param_0;
f32 fVar7;
fVar7 = mNormalSpeed / mMaxNormalSpeed;
if (fVar7 < 0.0f) {
fVar7 = 0.0f;
}
f32 fVar4;
if (fVar7 < fVar3) {
fVar4 = 1.0f - fVar7 / fVar3;
m3598 = 1.0f;
} else {
fVar4 = 0.0f;
m3598 = (1.0f - ((1.0f - fVar6) * (fVar7 - fVar3)) / (1.0f - 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());
}
/* 801371E0-80137608 .text getWHideModePolygon__9daPy_lk_cFP4cXyzP4cXyzP4cXyzi */
cM3dGPla* daPy_lk_c::getWHideModePolygon(cXyz* i_start, cXyz* i_end, cXyz* param_2, int direction) {
if (i_start != NULL) {
mLinkLinChk.Set(i_start, i_end, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return NULL;
}
}
cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
s16 sVar7 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z);
if (std::fabsf(triPla->GetNP()->y) > 0.05f) {
return NULL;
}
int iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk);
if (iVar4 == 3) {
return NULL;
}
*param_2 = mLinkLinChk.GetCross();
cXyz local_3c;
local_3c.x = param_2->x + cM_ssin(sVar7) * m_HIO->mWall.m.field_0x50;
local_3c.y = param_2->y;
local_3c.z = param_2->z + cM_ssin(sVar7) * m_HIO->mWall.m.field_0x50;
mGndChk.SetPos(&local_3c);
f32 f31 = dComIfG_Bgsp()->GroundCross(&mGndChk);
if (-G_CM3D_F_INF != f31 && (!cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y))) {
return NULL;
}
if (direction == DIR_NONE) {
f31 = 49.9f;
} else {
f31 = 99.8f;
}
cXyz local_48;
if (direction != DIR_RIGHT) {
local_3c.set(
param_2->x + (f31 * triPla->GetNP()->z) + (triPla->GetNP()->x * 1.25f),
param_2->y,
param_2->z - (f31 * triPla->GetNP()->x) + (triPla->GetNP()->z * 1.25f)
);
local_48.set(local_3c.x - (2.5f * triPla->GetNP()->x), local_3c.y, local_3c.z - (2.5f * triPla->GetNP()->z));
mLinkLinChk.Set(&local_3c, &local_48, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return NULL;
}
cM3dGPla* triPla;
triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
if (sVar7 != cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z)) {
return NULL;
}
}
if (direction != DIR_LEFT) {
local_3c.set(
param_2->x - (f31 * triPla->GetNP()->z) + (triPla->GetNP()->x * 1.25f),
param_2->y,
param_2->z + (f31 * triPla->GetNP()->x) + (triPla->GetNP()->z * 1.25f)
);
local_48.set(local_3c.x - (2.5f * triPla->GetNP()->x), local_3c.y, local_3c.z - (2.5f * triPla->GetNP()->z));
mLinkLinChk.Set(&local_3c, &local_48, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return NULL;
}
cM3dGPla* triPla;
triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
iVar4 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z);
if (sVar7 != (s16)iVar4) {
return NULL;
}
}
if (direction != DIR_NONE) {
if (direction == DIR_LEFT) {
sVar7 = sVar7 - shape_angle.y;
param_2->x += m_HIO->mWall.m.field_0x54 * triPla->GetNP()->z;
param_2->z -= m_HIO->mWall.m.field_0x54 * triPla->GetNP()->x;
} else {
sVar7 = shape_angle.y - sVar7;
param_2->x -= m_HIO->mWall.m.field_0x54 * triPla->GetNP()->z;
param_2->z += m_HIO->mWall.m.field_0x54 * triPla->GetNP()->x;
}
if (sVar7 > 0x2aaa) {
return NULL;
}
} else if (abs((s16)((sVar7 + -0x8000) - (current.angle.y))) > 0x1555) {
return NULL;
}
return triPla;
}
/* 80137608-80137640 .text getWHideBasePos__9daPy_lk_cFP4cXyz */
void daPy_lk_c::getWHideBasePos(cXyz* param_0) {
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);
}
/* 80137640-8013769C .text getWHideNextPos__9daPy_lk_cFP4cXyzP4cXyz */
void daPy_lk_c::getWHideNextPos(cXyz* param_0, cXyz* param_1) {
param_1->set(
param_0->x + cM_ssin(current.angle.y) * m_HIO->mWall.m.field_0x54,
param_0->y,
param_0->z + cM_scos(current.angle.y) * m_HIO->mWall.m.field_0x54
);
}
/* 8013769C-80137754 .text checkWHideBackWall__9daPy_lk_cFP4cXyz */
BOOL daPy_lk_c::checkWHideBackWall(cXyz* param_0) {
if (param_0 == NULL) {
return true;
}
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, this);
if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return true;
}
return false;
}
/* 80137754-80137828 .text checkWHideFrontFloor__9daPy_lk_cFP4cXyz */
BOOL daPy_lk_c::checkWHideFrontFloor(cXyz* param_0) {
cXyz local_10(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);
f32 ground_y = dComIfG_Bgsp()->GroundCross(&mGndChk);
if (checkNoResetFlg0(daPyFlg0_UNK80000000) && current.pos.y > ground_y) {
ground_y = current.pos.y;
}
if (std::fabsf(ground_y - current.pos.y) < 5.0f) {
return TRUE;
} else {
return FALSE;
}
}
/* 80137828-80137914 .text checkWHideModeChange__9daPy_lk_cFP4cXyz */
int daPy_lk_c::checkWHideModeChange(cXyz* param_0) {
if (!checkNoResetFlg0(daPyFlg0_UNK10000)) {
if (!checkWHideFrontFloor(param_0)) {
dComIfGp_setRStatus(dActStts_BLANK_e);
} else if (spActionButton()) {
return 1;
}
} 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 0;
}
/* 80137914-80137A00 .text changeWHideEndProc__9daPy_lk_cFP4cXyz */
int daPy_lk_c::changeWHideEndProc(cXyz* param_0) {
dComIfGp_setDoStatus(dActStts_SIDLE_e);
dComIfGp_setRStatus(dActStts_CROUCH_e);
if ((!doButton() && (!checkNoResetFlg0(daPyFlg0_UNK10000) || !mAcch.ChkRoofHit())) ||
(!checkUpperAnime(LKANM_BCK_REST) && swordTrigger()) ||
!checkWHideBackWall(param_0))
{
mNormalSpeed = 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* param_0, cXyz* param_1) {
BOOL uVar1 = checkModeFlg(ModeFlg_WHIDE) ? TRUE : FALSE;
offNoResetFlg0(daPyFlg0_UNK10000);
commonProcInit(daPyProc_WHIDE_READY_e);
mNormalSpeed = 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) {
mProcVar2.m34D4 = cM_atan2s(param_0->mNormal.x, param_0->mNormal.z);
m370C.x += param_0->mNormal.x * m_HIO->mWall.m.field_0x50;
m370C.z += param_0->mNormal.z * m_HIO->mWall.m.field_0x50;
} else {
mProcVar2.m34D4 = m352C;
m370C.x += cM_ssin(m352C) * m_HIO->mWall.m.field_0x50;
m370C.z += cM_scos(m352C) * m_HIO->mWall.m.field_0x50;
}
if (mEquipItem == daPyItem_NONE_e) {
if (checkEquipAnime()) {
resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
}
setSingleMoveAnime(ANM_WALL, 0.0f, m_HIO->mWall.m.field_0x24, -1, m_HIO->mWall.m.field_0x34);
mProcVar6.m3570 = 1;
} else {
setBlendMoveAnime(m_HIO->mBasic.m.field_0xC);
setAnimeUnequip();
mProcVar6.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() {
if (changeWHideEndProc(NULL)) {
return true;
}
if (mProcVar6.m3570 == 0) {
if (checkNoUpperAnime()) {
setSingleMoveAnime(ANM_WALL, 0.0f, m_HIO->mWall.m.field_0x24, -1, m_HIO->mWall.m.field_0x34);
mProcVar6.m3570 = 1;
}
return true;
}
cLib_addCalc(&current.pos.x, m370C.x, 0.25f, 10.0f, 4.0f);
cLib_addCalc(&current.pos.z, m370C.z, 0.25f, 10.0f, 4.0f);
if (!cLib_addCalcAngleS(&shape_angle.y, mProcVar2.m34D4, 2, 0x2000, 0x800)) {
daPy_matAnm_c::offMabaFlg();
procWHideWait_init();
}
return true;
}
/* 80137CD0-80137DF0 .text procWHideWait_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procWHideWait_init() {
f32 fVar1;
daPy_ANM dVar3;
f32 dVar4;
f32 dVar5;
s16 sVar2;
if (!checkNoResetFlg0(daPyFlg0_UNK10000)) {
dVar3 = ANM_WALL;
sVar2 = m_HIO->mWall.m.field_0x0;
dVar4 = m_HIO->mWall.m.field_0x38;
} else {
dVar3 = ANM_WALLDW;
sVar2 = m_HIO->mWall.m.field_0x2;
dVar4 = m_HIO->mWall.m.field_0x3C;
}
if (mCurProc == daPyProc_WHIDE_READY_e) {
fVar1 = m_HIO->mWall.m.field_0x24;
} else {
fVar1 = sVar2 - 0.001f;
}
dVar5 = fVar1;
commonProcInit(daPyProc_WHIDE_WAIT_e);
mNormalSpeed = 0.0f;
setSingleMoveAnime(dVar3, m_HIO->mWall.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() {
cXyz cStack_3c;
cXyz cStack_48;
getWHideBasePos(&cStack_3c);
if (changeWHideEndProc(&cStack_3c)) {
return true;
}
int iVar1 = checkWHideModeChange(&cStack_3c);
if (iVar1 == 1) {
setSingleMoveAnime(
ANM_WALLDW,
m_HIO->mWall.m.field_0x10,
m_HIO->mWall.m.field_0x28,
m_HIO->mWall.m.field_0x2,
m_HIO->mWall.m.field_0x3C
);
onNoResetFlg0(daPyFlg0_UNK10000);
mAcchCir[2].SetWallH(89.9f);
} else if (iVar1 == -1) {
setSingleMoveAnime(
ANM_WALLDW,
-m_HIO->mWall.m.field_0x10,
m_HIO->mWall.m.field_0x28,
m_HIO->mWall.m.field_0x2,
m_HIO->mWall.m.field_0x3C
);
mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(m_HIO->mWall.m.field_0x2 - 0.001f);
mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame());
offNoResetFlg0(daPyFlg0_UNK10000);
mAcchCir[2].SetWallH(125.0f);
}
if (mStickDistance > 0.05f && -G_CM3D_F_INF != mAcch.GetGroundH() &&
cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y))
{
int direction = getDirectionFromCurrentAngle();
if (direction == DIR_RIGHT || direction == DIR_LEFT) {
if (direction == DIR_RIGHT) {
current.angle.y = shape_angle.y + -0x4000;
mDirection = DIR_RIGHT;
} else {
current.angle.y = shape_angle.y + 0x4000;
mDirection = DIR_LEFT;
}
getWHideNextPos(&cStack_3c, &cStack_48);
BOOL iVar1 = checkWHideBackWall(&cStack_48);
if (iVar1 && (!checkNoResetFlg0(daPyFlg0_UNK10000) || checkWHideFrontFloor(&cStack_48))) {
return procWHideMove_init();
}
if (!iVar1) {
cStack_48 += (cStack_48 - cStack_3c) * 0.25f;
mLinkLinChk.Set(&cStack_3c, &cStack_48, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return procWHidePeep_init();
}
}
}
}
current.angle.y = shape_angle.y;
return true;
}
/* 80138074-801380F0 .text procWHideMove_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procWHideMove_init() {
commonProcInit(daPyProc_WHIDE_MOVE_e);
if (mDirection == DIR_LEFT) {
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() {
if (changeSlideProc()) {
return true;
}
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;
}
cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
s16 sVar8 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z);
f32 fVar2;
if (checkWHideModeChange(&acStack_24) != 0) {
fVar2 = 0.0f;
} else if (mStickDistance > 0.05f && -G_CM3D_F_INF != mAcch.GetGroundH() &&
cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y))
{
int direction = getDirectionFromCurrentAngle();
if (direction == DIR_BACKWARD) {
current.angle.y -= -0x8000;
mNormalSpeed *= 0.5f;
if (mDirection == DIR_LEFT) {
mDirection = DIR_RIGHT;
} else {
mDirection = DIR_LEFT;
}
setBlendWHideMoveAnime(2.0f);
}
if (direction == DIR_FORWARD || direction == DIR_BACKWARD) {
fVar2 = m_HIO->mMove.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)) {
mNormalSpeed = 0.0f;
return procWHideWait_init();
}
cXyz cStack_3c;
triPla = getWHideModePolygon(&acStack_24, &cStack_30, &cStack_3c, mDirection);
if (triPla != NULL) {
return procWHideReady_init(triPla, &cStack_3c);
}
if (std::fabsf(mNormalSpeed) <= 0.001f) {
return procWHideWait_init();
}
if (mAcch.GetGroundH() == -G_CM3D_F_INF || !cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y) ||
!checkWHideBackWall(&cStack_30))
{
mNormalSpeed = 0.0f;
return procWHideWait_init();
}
cXyz cStack_48;
if (sVar8 != shape_angle.y && getWHideModePolygon(NULL, NULL, &cStack_48, mDirection) != NULL) {
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 * m_HIO->mWall.m.field_0x50 * cM_ssin(shape_angle.y);
current.pos.z -= 0.8f * m_HIO->mWall.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() {
commonProcInit(daPyProc_WHIDE_PEEP_e);
f32 fVar1;
f32 fVar3;
f32 fVar2;
s16 sVar4;
daPy_ANM anm;
if (!checkNoResetFlg0(daPyFlg0_UNK10000)) {
fVar1 = m_HIO->mWall.m.field_0x1C;
fVar3 = m_HIO->mWall.m.field_0x48;
fVar2 = m_HIO->mWall.m.field_0x2C;
sVar4 = m_HIO->mWall.m.field_0x4;
if (mDirection == DIR_LEFT) {
anm = ANM_WALLPR;
} else {
anm = ANM_WALLPL;
}
} else {
fVar1 = m_HIO->mWall.m.field_0x20;
fVar3 = m_HIO->mWall.m.field_0x4C;
fVar2 = m_HIO->mWall.m.field_0x30;
sVar4 = m_HIO->mWall.m.field_0x6;
if (mDirection == DIR_LEFT) {
anm = ANM_WALLPRDW;
} else {
anm = ANM_WALLPLDW;
}
}
setSingleMoveAnime(anm, fVar1, fVar2, sVar4, fVar3);
dComIfGp_setPlayerStatus0(0, daPyStts0_UNK1_e);
return true;
}
/* 801385EC-801387A4 .text procWHidePeep__9daPy_lk_cFv */
BOOL daPy_lk_c::procWHidePeep() {
cXyz cStack_38;
getWHideBasePos(&cStack_38);
if (changeWHideEndProc(&cStack_38)) {
return true;
}
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 (mDirection == DIR_LEFT) {
dComIfGp_setPlayerStatus0(0, daPyStts0_UNK40_e);
} else {
dComIfGp_setPlayerStatus0(0, daPyStts0_UNK20_e);
}
if (!checkNoResetFlg0(daPyFlg0_UNK10000)) {
dVar3 = m_HIO->mWall.m.field_0x1C;
} else {
dVar3 = m_HIO->mWall.m.field_0x20;
}
}
if (checkWHideModeChange(&cStack_38) != 0) {
if (dVar3 > 0.0f) {
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3);
}
} else if (mStickDistance > 0.05f) {
int direction = getDirectionFromCurrentAngle();
if ((direction != DIR_FORWARD && dVar3 > 0.0f) || (direction == 0 && dVar3 < 0.0f)) {
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3);
}
} else if (dVar3 > 0.0f) {
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-dVar3);
}
return true;
}