
Doogie, the first pet
When I added zombie hands back on day 6, I ended that post with a promise: after enemies, I want to try pets. It took a while, what with fog, platforms, build mode, the HUD and all the refactoring in between. But this week the world finally stopped being lonely.
Because here is the thing I kept running into: Buildom plays fine, but every session is just me, alone, digging holes in the dark. The zombie hands at least try to kill you. Everything else ignores you completely. Being alone in a world is just doof, as we say in German. Silly. Sad. Dull. All of it.
Meet Doogie
So meet Doogie, the first pet. You stand still for a moment and he appears a couple of tiles next to you. He wanders around a bit, sits, takes a nap right there on the ground. And when I say nap, I mean it: in his current build the little rascal sleeps basically the whole time. A rabbit hops right past him, he cracks one eye open for a second, then goes straight back to snoring. Lazy mutt. But a sweet one. Walk too far away and he is gone, and the next time you stop for a breather, he shows up again to continue his nap.
Pixel by pixel in the editor
Doogie was born in my own pixel editor, the one I wrote back on day 4. That paid off this week: drawing the frames, setting up the idle, walk and sleeping animation sets, and checking the walk cycle right there in the tool took an evening instead of a weekend. The editor does not know it is a game asset pipeline, but it is slowly turning into one.
Small dog, real physics
The fun part was not the behavior, that is a small state machine: idle, walk, sleep, with random durations and a chance to fall asleep after a sitting phase. The fun part was that Doogie runs on the same physics as everything else. Gravity, jumping, collision, all of it. He can hop up a single block, and he lands properly, because his hitbox matches the scaled sprite instead of the raw one. That last detail cost me an hour: with the unscaled hitbox he visibly floated in the air while standing on a ledge, and nothing about the position logic was wrong. The box was just one size too big.
Two design decisions I want to keep for every future pet. First, pets are not combat entities. They take no damage and they never drown. Doogie is company, not a liability. If I ever want a pet to be in danger, that should be a conscious choice for that pet, not a global system. Second, all the tuning values live in one place in the config and in the dog’s asset JSON: how long you have to stand still before he shows up, how far you can run before he despawns, how likely he is to fall asleep. If Doogie ever turns out to be clingy, it is a one-line change.
Why this small feature mattered more than expected
It is a tiny system. A few hundred lines, one state machine, three animations. But walking through a cave, stopping to check the ore veins, and hearing nothing while a small dog plops down next to you and dozes off? That changes how the world feels more than any block or enemy has so far. Empty is a game feel problem, not a content problem, and Doogie is the cheapest fix for it I have found yet.
Next up on the pet front: more variety, maybe a cat, and eventually pets that actually follow you instead of showing up wherever you stop. If you want to watch Buildom grow, follow along.