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

More implementations for Relax (pp and star rating) #16708

Closed
wants to merge 7 commits into from

Conversation

tsunyoku
Copy link
Member

@tsunyoku tsunyoku commented Jan 29, 2022

The point of this PR is to aid relax towards a more implementable state in a future scenario. Currently there is very basic implementation for Relax, but it is not factored for what relax means for difficulty. There are a multitude of changes I have made which this PR will explain. Some of these changes will likely to be tweaked in the future, but they are way better than the current implementation and help relax be closer to implementable.

Changes

Speed cross-check

The idea of the speed cross-check is to get a ratio of aim:speed pp. When using relax, streams are rather easy in comparison to vanilla as there is a lack of tapping aspect. However, speed can still be difficult for some patterns in relax too. By checking this ratio, we can gather if a play is speed focused without any difficult aim (streams) or not. This crosscheck is apparent in both the star rating and pp system calculations and can be seen in both:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L61-L70
https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs#L54-L61

This cross check scales by how little aim difficulty there is, and gets applied to both aim and speed pp.

Miss penalty

Since Relax is entirely aim focused, the miss penalty has been made more harsh in order to factor for the easier overall play experience. It is only slight and can be found here:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L115-L118

Accuracy scaling

For the same reason stated above, accuracy is also considerably easier to retain on Relax. For this reason, accuracy formulas across all skills have been nerfed for relax. They can be found here:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L151-L159
https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L248-L250
https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L281-L282

Speed AR multiplier

The AR multiplier has only been adjusted for speed, as speed as a skillset in Relax is entirely halfed as there is no aspect of rhythm. This means reading plays little factor into speed for relax, so the multiplier has been nerfed. This can be found here:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L179-L184

Speed multiplier

For the same reasons stated above, the overall speed value is nerfed:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L203-L206

Static changes

These are likely to be the ones which need tweaking now. In the future, these may need to get removed, but I don't think it's essential. These static changes are base changes to some multipliers or values with some testing across a plethora of maps and skillsets. They can be found here:

https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuPerformanceCalculator.cs#L72-L77
https://github.com/tsunyoku/osu/blob/66494844321e298110f47f6b7547a234b0270036/osu.Game.Rulesets.Osu/Difficulty/OsuDifficultyCalculator.cs#L63-L66

Score multiplier

An actual score multiplier has been implemented for Relax at 0.8. Through testing, I saw this is a good balance between vanilla scores being prioritised, but high mod combo Relax scores still being shown off.

I am open to any suggestions, tweaks etc. to the codebase as I am looking to balance Relax as much as possible. Thanks!

@apollo-dw
Copy link
Contributor

Hey, thanks for the contrib, looks like some interesting stuff here. I'm eager to see some values though if you wouldn't mind running those - ideally could you run against the scores I included in the initial relax calc pull request?

Just based on skimming the code, I am wondering what your thoughts are on including 100s and 50s in the miss penalty are. In the initial PR, they were added straight to the miss count which isn't great, however since miss counts can be decimal numbers now, I was considering eventually doing something where: a 100 was 0.33 misses, and a 50 was 0.66 misses... The rationale was that getting those accuracy drops with Relax (especially 50s) means the player really messed up in some manner.

@apollo-dw apollo-dw requested a review from a team January 30, 2022 00:24
@tsunyoku
Copy link
Member Author

The hastebin you linked in your PR is unavailable, so I can't check the plays. Can you give me a working link?

@apollo-dw
Copy link
Contributor

Oh wow, hastebin files expire after some time, lesson learnt lol. I found this from a Discord message from months back which are Mahmood's plays which he set "offline" in a way you're "familiar with" (i'm not sure if i'm allowed to even mention stuff like that here lol?)

Map ID  Mods     x100   x50 axPP    rxPP
2677494 RXHDDT   44     2   1980.67 44.23
1849580 RXHDDT   10     0   1862.36 629.78
2365752 RXHDDT   65     1   1837.74 38.31
1241370 RXHDHRDT 47     1   1173.04 65.60

@tsunyoku
Copy link
Member Author

I’m in bed right now, but I’ll send those values here in the morning!

@tsunyoku
Copy link
Member Author

tsunyoku commented Jan 30, 2022

Map ID  Mods     x100   x50 axPP    rxPP
2677494 RXHDDT   44     2   1980.67 790.35
1849580 RXHDDT   10     0   1862.36 737.64
2365752 RXHDDT   65     1   1837.74 772.42
1241370 RXHDHRDT 47     1   1173.04 726.79

