Why this exists
You've seen the videos — Doom running on a pregnancy test, on a custom CPU, on anything with a handful of pixels. It's a genre at this point. I watched a few too many and thought: why not put it on Cardano as a real game? Not a screenshot, not a link to a hosted build — the actual playable bytes, living on the ledger itself.
So I worked out what protocol that would take: how to chop a WebAssembly game into UTXO-sized pieces, store them as inline datums, and read them back at play time with integrity you can verify. That protocol is what this project is. I plan to write it up as a CIP / CPS when I get the time.
The three games
FreeDoom · Episode 1
The real Doom engine (doomgeneric) + the free Freedoom WAD — all nine E1 maps, mouse-look, and saves.
ProtoDoom
A custom Rust raycaster written from scratch — 3 enemy types, mouse-look. The proof-of-concept that started it.
ProtoDoom (simple)
The very first, bare-bones raycaster build — the smallest thing that proved a game could live in a datum.
All three boot straight from the chain. Open the game center →
How it works
- Compress & chunk. The game (engine + WAD) is deflate-compressed and sliced into 14 KB pieces.
- Store on-chain. Each piece becomes an inline datum on its own UTXO; a manifest lists them all, hash-pinned by SHA-256.
- Mint the NFT. A CIP-68 token carries a tiny two-stage bootstrap — the whole loader is itself stored on-chain too.
- Play. The bootstrap reads the loader back from the ledger, the loader reads every chunk, verifies each hash, decompresses, and boots the game in an iframe.
Want to see it for yourself? Browse the mint transaction and every on-chain UTXO →
Dev log · how it evolved
A hobby project
This is a hobby project — I hope you have fun with the concept. I don't plan to extend it much further; I do plan to submit a CIP / CPS for the protocol, and the source is open. Built for the joy of seeing Doom run somewhere new.