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

Add support for "freestyle" in multiplayer #11760

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

smoogipoo
Copy link
Contributor

@smoogipoo smoogipoo commented Dec 24, 2024

This is an MVP. @ppy/team-web please take this over.

I'm ferrying this via the "beatmapset_id" field which, when set, indicates that players in the room are able to individually pick their own choice of beatmap and ruleset.

I have added what I believe is one important comment where the osu!web team will need to add validation as required. Importantly:

  • Users should not be able to pick beatmaps outside of the current set.
  • Users should not be able to pick beatmaps with lengths exceeding +/- 30s from the base playlist item beatmap ($playlistItem->beatmap_id).
  • When "freestyle" mode is enabled, required_mods/allowed_mods should be kept empty.

Feature request: The score controller (rooms/{roomId}/playlist/{playlistItemId}/scores/{scoreId}) should return a beatmap model for each score rather than just a beatmap_id.

@bdach
Copy link
Contributor

bdach commented Dec 26, 2024

From a schema design standpoint, as far as I can see, beatmap_id is still mandatory on multiplayer_playlist_items regardless of whether beatmapset_id is present, and the current interpretation of it would be that it's always present even on "freestyle" playlist items? This feels backwards to me. I'd accept either:

  • exclusive-or (either beatmap_id present, or beatmapset_id present, the other being null),
  • making beatmap_id optional rather than beatmapset_id, which is to say if beatmap_id is null on an item then that is "freestyle", and if it's not, then that means forcing a particular beatmap of a particular set (this carries with it some degree of redundancy as the set and the beatmap must match, which is potentially a data integrity rake, but it's probably fine).

Similarly, ruleset_id is still nullable on the playlist item. This has further implications in client because it potentially means that "freestyle" rooms will only be accessible through the client via the "primary" ruleset of the playlist item (so you'll need to search for osu! lobbies to find a freestyle room).

Thoughts? I know this entire series was prefaced as "bare minimum" / "make-work", but my feeling is that at present this change on its own is going a bit too far in that regard.

@peppy
Copy link
Member

peppy commented Dec 26, 2024

exclusive-or (either beatmap_id present, or beatmapset_id present, the other being null),

i'd prefer this one as it's the most clear as to what's happening.

@smoogipoo
Copy link
Contributor Author

smoogipoo commented Dec 26, 2024

One of the things I was going to do is exactly that, but as you might expect, the effects of doing so will run very deep. I'll leave it to the osu-web team to understand the full scope of what that will break, but be aware that it already guides what's shown in the lounge screen, the initial selection within the room, and also the playlist items in the queue which are incompatible with plain sets without an attached difficulty.

The flow as it currently is "just works", but it will have to change dramatically if users are to be required to set an appropriate difficulty for themselves.

Finally, I would have done that if song select allowed me to select sets. Doing that is a whole other can of worms, but the current state is such that song select must always display sets and difficulties, not one or the other.

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.

3 participants