1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-08 13:13:16 +08:00

better high AR curve for <1 star maps

This commit is contained in:
Givikap120 2024-08-29 20:36:59 +03:00
parent 0af7315281
commit 74f24b0c71

View File

@ -168,15 +168,18 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
} }
public override double DifficultyValue() public override double DifficultyValue()
{ {
// Coefs for curve similar to difficulty to performance curve
const double power = 3.0369, multiplier = 3.69656;
// Simulating summing to get the most correct value possible // Simulating summing to get the most correct value possible
double aimValue = Math.Sqrt(aimComponent.DifficultyValue()) * OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER; double aimValue = Math.Sqrt(aimComponent.DifficultyValue()) * OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER;
double speedValue = Math.Sqrt(speedComponent.DifficultyValue()) * OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER; double speedValue = Math.Sqrt(speedComponent.DifficultyValue()) * OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER;
double aimPerformance = OsuStrainSkill.DifficultyToPerformance(aimValue); double aimPerformance = Math.Pow(aimValue, power) * multiplier;
double speedPerformance = OsuStrainSkill.DifficultyToPerformance(speedValue); double speedPerformance = Math.Pow(speedValue, power) * multiplier;
double power = OsuDifficultyCalculator.SUM_POWER; double sumPower = OsuDifficultyCalculator.SUM_POWER;
double totalPerformance = Math.Pow(Math.Pow(aimPerformance, power) + Math.Pow(speedPerformance, power), 1.0 / power); double totalPerformance = Math.Pow(Math.Pow(aimPerformance, sumPower) + Math.Pow(speedPerformance, sumPower), 1.0 / sumPower);
// Length bonus is in SR to not inflate Star Rating of short AR11 maps // Length bonus is in SR to not inflate Star Rating of short AR11 maps
double lengthBonus = OsuPerformanceCalculator.CalculateDefaultLengthBonus(objectsCount); double lengthBonus = OsuPerformanceCalculator.CalculateDefaultLengthBonus(objectsCount);
@ -194,13 +197,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
totalPerformance *= Math.Pow(lengthBonus, lengthBonusPower); totalPerformance *= Math.Pow(lengthBonus, lengthBonusPower);
double adjustedDifficulty = OsuStrainSkill.PerformanceToDifficulty(totalPerformance); double adjustedDifficulty = Math.Pow(totalPerformance / multiplier, 1.0 / power);
double difficultyValue = Math.Pow(adjustedDifficulty / OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER, 2.0); double difficultyValue = Math.Pow(adjustedDifficulty / OsuDifficultyCalculator.DIFFICULTY_MULTIPLIER, 2.0);
// Sqrt value to make difficulty depend less on mechanical difficulty // Sqrt value to make difficulty depend less on mechanical difficulty
return skill_multiplier * Math.Pow(difficultyValue, MECHANICAL_PP_POWER); return skill_multiplier * Math.Pow(difficultyValue, MECHANICAL_PP_POWER);
} }
public class HighARAimComponent : Aim public class HighARAimComponent : Aim
{ {
public HighARAimComponent(Mod[] mods) public HighARAimComponent(Mod[] mods)