From 020e6fa1b20eec4f12a00a0e466a84dda7029c92 Mon Sep 17 00:00:00 2001 From: StanR <8269193+stanriders@users.noreply.github.com> Date: Wed, 4 Mar 2026 22:50:49 +0500 Subject: [PATCH] Reduce strain influence a bit more (#36813) Changes snap aim scaling to d/t^1.65 and speedflow scaling to d/t^1.9 (roughly). This is as much as we can nudge scaling towards d/t without breaking everything --- .../Difficulty/Evaluators/AimEvaluator.cs | 8 ++++---- .../Difficulty/Evaluators/SpeedAimEvaluator.cs | 2 +- osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs | 2 +- .../Difficulty/Preprocessing/OsuDifficultyHitObject.cs | 2 +- osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs index 5f1a5a379c..d0fc063703 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/AimEvaluator.cs @@ -11,9 +11,9 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators { public static class AimEvaluator { - private const double wide_angle_multiplier = 1.4; - private const double acute_angle_multiplier = 2.6; - private const double slider_multiplier = 2.0; + private const double wide_angle_multiplier = 1.35; + private const double acute_angle_multiplier = 2.5; + private const double slider_multiplier = 1.9; private const double velocity_change_multiplier = 1.1; private const double wiggle_multiplier = 1.02; // WARNING: Increasing this multiplier beyond 1.02 reduces difficulty as distance increases. Refer to the desmos link above the wiggle bonus calculation @@ -171,7 +171,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators // We decrease strain for distances 1 / (1 - Math.Pow(0.03, Math.Pow(ms / 1000, 0.75))) + private static double highBpmBonus(double ms, double distance) => 1 / (1 - Math.Pow(0.03, Math.Pow(ms / 1000, 0.65))) * DifficultyCalculationUtils.Smootherstep(distance, 0, OsuDifficultyHitObject.NORMALISED_RADIUS); private static double calcWideAngleBonus(double angle) => DifficultyCalculationUtils.Smoothstep(angle, double.DegreesToRadians(40), double.DegreesToRadians(140)); diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedAimEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedAimEvaluator.cs index 9211ec39cf..afa1245820 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedAimEvaluator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/SpeedAimEvaluator.cs @@ -45,6 +45,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators return strain; } - private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.3, ms / 1000)); + private static double highBpmBonus(double ms) => 1 / (1 - Math.Pow(0.3, Math.Pow(ms / 1000, 0.9))); } } diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs index bc9de3494f..5826f497d6 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuRatingCalculator.cs @@ -29,7 +29,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty if (mods.Any(m => m is OsuModAutopilot)) return 0; - double aimRating = Math.Pow(aimDifficultyValue, 0.58) * 0.0346; + double aimRating = Math.Pow(aimDifficultyValue, 0.62) * 0.0248; if (mods.Any(m => m is OsuModRelax)) aimRating *= 0.9; diff --git a/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs b/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs index b0b1c5132f..33bb6b29c8 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs @@ -134,7 +134,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Preprocessing AdjustedDeltaTime = Math.Max(DeltaTime, MIN_DELTA_TIME); LastObjectEndDeltaTime = lastDifficultyObject != null ? Math.Max(StartTime - lastDifficultyObject.EndTime, MIN_DELTA_TIME) : AdjustedDeltaTime; - SmallCircleBonus = Math.Max(1.0, 1.0 + (30 - BaseObject.Radius) / 60); + SmallCircleBonus = Math.Max(1.0, 1.0 + (30 - BaseObject.Radius) / 70); Preempt = BaseObject.TimePreempt / clockRate; diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs index 50fc9333a7..3c8491a6dc 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Aim.cs @@ -31,8 +31,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills private double currentAimStrain; private double currentSpeedStrain; - private double skillMultiplierAim => 58.5; - private double skillMultiplierSpeed => 2.0; + private double skillMultiplierAim => 65.2; + private double skillMultiplierSpeed => 2.8; private double skillMultiplierTotal => 1.0; private double meanExponent => 1.2;