mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-03 19:10:19 -04:00
bed1416897
* d_a_alink work / d_a_obj_lv4digsand done * d_a_e_s1 matched, not linked * d_a_e_s1 documentation
1587 lines
48 KiB
C++
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(¤t.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(¤t.angle.y, field_0x2fe2, daAlinkHIO_swim_c0::m.mTurnRate, daAlinkHIO_swim_c0::m.mTurnMax, daAlinkHIO_swim_c0::m.mTurnMin);
|
|
} else {
|
|
cLib_addCalcAngleS(¤t.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;
|
|
}
|