diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index fd851f2cbb..5ca33ff0bc 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -95,7 +95,7 @@ namespace osu.Game.Rulesets.Scoring
///
/// Whether this ScoreProcessor has already triggered the failed state.
///
- public virtual bool HasFailed { get; private set; }
+ public virtual bool HasFailed { get; protected set; }
///
/// The default conditions for failing.
@@ -309,6 +309,7 @@ namespace osu.Game.Rulesets.Scoring
}
private readonly Dictionary scoreResultCounts = new Dictionary();
+ private Judgement hasFailedAtJudgement;
///
/// Applies the score change of a to this .
@@ -317,7 +318,12 @@ namespace osu.Game.Rulesets.Scoring
protected virtual void ApplyResult(JudgementResult result)
{
if (HasFailed)
+ {
+ if (hasFailedAtJudgement == null)
+ hasFailedAtJudgement = result.Judgement;
+
return;
+ }
result.ComboAtJudgement = Combo.Value;
result.HighestComboAtJudgement = HighestCombo.Value;
@@ -365,6 +371,17 @@ namespace osu.Game.Rulesets.Scoring
/// The judgement scoring result.
protected virtual void RevertResult(JudgementResult result)
{
+ if (HasFailed)
+ {
+ if (hasFailedAtJudgement == result.Judgement)
+ {
+ hasFailedAtJudgement = null;
+ HasFailed = false;
+ }
+
+ return;
+ }
+
Combo.Value = result.ComboAtJudgement;
HighestCombo.Value = result.HighestComboAtJudgement;
Health.Value = result.HealthAtJudgement;