← /journal

May 27, 2026 · 4 min

When CPU bots need to wait for narration

Async Dungeon Jerks felt broken until bots stopped rolling while the tile was still talking.

Dungeon Jerks has pre-generated narration for most tiles — MP3s committed in static/audio/, thousands of them. When a bot lands, the line plays. Humans wait because they’re listening.

The bots didn’t.

The bug that felt like a feature

CPU turns fired immediately. Dice rolled. State advanced. Narration started late or got cut off. In pass-and-play on one phone, you barely notice — someone’s holding the device.

In async multiplayer with three-second polling, it felt like playing against a slot machine wearing a wizard hat.

The fix

We extracted bot decisions into nextBotAction and slowed the cadence: wait for narration to finish, add a small settle pad, then roll. Vitest covers the decision table so we don’t re-break Merlin’s ability logic while tuning pacing.

Same game rules. Completely different emotional read.

Bots with opinions

v1.1 gave CPUs roll-table choices plus special abilities — not random legal moves. They still don’t trash-talk. That’s a human job.

What we didn’t do

We didn’t add websockets. Netlify Blobs + polling is enough for friends who text a link. Fancy realtime would have delayed shipping the thing people can actually open tonight.


The lesson isn’t “make bots smarter.” It’s “respect the beat.”