diff --git a/osu.Game/Rulesets/Scoring/DrainingHealthProcessor.cs b/osu.Game/Rulesets/Scoring/DrainingHealthProcessor.cs
index 629a84ea62..92a064385b 100644
--- a/osu.Game/Rulesets/Scoring/DrainingHealthProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/DrainingHealthProcessor.cs
@@ -142,6 +142,11 @@ namespace osu.Game.Rulesets.Scoring
}
}
+ protected override bool CanFailOn(JudgementResult result)
+ {
+ return !result.Judgement.MaxResult.IsBonus() && result.Type != HitResult.IgnoreHit;
+ }
+
protected override void Reset(bool storeResults)
{
base.Reset(storeResults);
diff --git a/osu.Game/Rulesets/Scoring/HealthProcessor.cs b/osu.Game/Rulesets/Scoring/HealthProcessor.cs
index b5eb755650..ccf53f075a 100644
--- a/osu.Game/Rulesets/Scoring/HealthProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/HealthProcessor.cs
@@ -50,7 +50,7 @@ namespace osu.Game.Rulesets.Scoring
Health.Value += GetHealthIncreaseFor(result);
- if (meetsAnyFailCondition(result))
+ if (CanFailOn(result) && meetsAnyFailCondition(result))
TriggerFailure();
}
@@ -68,6 +68,13 @@ namespace osu.Game.Rulesets.Scoring
/// The health increase.
protected virtual double GetHealthIncreaseFor(JudgementResult result) => result.HealthIncrease;
+ ///
+ /// Whether a failure can occur on a given .
+ /// If the return value of this method is , neither nor will be checked
+ /// after this .
+ ///
+ protected virtual bool CanFailOn(JudgementResult result) => true;
+
///
/// The default conditions for failing.
///