1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-09 02:53:17 +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:
Givikap120 2024-01-24 01:07:44 +02:00
parent 8c2405da68
commit f429f213d9
5 changed files with 21 additions and 12 deletions

View File

@ -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;

View File

@ -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)
{

View File

@ -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;

View File

@ -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;

View File

@ -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;