mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 13:13:29 -04:00
ab5659b201
* d_a_player_main cleanup and some demo matches * Add unions for player_main procvars * Make d_a_player_main fields private
471 lines
15 KiB
C++
471 lines
15 KiB
C++
/**
|
|
* d_a_player_climb.inc
|
|
*
|
|
* Code relating to climbing on walls (like vines).
|
|
*
|
|
* 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_main.h"
|
|
#include "d/actor/d_a_player_HIO.h"
|
|
#include "d/d_s_play.h"
|
|
|
|
/* 80135B50-80135B74 .text getClimbMoveAnmSpeed__9daPy_lk_cFv */
|
|
f32 daPy_lk_c::getClimbMoveAnmSpeed() {
|
|
return getAnmSpeedStickRate(m_HIO->mLadder.m.field_0x34, m_HIO->mLadder.m.field_0x30);
|
|
}
|
|
|
|
/* 80135B74-80135DA0 .text setClimbShapeOffset__9daPy_lk_cFv */
|
|
void daPy_lk_c::setClimbShapeOffset() {
|
|
cXyz local_40;
|
|
cXyz local_4c;
|
|
cXyz local_58;
|
|
cXyz local_64;
|
|
|
|
s16 uVar3 = m34EC;
|
|
s32 uVar4 = shape_angle.y;
|
|
uVar3 += uVar4;
|
|
f32 fVar4 = cM_ssin(uVar3);
|
|
f32 fVar3 = cM_scos(uVar3);
|
|
f32 fVar2 = cM_ssin((s32)uVar4);
|
|
local_58.x = current.pos.x + 20.5f * fVar2;
|
|
local_58.y = current.pos.y - 62.5f;
|
|
f32 fVar1 = cM_scos(uVar4);
|
|
local_58.z = current.pos.z + 20.5f * fVar1;
|
|
local_40.set(local_58.x - fVar4 * 50.0f, local_58.y, local_58.z - fVar3 * 50.0f);
|
|
local_4c.set(local_58.x + fVar4 * 50.0f, local_58.y, local_58.z + fVar3 * 50.0f);
|
|
f32 dVar10 = fVar3 * 20.0f;
|
|
f32 dVar9 = fVar4 * -20.0f;
|
|
local_40.x += dVar10;
|
|
local_40.z += dVar9;
|
|
local_4c.x += dVar10;
|
|
local_4c.z += dVar9;
|
|
mLinkLinChk.Set(&local_40, &local_4c, this);
|
|
if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
|
|
local_64 = mLinkLinChk.GetCross();
|
|
} else {
|
|
m34EC = 0;
|
|
return;
|
|
}
|
|
local_40.x -= dVar10 * 2.0f;
|
|
local_40.z -= dVar9 * 2.0f;
|
|
local_4c.x -= dVar10 * 2.0f;
|
|
local_4c.z -= dVar9 * 2.0f;
|
|
mLinkLinChk.Set(&local_40, &local_4c, this);
|
|
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
|
|
m34EC = 0;
|
|
} else {
|
|
local_64 -= mLinkLinChk.GetCross();
|
|
m34EC = (cM_atan2s(local_64.x, local_64.z) - 0x4000 - shape_angle.y);
|
|
}
|
|
}
|
|
|
|
/* 80135DA0-80135E14 .text getClimbDirectionFromAngle__9daPy_lk_cFv */
|
|
int daPy_lk_c::getClimbDirectionFromAngle() {
|
|
s16 angle = m34E8 - shape_angle.y;
|
|
if (abs(angle) > 0x7000) {
|
|
return DIR_BACKWARD;
|
|
} else if (angle >= 0x1000) {
|
|
return DIR_LEFT;
|
|
} else if (angle <= -0x1000) {
|
|
return DIR_RIGHT;
|
|
} else {
|
|
return DIR_FORWARD;
|
|
}
|
|
}
|
|
|
|
/* 80135E14-80135E98 .text changeClimbMoveProc__9daPy_lk_cFi */
|
|
void daPy_lk_c::changeClimbMoveProc(int param_0) {
|
|
s16 sVar1;
|
|
|
|
sVar1 = m34EC;
|
|
if (mStickDistance > 0.05f) {
|
|
mDirection = getClimbDirectionFromAngle();
|
|
if (mDirection == DIR_FORWARD || mDirection == DIR_BACKWARD) {
|
|
procClimbMoveUpDown_init(param_0);
|
|
} else {
|
|
procClimbMoveSide_init(param_0);
|
|
}
|
|
}
|
|
m34EC = sVar1;
|
|
}
|
|
|
|
/* 80135E98-80136154 .text setMoveBGCorrectClimb__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::setMoveBGCorrectClimb() {
|
|
if (dComIfG_Bgsp()->ChkPolySafe(mPolyInfo) && dComIfG_Bgsp()->ChkMoveBG(mPolyInfo)) {
|
|
dComIfG_Bgsp()->MoveBgTransPos(mPolyInfo, true, ¤t.pos, ¤t.angle, &shape_angle);
|
|
}
|
|
if (checkNoResetFlg1(daPyFlg1_VINE_CATCH)) {
|
|
return procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
}
|
|
|
|
if (mCurProc == daPyProc_CLIMB_DOWN_START_e && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > 0.01f)) {
|
|
return 0;
|
|
}
|
|
cXyz local_1c;
|
|
cXyz local_28;
|
|
local_1c.set(current.pos.x, current.pos.y + 30.0f, current.pos.z);
|
|
local_28.set(
|
|
current.pos.x + cM_ssin(shape_angle.y) * 80.0f, local_1c.y, current.pos.z + cM_scos(shape_angle.y) * 80.0f
|
|
);
|
|
mLinkLinChk.Set(&local_1c, &local_28, this);
|
|
if ((!dComIfG_Bgsp()->LineCross(&mLinkLinChk) || dComIfG_Bgsp()->GetWallCode(mLinkLinChk) != 1 ||
|
|
std::fabsf(dComIfG_Bgsp()->GetTriPla(mLinkLinChk)->GetNP()->y) > 0.05f) ||
|
|
((mCurProc == daPyProc_CLIMB_MOVE_UP_DOWN_e || mCurProc == daPyProc_CLIMB_MOVE_SIDE_e) &&
|
|
current.pos.y - 15.0f < mAcch.GetGroundH()))
|
|
{
|
|
return procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
}
|
|
|
|
cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
|
|
s16 uVar6 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z);
|
|
if (cLib_distanceAngleS(uVar6, shape_angle.y) <= 0x549f) {
|
|
return procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
}
|
|
|
|
current.pos.x = mLinkLinChk.GetCrossP()->x + 20.5f * cM_ssin(uVar6);
|
|
current.pos.z = mLinkLinChk.GetCrossP()->z + 20.5f * cM_scos(uVar6);
|
|
s16 sVar1 = shape_angle.y;
|
|
shape_angle.y = uVar6 + 0x8000;
|
|
current.angle.y += (s16)(shape_angle.y - sVar1);
|
|
m34EC += (s16)(sVar1 - shape_angle.y);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 80136154-80136200 .text checkBgCorrectClimbMove__9daPy_lk_cFP4cXyzP4cXyz */
|
|
void daPy_lk_c::checkBgCorrectClimbMove(cXyz* i_startPos, cXyz* i_endPos) {
|
|
mLinkLinChk.Set(i_startPos, i_endPos, this);
|
|
if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
|
|
cM3dGPla* tri_plane = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
|
|
if (cLib_distanceAngleS(cM_atan2s(tri_plane->GetNP()->x, tri_plane->GetNP()->z), shape_angle.y) < 0x549F) {
|
|
current.pos += mLinkLinChk.GetCross() - *i_endPos;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80136200-80136588 .text checkBgClimbMove__9daPy_lk_cFv */
|
|
void daPy_lk_c::checkBgClimbMove() {
|
|
cXyz local_5c;
|
|
cXyz local_68;
|
|
|
|
f32 dVar7 = cM_ssin(shape_angle.y);
|
|
f32 dVar6 = cM_scos(shape_angle.y);
|
|
f32 dVar5 = 30.0f * dVar6;
|
|
f32 dVar4 = -30.0f * dVar7;
|
|
local_5c.set(current.pos.x + dVar5, current.pos.y, current.pos.z + dVar4);
|
|
checkBgCorrectClimbMove(¤t.pos, &local_5c);
|
|
|
|
local_5c.set(current.pos.x - dVar5, current.pos.y, current.pos.z - dVar4);
|
|
checkBgCorrectClimbMove(¤t.pos, &local_5c);
|
|
|
|
local_68.set(current.pos.x, current.pos.y + 125.0f, current.pos.z);
|
|
local_5c.set(local_68.x + dVar5, local_68.y, local_68.z + dVar4);
|
|
checkBgCorrectClimbMove(&local_68, &local_5c);
|
|
|
|
local_5c.set(local_68.x - dVar5, local_68.y, local_68.z - dVar4);
|
|
checkBgCorrectClimbMove(&local_68, &local_5c);
|
|
|
|
local_5c.set(current.pos.x + dVar5, current.pos.y, current.pos.z + dVar4);
|
|
mRoofChk.SetPos(local_5c);
|
|
f32 dVar3 = dComIfG_Bgsp()->RoofChk(&mRoofChk);
|
|
if (dVar3 - 125.0f < current.pos.y) {
|
|
current.pos.y = dVar3 - 125.0f;
|
|
}
|
|
local_5c.set(current.pos.x - dVar5, current.pos.y, current.pos.z - dVar4);
|
|
mRoofChk.SetPos(local_5c);
|
|
dVar3 = dComIfG_Bgsp()->RoofChk(&mRoofChk);
|
|
if (dVar3 - 125.0f < current.pos.y) {
|
|
current.pos.y = dVar3 - 125.0f;
|
|
}
|
|
local_5c.set(
|
|
local_68.x + (100.0f * dVar7),
|
|
local_68.y,
|
|
local_68.z + (100.0f * dVar6)
|
|
);
|
|
mLinkLinChk.Set(&local_68, &local_5c, this);
|
|
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
|
|
local_5c.set(current.pos.x + (25.0f * dVar7), local_68.y + 30.0f, current.pos.z + (25.0f * dVar6));
|
|
mGndChk.SetPos(&local_5c);
|
|
dVar3 = dComIfG_Bgsp()->GroundCross(&mGndChk);
|
|
if (dVar3 != -G_CM3D_F_INF && cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y) &&
|
|
dVar3 >= local_68.y - 30.0f)
|
|
{
|
|
current.pos.x = local_5c.x - (3.0f * dVar7);
|
|
current.pos.y = dVar3;
|
|
current.pos.z = local_5c.z - (3.0f * dVar6);
|
|
procHangClimb_init(m_HIO->mWallCatch.m.field_0x2C);
|
|
} else {
|
|
procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
}
|
|
} else {
|
|
setClimbShapeOffset();
|
|
}
|
|
}
|
|
|
|
/* 80136588-801365F4 .text procClimbUpStart_init_sub__9daPy_lk_cFv */
|
|
void daPy_lk_c::procClimbUpStart_init_sub() {
|
|
setSingleMoveAnime(ANM_LADDERUPST, m_HIO->mLadder.m.field_0x4, 0.0f, -1, m_HIO->mLadder.m.field_0x8);
|
|
mProcVar6.m3570 = 1;
|
|
m34C2 = 4;
|
|
dComIfGp_setPlayerStatus1(0, daPyStts1_UNK10000_e);
|
|
}
|
|
|
|
/* 801365F4-80136708 .text procClimbUpStart_init__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::procClimbUpStart_init() {
|
|
commonProcInit(daPyProc_CLIMB_UP_START_e);
|
|
gravity = 0.0f;
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
speedF = 0.0f;
|
|
if (mEquipItem == daPyItem_NONE_e) {
|
|
if (checkEquipAnime()) {
|
|
resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
|
|
}
|
|
procClimbUpStart_init_sub();
|
|
} else {
|
|
setBlendMoveAnime(m_HIO->mBasic.m.field_0xC);
|
|
setAnimeUnequip();
|
|
mProcVar6.m3570 = 0;
|
|
m3598 = 0.0f;
|
|
}
|
|
f32 fVar2 = cM_ssin(m352C);
|
|
f32 fVar1 = cM_scos(m352C);
|
|
current.pos.x = m3724.x + 25.0f * fVar2;
|
|
current.pos.z = m3724.z + 25.0f * fVar1;
|
|
shape_angle.y = m352C + 0x8000;
|
|
current.angle.y = shape_angle.y;
|
|
mProcVar2.m34D4 = 0;
|
|
return true;
|
|
}
|
|
|
|
/* 80136708-8013680C .text procClimbUpStart__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::procClimbUpStart() {
|
|
if (setMoveBGCorrectClimb()) {
|
|
return true;
|
|
}
|
|
|
|
if (mProcVar6.m3570 == 0) {
|
|
if (checkNoUpperAnime()) {
|
|
procLadderUpStart_init_sub();
|
|
}
|
|
} else {
|
|
J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e];
|
|
m34C2 = 5;
|
|
if (frameCtrl.getRate() < 0.01f) {
|
|
dComIfGp_setDoStatus(dActStts_LET_GO_e);
|
|
if (mProcVar2.m34D4 == 0) {
|
|
setLadderFootSe();
|
|
mProcVar2.m34D4 = 1;
|
|
}
|
|
if (doTrigger()) {
|
|
m34C2 = 0;
|
|
procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
} else {
|
|
changeClimbMoveProc(1);
|
|
}
|
|
} else if (frameCtrl.checkPass(9.0f)) {
|
|
setLadderFootSe();
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 8013680C-8013693C .text procClimbDownStart_init__9daPy_lk_cFs */
|
|
BOOL daPy_lk_c::procClimbDownStart_init(s16 param_0) {
|
|
commonProcInit(daPyProc_CLIMB_DOWN_START_e);
|
|
gravity = 0.0f;
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
speedF = 0.0f;
|
|
deleteEquipItem(TRUE);
|
|
setSingleMoveAnime(ANM_LADDERDWST, m_HIO->mLadder.m.field_0x14, 30.0f, -1, 3.0f);
|
|
dComIfGp_setPlayerStatus1(0, daPyStts1_UNK10000_e);
|
|
setOldRootQuaternion(0, -0x8000, 0);
|
|
shape_angle.y = param_0 + 0x8000;
|
|
current.angle.y = shape_angle.y;
|
|
current.pos.x -= (35.0f + DEMO_SELECT(REG4_F(11), 0.0f)) * cM_ssin(param_0);
|
|
current.pos.y -= (20.0f + DEMO_SELECT(REG4_F(10), 0.0f));
|
|
current.pos.z -= (35.0f + DEMO_SELECT(REG4_F(11), 0.0f)) * cM_scos(param_0);
|
|
m35E0 = 43.67353f;
|
|
mProcVar6.m3570 = 1;
|
|
return true;
|
|
}
|
|
|
|
/* 8013693C-80136A34 .text procClimbDownStart__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::procClimbDownStart() {
|
|
if (setMoveBGCorrectClimb()) {
|
|
return true;
|
|
}
|
|
|
|
J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e];
|
|
m34C2 = 5;
|
|
if (frameCtrl.getRate() < 0.01f) {
|
|
dComIfGp_setDoStatus(dActStts_LET_GO_e);
|
|
if (doTrigger()) {
|
|
m34C2 = 0;
|
|
procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
} else {
|
|
changeClimbMoveProc(1);
|
|
}
|
|
} else if (frameCtrl.checkPass(26.0f) || frameCtrl.checkPass(36.0f) || frameCtrl.checkPass(43.0f)) {
|
|
setLadderFootSe();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 80136A34-80136B80 .text procClimbMoveUpDown_init__9daPy_lk_cFi */
|
|
BOOL daPy_lk_c::procClimbMoveUpDown_init(int param_0) {
|
|
daPy_ANM dVar2;
|
|
float dVar3;
|
|
|
|
dVar3 = getLadderMoveAnmSpeed();
|
|
commonProcInit(daPyProc_CLIMB_MOVE_UP_DOWN_e);
|
|
current.angle.y = shape_angle.y;
|
|
if (mDirection == DIR_BACKWARD) {
|
|
dVar3 *= -1.0f;
|
|
}
|
|
if (param_0 != 0) {
|
|
mProcVar6.m3570 = 0;
|
|
if (mDirection == DIR_FORWARD) {
|
|
dVar2 = ANM_LADDERLTOR;
|
|
} else {
|
|
dVar2 = ANM_LADDERRTOL;
|
|
}
|
|
} else {
|
|
mProcVar6.m3570 = 1;
|
|
if (mDirection == DIR_FORWARD) {
|
|
dVar2 = ANM_LADDERRTOL;
|
|
} else {
|
|
dVar2 = ANM_LADDERLTOR;
|
|
}
|
|
}
|
|
setSingleMoveAnime(dVar2, dVar3, 0.0f, -1, m_HIO->mLadder.m.field_0x2C);
|
|
if (mDirection == DIR_FORWARD) {
|
|
setTextureAnime(10, 0);
|
|
} else {
|
|
setTextureAnime(11, 0);
|
|
}
|
|
m34C2 = 7;
|
|
gravity = 0.0f;
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
speedF = 0.0f;
|
|
mProcVar0.m34D0 = 1;
|
|
dComIfGp_setPlayerStatus1(0, daPyStts1_UNK10000_e);
|
|
return true;
|
|
}
|
|
|
|
/* 80136B80-80136C7C .text procClimbMoveUpDown__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::procClimbMoveUpDown() {
|
|
if (setMoveBGCorrectClimb()) {
|
|
return true;
|
|
}
|
|
|
|
m34C2 = 5;
|
|
dComIfGp_setDoStatus(dActStts_LET_GO_e);
|
|
if (doTrigger()) {
|
|
m34C2 = 0;
|
|
procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
} else if (std::fabsf(mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) < 0.01f) {
|
|
if (mProcVar0.m34D0 != 0) {
|
|
mProcVar0.m34D0 = 0;
|
|
setLadderFootSe();
|
|
} else {
|
|
changeClimbMoveProc(mProcVar6.m3570);
|
|
}
|
|
} else {
|
|
f32 dVar2 = getLadderMoveAnmSpeed();
|
|
if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0f) {
|
|
dVar2 *= -1.0f;
|
|
}
|
|
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(dVar2);
|
|
checkBgClimbMove();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 80136C7C-80136E28 .text procClimbMoveSide_init__9daPy_lk_cFi */
|
|
BOOL daPy_lk_c::procClimbMoveSide_init(int param_0) {
|
|
daPy_ANM dVar2;
|
|
float dVar4;
|
|
|
|
dVar4 = getClimbMoveAnmSpeed();
|
|
commonProcInit(daPyProc_CLIMB_MOVE_SIDE_e);
|
|
mProcVar2.m34D4 = m34E8 - shape_angle.y;
|
|
m34C2 = 7;
|
|
mProcVar6.m3570 = param_0;
|
|
if (param_0 != 0) {
|
|
dVar2 = ANM_FCLIMBSLIDELUP;
|
|
if (mDirection == DIR_RIGHT) {
|
|
dVar4 *= -1.0f;
|
|
}
|
|
} else {
|
|
dVar2 = ANM_FCLIMBSLIDERUP;
|
|
if (mDirection == DIR_LEFT) {
|
|
dVar4 *= -1.0f;
|
|
}
|
|
}
|
|
setSingleMoveAnime(
|
|
dVar2,
|
|
dVar4,
|
|
m_HIO->mLadder.m.field_0x38,
|
|
m_HIO->mLadder.m.field_0x0,
|
|
m_HIO->mLadder.m.field_0x3C
|
|
);
|
|
gravity = 0.0f;
|
|
speed.y = 0.0f;
|
|
mNormalSpeed = 0.0f;
|
|
speedF = 0.0f;
|
|
mProcVar0.m34D0 = 1;
|
|
dComIfGp_setPlayerStatus1(0, daPyStts1_UNK10000_e);
|
|
cXyz local_38 = mRightHandPos - mLeftHandPos;
|
|
dVar4 = local_38.absXZ();
|
|
m35A0 = dVar4;
|
|
return true;
|
|
}
|
|
|
|
/* 80136E28-8013707C .text procClimbMoveSide__9daPy_lk_cFv */
|
|
BOOL daPy_lk_c::procClimbMoveSide() {
|
|
if (setMoveBGCorrectClimb()) {
|
|
return true;
|
|
}
|
|
|
|
m34C2 = 5;
|
|
dComIfGp_setDoStatus(dActStts_LET_GO_e);
|
|
if (doTrigger()) {
|
|
m34C2 = 0;
|
|
procFall_init(1, m_HIO->mWallCatch.m.field_0x54);
|
|
} else if (std::fabsf(mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) < 0.01f) {
|
|
if (mProcVar0.m34D0 != 0) {
|
|
mProcVar0.m34D0 = 0;
|
|
setLadderFootSe();
|
|
} else {
|
|
changeClimbMoveProc(mProcVar6.m3570);
|
|
}
|
|
} else {
|
|
f32 dVar5 = getClimbMoveAnmSpeed();
|
|
if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.0f) {
|
|
dVar5 *= -1.0f;
|
|
}
|
|
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(dVar5);
|
|
cXyz local_28 = mRightHandPos - mLeftHandPos;
|
|
dVar5 = local_28.absXZ();
|
|
f32 fVar1 = std::fabsf(dVar5 - m35A0) * m_HIO->mLadder.m.field_0x40;
|
|
f32 fVar2 = fVar1 * cM_ssin(mProcVar2.m34D4);
|
|
current.pos.y += fVar1 * cM_scos(mProcVar2.m34D4);
|
|
current.pos.x += fVar2 * cM_scos(shape_angle.y);
|
|
current.pos.z -= fVar2 * cM_ssin(shape_angle.y);
|
|
m35A0 = dVar5;
|
|
checkBgClimbMove();
|
|
}
|
|
return true;
|
|
}
|