From cc6bb81a73dee2bcfa448a634897635694ab10c7 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Tue, 12 Sep 2017 21:46:54 +0900 Subject: [PATCH] Reimplement Exponential scoring with a simpler and more intuitive calculation Default for all rulesets for now. --- .../Scoring/OsuScoreProcessor.cs | 8 ------- osu.Game/Rulesets/Scoring/ScoreProcessor.cs | 22 +++++++++++++++---- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs index 84c8c50dd4..2c941bf13a 100644 --- a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs +++ b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs @@ -17,8 +17,6 @@ namespace osu.Game.Rulesets.Osu.Scoring { internal class OsuScoreProcessor : ScoreProcessor { - public readonly Bindable Mode = new Bindable(ScoringMode.Exponential); - protected override double ComboPortion => 0.7; protected override double AccuracyPortion => 0.3; @@ -100,11 +98,5 @@ namespace osu.Game.Rulesets.Osu.Scoring break; } } - - public enum ScoringMode - { - Standardised, - Exponential - } } } diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs index b1859195ef..b12f730511 100644 --- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs +++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs @@ -139,6 +139,8 @@ namespace osu.Game.Rulesets.Scoring { private const double max_score = 1000000; + public readonly Bindable Mode = new Bindable(ScoringMode.Exponential); + protected virtual double ComboPortion => 0.5f; protected virtual double AccuracyPortion => 0.5f; @@ -222,10 +224,16 @@ namespace osu.Game.Rulesets.Scoring if (judgement.AffectsAccuracy && judgement.IsHit) Hits++; - TotalScore.Value = - max_score * (ComboPortion * comboScore / maxComboScore - + AccuracyPortion * Hits / MaxHits) - + bonusScore; + switch (Mode.Value) + { + case ScoringMode.Standardised: + TotalScore.Value = + max_score * (ComboPortion * comboScore / maxComboScore + AccuracyPortion * Hits / MaxHits) + bonusScore; + break; + case ScoringMode.Exponential: + TotalScore.Value = (comboScore + bonusScore) * Math.Log(HighestCombo + 1, 2); + break; + } } protected override void Reset() @@ -236,4 +244,10 @@ namespace osu.Game.Rulesets.Scoring comboScore = 0; } } + + public enum ScoringMode + { + Standardised, + Exponential + } }