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

Replace lazer scoring with "ScoreV2" #23638

Merged
merged 44 commits into from
May 30, 2023
Merged

Replace lazer scoring with "ScoreV2" #23638

merged 44 commits into from
May 30, 2023

Conversation

smoogipoo
Copy link
Contributor

One of the issues with scoring that's being consistently brought up is its linear combo scaling nature. This has triggered discussions like #20717, which has been turned into an implementation here.

The problem with the implementation above is that it adds a lot of complexity in an effort to make score re-calculatable, but it's not going to be unless all judgements or some metadata for them are to be stored. On top of that, it changes scoring completely unlike anything we've seen thus far, which is neither a bad thing nor a good thing.

I believe the best path forward is to return to something that everyone's familiar with that has been tried and tested. ScoreV2 seems appropriate.

For the most part, this is a 1:1 implementation of osu!stable's ScoreV2. osu!catch has not been exactly implemented, since its implementation drastically increases complexity and I've been told the simple combo/accuracy portions are fine, from those that have attempted to improve on the osu!stable algorithm for tournament purposes.

Of note:

  • This scoring (which I'll refer to as "osu!lazer score" and not ScoreV2) is intended for solo play only. This algorithm doesn't need to be suitable for tournament play, and tournament play may have its own completely different scoring algorithm in the future.
  • osu!lazer scoring should go through a period of community review after which it will be made final and remain as is.
  • It's not recalculatable.

Dan Balasescu and others added 30 commits May 9, 2023 19:30
Introduces some error at all times, but if we're to store scores everywhere as
`long`, then the same precision should be applied to the "during
gameplay" path as well.
@Zyfarok
Copy link
Contributor

Zyfarok commented May 25, 2023

For the decision to accept to go with something that is not "recalculatable", I think this is a good decision if you indeed do not want to store all combos and their associated judgment counts. I'm glad your going in that direction.
And scorev2 is indeed better than previous lazer scoring, so this is an improvement.

However, I hope that the "familiarity" argument will not be used against suggestions of future changes/improvements to the formula.

And more importantly, there's two things which I think are mistaken:

This is intended for solo play only. This algorithm doesn't need to be suitable for tournament play.

I think this is a huge mistake. A formula that is best for tournaments is also best for solo play (the reverse might not be true), and it would be simpler to have the same formula everywhere for most things in the future. The use of custom formulas should only be needed for tournaments that want to have original rule-sets (e.g., combo-only tournaments).

The problem with the implementation above is that it adds a lot of complexity in an effort to make score re-calculatable, but it's not going to be unless all judgements or some metadata for them are to be stored. On top of that, it changes scoring completely unlike anything we've seen thus far, which is neither a bad thing nor a good thing.

It doesn't make sense to say that when the scoring implemented in the fork is not more complex than score v2.
The fork is based on Scorev2 with only 3 changes (that I justified in the discussion thread) :
1- One simplification to remove the impact of the position (in a combo) of 100/50s
2- One tiny increase of complexity to add an exponent (e.g., 0.5) on combo and add an acc exponent on the combo portion.
3- And finally a slight adjustment to the value of v2's acc exponent.

So overall, compared to v2, saying that it "adds a lot of complexity" seems totally exaggerated. The only real "complexity" that I suggested to introduce was to be able to test and adjust the combo exponent based on user feedback without the need to reset leaderboards each time, but this is not something needed permanently and can even be fully discarded if we don't want to go that way. We tried a combo exponent of 0.5, it seems to work well and we could just as well decide to use this value directly and store a single "ComboScore" just as needed for Scorev2.

@peppy
Copy link
Member

peppy commented May 26, 2023

However, I hope that the "familiarity" argument will not be used against suggestions of future changes/improvements to the formula.

Any changes to be made will be made before things go live. We will never make changes again in the future to scoring. If you have any suggestions, please make them after this is merged within the next few months.

I think this is a huge mistake. A formula that is best for tournaments is also best for solo play (the reverse might not be true), and it would be simpler to have the same formula everywhere for most things in the future. The use of custom formulas should only be needed for tournaments that want to have original rule-sets (e.g., combo-only tournaments).

You may be reading into this wrong. This is a disclaimer that if changes are required to scoring for tournament play, they CAN be done local to the multiplayer system. All this is saying is any changes will NOT be applied to solo play. This is non-negotiable from our end.

I ask that you wait for this to be merged and deployed rather than making this PR a discussion thread, but also ask that you follow up with feedback once we are live. There's still room to make changes and the idea here is to get the new scoring out so people can try it more easily.

@peppy peppy self-requested a review May 26, 2023 07:00
@smoogipoo
Copy link
Contributor Author

It doesn't make sense to say that when the scoring implemented in the fork is not more complex than score v2.

You misunderstood my intentions. The complexity is in trying to make it re-calculatable. The addition of members to JudgementResult, ScoreInfo and SoloScoreInfo, while not simplifying any of the code of ScoreProcessor like extractScoringValues() and the various ComputeScore() methods that only exist for the purpose of recalculating scores.

As far as I can tell, you can't recalculate ComboScore without resetting leaderboards, unless we stored the judgements at the combo break points, correct? If so, that's what I meant.

It isn't helped by the implementation being different from anything I've seen thus far - it makes it harder for me to go into code and refactor it, as I have to both understand and refactor the code at the same time.

Don't take it as dismissal of your code, I'm just taking a different path of returning to something that's very simple and well known (as a player but also as a developer - both peppy and I have seen this code before), and building it out from there.

Maybe the changes that you mentioned are beneficial to have and can be applied over the existing ScoreV2 implementation. That's part of the "building it out from there" point.

@Zyfarok
Copy link
Contributor

Zyfarok commented May 26, 2023

Thank you for your answers, all good then. Just wanted to be sure that we agreed on those points and that the plan is not to use v2 as the final lazer solo scoring. 👍

I'll take my suggestions of improvements over score v2 into a new discussion thread once this has been merged.

peppy added 6 commits May 29, 2023 18:38
…ode` change

This isn't strictly required, but only because of a kind of hacky
behaviour where `HUDOverlay` will recreate all components on a scoring
mode change currently (see
https://github.com/ppy/osu/blob/8f6df5ea0f7f721c630fc8cad93bb3eef869d1d9/osu.Game/Screens/Play/HUDOverlay.cs#L410-L418).

Best we do this just in case that happens to go away in the future.
…` handling

I don't feel too confident with the default scoring function being
assigned in the constructor to a publicly settable delegate. This just
feels a bit more elegant, and handles the (likely-never-used) case where
we need to restore the default function.

An alternative would be to provide the function as a `ctor` argument,
but I believe that wasn't done here to allow using the
`ILeaderboardScore` interface.
@peppy
Copy link
Member

peppy commented May 30, 2023

I've done an initial pass on this and think it should be okay to move forward with.

@smoogipoo can you take a look over my changes and make sure nothing stands out as wrong?

@smoogipoo
Copy link
Contributor Author

The changes are good.

@peppy peppy enabled auto-merge May 30, 2023 05:57
@peppy peppy merged commit a436f85 into ppy:master May 30, 2023
@developomp
Copy link

oh my god, it's happening

@LianSheng197
Copy link

LianSheng197 commented Jun 10, 2023

Please forgive my ignorance if I am commenting in the wrong place.


For the continuous update of osu!lazer, I think any changes are worth looking forward to, including this score calculation formula.
However, I noticed that the changelog reads:

It isn't intending to track any past or future changes to ScoreV2
It doesn't support recalculation.

This means that my past play scores on osu!lazer will continue to be preserved.

I'm a new player who only became active in April this year, because I use the GNU/Linux (Ubuntu 22.04) operating system and I don't use wine, so I have only played osu!lazer so far.
I had left grades on some pieces before the score calculation was updated. Because it is a beginner period, the highest score may be 600k ~ 800k, which usually means some misses before the update.
And now after changing the score formula, I think I may not be able to surpass the previous record in the short term, even if my accurate and combo are better than the past results.

In a better situation, I may only need to work hard for a few more months; in a worse situation, I may not be able to break through again in this life: I'm not a professional gamer, and it is impossible to become a professional gamer.

The current situation caught me off guard.
Although I understand that the focus is still on accurate and combo, but the current osu!lazer interface does not support sorting based on these two variables.
In the past, I liked to watch myself gradually break through yesterday's self as I practiced every day, so I attached great importance to the score system. However this score calculation update spoils that.

I have thought about clearing the local score, or switching back to version 2023.513.0 to play, maybe this will make me feel better. But as soon as I see the web profile, I feel that all this is just deceiving myself after all.

Right now, I'm confused, I don't know if I can keep playing osu! and continue to hone my skills in osu!.
Games are supposed to be enjoyable, but osu!lazer just isn't doing it for me right now.

I don't know if this request is reasonable, but if so, I hope osu!lazer will come up with some solutions in the future to solve the dilemma similar to the one I'm currently facing.

@bdach
Copy link
Collaborator

bdach commented Jun 10, 2023

@LianSheng197 I understand your frustration, but please read #23782 (comment). Online leaderboards will get wiped to remove all lazer scores set with the old score algorithm.

@LianSheng197
Copy link

@bdach Thank you for such a quick response.
If the online leaderboard does clear, then I'll be able to start over.

Thank you very much!

@bdach
Copy link
Collaborator

bdach commented Jun 10, 2023

Do note that there is no estimate as to when this reset will happen, but it is planned. See #23761 (comment).

@LianSheng197
Copy link

Thank you, I'm very much looking forward to that day.

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

Successfully merging this pull request may close these issues.

6 participants