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.
3.2 KiB
Evidence manifest
What counts as proof. "It should work" is not on this list.
Levels of evidence, weakest to strongest
- Compiles —
cargo check -p <crate>. Necessary, never sufficient. Makepad resolves the splash DSL at runtime, so a widget or style error survivescargo checkand appears on launch. - Unit-tested —
cargo test -p <crate>for a Cx-free crate. Strong for rules: physics, generation, scoring, netcode, merge. - Driven — a
makepad-testtest that launches the real app, sends real input, and asserts onwidget_snapshot()or a log line. - Seen — a
screenshot()from that run, inspected by you, at the actual target aspect ratio. - Measured — frame time, draw calls, instance bytes, entity counts, against
apps/arcade/BUDGETS.md. - Shipped —
--releasebuild succeeds and runs.
Required by change size
| Change | Required |
|---|---|
| Constant, copy, colour | 1 |
| Rule change in a Cx-free crate | 1, 2 |
| New mechanic | 1, 2, 3 |
| Visual or UI change | 1, 3, 4 |
| Performance work | 1, 5 (before and after) |
| Full game or premium pass | all six, plus the scorecard |
Capturing each
Unit test — the Cx-free crates are the point of the architecture:
cargo test -p makepad-game-sim
cargo test -p makepad-game-gen
cargo test -p makepad-game-blocks
Driven test — makepad-test gives TestApp with type_text, press_key, touch_down, screenshot, widget_dump, widget_snapshot, wait_for_log_contains:
use makepad_test::{makepad_test, TestApp, KeyCode};
#[makepad_test]
fn player_scores_on_pickup(app: TestApp) {
app.wait_for_log_contains("game: ready");
app.press_key(KeyCode::ArrowUp);
app.wait_for_log_contains("score: 1");
let shot = app.screenshot();
println!("evidence: {}", shot.display());
}
Headless probe — for render and perf claims without a window:
cargo run -p makepad-arcade --example bigworld_probe --release
Measurement — read from the renderer, do not estimate:
renderer.frame_p90_ms(); // Option<f32>
renderer.quality_level(); // adaptive quality actually applied
renderer.quality_reason(); // why it dropped
RenderStats::instance_floats is the authority on instance stream width — the BUDGETS numbers were taken from the compiled shader, not counted by hand. Do the same.
Asset resolution — prove the scene is not silently on primitives:
assert!(renderer.model_is_loaded("kenney/racing/vehicle-truck-yellow"));
Screenshot discipline
- Capture at the target aspect ratio, not the default window.
- Capture the states that exist: menu, playing, paused, win, lose. A premium claim with only one screenshot is unverified.
- Look at them. An agent that captures a screenshot and does not describe what is in it has produced a file, not evidence.
- Name them for what they show:
artifacts/shots/playing-desert-1920x1080.png.
Reporting
Keep detailed evidence and the scorecard in artifacts/. Keep the final answer focused on what works and what the remaining risks are. State plainly what you could not run and why — an unrun check reported as passing is the one failure mode that destroys trust in everything else in the report.