mirror of
https://github.com/ppy/osu.git
synced 2025-02-09 05:23:03 +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>
|
/// <item><description>and slider difficulty.</description></item>
|
||||||
/// </list>
|
/// </list>
|
||||||
/// </summary>
|
/// </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)
|
if (current.BaseObject is Spinner || current.Index <= 1 || current.Previous(0).BaseObject is Spinner)
|
||||||
return 0;
|
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.
|
// 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);
|
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.
|
// Add in additional slider velocity bonus.
|
||||||
if (withSliderTravelDistance)
|
if (withSliderTravelDistance)
|
||||||
aimStrain += sliderBonus * slider_multiplier;
|
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 reading_window_size = 3000;
|
||||||
|
|
||||||
private const double overlap_multiplier = 0.5;
|
private const double overlap_multiplier = 1;
|
||||||
|
|
||||||
public static double EvaluateDensityDifficultyOf(DifficultyHitObject current)
|
public static double EvaluateDensityDifficultyOf(DifficultyHitObject current)
|
||||||
{
|
{
|
||||||
|
@ -69,7 +69,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
if (mods.Any(h => h is OsuModFlashlight))
|
if (mods.Any(h => h is OsuModFlashlight))
|
||||||
baseFlashlightPerformance = Math.Pow(flashlightRating, 2.0) * 25.0;
|
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 baseReadingHighARPerformance = Math.Pow(5 * Math.Max(1, readingHighARRating / 0.0675) - 4, 3) / 100000;
|
||||||
double baseReadingHiddenPerformance = Math.Pow(readingHiddenRating, 2.0) * 25.0;
|
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)
|
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 readingARValue = Math.Max(computeReadingLowARValue(score, attributes), computeReadingHighARValue(score, attributes));
|
||||||
double readingHDValue = computeReadingHiddenValue(score, attributes);
|
double readingHDValue = computeReadingHiddenValue(score, attributes);
|
||||||
// Here would be also readingSliderValue
|
// Here would be also readingSliderValue
|
||||||
@ -277,8 +277,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
if (score.Mods.Any(m => m is OsuModTouchDevice))
|
if (score.Mods.Any(m => m is OsuModTouchDevice))
|
||||||
rawReading = Math.Pow(rawReading, 0.8);
|
rawReading = Math.Pow(rawReading, 0.8);
|
||||||
|
|
||||||
// double readingValue = Math.Pow(rawReading, 2.0) * 25.0;
|
double readingValue = Math.Pow(rawReading, 2.5) * 17.0;
|
||||||
double readingValue = Math.Pow(rawReading, 2.0) * 25.0; // I need to change the curve
|
|
||||||
|
|
||||||
// Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses.
|
// Penalize misses by assessing # of misses relative to the total # of objects. Default a 3% reduction for any # of misses.
|
||||||
if (effectiveMissCount > 0)
|
if (effectiveMissCount > 0)
|
||||||
@ -310,8 +309,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
|
|
||||||
highARValue *= getComboScalingFactor(attributes);
|
highARValue *= getComboScalingFactor(attributes);
|
||||||
|
|
||||||
// Same as Aim
|
highARValue *= accuracy * accuracy;
|
||||||
highARValue *= accuracy;
|
|
||||||
// It is important to consider accuracy difficulty when scaling with accuracy.
|
// It is important to consider accuracy difficulty when scaling with accuracy.
|
||||||
highARValue *= 0.98 + Math.Pow(attributes.OverallDifficulty, 2) / 2500;
|
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.Mods;
|
||||||
using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
|
using osu.Game.Rulesets.Osu.Difficulty.Evaluators;
|
||||||
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
|
using osu.Game.Rulesets.Osu.Difficulty.Preprocessing;
|
||||||
using osu.Game.Rulesets.Osu.Mods;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
||||||
{
|
{
|
||||||
@ -17,7 +16,8 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
|||||||
public class ReadingLowAR : GraphSkill
|
public class ReadingLowAR : GraphSkill
|
||||||
{
|
{
|
||||||
private readonly List<double> difficulties = new List<double>();
|
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)
|
public ReadingLowAR(Mod[] mods)
|
||||||
: base(mods)
|
: base(mods)
|
||||||
@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
|||||||
|
|
||||||
public override void Process(DifficultyHitObject current)
|
public override void Process(DifficultyHitObject current)
|
||||||
{
|
{
|
||||||
double currentDifficulty = ReadingEvaluator.EvaluateDensityDifficultyOf(current) * skill_multiplier;
|
double currentDifficulty = ReadingEvaluator.EvaluateDensityDifficultyOf(current) * skillMultiplier;
|
||||||
|
|
||||||
difficulties.Add(currentDifficulty);
|
difficulties.Add(currentDifficulty);
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
|
|||||||
{
|
{
|
||||||
currentStrain *= strainDecay(current.DeltaTime);
|
currentStrain *= strainDecay(current.DeltaTime);
|
||||||
|
|
||||||
double aimDifficulty = AimEvaluator.EvaluateDifficultyOf(current, true);
|
double aimDifficulty = AimEvaluator.EvaluateDifficultyOf(current, true, ((OsuDifficultyHitObject)current).Preempt);
|
||||||
aimDifficulty *= ReadingEvaluator.EvaluateHighARDifficultyOf(current);
|
aimDifficulty *= ReadingEvaluator.EvaluateHighARDifficultyOf(current);
|
||||||
currentStrain += aimDifficulty * skillMultiplier;
|
currentStrain += aimDifficulty * skillMultiplier;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user