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