diff --git a/osu.Game/Rulesets/Judgements/JudgementResult.cs b/osu.Game/Rulesets/Judgements/JudgementResult.cs
index 1b915d52b7..b781a13929 100644
--- a/osu.Game/Rulesets/Judgements/JudgementResult.cs
+++ b/osu.Game/Rulesets/Judgements/JudgementResult.cs
@@ -94,6 +94,11 @@ namespace osu.Game.Rulesets.Judgements
///
public bool IsHit => Type.IsHit();
+ ///
+ /// The increase in health resulting from this judgement result.
+ ///
+ public double HealthIncrease => Judgement.HealthIncreaseFor(this);
+
///
/// Creates a new .
///
diff --git a/osu.Game/Rulesets/Scoring/HealthProcessor.cs b/osu.Game/Rulesets/Scoring/HealthProcessor.cs
index 3e0b6433c2..b5eb755650 100644
--- a/osu.Game/Rulesets/Scoring/HealthProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/HealthProcessor.cs
@@ -66,7 +66,7 @@ namespace osu.Game.Rulesets.Scoring
///
/// The .
/// The health increase.
- protected virtual double GetHealthIncreaseFor(JudgementResult result) => result.Judgement.HealthIncreaseFor(result);
+ protected virtual double GetHealthIncreaseFor(JudgementResult result) => result.HealthIncrease;
///
/// The default conditions for failing.
diff --git a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
index 6fc957874a..71996718d9 100644
--- a/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
+++ b/osu.Game/Screens/Play/HUD/ArgonHealthDisplay.cs
@@ -136,7 +136,12 @@ namespace osu.Game.Screens.Play.HUD
BarHeight.BindValueChanged(_ => updateContentSize(), true);
}
- private void onNewJudgement(JudgementResult result) => pendingMissAnimation |= !result.IsHit;
+ private void onNewJudgement(JudgementResult result)
+ {
+ // Check the health increase because cases like osu!catch bananas fire `IgnoreMiss`,
+ // which counts as a miss but doesn't actually subtract any health.
+ pendingMissAnimation |= !result.IsHit && result.HealthIncrease < 0;
+ }
protected override void Update()
{