1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-13 07:07:44 +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; } public double? EstimatedUr { get; set; }
[JsonProperty("hit_windows")] [JsonProperty("hit_windows")]
public double[] HitWindows { get; set; } public double[] HitWindows { get; set; } = null!;
public override IEnumerable<PerformanceDisplayAttribute> GetAttributesForDisplay() public override IEnumerable<PerformanceDisplayAttribute> GetAttributesForDisplay()
{ {

View File

@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mania.Difficulty
private int countMiss; private int countMiss;
private double? estimatedUr; private double? estimatedUr;
private bool isLegacyScore; private bool isLegacyScore;
private double[] hitWindows; private double[] hitWindows = null!;
public ManiaPerformanceCalculator() public ManiaPerformanceCalculator()
: base(new ManiaRuleset()) : base(new ManiaRuleset())
@ -83,7 +83,15 @@ namespace osu.Game.Rulesets.Mania.Difficulty
if (estimatedUr == null) if (estimatedUr == null)
return 0; 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; return difficultyValue;
} }