ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
14.66k stars 2.16k forks source link

Spinners shouldn't be able to be maxed out before the spinner object ends #25805

Open smoogipoo opened 6 months ago

smoogipoo commented 6 months ago

Discussed in https://github.com/ppy/osu/discussions/25213

Originally posted by **Sleepteiner** October 23, 2023 (This post is mostly copied from my changelog comment.) I am not necessarily against making spinners easier to "complete", although there are plenty of arguments against doing that, but I am against having spinners be completable before the spinner object ends. In the new spinner system on long spinners on low OD maps (something that isn't that uncommon), a large percentage of people will max out the long spinner multiple seconds before the spinner ends. This isn't fun and it messes with the intended flow of the map. The duration and end point of a spinner is an intentional and important decision that the mapper makes, therefore players should be encouraged to spin the whole way through a spinner. How about instead of maxing out the spinner early, spinners could behave like in stable, but with a lower spinning RPM cap (the RPM number at the bottom should probably still go above the new cap to avoid confusion though). In stable, to max out a spinner, you don't have to just spin the equivalent amount of times that auto does, you have to maintain spinning above 477 RPM for the duration of the spinner. In other words, I think a better system than maxing out spinners early would be to require players to maintain a spinning speed above the new completion requirement for the duration of the spinner. For example, on OD0 maps, players would have to keep their spinning speed above 250 RPM for the whole spinner duration to max out the spinner. They wouldn't be allowed to play half of it with 500 RPM and then just stop spinning. This would both make competition on spinners more accessible to new players and would respect the mapper's intent by encouraging players to continue playing spinners like mappers assumed most players would always play them when they were adding the spinner to their map. (Also, if the max spinner score is based on OD, then that means that the difficulty adjust mod can be used to get more score even though it isn't currently meant to. If the max spinner score is to be based on OD going forward, then maybe it should be based on the original OD of the map, not the OD after mods affect the stat? Or probably better, maybe just base the max spinner score off of spinner duration alone and have OD only affect how fast you have to maintain spinning speed to get that same max spinner score?)
peppy commented 6 months ago

Just to add here that this isn't going to be simple to implement.

Currently we have things in a really good place in terms of spin precision (over different frame rates; in replays) because there's no averaging or inertia. If we want to add a localised limit, I'd argue that we require some averaging mechanism, but even if there was none, having a limit brings implications for replay playback.

I'm reluctant that we can get this working well this year, and it may be something we push for in the future, which would potentially break old replays but not scoring.

AosUK commented 6 months ago

This is a very tough one, my thoughts: -Spinner MAX needs to be reachable by any capable person, in the sense it should never be their biggest concern for any score, including SS. -This is very hard to have while simultaneously wanting to incentivize people to really go at it while spinning. -Also not a fan of allowing longer breaks due to previously spinning faster. -Problem with making players maintain a certain RPM (either to reach MAX once a spinner ends, or to keep the MAX once already reached) is finding the right penalty, a different judgement? you can't "take away" spins they've already done.

Closest thing I can find to a solution is segmenting duration of a spinner into chunks of lets say, 2 seconds? with each one having its own reachable MAX. -(edit: this sounds totally horrible to implement)- might be totally undoable depending on how scoring handles spinners. Not sure how this information would be shown to the player, as in I don't like the idea of a number or bar or whatever resetting midway through the spinner.

IsaacElenbaas commented 5 months ago

I believe it would be easy to store the frame / time that each spin was counted -> average delay between spins -> average spin rate, without relying on the speed currently displayed to players and consistent in replays.

With that:

That would also better display to users whether they are on track to clear the spinner - if they do not see at least a hint of bonus color, they are not currently above 1x minimumRotationsPerSecond and will not end up clearing the spinner at their current pace. That would be nice for me when playing casually too to be able to see that I can chill a bit if I am at a 50% bonus rate.

. . . but even then, on long spinners "padding" for that average can still be racked up to some degree. Maybe averaging a 2s rolling time window (afterwards, given the saved times) or something would be better than just plain averaging.

GuardianGuy commented 5 months ago

I think you have a good point here, but personally I feel that there's already enough incentive to keep spinning because spinners still make noise once you max 'em out.

I like what @IsaacElenbaas suggested with bonus being tied to rpm since that feels like a good balance of the other suggestions here and it seems like it'd be easier to implement