1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-05 09:42:54 +08:00

changed HD curve

This commit is contained in:
Givikap120 2024-10-10 02:16:34 +03:00
parent fa0a7e5577
commit cfec26af84

View File

@ -114,8 +114,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
aimValue *= 1.3 + (totalHits * (0.0016 / (1 + 2 * effectiveMissCount)) * Math.Pow(accuracy, 16)) * (1 - 0.003 * attributes.DrainRate * attributes.DrainRate);
else if (score.Mods.Any(m => m is OsuModHidden || m is OsuModTraceable))
{
// We want to give more reward for lower AR when it comes to aim and HD. This nerfs high AR and buffs lower AR.
aimValue *= 1.0 + 0.041 * (12.0 - attributes.ApproachRate) * (0.5 + 0.5 * Math.Pow(attributes.SliderFactor, 3));
aimValue *= 1.0 + 1.02 * calculateReadingModBonus(score, attributes) * (0.5 + 0.5 * Math.Pow(attributes.SliderFactor, 3));
}
// We assume 15% of sliders in a map are difficult since there's no way to tell from the performance calculator.
@ -165,8 +164,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
}
else if (score.Mods.Any(m => m is OsuModHidden || m is OsuModTraceable))
{
// We want to give more reward for lower AR when it comes to aim and HD. This nerfs high AR and buffs lower AR.
speedValue *= 1.0 + 0.04 * (12.0 - attributes.ApproachRate);
speedValue *= 1.0 + calculateReadingModBonus(score, attributes);
}
// Calculate accuracy assuming the worst case scenario
@ -265,6 +263,28 @@ namespace osu.Game.Rulesets.Osu.Difficulty
return Math.Max(countMiss, comboBasedMissCount);
}
private double calculateReadingModBonus(ScoreInfo score, OsuDifficultyAttributes attributes)
{
double AR = attributes.ApproachRate;
bool isFullyHidden = score.Mods.OfType<OsuModHidden>().Any(m => !m.OnlyFadeApproachCircles.Value);
if (AR >= 7)
{
// Normal curve for AR > 7, rewarding lower AR
return 0.04 * (12.0 - AR);
}
else if (AR >= 2)
{
// For fully hidden notes - add additional reward for extra low AR
return 0.2 + (isFullyHidden ? 0.06 : 0.04) * (7.0 - AR);
}
else
{
// Max bonus is 0.7 for fully hidden and 0.55 for half-hidden or traceable
return (isFullyHidden ? 0.5 : 0.4) + (isFullyHidden ? 0.2 : 0.15) * (1 - Math.Pow(1.5, AR - 2));
}
}
private double getComboScalingFactor(OsuDifficultyAttributes attributes) => attributes.MaxCombo <= 0 ? 1.0 : Math.Min(Math.Pow(scoreMaxCombo, 0.8) / Math.Pow(attributes.MaxCombo, 0.8), 1.0);
private int totalHits => countGreat + countOk + countMeh + countMiss;
}