diff --git a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
index 752e3bee26..0e5df329d8 100644
--- a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
+++ b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
@@ -53,7 +53,7 @@ namespace osu.Game.Rulesets.Taiko.Scoring
///
/// Taiko fails at the end of the map if the player has not half-filled their HP bar.
///
- public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5;
+ protected override bool FailCondition => Hits == MaxHits && Health.Value <= 0.5;
private double hpIncreaseTick;
private double hpIncreaseGreat;
diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index 0b631a7148..934b19b511 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -69,7 +69,12 @@ namespace osu.Game.Rulesets.Scoring
///
/// Whether the score is in a failed state.
///
- public virtual bool HasFailed => Health.Value == Health.MinValue;
+ public virtual bool HasFailed => alreadyFailed;
+
+ ///
+ /// The conditions for failing
+ ///
+ protected virtual bool FailCondition => Health.Value == Health.MinValue;
///
/// Whether this ScoreProcessor has already triggered the failed state.
@@ -121,7 +126,7 @@ namespace osu.Game.Rulesets.Scoring
///
protected void UpdateFailed()
{
- if (alreadyFailed || !HasFailed)
+ if (alreadyFailed || !FailCondition)
return;
if (Failed?.Invoke() != false)