makepad/apps/arcade/src
Admin 0b1249376e Arcade: the demo world becomes a splash template
The directive was that the demo scene become a project template you can make
new worlds from and edit by voice. This is the blocker gone: an authored
splash file can now build the world the demo builds.

`apps/arcade/resources/template.splash` is that world — sky, sun, terrain,
crossroads, two rows of houses, six distinct drivable cars, a bearded hero,
wandering townsfolk and the spiral climb — entirely in `game.*` verbs. It
loads: "eval ok, 28 entities, 5 skinned characters".

Two engine gaps had to close first, and both were the same shape: arcade
owned something the script could not reach.

**The script could not see the asset library.** `ScriptHost::set_assets`
existed and arcade never called it, so every asset verb — find_model, model,
kits, cast — reported "no stock library on this device" on a machine with
4,700 models on disk. arcade built an index for its own Rust demo and kept
it. An authored game therefore could not use any of the art the demo is made
of, which is most of the reason the demo had to stay in Rust. The index is
now built once, lazily, and shared with the host.

**Script characters had no bodies.** The skinned draw path walks
`self.villagers`, which only the built-in Rust world ever filled, so every
character in an authored game rendered as its bare collision box — which is
what a splash world looked like next to the demo. `sync_script_characters`
now builds that list from `blocks.characters` after each eval, matching the
model id the script asked for against the loaded cast and round-robining on a
miss. A wrong-looking character beats an invisible one.

Not yet done, and the template is honest about which parts are which: the
climb's moving lifts and the fireworks still have no verb, and the world is
written out longhand where the Rust version used loops.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 16:59:46 +02:00
..
ai.rs Arcade: expose the app as a library so the eval harness measures the real thing 2026-08-03 09:23:14 +02:00
arcade_view.rs Arcade: the demo world becomes a splash template 2026-08-05 16:59:46 +02:00
audio.rs Arcade: chat panel, mic, and the audio backend it never had 2026-08-03 08:28:54 +02:00
authoring.rs Arcade: chat panel, mic, and the audio backend it never had 2026-08-03 08:28:54 +02:00
bigworld.rs Bind the library and composition into script — and tell the model it exists 2026-08-03 12:24:10 +02:00
browser.rs Arcade M6+M7: packaging/sharing with sandboxed installs, and the pretty pass 2026-08-03 03:27:09 +02:00
capability.rs Arcade M4: voice + AI tiers, game library, /pair key flow, and libs/game/script 2026-08-03 02:05:50 +02:00
chat.rs Arcade: chat panel, mic, and the audio backend it never had 2026-08-03 08:28:54 +02:00
coedit.rs Arcade M5: multi-Claude co-editing — intent log, semantic rebase, soft leases 2026-08-03 02:45:31 +02:00
intent.rs Arcade M3 (part 1): MR/VR stage modes, XR input, settings panel, authoring inbox 2026-08-03 02:32:22 +02:00
lib.rs Bind the library and composition into script — and tell the model it exists 2026-08-03 12:24:10 +02:00
library.rs Arcade M4: voice + AI tiers, game library, /pair key flow, and libs/game/script 2026-08-03 02:05:50 +02:00
main.rs Baked AO for static props, the big world wired, and steering fixed at its source 2026-08-03 18:34:14 +02:00
pair_server.rs Arcade M4: voice + AI tiers, game library, /pair key flow, and libs/game/script 2026-08-03 02:05:50 +02:00
pairing.rs Arcade M4: voice + AI tiers, game library, /pair key flow, and libs/game/script 2026-08-03 02:05:50 +02:00
settings.rs Arcade M3 (part 1): MR/VR stage modes, XR input, settings panel, authoring inbox 2026-08-03 02:32:22 +02:00
synth.rs Fireworks: streaks are trains of dots, not stretched rects; sound removed 2026-08-05 16:59:45 +02:00
xr_input.rs Arcade M3 (part 1): MR/VR stage modes, XR input, settings panel, authoring inbox 2026-08-03 02:32:22 +02:00