1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-09 08:23:22 +08:00

Balance streams and HD aim

This commit is contained in:
js1086 2023-07-30 12:51:36 +01:00
parent 8937080c91
commit c1712740f7

View File

@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
double loopDifficulty = currObj.OpacityAt(loopObj.BaseObject.StartTime, false);
// Small distances means objects may be cheesed, so it doesn't matter whether they are arranged confusingly.
loopDifficulty *= logistic((loopObj.MinimumJumpDistance - 80) / 15);
loopDifficulty *= logistic((loopObj.MinimumJumpDistance - 90) / 15);
double timeBetweenCurrAndLoopObj = (currObj.BaseObject.StartTime - loopObj.BaseObject.StartTime) / clockRateEstimate;
loopDifficulty *= getTimeNerfFactor(timeBetweenCurrAndLoopObj);
@ -48,10 +48,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
if (hidden)
{
double timeSpentInvisible = getDurationSpentInvisible(currObj) / clockRateEstimate;
double timeDifficultyFactor = 800 / pastObjectDifficultyInfluence;
double timeDifficultyFactor = 1000 / pastObjectDifficultyInfluence;
hiddenDifficulty += Math.Pow(7 * timeSpentInvisible / timeDifficultyFactor, 1) +
2 * currVelocity;
double visibleObjectFactor = Math.Clamp(retrieveCurrentVisibleObjects(currObj).Count - 3, 1, 10);
hiddenDifficulty += Math.Pow(visibleObjectFactor * timeSpentInvisible / timeDifficultyFactor, 1) +
visibleObjectFactor * 4 * currVelocity;
}
double difficulty = hiddenDifficulty + noteDensityDifficulty;
@ -77,6 +79,25 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
}
}
private static List<OsuDifficultyHitObject> retrieveCurrentVisibleObjects(OsuDifficultyHitObject current)
{
List<OsuDifficultyHitObject> objects = new List<OsuDifficultyHitObject>();
for (int i = 0; i < current.Count; i++)
{
OsuDifficultyHitObject hitObject = (OsuDifficultyHitObject)current.Next(i);
if (hitObject.IsNull() ||
(hitObject.StartTime - current.StartTime) > reading_window_size ||
current.StartTime < hitObject.StartTime - hitObject.Preempt)
break;
objects.Add(hitObject);
}
return objects;
}
private static double getDurationSpentInvisible(OsuDifficultyHitObject current)
{
var baseObject = (OsuHitObject)current.BaseObject;