Skip to content

Add accessibility mods to ranked play#38209

Open
smoogipoo wants to merge 11 commits into
ppy:masterfrom
smoogipoo:rp-accessibility-mods-2
Open

Add accessibility mods to ranked play#38209
smoogipoo wants to merge 11 commits into
ppy:masterfrom
smoogipoo:rp-accessibility-mods-2

Conversation

@smoogipoo

@smoogipoo smoogipoo commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

See also: ppy/osu-server-spectator#522

Adds accessibility mods (HD, TC, CO, FI) to ranked play. Still called "free mods" to not introduce some new (possibly confusing) naming scheme.

The mods are selected once by the player prior to queueing up, and last for the entire duration of the match. I feel like this is more appropriate to put players on an even playing field, rather than having players effectively cheese their way out of certain mechanics.

To facilitate this,IMultiplayerClient.MatchmakingJoinQueue() has been changed to a method that supports a complex params object that now includes the selected mods.

Queue selection screen:
Screenshot 2026-07-02 at 16 55 17

In the room:

Screenshot 2026-07-02 at 15 38 37 Screenshot 2026-07-02 at 15 38 43

@bdach bdach left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Structural pass on the scoring parts.

Comment thread osu.Game/Rulesets/Scoring/ScoreProcessor.cs
Comment thread osu.Game/Scoring/Legacy/ScoreInfoExtensions.cs
public long TotalScore { get; set; }

[JsonProperty("total_score_without_mods")]
public long TotalScoreWithoutMods { get; set; }

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Be aware that due to intersecting concerns there may be a friction point with ppy/osu-web#13101 here.

Declaring this as non-nullable long may not fly because if the above PR goes in, then lazer scores without mods will have this set to zero. This matters for the read side, as this structure appears to be used both for reading from API as well as writing to it.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocker: As previously discussed, sorting in this leaderboard provider still occurs using TotalScore uniformly.

var orderedByScore = scores
.OrderByDescending(i => i.TotalScore.Value)
.ThenBy(i => i.TotalScoreTiebreaker)
.ToList();

Thus I am reasonably confident without testing that this will result in invalid sorting of the leaderboard if users in the room have selected mods that result in different multipliers.

In the way I envisioned this working, the sort would be adjusted to sort by GetDisplayScore(). That probably still works here, although it'd weird and non-obvious because GetDisplayScore() is adjusted in the implementation to change behaviour depending on UseTotalScoreWithoutMods from the score processor, but you're also passing in useTotalScoreWithoutMods to the provider directly (which I never really wanted to do).

@pacowoc

pacowoc commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Maybe change it to appear before a map on the map metadata screen so that the mods can be toggle on a per-map basis. The community seems to dislike the locked mod decision a lot because they expect "accessibility" options to provide full player agency instead of being locked in blindly before a match not knowing what maps they are playing on.

This feel like a intentional handicap on a "accessibility option" to them and is against the common consensus on "free mods" since it has always been per map instead of per match both in tournaments and multiplayer lobbies.

This change will be a tradeoff between player agency and strategical depth so both are fine imo, I am just here to share some immediate community feedbacks.

I personally disagree with those opinions but it never hurts to share it regardless.

@pacowoc

pacowoc commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Also, you should consider the interaction of this kind of change with DMR, since HD does affect some maps' difficulty by a lot even for HD mains, there is real potential of this skewing the DMR accuracy.

@Tenexxt

Tenexxt commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

The pr calls them 'accessibility mods' but they seem to still adjust in game score results rather than use the unmultiplied score values so it makes sense that you should lock it once per match and not again, kinda like in tetrio (except that place also has whole seperate leaderboards for mods). Its just hell to balance something like this and also kinda unfair anyway, no matter how implemented.

@pacowoc

pacowoc commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

The pr calls them 'accessibility mods' but they seem to still adjust in game score results rather than use the unmultiplied score values so it makes sense that you should lock it once per match and not again, kinda like in tetrio (except that place also has whole seperate leaderboards for mods). Its just hell to balance something like this and also kinda unfair anyway, no matter how implemented.

The problem with this is that it will practically create two separate queues and two different elo points for one player that can play in both queues, kinda complicating the perception of skill.

@pacowoc

pacowoc commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Also you need to consider traceable players, what about hidden+traceable, how should a "separate lb" work on those given the extremely limited amount of players.

smoogipoo added 2 commits July 9, 2026 17:09
Leaving it to someone more experienced with how all of this should work
to decide what type incantations to use here.
@smoogipoo

Copy link
Copy Markdown
Contributor Author

Maybe change it to appear before a map on the map metadata screen so that the mods can be toggle on a per-map basis. The community seems to dislike the locked mod decision a lot because they expect "accessibility" options to provide full player agency instead of being locked in blindly before a match not knowing what maps they are playing on.

Players do not need their own agency. They are expected to compete on a level playing field. I would rather not make this change at all and continue locking players into NM than to take it further as you're suggesting.

This feel like a intentional handicap on a "accessibility option" to them and is against the common consensus on "free mods" since it has always been per map instead of per match both in tournaments and multiplayer lobbies.

Common consensus really does not matter for ranked play, because it's not intending to be a replacement for multiplayer or tournaments. It should be treated as its own system that has its own opinions on how the gameplay loop works.

The pr calls them 'accessibility mods' but they seem to still adjust in game score results rather than use the unmultiplied score values

This is incorrect. Quite a lot of work has been done here and the server to make sure that pre-mod adjusted total scores are used.

The problem with this is that it will practically create two separate queues and two different elo points for one player that can play in both queues, kinda complicating the perception of skill.

Separate queues are not happening.

@smoogipoo

Copy link
Copy Markdown
Contributor Author

I'm locking this discussion, because we really don't need a democratic process to this.

@ppy ppy locked and limited conversation to collaborators Jul 9, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants