Nine agent skills for building Makepad/Rust games, ported from majidmanzarpour/threejs-game-skills. Same director-routed workflow and premium bar; runtime rewritten for this fork's game crates. - makepad-game-director entrypoint, routing, continuity, asset probe - makepad-gameplay-systems loop, movers vs rigid bodies, input, camera, netplay - makepad-aaa-graphics-builder lighting, shaders, budget, visual scorecard - makepad-game-ui-designer HUD, menus, touch and XR UI - makepad-debug-profiler defect bisection and profiling - makepad-qa-release verification ladder, evidence, packaging - makepad-3d-generator CC0 model search, casts, procedural geometry - makepad-image-generator texgen textures, palettes, sky, icons - makepad-audio-generator sample bank, mixer, material impacts, 3D audio Written against the real APIs in libs/game/*, libs/sim and apps/arcade: the game.* verb table, GameRenderer adaptive quality, the packed 6-float GameMeshVertex layout, script_mod! splash styling, makepad-test driving, and the BUDGETS.md numbers. No paid generation API is required - the CC0 library plus seeded makepad-game-gen replaces them. Includes install.sh (Codex/Claude), validate-skills.sh and a repo-aware probe_assets.sh; both scripts verified against this checkout.
4.1 KiB
Release checks
Pre-ship checklist
Build
cargo check --workspacecleancargo clippyclean for touched crates (repo hasclippy.toml)cargo build --releasesucceeds for every claimed target- No
dbg!, no commented-out blocks, noTODOon a shipping path
Correctness
- Every touched Cx-free crate's tests pass
- Asset-dependent tests ran, not skipped (check the output)
- Driven test covers: reach win, reach lose, pause/resume, retry
- Win twice in a row — catches incomplete
reset() - 5-minute soak: no crash, no memory growth, no frame-time drift
- Every model id in the scene asserted with
model_is_loaded
Presentation
- Screenshots of every state at target aspect ratio, inspected
- UI checked at 16:9, 4:3, and a tall phone ratio
- Touch targets ≥ 44 px if mobile is claimed
- Scorecard ≥ 2.3 average, nothing below 2, if premium is claimed
Performance
- p90 frame time in
--releaseon a named device - Inside
apps/arcade/BUDGETS.mdwith ≥ 20% headroom quality_level()reported — a good frame time from a silent drop to q1 is not a good frame time- Before/after numbers for any optimisation claim
Netplay (if applicable)
- Two sessions stay in sync through a full match
- Clients send input only; host is authoritative
- Content replicates as
(preset, seed, position)
XR (if applicable)
- 72 Hz held
- No face-locked UI, no camera motion without player input
- Snap turn available; no shake
Legal / credits
resources/CREDITS.tomlcurrent- Attribution shipped with the package (CC0 does not require it; do it anyway)
- Third-party licences included
Packaging
makepad-game-pkg: Manifest, Knob, ManifestError, Library, LibraryEntry, Registry, IndexEntry, fetch_lan_package, verify_digest, sha256 / sha256_hex.
- Write the
Manifest— identity, version, entry point, andKnobs for tunables you want exposed without a rebuild. - Pack, producing a content-addressed artefact.
verify_digeston the result — and again on any package you receive.- Publish to a
Registry;fetch_lan_packageretrieves over LAN.
The hash is the authority. A mirror is never trusted more than upstream; bytes from either are verified identically. Apply the same rule to packages: an unverified package is untrusted input, whatever the source.
Version and changelog
Bump the version in the app crate's Cargo.toml. Record: what changed for the player, what changed for a developer depending on the crates, known issues, and the measured performance on the reference device.
Cross-platform statement
For each platform, say which of these you did — never blur them:
| Platform | Built | Ran | Played | Measured |
|---|---|---|---|---|
| macOS | ||||
| Windows | ||||
| Linux | ||||
| Android | ||||
| Web | ||||
| Quest / XR |
Note the fork's constraints: the Android branch is the active target here, and web builds are memory-pressure sensitive (the Route work in this fork exists precisely because of bounded web memory budgets). Do not claim web without a memory reading.
Report template
OUTCOME
Racing game: 3 laps, checkpoints, 4 AI opponents, win/lose reachable.
EVIDENCE
cargo test -p makepad-game-sim 42 passed
cargo test -p makepad-game-blocks 18 passed, 0 skipped (assets present)
cargo test -p makepad-arcade 6 driven tests passed
- win path, lose path, pause/resume, retry, double-win, 5-min soak
screenshots artifacts/shots/{menu,playing,paused,win,lose}-1920x1080.png
playing: dusk desert, low sun, long shadows, 4 tinted opponent cars
perf M1 Air release, p90 11.8 ms vs 16.6 ms budget, q3, 29% headroom
scorecard avg 2.4, lowest 2 (ground), artifacts/scorecard.md
NOT RUN
Quest: built, not run - no device. 72 Hz claim is unverified.
Windows/Linux: not built.
RISKS
Ground material is the weakest category; a texgen pass would raise it.
Netplay tested with 2 clients only; MAX_PLAYERS is 8.
The NOT RUN section is mandatory. Omitting it is what turns an honest report into a misleading one.