feat(launcher): controller support, DOAXBV.exe and the window icon
Merged
NO
1d ago+169+169+012345678901234567890123456789-14-14-01234567890123456789
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 buildsrecomp_playfromlauncher_windows.cwithRECOMP_LAUNCHER_PLAYand copies it besideLauncher.exe. It runslauncher.ps1 -PlaySaved, which applies the savedlauncher.jsonchoices exactly as Play does and startsRunGame.cmdwithout 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 fullbuild_game.py --importedrun from this branch built and copiedLauncher.exeandDOAXBV.exe, with byte-for-byte generation parity. WithRunGame.cmdtemporarily replaced by an environment dump,DOAXBV.exepassed 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 clangctest: 48 of 48 pass.python -m unittest discover -s tools: 90 pass (2 skipped: a POSIX-onlydrive_gametest and the optional real extractor).public_export.py verify --require-public-treepasses. - Not tested: a physical controller, and
DOAXBV.exestarting the real game (a player session was running on the test machine).
Contribution checklist
- The change follows
AGENTS.mdandCONTRIBUTING.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.dllappears.
DOAXBV.exe, window icon, and setup fix
- Setup now also builds and copies
DOAXBV.exenext toLauncher.exe; it replays the savedlauncher.jsonchoices exactly like Play and startsRunGame.cmdwithout 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_launchertarget, which only Windows and Linux define; its launcher is compiled from Swift on first use.