1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-14 05:07:26 +08:00

some balancing stuff

This commit is contained in:
Givikap120 2024-10-04 17:36:45 +03:00
parent 64e6c740f1
commit e348b17447
3 changed files with 11 additions and 9 deletions

View File

@ -13,6 +13,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
private const double single_spacing_threshold = 125; // 1.25 circles distance between centers
private const double min_speed_bonus = 75; // ~200BPM
private const double speed_balancing_factor = 40;
private const double distance_multiplier = 0.94; // WARNING - DECREASE DISTANCE MULTIPLIER TO AVOID JASHIN BUFF
/// <summary>
/// Evaluates the difficulty of tapping the current object, based on:
@ -50,12 +51,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
// 0.93 is derived from making sure 260bpm OD8 streams aren't nerfed harshly, whilst 0.92 limits the effect of the cap.
strainTime /= Math.Clamp((strainTime / osuCurrObj.HitWindowGreat) / 0.93, 0.92, 1);
// speedBonus will be 1.0 for BPM < 200
double speedBonus = 1.0;
// speedBonus will be 0.0 for BPM < 200
double speedBonus = 0.0;
// Add additional scaling bonus for streams/bursts higher than 200bpm
if (strainTime < min_speed_bonus)
speedBonus = 1 + 0.75 * Math.Pow((min_speed_bonus - strainTime) / speed_balancing_factor, 2);
speedBonus = 0.75 * Math.Pow((min_speed_bonus - strainTime) / speed_balancing_factor, 2);
double travelDistance = osuPrevObj?.TravelDistance ?? 0;
double distance = travelDistance + osuCurrObj.MinimumJumpDistance;
@ -63,11 +64,12 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Evaluators
// Cap distance at single_spacing_threshold
distance = Math.Min(distance, single_spacing_threshold);
// Max distance bonus is 2 at single_spacing_threshold
double distanceBonus = 1 + Math.Pow(distance / single_spacing_threshold, 3.5);
// Max distance bonus is 1 * `distance_multiplier` at single_spacing_threshold
double distanceBonus = Math.Pow(distance / single_spacing_threshold, 3.95) * distance_multiplier;
// Base difficulty with all bonuses
double difficulty = speedBonus * distanceBonus * 1000 / strainTime;
// WARNING - CHANGED TO ADDITIVE TO AVOID AKOLIBED BUFF
double difficulty = (1 + speedBonus + distanceBonus) * 1000 / strainTime;
// Apply penalty if there's doubletappable doubles
return difficulty * doubletapness;

View File

@ -97,8 +97,10 @@ namespace osu.Game.Rulesets.Osu.Difficulty
+ cognitionValue) * multiplier;
double savedEffectiveMissCount = effectiveMissCount;
effectiveMissCount = 0;
countMiss = 0;
scoreMaxCombo = osuAttributes.MaxCombo;
double balanceAdjustingMultiplier = calculateBalancerAdjustingMultiplier(score, osuAttributes);
totalValue *= balanceAdjustingMultiplier;
@ -397,8 +399,6 @@ namespace osu.Game.Rulesets.Osu.Difficulty
private double calculateBalancerAdjustingMultiplier(ScoreInfo score, OsuDifficultyAttributes osuAttributes)
{
scoreMaxCombo = osuAttributes.MaxCombo;
double multiplier = PERFORMANCE_BASE_MULTIPLIER;
double power = OsuDifficultyCalculator.SUM_POWER;

View File

@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Osu.Difficulty.Skills
private readonly bool withSliders;
protected double CurrentStrain;
protected double SkillMultiplier => 24.963;
protected double SkillMultiplier => 25.15; // WARNING - INCREASED FROM 24.963 FOR BALANCING
protected override double CalculateInitialStrain(double time, DifficultyHitObject current) => CurrentStrain * StrainDecay(time - current.Previous(0).StartTime);