Skip to content

Add explicit menu item for exporting guest difficulties from editor#36101

Merged
peppy merged 1 commit intoppy:masterfrom
bdach:guest-difficulty-export
Dec 23, 2025
Merged

Add explicit menu item for exporting guest difficulties from editor#36101
peppy merged 1 commit intoppy:masterfrom
bdach:guest-difficulty-export

Conversation

@bdach
Copy link
Copy Markdown
Collaborator

@bdach bdach commented Dec 22, 2025

A few facts of life:

  • Guest difficulties are at this point a staple of mapping.

  • People are very much used to flinging .osus around (because there's no better alternative).

  • Currently there are two ways to get an .osu out of lazer. You can:

    • Export the beatmap as "compatibility" to an .osz, then transmogrify the .osz to a .zip, then extract the .zip, then pluck out the .osu. This is the "correct" way to make sure stable works, but is also stupidly arcane.

    • Use "edit externally" to mount the beatmap files to disk, then copy-paste out the .osu. This is the wrong way to make sure stable works, because the mounting process exposes the raw "for editing" format with features stable doesn't support, but it is the actual easy one.

  • Reports about guest difficulties exported from lazer "working wrong on stable" are prevalent. Probably mostly because of the preceding point.

What this PR does is introduce a third method to export an .osu, which is designed to be both the easiest one yet and correct. I am hoping this will curb the complaints until support for direct submission of guest difficulties is added - which I still hope to see, but it will be a significant effort client-side (the server side has been ready for years now).

Screenshot 2025-12-22 at 11 20 49

And yes, you will notice that much of the code added in LegacyBeatmapExporter related to manipulation of the path is copy-pasted from LegacyExporter. I don't care enough to invent protected / abstract / whatever else OOP faff for something that may not survive review and is mostly a weird semi-temporary wart.

A few facts of life:

- Guest difficulties are at this point a staple of mapping.

- People are very much used to flinging `.osu`s around (because there's
  no better alternative).

- Currently there are two ways to get an `.osu` out of lazer. You can:

  - Export the beatmap as "compatibility" to an `.osz`, then
    transmogrify the `.osz` to a `.zip`, then extract the `.zip`, then
    pluck out the `.osu`. This is the "correct" way to make sure stable
    works, but is also stupidly arcane.

  - Use "edit externally" to mount the beatmap files to disk, then
    copy-paste out the `.osu`. This is the *wrong* way to make sure
    stable works, because the mounting process exposes the raw "for
    editing" format with features stable doesn't support, but it the
    actual easy one.

- Reports about guest difficulties exported from lazer "working wrong on
  stable" are prevalent. Probably mostly because of the preceding point.

What this PR does is introduce a *third* method to export an `.osu`,
which is designed to be both the easiest one yet *and* correct. I am
hoping this will curb the complaints until support for direct submission
of guest difficulties is added - which I still hope to see, but it will
be a significant effort *client-side* (the server side has been ready
for years now).

And yes, you will notice that much of the code added in
`LegacyBeatmapExporter` related to manipulation of the path is
copy-pasted from `LegacyExporter`. I don't care enough to invent
protected / abstract / whatever else OOP faff for something that may not
survive review and is mostly a weird semi-temporary wart.
@bdach bdach requested a review from a team December 22, 2025 10:40
@bdach bdach self-assigned this Dec 22, 2025
@bdach bdach moved this from Inbox to Pending Review in osu! team task tracker Dec 22, 2025
@peppy
Copy link
Copy Markdown
Member

peppy commented Dec 22, 2025

Seems logical.

A follow-up for this (which you may have already considered?) would be to support hosts being able to drag guest difficulties into the editor and have the editor support updating the current mapset with a new version.

@bdach
Copy link
Copy Markdown
Collaborator Author

bdach commented Dec 23, 2025

would be to support hosts being able to drag guest difficulties into the editor and have the editor support updating the current mapset with a new version

Seems like a decent idea, but I'm not super sure on the UX of that. In particular you could have two cases of behaviour here, one being wherein the guest difficulty is added wholesale and one where an existing guest difficulty is updated.

Probably something I'd wanna try separately.

@peppy peppy self-requested a review December 23, 2025 15:31
@peppy peppy merged commit 1340e18 into ppy:master Dec 23, 2025
7 of 9 checks passed
@github-project-automation github-project-automation bot moved this from Pending Review to Done in osu! team task tracker Dec 23, 2025
@bdach bdach deleted the guest-difficulty-export branch December 29, 2025 06:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants