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.”