1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-13 07:17:28 +08:00

Switch to using deviation on notes and heads for multiplier scaling

This commit is contained in:
Natelytle 2023-08-02 00:51:28 -04:00
parent c20e1508dd
commit 9cc6a3a4c0
2 changed files with 11 additions and 3 deletions

View File

@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
public double? EstimatedUr { get; set; }
[JsonProperty("hit_windows")]
public double[] HitWindows { get; set; }
public double[] HitWindows { get; set; } = null!;
public override IEnumerable<PerformanceDisplayAttribute> GetAttributesForDisplay()
{

View File

@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
private int countMiss;
private double? estimatedUr;
private bool isLegacyScore;
private double[] hitWindows;
private double[] hitWindows = null!;
public ManiaPerformanceCalculator()
: base(new ManiaRuleset())
@ -83,7 +83,15 @@ namespace osu.Game.Rulesets.Mania.Difficulty
if (estimatedUr == null)
return 0;
difficultyValue *= Math.Max(1 - Math.Pow(estimatedUr.Value / 500, 1.9), 0); // UR to multiplier curve, see https://www.desmos.com/calculator/w3zgyzqalm
double noteHeadPortion = (double)(attributes.NoteCount + attributes.HoldNoteCount) / (attributes.NoteCount + attributes.HoldNoteCount * 2);
double tailPortion = (double)attributes.HoldNoteCount / (attributes.NoteCount + attributes.HoldNoteCount * 2);
// We increased the deviation of tails for estimation accuracy, but for difficulty scaling we actually
// only care about the deviation on notes and heads, as that's the "accuracy skill" of the player.
// Increasing the tail multiplier will decrease this value.
double noteHeadUr = estimatedUr.Value / Math.Sqrt(noteHeadPortion + tailPortion * Math.Pow(tail_deviation_multiplier, 2));
difficultyValue *= Math.Max(1 - Math.Pow(noteHeadUr / 500, 1.9), 0);
return difficultyValue;
}