Skip to content

Add accessibility mods to ranked play#38209

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

Add accessibility mods to ranked play#38209
smoogipoo wants to merge 9 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.

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