feat(launcher): copy disc art and icon during setup
Summary
A fresh install starts on a plain sea backdrop with the default Windows icon,
because private/launcher and private/doaxbv.ico are gitignored and nothing
created them.
Setup now copies the launcher art and cuts the program icon from the player's own
disc on Windows builds. tools/launcher_art.py finds four textures in the disc's
AFS archives by their runtime replacement key, so no game file names are
recorded, and writes only files that are missing. tools/build_game.py runs it
before CMake configure, which is when private/doaxbv.ico is embedded in the
runner. A failed extraction prints Skipped launcher art: ... and does not
block the build.
The launcher falls back to the extracted beach.png, a sunny location preview
scaled to fill the window, when no player background.png exists, so a supplied
island map frame still wins. The icon is the wave emblem cropped square from the
logo at 256/48/32/16; the runner and the launcher window both use it. Setup never
overwrites private/launcher/*.png or private/doaxbv.ico.
Independent of #149: both edit tools/launcher.ps1, in different places.
Verification
python -m unittest discover -s tools -p "test_*.py"— 66 tests OK, 1 skipped
(addstest_launcher_art, which builds a synthetic AFS/XPR disc).python tools/public_export.py verify --require-public-treeand
verify-archive— passed.powershellandpwsh -File tools\test_launcher.ps1— passed on 5.1.26100.9711
and 7.6.8.python tools\launcher_art.py <extracted disc>— wrote 5 files in 1.5 s; the
extracted logo and A/B prompts are pixel-identical to the existing art, and the
ICO reads back with all four sizes.- MSVC Debug
ctest— 47/47 passed. clang/MinGWctest— 45/45 passed. - Offscreen launcher render with the extracted art shows the beach backdrop with
the logo and prompts. - Not run: a full ISO build through the launcher's build button. The new call sits
before configure and was exercised directly against the disc, and no gameplay
or runtime code changed.
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.