diff --git a/osu.Game.Rulesets.Catch/Judgements/CatchBananaJudgement.cs b/osu.Game.Rulesets.Catch/Judgements/CatchBananaJudgement.cs
index f6d90df0a9..40696d4837 100644
--- a/osu.Game.Rulesets.Catch/Judgements/CatchBananaJudgement.cs
+++ b/osu.Game.Rulesets.Catch/Judgements/CatchBananaJudgement.cs
@@ -9,6 +9,7 @@ namespace osu.Game.Rulesets.Catch.Judgements
public class CatchBananaJudgement : CatchJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
protected override int NumericResultFor(HitResult result)
{
diff --git a/osu.Game.Rulesets.Catch/Judgements/CatchBananaShowerJudgement.cs b/osu.Game.Rulesets.Catch/Judgements/CatchBananaShowerJudgement.cs
index 7903aba7c1..36a4fef80c 100644
--- a/osu.Game.Rulesets.Catch/Judgements/CatchBananaShowerJudgement.cs
+++ b/osu.Game.Rulesets.Catch/Judgements/CatchBananaShowerJudgement.cs
@@ -9,6 +9,7 @@ namespace osu.Game.Rulesets.Catch.Judgements
public class CatchBananaShowerJudgement : CatchJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
public CatchBananaShowerJudgement()
{
diff --git a/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgement.cs b/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgement.cs
index 9630ba9273..9c78360911 100644
--- a/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgement.cs
+++ b/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgement.cs
@@ -8,6 +8,8 @@ namespace osu.Game.Rulesets.Mania.Judgements
public class HoldNoteJudgement : ManiaJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
+
protected override int NumericResultFor(HitResult result) => 0;
}
}
diff --git a/osu.Game.Rulesets.Mania/Judgements/HoldNoteTickJudgement.cs b/osu.Game.Rulesets.Mania/Judgements/HoldNoteTickJudgement.cs
index 6eb5a79200..5d38e70d01 100644
--- a/osu.Game.Rulesets.Mania/Judgements/HoldNoteTickJudgement.cs
+++ b/osu.Game.Rulesets.Mania/Judgements/HoldNoteTickJudgement.cs
@@ -8,6 +8,7 @@ namespace osu.Game.Rulesets.Mania.Judgements
public class HoldNoteTickJudgement : ManiaJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
protected override int NumericResultFor(HitResult result) => 20;
}
diff --git a/osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs b/osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs
index c4e265aac9..fc85ec8764 100644
--- a/osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs
+++ b/osu.Game.Rulesets.Osu/Judgements/OsuSliderTailJudgement.cs
@@ -8,6 +8,8 @@ namespace osu.Game.Rulesets.Osu.Judgements
public class OsuSliderTailJudgement : OsuJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
+
protected override int NumericResultFor(HitResult result) => 0;
}
}
diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs
index 446dd0d11b..17bd2d9608 100644
--- a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs
+++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs
@@ -8,6 +8,7 @@ namespace osu.Game.Rulesets.Taiko.Judgements
public class TaikoDrumRollTickJudgement : TaikoJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
protected override int NumericResultFor(HitResult result)
{
diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
index 288ad236aa..dbfd38e6f9 100644
--- a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
+++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
@@ -6,6 +6,7 @@ namespace osu.Game.Rulesets.Taiko.Judgements
public class TaikoStrongHitJudgement : TaikoJudgement
{
public override bool AffectsCombo => false;
+ public override bool IsBonus => true;
public TaikoStrongHitJudgement()
{
diff --git a/osu.Game/Rulesets/Judgements/Judgement.cs b/osu.Game/Rulesets/Judgements/Judgement.cs
index 587f2c8d15..3d70b23773 100644
--- a/osu.Game/Rulesets/Judgements/Judgement.cs
+++ b/osu.Game/Rulesets/Judgements/Judgement.cs
@@ -46,10 +46,14 @@ namespace osu.Game.Rulesets.Judgements
///
/// Whether the should affect the combo portion of the score.
- /// If false, the will be considered for the bonus portion of the score.
///
public virtual bool AffectsCombo => true;
+ ///
+ /// Whether the should be counted as base or bonus score.
+ ///
+ public virtual bool IsBonus => false;
+
///
/// The numeric representation for the result achieved.
///
diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index 345930ed04..1fba936032 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -256,13 +256,19 @@ namespace osu.Game.Rulesets.Scoring
break;
}
- baseScore += judgement.NumericResult;
- rollingMaxBaseScore += judgement.MaxNumericResult;
-
JudgedHits++;
}
- else if (judgement.IsHit)
- bonusScore += judgement.NumericResult;
+
+ if (judgement.IsBonus)
+ {
+ if (judgement.IsHit)
+ bonusScore += judgement.NumericResult;
+ }
+ else
+ {
+ baseScore += judgement.NumericResult;
+ rollingMaxBaseScore += judgement.MaxNumericResult;
+ }
}
///
@@ -275,14 +281,18 @@ namespace osu.Game.Rulesets.Scoring
HighestCombo.Value = judgement.HighestComboAtJudgement;
if (judgement.AffectsCombo)
+ JudgedHits--;
+
+ if (judgement.IsBonus)
+ {
+ if (judgement.IsHit)
+ bonusScore -= judgement.NumericResult;
+ }
+ else
{
baseScore -= judgement.NumericResult;
rollingMaxBaseScore -= judgement.MaxNumericResult;
-
- JudgedHits--;
}
- else if (judgement.IsHit)
- bonusScore -= judgement.NumericResult;
}
private void updateScore()