I've seen this suggested quite a bit and is a pretty easy implementation
all things considered.
For now, while on the queue screen, you can open up the dashboard
overlay and select another player to duel. This will bring you into an
unranked lobby.
https://github.com/user-attachments/assets/712897a9-9350-4741-899d-59662c722e43
- [x] Depends on https://github.com/ppy/osu/pull/37226
- [x] Depends on https://github.com/ppy/osu-server-spectator/pull/464
This adds two new components to the queue screen:
- A listing of the most recently completed matches (global).
- A rank distribution graph.
It looks something like this (fake data / test scene):
<img width="1669" height="1005" alt="image"
src="https://github.com/user-attachments/assets/caa57119-4267-4c6e-9898-2f414de865bf"
/>
It's completely dev-design(TM), but I used Lichess as inspiration for
the graph, and the original design document as inspiration for the
panels.
As for the history, because these are _completed_ matches one of the
player life points will always be 0, but I've designed it so as to
possibly support showing ongoing matches too in the future. It's only
supported for ranked play right now, though there is no reason we
couldn't track quick play rooms too (it's just... I'm not sure how to
design the panels for quick play).
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
1. Gives `MatchmakingJoinLobby` parameters.
2. Adds additional data to lobby status update models.
A further PR will build upon (2) to add more data to the queue screen.
Example:
https://github.com/ppy/osu/actions/runs/23900675414/job/69696255970?pr=37178#step:5:38
Regressed in https://github.com/ppy/osu/pull/37172, cc @LiquidPL
Would fail in multiple tests. I'm not going to spend time figuring out
exactly why, I'm just going to guess that not all tests bother to set up
the relevant playlist items for the cards or whatever.
Some of the failing tests are flaky but not because the `item` here
isn't sometimes null in those cases. It's always null, but the callbacks
are probably scheduled or whatever and therefore have a chance to never
run. Also some of the failures appear to cascade / spill from other
tests as well.
In discussions, we've come to the conclusion to attempt to use a
chat-bubble system to minimise the effective area of the chat. In
particular, the results screen doesn't give us enough space to display
the full chat box without overlapping the main screen content.
This PR both adds the chat to the results screen, and reworks it to use
such a bubble system (not sure what to call it, IM style?).
https://github.com/user-attachments/assets/a8a88c51-8a9d-4a03-92b6-621112a15a41
- New messages are previewed for 3 seconds.
- When focusing and unfocusing the textbox, the history moves into
expanded state (show the most recent 10 messages) or collapsed state
(fade messages out ASAP).
This is a bit of an initial implementation to get a feel of how it
behaves, and there's more that can be done such as adding colours,
improving the transforms, perhaps adding it to the intro screen
(post-animation) but the structure's a bit weird atm.
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
https://github.com/user-attachments/assets/042311f1-b8c3-479b-a173-13b93fe2c5cc
- `/roll` command is now supported in multiplayer chat for all players
(don't need to be a referee).
- Referees are shown in the room with a special status.
- Tournament mode rooms can be locked, which prevents users from
changing team (and slot, whenever those get brought back). When the room
is locked, the user team indicator shows a padlock icon on top to
indicate the lock state.
---
- Related: https://github.com/ppy/osu-server-spectator/issues/406
Grab-bag because I really don't think splitting this into 3 PRs is very
helpful.
I was going to add an animation for rolling but I had a go on Friday and
my attempt got more or less the same reception as a wet fart so I'm not
trying again. Someone else can if so inclined. I have completely lost
trust in my design senses.
Contrary to stable the roll results are completely ephemeral and go away
when the room is re-entered. This could be both considered good and bad.
Not for me to say.
Beyond isolation, this stuff is also used to test (de-)serialisation.
Much-of-a-muchness in this case since it isn't too thoroughly tested,
but best do it anyway.