tunacan

a pixel-art game engine in C, with its level editor built in

v0.0.1 PolyForm Noncommercial C99 + sokol early: m7
🥣

Grocery Harrison

The first game on it. The cereal aisle is being rebuilt in tunacan from the web version.

🎨

SPRITE//FORGE

Where the sprites are drawn. tunacan reads its .forge files as they are, with no export step.

✉

Get in touch

The engine is not publicly distributed. Email for source access or licensing.


in the engine

Both frames are the engine's own 320x180, captured from its web build. The editor is not a separate program: it is the running game with its tools drawn over the top, so the room you edit is the room you play.

A pixel-art supermarket aisle: Harrison, a small bearded figure with a guitar, stands by red and blue cereal boxes on low shelves, under a row of strip lights, beside a yellow strip of butter on the floor

m9_aisle: the cereal aisle

Butter to slide on, sugar to stick to, a vine to climb, a parallax back shelf and lights, and a shelf lip drawn in front of Harrison. Tab changes his shirt through a recolour slot in the sprite.

The same aisle in editor mode: a tool bar across the top, a paint panel on the right listing the brushes solid, one-way, slick, sticky and climb, and the collision drawn over the room in red

F1: the same room, editing

The paint panel picks the layer, here the room's collision, and the brush: the five surfaces, or a tileset's tiles on an art layer. Undo covers everything, and an unchanged world saves back byte for byte.


what it does

320x180, whole-number scaleda fixed 60 Hz logic step, crisp at any window size
sprites from .forgeread straight from SPRITE//FORGE, animated by its own timing, with recolour slots
five surfacessolid, one-way, slick, sticky and climb
feel on live knobsevery platformer constant is tunable while the game runs
worlds as textrooms, exits and things in one JSON file that reloads as you save it
a loader that refusesa one-way door, feet in a wall or a typo is an error naming the room, not a bug in play
sound, talk, savessynthesized music and effects, dialogue boxes, save games
keyboard or gamepadinput as named actions, whichever is in your hands

runs on

Windows (D3D11), Linux (GL) and the web (WebGL2) today, each built and run. macOS is next, then the Wii through magnolia. iOS comes by way of hypnopompia, which ships the web build, so it needs no iOS backend of its own.


milestones

The engine part is done enough to build a game on. The vertical slice is that game.

stepwhat it addsstate
m0a window, the 320x180 frame, one sprite, on Windows and in the browserdone
m1sprites, atlas and animation, read from .forgedone
m2tiles, camera, collision, a character that runs and jumpsbuilt, being tuned
m3the world format, hot reload, rooms joined by exitsdone
m4the editor: painting, undo, play from heredone
m5things with game-declared fields, an inspector, doorsdone
m6sound, dialogue, saves, packsdone
m6.5slick, sticky and climbable surfaces, parallax layers, a leading cameradone
m7a vertical slice of a real game: Grocery Harrison's cereal aislestarted
latermacOS, then the Wiiplanned

about

A 2D engine by magmacrunch media for large pixel-art games that should run in a browser today and on other hardware later. C99 on sokol, compiled from source into each game.

the name

The Tuna Can is where Texas Hold'Em Lava Dome practised and recorded, as did Audio Sound Paper and Dino Spumoni (the archive). "Tuna Can" is also a track and album by Tornado Massacre, a magmacrunch side project.

PolyForm Noncommercial 1.0.0 · Copyright 2026 magmacrunch media.

// source access //

tunacan is developed in-house and is not publicly distributed.

For source access, licensing, or anything else, email info@magmacrunch.com.