A cinematic-platformer tribute to Blizzard's Blackthorne (1994), written in C on raylib 6.0 and compiled to WebAssembly. Weighty, deliberate traversal — but with a jump. A pump-shotgun that fires forward and over the shoulder. Ducking into background shadow alcoves to let bullets pass you by. All art, naming, and levels are original (or CC0) — nothing is copied from the source of inspiration.
Playable end-to-end: four areas — Sunken Mines → the Mire → the Ashlands → the Usurper's Keep — linked by a Daystone-shard gate, with NPC gifts and hints, area passwords, and the Maldrak boss at the end.
Entering the Sunken Mines — the first of four areas







Every actor and tile is an original, code-generated pixel-art sprite — no external or copyrighted assets. The hero animates through idle, walk, fire (forward and over the shoulder), climb and hurt; the whole cast can be reskinned by dropping in your own CC0 PNG strips. Here's who you'll meet.
--dumpsprites exports it).Weighty movement with a real jump, ledge climbs, moving lifts that carry you, and shadow alcoves you duck into to dodge fire.
A pump-shotgun that fires forward or over the shoulder, magazine + reserve ammo with auto-reload, and power/speed upgrades.
Three behaviours — a shooter, an advancing brute, and a cover-using sentry — plus the Maldrak boss fight.
A melee knife, placed bombs that blow cracked walls, keys and locked doors, levers that raise bridges, and persistent pickups.
Actors and tiles render as original, code-generated pixel-art sprites; drop-in CC0 PNG strips can reskin the whole cast.
Dynamic lighting + vignette, parallax backgrounds, sparks/blood/smoke/embers, screen-shake, floating damage numbers, and a lead-where-you-face camera.
| Action | Keys |
|---|---|
| Move | A / D or ← / → |
| Jump | Space |
| Up — climb / enter shadow / use door / lever | W or ↑ |
| Down — climb down / leave shadow / duck | S or ↓ |
| Run (hold to sprint) | Shift |
| Fire forward | J / Ctrl |
| Fire backward (over the shoulder) | K |
| Knife (melee) | V |
| Place bomb / throw bomb | E / T |
| Pause | P |
Tip: click the canvas first so it captures the keyboard.