“You made a video game,” you say flatly, staring at a screen full of letters. “It’s letters.”
It is letters. That is the genre. Ascend is an ASCII fantasy roguelike in the spirit of NetHack: you descend into a dungeon, recover the Amulet of Yendor from the depths, and climb back to the surface to ascend. You buy provisions with gold. You die a lot. When you die you leave bones behind, and a later run can stumble across what’s left of you, which is both a proud roguelike tradition and a fair summary of most of my side projects.
It started as a fun little dungeon crawl, then grew a procedural soundtrack, touch controls, and an in-dungeon shop economy settled on chain. And then it became the second of my demo tests.
The Test
Can you take a real, reasonably complicated web app (a game with audio, touch controls, and on-chain payments) and ship the whole thing on decentralized infrastructure? Not “hosted on a server that happens to talk to a blockchain.” The app itself, stored on a chain, found through a name registered on a chain, opened inside the Polkadot app like any other app.
Short answer: yes. Long answer: yes, but.
The But
The name. I wanted ascend.dot. The registry said no. Short names are reserved for accounts that have proven they belong to a real human, and mine hadn’t. An account with no personhood status can only register a name at least nine characters long that ends in exactly two digits. Hence: ascendyendor00. It has all the dignity of a gamertag from 2004. I’ve made my peace with it.
The expiration date. The app lives on the Bulletin chain, which is decentralized storage with a catch: data is kept for about two weeks unless someone renews it, and then it’s cleaned up. Publishing isn’t fire-and-forget. Skip the renewals and the dungeon quietly collapses about a fortnight later. So a scheduled job republishes it every week (uploads are incremental, so a renewal that changes nothing costs next to nothing), and a GitHub Pages mirror stands by as an escape hatch in case the whole arrangement catches fire.
“So your game has a best-before date,” you say, sniffing a carton of milk.
It has a best-before date that renews itself every week. Which is more than I can say for the milk.
The cache. Every upload is immutable and addressed by the hash of its contents, which is lovely right up until the browser’s service worker keeps cheerfully serving you last week’s build. Cache invalidation remains one of the two hard problems in computer science, decentralized or otherwise.
What It Proved
A full game can ship as a static bundle to a storage chain, get a permanent on-chain name, and run inside a wallet app on a phone, with no server of mine anywhere in the loop. The rough edges are real, and they’re the useful part: identity gates on names, storage that expires unless you tend it, and caching that assumes the internet still works the old way.
Play it at ascendyendor00.dev-dot.li, or open ascendyendor00.dot in the Polkadot app. Bring a light source. Pray at the altars. Don’t eat anything you find on the floor.
— Kasey