Devlog 01  ·  15 June 2026

A light in the dark

A little while ago I admitted something on this site that took me years to say out loud: in four decades of making games and writing books about how to make them, I had never once built a game that runs in a web browser. I didn't know how. So I'm learning in public, with AI as my collaborator, and writing down honestly what happens. This is the first entry — and somehow, there's already a game to play.

What there is to play

It isn't much yet, and that is entirely the point. You drop into a dungeon — caves and rooms tangled together — and you walk around it by torchlight. The dark peels back as you move, and remembers itself, dimly, once you've passed. Find the stairs and you descend to a fresh one. There are mineral veins in the walls, rubble underfoot, and still pools of black water you can't cross but can see across.

That's the whole game right now: a walking simulator with atmosphere. Play it here — and if you press F to fish, well, you'll see.

An ASCII roguelike dungeon of caves and rooms, lit in a circle around the player's @ by field of view, with already-explored areas dimmed to a cold grey memory.
The first playable build: a torch-lit dungeon of caves and rooms. Everything you can see, you can see because the field of view says so — the rest is darkness, or memory.

Who actually did what

Let me be straight about the "with AI" part, because that honesty is the only thing that makes this worth writing. The AI wrote most of the code. I can read every line and tell you exactly what it does — but I could not have typed it from a blank file, not in JavaScript, not against the browser's canvas.

What I did was decide. How the dark should feel. How far the torch should reach. That the dungeon should be caves and rooms, not one or the other. That a turn-based game has no business redrawing the screen sixty times a second. Those thousand small judgements are still mine; the keystrokes are mostly the machine's. I think that's a fair division of labour — and I'll keep being plain about where the line falls, including the times the AI got it wrong.

Three decisions I'm glad we made

1. Draw on a turn, not on a clock

The first thing suggested to me was an ordinary game loop: redraw everything, sixty times a second, forever. But a roguelike is turn-based — nothing moves until you do. So we threw that out. The game draws once, then sits perfectly still until you press a key. It is the single biggest reason it will stay smooth as the levels grow heavier. The cheapest work is the work you never do.

2. Glyphs as a texture, not as text

Here's where forty years of C++ actually earned its keep. I know from hard experience that drawing a wall of letters straight from a font, every frame, will make a laptop without a graphics card stutter — I have watched it happen, more than once, on my own machines. So instead we draw each letter once, in white, into a little off-screen image, then stamp those stamps onto the screen and recolour them on the graphics card. The browser blits images without breaking a sweat. It's the very same lesson I teach in C++ over in my roguelike series — just spoken in a language I'm still learning.

3. Field of view by torchlight

The "seeing" is an old and rather beautiful algorithm called shadowcasting — the same one I use in the C++ tutorials. It works out precisely what you can and cannot see from where you stand, and it runs once, on your turn, so it costs almost nothing. The atmosphere — bright at your feet, dimmer at the edges, a cold grey memory of where you've already been — isn't expensive cleverness. It's just how we colour the result in. Pretty, and very nearly free.

One idea, two windows: the honest, AI-assisted scramble to make it work in the browser, and the patient, hand-written version in the language I've taught for decades.

A garden, not a project

I'm not building this towards a release date. There isn't one. It's a garden: it grows a little at a time, and the only rule I've set myself is that it is always playable. Whatever exists the day you visit, you can play. Some weeks it will gain a monster. Some weeks something stranger. And because every level is grown from a seed — a single number, printed when you start — the same number always grows you the same dungeon. Handy for me when something breaks; handy for you if you find a level you love.

The fishing rod I haven't built yet

Those black pools aren't really decoration — or rather, they are, for now. They're a promise. One day you'll stand at the water's edge, press F, and actually fish. Today you press F and get told "Damn, lost my rod!" — which is, honestly, the truest status report I could give you. There is no rod yet. There is no fishing. But there is water, waiting. And somewhere further off, if the mood takes us, a door that doesn't lead deeper but out.

No roadmap, remember. Next time might be a thing that moves and means you harm. It might be the rod. I genuinely don't know yet — and I'll decide partly on what you tell me. Play a few seeds and let me know what felt good and what felt flat.

Either way, it exists now. A month ago it didn't. That still feels like the whole point.

Want the longer, patient version of these ideas, hand-written in C++? It's in Roguelikes in C++ with SDL3 and the free Learning C++ by Building Games.