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

Allow user mods in multiplayer freestyle #31850

Merged
merged 14 commits into from
Feb 12, 2025
Merged

Conversation

smoogipoo
Copy link
Contributor

@smoogipoo smoogipoo commented Feb 11, 2025

Prereqs:

Old Server New Server
Old Client 🟢 🟢
New Client 🟠 (mods not allowed) 🟢

I originally started out trying to merge the ChangeUserStyle() and ChangeUserMods() method calls, but I reached a few UX and general flow issues that I'm not entirely sure about right now:

  • Mods are changed immediately as they're selected whereas ruleset+beatmap are only changed on a select operation from the style select screen.
  • If the mod select is to be moved in the style select screen, should it still be propagated immediately? Should you require a "select" operation on that screen to propagate the changes?
  • If the mod select is to remain as it is inside the screen, then we will need local beatmap/ruleset storage. Imagine the case of selecting a style then opening mod select - the client cannot rely on having received a server-authoritative beatmap/ruleset by the time mod select is opened.

Basically, the flow of things is an issue that I'll need more opinions on, so for the time being I've kept the two server invocations separate.

This is an MVP implementation that is ready for the next release. I plan to rewrite this screen as soon as possible (hopefully the team now agrees this is an absolute requirement before doing anything else), because dealing with half-server-authoritative and half-client-authoritative flows is silly.
Case in point - while the server will automatically keep mods that are still valid between rulesets, the UserMods flow resets them all anyway.

In particular I don't like the non-null assert around
`GetCurrentItem()`, because there's no reason why it _couldn't_ be
`null`.
Consider, for example, if these panels are used in matchmaking where
there are no items initially present in the playlist.

The ruleset nullability part is debatable, but I've chosen to restore
the original code here.
Interestingly, this is not a compiler error nor does R# warn about it.
No problem, because this is just restoring the original code anyway.
@peppy peppy self-requested a review February 11, 2025 15:40
Mostly trying to give more space to the queue as we add more vertical
elements to the middle area of multiplayer / playerlists. This whole UI
will likely change – this is just a stop-gap fix.
@peppy
Copy link
Member

peppy commented Feb 12, 2025

@smoogipoo please check new commits 🙏

@smoogipoo
Copy link
Contributor Author

Seems okay.

peppy
peppy previously approved these changes Feb 12, 2025
@peppy peppy enabled auto-merge February 12, 2025 09:49
@peppy peppy self-requested a review February 12, 2025 15:18
@peppy peppy disabled auto-merge February 12, 2025 17:25
@peppy peppy merged commit ecc12ab into ppy:master Feb 12, 2025
7 of 10 checks passed
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.

2 participants