Doom tutorial: overview & setup
The goal
Section titled “The goal”The Python adapter tutorial ends with an Adapter that prints Invocations to a terminal. This tutorial series replaces the terminal with a real game: by the end, viewers redeem Cues that change gravity, spawn bots, speed up monsters, and talk trash in the in-game chat of a live Doom session.
You’ll build it in stages, and each stage introduces exactly one new Pack concept:
- A Pack with one event (
say) and one queue. - Talking to the game over Zandronum’s remote console.
- The first handler — wiring an Invocation to the game, safely.
- A second queue, so instant effects never wait behind chat.
- A
timedqueue withready_after = "done"— the bridge serializes long-running effects for you. - Pack state — a persistent chaos tally, a live active-effect key, and a death counter read from the game.
- Pack config — broadcaster-tunable caps and branding.
- An overlay — Doom-themed toasts and a death counter that don’t hide the game.
- Default redeems to finish it off.
The finished Pack lives at https://git.aiko.works/aiko/chaos-pack-doom; everything in this series is real, runnable code from it. The repo has one commit per stage, in order — check out a commit to browse the source exactly as that stage leaves it.
What you’ll need
Section titled “What you’ll need”- Everything from the Python adapter tutorial
— Python 3 (stdlib only), the
mobrulebinary on PATH, a bridge token. - Zandronum — a multiplayer Doom engine with a remote console (RCON):
https://zandronum.com/download. Install both the client and
zandronum-server. The Pack never bundles or distributes the engine — it just talks to a server you run. - Freedoom — free game data, so you don’t need to own Doom:
https://freedoom.github.io/. (A
DOOM2.WADyou own works too.)
Start the game
Section titled “Start the game”Start a local server with RCON enabled, and connect your client to it:
zandronum-server -host -iwad freedoom2.wad \ +sv_rconpassword 'pick-a-password' +sv_cheats 1zandronum -iwad freedoom2.wad -connect 127.0.0.1:10666Keep both running for the rest of the tutorial. Next: declare the Pack and its first event.