-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Aim separation in difficulty calculation (base) #35418
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: pp-dev
Are you sure you want to change the base?
Conversation
tsunyoku
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some comments to get us started.
| // We want to use the average velocity over the whole object when awarding differences, not the individual jump and slider path velocities. | ||
| prevVelocity = (osuLastObj.LazyJumpDistance + osuLastLastObj.TravelDistance) / osuLastObj.AdjustedDeltaTime; | ||
| currVelocity = (osuCurrObj.LazyJumpDistance + osuLastObj.TravelDistance) / osuCurrObj.AdjustedDeltaTime; | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the purpose of moving this out?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
because then when it will be run inside the if statement - currVelocity and prevVelocity may be set to 0 both, and the evaluator will return NaN
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is referencing these that wasn't before? are you implying this is a pre-existing issue? I don't understand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zero velocity can be turned into non-zero thanks to "snapping difficulty"
so when raw velocity is recalculated for velocity change bonus - it can drop it back to zero again
osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlowAimEvaluator.cs
Outdated
Show resolved
Hide resolved
osu.Game.Rulesets.Osu/Difficulty/Evaluators/FlowAimEvaluator.cs
Outdated
Show resolved
Hide resolved
| // Rescale the distance to make it closer d/t | ||
| if (osuCurrObj.LazyJumpDistance > diameter) | ||
| { | ||
| // Change those 2 power coeficients to control amount of buff high spaced flow aim has for comfy/uncomfy patterns | ||
| flowDifficulty *= Math.Pow(osuCurrObj.LazyJumpDistance / diameter, 0.4); | ||
| } | ||
| else | ||
| { | ||
| // Decrease power here if you want to buff low-spaced flow aim | ||
| flowDifficulty *= Math.Pow(osuCurrObj.LazyJumpDistance / diameter, 0.8); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this entire thing intended to be a crutch as a result of d/t^2? do things break without it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
theoretically flow aim should be d/t. So in order to achieve it in current strain system you need to raise distance to the power of 2.
But in practice the number "2" doesn't work, so instead I've used here numbers 1.4 and 1.8 (depending on spacing). They give the best results from my testing.
| // Summation for aim and speed, reducing reward for mixed maps | ||
| public static double SumMechanicalDifficulty(double aim, double speed) | ||
| { | ||
| const double addition_portion = 0.1; | ||
|
|
||
| // We take this min to max ratio as a basepoint to be not changed when addition_portion is changed | ||
| const double balance_base_point = 0.2; | ||
| const double power = 1.1; | ||
|
|
||
| // This is automatically-computed multiplier to avoid manual multiplier balancing when addition_portion is changed | ||
| double multiplier = Math.Pow(1 + Math.Pow(balance_base_point, power), 1.0 / power) / | ||
| Math.Pow( | ||
| Math.Pow(1 + addition_portion, power) + | ||
| Math.Pow(balance_base_point + addition_portion, power), 1.0 / power | ||
| ); | ||
|
|
||
| double max = Math.Max(aim, speed); | ||
|
|
||
| double difficulty = | ||
| Math.Pow( | ||
| Math.Pow(aim + addition_portion * max, power) + | ||
| Math.Pow(speed + addition_portion * max, power), 1.0 / power | ||
| ); | ||
|
|
||
| return difficulty * multiplier; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we need this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This changes summation from current ^1.1 to more complicated.
Makes the balance significantly better because otherwise maps with similar aim and speed values were worth way too much.
| // To ensure that result would not be bigger than normal aim difficulty rating | ||
| if (mods.Any(m => m is OsuModTouchDevice)) | ||
| flowAimRating = Math.Pow(flowAimRating, 0.83); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does this still yield a TD nerf for flow aim in the end?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It still nerfs flow aim on TD in the end. I may try to fix it but I don't sure this is necessary.
| // Rescale wide angle bonus to reward lower spacing more | ||
| double velocityThreshold = diameter * 2.3 / osuCurrObj.AdjustedDeltaTime; | ||
| double wideVelocityBase = Math.Min(angleBonus, velocityThreshold + 0.4 * (angleBonus - velocityThreshold)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here the scaling for aim was changed from d/t^2.2 (roughly) to d/t^2 thanks to no distance limit in speed
Because of this - all high spaced patterns were buffed. But because wide angle bonus as very big spacing - by far the most buffed patterns were squares and c-type type stuff.
They were buffed significantly regardless of BPM (so it's now because of snapping difficulty thing), this rescale brings it back to be similar how it looked in master
This is a base version of separation that mainly focuses on preserving correct balancing.
Intended to be expanded with various bonuses that will improve quality of evaluators.