mirror of
https://github.com/ppy/osu.git
synced 2025-02-09 06:03:21 +08:00
Fixed low AR
HD is still not existant Also, small try to buff high AR on low SR (bad rn)
This commit is contained in:
parent
8c2405da68
commit
f429f213d9
@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
/// <item><description>and slider difficulty.</description></item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public static double EvaluateDifficultyOf(DifficultyHitObject current, bool withSliderTravelDistance)
|
||||
public static double EvaluateDifficultyOf(DifficultyHitObject current, bool withSliderTravelDistance, double clampPreemptTime = 0)
|
||||
{
|
||||
if (current.BaseObject is Spinner || current.Index <= 1 || current.Previous(0).BaseObject is Spinner)
|
||||
return 0;
|
||||
@ -121,6 +121,17 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
// Add in acute angle bonus or wide angle bonus + velocity change bonus, whichever is larger.
|
||||
aimStrain += Math.Max(acuteAngleBonus * acute_angle_multiplier, wideAngleBonus * wide_angle_multiplier + velocityChangeBonus * velocity_change_multiplier);
|
||||
|
||||
if (clampPreemptTime > 0)
|
||||
{
|
||||
// Scale if AR is too high for high AR calc
|
||||
double multiplier = osuCurrObj.StrainTime / Math.Min(osuCurrObj.StrainTime, clampPreemptTime - 150); // 150ms is considered as reaction time
|
||||
double multiplierIfAR11 = osuCurrObj.StrainTime / Math.Min(osuCurrObj.StrainTime, 150);
|
||||
|
||||
multiplier = Math.Min(multiplier, multiplierIfAR11);
|
||||
|
||||
aimStrain *= multiplier;
|
||||
}
|
||||
|
||||
// Add in additional slider velocity bonus.
|
||||
if (withSliderTravelDistance)
|
||||
aimStrain += sliderBonus * slider_multiplier;
|
||||
|
@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
|
||||
{
|
||||
private const double reading_window_size = 3000;
|
||||
|
||||
private const double overlap_multiplier = 0.5;
|
||||
private const double overlap_multiplier = 1;
|
||||
|
||||
public static double EvaluateDensityDifficultyOf(DifficultyHitObject current)
|
||||
{
|
||||
|
@ -69,7 +69,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
||||
if (mods.Any(h => h is OsuModFlashlight))
|
||||
baseFlashlightPerformance = Math.Pow(flashlightRating, 2.0) * 25.0;
|
||||
|
||||
double baseReadingLowARPerformance = Math.Pow(readingLowARRating, 2.0) * 25.0;
|
||||
double baseReadingLowARPerformance = Math.Pow(readingLowARRating, 2.5) * 17.0;
|
||||
double baseReadingHighARPerformance = Math.Pow(5 * Math.Max(1, readingHighARRating / 0.0675) - 4, 3) / 100000;
|
||||
double baseReadingHiddenPerformance = Math.Pow(readingHiddenRating, 2.0) * 25.0;
|
||||
|
||||
|
@ -257,7 +257,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
||||
|
||||
private double computeReadingValue(ScoreInfo score, OsuDifficultyAttributes attributes)
|
||||
{
|
||||
// Taking the highest value
|
||||
// Taking the highest value for AR reading
|
||||
double readingARValue = Math.Max(computeReadingLowARValue(score, attributes), computeReadingHighARValue(score, attributes));
|
||||
double readingHDValue = computeReadingHiddenValue(score, attributes);
|
||||
// Here would be also readingSliderValue
|
||||
@ -277,8 +277,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
||||
if (score.Mods.Any(m => m is OsuModTouchDevice))
|
||||
rawReading = Math.Pow(rawReading, 0.8);
|
||||
|
||||
// double readingValue = Math.Pow(rawReading, 2.0) * 25.0;
|
||||
double readingValue = Math.Pow(rawReading, 2.0) * 25.0; // I need to change the curve
|
||||
double readingValue = Math.Pow(rawReading, 2.5) * 17.0;
|
||||
|
||||
// Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses.
|
||||
if (effectiveMissCount > 0)
|
||||
@ -310,8 +309,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
||||
|
||||
highARValue *= getComboScalingFactor(attributes);
|
||||
|
||||
// Same as Aim
|
||||
highARValue *= accuracy;
|
||||
highARValue *= accuracy * accuracy;
|
||||
// It is important to consider accuracy difficulty when scaling with accuracy.
|
||||
highARValue *= 0.98 + Math.Pow(attributes.OverallDifficulty, 2) / 2500;
|
||||
|
||||
|
@ -9,7 +9,6 @@ using osu.Game.Rulesets.Difficulty.Skills;
|
||||
using osu.Game.Rulesets.Mods;
|
||||
using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
|
||||
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
|
||||
using osu.Game.Rulesets.Osu.Mods;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||
{
|
||||
@ -17,7 +16,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||
public class ReadingLowAR : GraphSkill
|
||||
{
|
||||
private readonly List<double> difficulties = new List<double>();
|
||||
private const double skill_multiplier = 2.4;
|
||||
//private double skillMultiplier => 5.5;
|
||||
private double skillMultiplier => 2.3;
|
||||
|
||||
public ReadingLowAR(Mod[] mods)
|
||||
: base(mods)
|
||||
@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||
|
||||
public override void Process(DifficultyHitObject current)
|
||||
{
|
||||
double currentDifficulty = ReadingEvaluator.EvaluateDensityDifficultyOf(current) * skill_multiplier;
|
||||
double currentDifficulty = ReadingEvaluator.EvaluateDensityDifficultyOf(current) * skillMultiplier;
|
||||
|
||||
difficulties.Add(currentDifficulty);
|
||||
|
||||
@ -132,7 +132,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||
{
|
||||
currentStrain *= strainDecay(current.DeltaTime);
|
||||
|
||||
double aimDifficulty = AimEvaluator.EvaluateDifficultyOf(current, true);
|
||||
double aimDifficulty = AimEvaluator.EvaluateDifficultyOf(current, true, ((OsuDifficultyHitObject)current).Preempt);
|
||||
aimDifficulty *= ReadingEvaluator.EvaluateHighARDifficultyOf(current);
|
||||
currentStrain += aimDifficulty * skillMultiplier;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user