1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-15 00:53:10 +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
// 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);
}
}
}

View File

@ -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);

View File

@ -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)

View File

@ -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;