feat(web): add browser build for TDK Pinball
Expose the existing Macroquad game as a static WASM website while preserving native desktop behavior. Native-only simulation/file-export code and the per-user filesystem save path are now separated from the browser build. The browser version uses a small WASM-only storage support crate and a Macroquad-compatible JavaScript plugin to persist the same JSON settings and high scores in localStorage. Browser audio decoding starts in an owned background coroutine so the game can render its original loading/attract screens while the embedded sounds finish loading. The checked-in web bundle contains the optimized WASM, centered black HTML shell, and build/serve instructions. Test Plan: - `just test` -- passed, 135 tests - `just clippy` -- passed - `cargo clippy --target wasm32-unknown-unknown -- -D warnings` -- passed - `cargo +nightly fmt --check` and web-storage format check -- passed - `just web-build` -- passed; packaged WASM matches the production artifact - Browser smoke test at `http://127.0.0.1:8000/` -- rendered the centered game, started gameplay, opened settings, and restored a changed language from browser storage in a fresh page with no runtime errors
This commit is contained in:
@@ -31,6 +31,19 @@ development packages are also required (X11, OpenGL, and ALSA). Windows needs
|
||||
no extra runtime installation; macOS builds with the normal Apple developer
|
||||
command-line tools.
|
||||
|
||||
## Browser version
|
||||
|
||||
Build and serve the WASM website locally with:
|
||||
|
||||
```sh
|
||||
just web-serve
|
||||
```
|
||||
|
||||
Then open <http://127.0.0.1:8000/>. The browser build keeps the original
|
||||
640x460 presentation centered on a black page and stores settings and high
|
||||
scores in browser storage. See [web/README.md](web/README.md) for the static
|
||||
bundle details.
|
||||
|
||||
## Deterministic mechanics validation
|
||||
|
||||
Named scenarios can be advanced without waiting in real time. The simulator
|
||||
|
||||
Reference in New Issue
Block a user