From d96eeeb27ce21769f54d4653fae351b401a6b375 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Mon, 25 Mar 2024 19:05:53 +0200 Subject: [PATCH] high AR changes --- .../Difficulty/Evaluators/ReadingEvaluator.cs | 13 ++++++++---- .../Difficulty/OsuDifficultyCalculator.cs | 4 ++-- .../Difficulty/OsuPerformanceCalculator.cs | 21 +++++++------------ .../Difficulty/Skills/ReadingHighAR.cs | 10 ++++----- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs index 7043f60b2f..09191495a9 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Evaluators/ReadingEvaluator.cs @@ -338,12 +338,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators // The closer timeSpentInvisible is to 0 -> the less difference there are between NM and HD // So we will reduce base according to this // It will be 0.354 on AR11 value - double invisibilityFactor = logistic(currObj.Preempt / 120 - 4); + double invisibilityFactor = logistic(currObj.Preempt / 160 - 4); double hdDifficulty = invisibilityFactor + densityFactor; // Scale by inpredictability slightly - hdDifficulty *= 0.95 + 0.15 * ReadingEvaluator.EvaluateInpredictabilityOf(current); // Max multiplier is 1.1 + hdDifficulty *= 0.96 + 0.1 * ReadingEvaluator.EvaluateInpredictabilityOf(current); // Max multiplier is 1.1 return hdDifficulty; } @@ -377,10 +377,15 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators { // Get preempt in seconds preempt /= 1000; + double value; + if (preempt < 0.375) // We have stop in the point of AR10.5, the value here = 0.396875, derivative = -10.5833, - return 0.63 * Math.Pow(8 - 20 * preempt, 2.0 / 3); // This function is matching live high AR bonus + value = 0.63 * Math.Pow(8 - 20 * preempt, 2.0 / 3); // This function is matching live high AR bonus else - return Math.Exp(9.07583 - 80.0 * preempt / 3); + value = Math.Exp(9.07583 - 80.0 * preempt / 3); + + // EDIT: looks like AR11 getting a bit overnerfed in comparison to other ARs, so i will increase the difference + return Math.Pow(value, 1.4); } } } diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs index 481834d95b..10e6b4e5a2 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs @@ -72,8 +72,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty baseFlashlightPerformance = Flashlight.DifficultyToPerformance(flashlightRating); double baseReadingLowARPerformance = ReadingLowAR.DifficultyToPerformance(readingLowARRating); - double baseReadingHighARPerformance = OsuStrainSkill.DifficultyToPerformance(readingHighARRating); - double baseReadingARPerformance = baseReadingLowARPerformance + baseReadingHighARPerformance; + double baseReadingHighARPerformance = OsuStrainSkill.DifficultyToPerformance(readingHighARRating) * 0.5; // WARNING, this is purely visual change to reduce SR inflation on high-end + double baseReadingARPerformance = Math.Max(baseReadingLowARPerformance, baseReadingHighARPerformance); double baseFlashlightARPerformance = Math.Pow(Math.Pow(baseFlashlightPerformance, FL_SUM_POWER) + Math.Pow(baseReadingARPerformance, FL_SUM_POWER), 1.0 / FL_SUM_POWER); diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs index 3840988349..16d15a7ea7 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs @@ -86,9 +86,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty double highARValue = computeReadingHighARValue(score, osuAttributes); - double readingARValue = Math.Pow( - Math.Pow(lowARValue, power) + - Math.Pow(highARValue, power), 1.0 / power); + // Take only max to reduce pp inflation + double readingARValue = Math.Max(lowARValue, highARValue); // Reduce AR reading bonus if FL is present double flPower = OsuDifficultyCalculator.FL_SUM_POWER; @@ -291,10 +290,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty { double highARValue = OsuStrainSkill.DifficultyToPerformance(attributes.ReadingDifficultyHighAR); - // Second half of length bonus, to match mechanical skills SR scaling - double lengthBonus = CalculateDefaultLengthBonus(totalHits); - highARValue *= lengthBonus; - // Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses. if (effectiveMissCount > 0) highARValue *= 0.97 * Math.Pow(1 - Math.Pow(effectiveMissCount / totalHits, 0.775), effectiveMissCount); @@ -351,20 +346,20 @@ namespace osu.Game.Rulesets.Osu.Difficulty return 0.0; double rawReading = attributes.HiddenDifficulty; - double readingValue = ReadingHidden.DifficultyToPerformance(attributes.HiddenDifficulty); + double hiddenValue = ReadingHidden.DifficultyToPerformance(attributes.HiddenDifficulty); // Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses. if (effectiveMissCount > 0) - readingValue *= 0.97 * Math.Pow(1 - Math.Pow(effectiveMissCount / totalHits, 0.775), Math.Pow(effectiveMissCount, .875)); + hiddenValue *= 0.97 * Math.Pow(1 - Math.Pow(effectiveMissCount / totalHits, 0.775), Math.Pow(effectiveMissCount, .875)); - readingValue *= getComboScalingFactor(attributes); + hiddenValue *= getComboScalingFactor(attributes); // Scale the reading value with accuracy _harshly_. Additional note: it would have it's own curve in Statistical Accuracy rework. - readingValue *= accuracy * accuracy; + hiddenValue *= accuracy * accuracy; // It is important to also consider accuracy difficulty when doing that. - readingValue *= 0.98 + Math.Pow(attributes.OverallDifficulty, 2) / 2500; + hiddenValue *= 0.98 + Math.Pow(attributes.OverallDifficulty, 2) / 2500; - return readingValue; + return hiddenValue; } private double calculateEffectiveMissCount(OsuDifficultyAttributes attributes) diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/ReadingHighAR.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/ReadingHighAR.cs index 40aa25d03b..6832993d8c 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/ReadingHighAR.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/ReadingHighAR.cs @@ -66,14 +66,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills double power = OsuDifficultyCalculator.SUM_POWER; double totalPerformance = Math.Pow(Math.Pow(aimPerformance, power) + Math.Pow(speedPerformance, power), 1.0 / power); - // First half of length bonus is in SR to not inflate Star Rating short AR11 maps + // Length bonus is in SR to not inflate Star Rating short AR11 maps double lengthBonus = OsuPerformanceCalculator.CalculateDefaultLengthBonus(objectsCount); - totalPerformance *= lengthBonus; + totalPerformance *= lengthBonus * lengthBonus; double adjustedDifficulty = OsuStrainSkill.PerformanceToDifficulty(totalPerformance); double difficultyValue = Math.Pow(adjustedDifficulty / OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER, 2.0); - return 54 * Math.Sqrt(difficultyValue); + return 53.2 * Math.Sqrt(difficultyValue); } } @@ -88,7 +88,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills private bool adjustHighAR; private double currentStrain; - private double skillMultiplier => 6.85; + private double skillMultiplier => 8.9; private double defaultValueMultiplier => 25; protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => currentStrain * StrainDecay(time - current.Previous(0).StartTime); @@ -108,7 +108,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills public class HighARSpeedComponent : OsuStrainSkill { - private double skillMultiplier => 400; + private double skillMultiplier => 520; protected override double StrainDecayBase => 0.3; private double currentStrain;