mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 20:23:00 +08:00
Merge pull request #19716 from MBmasher/fl-grid
Nerf repeated angles in Flashlight skill
This commit is contained in:
commit
e34c8e4975
@ -18,11 +18,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
|||||||
private const double min_velocity = 0.5;
|
private const double min_velocity = 0.5;
|
||||||
private const double slider_multiplier = 1.3;
|
private const double slider_multiplier = 1.3;
|
||||||
|
|
||||||
|
private const double min_angle_multiplier = 0.2;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Evaluates the difficulty of memorising and hitting an object, based on:
|
/// Evaluates the difficulty of memorising and hitting an object, based on:
|
||||||
/// <list type="bullet">
|
/// <list type="bullet">
|
||||||
/// <item><description>distance between a number of previous objects and the current object,</description></item>
|
/// <item><description>distance between a number of previous objects and the current object,</description></item>
|
||||||
/// <item><description>the visual opacity of the current object,</description></item>
|
/// <item><description>the visual opacity of the current object,</description></item>
|
||||||
|
/// <item><description>the angle made by the current object,</description></item>
|
||||||
/// <item><description>length and speed of the current object (for sliders),</description></item>
|
/// <item><description>length and speed of the current object (for sliders),</description></item>
|
||||||
/// <item><description>and whether the hidden mod is enabled.</description></item>
|
/// <item><description>and whether the hidden mod is enabled.</description></item>
|
||||||
/// </list>
|
/// </list>
|
||||||
@ -43,6 +46,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
|||||||
|
|
||||||
OsuDifficultyHitObject lastObj = osuCurrent;
|
OsuDifficultyHitObject lastObj = osuCurrent;
|
||||||
|
|
||||||
|
double angleRepeatCount = 0.0;
|
||||||
|
|
||||||
// This is iterating backwards in time from the current object.
|
// This is iterating backwards in time from the current object.
|
||||||
for (int i = 0; i < Math.Min(current.Index, 10); i++)
|
for (int i = 0; i < Math.Min(current.Index, 10); i++)
|
||||||
{
|
{
|
||||||
@ -66,6 +71,13 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
|||||||
double opacityBonus = 1.0 + max_opacity_bonus * (1.0 - osuCurrent.OpacityAt(currentHitObject.StartTime, hidden));
|
double opacityBonus = 1.0 + max_opacity_bonus * (1.0 - osuCurrent.OpacityAt(currentHitObject.StartTime, hidden));
|
||||||
|
|
||||||
result += stackNerf * opacityBonus * scalingFactor * jumpDistance / cumulativeStrainTime;
|
result += stackNerf * opacityBonus * scalingFactor * jumpDistance / cumulativeStrainTime;
|
||||||
|
|
||||||
|
if (currentObj.Angle != null && osuCurrent.Angle != null)
|
||||||
|
{
|
||||||
|
// Objects further back in time should count less for the nerf.
|
||||||
|
if (Math.Abs(currentObj.Angle.Value - osuCurrent.Angle.Value) < 0.02)
|
||||||
|
angleRepeatCount += Math.Max(1.0 - 0.1 * i, 0.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lastObj = currentObj;
|
lastObj = currentObj;
|
||||||
@ -77,6 +89,9 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
|||||||
if (hidden)
|
if (hidden)
|
||||||
result *= 1.0 + hidden_bonus;
|
result *= 1.0 + hidden_bonus;
|
||||||
|
|
||||||
|
// Nerf patterns with repeated angles.
|
||||||
|
result *= min_angle_multiplier + (1.0 - min_angle_multiplier) / (angleRepeatCount + 1.0);
|
||||||
|
|
||||||
double sliderBonus = 0.0;
|
double sliderBonus = 0.0;
|
||||||
|
|
||||||
if (osuCurrent.BaseObject is Slider osuSlider)
|
if (osuCurrent.BaseObject is Slider osuSlider)
|
||||||
|
@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
|||||||
hasHiddenMod = mods.Any(m => m is OsuModHidden);
|
hasHiddenMod = mods.Any(m => m is OsuModHidden);
|
||||||
}
|
}
|
||||||
|
|
||||||
private double skillMultiplier => 0.05;
|
private double skillMultiplier => 0.052;
|
||||||
private double strainDecayBase => 0.15;
|
private double strainDecayBase => 0.15;
|
||||||
|
|
||||||
private double currentStrain;
|
private double currentStrain;
|
||||||
|
Loading…
Reference in New Issue
Block a user