mirror of
https://github.com/osukey/osukey.git
synced 2025-06-05 21:07:18 +09:00
Scale classic score by hitobject count
This commit is contained in:
parent
85e2f68a64
commit
c3b365cf6b
@ -212,7 +212,7 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
|
|
||||||
private double getScore(ScoringMode mode)
|
private double getScore(ScoringMode mode)
|
||||||
{
|
{
|
||||||
return GetScore(mode, maxAchievableCombo,
|
return GetScore(mode,
|
||||||
calculateAccuracyRatio(baseScore),
|
calculateAccuracyRatio(baseScore),
|
||||||
calculateComboRatio(HighestCombo.Value),
|
calculateComboRatio(HighestCombo.Value),
|
||||||
scoreResultCounts);
|
scoreResultCounts);
|
||||||
@ -222,12 +222,11 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
/// Computes the total score.
|
/// Computes the total score.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="mode">The <see cref="ScoringMode"/> to compute the total score in.</param>
|
/// <param name="mode">The <see cref="ScoringMode"/> to compute the total score in.</param>
|
||||||
/// <param name="maxCombo">The maximum combo achievable in the beatmap.</param>
|
|
||||||
/// <param name="accuracyRatio">The accuracy percentage achieved by the player.</param>
|
/// <param name="accuracyRatio">The accuracy percentage achieved by the player.</param>
|
||||||
/// <param name="comboRatio">The proportion of <paramref name="maxCombo"/> achieved by the player.</param>
|
/// <param name="comboRatio">The proportion of the max combo achieved by the player.</param>
|
||||||
/// <param name="statistics">Any statistics to be factored in.</param>
|
/// <param name="statistics">Any statistics to be factored in.</param>
|
||||||
/// <returns>The total score.</returns>
|
/// <returns>The total score.</returns>
|
||||||
public double GetScore(ScoringMode mode, int maxCombo, double accuracyRatio, double comboRatio, Dictionary<HitResult, int> statistics)
|
public double GetScore(ScoringMode mode, double accuracyRatio, double comboRatio, Dictionary<HitResult, int> statistics)
|
||||||
{
|
{
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
@ -238,10 +237,12 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
return (max_score * (accuracyScore + comboScore) + getBonusScore(statistics)) * scoreMultiplier;
|
return (max_score * (accuracyScore + comboScore) + getBonusScore(statistics)) * scoreMultiplier;
|
||||||
|
|
||||||
case ScoringMode.Classic:
|
case ScoringMode.Classic:
|
||||||
|
int totalHitObjects = statistics.Where(k => k.Key >= HitResult.Miss && k.Key <= HitResult.Perfect).Sum(k => k.Value);
|
||||||
|
|
||||||
// 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, maxCombo, accuracyRatio, comboRatio, statistics) / max_score;
|
double scaledStandardised = GetScore(ScoringMode.Standardised, accuracyRatio, comboRatio, statistics) / max_score;
|
||||||
return Math.Pow(scaledStandardised * (maxCombo + 1), 2) * 18;
|
return Math.Pow(scaledStandardised * totalHitObjects, 2) * 36;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +266,7 @@ namespace osu.Game.Rulesets.Scoring
|
|||||||
computedBaseScore += Judgement.ToNumericResult(pair.Key) * pair.Value;
|
computedBaseScore += Judgement.ToNumericResult(pair.Key) * pair.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetScore(mode, maxAchievableCombo, calculateAccuracyRatio(computedBaseScore), calculateComboRatio(maxCombo), statistics);
|
return GetScore(mode, calculateAccuracyRatio(computedBaseScore), calculateComboRatio(maxCombo), statistics);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -184,7 +184,7 @@ namespace osu.Game.Scoring
|
|||||||
var scoreProcessor = ruleset.CreateScoreProcessor();
|
var scoreProcessor = ruleset.CreateScoreProcessor();
|
||||||
scoreProcessor.Mods.Value = score.Mods;
|
scoreProcessor.Mods.Value = score.Mods;
|
||||||
|
|
||||||
return (long)Math.Round(scoreProcessor.GetScore(mode, beatmapMaxCombo, accuracy, (double)score.MaxCombo / beatmapMaxCombo, score.Statistics));
|
return (long)Math.Round(scoreProcessor.GetScore(mode, accuracy, (double)score.MaxCombo / beatmapMaxCombo, score.Statistics));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user