mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 00:42:55 +08:00
added sliders bandaid (overbuffed on purpose)
This commit is contained in:
parent
3e32aa779e
commit
4f12a3afdb
@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
|
||||
private const double overlap_multiplier = 1;
|
||||
|
||||
public static double EvaluateDensityOf(DifficultyHitObject current, bool applyDistanceNerf = true)
|
||||
public static double EvaluateDensityOf(DifficultyHitObject current, bool applyDistanceNerf = true, bool applySliderbodyDensity = true)
|
||||
{
|
||||
var currObj = (OsuDifficultyHitObject)current;
|
||||
|
||||
@ -41,6 +41,17 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
// Small distances means objects may be cheesed, so it doesn't matter whether they are arranged confusingly.
|
||||
if (applyDistanceNerf) loopDifficulty *= (logistic((loopObj.MinimumJumpDistance - 80) / 10) + 0.2) / 1.2;
|
||||
|
||||
// Additional buff for long sliderbodies. OVERBUFFED ON PURPOSE
|
||||
if (applySliderbodyDensity && loopObj.BaseObject is Slider slider)
|
||||
{
|
||||
// In radiuses, with minimal of 1
|
||||
double sliderBodyLength = Math.Max(1, slider.Velocity * slider.SpanDuration / slider.Radius);
|
||||
|
||||
// The maximum is 3x buff
|
||||
double sliderBodyBuff = Math.Log10(sliderBodyLength);
|
||||
loopDifficulty *= 1 + 1.5 * Math.Min(sliderBodyBuff, 2);
|
||||
}
|
||||
|
||||
// Reduce density bonus for this object if they're too apart in time
|
||||
// Nerf starts on 1500ms and reaches maximum (*=0) on 3000ms
|
||||
double timeBetweenCurrAndLoopObj = currObj.StartTime - loopObj.StartTime;
|
||||
@ -153,7 +164,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
if (current.BaseObject is Spinner || current.Index == 0)
|
||||
return 0;
|
||||
|
||||
double difficulty = Math.Pow(4 * Math.Log(Math.Max(1, ((OsuDifficultyHitObject)current).Density)), 2.5);
|
||||
double difficulty = Math.Pow(4 * Math.Log(Math.Max(1, EvaluateDensityOf(current, true, true))), 2.5);
|
||||
|
||||
double overlapBonus = EvaluateOverlapDifficultyOf(current) * difficulty;
|
||||
difficulty += overlapBonus;
|
||||
@ -163,7 +174,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
|
||||
public static double EvaluateAimingDensityFactorOf(DifficultyHitObject current)
|
||||
{
|
||||
double difficulty = ((OsuDifficultyHitObject)current).Density;
|
||||
double difficulty = EvaluateDensityOf(current, true, false);
|
||||
|
||||
return Math.Max(0, Math.Pow(difficulty, 1.5) - 1);
|
||||
}
|
||||
@ -292,7 +303,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
{
|
||||
var currObj = (OsuDifficultyHitObject)current;
|
||||
|
||||
double density = ReadingEvaluator.EvaluateDensityOf(current, false);
|
||||
double density = ReadingEvaluator.EvaluateDensityOf(current, false, false);
|
||||
double preempt = currObj.Preempt / 1000;
|
||||
|
||||
double densityFactor = Math.Pow(density / 6.2, 1.5);
|
||||
|
@ -103,11 +103,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Preprocessing
|
||||
/// </summary>
|
||||
public double RhythmDifficulty { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Density of the object for given preempt. Saved for optimization, density calculation is expensive.
|
||||
/// </summary>
|
||||
public double Density { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Predictabiliy of the angle. Gives high values only in exceptionally repetitive patterns.
|
||||
/// </summary>
|
||||
@ -175,7 +170,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Preprocessing
|
||||
(ReadingObjects, OverlapValues) = getReadingObjects();
|
||||
|
||||
RhythmDifficulty = RhythmEvaluator.EvaluateDifficultyOf(this);
|
||||
Density = ReadingEvaluator.EvaluateDensityOf(this);
|
||||
}
|
||||
|
||||
private (IList<ReadingObject>, IDictionary<int, double>) getReadingObjects()
|
||||
|
@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||
public class ReadingLowAR : GraphSkill
|
||||
{
|
||||
private readonly List<double> difficulties = new List<double>();
|
||||
private double skillMultiplier => 1.26;
|
||||
private double skillMultiplier => 1.22;
|
||||
private double aimComponentMultiplier => 0.4;
|
||||
|
||||
public ReadingLowAR(Mod[] mods)
|
||||
|
Loading…
Reference in New Issue
Block a user