-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
Aim doubletap detection #24488
Aim doubletap detection #24488
Conversation
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.
I don't really have a strong opinion on the algo itself yet, but there are certainly some questions and code things to improve. Also take a look at CI - you have styling issues too
osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs
Outdated
Show resolved
Hide resolved
osu.Game.Rulesets.Osu/Difficulty/Preprocessing/OsuDifficultyHitObject.cs
Outdated
Show resolved
Hide resolved
} | ||
|
||
|
||
osuCurrObj.AdjustedStrainTime = osuCurrObj.StrainTime; |
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.
I'm not sure adjusting the straintime is the best course here - I'd go for a regular difficulty multiplier that you'd apply somewhere at the end of the calculation
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.
multiplier is super subjective while adjusting straintime is objective - it's literally how the cheese works
overlapnessCurr = CosSigmoid(overlapnessCurr); | ||
overlapnessCurr *= overlapnessCurr; | ||
|
||
double antiOverlapnessLast = 1 - Math.Clamp(osuLastObj.LazyJumpDistance / OsuDifficultyHitObject.NORMALISED_RADIUS / 2, 0, 1); |
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.
Not sure if its just for me, but I think this variable name reads terribly
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.
antiOverlapness sounds very weird but idk how i can name it better without making it super long
antiOverlapness = 1 - overlapness
but i can leave "1 - x" operation in the end cuz it's transformed slightly after
{ | ||
doubletapTime = osuLastObj.HitWindowGreat * overlapnessCurr * antiOverlapnessLast / 2; | ||
|
||
// if the second note is delayed - decrease the penalty down to 0 on doubled time |
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.
I'm still not sure if this is something we wanna do, but I'll wait for the sheet before deciding
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 is questionable because it assumes that player will click in the first 1 ms of the 300 window, so it can be adjusted to be more fair
but the core is very logical to me
@@ -15,6 +15,11 @@ public static class AimEvaluator | |||
private const double slider_multiplier = 1.35; | |||
private const double velocity_change_multiplier = 0.75; | |||
|
|||
private static double CosSigmoid(double value, double range = 1) |
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 should go to the bottom of the file, or maybe even somewhere common (framework? some common math class here? not sure, client maintainers please help)
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.
99% sure that it doesn't exist in frameworks
i even didn't find it's own wikipedia page
I added an SR/PP sheet to the OP. Please check it to make sure the results are as expected! |
Looking at the sheet and replays provided by the OP I'd say this PR nerfs legit plays way too much. Good example of overnerfing is this replay (map) as it's more than within OD's hitwindow and can't be assumed to be doubletapped |
Nerfs doubletappable jumps
SR/PP sheet: https://docs.google.com/spreadsheets/d/1B0_hZSBO4dGpwJnSniv_AjodwRl5hgOyArdMdDimOiU/edit
As of e96a163