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)