1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-15 12:33:01 +08:00

high AR changes

This commit is contained in:
Givikap120 2024-03-25 19:05:53 +02:00
parent b4fadc373e
commit d96eeeb27c
4 changed files with 24 additions and 24 deletions

View File

@ -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 // The closer timeSpentInvisible is to 0 -> the less difference there are between NM and HD
// So we will reduce base according to this // So we will reduce base according to this
// It will be 0.354 on AR11 value // 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; double hdDifficulty = invisibilityFactor + densityFactor;
// Scale by inpredictability slightly // 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; return hdDifficulty;
} }
@ -377,10 +377,15 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
{ {
// Get preempt in seconds // Get preempt in seconds
preempt /= 1000; 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, 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 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);
} }
} }
} }

View File

@ -72,8 +72,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty
baseFlashlightPerformance = Flashlight.DifficultyToPerformance(flashlightRating); baseFlashlightPerformance = Flashlight.DifficultyToPerformance(flashlightRating);
double baseReadingLowARPerformance = ReadingLowAR.DifficultyToPerformance(readingLowARRating); double baseReadingLowARPerformance = ReadingLowAR.DifficultyToPerformance(readingLowARRating);
double baseReadingHighARPerformance = OsuStrainSkill.DifficultyToPerformance(readingHighARRating); double baseReadingHighARPerformance = OsuStrainSkill.DifficultyToPerformance(readingHighARRating) * 0.5; // WARNING, this is purely visual change to reduce SR inflation on high-end
double baseReadingARPerformance = baseReadingLowARPerformance + baseReadingHighARPerformance; 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); double baseFlashlightARPerformance = Math.Pow(Math.Pow(baseFlashlightPerformance, FL_SUM_POWER) + Math.Pow(baseReadingARPerformance, FL_SUM_POWER), 1.0 / FL_SUM_POWER);

View File

@ -86,9 +86,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty
double highARValue = computeReadingHighARValue(score, osuAttributes); double highARValue = computeReadingHighARValue(score, osuAttributes);
double readingARValue = Math.Pow( // Take only max to reduce pp inflation
Math.Pow(lowARValue, power) + double readingARValue = Math.Max(lowARValue, highARValue);
Math.Pow(highARValue, power), 1.0 / power);
// Reduce AR reading bonus if FL is present // Reduce AR reading bonus if FL is present
double flPower = OsuDifficultyCalculator.FL_SUM_POWER; double flPower = OsuDifficultyCalculator.FL_SUM_POWER;
@ -291,10 +290,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty
{ {
double highARValue = OsuStrainSkill.DifficultyToPerformance(attributes.ReadingDifficultyHighAR); 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. // Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses.
if (effectiveMissCount > 0) if (effectiveMissCount > 0)
highARValue *= 0.97 * Math.Pow(1 - Math.Pow(effectiveMissCount / totalHits, 0.775), effectiveMissCount); 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; return 0.0;
double rawReading = attributes.HiddenDifficulty; 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. // Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses.
if (effectiveMissCount > 0) 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. // 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. // 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) private double calculateEffectiveMissCount(OsuDifficultyAttributes attributes)

View File

@ -66,14 +66,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
double power = OsuDifficultyCalculator.SUM_POWER; double power = OsuDifficultyCalculator.SUM_POWER;
double totalPerformance = Math.Pow(Math.Pow(aimPerformance, power) + Math.Pow(speedPerformance, power), 1.0 / 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); double lengthBonus = OsuPerformanceCalculator.CalculateDefaultLengthBonus(objectsCount);
totalPerformance *= lengthBonus; totalPerformance *= lengthBonus * lengthBonus;
double adjustedDifficulty = OsuStrainSkill.PerformanceToDifficulty(totalPerformance); double adjustedDifficulty = OsuStrainSkill.PerformanceToDifficulty(totalPerformance);
double difficultyValue = Math.Pow(adjustedDifficulty / OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER, 2.0); 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 bool adjustHighAR;
private double currentStrain; private double currentStrain;
private double skillMultiplier => 6.85; private double skillMultiplier => 8.9;
private double defaultValueMultiplier => 25; private double defaultValueMultiplier => 25;
protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => currentStrain * StrainDecay(time - current.Previous(0).StartTime); 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 public class HighARSpeedComponent : OsuStrainSkill
{ {
private double skillMultiplier => 400; private double skillMultiplier => 520;
protected override double StrainDecayBase => 0.3; protected override double StrainDecayBase => 0.3;
private double currentStrain; private double currentStrain;