diff options
| author | Mattias Blum <142374929+mattias-blum@users.noreply.github.com> | 2025-03-29 18:55:06 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-29 18:55:06 -0400 |
| commit | 2376acb22470a85e7ea87527d49df46b64d6fd5e (patch) | |
| tree | 0bd590bdaf647c18aee4fb9e07295adb6374b4d9 /src | |
| parent | b9c1eed694ed7fe2e5c4ac54d38fe982ef4426b0 (diff) | |
d_a_player_swim near complete (#711)
* initial progress
* more progress
* added `dComIfGp_clearItemTimeCount` inline
* more progress
* more progress
* more progress
* more progress
* more progress
* more progress, all code matching except for `setSwimMoveAnime`
* resolving symbols, forgot to mention `changeSwimOutProc` is not matching as well
* PR changes made, only `setSwimMoveAnime` nonmatching
* fixed reference to old member name for `mItemTimeMax`
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/actor/d_a_player_main.cpp | 10 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_swim.inc | 573 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_sword.inc | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_tact.inc | 2 | ||||
| -rw-r--r-- | src/d/d_com_inf_game.cpp | 2 |
5 files changed, 555 insertions, 34 deletions
diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index efd95fc2..9c7769ce 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1116,7 +1116,7 @@ void daPy_lk_c::setActorPointer() { } /* 80108564-80108634 .text setTalkStatus__9daPy_lk_cFv */ -void daPy_lk_c::setTalkStatus() { +BOOL daPy_lk_c::setTalkStatus() { /* Nonmatching */ } @@ -1217,7 +1217,7 @@ void daPy_lk_c::setSpeedAndAngleAtn() { /* 8010AA90-8010AB84 .text setSpeedAndAngleAtnBack__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleAtnBack() { f32 f1; - if (m35B0 > 0.05f) { + if (mStickDistance > 0.05f) { if (getDirectionFromCurrentAngle() == 1) { current.angle.y += 0x8000; mVelocity *= -1.0f; @@ -1229,7 +1229,7 @@ void daPy_lk_c::setSpeedAndAngleAtnBack() { daPy_HIO_atnMoveB_c0::m.field_0x0, daPy_HIO_atnMoveB_c0::m.field_0x2 ); - f1 = (daPy_HIO_atnMoveB_c0::m.field_0x8 * m35B0) * cM_scos(current.angle.y - origAngleY); + f1 = (daPy_HIO_atnMoveB_c0::m.field_0x8 * mStickDistance) * cM_scos(current.angle.y - origAngleY); } else { f1 = 0.0f; } @@ -1728,7 +1728,7 @@ void daPy_lk_c::setFrontWallType() { } /* 8010F9AC-8010FEC4 .text changeFrontWallTypeProc__9daPy_lk_cFv */ -void daPy_lk_c::changeFrontWallTypeProc() { +BOOL daPy_lk_c::changeFrontWallTypeProc() { /* Nonmatching */ } @@ -3348,7 +3348,7 @@ BOOL daPy_lk_c::execute() { cXyz oldPos = old.pos; m34DE = shape_angle.y; - m35B4 = m35B0; + m35B4 = mStickDistance; m34EA = m34DC; dComIfGp_setDoStatus(0); diff --git a/src/d/actor/d_a_player_swim.inc b/src/d/actor/d_a_player_swim.inc index fd08d855..65c911fa 100644 --- a/src/d/actor/d_a_player_swim.inc +++ b/src/d/actor/d_a_player_swim.inc @@ -11,85 +11,606 @@ */ #include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_player_HIO.h" +#include "f_op/f_op_kankyo_mng.h" + +daPy_HIO_swim_c0 l_HIO_swim_c0; +daPy_HIO_wallCatch_c0 l_HIO_wallCatch_c0; +daPy_HIO_turn_c0 l_HIO_turn_c0; /* 8013CC64-8013CF2C .text setSpeedAndAngleSwim__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleSwim() { - /* Nonmatching */ + float fVar1; + short oldAngleY; + + BOOL bVar3 = false; + + if (mCurProc != daPyProc_SWIM_UP_e) { + if (!mpAttention->Lockon()) { + if (mStickDistance > 0.05f) { + oldAngleY = shape_angle.y; + + if (getDirectionFromShapeAngle() == 1) { + mSwimTailEcallBack[0].onEnd(); + mSwimTailEcallBack[1].onEnd(); + + shape_angle.y = m34E8; + current.angle.y = m34E8; + } + else { + cLib_addCalcAngleS(&shape_angle.y, m34E8, l_HIO_swim_c0.m.field_0x8, l_HIO_swim_c0.m.field_0x4, l_HIO_swim_c0.m.field_0x6); + } + + fVar1 = mStickDistance * 3.0f * cM_scos(shape_angle.y - oldAngleY); + } + else { + fVar1 = 0.0f; + } + + cLib_addCalcAngleS(¤t.angle.y, shape_angle.y, 2, 0x2000, 0x1000); + + mMaxNormalSpeed = l_HIO_swim_c0.m.field_0xC; + } + else { + setShapeAngleToAtnActor(); + + if (mStickDistance > 0.05f) { + oldAngleY = current.angle.y; + + if (getDirectionFromCurrentAngle() == 1) { + mSwimTailEcallBack[0].onEnd(); + mSwimTailEcallBack[1].onEnd(); + + fVar1 = 0.0f; + bVar3 = TRUE; + } + else { + cLib_addCalcAngleS(¤t.angle.y, m34E8, l_HIO_swim_c0.m.field_0x8, l_HIO_swim_c0.m.field_0x4, l_HIO_swim_c0.m.field_0x6); + fVar1 = mStickDistance * 3.0f * cM_scos(current.angle.y - oldAngleY); + } + } + else { + fVar1 = 0.0f; + } + + mMaxNormalSpeed = ((cM_scos(current.angle.y - shape_angle.y) + 1.0f) * 0.25f + 0.5f) * l_HIO_swim_c0.m.field_0xC; + } + } + else { + fVar1 = 0.0f; + mMaxNormalSpeed = l_HIO_swim_c0.m.field_0xC; + } + + setNormalSpeedF(fVar1, l_HIO_swim_c0.m.field_0x18, l_HIO_swim_c0.m.field_0x1C, l_HIO_swim_c0.m.field_0x20); + + if (bVar3 && mVelocity < 5.0f) { + current.angle.y = m34E8; + mVelocity = 0.0f; + } + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK10_e)) { + mVelocity = 0.0f; + } } /* 8013CF2C-8013CFC0 .text checkNextModeSwim__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextModeSwim() { - /* Nonmatching */ + BOOL res; + + if (mpAttnEntryA && mpAttnEntryA->mType == 7) { //Action_Ship? fopAc_Attn_ACTION_SHIP_e is 0x80 so not sure why Ghidra is saying this + dComIfGp_setDoStatus(0x1C); // Show `Get In` on the A Button? Ghidra says `GetInShip` is the symbol + if (doTrigger()) { + return procShipReady_init(); + } + } + + if (setTalkStatus() && doTrigger()) { + res = fopAcM_orderTalkEvent(this, mpAttnActorA); + } + else { + res = FALSE; + } + return res; } /* 8013CFC0-8013D1B0 .text changeSwimProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimProc() { - /* Nonmatching */ +BOOL daPy_lk_c::changeSwimProc() { + float fVar1; + BOOL res; + cXyz local_18; + + if (checkNoResetFlg0(daPyFlg0_UNK80) && !checkModeFlg(ModeFlg_IN_SHIP | ModeFlg_SWIM) && !checkNoControll() && mDemo.getDemoMode() != daPy_demo_c::DEMO_UNK11_e && m35D0 - current.pos.y > l_HIO_swim_c0.m.field_0x24) { + dComIfGp_setItemTimeCount(900); + dComIfGp_setItemTimeMax(1); + g_dComIfG_gameInfo.play.field_0x48c8 = 900; // Some inline? Debug maps make no mention of this function but perhaps it was used earlier? + + offNoResetFlg0(daPyFlg0_EQUIP_HEAVY_BOOTS); + offNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD); + + endFlameDamageEmitter(); + + offNoResetFlg0(daPyFlg0_UNK100); + + mMaxNormalSpeed = l_HIO_swim_c0.m.field_0xC; + mVelocity *= 0.75f; + + if (mVelocity >= mMaxNormalSpeed) { + mVelocity = mMaxNormalSpeed; + } + + m35C4 = 0.0f; + + setSwimTimerStartStop(); + + if (checkModeFlg(ModeFlg_MIDAIR)) { + current.pos.y += l_HIO_swim_c0.m.field_0x24; + speed.y = mOldSpeed.y * l_HIO_swim_c0.m.field_0x10; + + if (speed.y < l_HIO_swim_c0.m.field_0x14) { + speed.y = l_HIO_swim_c0.m.field_0x14; + } + else if (speed.y > 0.0f) { + speed.y = 0.0f; + } + + float oldSpeedY = mOldSpeed.y * mOldSpeed.y * 0.0004f + 0.2f; + + if (oldSpeedY > 1.0f) { + oldSpeedY = 1.0f; + } + + local_18.x = current.pos.x; + local_18.y = m35D0; + local_18.z = current.pos.z; + fopKyM_createWpillar(&local_18, 1.0f, oldSpeedY, 0); + seStartOnlyReverb(JA_SE_LK_INTO_WATER); + res = procSwimWait_init(0); + } + else { + res = procSwimUp_init(0); + } + } + else { + res = 0; + } + return res; } /* 8013D1B0-8013D2AC .text changeSwimUpProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimUpProc() { - /* Nonmatching */ +BOOL daPy_lk_c::changeSwimUpProc() { + if (speed.y < l_HIO_swim_c0.m.field_0x68) { + speed.y += l_HIO_swim_c0.m.field_0x64; + if (speed.y > l_HIO_swim_c0.m.field_0x68) { + speed.y = l_HIO_swim_c0.m.field_0x68; + } + if (speed.y > 0.0f && mEquipItem != daPyItem_NONE_e) { + deleteEquipItem(TRUE); + } + } + if (m35D0 - current.pos.y < 40.1f + l_HIO_swim_c0.m.field_0x28 && speed.y >= 0.0f) { + if (mCurProc == daPyProc_DEMO_DEAD_e) { + onNoResetFlg0(daPyFlg0_UNK100); + current.pos.y = m35D0; + return TRUE; + } + return procSwimUp_init(1); + } + return FALSE; } /* 8013D2AC-8013D314 .text swimOutAfter__9daPy_lk_cFi */ -void daPy_lk_c::swimOutAfter(int) { - /* Nonmatching */ +void daPy_lk_c::swimOutAfter(int param_1) { + onNoResetFlg0(daPyFlg0_UNK100); + m35C4 = 0.0f; + if (param_1) { + seStartOnlyReverb(JA_SE_LK_OUTOF_WATER); + } + dComIfGp_clearItemTimeCount(); + dComIfGp_setItemTimeMax(0); + resetPriTextureAnime(); } /* 8013D314-8013D354 .text checkSwimFallCheck__9daPy_lk_cFv */ BOOL daPy_lk_c::checkSwimFallCheck() { - /* Nonmatching */ + if (!checkNoResetFlg0(daPyFlg0_UNK80) || current.pos.y > m35D0 + 30.1f && !dPa_control_c::isStatus(1)) { + return TRUE; + } + return FALSE; } /* 8013D354-8013D530 .text changeSwimOutProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimOutProc() { - /* Nonmatching */ +BOOL daPy_lk_c::changeSwimOutProc() { + cM3dGPla* pcVar1; + + if (mAcch.GetGroundH() != -1e+09f && dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) { + pcVar1 = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); + } + else { + pcVar1 = NULL; + } + + if (checkSwimFallCheck()) { + if (mCurProc == daPyProc_SWIM_MOVE_e && m34B8) { + current.pos.y += m35C4; + } + + swimOutAfter(1); + + return procFall_init(1, l_HIO_wallCatch_c0.m.field_0x54); + } + else { + if (!checkNoResetFlg0(daPyFlg0_UNK80) || pcVar1 && pcVar1->mNormal.y >= 0.5f && m35D0 - mAcch.GetGroundH() < l_HIO_swim_c0.m.field_0x24 - 5.0f) { + current.pos.y = m35D0; + + if (mCurProc == daPyProc_SWIM_MOVE_e && m34B8) { + current.pos.y += m35C4; + } + + swimOutAfter(1); + + return checkNextMode(0); + } + else { + if (dComIfGp_getItemTimeCount() <= 0 && startRestartRoom(5, 0xC9, -1.0f, 0)) { + voiceStart(0x21); + mFrameCtrlUnder[0].mRate = 0.0f; + onNoResetFlg1(daPyFlg1_UNK40000000); + } + return FALSE; + } + } } /* 8013D530-8013D638 .text setSwimMoveAnime__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ -void daPy_lk_c::setSwimMoveAnime(daPy_ANM) { +void daPy_lk_c::setSwimMoveAnime(daPy_ANM swimMoveAnm) { /* Nonmatching */ + //float startFrame = mFrameCtrlUnder[0].getFrame(); + float endFrame = mFrameCtrlUnder[0].getEnd(); + setSingleMoveAnime(swimMoveAnm, (std::fabsf(mVelocity) * ((l_HIO_swim_c0.m.field_0x54 - l_HIO_swim_c0.m.field_0x50))) / mMaxNormalSpeed + l_HIO_swim_c0.m.field_0x50 + (float)(getSwimTimerRate() * l_HIO_swim_c0.m.field_0x74), 0.0f, -1, l_HIO_swim_c0.m.field_0x58); // Missing a `* currentFrame` in here? + mFrameCtrlUnder[0].setFrame(endFrame * mFrameCtrlUnder[0].getEnd()); + mAnmRatioUnder[0].getAnmTransform()->setFrame(mFrameCtrlUnder[0].getFrame()); } /* 8013D638-8013D6B8 .text getSwimTimerRate__9daPy_lk_cFv */ -void daPy_lk_c::getSwimTimerRate() { - /* Nonmatching */ +f32 daPy_lk_c::getSwimTimerRate() { + f32 swimTimerRate; + if (dComIfGp_getItemTimeMax() != 0 && dComIfGp_event_getMode() == dEvtMode_NONE_e) { + swimTimerRate = (1.0f - dComIfGp_getItemTimeCount() * 0.0011111111f); + } + else { + if (dComIfGp_getItemTimeCount() <= 0) { + swimTimerRate = 1.0f; + } + else { + swimTimerRate = 0.0f; + } + } + return swimTimerRate; } /* 8013D6B8-8013D814 .text setSwimTimerStartStop__9daPy_lk_cFv */ void daPy_lk_c::setSwimTimerStartStop() { - /* Nonmatching */ + float target = 0.0f; + + if (mAcch.GetGroundH() <= m35D0 - 175.0f) { + dComIfGp_setItemTimeMax(1); + + if (checkNoResetFlg0(daPyFlg0_UNK100)) { + float swimTimerRate = getSwimTimerRate(); + + if (swimTimerRate > 0.5f) { + target = cM_scos(cM_rad2s((1.0f - swimTimerRate) * M_PI)) * -l_HIO_swim_c0.m.field_0x78; + + if (mFrameCtrlUnder->checkPass(0.0f) && mCurProc != daPyProc_SWIM_UP_e) { + if (m3570 && !checkNoResetFlg0(daPyFlg0_UNK4000)) { + voiceStart(0x22); + m3570 = 0; + } + else { + m3570 = 1; + } + } + } + } + } + else { + dComIfGp_setItemTimeCount(900); + dComIfGp_setItemTimeMax(1); + dComIfGp_setItemTimeMax(0); //Fakematch? Seems nonsensical to set it to 1 then immediately to 0, also could be `dComIfGp_stopItemSwimTimer` and `dComIfGp_startItemSwimTimer` inlines mentioned in the debug maps + } + + cLib_chaseF(&m3608, target, 3.0f); } /* 8013D814-8013DA18 .text procSwimUp_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procSwimUp_init(int) { - /* Nonmatching */ - static JGeometry::TVec3<f32> splash_scale; - static JGeometry::TVec3<f32> ripple_scale; +BOOL daPy_lk_c::procSwimUp_init(int param_1) { + JPABaseEmitter* mEmitter; + + static JGeometry::TVec3<f32> splash_scale(0.4f, 0.4f, 0.4f); + static JGeometry::TVec3<f32> ripple_scale(0.3f, 0.3f, 0.3f); + + commonProcInit(daPyProc_SWIM_UP_e); + + gravity = 0.0f; + speed.y = 0.0f; + + current.pos.y = m35D0; + + setSingleMoveAnime(ANM_SWIMP, l_HIO_swim_c0.m.field_0x2C, l_HIO_swim_c0.m.field_0x30, l_HIO_swim_c0.m.field_0x0, l_HIO_swim_c0.m.field_0x38); + + dComIfGp_setPlayerStatus0(0, daPyStts0_SWIM_e); + + m35C4 = l_HIO_swim_c0.m.field_0x3C; + + onNoResetFlg0(daPyFlg0_UNK100); + + if (param_1) { + mEmitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0040, ¤t.pos); + + if (mEmitter) { + mEmitter->setRate(15.0f); + mEmitter->setGlobalDynamicsScale(splash_scale); + mEmitter->setGlobalParticleScale(splash_scale); + } + + mEmitter = dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, ¤t.pos, NULL, NULL, 0xFF, &dPa_control_c::mSingleRippleEcallBack); + + if (mEmitter) { + mEmitter->setGlobalDynamicsScale(ripple_scale); + mEmitter->setGlobalParticleScale(ripple_scale); + } + } + m3570 = 0; + return TRUE; } /* 8013DA18-8013DB24 .text procSwimUp__9daPy_lk_cFv */ BOOL daPy_lk_c::procSwimUp() { - /* Nonmatching */ + int iVar1; + + J3DFrameCtrl* mFrameCtrl = mFrameCtrlUnder; + + setSpeedAndAngleSwim(); + + if (!changeSwimOutProc()) { + if (mFrameCtrl->getRate() < 0.01f) { + procSwimWait_init(0); + } + else { + if (mFrameCtrl->getFrame() > l_HIO_swim_c0.m.field_0x34) { + if (mStickDistance > 0.05f) { + procSwimMove_init(0); + } + } + else { + if (mFrameCtrl->checkPass(4.0f)) { + voiceStart(0x1A); + seStartOnlyReverb(JA_SE_LK_WALK_IN_WATER); + seStartOnlyReverb(JA_SE_LK_SWIM); + } + else { + m35C4 = l_HIO_swim_c0.m.field_0x3C; + current.pos.y = m35D0; + } + } + } + } + setSwimTimerStartStop(); + return TRUE; } /* 8013DB24-8013DCDC .text procSwimWait_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procSwimWait_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procSwimWait_init(int param_1) { + float fVar2; + u32 uVar3; + + J3DFrameCtrl* mFrameCtrl = mFrameCtrlUnder; + + commonProcInit(daPyProc_SWIM_WAIT_e); + + if (param_1) { + fVar2 = mFrameCtrl->getFrame() / (float)mFrameCtrl->getEnd(); + uVar3 = cM_rad2s(fVar2 * M_PI); + mVelocity = speedF * (1.0f - l_HIO_swim_c0.m.field_0x60) + speedF * std::fabsf(cM_scos(uVar3)) * l_HIO_swim_c0.m.field_0x60; + } + else { + fVar2 = 0.0f; + } + + gravity = 0.0f; + setSingleMoveAnime(ANM_SWIMWAIT, (float)(getSwimTimerRate() * l_HIO_swim_c0.m.field_0x70) + l_HIO_swim_c0.m.field_0x40, 0.0f, -1, l_HIO_swim_c0.m.field_0x44); + mFrameCtrl->setFrame(fVar2 * mFrameCtrl->getEnd()); + mAnmRatioUnder[0].getAnmTransform()->setFrame(mFrameCtrl->getFrame()); + dComIfGp_setPlayerStatus0(0, daPyStts0_SWIM_e); + + if (checkNoResetFlg0(daPyFlg0_UNK100)) { + if (mEquipItem != daPyItem_NONE_e) { + deleteEquipItem(TRUE); + } + current.pos.y = m35D0; + speed.y = 0.0f; + } + + m35C4 = l_HIO_swim_c0.m.field_0x48; + m34D4 = 0; + m3570 = 0; + return TRUE; } /* 8013DCDC-8013DE8C .text procSwimWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procSwimWait() { - /* Nonmatching */ + fopAc_ac_c* talkEventPartner; + short targetAngleY; + + setSpeedAndAngleSwim(); + m34D4 += (short)((cM_rndF(0.3f) + 0.85f) * l_HIO_swim_c0.m.field_0x2); + m35C4 = cM_ssin(m34D4) * l_HIO_swim_c0.m.field_0x4C + l_HIO_swim_c0.m.field_0x48; + + if (changeSwimOutProc()) { + return TRUE; + } + else { + if (!checkNoResetFlg0(daPyFlg0_UNK100)) { + if (changeSwimUpProc()) { + return TRUE; + } + } + else { + current.pos.y = m35D0; + } + if (checkNextModeSwim()) { + return TRUE; + } + else { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK10_e)) { + talkEventPartner = fopAcM_getTalkEventPartner(this); + if (talkEventPartner) { + targetAngleY = cLib_targetAngleY(¤t.pos, &talkEventPartner->eyePos); + cLib_addCalcAngleS(&shape_angle.y, targetAngleY, l_HIO_turn_c0.m.field_0x6, l_HIO_turn_c0.m.field_0x8, l_HIO_turn_c0.m.field_0xA); + current.angle.y = shape_angle.y; + } + } + + mFrameCtrlUnder[0].setRate((float)(getSwimTimerRate() * l_HIO_swim_c0.m.field_0x70) + l_HIO_swim_c0.m.field_0x40); + + if (mStickDistance > 0.05f) { + procSwimMove_init(1); + } + + setSwimTimerStartStop(); + } + } + return TRUE; } /* 8013DE8C-8013DF60 .text procSwimMove_init__9daPy_lk_cFi */ -BOOL daPy_lk_c::procSwimMove_init(int) { - /* Nonmatching */ +BOOL daPy_lk_c::procSwimMove_init(int param_1) { + commonProcInit(daPyProc_SWIM_MOVE_e); + + if (param_1 == 0) { + mFrameCtrlUnder[0].setFrame(0.0f); + } + + gravity = 0.0f; + + setSwimMoveAnime(ANM_SWIMING); + + m34B8 = 0; + + if (checkNoResetFlg0(daPyFlg0_UNK100)) { + if (mEquipItem != daPyItem_NONE_e) { + deleteEquipItem(TRUE); + } + + current.pos.y = m35D0; + speed.y = 0.0f; + + setSwimTail(); + } + + dComIfGp_setPlayerStatus0(0, daPyStts0_SWIM_e); + + m35C4 = l_HIO_swim_c0.m.field_0x5C; + m3570 = 0; + + return TRUE; } /* 8013DF60-8013E250 .text procSwimMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procSwimMove() { - /* Nonmatching */ + int iVar1; + daPy_ANM anm; + + setSpeedAndAngleSwim(); + + J3DFrameCtrl* mFrameCtrl = mFrameCtrlUnder; + + if (!mpAttention->Lockon()) { + iVar1 = 0; + } + else { + if (mStickDistance > 0.05f) { + iVar1 = getDirectionFromShapeAngle(); + } + else { + iVar1 = 0; + } + } + + if (m34B8 != iVar1) { + m34B8 = iVar1; + float fVar1 = m35C4; + + if (m34B8 == 0) { + anm = ANM_SWIMING; + m35C4 = l_HIO_swim_c0.m.field_0x5C; + } + else { + m35C4 = -80.0f; + + if (m34B8 == 2) { + anm = ANM_ATNDLS; + } + else if (m34B8 == 3) { + anm = ANM_ATNDRS; + } + else { + anm = ANM_ATNWB; + } + } + + m_old_fdata->getOldFrameTransInfo(0)->mTranslate.y -= m35C4 - fVar1; + setSwimMoveAnime(anm); + + if (m34B8) { + setTextureAnime(3, 0); + onModeFlg(ModeFlg_00000100); + offModeFlg(ModeFlg_00000400); + mpSeAnmFrameCtrl = NULL; + } + else { + offModeFlg(ModeFlg_00000100); + onModeFlg(ModeFlg_00000400); + } + } + else { + mFrameCtrl[0].setRate((std::fabsf(mVelocity) * (l_HIO_swim_c0.m.field_0x54 - l_HIO_swim_c0.m.field_0x50)) / mMaxNormalSpeed + l_HIO_swim_c0.m.field_0x50 + (float)(getSwimTimerRate() * l_HIO_swim_c0.m.field_0x74)); + } + + if (m34B8 == 1) { + mFrameCtrl[0].setRate(mFrameCtrl[0].getRate() * 0.5f); + } + + if (changeSwimOutProc()) { + return TRUE; + } + + if (!checkNoResetFlg0(daPyFlg0_UNK100)) { + if (changeSwimUpProc()) { + return TRUE; + } + } + else { + current.pos.y = m35D0; + setSwimTail(); + } + + if (checkNextModeSwim()) { + return TRUE; + } + + if (changeFrontWallTypeProc()) { + swimOutAfter(1); + return TRUE; + } + + if (mStickDistance <= 0.05f) { + procSwimWait_init(1); + } + else if ((!m34B8 && mFrameCtrl->checkPass(20.0f)) || (m34B8 && mFrameCtrl->checkPass(0.0f))) { + seStartOnlyReverb(JA_SE_LK_SWIM); + } + + setSwimTimerStartStop(); + + return TRUE; } diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc index 87bf9542..1b5aff51 100644 --- a/src/d/actor/d_a_player_sword.inc +++ b/src/d/actor/d_a_player_sword.inc @@ -246,7 +246,7 @@ int daPy_lk_c::getCutDirection(){ int iVar1; s16 sVar2; - if (m35B0 <= 0.05f) { + if (mStickDistance <= 0.05f) { iVar1 = 4; } else { diff --git a/src/d/actor/d_a_player_tact.inc b/src/d/actor/d_a_player_tact.inc index 4b93d32e..c88165f4 100644 --- a/src/d/actor/d_a_player_tact.inc +++ b/src/d/actor/d_a_player_tact.inc @@ -366,7 +366,7 @@ BOOL daPy_lk_c::procTactWait() { if (m3570 != -5) { rightDir = mDoAud_getTactDirection(1, m34D4); leftDir = mDoAud_getTactDirection(0, m34D6); - mDoAud_tact_setVolume(m35B0 * cM_scos(m34DC)); + mDoAud_tact_setVolume(mStickDistance * cM_scos(m34DC)); } else { rightDir = m34D4; leftDir = m34D6; diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 77208436..089fc9d1 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -99,7 +99,7 @@ void dComIfG_play_c::itemInit() { mItemTimer = 0; mItemNowLife = 0; mItemNowRupee = 0; - field_0x4928 = 0; + mItemTimeMax = 0; field_0x4929 = 0; mMesgStatus = 0; mbCamOverrideFarPlane = 0; |
