diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs index e61932784b..7e3a81f9d0 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs @@ -123,7 +123,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty performanceAttributes.Total *= multiplier; - return performanceAttributes; + return visualAdjust(performanceAttributes); } // Internal function @@ -182,6 +182,20 @@ namespace osu.Game.Rulesets.Osu.Difficulty }; } + private OsuPerformanceAttributes visualAdjust(OsuPerformanceAttributes attributes) + { + double sum = attributes.Aim + attributes.Speed + attributes.Accuracy + attributes.Flashlight + attributes.Reading; + double multiplier = attributes.Total / sum; + + attributes.Aim *= multiplier; + attributes.Speed *= multiplier; + attributes.Accuracy *= multiplier; + attributes.Flashlight *= multiplier; + attributes.Reading *= multiplier; + + return attributes; + } + public static double CalculateDefaultLengthBonus(int objectsCount) => 0.95 + 0.4 * Math.Min(1.0, objectsCount / 2000.0) + (objectsCount > 2000 ? Math.Log10(objectsCount / 2000.0) * 0.5 : 0.0); private double computeAimValue(ScoreInfo score, OsuDifficultyAttributes attributes)