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

osu!mania pp calc : scoreMultiplier ignoring NF mutliplier seems contradictory #123

Open
Zyfarok opened this issue Sep 2, 2020 · 1 comment

Comments

@Zyfarok
Copy link

Zyfarok commented Sep 2, 2020

Facts

The scoreMultiplier retrieved here considers all mods multipliers except NF (because NF is "masked out") :
https://github.com/ppy/osu-performance/blob/master/src/performance/mania/ManiaScore.cpp#L70

This makes all NF scores still have a score value bellow 500k after removing all (other) mods multipliers, which makes the pp value be always 0 because of the "mashing counter" part.

Contradiction

This seems contradictory with the fact that a multiplier is applied to the final pp value of NF scores here :
https://github.com/ppy/osu-performance/blob/master/src/performance/mania/ManiaScore.cpp#L51-L52

Why would you have a specific case for NF plays where you multiply it's pp by 0.9x if the base pp is always 0 ?
Additionally, I don't think the function to retrieve the score multiplier was intentionally modified to ignore NF and make NF scores gives 0 pp since it would be much easier and clearer to just change this 0.9x multiplier into a 0 otherwise.

Code

MaskRelevantDifficultyMods is the function that makes the NF mod ignored and is used in Beatmap::DifficultyAttribute here :
https://github.com/ppy/osu-performance/blob/master/src/performance/Beatmap.cpp#L22-L24

and defined here :

inline EMods MaskRelevantDifficultyMods(EMods mods)
{
return static_cast<EMods>(mods & (DoubleTime | HalfTime | HardRock | Easy | keyMod));

Supposed source of error

I suppose the error comes from the fact that the MaskRelevantDifficultyMods function used in Beatmap::DifficultyAttribute was originally made to only extract mods that affect the difficulty attributes considered in osu!std which are Speed/Aim/OD/AR (which are not affected by NF) and the possibility to retrieve the ScoreMultiplier from Beatmap::DifficultyAttribute was added afterward specifically for mania pp calculation without noticing NF was ignored.

Proposed fix

Either :
1- add NF to the masked mods (but then you'd have to make the _difficulty map twice bigger, even for other gamemodes)
OR
2- make different masks for different tasks depending on the value you retrieve and/or the different gamemodes (since this code is used in all gamemodes pp calculation) which can also help making the _difficulty map smaller.

Then, once that is fixed and that NF plays actually give pp again, we might want to re-adjust the NF pp multiplier to avoid abuse as I heard that NF once gave too much PP in some situations ? Apparently this was a misunderstanding, the currently defined 0.9 multiplier added to the mashing counter should be sufficient.

@smoogipoo
Copy link
Contributor

This requires the osu!lazer mania diffcalc to be finished.

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

No branches or pull requests

2 participants