diff --git a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
index 1be92f6dc4..12c8386ae7 100644
--- a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
+++ b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs
@@ -3,6 +3,7 @@
using System;
using osu.Game.Beatmaps;
+using osu.Game.Database;
using osu.Game.Rulesets.Mania.Judgements;
using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Objects.Drawables;
@@ -39,6 +40,71 @@ namespace osu.Game.Rulesets.Mania.Scoring
///
private const int combo_relevance_cap = 400;
+ ///
+ /// The hit HP multiplier at OD = 0.
+ ///
+ private const double hp_multiplier_min = 0.75;
+
+ ///
+ /// The hit HP multiplier at OD = 0.
+ ///
+ private const double hp_multiplier_mid = 0.85;
+
+ ///
+ /// The hit HP multiplier at OD = 0.
+ ///
+ 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.
+ ///
+ private const double hp_multiplier_miss_min = 0.5;
+
+ ///
+ /// The MISS HP multiplier at OD = 5.
+ ///
+ private const double hp_multiplier_miss_mid = 0.75;
+
+ ///
+ /// The MISS HP multiplier at OD = 10.
+ ///
+ private const double hp_multiplier_miss_max = 1;
+
+ ///
+ /// The default MISS HP increase.
+ ///
+ private const double hp_increase_miss = -0.125;
+
///
/// The cumulative combo portion of the score.
///
@@ -55,21 +121,35 @@ namespace osu.Game.Rulesets.Mania.Scoring
///
private double bonusScore;
+ ///
+ /// The achieved by a perfect playthrough.
+ ///
private double maxComboPortion;
+
+ ///
+ /// The portion of the score dedicated to combo.
+ ///
private double comboPortion;
+
+ ///
+ /// The achieved by a perfect playthrough.
+ ///
private int maxTotalHits;
+
+ ///
+ /// The total hits.
+ ///
private int totalHits;
- private double hpMultiplier = 1;
- private const double hp_increase_bad = 0.005;
- private const double hp_increase_ok = 0.010;
- private const double hp_increase_good = 0.035;
- private const double hp_increase_tick = 0.040;
- private const double hp_increase_great = 0.055;
- private const double hp_increase_perfect = 0.065;
-
+ ///
+ /// The MISS HP multiplier.
+ ///
private double hpMissMultiplier = 1;
- private const double hp_increase_miss = -0.125;
+
+ ///
+ /// The HIT HP multiplier.
+ ///
+ private double hpMultiplier = 1;
public ManiaScoreProcessor()
{
@@ -82,6 +162,10 @@ namespace osu.Game.Rulesets.Mania.Scoring
protected override void ComputeTargets(Beatmap beatmap)
{
+ BeatmapDifficulty difficulty = beatmap.BeatmapInfo.Difficulty;
+ hpMultiplier = BeatmapDifficulty.DifficultyRange(difficulty.DrainRate, hp_multiplier_min, hp_multiplier_mid, hp_multiplier_max);
+ hpMissMultiplier = BeatmapDifficulty.DifficultyRange(difficulty.DrainRate, hp_multiplier_miss_min, hp_multiplier_miss_mid, hp_multiplier_miss_max);
+
while (true)
{
foreach (var obj in beatmap.HitObjects)