libretro / RetroArch

Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.
http://www.libretro.com
GNU General Public License v3.0
9.88k stars 1.78k forks source link

[Feature Request] Add support for merging playlist entries of the same game but different languages. #10402

Open tralph3 opened 4 years ago

tralph3 commented 4 years ago

Description

Currently, if you have two roms of the same game that have different languages, two playlist entries appear for each of them.

Expected behavior

Those two playlist entries should be merged into one, and an option should be added in the playlist entry sub-menu to select the language to be launched.

Actual behavior

The entries are not merged and it makes the playlist look messy.

Steps to reproduce the bug

  1. Have two roms of the same game with different languages
  2. Scan them

So, this is what I propose. This shouldn't be hard to do, my idea is to use .m3u files for this, the same way we use them to merge multidisc games into one. This is how it goes:

Add an option to the playlist entry sub-menu to change the current disc index to launch, and the game language. Example:

PlayStation (Playlist)
....|-Final Fantasy VII
........|-Run
........| Rename
........| Remove
........| Disc Index: 2 (NEW!)
........| Language: EN (NEW!)
........| Set Core Association
........| Reset Core Association
........| Information
........| Download Thumbnails

So this is how it should work, RetroArch currently supports .m3u files (as in, you can add them to it via the Desktop Menu and it will detect the ammount of discs a game has and change between them accordingly when setting a new index), so, adding a Disc Index option before you run the game to let you directly run that disc without having to open the game first and change it later should not be a big deal. But how can we make RA detect a game language? Simple, we will use a bit of custom formatting for .m3u files.

Currently, .m3u files are formatted like this:

Final Fantasy VII (Disc 1).cue
Final Fantasy VII (Disc 2).cue
Final Fantasy VII (Disc 3).cue

RetroArch detects three entries, so it knows there's three discs, and the line number (I pressume) lets it know the index of each one. If we want to make RA detect the language, we could format .m3u like this:

EN
Final Fantasy VII (EN) (Disc 1).cue
Final Fantasy VII (EN) (Disc 2).cue
Final Fantasy VII (EN) (Disc 3).cue

JP
Final Fantasy VII (JP) (Disc 1).cue
Final Fantasy VII (JP) (Disc 2).cue
Final Fantasy VII (JP) (Disc 3).cue

That's my idea at least, we could put some special character to let RA know which is a language tag and which is a .cue entry but this alone should work (with the necessary modifications of course). RA should ignore any entry in the .m3u file that is not directly below the language tag that it's set to. Coupled with this we could also make RA detect .m3u files directly instead of having to add them manually? What do you guys think?

WovenTales commented 3 weeks ago

Reviving this to add my support. Don't know how much has changed since the original post was written, so I'm just going off of what I see in 1.16.0.3 (which I know is going to get me yelled at to upgrade, but the changelogs don't seem to have anything relevant -- the ability to disable the initial switch doesn't affect the use as language selection).

M3U is an existing format which doesn't support that proposed structure, so I wouldn't want to do something non-standard like those bare language tags. However, there is a semi-standard "Extended M3U" markup which overloads the comments to provide metadata, and could work instead:

#EXTM3U

#EXTGRP:EN
Final Fantasy VII (EN) (Disc 1).cue
Final Fantasy VII (EN) (Disc 2).cue
Final Fantasy VII (EN) (Disc 3).cue

#EXTGRP:JP
Final Fantasy VII (JP) (Disc 1).cue
Final Fantasy VII (JP) (Disc 2).cue
Final Fantasy VII (JP) (Disc 3).cue

My question is why we even need that. So far as I know (I barely play systems which support it) disc swapping requires manual selection, so why not just have all of the discs in a single, flat list from which you just select the proper language yourself?

Final Fantasy VII (EN) (Disc 1).cue
Final Fantasy VII (EN) (Disc 2).cue
Final Fantasy VII (EN) (Disc 3).cue
Final Fantasy VII (JP) (Disc 1).cue
Final Fantasy VII (JP) (Disc 2).cue
Final Fantasy VII (JP) (Disc 3).cue

Even that is still a slight extension of the current semantics, in that if we're promoting M3U for language selection we should probably do it across the board, which means making sure both .m3u discovery and "disc" selection work for all cores (if the system doesn't support hot-swap, having it imply a reset is an obvious fallback), it would be nice -- but not technically required -- to have the menus display the filename given instead of just the numeric index, and like you said it would be much more ergonomic if we could select which "disc" to launch directly from the playlist entries (which is the one thing that my outdated install might be behind on).

A related feature, probably as an option in setting up manual scans, would be to hide/skip anything which is included in an M3U (and, to make it a bit more broad, CUE as well) rather than letting them clutter the playlist, but that could be implemented entirely separately.

The biggest challenge I see is that one selling point of the current state of M3U is a single save being shared across all discs, so it would only work for content where all languages being collected have compatible save data. Since M3U creation is still a manual process that just means it's on the curator to do their due diligence to be sure they are compatible.