mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
d2f3e1df7c
The runtime launcher has built a multi-disc roster from game.toml [game] discs for a while. The SETUP host never did -- it did not read that key at all -- so on a first run the wizard could not know a title was a multi-disc set and asked for a single image. The other discs were discovered missing much later, mid-game, at the first swap. Read [game] discs in psxrecomp_codegen_host_apply and publish it as gi.discs / gi.num_discs, matching the runtime's rule that a roster only appears when there is more than one image. A single-disc title publishes nothing and its wizard is byte-for-byte the page it was before. The reader is ~60 lines rather than a TOML dependency: this host shells out to Python for every real parse, and one array of strings does not justify linking a parser. Only [game] discs is recognised; anything else is skipped rather than guessed at. Relative entries are absolutised against the project root, because the launcher existence-checks what we publish and its cwd is not necessarily that root -- a relative path would otherwise render as "missing" on a perfectly good install. Implements persist_setup_discs (recomp-ui, appended additively to RecompLauncherCGameInfo). disc.cfg becomes one path per line in disc order. That is additive in the direction that matters: a reader taking only the first line still gets disc 1, exactly what it got before. A slot the player has not located is written as an EMPTY line rather than skipped, so line N is always disc N and filling one in later cannot renumber the others. Nothing located at all leaves any existing disc.cfg alone instead of replacing it with blank lines. The BIOS half delegates to host_persist_setup with rom_path NULL, which runs its bios.cfg logic and skips its single-path disc write, so the two entry points cannot drift on BIOS handling. Verified against Final Fantasy VII's real 3-disc game.toml by driving psxrecomp_codegen_host_apply directly: num_discs = 3, persist_setup_discs set, all three absolute paths in disc order. Requires the matching recomp-ui change to be visible; without it the roster is published to a launcher that ignores the field, which is inert rather than broken. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UWiDNcWuNtDWHE7Pnhq4jp