mirror of
https://github.com/ppy/osu.git
synced 2025-01-28 02:43:19 +08:00
Estimate number of difficult sliders, and increase assumed slider radius
This commit is contained in:
parent
2d2a6d8a18
commit
5df694e912
@ -125,9 +125,14 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
||||
aimValue *= 1.0 + 0.04 * (12.0 - Attributes.ApproachRate);
|
||||
}
|
||||
|
||||
// Estimate the number of sliderends dropped
|
||||
// We assume 20% of sliders in a map are difficult since there's no way to tell from pp-side.
|
||||
double estimateDifficultSliders = Attributes.SliderCount * 0.15;
|
||||
double estimateSliderEndsDropped = Math.Min(Attributes.SliderCount, Math.Min(countOk + countMeh + countMiss, Attributes.MaxCombo - scoreMaxCombo));
|
||||
aimValue *= (1 - Attributes.SliderFactor) * Math.Pow(1 - (estimateSliderEndsDropped / Attributes.SliderCount), 5.5) + Attributes.SliderFactor;
|
||||
|
||||
estimateSliderEndsDropped = Math.Min(estimateSliderEndsDropped, estimateDifficultSliders);
|
||||
|
||||
double sliderNerfFactor = (1 - Attributes.SliderFactor) * Math.Pow(1 - estimateSliderEndsDropped / estimateDifficultSliders, 5.5) + Attributes.SliderFactor;
|
||||
aimValue *= Math.Max(Attributes.SliderFactor, sliderNerfFactor);
|
||||
|
||||
aimValue *= accuracy;
|
||||
// It is important to also consider accuracy difficulty when doing that.
|
||||
|
@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Preprocessing
|
||||
private const int normalized_radius = 50; // Change radius to 50 to make 100 the diameter. Easier for mental maths.
|
||||
private const int min_delta_time = 25;
|
||||
private const float maximum_slider_radius = normalized_radius * 2.4f;
|
||||
private const float assumed_slider_radius = normalized_radius * 1.65f;
|
||||
private const float assumed_slider_radius = normalized_radius * 1.8f;
|
||||
|
||||
protected new OsuHitObject BaseObject => (OsuHitObject)base.BaseObject;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user