The last apples of the year are lying on a frozen terrace and the frost bell is counting down. Nudge one and it rolls in a straight line until a planted board turns it, a stone or your own boots stop it, or the cart takes it in — a complete turn-based route puzzle authored end to end by AI agents in the real Defold engine, playing in seconds on a phone connection.
Arrows / WASD / tap-to-walk · SPACE nudge · F board · Z undo · 2.12 MB over the wire · starts in seconds
The image concept generator was out of credits when this cycle opened, so the contract for the piece is WRITTEN instead of painted — and a written contract is a stricter colour spec than a painting: every colour below is committed as exact hex and the final audit samples the shipped frames against that list. The board on the left is authored in the same pass: palette chips, the orchardist's proportion rule, the 9×7 cell budget and the on-screen pixel size of every prop.


The whole game ran as gray boxes before any art existed. The turn rules live twice: once in Python, where they author the six terraces, verify every authored solution and BFS-prove par; and once in Lua at runtime. The recorded solutions are replayed in-game through the real input path, so a divergence between the two implementations fails the build instead of shipping. A second, independent bot re-derives a winning line from the live state mirror and plays it on the keyboard — it beats all six terraces on every audit round.


The orchardist is a rigged Blender character whose walk comes from retargeted CMU motion capture, rendered to sprite rows from one elevated orthographic camera with the character rotated per facing. His face acts: eyes, brows and mouth are separate named parts under the head pivot, with a randomised blink and three expressions swapped from state the player can already see. Apples, boards, cart, tree, bramble, stones, the bell and the ground tiles are all Blender renders packed into one Defold atlas.
This lab exists to prove a real-engine game can be playing before a phone user loses interest. Every payload ships pre-compressed and is inflated in the browser, so any static host serves it optimally. Measured first-playable times, Playwright CDP network throttling:
| Connection profile | Throughput / RTT | First playable frame |
|---|---|---|
| Wi-Fi / 4G | 10 Mbps · 60 ms | 2.6–2.7 s |
| Fast 3G (HSPA+ class) | 6 Mbps · 150 ms | 4.2–4.3 s |
| Chrome DevTools “Fast 3G” preset | 1.44 Mbps · 562 ms | 15.4 s |
Where this misses: this lab
holds itself to a first playable frame within 4 s on that fast-3G profile, and
the measurement above is about 0.3 s over it. The payload is the smallest the
lab has shipped; what is left is Defold's atlas packer, which sizes its page
2048 px wide whatever the content, so the texture carries a tier more than its
art needs — splitting the atlas was tried twice and measured worse both times.
Total transfer 2.12 MB of a 3.83 MB bundle (gzip + RDO-basis textures) — the smallest payload this lab has shipped. Measured headless on software rendering: the unthrottled boot floor on this host is 0.88–1.09 s, so roughly a second of every figure above is SwiftShader starting up, which a real GPU does not pay. The fast-3G figure misses this lab's own 4 s line by about 0.3 s under those conditions and is reported as measured.
Mocap walk rows, blink and expression sets, every prop — Blender-rendered into one basis-compressed atlas.
One generated tilemap carries all six terraces; the camera glides down it between levels.
Apples, boards and terrace furniture are all factory-spawned from the level data — no hand-placed instances.
Drifting leaves ride the camera; a dust puff fires wherever an apple is turned by a board.
Resolution-independent HUD in physical pixels — one layout from desktop to phone portrait, with a touch d-pad.
The turn engine owns the rules and posts events; nothing reaches into another object's state.