ppy / osu

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

Implement "daily challenge" system #28136

Closed bdach closed 9 hours ago

bdach commented 2 months ago

Opening for tracking ongoing work.

I'll be handling the implementation of the system itself, @peppy has offered to look at rewards.

### Tasks
- [ ] https://github.com/ppy/osu-web/pull/11204
- [ ] https://github.com/ppy/osu-resources/pull/324
- [ ] https://github.com/ppy/osu/pull/28194
- [ ] https://github.com/ppy/osu-server-spectator/pull/234
- [ ] https://github.com/ppy/osu/pull/28195
- [x] ASS command to queue beatmaps for daily challenge (@peppy)
- [x] Rewards (@peppy)
- [ ] https://github.com/ppy/osu/pull/28440
- [ ] https://github.com/ppy/osu/pull/28456
- [ ] https://github.com/ppy/osu/pull/28636
- [ ] https://github.com/ppy/osu-server-spectator/pull/237
- [ ] https://github.com/ppy/osu/pull/28659
- [ ] https://github.com/ppy/osu/pull/28740

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

Originally posted by **bdach** April 24, 2024 This is a design document of sorts for the feature floated today on discord (see [discussion here](https://discord.com/channels/188630481301012481/188630652340404224/1232587729246748714) and then continued [in thread](https://discord.com/channels/188630481301012481/1232593041416786002)). Most things below have already been brought up in the discussions above but some of it is explicitly my proposal. Assume everything in here is negotiable / up for debate. # Basic premise - Every day a single beatmap difficulty is selected as the "beatmap of the day". - The beatmap of the day gets a playlist created for it, which is open for 24 hours. - Beatmaps to pick can be queued manually. Lack of queued maps should result in a reminder. - The beatmap of the day is accessible from the game's main menu, next to solo / playlists / multiplayer. - The beatmap of the day screen displays real-time statistics and leaderboards as user submit scores, and includes a chat box. ## Ideas for future expansion - Individual rewards for top N players on every playlist. - Collective rewards for everyone for reaching selected targets. Ideas for targets: - Reach collective `$playcount` in the playlist. - Collect `$total_score` cumulatively. - Get `$total` A/S ranks or above. - Have `$count` of players achieve accuracy of `$percentage` or above. - Have `$count` of players reach `$maxCombo`. ## Tentative UI mockups https://www.figma.com/file/4oaiT5sBCiD2cLjfaEfv1U/Untitled?type=design&node-id=0%3A1&mode=design&t=kd5c0i2eW7vf5Aw3-1 Very makeshift, cobbled together using various scraps from @arflyte's various figmas over the years. Please ignore the fonts being all over the place. I can't be bothered with figma bullshit. And please don't focus on this too much to begin with, the details of appearance are secondary to what this system is supposed to be doing. # How to execute this - `osu-web` must create the daily playlist on a cron. - A beatmap queueing system must exist. Probably something based on a database table. It should be hooked up to ASS so that it can be managed without our direct intervention as devs. - `osu-server-spectator` should announce the daily playlist to all clients. - Score submission will use the existing playlist flow / infra. - Real time stats updates for the daily playlist will be delivered to clients by `osu-server-spectator`. It'll probably be `osu-server-spectator` querying most relevant stats in a loop on an interval and sending that data to all clients at once (there should be no reason to send different data to different clients in the simplest variant). ## How to actually decompose this 1. Implement the queueing mechanism and the room creation cron. 2. Add the button in client, initially using the playlists screen unmodified. 3. Replace the playlists screen with the new one that displays the real time info. # Open questions - How to include the biggest number of players possible - Skill levels: probably will be addressed by picking different star rating ranges on each weekday - Rulesets: this is an open one, maybe we'll run mostly osu! to begin with to see if the system takes, then try other rulesets for a single day every now and then, and if interest keeps up, maybe we can expand the system to have 1 beatmap per ruleset or something - Rewards - Many ideas thrown out, including - medals/badges (probably not viable) - granting supporter - announcement in chat - temporary player title - ability to suggest next beatmap - some sort of new display - tying into a revamp of XP somehow
PLGGitHub1 commented 2 months ago

The in-screen looks odd. The UI and the font is wrong.

bdach commented 1 month ago

@peppy with the MVP in place I'd want to hear your thoughts as to what the next steps are to shipping this.

peppy commented 1 month ago

Are we going with the MVP to start with and only putting in more stuff after we've seen whether there is interest? Or shall I commit more dev time into this to look at the interactivity aspect / playlist UI refresh / potentially new screen specific to this feature?

I'd definitely want to see the UI and refresh parts in by next release, so please do continue with that.

Is there anything I need to be doing wrt the other outstanding tasks (ASS queueing / rewards)?

ASS command is on my list (and should be a simple one). As for rewards, I'll have a think about it and try and make some movement happen on that by end of tomorrow.

bdach commented 1 month ago

Alright, thanks. In that case after some deliberation my immediate plan would be to some quick-and-dirty UI prototyping in the actual game until I get to something that resembles the mockups I started off with in the OP, at which point we can probably talk about fine-tuning UI details. I'm probably going to start by reusing as many components as initially feasible to not get bogged down in bikeshedding but the intention is that we can definitely iterate on design later (maybe with @arflyte's assistance?)

Does that sound ok?

peppy commented 1 month ago

Sounds good.

necocat0918 commented 3 weeks ago

more pp as reward...... pls?

bdach commented 9 hours ago

I guess the basics are in, so closing this one for the initial implementation. We'll see where this goes forward.