mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-30 18:01:53 -04:00
work on daAlink horse, hvyboots, cut (#1981)
* work on alink_cut, alink_horse, alink_hvyboots * remove asm
This commit is contained in:
+18
-26
@@ -5698,65 +5698,57 @@ COMPILER_STRIP_GATE(0x8039190C, &daAlink_c::m_handRightInSidePos);
|
||||
/* 80391918-80391924 01DF78 000C+00 0/1 0/0 0/0 .rodata horseLocalLeft$17678 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const horseLocalLeft[12] = {
|
||||
0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
static const Vec horseLocalLeft = {
|
||||
20.0f, 0.0f, 0.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391918, &horseLocalLeft);
|
||||
#pragma pop
|
||||
|
||||
/* 80391924-80391930 01DF84 000C+00 0/1 0/0 0/0 .rodata horseLocalRight$17679 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const horseLocalRight[12] = {
|
||||
0xC1, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
static const Vec horseLocalRight = {
|
||||
-20.0f, 0.0f, 0.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391924, &horseLocalRight);
|
||||
#pragma pop
|
||||
|
||||
/* 80391930-8039193C 01DF90 000C+00 0/1 0/0 0/0 .rodata horseLocalBack$17680 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const horseLocalBack[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00,
|
||||
static const Vec horseLocalBack = {
|
||||
0.0f, 0.0f, -200.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391930, &horseLocalBack);
|
||||
#pragma pop
|
||||
|
||||
/* 8039193C-80391948 01DF9C 000C+00 0/1 0/0 0/0 .rodata boarLocalLeft$17681 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const boarLocalLeft[12] = {
|
||||
0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x90, 0x00, 0x00,
|
||||
static const Vec boarLocalLeft = {
|
||||
200.0f, 0.0f, -18.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x8039193C, &boarLocalLeft);
|
||||
#pragma pop
|
||||
|
||||
/* 80391948-80391954 01DFA8 000C+00 0/1 0/0 0/0 .rodata boarLocalRight$17682 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const boarLocalRight[12] = {
|
||||
0xC3, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x90, 0x00, 0x00,
|
||||
static const Vec boarLocalRight = {
|
||||
-200.0f, 0.0f, -18.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391948, &boarLocalRight);
|
||||
#pragma pop
|
||||
|
||||
/* 80391954-80391960 01DFB4 000C+00 1/1 0/0 0/0 .rodata localHorseRun$18095 */
|
||||
SECTION_RODATA static u8 const localHorseRun_18095[12] = {
|
||||
0x41, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x34, 0x00, 0x00,
|
||||
static const Vec localHorseRun_18095 = {
|
||||
15.0f, 0.0f, -45.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391954, &localHorseRun_18095);
|
||||
|
||||
/* 80391960-8039196C 01DFC0 000C+00 1/1 0/0 0/0 .rodata localHorseRun$18103 */
|
||||
SECTION_RODATA static u8 const localHorseRun_18103[12] = {
|
||||
0x41, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00,
|
||||
static const Vec localHorseRun_18103 = {
|
||||
30.0f, 0.0f, -10.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80391960, &localHorseRun_18103);
|
||||
|
||||
/* 8039196C-80391978 01DFCC 000C+00 1/1 0/0 0/0 .rodata localOffset$18237 */
|
||||
SECTION_RODATA static u8 const localOffset_18237[12] = {
|
||||
0xC1, 0xF0, 0x00, 0x00, 0xC1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
static const Vec localOffset_18237 = {
|
||||
-30.0f, -18.0f, 0.0f
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x8039196C, &localOffset_18237);
|
||||
|
||||
/* 80391978-80391984 01DFD8 000C+00 1/1 0/0 0/0 .rodata @18938 */
|
||||
SECTION_RODATA static u8 const lit_18938[12] = {
|
||||
@@ -13190,7 +13182,7 @@ static u8 lit_4416[12];
|
||||
#pragma pop
|
||||
|
||||
/* 804255BC-804255C8 0522DC 000C+00 1/3 0/0 0/0 .bss l_localHorseRidePos */
|
||||
static u8 l_localHorseRidePos[12];
|
||||
static Vec l_localHorseRidePos;
|
||||
|
||||
/* 804255C8-804255D4 0522E8 000C+00 0/1 0/0 0/0 .bss @4417 */
|
||||
#pragma push
|
||||
@@ -13199,7 +13191,7 @@ static u8 lit_4417[12];
|
||||
#pragma pop
|
||||
|
||||
/* 804255D4-804255E0 0522F4 000C+00 1/3 0/0 0/0 .bss l_localBoarRidePos */
|
||||
static u8 l_localBoarRidePos[12];
|
||||
static Vec l_localBoarRidePos;
|
||||
|
||||
/* 804255E0-804255EC 052300 000C+00 0/1 0/0 0/0 .bss @4418 */
|
||||
#pragma push
|
||||
|
||||
+527
-20
@@ -3,8 +3,29 @@
|
||||
* Player Sword action handling
|
||||
*/
|
||||
|
||||
#include "rel/d/a/b/d_a_b_gnd/d_a_b_gnd.h"
|
||||
|
||||
/* 800D0D38-800D0E08 0CB678 00D0+00 1/1 0/0 0/0 .text daAlink_searchNightStalker__FP10fopAc_ac_cPv
|
||||
*/
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
static fopAc_ac_c* daAlink_searchNightStalker(fopAc_ac_c* i_actor, void*) {
|
||||
if (fopAcM_GetName(i_actor) == PROC_E_S1) {
|
||||
daPy_py_c* player_p = daPy_getLinkPlayerActorClass();
|
||||
if (player_p->current.pos.abs2XZ(i_actor->current.pos) < 250000.0f &&
|
||||
fabsf(player_p->current.pos.y - i_actor->current.pos.y) < 300.0f)
|
||||
{
|
||||
return i_actor;
|
||||
}
|
||||
} else if (fopAcM_GetName(i_actor) == PROC_B_GND &&
|
||||
static_cast<b_gnd_class*>(i_actor)->checkAttackChance())
|
||||
{
|
||||
return i_actor;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -13,6 +34,7 @@ static asm void daAlink_searchNightStalker(fopAc_ac_c* param_0, void* param_1) {
|
||||
#include "asm/d/a/d_a_alink/daAlink_searchNightStalker__FP10fopAc_ac_cPv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D0E08-800D0E98 0CB748 0090+00 1/1 0/0 0/0 .text checkLightSwordMtrl__9daAlink_cFv
|
||||
*/
|
||||
@@ -21,7 +43,8 @@ void daAlink_c::checkLightSwordMtrl() {
|
||||
stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo();
|
||||
|
||||
if (i_dStage_stagInfo_GetSaveTbl(stag_info) == 0x17 ||
|
||||
fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchNightStalker, NULL)) {
|
||||
fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchNightStalker, NULL))
|
||||
{
|
||||
i_onNoResetFlg3(FLG3_UNK_100000);
|
||||
return;
|
||||
}
|
||||
@@ -93,6 +116,38 @@ void daAlink_c::changeCutFast() {
|
||||
}
|
||||
|
||||
/* 800D10E0-800D1268 0CBA20 0188+00 1/1 0/0 0/0 .text checkCutFastReady__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
bool daAlink_c::checkCutFastReady() {
|
||||
if (mProcID == PROC_CUT_FAST_READY) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (checkNotBattleStage()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
fopAc_ac_c* target_p = mAttention->LockonTarget(0);
|
||||
|
||||
if (mEquipItem == NO_ITEM && (i_dComIfGs_isEventBit(0x2A80) || i_checkNoResetFlg3(FLG3_UNK_80)))
|
||||
{
|
||||
if (i_checkModeFlg(1) && !i_checkRideOn() && i_checkSwordGet() && i_checkModeFlg(4) &&
|
||||
!i_checkModeFlg(0x40000) && mTargetedActor == NULL && checkEnemyGroup(target_p))
|
||||
{
|
||||
f32 xz_dist = target_p->mEyePos.abs2XZ(current.pos);
|
||||
f32 y_dist = fabsf(target_p->mEyePos.y - current.pos.y);
|
||||
|
||||
if ((xz_dist < 160000.0f && y_dist < 300.0f) ||
|
||||
(i_checkNoResetFlg0(FLG0_UNK_1000000) && xz_dist < 202500.0f && y_dist < 350.0f))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -101,6 +156,7 @@ asm bool daAlink_c::checkCutFastReady() {
|
||||
#include "asm/d/a/d_a_alink/checkCutFastReady__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D1268-800D1310 0CBBA8 00A8+00 9/9 0/0 0/0 .text setSwordModel__9daAlink_cFv */
|
||||
void daAlink_c::setSwordModel() {
|
||||
@@ -161,9 +217,11 @@ void daAlink_c::resetCombo(int param_0) {
|
||||
void daAlink_c::checkComboCnt() {
|
||||
if ((mEquipItem == EQUIP_SWORD && mComboCutCount == 2) &&
|
||||
(i_checkAttentionLock() &&
|
||||
(mAtCps[0].ChkAtHit() || mAtCps[1].ChkAtHit() || mAtCps[2].ChkAtHit()))) {
|
||||
(mAtCps[0].ChkAtHit() || mAtCps[1].ChkAtHit() || mAtCps[2].ChkAtHit())))
|
||||
{
|
||||
i_onNoResetFlg0(FLG0_UNK_8000);
|
||||
}
|
||||
|
||||
if (field_0x307e > 0) {
|
||||
field_0x307e--;
|
||||
} else {
|
||||
@@ -300,7 +358,8 @@ BOOL daAlink_c::setSwordHitVibration(dCcD_GObjInf* i_gobj) {
|
||||
var_r4 = 3;
|
||||
}
|
||||
} else if (field_0x2fd0 == 2 ||
|
||||
(i_gobj->GetAtHitAc() != NULL && fopAcM_GetGroup(i_gobj->GetAtHitAc()) == 3)) {
|
||||
(i_gobj->GetAtHitAc() != NULL && fopAcM_GetGroup(i_gobj->GetAtHitAc()) == 3))
|
||||
{
|
||||
var_r4 = 2;
|
||||
} else if (field_0x2fd0 == 1) {
|
||||
var_r4 = 4;
|
||||
@@ -634,7 +693,8 @@ BOOL daAlink_c::checkDownAttackState() {
|
||||
(i_checkWolf() &&
|
||||
(fopAcM_GetName(mTargetedActor) == PROC_E_PO ||
|
||||
fopAcM_GetName(mTargetedActor) == PROC_E_HP) &&
|
||||
enemy->getDownPos().abs2(current.pos) < lit_7174)))) {
|
||||
enemy->getDownPos().abs2(current.pos) < lit_7174))))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -835,7 +895,8 @@ int daAlink_c::procCutNormal() {
|
||||
if ((cutDir == DIR_RIGHT && mCutType == CUT_TYPE_NM_LEFT &&
|
||||
frameCtrl->getFrame() > lit_7448) ||
|
||||
(cutDir == DIR_LEFT && mCutType == CUT_TYPE_NM_RIGHT &&
|
||||
frameCtrl->getFrame() > lit_7448)) {
|
||||
frameCtrl->getFrame() > lit_7448))
|
||||
{
|
||||
field_0x300a = cutDir;
|
||||
}
|
||||
}
|
||||
@@ -849,7 +910,8 @@ int daAlink_c::procCutNormal() {
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else if ((!(frameCtrl->getFrame() > field_0x3484) && field_0x300a == 4) ||
|
||||
!checkCutCancelNextMode(3)) {
|
||||
!checkCutCancelNextMode(3))
|
||||
{
|
||||
if (frameCtrl->getFrame() > field_0x3484) {
|
||||
resetCombo(1);
|
||||
}
|
||||
@@ -1011,6 +1073,79 @@ int daAlink_c::procCutFinishInit(int i_type) {
|
||||
}
|
||||
|
||||
/* 800D382C-800D3ADC 0CE16C 02B0+00 1/0 0/0 0/0 .text procCutFinish__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutFinish() {
|
||||
if (checkGroundSpecialMode()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
||||
|
||||
setBodyAngleXReadyAnime(1);
|
||||
cLib_chaseF(&mNormalSpeed, 0.0f, daAlinkHIO_move_c0::m.mDeceleration);
|
||||
i_onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
setComboReserb();
|
||||
|
||||
checkCutTurnCharge();
|
||||
checkCutAtnActorChange();
|
||||
|
||||
if (mCutType == CUT_TYPE_MORTAL_DRAW_A || mCutType == CUT_TYPE_FINISH_STAB) {
|
||||
field_0x2f99 = 5;
|
||||
} else {
|
||||
field_0x2f99 = 4;
|
||||
}
|
||||
|
||||
if (frameCtrl_p->getFrame() >= field_0x300e.x) {
|
||||
onModeFlg(0x100);
|
||||
} else if (frameCtrl_p->getFrame() >= field_0x300c) {
|
||||
offModeFlg(0x100);
|
||||
}
|
||||
|
||||
if (checkAnmEnd(frameCtrl_p)) {
|
||||
resetCombo(1);
|
||||
|
||||
if (field_0x3008 > 0) {
|
||||
if (!(frameCtrl_p->getFrame() > field_0x3484) || !checkCutCancelNextMode(3)) {
|
||||
field_0x3008--;
|
||||
}
|
||||
} else if (mDemo.getDemoMode() == 0x24 || mDemo.getDemoMode() == 0x54) {
|
||||
dComIfGp_evmng_cutEnd(field_0x3184);
|
||||
} else {
|
||||
mNormalSpeed = 0.0f;
|
||||
field_0x2f98 = 2;
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else if (!(frameCtrl_p->getFrame() > field_0x3484) || !checkCutCancelNextMode(3)) {
|
||||
if (frameCtrl_p->getFrame() > field_0x3484) {
|
||||
resetCombo(1);
|
||||
}
|
||||
|
||||
if (changeCutReverseProc((daAlink_ANM)field_0x3198)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
setShapeAngleToAtnActor(field_0x300e.y);
|
||||
|
||||
if (cLib_distanceAngleS(getShapeAngleYAtnActor(), shape_angle.y) < 0x800) {
|
||||
field_0x300e.y = 1;
|
||||
}
|
||||
|
||||
current.angle.y = shape_angle.y;
|
||||
|
||||
if (frameCtrl_p->getFrame() >= field_0x3478 && frameCtrl_p->getFrame() < field_0x347c) {
|
||||
if (!i_checkNoResetFlg0(FLG0_UNK_40)) {
|
||||
seStartSwordCut(field_0x32d0);
|
||||
mNormalSpeed = field_0x3480;
|
||||
}
|
||||
|
||||
i_onResetFlg0(RFLG0_UNK_2);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1019,6 +1154,7 @@ asm int daAlink_c::procCutFinish() {
|
||||
#include "asm/d/a/d_a_alink/procCutFinish__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D3ADC-800D3CCC 0CE41C 01F0+00 2/2 0/0 0/0 .text procCutFinishJumpUpInit__9daAlink_cFv */
|
||||
int daAlink_c::procCutFinishJumpUpInit() {
|
||||
@@ -1055,8 +1191,8 @@ int daAlink_c::procCutFinishJumpUpInit() {
|
||||
field_0x307e = daAlinkHIO_cut_c0::m.mComboDuration;
|
||||
f32 var_f31 = daAlinkHIO_cutFnJU_c0::m.mCutAnm.mStartFrame;
|
||||
|
||||
setCylAtParam(getSwordAtType(), dCcG_At_Spl_UNK_1, 3, 1, 3, daAlinkHIO_cutFnJU_c0::m.mAttackRadius,
|
||||
lit_7625);
|
||||
setCylAtParam(getSwordAtType(), dCcG_At_Spl_UNK_1, 3, 1, 3,
|
||||
daAlinkHIO_cutFnJU_c0::m.mAttackRadius, lit_7625);
|
||||
field_0x32cc = Z2SE_AL_SWORD_SWING_L;
|
||||
|
||||
setSingleAnime(ANM_CUT_TWIRL, daAlinkHIO_cutFnJU_c0::m.mCutAnm.mSpeed, var_f31,
|
||||
@@ -1089,12 +1225,14 @@ int daAlink_c::procCutFinishJumpUp() {
|
||||
}
|
||||
|
||||
if (mDemo.getDemoMode() != 0x52 &&
|
||||
current.pos.y < mLastJumpPos.y - daAlinkHIO_cutFnJU_c0::m.mFallHeight) {
|
||||
current.pos.y < mLastJumpPos.y - daAlinkHIO_cutFnJU_c0::m.mFallHeight)
|
||||
{
|
||||
return procFallInit(2, daAlinkHIO_cutFnJU_c0::m.mFallInterpolation);
|
||||
}
|
||||
|
||||
if (frameCtrl->getFrame() >= daAlinkHIO_cutFnJU_c0::m.mAttackStartFrame &&
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutFnJU_c0::m.mAttackEndFrame) {
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutFnJU_c0::m.mAttackEndFrame)
|
||||
{
|
||||
if (!i_checkNoResetFlg0(FLG0_UNK_40)) {
|
||||
seStartSwordCut(field_0x32cc);
|
||||
}
|
||||
@@ -1210,7 +1348,8 @@ int daAlink_c::procCutReverseInit(daAlink_c::daAlink_ANM i_anmID) {
|
||||
|
||||
int temp_r3;
|
||||
if (mCutType == CUT_TYPE_MORTAL_DRAW_A || mCutType == CUT_TYPE_MORTAL_DRAW_B ||
|
||||
mCutType == CUT_TYPE_JUMP) {
|
||||
mCutType == CUT_TYPE_JUMP)
|
||||
{
|
||||
temp_r3 = 5;
|
||||
} else {
|
||||
temp_r3 = 3;
|
||||
@@ -1359,8 +1498,8 @@ int daAlink_c::procCutJumpLand() {
|
||||
|
||||
if (frameCtrl->checkAnmEnd()) {
|
||||
checkNextAction(0);
|
||||
} else if (frameCtrl->getFrame() > daAlinkHIO_cutJump_c0::m.mJumpSpinDelay &&
|
||||
field_0x3198 != 2) {
|
||||
} else if (frameCtrl->getFrame() > daAlinkHIO_cutJump_c0::m.mJumpSpinDelay && field_0x3198 != 2)
|
||||
{
|
||||
procCutTurnInit(1, field_0x3198);
|
||||
} else {
|
||||
if (frameCtrl->getFrame() > daAlinkHIO_cutJump_c0::m.mLandAnm.mCheckFrame) {
|
||||
@@ -1619,6 +1758,133 @@ int daAlink_c::procCutTurnMoveInit(int param_0) {
|
||||
}
|
||||
|
||||
/* 800D4EFC-800D53C8 0CF83C 04CC+00 1/0 0/0 0/0 .text procCutTurnMove__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutTurnMove() {
|
||||
setShapeAngleToAtnActor(0);
|
||||
|
||||
if (!checkWoodSwordEquip()) {
|
||||
simpleAnmPlay(m_nSwordBtk);
|
||||
} else {
|
||||
field_0x3008++;
|
||||
if (field_0x3008 >= 14.0f) {
|
||||
field_0x3008 = 100;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x2fe4 = shape_angle.y;
|
||||
i_onNoResetFlg1(FLG1_UNK_10000000);
|
||||
|
||||
if (checkGroundSpecialMode()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
BOOL var_r4 = m_nSwordBtk->getFrame() >= 14.0f || field_0x3008 >= 14.0f;
|
||||
|
||||
if (field_0x300c != 0) {
|
||||
if (checkDownAttackState() && !var_r4) {
|
||||
setDoStatusEmphasys(0x30);
|
||||
} else if (checkCutHeadState() && !var_r4) {
|
||||
setDoStatusEmphasys(0x77);
|
||||
} else {
|
||||
setDoStatus(0x86);
|
||||
}
|
||||
} else {
|
||||
field_0x307e = daAlinkHIO_cut_c0::m.mComboDuration;
|
||||
}
|
||||
|
||||
if (mDemo.getDemoMode() == 0x5B || mDemo.getDemoMode() == 0x5C) {
|
||||
if (var_r4) {
|
||||
dComIfGp_evmng_cutEnd(field_0x3184);
|
||||
}
|
||||
} else if ((field_0x300c == 0 && swordButton()) || (field_0x300c != 0 && doButton())) {
|
||||
f32 var_f30 = 0.0f;
|
||||
i_onResetFlg0(RFLG0_UNK_10);
|
||||
|
||||
if (checkInputOnR()) {
|
||||
int direction = getDirectionFromAngle(field_0x2fe2 - field_0x2fe4);
|
||||
daAlink_ANM anm = ANM_MAX;
|
||||
|
||||
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, 4, 12000, 0x2000);
|
||||
|
||||
f32 var_f31;
|
||||
if (field_0x2f98 == 0 || field_0x2f98 == 1) {
|
||||
if (direction == DIR_LEFT || direction == DIR_RIGHT) {
|
||||
anm = ANM_CUT_TURN_CHARGE_MOVE;
|
||||
var_f31 = daAlinkHIO_cutTurn_c0::m.mMoveLRInterpolation;
|
||||
mNormalSpeed *= 0.5f;
|
||||
} else if (field_0x2f98 != direction) {
|
||||
mNormalSpeed *= -0.5f;
|
||||
current.angle.y = field_0x2fe2;
|
||||
}
|
||||
} else if (direction == DIR_FORWARD || direction == DIR_BACKWARD) {
|
||||
anm = ANM_CUT_TURN_CHARGE;
|
||||
var_f31 = daAlinkHIO_cutTurn_c0::m.mMoveFBInterpolation;
|
||||
mNormalSpeed *= 0.5f;
|
||||
} else if (field_0x2f98 != direction) {
|
||||
mNormalSpeed *= -0.5f;
|
||||
current.angle.y = field_0x2fe2;
|
||||
}
|
||||
|
||||
if (field_0x2f98 == direction) {
|
||||
var_f30 = daAlinkHIO_cutTurn_c0::m.mChargeMoveAccel * field_0x33ac;
|
||||
} else {
|
||||
field_0x2f98 = direction;
|
||||
}
|
||||
|
||||
if (anm != ANM_MAX) {
|
||||
setSingleAnimeBaseSpeed(anm, 0.0f, var_f31);
|
||||
}
|
||||
}
|
||||
|
||||
setNormalSpeedF(var_f30, daAlinkHIO_cutTurn_c0::m.mChargeMoveDecel);
|
||||
|
||||
f32 var_f31_2;
|
||||
if (field_0x2f98 == DIR_FORWARD) {
|
||||
var_f31_2 = daAlinkHIO_cutTurn_c0::m.mMoveFBAnmSpeed;
|
||||
} else if (field_0x2f98 == DIR_BACKWARD) {
|
||||
var_f31_2 = -daAlinkHIO_cutTurn_c0::m.mMoveFBAnmSpeed;
|
||||
} else if (field_0x2f98 == DIR_RIGHT) {
|
||||
var_f31_2 = -daAlinkHIO_cutTurn_c0::m.mMoveLRAnmSpeed;
|
||||
} else {
|
||||
var_f31_2 = daAlinkHIO_cutTurn_c0::m.mMoveLRAnmSpeed;
|
||||
}
|
||||
|
||||
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
||||
|
||||
f32 temp_f0 = mNormalSpeed / field_0x594;
|
||||
setWaterInAnmRate(frameCtrl_p, temp_f0 * var_f31_2);
|
||||
|
||||
if (var_f31_2 >= 0.0f) {
|
||||
frameCtrl_p->setLoop(frameCtrl_p->getStart());
|
||||
} else {
|
||||
frameCtrl_p->setLoop(frameCtrl_p->getEnd());
|
||||
}
|
||||
|
||||
initBasAnime();
|
||||
|
||||
if (checkZeroSpeedF()) {
|
||||
onModeFlg(1);
|
||||
mSpeedModifier = 0.0f;
|
||||
} else {
|
||||
offModeFlg(1);
|
||||
mSpeedModifier = 1.0f;
|
||||
}
|
||||
} else if (var_r4) {
|
||||
if (field_0x300c != 0) {
|
||||
procCutLargeJumpInit();
|
||||
} else {
|
||||
procCutTurnInit(0, 1);
|
||||
}
|
||||
} else if (field_0x300c != 0) {
|
||||
checkDoCutAction();
|
||||
} else {
|
||||
cancelCutCharge();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1627,8 +1893,89 @@ asm int daAlink_c::procCutTurnMove() {
|
||||
#include "asm/d/a/d_a_alink/procCutTurnMove__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D53C8-800D57F8 0CFD08 0430+00 2/1 0/0 0/0 .text procCutDownInit__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutDownInit() {
|
||||
if (mDemo.getDemoMode() == 0x51 && (mProcID == PROC_CUT_DOWN || mProcID == PROC_CUT_DOWN_LAND))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_CUT_DOWN);
|
||||
resetCombo(1);
|
||||
|
||||
cXyz sp2C;
|
||||
field_0x300e.x = 0;
|
||||
|
||||
if (mTargetedActor != NULL) {
|
||||
sp2C = static_cast<fopEn_enemy_c*>(mTargetedActor)->getDownPos();
|
||||
field_0x280c.setData(mTargetedActor);
|
||||
|
||||
if (fopAcM_GetName(mTargetedActor) == PROC_B_GND) {
|
||||
field_0x300e.x = 1;
|
||||
}
|
||||
} else {
|
||||
sp2C.set(current.pos.x + cM_ssin(shape_angle.y) * 100.0f, current.pos.y,
|
||||
current.pos.z + cM_scos(shape_angle.y) * 100.0f);
|
||||
field_0x280c.clearData();
|
||||
}
|
||||
|
||||
if (field_0x300e.x != 0) {
|
||||
mNormalSpeed = 0.0f;
|
||||
speed.y = 0.0f;
|
||||
offModeFlg(2);
|
||||
} else {
|
||||
setSingleAnimeParam(ANM_CUT_FINISHING_BLOW_JUMP, &daAlinkHIO_cutDown_c0::m.mJumpAnm);
|
||||
sp2C.y += 50.0f;
|
||||
|
||||
if (fopAcM_gc_c::gndCheck(&sp2C)) {
|
||||
sp2C.y = fopAcM_gc_c::getGroundY();
|
||||
} else {
|
||||
sp2C.y -= 50.0f;
|
||||
}
|
||||
|
||||
shape_angle.y = cLib_targetAngleY(¤t.pos, &sp2C);
|
||||
current.angle.y = shape_angle.y;
|
||||
|
||||
sp2C.x -= cM_ssin(shape_angle.y) * 95.0f;
|
||||
sp2C.z -= cM_scos(shape_angle.y) * 95.0f;
|
||||
|
||||
f32 var_f31 = current.pos.absXZ(sp2C);
|
||||
if (var_f31 > 800.0f) {
|
||||
var_f31 = 800.0f;
|
||||
}
|
||||
|
||||
speed.y = daAlinkHIO_cutDown_c0::m.mRecoverSpeedH;
|
||||
|
||||
if (i_checkNoResetFlg0(FLG0_UNDERWATER)) {
|
||||
mNormalSpeed *= daAlinkHIO_magneBoots_c0::m.mWaterVelocityX;
|
||||
speed.y *= daAlinkHIO_magneBoots_c0::m.mWaterVelocityY;
|
||||
} else if (checkHeavyStateOn(1, 1)) {
|
||||
speed.y *= 1.5f;
|
||||
}
|
||||
|
||||
f32 var_f4 = speed.y + mGravity;
|
||||
f32 var_f5 = 1.0f / mGravity;
|
||||
|
||||
f32 temp_f1 = sp2C.y - (current.pos.y - var_f5 * (var_f4 * var_f4) * 0.5f);
|
||||
if (temp_f1 > 0.0f) {
|
||||
temp_f1 = 0.0f;
|
||||
}
|
||||
|
||||
temp_f1 = JMAFastSqrt(temp_f1 * 2.0f * var_f5);
|
||||
mNormalSpeed = var_f31 / (temp_f1 - var_f4 * var_f5);
|
||||
field_0x300c = 0;
|
||||
}
|
||||
|
||||
setSwordVoiceSe(Z2SE_AL_V_TODOME_JUMP);
|
||||
setCutType(CUT_TYPE_DOWN);
|
||||
dComIfGp_setPlayerStatus1(0, 0x400000);
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1637,6 +1984,7 @@ asm int daAlink_c::procCutDownInit() {
|
||||
#include "asm/d/a/d_a_alink/procCutDownInit__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D57F8-800D58A0 0D0138 00A8+00 1/0 0/0 0/0 .text procCutDown__9daAlink_cFv */
|
||||
int daAlink_c::procCutDown() {
|
||||
@@ -1656,6 +2004,52 @@ int daAlink_c::procCutDown() {
|
||||
|
||||
/* 800D58A0-800D5ADC 0D01E0 023C+00 1/1 0/0 0/0 .text
|
||||
* procCutDownLandInit__9daAlink_cFP13fopEn_enemy_c */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutDownLandInit(fopEn_enemy_c* i_enemy) {
|
||||
commonProcInit(PROC_CUT_DOWN_LAND);
|
||||
checkCutLandDamage();
|
||||
setSingleAnimeParam(ANM_CUT_FINISHING_BLOW_STAB, &daAlinkHIO_cutDown_c0::m.mLandAnm);
|
||||
|
||||
u32 var_r30;
|
||||
if (mDemo.getDemoMode() == 0x51 || (i_enemy != NULL && i_enemy->checkDownFlg() &&
|
||||
mSwordTopPos.abs2XZ(i_enemy->getDownPos()) < 10000.0f &&
|
||||
fabsf(i_enemy->current.pos.y - current.pos.y) < 100.0f))
|
||||
{
|
||||
field_0x300e.x = 1;
|
||||
if (i_enemy != NULL) {
|
||||
i_enemy->onCutDownHitFlg();
|
||||
|
||||
csXyz angle(0x4000, shape_angle.y, 0);
|
||||
i_dComIfGp_setHitMark(3, NULL, &i_enemy->getDownPos(), &angle, NULL, 0);
|
||||
}
|
||||
|
||||
var_r30 = 0x20;
|
||||
field_0x3008 = daAlinkHIO_cutDown_c0::m.mSuccessStopTime;
|
||||
dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f));
|
||||
} else {
|
||||
var_r30 = mPolySound;
|
||||
field_0x300e.x = 0;
|
||||
field_0x3008 = daAlinkHIO_cutDown_c0::m.mFailStopTime;
|
||||
}
|
||||
|
||||
mZ2Link.startCollisionSE(Z2SE_HIT_SWORD_STAB, var_r30);
|
||||
field_0x300c = 0;
|
||||
mNormalSpeed = 0.0f;
|
||||
|
||||
i_offResetFlg0(RFLG0_UNK_8000000);
|
||||
field_0x2f9d = 4;
|
||||
|
||||
setFootEffectProcType(2);
|
||||
i_onResetFlg1(RFLG1_UNK_30);
|
||||
field_0x300e.y = 0;
|
||||
|
||||
dComIfGp_setPlayerStatus1(0, 0x400000);
|
||||
field_0x3588 = l_halfAtnWaitBaseAnime;
|
||||
field_0x2f99 = 4;
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1664,8 +2058,61 @@ asm int daAlink_c::procCutDownLandInit(fopEn_enemy_c* param_0) {
|
||||
#include "asm/d/a/d_a_alink/procCutDownLandInit__9daAlink_cFP13fopEn_enemy_c.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D5ADC-800D5C88 0D041C 01AC+00 1/0 0/0 0/0 .text procCutDownLand__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutDownLand() {
|
||||
if (checkGroundSpecialMode()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
||||
field_0x2f99 = 4;
|
||||
|
||||
if (field_0x300c != 0) {
|
||||
i_onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
}
|
||||
|
||||
if (checkAnmEnd(frameCtrl_p)) {
|
||||
if (field_0x300c == 0) {
|
||||
if (field_0x3008 != 0) {
|
||||
field_0x3008--;
|
||||
} else if (field_0x300e.x != 0) {
|
||||
if (mDemo.getDemoMode() == 0x51) {
|
||||
dComIfGp_evmng_cutEnd(field_0x3184);
|
||||
} else {
|
||||
procBackJumpInit(1);
|
||||
}
|
||||
} else {
|
||||
setSingleAnimeParam(ANM_CUT_FINISHING_BLOW_MISS,
|
||||
&daAlinkHIO_cutDown_c0::m.mMissAnm);
|
||||
field_0x300c = 1;
|
||||
}
|
||||
} else {
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else if (field_0x300c != 0) {
|
||||
if (frameCtrl_p->getFrame() >= 37.0f) {
|
||||
field_0x300e.y = 0;
|
||||
} else if (frameCtrl_p->getFrame() >= 30.0f) {
|
||||
field_0x300e.y = 254;
|
||||
}
|
||||
|
||||
if (frameCtrl_p->checkPass(54.0f)) {
|
||||
seStartSwordCut(Z2SE_SWORD_STICK_PULLOUT);
|
||||
}
|
||||
|
||||
if (frameCtrl_p->getFrame() > daAlinkHIO_cutDown_c0::m.mMissAnm.mCheckFrame) {
|
||||
onModeFlg(4);
|
||||
checkNextAction(1);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1674,8 +2121,57 @@ asm int daAlink_c::procCutDownLand() {
|
||||
#include "asm/d/a/d_a_alink/procCutDownLand__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D5C88-800D5FC8 0D05C8 0340+00 2/1 0/0 0/0 .text procCutHeadInit__9daAlink_cFv */
|
||||
// small regalloc
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procCutHeadInit() {
|
||||
fopEn_enemy_c* enemy_p = (fopEn_enemy_c*)mTargetedActor;
|
||||
|
||||
if (mDemo.getDemoMode() == 0x53 && (mProcID == PROC_CUT_HEAD || mProcID == PROC_CUT_HEAD_LAND))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_CUT_HEAD);
|
||||
resetCombo(1);
|
||||
setSingleAnimeParam(ANM_CUT_HEAD_JUMP, &daAlinkHIO_cutHead_c0::m.mJumpAnm);
|
||||
setSpecialGravity(daAlinkHIO_cutHead_c0::m.mGravity, mMaxFallSpeed, 0);
|
||||
|
||||
cXyz sp2C;
|
||||
if (enemy_p != NULL) {
|
||||
sp2C = enemy_p->getHeadLockPos() - current.pos;
|
||||
field_0x280c.setData(enemy_p);
|
||||
} else {
|
||||
sp2C.set(cM_ssin(shape_angle.y) * 200.0f, 200.0f, cM_scos(shape_angle.y) * 200.0f);
|
||||
field_0x280c.clearData();
|
||||
}
|
||||
|
||||
f32 fvar9 = cLib_minMaxLimit(sp2C.y, 30.0f, daAlinkHIO_cutHead_c0::m.mMaxHeight);
|
||||
f32 fvar10 = JMAFastSqrt((fvar9 * -2.0f) / mGravity);
|
||||
speed.y = fvar10 * -mGravity;
|
||||
|
||||
f32 fvar5 = sp2C.absXZ();
|
||||
if (fvar5 > daAlinkHIO_cutHead_c0::m.mMaxDistance) {
|
||||
fvar5 = daAlinkHIO_cutHead_c0::m.mMaxDistance;
|
||||
}
|
||||
|
||||
field_0x3478 = (fvar5 * 2.0f) / (fvar10 * 3.0f * fvar10);
|
||||
mNormalSpeed = field_0x3478 * fvar10 * 2.0f;
|
||||
field_0x300e.x = 0;
|
||||
|
||||
current.angle.y = sp2C.atan2sX_Z();
|
||||
shape_angle.y = current.angle.y;
|
||||
|
||||
setSwordVoiceSe(Z2SE_AL_V_KABUTO_JUMP);
|
||||
setSwordAtParam(dCcG_At_Spl_UNK_1, 3, 1, 3, daAlinkHIO_cutHead_c0::m.mSwordLength,
|
||||
daAlinkHIO_cutHead_c0::m.mSwordRadius);
|
||||
setCutType(5);
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -1684,6 +2180,7 @@ asm int daAlink_c::procCutHeadInit() {
|
||||
#include "asm/d/a/d_a_alink/procCutHeadInit__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800D5FC8-800D6130 0D0908 0168+00 1/0 0/0 0/0 .text procCutHead__9daAlink_cFv */
|
||||
int daAlink_c::procCutHead() {
|
||||
@@ -1711,7 +2208,8 @@ int daAlink_c::procCutHead() {
|
||||
}
|
||||
|
||||
if (frameCtrl->getFrame() >= daAlinkHIO_cutHead_c0::m.mAttackStartFrame &&
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutHead_c0::m.mAttackEndFrame) {
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutHead_c0::m.mAttackEndFrame)
|
||||
{
|
||||
if (!i_checkNoResetFlg0(FLG0_UNK_40)) {
|
||||
seStartSwordCut(Z2SE_AL_SWORD_SWING_L);
|
||||
}
|
||||
@@ -1794,7 +2292,8 @@ int daAlink_c::procCutLargeJumpCharge() {
|
||||
*/
|
||||
int daAlink_c::procCutLargeJumpInit() {
|
||||
if (mDemo.getDemoMode() == 0x56 &&
|
||||
(mProcID == PROC_CUT_LARGE_JUMP || mProcID == PROC_CUT_LARGE_JUMP_LAND)) {
|
||||
(mProcID == PROC_CUT_LARGE_JUMP || mProcID == PROC_CUT_LARGE_JUMP_LAND))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1847,7 +2346,8 @@ int daAlink_c::procCutLargeJump() {
|
||||
}
|
||||
|
||||
if (frameCtrl->getFrame() >= daAlinkHIO_cutLargeJump_c0::m.mJumpAttackStartFrame &&
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutLargeJump_c0::m.mJumpAttackEndFrame) {
|
||||
frameCtrl->getFrame() < daAlinkHIO_cutLargeJump_c0::m.mJumpAttackEndFrame)
|
||||
{
|
||||
if (!i_checkNoResetFlg0(FLG0_UNK_40)) {
|
||||
seStartSwordCut(Z2SE_AL_SWORD_SWING_S);
|
||||
}
|
||||
@@ -1922,7 +2422,9 @@ int daAlink_c::procCutLargeJumpLand() {
|
||||
} else {
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else if (frameCtrl->getFrame() > daAlinkHIO_cutLargeJump_c0::m.mSpinSlashCheckFrame && field_0x3198 != 2) {
|
||||
} else if (frameCtrl->getFrame() > daAlinkHIO_cutLargeJump_c0::m.mSpinSlashCheckFrame &&
|
||||
field_0x3198 != 2)
|
||||
{
|
||||
procCutTurnInit(1, field_0x3198);
|
||||
} else if (frameCtrl->getFrame() > daAlinkHIO_cutLargeJump_c0::m.mLandAnm.mCheckFrame) {
|
||||
checkNextAction(1);
|
||||
@@ -1997,10 +2499,13 @@ int daAlink_c::procSwordUnequipSp() {
|
||||
}
|
||||
} else {
|
||||
field_0x3198 = 1;
|
||||
setSingleAnimeBaseSpeed(ANM_FINISH_END, daAlinkHIO_cut_c0::m.mFlourishEndAnmSpeed, lit_6109);
|
||||
setSingleAnimeBaseSpeed(ANM_FINISH_END, daAlinkHIO_cut_c0::m.mFlourishEndAnmSpeed,
|
||||
lit_6109);
|
||||
}
|
||||
} else if (field_0x3198 != 0) {
|
||||
if (!(frameCtrl->getFrame() > daAlinkHIO_cut_c0::m.mFlourishControlStartFrame) || !checkNextAction(1)) {
|
||||
if (!(frameCtrl->getFrame() > daAlinkHIO_cut_c0::m.mFlourishControlStartFrame) ||
|
||||
!checkNextAction(1))
|
||||
{
|
||||
if (frameCtrl->getFrame() >= lit_8779) {
|
||||
field_0x2f92 = 1;
|
||||
} else if (frameCtrl->getFrame() >= lit_8780) {
|
||||
@@ -2031,7 +2536,9 @@ int daAlink_c::procSwordUnequipSp() {
|
||||
|
||||
if (frameCtrl->checkPass(lit_8502) || frameCtrl->checkPass(lit_8781)) {
|
||||
seStartSwordCut(0x20006);
|
||||
} else if (frameCtrl->checkPass(lit_8784) || frameCtrl->checkPass(lit_8785) || frameCtrl->checkPass(lit_8786)) {
|
||||
} else if (frameCtrl->checkPass(lit_8784) || frameCtrl->checkPass(lit_8785) ||
|
||||
frameCtrl->checkPass(lit_8786))
|
||||
{
|
||||
seStartSwordCut(0x20007);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,7 +301,7 @@ asm void daAlink_c::setGrabItemThrow() {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void daAlink_c::checkUpperGrabItemThrow(f32 param_0) {
|
||||
asm BOOL daAlink_c::checkUpperGrabItemThrow(f32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/a/d_a_alink/checkUpperGrabItemThrow__9daAlink_cFf.s"
|
||||
}
|
||||
|
||||
+1296
-337
File diff suppressed because it is too large
Load Diff
@@ -27,31 +27,88 @@ void daAlink_c::multVecMagneBootInvMtx(cXyz* vec) {
|
||||
|
||||
/* 800E24B0-800E251C 0DCDF0 006C+00 2/2 0/0 0/0 .text
|
||||
* commonMagneLineCheck__9daAlink_cFP4cXyzP4cXyz */
|
||||
int daAlink_c::commonMagneLineCheck(cXyz* i_start, cXyz* i_end) {
|
||||
bool daAlink_c::commonMagneLineCheck(cXyz* i_start, cXyz* i_end) {
|
||||
mMagneLineChk.Set(i_start, i_end, this);
|
||||
|
||||
if (dComIfG_Bgsp().LineCross(&mMagneLineChk) && daTagMagne_c::checkMagnetCode(mMagneLineChk)) {
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* 800E251C-800E2580 0DCE5C 0064+00 2/2 0/0 0/0 .text checkBootsMoveAnime__9daAlink_cFi
|
||||
*/
|
||||
BOOL daAlink_c::checkBootsMoveAnime(int param_0) {
|
||||
return (checkHeavyStateOn(param_0, 1) && !i_checkNoResetFlg0(FLG0_UNDERWATER)) || checkDkCaught2Anime();
|
||||
return (checkHeavyStateOn(param_0, 1) && !i_checkNoResetFlg0(FLG0_UNDERWATER)) ||
|
||||
checkDkCaught2Anime();
|
||||
}
|
||||
|
||||
/* 800E2580-800E2738 0DCEC0 01B8+00 17/17 0/0 0/0 .text setHeavyBoots__9daAlink_cFi */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::setHeavyBoots(int param_0) {
|
||||
if (i_checkEquipHeavyBoots()) {
|
||||
i_offNoResetFlg0(FLG0_EQUIP_HVY_BOOTS);
|
||||
mZ2Link.setLinkBootsType(0);
|
||||
|
||||
if (field_0x06e0 != NULL) {
|
||||
field_0x06e0->show();
|
||||
|
||||
if (checkZoraWearMaskDraw()) {
|
||||
field_0x06e4->show();
|
||||
}
|
||||
}
|
||||
|
||||
if (i_checkModeFlg(0x40000) && !checkHookshotItem(mEquipItem)) {
|
||||
deleteEquipItem(TRUE, FALSE);
|
||||
}
|
||||
|
||||
if (i_checkNoResetFlg0(FLG0_UNDERWATER) && !i_dComIfGp_checkPlayerStatus1(0, 0x2000000)) {
|
||||
return procSwimWaitInit(0);
|
||||
}
|
||||
|
||||
if (i_checkMagneBootsOn()) {
|
||||
if (cancelMagneBootsOn()) {
|
||||
return procFallInit(1, 5.0f);
|
||||
}
|
||||
|
||||
if (mProcID != PROC_BOOTS_EQUIP) {
|
||||
procWaitInit();
|
||||
field_0x2060->initOldFrameMorf(3.0f, 0, 35);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} else if (param_0) {
|
||||
i_onNoResetFlg0(FLG0_EQUIP_HVY_BOOTS);
|
||||
mZ2Link.setLinkBootsType(1);
|
||||
|
||||
if (field_0x06e0 != NULL) {
|
||||
field_0x06e0->hide();
|
||||
|
||||
if (field_0x06e4 != NULL) {
|
||||
field_0x06e4->hide();
|
||||
}
|
||||
}
|
||||
|
||||
if (i_checkModeFlg(0x40000)) {
|
||||
i_offNoResetFlg0(FLG0_UNK_100);
|
||||
mZ2Link.setInWater(true);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void daAlink_c::setHeavyBoots(int param_0) {
|
||||
asm int daAlink_c::setHeavyBoots(int param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/a/d_a_alink/setHeavyBoots__9daAlink_cFi.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800E2738-800E2808 0DD078 00D0+00 2/2 0/0 0/0 .text getMagneBootsLocalAngleY__9daAlink_cFsi */
|
||||
// matches with literals
|
||||
@@ -82,6 +139,101 @@ asm s16 daAlink_c::getMagneBootsLocalAngleY(s16 param_0, int param_1) {
|
||||
|
||||
/* 800E2808-800E2DC4 0DD148 05BC+00 3/3 0/0 0/0 .text
|
||||
* setMagneBootsMtx__9daAlink_cFP13cBgS_PolyInfoi */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* i_polyinfo, int param_1) {
|
||||
cM3dGPla poly;
|
||||
dComIfG_Bgsp().GetTriPla(*i_polyinfo, &poly);
|
||||
|
||||
s16 var_r28 = cM_atan2s(poly.mNormal.absXZ(), poly.mNormal.y);
|
||||
int temp_r3_2 = abs(var_r28);
|
||||
if (temp_r3_2 < 500) {
|
||||
var_r28 = 0;
|
||||
} else if (temp_r3_2 > 0x7E0B) {
|
||||
var_r28 = -0x8000;
|
||||
}
|
||||
|
||||
if (var_r28 != 0 && var_r28 != -0x8000) {
|
||||
field_0x3116 = poly.mNormal.atan2sX_Z();
|
||||
} else if (param_1) {
|
||||
field_0x3116 = 0;
|
||||
}
|
||||
|
||||
if (param_1) {
|
||||
if (mProcID == PROC_MAGNE_BOOTS_FLY) {
|
||||
cLib_addCalcAngleS(&field_0x3114, var_r28, 5, 0x1000, 0x100);
|
||||
} else {
|
||||
field_0x3114 = var_r28;
|
||||
}
|
||||
} else {
|
||||
// D_MN54 is the E3 Goron Mines Demo map
|
||||
if (checkStageName("D_MN54") && getMoveBGActorName(*i_polyinfo, 1) == PROC_Obj_MagneArm) {
|
||||
i_fopAcM_onSwitch(this, 0x93);
|
||||
}
|
||||
|
||||
field_0x3114 = var_r28;
|
||||
|
||||
f32 temp_f1 = mMagneBootsTopVec.inprod(poly.mNormal);
|
||||
if (!(fabsf(temp_f1) > 0.9999f)) {
|
||||
cXyz sp44 = mMagneBootsTopVec.outprod(poly.mNormal);
|
||||
sp44.normalizeZP();
|
||||
|
||||
f32 var_f1_2 = JMAFastSqrt(1.0f - temp_f1 * temp_f1);
|
||||
f32 temp_f1_2 = cM_atan2f(var_f1_2, temp_f1);
|
||||
f32 var_f2 = temp_f1_2 * 0.2f;
|
||||
|
||||
if (var_f2 > 0.4f) {
|
||||
var_f2 = 0.4f;
|
||||
} else if (var_f2 < 0.025f) {
|
||||
var_f2 = 0.025f;
|
||||
|
||||
if (0.025f > temp_f1_2) {
|
||||
var_f2 = temp_f1_2;
|
||||
}
|
||||
}
|
||||
|
||||
cXyz sp40;
|
||||
mDoMtx_stack_c::rotAxisRadS(&sp44, var_f2);
|
||||
mDoMtx_stack_c::concat(mMagneBootMtx);
|
||||
mDoMtx_copy(mDoMtx_stack_c::get(), mMagneBootMtx);
|
||||
mDoMtx_multVec(mMagneBootMtx, &cXyz::BaseY, &sp40);
|
||||
|
||||
field_0x3114 = cM_atan2s(sp40.absXZ(), sp40.y);
|
||||
|
||||
int temp_r3_4 = abs(field_0x3114);
|
||||
if (temp_r3_4 < 500) {
|
||||
field_0x3114 = 0;
|
||||
} else if (temp_r3_4 > 0x7E0B) {
|
||||
field_0x3114 = -0x8000;
|
||||
}
|
||||
|
||||
if (field_0x3114 != 0 && field_0x3114 != -0x8000) {
|
||||
field_0x3116 = sp40.atan2sX_Z();
|
||||
} else {
|
||||
field_0x3116 = 0;
|
||||
}
|
||||
|
||||
mDoMtx_stack_c::YrotS(field_0x3116);
|
||||
mDoMtx_stack_c::XrotM(-field_0x3114);
|
||||
mDoMtx_stack_c::YrotM(-field_0x3116);
|
||||
mDoMtx_stack_c::concat(mMagneBootMtx);
|
||||
mDoMtx_stack_c::multVecSR(&cXyz::BaseZ, &sp40);
|
||||
|
||||
s16 angle = sp40.atan2sX_Z();
|
||||
shape_angle.y += angle;
|
||||
current.angle.y += angle;
|
||||
field_0x2fe6 += angle;
|
||||
field_0x310c += angle;
|
||||
}
|
||||
}
|
||||
|
||||
mDoMtx_YrotS(mMagneBootMtx, field_0x3116);
|
||||
mDoMtx_XrotM(mMagneBootMtx, field_0x3114);
|
||||
mDoMtx_YrotM(mMagneBootMtx, -field_0x3116);
|
||||
mDoMtx_inverse(mMagneBootMtx, mMagneBootInvMtx);
|
||||
mDoMtx_multVec(mMagneBootMtx, &cXyz::BaseY, &mMagneBootsTopVec);
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -90,23 +242,69 @@ asm void daAlink_c::setMagneBootsMtx(cBgS_PolyInfo* param_0, int param_1) {
|
||||
#include "asm/d/a/d_a_alink/setMagneBootsMtx__9daAlink_cFP13cBgS_PolyInfoi.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800E2DC4-800E2F88 0DD704 01C4+00 7/7 0/0 0/0 .text cancelMagneBootsOn__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::cancelMagneBootsOn() {
|
||||
i_offNoResetFlg0(FLG0_MAGNE_BOOTS_ON);
|
||||
mZ2Link.setMagnetized(false);
|
||||
|
||||
if (field_0x3114 == -0x8000) {
|
||||
setOldRootQuaternion(field_0x3114, 0, 0);
|
||||
} else {
|
||||
s16 var_r31 = shape_angle.y - field_0x3116;
|
||||
setOldRootQuaternion(0, var_r31, 0);
|
||||
setOldRootQuaternion(field_0x3114, 0, 0);
|
||||
setOldRootQuaternion(0, -var_r31, 0);
|
||||
}
|
||||
|
||||
field_0x3114 = 0;
|
||||
|
||||
if (!cBgW_CheckBGround(mMagneBootsTopVec.y)) {
|
||||
current.pos += mMagneBootsTopVec * 100.0f;
|
||||
mLinkGndChk.SetPos(¤t.pos);
|
||||
|
||||
f32 gnd_cross = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
|
||||
current.pos.y -= 100.0f;
|
||||
if (gnd_cross > current.pos.y) {
|
||||
current.pos.y = gnd_cross;
|
||||
}
|
||||
|
||||
next.pos = current.pos;
|
||||
field_0x3798 = current.pos;
|
||||
mMagneBootsTopVec = cXyz::BaseY;
|
||||
|
||||
if (checkUpperReadyThrowAnime()) {
|
||||
resetUpperAnime(UPPER_2, 3.0f);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
mMagneBootsTopVec = cXyz::BaseY;
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void daAlink_c::cancelMagneBootsOn() {
|
||||
asm int daAlink_c::cancelMagneBootsOn() {
|
||||
nofralloc
|
||||
#include "asm/d/a/d_a_alink/cancelMagneBootsOn__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800E2F88-800E3048 0DD8C8 00C0+00 1/1 0/0 0/0 .text checkMagneBootsFly__9daAlink_cFv */
|
||||
int daAlink_c::checkMagneBootsFly() {
|
||||
if (field_0x2fb8 != 0 && i_checkEquipHeavyBoots() && !checkDeadHP() && mProcID != PROC_MAGNE_BOOTS_FLY && !checkEventRun()) {
|
||||
if (field_0x2fb8 != 0 && i_checkEquipHeavyBoots() && !checkDeadHP() &&
|
||||
mProcID != PROC_MAGNE_BOOTS_FLY && !checkEventRun())
|
||||
{
|
||||
cXyz vec(field_0x369c);
|
||||
vec.normalizeZP();
|
||||
|
||||
|
||||
if (mMagneBootsTopVec.getDotProduct(vec) > lit_8131 && procMagneBootsFlyInit()) {
|
||||
return 1;
|
||||
}
|
||||
@@ -132,6 +330,33 @@ int daAlink_c::procBootsEquipInit() {
|
||||
}
|
||||
|
||||
/* 800E30DC-800E3218 0DDA1C 013C+00 1/0 0/0 0/0 .text procBootsEquip__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procBootsEquip() {
|
||||
daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl;
|
||||
i_onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
|
||||
if (checkAnmEnd(frameCtrl_p)) {
|
||||
checkNextAction(0);
|
||||
} else if (frameCtrl_p->checkPass(10.0f)) {
|
||||
setHeavyBoots(1);
|
||||
} else if (frameCtrl_p->checkPass(16.0f)) {
|
||||
if (i_checkNoResetFlg0(FLG0_EQUIP_HVY_BOOTS)) {
|
||||
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
|
||||
offModeFlg(2);
|
||||
} else if (frameCtrl_p->getFrame() > daAlinkHIO_magneBoots_c0::m.mEquipAnm.mCheckFrame) {
|
||||
onModeFlg(4);
|
||||
checkNextAction(1);
|
||||
} else if (frameCtrl_p->getFrame() >= 5.0f) {
|
||||
field_0x2f92 = 1;
|
||||
field_0x2f93 = 6;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -140,9 +365,57 @@ asm int daAlink_c::procBootsEquip() {
|
||||
#include "asm/d/a/d_a_alink/procBootsEquip__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800E3218-800E3454 0DDB58 023C+00 1/1 0/0 0/0 .text procMagneBootsFlyInit__9daAlink_cFv
|
||||
*/
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procMagneBootsFlyInit() {
|
||||
cXyz sp44 = field_0x369c.normZP();
|
||||
cM3dGPla sp50(&sp44, -sp44.inprod(field_0x3834));
|
||||
sp44 = field_0x36b4 + field_0x369c;
|
||||
|
||||
cXyz sp38;
|
||||
if (!sp50.crossInfLin(field_0x36b4, sp44, sp38)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
sp44 = sp38 + (field_0x369c * 2.0f);
|
||||
|
||||
if (!commonMagneLineCheck(&sp38, &sp44)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (i_checkMagneBootsOn()) {
|
||||
i_offNoResetFlg0(FLG0_MAGNE_BOOTS_ON);
|
||||
mZ2Link.setMagnetized(true);
|
||||
}
|
||||
|
||||
commonProcInit(PROC_MAGNE_BOOTS_FLY);
|
||||
|
||||
dComIfG_Bgsp().GetTriPla(mMagneLineChk, &sp50);
|
||||
mPolyInfo2.SetPolyInfo(mMagneLineChk);
|
||||
field_0x37c8 = mMagneLineChk.i_GetCross();
|
||||
|
||||
setSpecialGravity(0.0f, mMaxFallSpeed, 0);
|
||||
speed.y = 0.0f;
|
||||
mNormalSpeed = 0.0f;
|
||||
|
||||
setSingleAnimeBase(ANM_MG_KICK);
|
||||
if (mEquipItem != 0x103 && !checkBowItem(mEquipItem)) {
|
||||
deleteEquipItem(FALSE, TRUE);
|
||||
} else {
|
||||
offKandelaarModel();
|
||||
}
|
||||
|
||||
field_0x3478 = 0.0f;
|
||||
field_0x594 = daAlinkHIO_magneBoots_c0::m.mMaxMagneFlySpeed;
|
||||
field_0x300c = 0;
|
||||
voiceStart(Z2SE_AL_V_MAGNET_CAUGHT);
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -151,8 +424,49 @@ asm int daAlink_c::procMagneBootsFlyInit() {
|
||||
#include "asm/d/a/d_a_alink/procMagneBootsFlyInit__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 800E3454-800E3760 0DDD94 030C+00 1/0 0/0 0/0 .text procMagneBootsFly__9daAlink_cFv */
|
||||
// matches with literals
|
||||
#ifdef NONMATCHING
|
||||
int daAlink_c::procMagneBootsFly() {
|
||||
field_0x3478 += daAlinkHIO_magneBoots_c0::m.mMagneFlyAccelRate;
|
||||
if (field_0x3478 > field_0x594) {
|
||||
field_0x3478 = field_0x594;
|
||||
}
|
||||
|
||||
if (dComIfG_Bgsp().ChkPolySafe(mPolyInfo2) && i_checkEquipHeavyBoots()) {
|
||||
if (dComIfG_Bgsp().ChkMoveBG(mPolyInfo2)) {
|
||||
cXyz old_37c8(field_0x37c8);
|
||||
dComIfG_Bgsp().MoveBgTransPos(mPolyInfo2, true, &field_0x37c8, NULL, NULL);
|
||||
current.pos += field_0x37c8 - old_37c8;
|
||||
}
|
||||
|
||||
setMagneBootsMtx(&mPolyInfo2, 1);
|
||||
} else {
|
||||
cancelMagneBootsOn();
|
||||
return procFallInit(1, 5.0f);
|
||||
}
|
||||
|
||||
cLib_chasePos(¤t.pos, field_0x37c8, field_0x3478);
|
||||
if (field_0x37c8.abs(current.pos) < 50.0f) {
|
||||
current.pos = field_0x37c8;
|
||||
i_onNoResetFlg0(FLG0_MAGNE_BOOTS_ON);
|
||||
mZ2Link.setMagnetized(true);
|
||||
procLandDamageInit(0);
|
||||
} else {
|
||||
cXyz sp24;
|
||||
mDoMtx_multVecZero(mpLinkModel->i_getAnmMtx(0), &sp24);
|
||||
sp24 = field_0x37c8 - sp24;
|
||||
|
||||
cLib_addCalcAngleS(&shape_angle.x, sp24.atan2sY_XZ() + -0x4000, 5, 0x1000, 0x100);
|
||||
cLib_addCalcAngleS(&shape_angle.y, sp24.atan2sX_Z(), 5, 0x1000, 0x100);
|
||||
field_0x300c += 0x1C00;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -160,4 +474,5 @@ asm int daAlink_c::procMagneBootsFly() {
|
||||
nofralloc
|
||||
#include "asm/d/a/d_a_alink/procMagneBootsFly__9daAlink_cFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
@@ -40,7 +40,7 @@ BOOL e_wb_class::checkDownDamage() {
|
||||
return mActionID != ACT_PL_RIDE && mActionID != 0x66 && mActionID != ACT_S_DAMAGE;
|
||||
}
|
||||
|
||||
u8 e_wb_class::checkNormalRideMode() const {
|
||||
BOOL e_wb_class::checkNormalRideMode() const {
|
||||
return mActionID != 0x66 || field_0x5b4 < 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -679,7 +679,7 @@ int daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, s16 p
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, s16 param_4) {
|
||||
asm int daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, s16 param_4) {
|
||||
nofralloc
|
||||
#include "asm/d/a/d_a_player/daPy_addCalcShort__FPsssss.s"
|
||||
}
|
||||
|
||||
+2
-1
@@ -4440,7 +4440,8 @@ asm void daHorse_c::getLashDashStart() const {
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void std::fabs(f32 param_0) {
|
||||
// asm void std::fabs(f32 param_0) {
|
||||
extern "C" asm void fabs__3stdFf() {
|
||||
nofralloc
|
||||
#include "asm/d/d_camera/fabs__3stdFf.s"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user