diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs index 848de57440..b8963b7a45 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty { public const double DIFFICULTY_MULTIPLIER = 0.067; public const double SUM_POWER = 1.1; - public const double FL_SUM_POWER = 1.6; + public const double FL_SUM_POWER = 1.4; public override int Version => 20220902; public OsuDifficultyCalculator(IRulesetInfo ruleset, IWorkingBeatmap beatmap) diff --git a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs index 8e3ab1a2ba..94706fcfd7 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs @@ -221,9 +221,15 @@ namespace osu.Game.Rulesets.Osu.Difficulty if (score.Mods.Any(m => m is OsuModBlinds)) accuracyValue *= 1.14; - // It's stupid so i removed it, it's better just to increase FL coef - //if (score.Mods.Any(m => m is OsuModFlashlight)) - // accuracyValue *= 1.02; + if (score.Mods.Any(m => m is OsuModFlashlight)) + accuracyValue *= 1.02; + + // Visual indication bonus + double visualIndicationBonus = 1.0 + 0.1 * logistic((8.0 - attributes.ApproachRate) / 6); + + accuracyValue *= visualIndicationBonus; + if (score.Mods.Any(h => h is OsuModHidden)) + accuracyValue *= visualIndicationBonus; return accuracyValue; } @@ -397,5 +403,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty } private static double softmin(double a, double b, double power = Math.E) => a * b / Math.Log(Math.Pow(power, a) + Math.Pow(power, b), power); + private static double logistic(double x) => 1 / (1 + Math.Exp(-x)); } } diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs index 9fafeacb9c..c30246df15 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Flashlight.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills hasHiddenMod = mods.Any(m => m is OsuModHidden); } - private double skillMultiplier => 0.052; + private double skillMultiplier => 0.054; private double strainDecayBase => 0.15; private double currentStrain; diff --git a/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs b/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs index 7fd88e19b4..77ab5a68e3 100644 --- a/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs +++ b/osu.Game.Rulesets.Osu/Difficulty/Skills/Reading.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills public class ReadingLowAR : GraphSkill { private readonly List difficulties = new List(); - private double skillMultiplier => 1.1; + private double skillMultiplier => 1.08; private double aimComponentMultiplier => 0.7; public ReadingLowAR(Mod[] mods) @@ -95,7 +95,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills } private double currentStrain; - private double skillMultiplier => 5; + private double skillMultiplier => 4.9; protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => currentStrain * StrainDecay(time - current.Previous(0).StartTime);