Godot Lab · 2D · Skeleton2D + Mocap Platformer

Calaverita

Past midnight on Día de los Muertos, a little calavera slips out to visit her family's ofrenda — across the fiesta rooftops, over the gaps, up the market awnings, across swinging piñatas and past fireworks itching to launch. Pure traversal craft: coyote time, jump buffering, variable-height jumps and a camera that looks where you're going. Fall short and she rattles apart — every bone a separate cutout part on a real Skeleton2D rig — then the bones fly back together at the last candle. No timer, no combat: just you, the moon, and the rooftops.

Play it now

←→ / A D run · Space / W / ↑ jump (hold = higher) · P pause · M reduced motion · touch buttons on mobile · tap once for sound · game data 2.4 MB (+ engine wasm, cached after first load)

▶  Play

The concept is the contract

Made by AI, exported by the real Godot 4 engine — the lab's Skeleton2D cutout showcase. The piece was concepted first; every audit round judged the live build against the painting.

AI concept painting
Concept key art — the contract the piece is audited against
Concept prompt

Side view of colorful Mexican town rooftops at night during a Day of the Dead fiesta: a small cheerful cartoon calavera skeleton walking the terracotta tiles, strings of papel picado, glowing candles, marigolds, a swinging piñata, deep indigo sky with a big moon and distant fireworks.

Calaverita live in the engine
The same rooftops live in the engine — the calavera under the fiesta moon

A skeleton with real bones

The calavera is not a sprite sheet: she is nine Blender-rendered bone parts (each with a camera-space normal-map pass) assembled at runtime on a real Skeleton2D rig, with pivots exported from the modelling scene. Her walk, run and jump are real human motion — CMU capture clips retargeted in Blender, projected to screen-space bone angles per frame, and played back on the 2D bones — so the little skeleton moves like a person. When she falls, the rig scatters: every part becomes a tumbling fragment, then the bones fly back together at the last candle checkpoint.

Calavera cutout parts beside their normal-map passes
The shipped parts: the heroine as nine Blender-rendered cutout pieces (top) beside their camera-space normal passes (bottom), assembled at runtime on 15 Bone2D nodes

Rooftops lit like a fiesta

The rooftops are normal-mapped renders under candle Light2Ds and a moonlight fill, with occluder shadows off the chimneys, five parallax bands from moon to papel-picado strings, and marigold petals drifting on GPU particles. The fiesta music is a runtime-scheduled nylon-guitar pattern built from per-note samples.

journey's end at the glowing ofrenda under the moon
Live frame: journey's end — the ofrenda, its candles and marigolds glowing under the moon at the top of the course

Platformer feel, tuned in gray

Platformer feel per the platform's standard: asymmetric gravity, coyote time, input buffering, variable jump height, camera lookahead — all tuned in the gray blockout before any art existed. The blockout took nine audit rounds; that is where the movement envelope was measured and the course re-authored against it, so the art phase inherited a course that was already fair.

gray blockout of the rooftop course
Blockout: the course as gray boxes — a bounce pad and the checkpoint candle glow, no art yet. The verified run on the finished piece ends at the ofrenda in 52 game-seconds with one fall.

Measured, honestly

The lab audits with Playwright on this host's software renderer (no GPU), so the frame-rate row below is a worst case — real hardware runs the compatibility renderer far faster. The nine blockout rounds are the honest number: three of them were spent on rig bugs that release web builds swallow silently.

MeasurementValueConditions
Game data (.pck)2.38 MBrelease export — image payload 1.96 MB source at one 96 px-per-unit scale
Engine payload (.wasm)35.4 MBGodot 4.3 web runtime, fixed cost, browser-cached after first load
Verified full runspawn → ofrenda, all 3 checkpointsautopilot playthrough with scatter + reassembly drills, every audit round
The rig15 Bone2D · 9 rendered parts · 4 mocap clipsCMU 02_01 walk, 09_02 run, 16_01 jump, 15_04 idle — projected to 2D bone angles
Audit roundsblockout 9 · art 6fix-all-then-re-audit until a round found nothing, then one confirming
Audit frame rate~1–2 fpsSwiftShader software GL — worst case; game time stays real via physics step catch-up

Real engine features, earned

Skeleton2D cutout rig

Nine rendered parts on 15 engine bones with exported pivots — the heroine is a rig, not a sprite sheet.

Mocap locomotion

Four CMU clips retargeted in Blender and projected to per-frame 2D bone angles; jumps picked by vertical-velocity buckets.

Scatter & reassemble

Death detaches every real part into a tumbling fragment; the checkpoint flies the same parts back onto their bones.

Candles + moonfill Light2D

Candle pools and a camera moonlight fill over normal-mapped renders, with chimney LightOccluder2D shadows.

Five parallax bands

Moon, sky, far skyline, near rooftops and a manual foreground papel-picado band — each at its own scroll speed.

Moving hazards

AnimatableBody2D swinging piñatas, bounce-pad awnings exempt from the jump-cut, and a rocket FSM with fuse telegraphs.

coyote 0.09 sinput buffer 0.12 s fall gravity 1.6×jump cut 0.4 run 320 px/sjump −640 px/s bounce −1250 px/s15 bones · 9 parts arrows + WASD + touchpause + reduced motion localization-ready strings