Last time I left you at the edge of some black underground water with a broken promise: press F to fish and the game simply told you "Damn, lost my rod!" There was no rod. There was no fishing. There was only water, waiting.
I sat down fully meaning to build that rod. And then I hit the least glamorous wall in game design, the one that stops you before every good idea: if you catch a fish — where does it go? You can't land a thing you have nowhere to put. And even if you could keep it, why would you bother, if it did nothing? A fish you can't carry and don't need isn't a mechanic. It's a decoration that smells.
So this entry isn't about the rod after all. It's about pockets, and about being hungry enough to care what's in them. It is the plumbing under the pretty part — and, as usual, the plumbing turned out to be the whole job.
What there is to play
Scattered on the dungeon floor now are things worth stooping for. A ! is a health potion; a , is a ration of food. Walk over one and it's yours — no fumbling with a pickup key, you just take it, and the log tells you so. Press I to see what you're carrying. Press Q to quaff a potion and get some health back. Press E to eat.
And here is the part that makes the rest mean anything: you now get hungry. Every single turn you take, a little of your belly empties — up in the corner you'll see your food tick down. Let it hit zero and the dungeon starts eating you instead, a point of health at a time, until you either find something to eat or you don't, and die of it. Permadeath was always the promise; now there's a second, slower way for the dark to keep you.
Who actually did what
Same honest split as always. The AI wrote nearly all of the code — the arrays that hold what you carry, the little routines that add and remove a stack, the loop that empties your stomach one notch a turn. I can read every line of it. I could not have written it cold.
What was mine was every number and every rule. How much a potion heals. How fast hunger bites. That eating a ration should fill the belly but never touch your health, while a potion mends health but does nothing for hunger — two needs, two separate answers, so that a full stomach can't save a dying man and a healthy one can still starve. Those aren't code decisions. They're the difference between a spreadsheet and a game, and they're still the part I'm actually for.
And yes — the AI got one thing wrong that's worth admitting. Its first pass happily let you quaff a ration and eat a potion. Nothing crashed; it just felt absurd, glugging a fish fillet. The fix was to give every item a kind, and let the verb check the kind before it does anything — you can only quaff a potion, only eat food. A small thing. But "nothing crashed, it just felt wrong" is exactly the sort of judgement I keep saying is mine to make, so I'd be a fraud not to show you one.
Three decisions I'm glad we made
1. Items are a list, not a language
Every item in the game — every potion, every ration, and soon every fish — is a single line in one small catalogue: what it looks like, what kind of thing it is, and what it does when you use it. Adding a brand-new item is adding one line; nothing else in the game needs to be told it exists. That sounds like a tidiness thing and it is, but it's really a speed thing. When the whole point is to grow a garden a little at a time, the cost of planting one more seed has to stay near zero. This is how you keep it there.
2. Pick it up by walking on it
There's an old roguelike habit of standing on an item and pressing a key to pick it up. We threw that out. You walk onto a thing, it goes in your pack, the log murmurs what you got. One less key between you and the game. The dungeon has enough friction in it already — I want all of that friction to be the interesting kind, the kind you chose, not the kind the interface charged you.
3. Hunger is the point of food
It would have been easy to add rations and stop there — free health-adjacent snacks, why not. But food with no hunger is a reward with no question attached, and a reward with no question is just clutter. The hunger clock is what turns a ration from litter into a decision: do I eat now, or push one more room deeper and hope? It costs almost nothing to run — one subtraction, once a turn, the same turn-based thriftiness this whole engine is built on. It buys the single most valuable thing a game can have, which is a reason to hesitate.
Food with no hunger is a reward with no question attached — and a reward with no question is just clutter.
The same idea, hand-written in C++
None of this is new to me as an idea. An inventory, item types, a use-verb that behaves differently for different things — I've written all of it by hand in C++, slowly and deliberately, over in the roguelike series. What's strange and a little humbling is doing it again in a language I don't know, at a pace I couldn't manage alone, and finding that the hard part was never the typing. The hard part was the same as it always was: deciding what the numbers should be, and what should feel wrong. The machine changed who does the keystrokes. It didn't change who has to have the taste.
So — the rod?
Now you have somewhere to put a fish, and a stomach with an opinion about whether you find one. Which means the groundwork is finally, genuinely done. In the very same update that gave you pockets, the rod went in too — the black water is open for business at last. But that deserves its own entry, because the fishing turned out to be the most surprising thing I've built here yet, and it came from a strange direction I'll tell you about next time.
Go and get hungry. Then go and stand by the water. You'll find, this time, that F does rather more than apologise.
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.