From ba3e44cd71f6e6a7d1f5600537ed8b74299ccf90 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Wed, 13 Sep 2017 15:17:32 +0900 Subject: [PATCH] Simplify standardized scoring to BasePortion (raw scoring) + ComboPortion (highest combo) --- .../Scoring/ManiaScoreProcessor.cs | 4 +-- .../Scoring/OsuScoreProcessor.cs | 2 +- .../Scoring/TaikoScoreProcessor.cs | 2 +- osu.Game/Rulesets/Scoring/ScoreProcessor.cs | 31 +++++++++---------- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs index ff9dcdc682..857616ad9a 100644 --- a/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs +++ b/osu.Game.Rulesets.Mania/Scoring/ManiaScoreProcessor.cs @@ -89,8 +89,8 @@ internal class ManiaScoreProcessor : ScoreProcessor /// private double hpMultiplier = 1; - protected override double ComboPortion => 0.2f; - protected override double AccuracyPortion => 0.8f; + protected override double BasePortion => 0.8; + protected override double ComboPortion => 0.2; public ManiaScoreProcessor() { diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs index da474dac65..3d30293d4b 100644 --- a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs +++ b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs @@ -16,8 +16,8 @@ namespace osu.Game.Rulesets.Osu.Scoring { internal class OsuScoreProcessor : ScoreProcessor { + protected override double BasePortion => 0.3; protected override double ComboPortion => 0.7; - protected override double AccuracyPortion => 0.3; public OsuScoreProcessor() { diff --git a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs index f31cd2d634..31e3c435b4 100644 --- a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs +++ b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs @@ -55,8 +55,8 @@ internal class TaikoScoreProcessor : ScoreProcessor /// public override bool HasFailed => Hits == MaxHits && Health.Value <= 0.5; + protected override double BasePortion => 0.8; protected override double ComboPortion => 0.2; - protected override double AccuracyPortion => 0.8; private double hpIncreaseTick; private double hpIncreaseGreat; diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs index 448cb56e0c..a0b24c52df 100644 --- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs +++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs @@ -156,16 +156,17 @@ public abstract class ScoreProcessor : ScoreProcessor protected sealed override bool HasCompleted => Hits == MaxHits; + protected virtual double BasePortion => 0.5f; protected virtual double ComboPortion => 0.5f; - protected virtual double AccuracyPortion => 0.5f; protected int MaxHits { get; private set; } protected int Hits { get; private set; } private double maxHighestCombo; - private double maxComboScore; - private double rollingMaxComboScore; - private double comboScore; + + private double maxBaseScore; + private double rollingMaxBaseScore; + private double baseScore; protected ScoreProcessor() { @@ -216,8 +217,8 @@ protected virtual void OnNewJudgement(Judgement judgement) break; } - comboScore += judgement.NumericResult; - rollingMaxComboScore += judgement.MaxNumericResult; + baseScore += judgement.NumericResult; + rollingMaxBaseScore += judgement.MaxNumericResult; } else if (judgement.IsHit) bonusScore += judgement.NumericResult; @@ -225,20 +226,16 @@ protected virtual void OnNewJudgement(Judgement judgement) if (judgement.AffectsAccuracy) Hits++; - if (rollingMaxComboScore != 0) - Accuracy.Value = comboScore / rollingMaxComboScore; + if (rollingMaxBaseScore != 0) + Accuracy.Value = baseScore / rollingMaxBaseScore; switch (Mode.Value) { case ScoringMode.Standardised: - TotalScore.Value = - max_score * - (ComboPortion * (comboScore * Math.Log(HighestCombo + 1, 2)) / (maxComboScore * Math.Log(maxHighestCombo + 1, 2)) - + AccuracyPortion * Accuracy) - + bonusScore; + TotalScore.Value = max_score * (BasePortion * baseScore / maxBaseScore + ComboPortion * HighestCombo / maxHighestCombo) + bonusScore; break; case ScoringMode.Exponential: - TotalScore.Value = (comboScore + bonusScore) * Math.Log(HighestCombo + 1, 2); + TotalScore.Value = (baseScore + bonusScore) * Math.Log(HighestCombo + 1, 2); break; } } @@ -249,14 +246,14 @@ protected override void Reset(bool storeResults) { MaxHits = Hits; maxHighestCombo = HighestCombo; - maxComboScore = comboScore; + maxBaseScore = baseScore; } base.Reset(storeResults); Hits = 0; - comboScore = 0; - rollingMaxComboScore = 0; + baseScore = 0; + rollingMaxBaseScore = 0; } }