Defold Lab piece 02 · verified playthrough, desktop + mobile

Marrow Moon

The village show is tomorrow, the prize marrow sleeps on its straw bed — and the snails came tonight. Ferry them to the snail pail before they reach the vegetable beds, and hold the garden until dawn: a complete top-down defense arcade authored end-to-end by AI agents in the real Defold engine, playing in seconds on a phone connection.

Play it now

Stick / WASD moves · SPACE or the button picks up & drops · ~2.4 MB over the wire

▶  Play

From concept to moonlight

The piece was concepted first: a key-art sheet, a gardener turnaround and a callout board fixed the palette — deep indigo night, moonlit sage, ochre snail shells, one warm amber window. Every named element in the sheets was then authored as a real asset, and the live build is audited against them.

Marrow Moon concept key art
Concept key art — the contract the piece is audited against
Marrow Moon in-engine frame
The same garden, live in the engine mid-night

Gray boxes before art

The whole night ran and was defended as gray boxes before any art existed. An automated defender drives every build through the full 240-second night — picking snails, ferrying them to the pail, triaging the marrow — and the blockout rounds caught a real AI defect: snails oscillating in concave corners between beds, fixed with deterministic corner-waypoint routing.

blockout gray boxes
Blockout dawn: the whole game as tinted boxes
dawn win screen
The same dawn with the art landed — 21 snails safely over the wall

A Blender pipeline, rendered to sprites

The gardener is a rigged Blender character whose three walking rows come from a retargeted CMU motion-capture walk, rendered from one elevated camera with the character turned per facing. The stoop was probed numerically across two mocap action sets — the best window turned out to be a twisted action fragment, so the pick animation is an authored three-frame stoop, recorded as the fallback. Snails, beds, the marrow, walls, hedges, cottage and ground tiles are all Blender renders packed into Defold atlases, placed by their measured painted-base metrics.

gardener sprite rows
The shipped rows: mocap walk toward, across and away from the camera; breathing idle; the authored stoop

The instant-load signature

This lab exists to prove a real-engine game can be playing before a phone user loses interest. Every payload ships pre-compressed and inflates in the browser, so any static host serves it optimally. Measured first-playable times, Playwright CDP network throttling, software rendering (a real GPU boots roughly 0.6–1 s faster):

Connection profileThroughput / RTTFirst playable frame
Wi-Fi / 4G10 Mbps · 60 ms2.5–2.6 s
Fast 3G (HSPA+ class)6 Mbps · 150 ms3.95–4.08 s
Chrome DevTools “Fast 3G” preset1.44 Mbps · 562 ms15.3 s

Total transfer 2.38 MB (engine 976 KB + game data ~1.4 MB, gzip + RDO-basis textures). Bundle 4.17 MB raw. The automated defender wins most nights and honestly loses some — the shipped balance is meant to bite.

Real engine features, earned

Sprite atlases

Mocap walk rows in three facings, snail flipbooks in three breeds, bed and marrow damage states — all Blender-rendered, basis-compressed.

Tilemap floor

Grass, stone path and soil painted as a generated tilemap — with the hard-won pad slot that keeps Defold's 0-based cell indexing honest.

Factories

Waves of snails, every wall segment, hedge, tuft and flower spawn from factories placed by measured art metrics.

Particle FX

Moths at the lit window and the marrow, drifting night seeds, and a soft pick-up puff — hand-written particlefx.

GUI scenes

Physical-pixel HUD with a moon-to-dawn meter, virtual stick and pick button — one layout from desktop to phone portrait.

Message passing

Snails report bites, beds change state, the basket child GO mirrors with the facing — every system talks via msg.post.

carry weight −22 px/s per snailpick radius 80 basket capacity 3camera lookahead 100/60 waves 4/6/8/10plink ladder ±2 semitones cloud shadows 0.9×mist 1.15× stick + WASD + arrowspause localization-ready strings