Files
dusklight/src/d/actor/d_a_alink_swim.inc
T
TakaRikka bed1416897 d_a_alink work / lv4digsand done / e_s1 matched (#2224)
* d_a_alink work / d_a_obj_lv4digsand done

* d_a_e_s1 matched, not linked

* d_a_e_s1 documentation
2024-10-25 06:47:02 +03:00

1587 lines
48 KiB
C++

/**
* d_a_alink_link.inc
* Player Swim action handling
*/
#include "d/actor/d_a_alink.h"
#include "d/d_com_inf_game.h"
#include "f_op/f_op_kankyo_mng.h"
/* 80101890-801018E4 0FC1D0 0054+00 6/6 0/0 0/0 .text checkZoraWearMaskDraw__9daAlink_cFv
*/
BOOL daAlink_c::checkZoraWearMaskDraw() {
return checkZoraWearAbility() && !checkNoResetFlg0(FLG0_SWIM_UP);
}
/* 801018E4-80101934 0FC224 0050+00 1/1 0/0 0/0 .text checkAcceptUseItemInWater__9daAlink_cCFUs */
BOOL daAlink_c::checkAcceptUseItemInWater(u16 i_itemNo) const {
return i_itemNo == HVY_BOOTS || i_itemNo == WATER_BOMB || checkHookshotItem(i_itemNo);
}
/* 80101934-801019B8 0FC274 0084+00 4/4 0/0 0/0 .text swimDeleteItem__9daAlink_cFv */
void daAlink_c::swimDeleteItem() {
if (!checkHookshotItem(mEquipItem) && (mEquipItem != 0x103 || !checkBootsOrArmorHeavy())) {
deleteEquipItem(1, 1);
}
if (checkNoResetFlg2(FLG2_UNK_1)) {
offKandelaarModel();
}
}
/* 801019B8-80101A18 0FC2F8 0060+00 11/11 0/0 0/0 .text getZoraSwim__9daAlink_cCFv */
bool daAlink_c::getZoraSwim() const {
return checkUnderMove0BckNoArc(ANM_SWIM_C) || checkUnderMove0BckNoArc(ANM_SWIM_ZORA_START);
}
/* 80101A18-80101AA8 0FC358 0090+00 6/6 0/0 0/0 .text getSwimFrontMaxSpeed__9daAlink_cCFv
*/
f32 daAlink_c::getSwimFrontMaxSpeed() const {
if (checkBootsOrArmorHeavy()) {
return daAlinkHIO_swim_c0::m.mUnderwaterMaxSinkSpeed;
} else if (checkZoraWearAbility()) {
return 14.0f;
} else if (checkSwimDashMode()) {
return daAlinkHIO_swim_c0::m.mDMaxSpeed;
} else {
return daAlinkHIO_swim_c0::m.mMaxForwardSpeed;
}
}
/* 80101AA8-80101B44 0FC3E8 009C+00 5/5 0/0 0/0 .text getSwimMaxFallSpeed__9daAlink_cCFv
*/
f32 daAlink_c::getSwimMaxFallSpeed() const {
if (mProcID == PROC_DIVE_JUMP) {
return -daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed;
} else if (checkBootsOrArmorHeavy()) {
return daAlinkHIO_swim_c0::m.mBootsMaxSinkSpeed;
} else if (getZoraSwim()) {
return daAlinkHIO_swim_c0::m.mMaxSinkSpeed;
} else {
return daAlinkHIO_swim_c0::m.mInitMaxSinkSpeed;
}
}
/* 80101B44-80101C94 0FC484 0150+00 1/1 0/0 0/0 .text checkOxygenTimer__9daAlink_cFv */
void daAlink_c::checkOxygenTimer() {
BOOL hide_timer;
if (!checkNoResetFlg0(FLG0_SWIM_UP) ||
(checkModeFlg(MODE_SWIMMING) && mWaterY > 5.0f + current.pos.y))
{
hide_timer = false;
} else {
hide_timer = true;
}
if (dComIfGp_getOxygenShowFlag()) {
if (checkZoraWearAbility()) {
offOxygenTimer();
} else if (hide_timer) {
s32 max = dComIfGp_getMaxOxygen();
dComIfGp_setOxygenCount(max);
if (field_0x2fbe < 90) {
field_0x2fbe++;
} else {
offOxygenTimer();
}
} else if (!checkEventRun()) {
dComIfGp_setOxygenCount(-1);
}
} else if (!hide_timer && !checkZoraWearAbility()) {
if (field_0x2fbe != 0) {
field_0x2fbe--;
} else {
dComIfGp_onOxygenShowFlag();
dComIfGp_setOxygen(dComIfGp_getMaxOxygen());
}
}
}
/* 80101C94-80101CB8 0FC5D4 0024+00 3/3 0/0 0/0 .text offOxygenTimer__9daAlink_cFv */
void daAlink_c::offOxygenTimer() {
dComIfGp_offOxygenShowFlag();
s32 max = dComIfGp_getMaxOxygen();
dComIfGp_setOxygen(max);
field_0x2fbe = 90;
}
/* 80101CB8-80101CF4 0FC5F8 003C+00 2/2 0/0 0/0 .text checkPossibleWaterInMode__9daAlink_cCFv */
BOOL daAlink_c::checkPossibleWaterInMode() const {
return checkModeFlg(MODE_VINE_CLIMB) || dComIfGp_checkPlayerStatus1(0, 0x2000000) ||
mProcID == PROC_HOOKSHOT_FLY;
}
/* 80101CF4-80101D70 0FC634 007C+00 18/18 0/0 0/0 .text
* setWaterInAnmRate__9daAlink_cFP16daPy_frameCtrl_cf */
void daAlink_c::setWaterInAnmRate(daPy_frameCtrl_c* i_frameCtrl, f32 i_rate) {
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
if (checkZoraWearAbility()) {
i_rate *= daAlinkHIO_magneBoots_c0::m.mZoraWaterAnmSpeed;
} else {
i_rate *= daAlinkHIO_magneBoots_c0::m.mWaterWalkAnmRate;
}
}
i_frameCtrl->setRate(i_rate);
}
/* 80101D70-801023E4 0FC6B0 0674+00 2/2 0/0 0/0 .text swimBgCheck__9daAlink_cFf */
void daAlink_c::swimBgCheck(f32 param_0) {
offNoResetFlg1(FLG1_UNK_20000000);
if (!getZoraSwim() && mProcID != PROC_METAMORPHOSE) {
return;
}
cXyz start_pos(current.pos);
cXyz end_pos;
s16 var_r29;
if (getZoraSwim()) {
var_r29 = field_0x3080;
} else {
var_r29 = mProcVar2.field_0x300c;
start_pos.y += daAlinkHIO_wlWallHang_c0::m.field_0x78;
}
f32 var_f28 = param_0 * cM_scos(var_r29);
end_pos.set(start_pos.x + (var_f28 * cM_ssin(shape_angle.y)),
start_pos.y - param_0 * cM_ssin(var_r29),
start_pos.z + (var_f28 * cM_scos(shape_angle.y)));
if (!commonLineCheck(&start_pos, &end_pos)) {
return;
}
cM3dGPla tri;
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tri);
if (cBgW_CheckBWall(tri.mNormal.y) &&
(mProcID != PROC_METAMORPHOSE || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7))
{
cXyz sp14 = end_pos - mLinkLinChk.i_GetCross();
f32 temp_f1 = sp14.absXZ();
s16 var_r28 = sp14.atan2sX_Z();
f32 var_f26 = cM_scos(var_r28 - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
f32 var_f29 = -temp_f1 * var_f26;
f32 var_f31 = var_f29 * tri.mNormal.x;
f32 var_f30 = var_f29 * tri.mNormal.z;
if (mProcID == PROC_METAMORPHOSE ||
(getZoraSwim() && cLib_distanceAngleS(cM_atan2s(tri.mNormal.y, tri.mNormal.absXZ()),
field_0x3080) < 0x1000))
{
onNoResetFlg1(FLG1_UNK_20000000);
}
start_pos.x -= var_f31;
start_pos.z -= var_f30;
end_pos.x -= var_f31;
end_pos.z -= var_f30;
if (commonLineCheck(&start_pos, &end_pos)) {
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &tri);
if (cBgW_CheckBWall(tri.mNormal.y)) {
sp14 = end_pos - mLinkLinChk.i_GetCross();
temp_f1 = sp14.absXZ();
var_r28 = sp14.atan2sX_Z();
var_f26 = cM_scos(var_r28 - cM_atan2s(-tri.mNormal.x, -tri.mNormal.z));
var_f29 = -temp_f1 * var_f26;
var_f31 += var_f29 * tri.mNormal.x;
var_f30 += var_f29 * tri.mNormal.z;
}
}
current.pos.x -= var_f31;
current.pos.z -= var_f30;
field_0x3092 = cM_atan2s(-var_f31, -var_f30);
}
}
/* 801023E4-801029C8 0FCD24 05E4+00 3/3 0/0 0/0 .text setSpeedAndAngleSwim__9daAlink_cFv
*/
void daAlink_c::setSpeedAndAngleSwim() {
if (!checkBootsOrArmorHeavy() && dComIfGp_getDoStatus() == 0 && (!checkHookshotAnime() || (checkHookshotItem(mEquipItem) && (mItemMode == 0 || mItemMode == 1)))) {
if (checkZoraWearAbility()) {
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
if (field_0x2fcd == 0) {
setDoStatus(0x41);
}
} else {
setDoStatus(0x4C);
}
} else if (!checkNoResetFlg0(FLG0_SWIM_UP)) {
setDoStatus(0x97);
} else if (mProcID == PROC_SWIM_MOVE && checkUnderMove0BckNoArc(ANM_SWIM_A) && field_0x30d0 == 0 && field_0x30d2 == 0) {
setDoStatus(9);
}
}
f32 var_f31;
f32 var_f30;
if (mProcID == PROC_SWIM_HOOKSHOT_MOVE && !checkHookshotWait()) {
var_f30 = 0.0f;
} else if (checkZoraSwimMove()) {
s16 temp_r29 = shape_angle.y;
if (mTargetedActor != NULL && current.pos.abs2XZ(mTargetedActor->eyePos) > 22500.0f) {
setShapeAngleToAtnActor(0);
} else if (checkInputOnR()) {
s16 var_r28;
if (checkEventRun()) {
var_r28 = field_0x2fe2;
} else {
var_r28 = shape_angle.y + (16384.0f * cM_ssin(mStickAngle));
}
cLib_addCalcAngleS(&shape_angle.y, var_r28, daAlinkHIO_swim_c0::m.mUnderwaterTurnRate, daAlinkHIO_swim_c0::m.mUnderwaterTurnMax, daAlinkHIO_swim_c0::m.mUnderwaterTurnMin);
}
current.angle.y = shape_angle.y;
var_f30 = 3.0f * cM_scos((shape_angle.y - temp_r29));
} else if (!checkAttentionLock()) {
if (checkInputOnR()) {
s16 temp_r29_2 = shape_angle.y;
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, daAlinkHIO_swim_c0::m.mTurnRate, daAlinkHIO_swim_c0::m.mTurnMax, daAlinkHIO_swim_c0::m.mTurnMin);
} else {
cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, daAlinkHIO_swim_c0::m.mUnderwaterTurnRate, daAlinkHIO_swim_c0::m.mUnderwaterTurnMax, daAlinkHIO_swim_c0::m.mUnderwaterTurnMin);
}
f32 var_f29;
if (checkUnderMove0BckNoArc(ANM_SWIM_DASH)) {
var_f29 = 1.0f;
} else {
var_f29 = field_0x33a8;
}
var_f30 = 3.0f * var_f29 * cM_scos((shape_angle.y - temp_r29_2));
cLib_addCalcAngleS(&current.angle.y, shape_angle.y, 2, 0x2000, 0x1000);
} else {
var_f30 = 0.0f;
}
if (checkZeroSpeedF()) {
current.angle.y = shape_angle.y;
}
} else {
setShapeAngleToAtnActor(0);
if (checkInputOnR()) {
if (getDirectionFromCurrentAngle() == DIR_BACKWARD) {
current.angle.y += 0x8000;
mNormalSpeed *= -1.0f;
}
if (checkZeroSpeedF()) {
current.angle.y = field_0x2fe2;
}
s16 temp_r29_3 = current.angle.y;
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
cLib_addCalcAngleS(&current.angle.y, field_0x2fe2, daAlinkHIO_swim_c0::m.mTurnRate, daAlinkHIO_swim_c0::m.mTurnMax, daAlinkHIO_swim_c0::m.mTurnMin);
} else {
cLib_addCalcAngleS(&current.angle.y, field_0x2fe2, daAlinkHIO_swim_c0::m.mUnderwaterTurnRate, daAlinkHIO_swim_c0::m.mUnderwaterTurnMax, daAlinkHIO_swim_c0::m.mUnderwaterTurnMin);
}
var_f30 = daAlinkHIO_swim_c0::m.mAcceleration * field_0x33a8 * cM_scos((s16)(current.angle.y - temp_r29_3));
} else {
var_f30 = 0.0f;
}
}
f32 var_f28;
if (daAlinkHIO_swim_c0::m.mMaxForwardSpeed < mNormalSpeed && !checkZoraWearAbility()) {
var_f28 = daAlinkHIO_swim_c0::m.mDDeceleration;
} else {
var_f28 = daAlinkHIO_swim_c0::m.mDeceleration;
}
setNormalSpeedF(var_f30, var_f28);
if (dComIfGp_checkPlayerStatus0(0, 0x10)) {
mNormalSpeed = 0.0f;
}
if (checkSwimNeckUpDown()) {
s16 sp14;
if (speed.y >= 0.0f) {
var_f31 = -speed.y / daAlinkHIO_swim_c0::m.mMaxFloatUpSpeed;
if (var_f31 < -1.0f) {
var_f31 = -1.0f;
}
sp14 = 6144.0f * var_f31;
} else {
var_f31 = speed.y / maxFallSpeed;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
sp14 = 8192.0f * var_f31;
}
cLib_addCalcAngleS(&field_0x30a0, sp14, 5, 0x1000, 0x400);
} else {
field_0x30a0 = 0;
}
}
/* 801029C8-80102B1C 0FD308 0154+00 3/3 0/0 0/0 .text checkNextActionSwim__9daAlink_cFv
*/
int daAlink_c::checkNextActionSwim() {
if (checkSwimButtonMove() && getZoraSwim()) {
field_0x3000 = 30;
}
if ((checkZoraWearAbility() && !checkHeavyStateOn(1, 1)) || checkNoResetFlg0(FLG0_SWIM_UP)) {
setTalkStatus();
}
if (orderTalk(1)) {
return 1;
}
if (mAttList != NULL && mAttList->mType == 7 && checkNoResetFlg0(FLG0_SWIM_UP) &&
fopAcM_GetName(field_0x27f4) == PROC_CANOE)
{
setDoStatus(0x17);
if (doTrigger()) {
return procCanoeRideInit();
}
} else if (checkSwimButtonMove() && !checkZoraSwimMove()) {
if (checkSwimButtonAccept()) {
return procSwimDiveInit();
}
field_0x3000 = 30;
return procSwimMoveInit();
}
return checkNextActionFromButton();
}
/* 80102B1C-80103058 0FD45C 053C+00 3/3 0/0 0/0 .text checkSwimAction__9daAlink_cFi */
int daAlink_c::checkSwimAction(int param_0) {
f32 var_f31;
if (checkWolf()) {
if (getMoveBGActorName(mLinkAcch.m_gnd, NULL) == PROC_Obj_ITA) {
var_f31 = 200.0f;
} else {
var_f31 = daAlinkHIO_wlSwim_c0::m.field_0x48;
}
} else {
var_f31 = daAlinkHIO_swim_c0::m.mInitHeight;
}
if (checkNoResetFlg0(FLG0_UNK_80) && !checkNoResetFlg0(FLG0_UNDERWATER) && !checkModeFlg(0x40000) && mProcID != PROC_MAGNE_BOOTS_FLY && ((mProcID != PROC_WOLF_LOCK_ATTACK && mProcID != PROC_WOLF_LOCK_ATTACK_TURN) || mProcVar5.field_0x3012 == 0) && mDemo.getDemoMode() != 0x11) {
f32 var_f28;
f32 var_f29;
f32 var_f30;
if (checkWolf()) {
if (checkWolfDashMode()) {
var_f29 = daAlinkHIO_wlSwim_c0::m.field_0x50;
} else {
var_f29 = daAlinkHIO_wlSwim_c0::m.field_0x80;
}
var_f28 = daAlinkHIO_wlSwim_c0::m.field_0x58;
} else {
var_f29 = getSwimFrontMaxSpeed();
var_f28 = getSwimMaxFallSpeed();
}
if (dComIfGp_checkPlayerStatus1(0, 0x10000)) {
var_f30 = mLeftFootPos.y;
} else if (dComIfGp_checkPlayerStatus1(0, 0x2000000)) {
var_f30 = (-65.0f + current.pos.y) - var_f31;
} else {
var_f30 = current.pos.y;
}
if (mWaterY - var_f30 > var_f31 || (param_0 != 0 && mWaterY >= var_f30 && mWaterY - mLinkAcch.GetGroundH() > var_f31)) {
cXyz sp14;
offNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(true);
field_0x594 = var_f29;
if (!param_0) {
mNormalSpeed *= 0.75f;
}
if (mNormalSpeed >= field_0x594) {
mNormalSpeed = field_0x594;
}
swimDeleteItem();
if (checkEquipAnime()) {
resetUpperAnime(UPPER_2, 3.0f);
}
field_0x3080 = 0;
if (param_0) {
if (current.pos.y - mWaterY > -5.0f) {
onNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(false);
return 0;
}
return 1;
}
if (checkModeFlg(2) && !checkPossibleWaterInMode()) {
dComIfGp_getVibration().StartShock(2, 1, cXyz(0.0f, 1.0f, 0.0f));
current.pos.y = var_f30 + var_f31;
speed.y = 0.75f * field_0x3528.y;
if (speed.y < var_f28) {
speed.y = var_f28;
} else if (speed.y > 0.0f) {
speed.y = 0.0f;
}
if (checkWolf()) {
if (checkNoResetFlg2(FLG2_UNK_8)) {
daAlink_WANM var_r29;
if (cM_rnd() < 0.5f) {
var_r29 = WANM_FLING_LEFT;
onNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
} else {
var_r29 = WANM_FLING_RIGHT;
offNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW);
}
setWolfEnemyThrowUpperAnime(var_r29, 0.0f);
}
return procWolfSwimWaitInit(1);
}
if (mProcID == PROC_DIVE_JUMP) {
seStartOnlyReverb(Z2SE_AL_JUMP_DIVE_WATER);
if (checkZoraWearAbility()) {
field_0x3000 = 30;
}
return procSwimMoveInit();
}
return procSwimWaitInit(1);
}
if (checkBootsOrArmorHeavy() || checkPossibleWaterInMode()) {
onNoResetFlg0(FLG0_UNDERWATER);
return 0;
}
if (checkWolf()) {
return procWolfSwimUpInit();
}
return procSwimUpInit();
}
} else if (!checkNoResetFlg0(FLG0_SWIM_UP) && !checkBootsOrArmorHeavy() && !checkPossibleWaterInMode() && !checkModeFlg(0x40000)) {
if (checkNoResetFlg0(FLG0_UNK_80) && mWaterY - current.pos.y > var_f31) {
if (checkWolf()) {
return procWolfSwimWaitInit(0);
}
return procSwimWaitInit(0);
}
swimOutAfter(0);
if (checkWolf()) {
return procWolfWaitInit();
}
return procWaitInit();
} else if (checkModeFlg(0x40000) && mProcID != PROC_CAUGHT && mProcID != PROC_DEAD) {
return checkSwimOutAction();
}
return 0;
}
/* 80103058-801032C8 0FD998 0270+00 7/7 0/0 0/0 .text checkSwimUpAction__9daAlink_cFv */
int daAlink_c::checkSwimUpAction() {
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
if (!checkHookshotAnime()) {
return checkSubjectAction();
}
return 0;
}
if (!getZoraSwim()) {
if (checkWolf()) {
field_0x3480 = daAlinkHIO_wlSwim_c0::m.field_0x48;
} else {
cLib_addCalc(&field_0x3480, daAlinkHIO_swim_c0::m.mInitHeight, 0.5f, 15.0f, 1.0f);
}
} else {
field_0x3480 = 65.0f;
}
f32 var_f31;
if (checkWolf()) {
var_f31 = daAlinkHIO_wlSwim_c0::m.field_0x4C;
} else {
var_f31 = daAlinkHIO_swim_c0::m.mResurfaceHeight;
}
if (!checkBootsOrArmorHeavy() && !checkNoResetFlg0(FLG0_SWIM_UP)) {
if (speed.y >= 0.0f && mWaterY - current.pos.y < var_f31) {
if (checkWolf()) {
return procWolfSwimUpInit();
} else {
return procSwimUpInit();
}
}
}
if (current.pos.y - field_0x3480 < mLinkAcch.GetGroundH()) {
if (!checkBootsOrArmorHeavy()) {
current.pos.y = field_0x3480 + mLinkAcch.GetGroundH();
field_0x3798.y = current.pos.y;
mProcVar3.field_0x300e = getGroundAngle(&mLinkAcch.m_gnd, shape_angle.y);
mProcVar4.field_0x3010 = 2;
if (speed.y < -1.0f) {
speed.y = -1.0f;
}
} else {
current.pos.y = mLinkAcch.GetGroundH();
mLinkAcch.SetGroundHit();
onNoResetFlg0(FLG0_UNDERWATER);
procLandInit(0.0f);
field_0x2f99 = 0x90;
return 1;
}
} else if (mLinkAcch.ChkRoofHit()) {
mProcVar3.field_0x300e = getRoofAngle(&mLinkAcch.m_roof, shape_angle.y);
mProcVar4.field_0x3010 = 2;
if (speed.y > 1.0f) {
speed.y = 1.0f;
}
}
return 0;
}
/* 801032C8-80103398 0FDC08 00D0+00 8/8 0/0 0/0 .text swimOutAfter__9daAlink_cFi */
void daAlink_c::swimOutAfter(int param_0) {
onNoResetFlg0(FLG0_SWIM_UP);
onEndResetFlg1(ERFLG1_UNK_100);
mZ2Link.setInWater(false);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
} else {
field_0x2b98 = 0.0f;
field_0x2f98 = 4;
}
field_0x3750 = cXyz::Zero;
field_0x3000 = 0;
offOxygenTimer();
if (checkSwimMoveHandAnime() || checkZoraSwimDamageAnime()) {
resetUpperAnime(UPPER_2, 3.0f);
}
}
/* 80103398-801033CC 0FDCD8 0034+00 1/1 0/0 0/0 .text checkSwimFall__9daAlink_cFv */
BOOL daAlink_c::checkSwimFall() {
if (!checkNoResetFlg0(FLG0_UNK_80) || current.pos.y > mWaterY + l_autoUpHeight) {
return true;
}
return false;
}
/* 801033CC-80103698 0FDD0C 02CC+00 1/1 0/0 0/0 .text checkSwimOutAction__9daAlink_cFv */
int daAlink_c::checkSwimOutAction() {
f32 var_f31;
if (checkWolf()) {
var_f31 = daAlinkHIO_wlSwim_c0::m.field_0x48;
} else {
var_f31 = daAlinkHIO_swim_c0::m.mInitHeight;
}
if (checkSwimFall()) {
swimOutAfter(1);
cXyz sp8(field_0x3594.x + (mNormalSpeed * cM_ssin(current.angle.y)), 0.0f, field_0x3594.z + (mNormalSpeed * cM_scos(current.angle.y)));
mNormalSpeed = sp8.absXZ();
current.angle.y = sp8.atan2sX_Z();
if (checkWolf()) {
if (mNormalSpeed > daAlinkHIO_wlAutoJump_c0::m.field_0x74) {
mNormalSpeed = daAlinkHIO_wlAutoJump_c0::m.field_0x74;
}
return procWolfFallInit(2, daAlinkHIO_wlAutoJump_c0::m.field_0x54);
} else {
if (mNormalSpeed > daAlinkHIO_autoJump_c0::m.mMaxJumpSpeed) {
mNormalSpeed = daAlinkHIO_autoJump_c0::m.mMaxJumpSpeed;
}
return procFallInit(2, daAlinkHIO_autoJump_c0::m.mFallInterpolation);
}
}
if (!checkNoResetFlg0(FLG0_UNK_80) || mWaterY - mLinkAcch.GetGroundH() <= var_f31 - 5.0f) {
current.pos.y = mWaterY;
swimOutAfter(1);
return commonCheckNextAction(0);
}
if (checkMagicArmorHeavy() && checkNoResetFlg0(FLG0_SWIM_UP)) {
offNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(true);
}
return 0;
}
/* 80103698-80103EE0 0FDFD8 0848+00 4/4 0/0 0/0 .text setSwimMoveAnime__9daAlink_cFv */
void daAlink_c::setSwimMoveAnime() {
daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[0];
daPy_frameCtrl_c* temp_r27 = &mUpperFrameCtrl[2];
f32 var_f31;
f32 temp_f25 = temp_r28->getEnd();
f32 var_f26 = temp_r28->getFrame() * temp_f25;
if (field_0x3000 != 0 && !checkHookshotAnime()) {
field_0x2f98 = 4;
} else if (checkHookshotAnime() || (checkAttentionLock() && !getZoraSwim())) {
field_0x3000 = 0;
if (checkInputOnR()) {
field_0x2f98 = getDirectionFromShapeAngle();
} else if (field_0x2f98 >= 4 || mNormalSpeed < 3.0f) {
field_0x2f98 = 0;
}
} else if (checkInputOnR() || field_0x2f98 >= 4 || mNormalSpeed < 3.0f) {
field_0x2f98 = 0;
}
daAlink_ANM var_r29;
BOOL var_r26 = 1;
BOOL var_r25 = 0;
if (field_0x2f98 == 4) {
f32 temp_f29 = daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed + daAlinkHIO_swim_c0::m.mUnderwaterButtonSpeed;
field_0x3478 = daAlinkHIO_swim_c0::m.mUnderwaterMinAnmSpeed;
field_0x347c = daAlinkHIO_swim_c0::m.mUnderwaterMaxAnmSpeed;
if (field_0x594 < daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed) {
field_0x594 = daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed;
} else if (doTrigger()) {
field_0x594 += 0.75f;
if (field_0x594 > temp_f29) {
field_0x594 = temp_f29;
}
if (!checkSwimMoveHandAnime() && !checkZoraSwimDamageAnime()) {
f32 var_f28;
if (field_0x2060->getOldFrameMorfCounter() > 5.0f) {
var_f28 = -1.0f;
} else {
var_f28 = 3.0f;
}
setUpperAnime(0x23F, UPPER_2, 1.0f, 0.0f, 0x28, var_f28);
mProcVar5.field_0x3012 = 0;
var_r25 = 1;
} else if (temp_r27->getFrame() > 25.0f) {
mProcVar5.field_0x3012 = 1;
}
} else if (!checkSwimMoveHandAnime()) {
cLib_chaseF(&field_0x594, daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed, 0.4f);
}
var_f31 = 1.0f / daAlinkHIO_swim_c0::m.mMaxUnderwaterSpeed;
if (checkZoraWearAbility() && (field_0x3198 == ANM_SWIM_DIVE || (field_0x3198 == ANM_SWIM_ZORA_START && !checkAnmEnd(temp_r28)))) {
var_r29 = ANM_SWIM_ZORA_START;
} else {
var_r29 = ANM_SWIM_C;
if (field_0x3198 == ANM_SWIM_ZORA_START) {
var_r26 = 0;
if (mProcVar4.field_0x3010 == 1) {
mProcVar4.field_0x3010 = 0;
}
}
}
} else if (field_0x2f98 == 0) {
if (checkSwimDashMode() && checkUnderMove0BckNoArc(ANM_SWIM_DASH) && !checkAnmEnd(temp_r28)) {
var_r29 = ANM_SWIM_DASH;
} else if (mNormalSpeed < 3.0f || checkHookshotAnime()) {
var_r29 = ANM_SWIM_WAIT;
field_0x30d0 = 0;
} else {
var_r29 = ANM_SWIM_A;
}
if (checkSwimDashMode()) {
field_0x3478 = daAlinkHIO_swim_c0::m.mDMinAnmSpeed;
field_0x347c = daAlinkHIO_swim_c0::m.mDMaxAnmSpeed;
field_0x594 = daAlinkHIO_swim_c0::m.mDMaxSpeed;
} else {
field_0x3478 = daAlinkHIO_swim_c0::m.mForwardMinAnmSpeed;
field_0x347c = daAlinkHIO_swim_c0::m.mForwardMaxAnmSpeed;
field_0x594 = getSwimFrontMaxSpeed();
}
var_f31 = 1.0f / field_0x594;
} else if (field_0x2f98 == 1) {
var_r29 = ANM_ATN_SWIM_BACK;
field_0x3478 = daAlinkHIO_swim_c0::m.mBackwardMinAnmSpeed;
field_0x347c = daAlinkHIO_swim_c0::m.mBackwardMaxAnmSpeed;
if (checkZoraWearAbility()) {
field_0x594 = 10.0f;
} else {
field_0x594 = daAlinkHIO_swim_c0::m.mMaxBackwardSpeed;
}
var_f31 = 1.0f / field_0x594;
} else {
if (field_0x2f98 == 2) {
var_r29 = ANM_ATN_SWIM_LEFT;
} else {
var_r29 = ANM_ATN_SWIM_RIGHT;
}
field_0x3478 = daAlinkHIO_swim_c0::m.mStrafeMinAnmSpeed;
field_0x347c = daAlinkHIO_swim_c0::m.mStrafeMaxAnmSpeed;
if (checkZoraWearAbility()) {
field_0x594 = 12.0f;
} else {
field_0x594 = daAlinkHIO_swim_c0::m.mMaxStrafeSpeed;
}
var_f31 = 1.0f / field_0x594;
}
field_0x347c -= field_0x3478;
if (field_0x2f98 != 0) {
field_0x30d0 = 0;
}
if (checkBootsOrArmorHeavy()) {
var_r29 = ANM_SWIM_WAIT;
field_0x594 = daAlinkHIO_swim_c0::m.mUnderwaterMaxSinkSpeed;
if (mEquipItem != NO_ITEM && !checkHookshotAnime()) {
setDoStatus(4);
}
}
if (var_r29 != field_0x3198) {
if (field_0x3198 == ANM_SWIM_ZORA_START) {
speed.y = 0.0f;
}
field_0x3198 = var_r29;
if (checkUnderMove0BckNoArc(ANM_SWIM_DASH)) {
field_0x30d2 = daAlinkHIO_swim_c0::m.field_0x5e;
}
if (var_r29 == ANM_SWIM_WAIT) {
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, daAlinkHIO_swim_c0::m.mWaitAnmSpeed, daAlinkHIO_swim_c0::m.mWaitInterpolation);
} else {
f32 var_f27;
if (var_r26 != 0) {
var_f27 = daAlinkHIO_swim_c0::m.mMoveInterpolation;
} else {
var_f27 = 0.0f;
}
setSingleAnimeBaseMorf(var_r29, var_f27);
}
}
if (var_r29 != ANM_SWIM_WAIT && var_r29 != ANM_SWIM_DASH) {
f32 temp_f30 = var_f31 * fabsf(mNormalSpeed);
if (temp_f30 > 1.0f && field_0x2f98 == 4) {
temp_r28->setRate(daAlinkHIO_swim_c0::m.mUnderwaterMaxAnmSpeed + ((temp_f30 - 1.0f) * daAlinkHIO_swim_c0::m.mUnderwaterButtonAnmSpeed));
} else {
temp_r28->setRate(field_0x3478 + (field_0x347c * temp_f30));
}
}
if (checkSwimMoveHandAnime()) {
if (temp_r27->checkPass(17.0f)) {
seStartOnlyReverb(Z2SE_AL_WATER_STROKE_L);
}
if (var_r29 == ANM_SWIM_C) {
temp_r27->setRate(temp_r28->getRate());
if (var_r25 == 0 && temp_r27->checkPass(0.0f)) {
if (mProcVar5.field_0x3012 != 0) {
mProcVar5.field_0x3012 = 0;
} else {
resetUpperAnime(UPPER_2, 3.0f);
}
}
} else {
resetUpperAnime(UPPER_2, -1.0f);
}
}
maxFallSpeed = getSwimMaxFallSpeed();
if (var_r29 == ANM_SWIM_C || var_r29 == ANM_SWIM_ZORA_START) {
if (!checkZoraWearAbility()) {
if (field_0x3080 != -0x3800) {
setOldRootQuaternion(0x4000, 0, 0);
}
field_0x3080 = -0x3800;
} else if (mProcVar4.field_0x3010 == 1) {
cLib_addCalcAngleS(&field_0x3080, mProcVar3.field_0x300e, 5, 0x1000, 0x100);
} else if (mProcVar4.field_0x3010 == 2) {
cLib_addCalcAngleS(&field_0x3080, mProcVar3.field_0x300e, 5, 0x1000, 0x100);
mProcVar4.field_0x3010 = 0;
} else {
s16 var_r24;
if (checkInputOnR() && !checkEventRun()) {
var_r24 = 13653.0f * cM_scos(mStickAngle);
} else {
var_r24 = 0;
}
cLib_addCalcAngleS(&field_0x3080, var_r24, 5, 0x200, 0x80);
}
} else if (field_0x3080 != 0) {
setOldRootQuaternion(field_0x3080, 0, 0);
field_0x3080 = 0;
mProcVar4.field_0x3010 = 0;
if (!checkZoraWearAbility()) {
mNormalSpeed = 0.0f;
}
}
}
/* 80103EE0-80103F08 0FE820 0028+00 5/5 0/0 0/0 .text checkSwimButtonAccept__9daAlink_cFv
*/
bool daAlink_c::checkSwimButtonAccept() {
return dComIfGp_getDoStatus() == 0x41 || dComIfGp_getDoStatus() == 0x4C;
}
/* 80103F08-80103F24 0FE848 001C+00 4/4 0/0 0/0 .text checkUpSwimButtonAccept__9daAlink_cFv */
bool daAlink_c::checkUpSwimButtonAccept() {
return dComIfGp_getDoStatus() == 0x97;
}
/* 80103F24-80103F94 0FE864 0070+00 2/2 0/0 0/0 .text checkSwimButtonMove__9daAlink_cFv
*/
BOOL daAlink_c::checkSwimButtonMove() {
return !checkNoResetFlg0(FLG0_SWIM_UP) &&
(checkSwimButtonAccept() || checkUpSwimButtonAccept()) && doButton();
}
/* 80103F94-80103FE8 0FE8D4 0054+00 3/3 0/0 0/0 .text checkZoraSwimMove__9daAlink_cFv */
BOOL daAlink_c::checkZoraSwimMove() {
return checkSwimButtonMove() || field_0x3000 != 0;
}
/* 80103FE8-80104034 0FE928 004C+00 2/2 0/0 0/0 .text checkSwimNeckUpDown__9daAlink_cCFv
*/
BOOL daAlink_c::checkSwimNeckUpDown() const {
return !checkNoResetFlg0(FLG0_SWIM_UP) && checkUnderMove0BckNoArc(ANM_SWIM_WAIT);
}
/* 80104034-801040F8 0FE974 00C4+00 3/3 0/0 0/0 .text setSwimUpDownOffset__9daAlink_cFv
*/
void daAlink_c::setSwimUpDownOffset() {
mProcVar2.field_0x300c += (s16)((cM_rndF(0.3f) + 0.85f) * 2330.0f);
f32 var_f1;
if (checkWolf()) {
if (checkHeavyStateOn(1, 1)) {
var_f1 = daAlinkHIO_wlSwim_c0::m.field_0x98;
} else {
var_f1 = daAlinkHIO_wlSwim_c0::m.field_0x6C;
}
} else {
var_f1 = daAlinkHIO_swim_c0::m.mWaitVibrationIntensity;
}
field_0x2b98 = var_f1 * cM_ssin(mProcVar2.field_0x300c);
}
/* 801040F8-801041E8 0FEA38 00F0+00 2/2 0/0 0/0 .text procSwimUpInit__9daAlink_cFv */
int daAlink_c::procSwimUpInit() {
commonProcInit(PROC_SWIM_UP);
if (field_0x3000 != 0 && !checkZoraWearAbility()) {
mNormalSpeed = 0.0f;
}
speed.y = 0.0f;
current.pos.y = mWaterY;
field_0x3080 = 0;
onNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(false);
setSingleAnimeParam(ANM_SWIM_RESURFACE, &daAlinkHIO_swim_c0::m.mResurfaceAnm);
dComIfGp_setPlayerStatus0(0, 0x100000);
mProcVar0.field_0x3008 = 0;
mProcVar4.field_0x3010 = 0;
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
field_0x3000 = 0;
seStartMapInfo(Z2SE_AL_OUTOF_WATER);
swimDeleteItem();
field_0x2fcd = 15;
return 1;
}
/* 801041E8-801042F8 0FEB28 0110+00 1/0 0/0 0/0 .text procSwimUp__9daAlink_cFv */
int daAlink_c::procSwimUp() {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
setNormalSpeedF(0.0f, daAlinkHIO_swim_c0::m.mDeceleration);
if (checkSetItemTrigger(HVY_BOOTS)) {
setHeavyBoots(1);
}
if (checkBootsOrArmorHeavy()) {
if (checkInputOnR()) {
procSwimMoveInit();
} else {
procSwimWaitInit(0);
}
} else if (checkAnmEnd(frame_ctrl)) {
procSwimWaitInit(0);
} else if (frame_ctrl->getFrame() > daAlinkHIO_swim_c0::m.mResurfaceAnm.mCheckFrame &&
checkInputOnR())
{
procSwimMoveInit();
} else {
current.pos.y = mWaterY;
}
return 1;
}
/* 801042F8-801044B4 0FEC38 01BC+00 15/15 0/0 0/0 .text procSwimWaitInit__9daAlink_cFi */
int daAlink_c::procSwimWaitInit(int param_0) {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
u32 mode_40000 = checkModeFlg(0x40000);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
current.pos.y += daAlinkHIO_swim_c0::m.mInitHeight;
}
commonProcInit(PROC_SWIM_WAIT);
if (param_0) {
seStartMapInfo(Z2SE_AL_INTO_WATER);
mProcVar4.field_0x3010 = 0;
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
} else if (!mode_40000) {
mProcVar4.field_0x3010 = 0;
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
}
swimDeleteItem();
if (!checkUnderMove0BckNoArc(ANM_SWIM_WAIT)) {
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, daAlinkHIO_swim_c0::m.mWaitAnmSpeed,
daAlinkHIO_swim_c0::m.mWaitInterpolation);
} else if (frame_ctrl->getRate() < 0.1f) {
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, daAlinkHIO_swim_c0::m.mWaitAnmSpeed, -1.0f);
}
field_0x30d0 = 0;
field_0x3198 = 0x14;
field_0x32cc = mEquipItem;
if (field_0x3080 != 0) {
setOldRootQuaternion(field_0x3080, 0, 0);
field_0x3080 = 0;
}
dComIfGp_setPlayerStatus0(0, 0x100000);
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
current.pos.y = mWaterY;
speed.y = 0.0f;
}
mProcVar2.field_0x300c = 0;
mProcVar0.field_0x3008 = 0;
field_0x594 = getSwimFrontMaxSpeed();
return 1;
}
/* 801044B4-80104670 0FEDF4 01BC+00 1/0 0/0 0/0 .text procSwimWait__9daAlink_cFv */
int daAlink_c::procSwimWait() {
if (mDemo.getDemoMode() == 6 || mDemo.getDemoMode() == 8) {
setShapeAngleToTalkActor();
current.angle.y = shape_angle.y;
}
maxFallSpeed = getSwimMaxFallSpeed();
field_0x594 = getSwimFrontMaxSpeed();
setSpeedAndAngleSwim();
if (mEquipItem != field_0x32cc) {
field_0x32cc = mEquipItem;
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, daAlinkHIO_swim_c0::m.mWaitAnmSpeed,
daAlinkHIO_swim_c0::m.mWaitInterpolation);
}
setSwimUpDownOffset();
if (checkEquipHeavyBoots() && mEquipItem != NO_ITEM) {
setDoStatus(0x4);
}
if (checkSwimUpAction()) {
return 1;
}
if (checkNextActionSwim()) {
return 1;
}
if (checkFrontWallTypeAction()) {
swimOutAfter(1);
return 1;
}
if (checkSwimButtonAccept() && doTrigger()) {
procSwimDiveInit();
} else if ((checkInputOnR() && mNormalSpeed >= daAlinkHIO_swim_c0::m.mForwardMinSpeed) ||
(checkUpSwimButtonAccept() && doButton()))
{
if (checkUpSwimButtonAccept() && doButton()) {
field_0x3000 = 30;
}
procSwimMoveInit();
}
return 1;
}
/* 80104670-801047B8 0FEFB0 0148+00 9/9 0/0 0/0 .text procSwimMoveInit__9daAlink_cFv */
int daAlink_c::procSwimMoveInit() {
u32 mode_40000 = checkModeFlg(0x40000);
bool proc_dive_jump = mProcID == PROC_DIVE_JUMP;
bool proc_swim_dive = mProcID == PROC_SWIM_DIVE;
commonProcInit(PROC_SWIM_MOVE);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
}
if (!mode_40000) {
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
mProcVar4.field_0x3010 = 0;
}
if (proc_swim_dive || proc_dive_jump) {
field_0x3198 = 199;
if (proc_dive_jump) {
field_0x3080 = 0x2800;
mProcVar3.field_0x300e = field_0x3080;
mProcVar4.field_0x3010 = 1;
setOldRootQuaternion(-field_0x3080, 0, 0);
}
} else {
field_0x3198 = -1;
}
field_0x2f98 = 5;
setSwimMoveAnime();
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
current.pos.y = mWaterY;
speed.y = 0.0f;
}
swimDeleteItem();
dComIfGp_setPlayerStatus0(0, 0x100000);
mProcVar0.field_0x3008 = 0;
return 1;
}
/* 801047B8-80104958 0FF0F8 01A0+00 1/0 0/0 0/0 .text procSwimMove__9daAlink_cFv */
int daAlink_c::procSwimMove() {
setSpeedAndAngleSwim();
if (checkUpSwimButtonAccept() && doButton()) {
field_0x3000 = 30;
}
setSwimMoveAnime();
if (checkSwimUpAction()) {
return 1;
}
if (checkNextActionSwim()) {
return 1;
}
if (checkInputOnR() && checkFrontWallTypeAction()) {
swimOutAfter(1);
return 1;
}
if (checkSwimButtonAccept() && doTrigger() && !getZoraSwim()) {
procSwimDiveInit();
} else if (dComIfGp_getDoStatus() == 9 && doTrigger()) {
onNoResetFlg1(FLG1_DASH_MODE);
field_0x30d0 = daAlinkHIO_swim_c0::m.field_0x5c;
setSingleAnimeParam(ANM_SWIM_DASH, &daAlinkHIO_swim_c0::m.mDashAnm);
field_0x3198 = ANM_SWIM_DASH;
} else if (!checkZoraSwimMove() && (!checkUpSwimButtonAccept() || !doButton()) &&
mNormalSpeed < daAlinkHIO_swim_c0::m.mForwardMinSpeed)
{
procSwimWaitInit(0);
}
return 1;
}
/* 80104958-80104AA0 0FF298 0148+00 4/4 0/0 0/0 .text procSwimDiveInit__9daAlink_cFv */
int daAlink_c::procSwimDiveInit() {
commonProcInit(PROC_SWIM_DIVE);
setSpecialGravity(0.0f, maxFallSpeed, 0);
speed.y = 0.0f;
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
mProcVar2.field_0x300c = 1;
setSingleAnimeParam(ANM_SWIM_DIVE, &daAlinkHIO_swim_c0::m.mDiveAnm);
voiceStart(Z2SE_AL_V_DIVING);
} else {
mProcVar2.field_0x300c = 0;
setSingleAnimeParam(ANM_SWIM_DIVE, &daAlinkHIO_swim_c0::m.mUnderwaterDiveAnm);
}
field_0x2f99 = 0x10;
field_0x3588 = l_waitBaseAnime;
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
mProcVar4.field_0x3010 = 0;
dComIfGp_setPlayerStatus0(0, 0x100000);
field_0x3000 = 30;
field_0x3478 = 0.0f;
field_0x347c = 1.0f / daAlinkHIO_swim_c0::m.mUnderwaterDiveAnm.mEndFrame;
return 1;
}
/* 80104AA0-80104C50 0FF3E0 01B0+00 1/0 0/0 0/0 .text procSwimDive__9daAlink_cFv */
int daAlink_c::procSwimDive() {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
if (mProcVar2.field_0x300c == 0) {
setDoStatus(0x4C);
} else if (checkNoResetFlg0(FLG0_SWIM_UP) && frame_ctrl->getFrame() > 20.0f) {
offNoResetFlg0(FLG0_SWIM_UP);
mZ2Link.setInWater(true);
}
field_0x2f99 = 7;
field_0x3000 = 30;
setNormalSpeedF(0.0f, daAlinkHIO_swim_c0::m.mDeceleration);
field_0x3478 = field_0x347c * frame_ctrl->getFrame();
if (field_0x3478 > 1.0f) {
field_0x3478 = 1.0f;
}
if (frame_ctrl->checkPass(15.0f) && mProcVar2.field_0x300c != 0) {
cXyz pos(current.pos.x, mWaterY, current.pos.z);
fopKyM_createWpillar(&pos, 0.7f, 0);
}
if (mLinkAcch.GetGroundH() > current.pos.y - field_0x598 * 0.5f) {
current.pos.y = field_0x598 * 0.5f + mLinkAcch.GetGroundH();
}
if (checkAnmEnd(frame_ctrl)) {
speed.y = daAlinkHIO_swim_c0::m.mMaxSinkSpeed;
if (mProcVar2.field_0x300c != 0) {
field_0x3080 = 0x2800;
mProcVar3.field_0x300e = field_0x3080;
mProcVar4.field_0x3010 = 1;
}
setOldRootQuaternion(-field_0x3080, 0, 0);
return procSwimMoveInit();
}
return 1;
}
/* 80104C50-80104D7C 0FF590 012C+00 1/1 0/0 0/0 .text procSwimHookshotSubjectInit__9daAlink_cFv */
int daAlink_c::procSwimHookshotSubjectInit() {
if (!commonProcInitNotSameProc(PROC_SWIM_HOOKSHOT_SUBJECT)) {
return 0;
}
initHookshotUpperAnimeSpeed(1);
if (!checkUnderMove0BckNoArc(ANM_SWIM_WAIT)) {
setSingleAnimeBaseSpeed(ANM_SWIM_WAIT, daAlinkHIO_swim_c0::m.mWaitAnmSpeed,
daAlinkHIO_hookshot_c0::m.mStartInterpolation);
}
mNormalSpeed = 0.0f;
current.angle.y = shape_angle.y;
if (field_0x3080 != 0) {
setOldRootQuaternion(field_0x3080, 0, 0);
field_0x3080 = 0;
}
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
current.pos.y = mWaterY;
speed.y = 0.0f;
}
mProcVar2.field_0x300c = 0;
mProcVar0.field_0x3008 = 0;
field_0x594 = getSwimFrontMaxSpeed();
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
mProcVar4.field_0x3010 = 0;
field_0x30d0 = 0;
setHookshotReadyMaterial();
dComIfGp_setPlayerStatus0(0, 0x104000);
return 1;
}
/* 80104D7C-80104EB8 0FF6BC 013C+00 1/0 0/0 0/0 .text procSwimHookshotSubject__9daAlink_cFv */
int daAlink_c::procSwimHookshotSubject() {
maxFallSpeed = getSwimMaxFallSpeed();
field_0x594 = getSwimFrontMaxSpeed();
if (checkHookshotWait()) {
setDoStatus(0x12);
}
setShapeAngleToAtnActor(0);
mSight.offDrawFlg();
if (checkSwimUpAction()) {
return 1;
}
if (checkNextActionFromButton()) {
return 1;
}
if (!checkHookshotAnime()) {
return procSwimWaitInit(0);
}
if (!checkNextActionHookshot()) {
if (checkHookshotWait()) {
if (setBodyAngleToCamera()) {
setHookshotSight();
}
dComIfGp_clearPlayerStatus0(0, 0x40000);
} else {
dComIfGp_setPlayerStatus0(0, 0x40000);
}
}
return 1;
}
/* 80104EB8-80104FC4 0FF7F8 010C+00 1/1 0/0 0/0 .text procSwimHookshotMoveInit__9daAlink_cFv */
int daAlink_c::procSwimHookshotMoveInit() {
if (!commonProcInitNotSameProc(PROC_SWIM_HOOKSHOT_MOVE)) {
return 0;
}
if (checkZeroSpeedF()) {
onModeFlg(1);
}
initHookshotUpperAnimeSpeed(0);
field_0x3198 = -1;
field_0x2f98 = 5;
if (mItemVar0.field_0x3018 == 0) {
setSwimMoveAnime();
}
if (checkNoResetFlg0(FLG0_SWIM_UP)) {
current.pos.y = mWaterY;
speed.y = 0.0f;
}
mProcVar0.field_0x3008 = 0;
if (field_0x3080 != 0) {
setOldRootQuaternion(field_0x3080, 0, 0);
field_0x3080 = 0;
}
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
mProcVar4.field_0x3010 = 0;
field_0x30d0 = 0;
dComIfGp_setPlayerStatus0(0, 0x104000);
return 1;
}
/* 80104FC4-8010519C 0FF904 01D8+00 1/0 0/0 0/0 .text procSwimHookshotMove__9daAlink_cFv
*/
int daAlink_c::procSwimHookshotMove() {
cancelHookshotMove();
if (checkHookshotWait() && !checkZoraWearAbility()) {
setDoStatus(0x12);
}
if (mItemVar0.field_0x3018 == 0) {
setSpeedAndAngleSwim();
setSwimMoveAnime();
}
if (checkSwimUpAction()) {
return 1;
}
if (checkSwimButtonAccept() && doTrigger()) {
return procSwimDiveInit();
}
if (checkUpSwimButtonAccept() && doTrigger()) {
field_0x3000 = 30;
return procSwimMoveInit();
}
if (checkHookshotWait() || checkBossOctaIealRoom()) {
setShapeAngleToAtnActor(0);
}
if (checkNextActionFromButton()) {
return 1;
}
if (!checkHookshotAnime()) {
return procSwimWaitInit(0);
}
if (!checkNextActionHookshot()) {
if (checkZeroSpeedF()) {
onModeFlg(1);
} else {
offModeFlg(1);
}
if (checkHookshotWait() || (mTargetedActor != NULL && checkBossOctaIealRoom())) {
setBodyAngleXReadyAnime(0);
}
}
return 1;
}
/* 8010519C-80105728 0FFADC 058C+00 1/1 0/0 0/0 .text
* procSwimDamageInit__9daAlink_cFP12dCcD_GObjInf */
// NONMATCHING - cLib_minMaxLimit regalloc issue
int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) {
seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL);
dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f));
BOOL bvar4 =
checkNoResetFlg0(FLG0_SWIM_UP) || ((param_0 != NULL && param_0->GetTgHitAc() != NULL) &&
fopAcM_GetName(param_0->GetTgHitAc()) == PROC_E_SG);
if (!getZoraSwim() && bvar4 && mProcID != PROC_SWIM_WAIT) {
return 1;
}
cXyz* temp_r30;
cXyz sp30;
if (param_0 != NULL) {
temp_r30 = (cXyz*)getDamageVec(param_0);
} else {
sp30.set(-cM_ssin(current.angle.y), 0.0f, -cM_scos(current.angle.y));
temp_r30 = &sp30;
}
f32 scale =
temp_r30->abs() * daAlinkHIO_damSwim_c0::m.field_0x80 + daAlinkHIO_damSwim_c0::m.field_0x7C;
if (scale > daAlinkHIO_damSwim_c0::m.field_0x88) {
scale = daAlinkHIO_damSwim_c0::m.field_0x88;
}
field_0x3750 = temp_r30->normZP();
field_0x3750 *= scale;
if (getZoraSwim()) {
setUpperAnimeParam(0xBF, UPPER_2, &daAlinkHIO_damSwim_c0::m.field_0x50);
setFacePriBck(0xEA);
setFacePriTexture(FTANM_UNK_27);
return 1;
}
commonProcInit(PROC_SWIM_DAMAGE);
cXyz sp24(temp_r30->z * -cM_ssin(shape_angle.y) + temp_r30->x * cM_scos(shape_angle.y),
temp_r30->y,
temp_r30->z * cM_scos(shape_angle.y) + temp_r30->x * cM_ssin(shape_angle.y));
mProcVar0.field_0x3008 =
cLib_minMaxLimit(cM_atan2s(sp24.z, sp24.y), (s16)-daAlinkHIO_damSwim_c0::m.field_0x78,
(s16)daAlinkHIO_damSwim_c0::m.field_0x78);
mProcVar1.field_0x300a = cLib_minMaxLimit(
cM_atan2s(sp24.x, -JMAFastSqrt(sp24.y * sp24.y + sp24.z * sp24.z)),
(s16)-daAlinkHIO_damSwim_c0::m.field_0x7A, (s16)daAlinkHIO_damSwim_c0::m.field_0x7A);
int dir = getDirectionFromAngle(cM_atan2s(-sp24.x, -sp24.z));
if (bvar4) {
setSingleAnimeParam(ANM_SWIM_DMG_FREEZE, &daAlinkHIO_damSwim_c0::m.field_0x64);
field_0x3478 = daAlinkHIO_damSwim_c0::m.field_0x64.mCheckFrame;
mProcVar0.field_0x3008 = 0;
mProcVar1.field_0x300a = 0;
} else if (dir == DIR_FORWARD) {
setSingleAnimeParam(ANM_SWIM_DMG_FRONT, &daAlinkHIO_damSwim_c0::m.field_0x0);
field_0x3478 = daAlinkHIO_damSwim_c0::m.field_0x0.mCheckFrame;
} else if (dir == DIR_BACKWARD) {
setSingleAnimeParam(ANM_SWIM_DMG_BACK, &daAlinkHIO_damSwim_c0::m.field_0x14);
field_0x3478 = daAlinkHIO_damSwim_c0::m.field_0x14.mCheckFrame;
} else if (dir == DIR_LEFT) {
setSingleAnimeParam(ANM_SWIM_DMG_LEFT, &daAlinkHIO_damSwim_c0::m.field_0x28);
field_0x3478 = daAlinkHIO_damSwim_c0::m.field_0x28.mCheckFrame;
} else {
setSingleAnimeParam(ANM_SWIM_DMG_RIGHT, &daAlinkHIO_damSwim_c0::m.field_0x3C);
field_0x3478 = daAlinkHIO_damSwim_c0::m.field_0x3C.mCheckFrame;
}
mNormalSpeed = 0.0f;
field_0x347c = M_PI / (mUnderFrameCtrl->getEnd() - mUnderFrameCtrl->getStart());
field_0x3480 = daAlinkHIO_swim_c0::m.mInitHeight;
current.angle.y = shape_angle.y;
return 1;
}
/* 80105728-801058A0 100068 0178+00 1/0 0/0 0/0 .text procSwimDamage__9daAlink_cFv */
int daAlink_c::procSwimDamage() {
daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl;
f32 fvar8 = cM_fsin(field_0x347c * (frame_ctrl->getFrame() - frame_ctrl->getStart()));
mBodyAngle.x = mProcVar0.field_0x3008 * fvar8;
mBodyAngle.z = -mProcVar1.field_0x300a * fvar8;
mBodyAngle.y = 0;
if (checkSwimUpAction()) {
return 1;
}
if (checkAnmEnd(frame_ctrl)) {
if (!checkNextActionSwim()) {
return procSwimWaitInit(0);
}
} else if (frame_ctrl->getFrame() > field_0x3478) {
onModeFlg(4);
if (!checkNextActionSwim() && checkInputOnR()) {
return procSwimMoveInit();
}
}
return 1;
}
/* 801058A0-80105A00 1001E0 0160+00 2/2 0/0 0/0 .text procOctaIealSpitInit__9daAlink_cFv
*/
int daAlink_c::procOctaIealSpitInit() {
u32 temp_r30 = checkModeFlg(MODE_SWIMMING);
commonProcInit(PROC_OCTAIEAL_SPIT);
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
offNoResetFlg0(FLG0_UNDERWATER);
}
setSingleAnimeBase(ANM_MORPHEEL_SPIT_OUT);
field_0x3750 = cXyz::Zero;
field_0x3080 = 0;
field_0x3000 = 0;
speed.y = field_0x340c;
mNormalSpeed = field_0x3408;
field_0x3478 = field_0x3408 * 0.1f;
setDamagePointNormal(field_0x318c);
if (field_0x3478 < 1.0f) {
field_0x3478 = 1.0f;
}
if (temp_r30) {
field_0x2f99 = 15;
field_0x33b0 = -45.0f;
} else {
field_0x2f99 = 16;
current.pos.y += 145.0f;
}
field_0x3588 = l_waitBaseAnime;
offNoResetFlg0(FLG0_SWIM_UP);
current.angle.y = field_0x2ffe;
if (mNormalSpeed > 0.0f) {
shape_angle.y = current.angle.y + 0x8000;
} else {
shape_angle.y = current.angle.y;
}
return 1;
}
/* 80105A00-80105A84 100340 0084+00 1/0 0/0 0/0 .text procOctaIealSpit__9daAlink_cFv */
int daAlink_c::procOctaIealSpit() {
if (mDemo.getDemoMode() == 0x2E) {
cancelOriginalDemo();
}
cLib_addCalc(&mNormalSpeed, 0.0f, 0.5f, field_0x3478, 0.1f);
field_0x2f99 = 7;
if (mUnderFrameCtrl[0].checkAnmEnd()) {
procSwimWaitInit(0);
}
return 1;
}