1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 11:37:28 +08:00

Add per-ruleset score multipliers for classic scoring

This commit is contained in:
Dan Balasescu 2022-03-10 10:26:09 +09:00
parent df500dec04
commit c36badab4b
5 changed files with 13 additions and 1 deletions

View File

@ -7,5 +7,6 @@ namespace osu.Game.Rulesets.Catch.Scoring
{ {
public class CatchScoreProcessor : ScoreProcessor public class CatchScoreProcessor : ScoreProcessor
{ {
protected override double ClassicScoreMultiplier => 28;
} }
} }

View File

@ -10,5 +10,7 @@ namespace osu.Game.Rulesets.Mania.Scoring
protected override double DefaultAccuracyPortion => 0.99; protected override double DefaultAccuracyPortion => 0.99;
protected override double DefaultComboPortion => 0.01; protected override double DefaultComboPortion => 0.01;
protected override double ClassicScoreMultiplier => 16;
} }
} }

View File

@ -11,6 +11,8 @@ namespace osu.Game.Rulesets.Osu.Scoring
{ {
public class OsuScoreProcessor : ScoreProcessor public class OsuScoreProcessor : ScoreProcessor
{ {
protected override double ClassicScoreMultiplier => 36;
protected override HitEvent CreateHitEvent(JudgementResult result) protected override HitEvent CreateHitEvent(JudgementResult result)
=> base.CreateHitEvent(result).With((result as OsuHitCircleJudgementResult)?.CursorPositionAtHit); => base.CreateHitEvent(result).With((result as OsuHitCircleJudgementResult)?.CursorPositionAtHit);

View File

@ -10,5 +10,7 @@ namespace osu.Game.Rulesets.Taiko.Scoring
protected override double DefaultAccuracyPortion => 0.75; protected override double DefaultAccuracyPortion => 0.75;
protected override double DefaultComboPortion => 0.25; protected override double DefaultComboPortion => 0.25;
protected override double ClassicScoreMultiplier => 22;
} }
} }

View File

@ -76,6 +76,11 @@ namespace osu.Game.Rulesets.Scoring
/// </summary> /// </summary>
protected virtual double DefaultComboPortion => 0.7; protected virtual double DefaultComboPortion => 0.7;
/// <summary>
/// An arbitrary multiplier to scale scores in the <see cref="ScoringMode.Classic"/> scoring mode.
/// </summary>
protected virtual double ClassicScoreMultiplier => 36;
private readonly double accuracyPortion; private readonly double accuracyPortion;
private readonly double comboPortion; private readonly double comboPortion;
@ -246,7 +251,7 @@ namespace osu.Game.Rulesets.Scoring
// This gives a similar feeling to osu!stable scoring (ScoreV1) while keeping classic scoring as only a constant multiple of standardised scoring. // This gives a similar feeling to osu!stable scoring (ScoreV1) while keeping classic scoring as only a constant multiple of standardised scoring.
// The invariant is important to ensure that scores don't get re-ordered on leaderboards between the two scoring modes. // The invariant is important to ensure that scores don't get re-ordered on leaderboards between the two scoring modes.
double scaledStandardised = GetScore(ScoringMode.Standardised, accuracyRatio, comboRatio, statistics) / max_score; double scaledStandardised = GetScore(ScoringMode.Standardised, accuracyRatio, comboRatio, statistics) / max_score;
return Math.Pow(scaledStandardised * totalHitObjects, 2) * 36; return Math.Pow(scaledStandardised * totalHitObjects, 2) * ClassicScoreMultiplier;
} }
} }