feat(launcher): controller support, DOAXBV.exe and the window icon

Merged
NO
1d ago
+169-14

Summary

Three Windows launcher changes for 0.6.0:

  • Controller support. The launcher read only the keyboard and mouse. It now polls Xbox and PlayStation pads through the build's own SDL3.dll, the same library the game uses, and maps them like the Linux launcher (launcher_sdl.cpp):
LB / RB          previous / next section, focus the page's first control
d-pad up / down  previous / next control (left stick too)
d-pad left/right change the focused list or number
A                tick the focused checkbox or press the focused button
Start            Play
B                quit

Held directions repeat after 350 ms, then every 120 ms. Only the focused launcher acts, so the pad never drives another window. Before a build exists there is no SDL3.dll, so pads do nothing until then (noted as a shortcut:).

  • DOAXBV.exe. Setup also builds recomp_play from launcher_windows.c with RECOMP_LAUNCHER_PLAY and copies it beside Launcher.exe. It runs launcher.ps1 -PlaySaved, which applies the saved launcher.json choices exactly as Play does and starts RunGame.cmd without showing the window. With nothing built it opens the launcher, whose Play leads to the Build page.
  • Window icon. The launcher window and taskbar button showed the default form icon. The form now loads private/doaxbv.ico, which setup cuts from the disc.

Verification

  • Controller, end to end: an SDL virtual gamepad created in the same process drove the real launcher window, under Windows PowerShell 5.1 and PowerShell 7.6. RB/LB switched sections and focused the first control. A ticked "Unlock swimsuits". Down and Up moved between "Unlock swimsuits" and "Shorter demo cuts". Right and Left changed the title idle list. Start played.
    • Before this change's final mapping, a key-forwarding version left focus on PLAY after a section change, so A started the game. That's why the pad calls the form directly.
  • test_launcher.ps1 (PS 5.1 and 7.6) now also checks the press and repeat timing.
  • DOAXBV.exe: a full build_game.py --imported run from this branch built and copied Launcher.exe and DOAXBV.exe, with byte-for-byte generation parity. With RunGame.cmd temporarily replaced by an environment dump, DOAXBV.exe passed every saved choice (scale 3, MSAA 8, SMAA, gain 0.25, sun shadows, CPU Exhibition and so on) without opening the launcher.
  • Icon: a rendered launcher window shows the wave icon in its title bar.
  • MSVC Debug ctest: 50 of 50 pass. llvm-mingw clang ctest: 48 of 48 pass. python -m unittest discover -s tools: 90 pass (2 skipped: a POSIX-only drive_game test and the optional real extractor). public_export.py verify --require-public-tree passes.
  • Not tested: a physical controller, and DOAXBV.exe starting the real game (a player session was running on the test machine).

Contribution checklist

  • The change follows AGENTS.md and CONTRIBUTING.md.
  • No XBE, generated game C, retail instruction bytes, extracted assets or filenames, saves, BIOS data, private paths, or run evidence are included.
  • Third-party material and its license are identified, if applicable (none).

Summary by cubic

Adds controller support so pad players don't need the keyboard, a DOAXBV.exe that starts the game with the saved launcher settings, and shows the game's icon in the launcher window.

Controller support

  • Xbox and PlayStation pads are read through the build's own SDL3.dll: LB/RB switch sections, the d-pad moves and changes lists, A ticks or presses, Start plays, and B quits.
  • Held directions repeat after 350 ms then every 120 ms, and only the focused launcher responds.
  • Pads do nothing until a build exists, since that's when SDL3.dll appears.

DOAXBV.exe, window icon, and setup fix

  • Setup now also builds and copies DOAXBV.exe next to Launcher.exe; it replays the saved launcher.json choices exactly like Play and starts RunGame.cmd without showing the window.
  • With nothing built it opens the launcher, whose Play leads to the Build page.
  • The launcher window and taskbar now show private/doaxbv.ico, which setup cuts from the disc.
  • macOS builds no longer request the recomp_launcher target, which only Windows and Linux define; its launcher is compiled from Swift on first use.