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:
parent
b4fadc373e
commit
d96eeeb27c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user