diff --git a/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs b/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs
index 13c5028b23..778a7426aa 100644
--- a/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs
+++ b/osu.Game.Rulesets.Catch/Scoring/CatchScoreProcessor.cs
@@ -26,12 +26,10 @@ namespace osu.Game.Rulesets.Catch.Scoring
hpDrainRate = beatmap.BeatmapInfo.BaseDifficulty.DrainRate;
}
- protected override double HpFactorFor(Judgement judgement, HitResult result)
+ protected override double HpFactorFor(JudgementResult result)
{
- switch (result)
+ switch (result.Type)
{
- case HitResult.Miss when judgement.IsBonus:
- return 0;
case HitResult.Miss:
return hpDrainRate;
default:
diff --git a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
index 75a73614f0..ee4618e5c2 100644
--- a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
+++ b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
@@ -3,7 +3,6 @@
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Judgements;
-using osu.Game.Rulesets.Mania.Judgements;
using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Scoring;
@@ -28,36 +27,6 @@ namespace osu.Game.Rulesets.Mania.Scoring
///
private const double hp_multiplier_max = 1;
- ///
- /// The default BAD hit HP increase.
- ///
- private const double hp_increase_bad = 0.005;
-
- ///
- /// The default OK hit HP increase.
- ///
- private const double hp_increase_ok = 0.010;
-
- ///
- /// The default GOOD hit HP increase.
- ///
- private const double hp_increase_good = 0.035;
-
- ///
- /// The default tick hit HP increase.
- ///
- private const double hp_increase_tick = 0.040;
-
- ///
- /// The default GREAT hit HP increase.
- ///
- private const double hp_increase_great = 0.055;
-
- ///
- /// The default PERFECT hit HP increase.
- ///
- private const double hp_increase_perfect = 0.065;
-
///
/// The MISS HP multiplier at OD = 0.
///
@@ -73,11 +42,6 @@ namespace osu.Game.Rulesets.Mania.Scoring
///
private const double hp_multiplier_miss_max = 1;
- ///
- /// The default MISS HP increase.
- ///
- private const double hp_increase_miss = -0.125;
-
///
/// The MISS HP multiplier. This is multiplied to the miss hp increase.
///
@@ -88,10 +52,6 @@ namespace osu.Game.Rulesets.Mania.Scoring
///
private double hpMultiplier = 1;
- public ManiaScoreProcessor()
- {
- }
-
public ManiaScoreProcessor(DrawableRuleset drawableRuleset)
: base(drawableRuleset)
{
@@ -122,8 +82,8 @@ namespace osu.Game.Rulesets.Mania.Scoring
}
}
- protected override double HpFactorFor(Judgement judgement, HitResult result)
- => result == HitResult.Miss ? hpMissMultiplier : hpMultiplier;
+ protected override double HpFactorFor(JudgementResult result)
+ => result.Type == HitResult.Miss ? hpMissMultiplier : hpMultiplier;
public override HitWindows CreateHitWindows() => new ManiaHitWindows();
}
diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs
index a4975ef3b3..2162663539 100644
--- a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs
+++ b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs
@@ -37,8 +37,6 @@ namespace osu.Game.Rulesets.Osu.Scoring
comboResultCounts.Clear();
}
- private const double harshness = 0.01;
-
protected override void ApplyResult(JudgementResult result)
{
base.ApplyResult(result);
@@ -49,9 +47,9 @@ namespace osu.Game.Rulesets.Osu.Scoring
comboResultCounts[osuResult.ComboType] = comboResultCounts.GetOrDefault(osuResult.ComboType) + 1;
}
- protected override double HpFactorFor(Judgement judgement, HitResult result)
+ protected override double HpFactorFor(JudgementResult result)
{
- switch (result)
+ switch (result.Type)
{
case HitResult.Great:
return 10.2 - hpDrainRate;
diff --git a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
index a0055a93aa..b2b866db4b 100644
--- a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
+++ b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs
@@ -46,8 +46,8 @@ namespace osu.Game.Rulesets.Taiko.Scoring
hpMissMultiplier = BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, 0.0018, 0.0075, 0.0120);
}
- protected override double HpFactorFor(Judgement judgement, HitResult result)
- => result == HitResult.Miss ? hpMissMultiplier : hpMultiplier;
+ protected override double HpFactorFor(JudgementResult result)
+ => result.Type == HitResult.Miss ? hpMissMultiplier : hpMultiplier;
protected override void Reset(bool storeResults)
{
diff --git a/osu.Game/Rulesets/Judgements/JudgementResult.cs b/osu.Game/Rulesets/Judgements/JudgementResult.cs
index d4ef5750b1..195fe316ac 100644
--- a/osu.Game/Rulesets/Judgements/JudgementResult.cs
+++ b/osu.Game/Rulesets/Judgements/JudgementResult.cs
@@ -37,6 +37,11 @@ namespace osu.Game.Rulesets.Judgements
///
public int HighestComboAtJudgement { get; internal set; }
+ ///
+ /// The health prior to this occurring.
+ ///
+ public double HealthAtJudgement { get; internal set; }
+
///
/// Whether a miss or hit occurred.
///
diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index 1a682080bf..429aa620f6 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -206,9 +206,6 @@ namespace osu.Game.Rulesets.Scoring
private double baseScore;
private double bonusScore;
- private double rollingHp;
- private double rollingMaxHp;
-
protected ScoreProcessor()
{
}
@@ -304,6 +301,7 @@ namespace osu.Game.Rulesets.Scoring
{
result.ComboAtJudgement = Combo.Value;
result.HighestComboAtJudgement = HighestCombo.Value;
+ result.HealthAtJudgement = Health.Value;
JudgedHits++;
@@ -336,8 +334,7 @@ namespace osu.Game.Rulesets.Scoring
rollingMaxBaseScore += result.Judgement.MaxNumericResult;
}
- rollingHp += HpFactorFor(result.Judgement, result.Type) * result.Judgement.HealthIncreaseFor(result);
- rollingMaxHp += HpFactorFor(result.Judgement, result.Judgement.MaxResult) * result.Judgement.MaxHealthIncrease;
+ Health.Value += HpFactorFor(result) * result.Judgement.HealthIncreaseFor(result);
}
///
@@ -349,6 +346,7 @@ namespace osu.Game.Rulesets.Scoring
{
Combo.Value = result.ComboAtJudgement;
HighestCombo.Value = result.HighestComboAtJudgement;
+ Health.Value = result.HealthAtJudgement;
JudgedHits--;
@@ -362,12 +360,9 @@ namespace osu.Game.Rulesets.Scoring
baseScore -= result.Judgement.NumericResultFor(result);
rollingMaxBaseScore -= result.Judgement.MaxNumericResult;
}
-
- rollingHp -= HpFactorFor(result.Judgement, result.Type) * result.Judgement.HealthIncreaseFor(result);
- rollingMaxHp -= HpFactorFor(result.Judgement, result.Judgement.MaxResult) * result.Judgement.MaxHealthIncrease;
}
- protected virtual double HpFactorFor(Judgement judgement, HitResult result) => 1;
+ protected virtual double HpFactorFor(JudgementResult result) => 1;
private void updateScore()
{