From 83765abe34da7f0e980dea3e3de6fceeeb88afe4 Mon Sep 17 00:00:00 2001 From: StanR Date: Sat, 26 Jul 2025 00:51:30 +0500 Subject: [PATCH] Make visibility-based bonuses be additive to `ratingMultiplier` instead of multiplicative (#34367) * Make visibility-based bonuses be additive to `ratingMultiplier` instead of multiplicative * Slightly buff low AR HD, slightly nerf low AR TC --- .../Difficulty/OsuRatingCalculator.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs index e505ed07e4..5d51eee1ba 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs @@ -61,12 +61,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty if (mods.Any(h => h is OsuModRelax)) approachRateFactor = 0.0; - ratingMultiplier *= 1.0 + approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR. + ratingMultiplier += approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR. if (mods.Any(m => m is OsuModHidden)) { double visibilityFactor = calculateAimVisibilityFactor(approachRate); - ratingMultiplier *= 1.0 + CalculateVisibilityBonus(mods, approachRate, visibilityFactor); + ratingMultiplier += CalculateVisibilityBonus(mods, approachRate, visibilityFactor); } // It is important to consider accuracy difficulty when scaling with accuracy. @@ -104,12 +104,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty if (mods.Any(m => m is OsuModAutopilot)) approachRateFactor = 0.0; - ratingMultiplier *= 1.0 + approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR. + ratingMultiplier += approachRateFactor * approachRateLengthBonus; // Buff for longer maps with high AR. if (mods.Any(m => m is OsuModHidden)) { double visibilityFactor = calculateSpeedVisibilityFactor(approachRate); - ratingMultiplier *= 1.0 + CalculateVisibilityBonus(mods, approachRate, visibilityFactor); + ratingMultiplier += CalculateVisibilityBonus(mods, approachRate, visibilityFactor); } ratingMultiplier *= 0.95 + Math.Pow(Math.Max(0, overallDifficulty), 2) / 750; @@ -178,14 +178,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty // NOTE: TC's effect is only noticeable in performance calculations until lazer mods are accounted for server-side. bool isAlwaysPartiallyVisible = mods.OfType().Any(m => m.OnlyFadeApproachCircles.Value) || mods.OfType().Any(); - // Start from normal curve, rewarding lower AR up to AR5 - double readingBonus = 0.04 * (12.0 - Math.Max(approachRate, 5)); + // Start from normal curve, rewarding lower AR up to AR7 + double readingBonus = 0.04 * (12.0 - Math.Max(approachRate, 7)); readingBonus *= visibilityFactor; // For AR up to 0 - reduce reward for very low ARs when object is visible - if (approachRate < 5) - readingBonus += (isAlwaysPartiallyVisible ? 0.03 : 0.04) * (5.0 - Math.Max(approachRate, 0)); + if (approachRate < 7) + readingBonus += (isAlwaysPartiallyVisible ? 0.03 : 0.045) * (7.0 - Math.Max(approachRate, 0)); // Starting from AR0 - cap values so they won't grow to infinity if (approachRate < 0)