An animated 32×48 hero metasprite whose every byte of data is generated from a single Aseprite project — no hand-written frame tables, no hand-typed animation clips. This is the working reference for the two-tool sprite pipeline:
sheet owns the pixels and the metasprite geometry; anim owns the timeline (tags, per-frame durations, direction). They meet at the frame value: a clip's frame i selects hero_metasprites[i], resolved inline by animTickMeta() and drawn with oamDrawMetasprite().
The artist authored two tags in Aseprite — walk (forward loop) and wave (ping-pong) — with per-frame millisecond durations. opensnes-sprite anim converted those to ticks and folded the ping-pong into the frame order. Press A to toggle between the two generated clips.
The build runs the full pipeline from the two settings files beside the assets (res/hero.png.toml, res/hero.json.toml): opensnes-sprite sheet and opensnes-sprite anim, then the generated assets_gen.asm links the tiles, then main.c compiles (it #includes both generated headers). No data.asm, no conversion rule in the Makefile (docs/tools/CONVENTIONS.md).
console, sprite, dma, text, text4bpp, background, input, anim