Two follow-ups from live testing that just confirmed the whole
controllers_override chain works end to end:
1. manage.sh controllers now polls `docker compose logs wolf` for
"Creating <TYPE> joypad for controller <N>" lines (most recent per
slot wins) and shows what it last saw before asking anything, using
it as the suggested default at each prompt. Every prompt is now
labeled "1st controller"/"2nd controller"/etc - always meaning
Wolf's own 0-indexed "controller 0"/"controller 1" - instead of
asking for a raw slot number, closing the exact client-vs-controller
0-vs-1 confusion surfaced live earlier. Documents plainly that this
can show what TYPE a slot last used but can't show or control WHICH
physical controller becomes which slot - that's decided by Moonlight
client-side, upstream of Wolf's API entirely.
2. Documents a full recovery procedure in the Wii U section for when
Cemu's Input Settings Save button is cut off-screen (confirmed live:
happens even maximized, at higher resolutions, and closing the
window doesn't save) - an Alt-drag/Alt+F7 window-manager fix first,
then editing Cemu's own controllerProfiles/controllerN.xml directly
on the host (plain XML, not inside the container) as a full GUI
bypass. Documents the key insight that made this actually work live:
<mapping>/<button> pairs are universal SDL_CONTROLLER_BUTTON_*
semantics (confirmed earlier against real captured profiles from
different controller brands), so a working mapping can be copied
verbatim into a different device's empty <mappings/> block without
redoing the live button-capture in Cemu's GUI at all.
Verified the redesigned manage.sh controllers flow end to end against a
mocked docker compose logs matching the user's real log output (both
the log-seen and no-logs-seen paths), plus the ordinal-suffix logic in
isolation.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLX1yYKJExGSXmgUhxKQG6