add large tick misses back into effectivemisscount

This commit is contained in:
finadoggie 2024-10-20 21:39:15 -07:00
parent 6d4cb608ab
commit 31e0853641
No known key found for this signature in database

View File

@ -53,7 +53,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
{
countSliderEndsDropped = osuAttributes.SliderCount - score.Statistics.GetValueOrDefault(HitResult.SliderTailHit);
countLargeTickMiss = score.Statistics.GetValueOrDefault(HitResult.LargeTickMiss);
effectiveMissCount = countMiss;
effectiveMissCount = calculateEffectiveLazerMissCount(osuAttributes);
}
double multiplier = PERFORMANCE_BASE_MULTIPLIER;
@ -274,6 +274,22 @@ namespace osu.Game.Rulesets.Osu.Difficulty
return Math.Max(countMiss, comboBasedMissCount);
}
private double calculateEffectiveLazerMissCount(OsuDifficultyAttributes attributes)
{
// Cap LargeTickMisses to avoid buzz sliders giving high miss counts
// Uses very similar formula to calculateEffectiveMissCount(), but utilizes osu!lazer's extra data
double comboBasedMissCount = 0.0;
if (attributes.SliderCount > 0)
{
comboBasedMissCount = (attributes.MaxCombo - countSliderEndsDropped) / Math.Max(1.0, scoreMaxCombo);
}
// Clamp miss count to maximum amount of possible breaks
comboBasedMissCount = Math.Min(comboBasedMissCount, countOk + countMeh + countMiss + countLargeTickMiss);
return Math.Max(countMiss, comboBasedMissCount);
}
// Miss penalty assumes that a player will miss on the hardest parts of a map,
// so we use the amount of relatively difficult sections to adjust miss penalty