diff options
| author | robojumper <robojumper@gmail.com> | 2026-01-01 14:01:07 +0100 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2026-01-28 19:14:18 +0100 |
| commit | 0927e0ba4a276ff7be971ceb99e4fa7df13733a9 (patch) | |
| tree | a3b589494edceaa0ef267e65145ab504c722b06b /src | |
| parent | 81a599e313d14944b490280834b64126c2466c1b (diff) | |
Verify and fix some matches
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/a/b/d_a_b_lastboss.cpp | 103 |
1 files changed, 84 insertions, 19 deletions
diff --git a/src/REL/d/a/b/d_a_b_lastboss.cpp b/src/REL/d/a/b/d_a_b_lastboss.cpp index 36b2956f..6d614d1f 100644 --- a/src/REL/d/a/b/d_a_b_lastboss.cpp +++ b/src/REL/d/a/b/d_a_b_lastboss.cpp @@ -1105,9 +1105,9 @@ void dAcBlastboss_c::executeState_Fight() { } if (field_0x117C == 0) { - if (!fn_143_75A0()) { + if (!checkForRangeAttack()) { checkForCloseRangeAttack(); - fn_143_77C0(); + checkForCounter(); } mCc1.SetTgFlag_0xA(0x1FF); } else { @@ -1208,7 +1208,7 @@ void dAcBlastboss_c::executeState_Attack() { mCc1.SetTgFlag_0xA(0x1); } } - fn_143_77C0(); + checkForCounter(); } void dAcBlastboss_c::finalizeState_Attack() {} @@ -1286,7 +1286,7 @@ void dAcBlastboss_c::executeState_CounterAttack() { } else if (b) { mCc1.SetTgFlag_0xA(0x1FF); field_0x1142 = 0; - fn_143_77C0(); + checkForCounter(); } if (mMdl.getAnm().isStop()) { @@ -1535,7 +1535,7 @@ void dAcBlastboss_c::executeState_Guard() { setAnm(sGuardNames[field_0x1144], 3.0f); mTimers[TIMER_0] = 14; } else { - setAnm(sGuardNames[field_0x1144], 3.0f); + forceSetAnm(sGuardNames[field_0x1144], 3.0f); } mSubState = SUB_STATE_1; // fall-through @@ -1558,7 +1558,7 @@ void dAcBlastboss_c::executeState_Guard() { } if (!link->isAttackingJumpSlash()) { - fn_143_77C0(); + checkForCounter(); } break; } @@ -1616,7 +1616,7 @@ void dAcBlastboss_c::executeState_Guard() { } mCc1.SetTgFlag_0xA(sGuardFlags[field_0x1144]); - fn_143_75A0(); + checkForRangeAttack(); } void dAcBlastboss_c::finalizeState_Guard() {} @@ -1654,7 +1654,7 @@ void dAcBlastboss_c::executeState_GuardBreak() { } sLib::addCalcScaled(&mSpeed, 1.0f, 4.0f); mCc1.SetTgFlag_0xA(0x1FF); - fn_143_77C0(); + checkForCounter(); } void dAcBlastboss_c::finalizeState_GuardBreak() {} @@ -1678,7 +1678,7 @@ void dAcBlastboss_c::executeState_Damage() { if (field_0x1149 == 0 && !link->isAttackingSpin()) { mCc1.SetTgFlag_0xA(0x1FF); } - fn_143_77C0(); + checkForCounter(); } void dAcBlastboss_c::finalizeState_Damage() {} @@ -1715,19 +1715,19 @@ void dAcBlastboss_c::executeState_SitDamage() { mStateMgr.changeState(StateID_Fight); mTimers[TIMER_4] = 15; } - fn_143_77C0(); + checkForCounter(); mCc1.SetTgFlag_0xA(0x1FF); return; } case SUB_STATE_5: { if (field_0x1137 == 0) { - setAnm("ChanceDamageU", 2.0f); + forceSetAnm("ChanceDamageU", 2.0f); } else if (field_0x1137 == 1) { - setAnm("ChanceDamageR", 2.0f); + forceSetAnm("ChanceDamageR", 2.0f); } else if (field_0x1137 == 2) { - setAnm("ChanceDamageL", 2.0f); + forceSetAnm("ChanceDamageL", 2.0f); } else { - setAnm("ChanceDamageD", 2.0f); + forceSetAnm("ChanceDamageD", 2.0f); } mSubState = SUB_STATE_6; break; @@ -1991,7 +1991,7 @@ void dAcBlastboss_c::executeState_Stun() { sLib::addCalcScaled(&mSpeed, 1.0f, 10.0f); if (mChanceAttackCounter >= 7) { mCc1.SetTgFlag_0xA(0x1FF); - fn_143_77C0(); + checkForCounter(); } else { if (field_0x1143 != 0) { mCc1.SetTgFlag_0xA(0x1FF); @@ -2046,7 +2046,7 @@ void dAcBlastboss_c::executeState_ThunderWait() { case SUB_STATE_5: { if (mMdl.getAnm().getFrame() >= 20.0f) { mCc1.SetTgFlag_0xA(0x1FF); - fn_143_77C0(); + checkForCounter(); } if (mMdl.getAnm().isStop()) { mStateMgr.changeState(StateID_Fight); @@ -2146,7 +2146,6 @@ bool dAcBlastboss_c::checkDamage() { if (fn_143_9570(attackDir) == fn_143_9570(mLastAttackDir)) { x = 1; } - // TODO the branches here are wrong if (field_0x1136 >= x || (field_0x11D8 >= 0 && (fn_143_9570(field_0x11D8) & 2) == (fn_143_9570(attackDir) & 2))) { mSubState = SUB_STATE_0; @@ -2425,7 +2424,7 @@ bool dAcBlastboss_c::checkForCloseRangeAttack() { return ret; } -bool dAcBlastboss_c::fn_143_75A0() { +bool dAcBlastboss_c::checkForRangeAttack() { dAcPy_c *link = dAcPy_c::GetLinkM(); bool ret = false; @@ -2469,7 +2468,73 @@ bool dAcBlastboss_c::fn_143_75A0() { return ret; } -bool dAcBlastboss_c::fn_143_77C0() {} +bool dAcBlastboss_c::checkForCounter() { + bool ret = false; + + if (field_0x113E != 0) { + return false; + } + + f32 attackRange = 450.0f; + if (dAcPy_c::GetLinkM()->isAttackingJumpSlash()) { + attackRange = 750.0f; + } + + if (mXZDistanceToLink < attackRange) { + dAcPy_c *link = dAcPy_c::GetLinkM(); + if (link->checkFlags0x354(0x04)) { + if (link->isAttackingSpin()) { + field_0x11A4 = 15.0f; + } else if (link->isAttacking()) { + field_0x11A4 = 7.0f; + } + + s32 attackDir = link->getSpecificAttackDirection(); + + if (mStateMgr.isState(StateID_Attack)) { + if (mpCurrentAnm == "AttackR" && + (attackDir == dAcPy_c::ATTACK_DIRECTION_RIGHT || attackDir == dAcPy_c::ATTACK_DIRECTION_UPRIGHT || + attackDir == dAcPy_c::ATTACK_DIRECTION_DOWNRIGHT)) { + field_0x1144 = 0; + } else if (mpCurrentAnm == "AttackL" && (attackDir == dAcPy_c::ATTACK_DIRECTION_LEFT || + attackDir == dAcPy_c::ATTACK_DIRECTION_UPLEFT || + attackDir == dAcPy_c::ATTACK_DIRECTION_DOWNLEFT)) { + field_0x1144 = 3; + } else if (mpCurrentAnm == "AttackU" && attackDir == daPlayerActBase_c::ATTACK_DIRECTION_DOWN) { + field_0x1144 = 6; + } else { + return false; + } + + mStateMgr.changeState(StateID_Guard); + mSubState = SUB_STATE_10; + } else { + if ((field_0x1149 > 0 || mXZDistanceToLink < 200.0f) && field_0x1135 < 1) { + field_0x1135 = 1; + } + + switch (attackDir) { + case daPlayerActBase_c::ATTACK_DIRECTION_DOWN: field_0x1144 = 6; break; + case daPlayerActBase_c::ATTACK_DIRECTION_LEFT: field_0x1144 = 3; break; + case daPlayerActBase_c::ATTACK_DIRECTION_DOWNLEFT: field_0x1144 = 4; break; + case daPlayerActBase_c::ATTACK_DIRECTION_UPLEFT: field_0x1144 = 5; break; + case daPlayerActBase_c::ATTACK_DIRECTION_RIGHT: field_0x1144 = 0; break; + case daPlayerActBase_c::ATTACK_DIRECTION_DOWNRIGHT: field_0x1144 = 1; break; + case daPlayerActBase_c::ATTACK_DIRECTION_UPRIGHT: field_0x1144 = 2; break; + case daPlayerActBase_c::ATTACK_DIRECTION_UP: field_0x1144 = 7; break; + default: field_0x1144 = 8; break; + } + if (!mStateMgr.isState(StateID_Guard)) { + mStateMgr.changeState(StateID_Guard); + } + + mSubState = SUB_STATE_0; + } + ret = true; + } + } + return ret; +} void dAcBlastboss_c::fn_143_7B00() {} |