I think it seems pretty clear that a downscale is needed, depending on what the overall consensus is on how Relax should be weighted against Vanilla. I'll wait to see what others think, and I'll downscale if that's what we want!

// These are probably less than ideal, but can be worked on in the future.
baseAimPerformance *= 0.4;
baseSpeedPerformance *= 0.5;
baseFlashlightPerformance *= 0.6;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you scaling FL rating here? Pretty sure relax has nothing to do with FL

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my opinion, tapping has atleast some factor to flashlight and the entire tapping portion is removed hence why it's scaled. If people disagree, I'm open to remove it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MBmasher I think we need your opinion here

@@ -40,16 +40,30 @@ protected override DifficultyAttributes CreateDifficultyAttributes(IBeatmap beat

double sliderFactor = aimRating > 0 ? aimRatingNoSliders / aimRating : 1;

if (mods.Any(h => h is OsuModRelax))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly speed is so convoluted now that I'm not sure if we want to include it or not. I guess it's fine now, but we'll have to reconsider it after splitting speed into flow/tap/rhythm

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah had the same conversation with apollo. Unless speed is splitted, this is the best option we have.

@pull-request-size pull-request-size bot added size/M and removed size/L labels Jan 30, 2022
@tsunyoku
Copy link
Member Author

tsunyoku commented Jan 30, 2022

Map ID  Mods     x100   x50 axPP    rxPP
2677494 RXHDDT   44     2   1980.67 790.35
1849580 RXHDDT   10     0   1862.36 737.64
2365752 RXHDDT   65     1   1837.74 772.42
1241370 RXHDHRDT 47     1   1173.04 726.79

Adjusted to new values (also including star rating comparison):

Map ID  Mods     x100   x50 axPP    rxPP   axSR  rxSR
2677494 RXHDDT   44     2   3254.09 408.28 12.75 7.75
1849580 RXHDDT   10     0   2983.17 575.03 11.83 7.14
2365752 RXHDDT   65     1   2960.35 386.95 11.68 7.22
1241370 RXHDHRDT 47     1   2853.17 403.18 11.58 7.09

Also @apollo-dw, the axPP values you used were the "offline" values, so this table now shows what they would be on the current pp system if relax were removed (for a better comparison).

@tsunyoku tsunyoku changed the title More implementations for Relax (pp, star rating and score multiplier) More implementations for Relax (pp and star rating) Jan 30, 2022
@cihe13375
Copy link

Just mentioning, lazer (at least currently) has a harsher hitwindow for relax compared to stable: in lazer you'll get a miss if the cursor leaves the hitcircle like 3~4 ms early, but in stable the cutoff is ~10 ms. This should be considered when talking about "how much pp should a play made on stable being awarded", because the algorithm will be finally applied to lazer whose relax mod is more or less harder due to this difference

@tsunyoku
Copy link
Member Author

tsunyoku commented Feb 2, 2022

Just mentioning, lazer (at least currently) has a harsher hitwindow for relax compared to stable: in lazer you'll get a miss if the cursor leaves the hitcircle like 3~4 ms early, but in stable the cutoff is ~10 ms. This should be considered when talking about "how much pp should a play made on stable being awarded", because the algorithm will be finally applied to lazer whose relax mod is more or less harder due to this difference

I noticed this too, but I think the difference isn’t too significant. We have to be careful how much we choose to buff relax as we have to consider it being one leaderboard alongside non-relax and we don’t want a leaderboard full of entirely relax play(ers/s). I’ll wait to see what the rest think about the system and from there it will probably be adjusting scaling to deal with the discrepancies like this one

@Natelytle
Copy link
Contributor

Wouldn't it be good to scale the 100/50 miss penalty with OD? Right now there is no reason to play higher OD when lower OD gives the same amount of PP and also increases the leniency of the hit window such that you can hit later and still get a 300, so getting 1 100 on OD0 should be the same as getting like 50 on OD11.1 (values made up because I can't be bothered figuring out the math.) Right now a 100 is 0.33x a miss no matter how much you had to screw up your aim to get that 100

@apollo-dw
Copy link
Contributor

Based on talking with @tsunyoku, looks like planned relax implementation in the future is going in a pretty different direction, additionally certain parts of this PR are lightly superceded by the 2nd point in #19001, so will close this PR

@apollo-dw apollo-dw closed this Jul 21, 2022
@tsunyoku tsunyoku deleted the relax-difficulty branch July 21, 2022 20:36
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.

6 participants