Skip to content
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

Closed
wants to merge 0 commits into from
Closed

Aim doubletap detection #24488

wants to merge 0 commits into from

Conversation

Givikap120
Copy link
Contributor

@Givikap120 Givikap120 commented Aug 9, 2023

Copy link
Member

@stanriders stanriders left a 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

}


osuCurrObj.AdjustedStrainTime = osuCurrObj.StrainTime;
Copy link
Member

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

Copy link
Contributor Author

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);
Copy link
Member

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

Copy link
Contributor Author

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
Copy link
Member

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

Copy link
Contributor Author

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)
Copy link
Member

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)

Copy link
Contributor Author

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

@smoogipoo
Copy link
Contributor

I added an SR/PP sheet to the OP. Please check it to make sure the results are as expected!

@stanriders
Copy link
Member

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants