direct: a home page and an n64lle Settings page before Play (direct_mode 3) - #13
Merged
Merged
Conversation
…ode 3)
Direct mode no longer boots straight into the game. It opens the title's home
page -- Play, <core> Settings, Mods, Quit -- and closing the game returns to
it. `--boot` keeps the old behaviour; `direct_mode` goes to 3 and
docs/RELEASES.md calls out that a revision-2 command line now opens the page.
The settings page ("n64lle Settings") is laid out like the Super Nintendo page
and shared with the library, which opens it from an N64 platform header's
"n64lle Config":
- System tab: the core's declared options, player-facing and developer cards,
with an "all titles / this title only" scope when opened for a title.
Options layer platform < title < --opt.
- Gamepads tab: four seat cards (Auto / Keyboard / a gamepad / None), each
opening a controller page over a new N64 pad picture (assets/src/pad_n64.svg)
with a chip per input, labelled in the core's own names; click and press to
bind. Stick deadzone, reset / copy per seat.
Everything is built from `retro-core-runner --describe` (Retro-Runtime
feat/describe), cached per platform; a runner without it still plays and the
page says what it lacks.
PlaySession reads the seats and maps (src/hub/hub_core_settings) instead of a
hard-coded table; the defaults reproduce that table, plus TFGH for the right
stick, which left a keyboard with no C buttons. The library's play path reads
the same files.
Mods: the hub reads n64lle's layout (mods/<origin>/<id>/manifest.toml,
selection in <title dir>/mods.toml, written as n64lle writes it) beside
psxrecomp's, and the page writes whichever layout it found. The home page shows
what the core logged about mods in the last session (core.log). "Enable all"
now skips built-in provider packages, as their checkboxes already did.
Tests: retro-hub-settings-test (describe parsing on real n64lle records,
escapes, seats and option round-trips, seat planning, n64lle mods read/write).
Checked by hand in Direct mode on Pokemon Stadium: settings saved per layer and
reached the core (render=software), key capture, mods applied and refused.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TechnicallyComputers
added a commit
that referenced
this pull request
Sep 27, 2026
…untime overlay) landed on main CMakeLists.txt: retro-hub gets both hub_title.cpp and retro_overlay. The Retro-Runtime pin is main's d5146fa. build-local + ctest 15/15; the Pokemon Stadium title app rebuilt on it (dev runner d5146fa), every kit gate passed, and it ran from a clean directory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Direct mode opens a home page instead of booting straight in. The page has Play, n64lle Settings, Mods and Quit, and closing the game returns to it.
--bootkeeps the old behaviour.direct_modegoes to 3, and docs/RELEASES.md calls out that a revision-2 command line now opens the page. No script or test runs Direct mode unattended, so nothing breaks; the only automated call is the packager's--run-core-without---romparser check.The settings page follows the Super Nintendo page's layout and helpers. The library opens it from an N64 platform header's n64lle Config.
--opt.assets/src/pad_n64.svg, drawn inpad_snes.png's flat style).retro-core-runner --describe(runner: --describe prints a core's options and input labels, no ROM needed Retro-Runtime#1), cached per platform incore_description.txt. A runner withoutdescribe 1still plays; the page says what it is missing.Input:
PlaySessionreads seats and maps fromsrc/hub/hub_core_settingsinstead of a hard-coded table.Mods:
mods/<origin>/<id>/manifest.toml, selection in<title dir>/mods.toml, written exactly as n64lle writes it) beside psxrecomp's, and writes whichever layout it found.Files it writes (all under
<data dir>/platform/<platform>/)input.ini: seats, maps and deadzoneoptions.ini: option values for every titleoptions/<stem>.ini: one title's overridescore_description.txt: the last--describeTests
retro-hub-settings-test(the repo's first ctest). It covers:--describeparsing on real n64lle records, and escapes;render=software);feat/core-mods(RetroPortingToolKit/n64lle#47), mods were applied, and a stale package was refused and the refusal shown on the home page.Not covered
Merge order
RetroPortingToolKit/Retro-Runtime#1 and RetroPortingToolKit/n64lle#47 first. This PR degrades cleanly without either: no labels without
--describe, and mods written but not applied by an older core. It is only fully useful with both.🤖 Generated with Claude Code