Skip to content

Commit

Permalink
Removes the logic that mimics the Hellfire oversight
Browse files Browse the repository at this point in the history
  • Loading branch information
kphoenix137 authored Sep 15, 2024
1 parent b6dee54 commit fc45738
Showing 1 changed file with 13 additions and 24 deletions.
37 changes: 13 additions & 24 deletions Source/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,30 +168,19 @@ void StartAttack(Player &player, Direction d, bool includesFirstFrame)
}

int8_t skippedAnimationFrames = 0;
if (includesFirstFrame) {
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FastestAttack) && HasAnyOf(player._pIFlags, ItemSpecialEffect::QuickAttack | ItemSpecialEffect::FastAttack)) {
// Combining Fastest Attack with any other attack speed modifier skips over the fourth frame, reducing the effectiveness of Fastest Attack.
// Faster Attack makes up for this by also skipping the sixth frame so this case only applies when using Quick or Fast Attack modifiers.
skippedAnimationFrames = 3;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FastestAttack)) {
skippedAnimationFrames = 4;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FasterAttack)) {
skippedAnimationFrames = 3;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FastAttack)) {
skippedAnimationFrames = 2;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::QuickAttack)) {
skippedAnimationFrames = 1;
}
} else {
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FasterAttack)) {
// The combination of Faster and Fast Attack doesn't result in more skipped frames, because the second frame skip of Faster Attack is not triggered.
skippedAnimationFrames = 2;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FastAttack)) {
skippedAnimationFrames = 1;
} else if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FastestAttack)) {
// Fastest Attack is skipped if Fast or Faster Attack is also specified, because both skip the frame that triggers Fastest Attack skipping.
skippedAnimationFrames = 2;
}
const auto flags = player._pIFlags;

// If the first frame is not included in vanilla, the skip logic for the first frame will not be executed.
// This will result in a different and slower attack speed.
if (HasAnyOf(flags, ItemSpecialEffect::FastestAttack)) {
// If the fastest attack logic is trigger frames in vanilla two frames are skipped, so missing the first frame reduces the skip logic by two frames.
skippedAnimationFrames = includesFirstFrame ? 4 : 2;
} else if (HasAnyOf(flags, ItemSpecialEffect::FasterAttack)) {
skippedAnimationFrames = includesFirstFrame ? 3 : 2;
} else if (HasAnyOf(flags, ItemSpecialEffect::FastAttack)) {
skippedAnimationFrames = includesFirstFrame ? 2 : 1;
} else if (HasAnyOf(flags, ItemSpecialEffect::QuickAttack)) {
skippedAnimationFrames = includesFirstFrame ? 1 : 0;
}

auto animationFlags = AnimationDistributionFlags::ProcessAnimationPending;
Expand Down

0 comments on commit fc45738

Please sign in to comment.