Stage 10: a fake crowd
The Pack works. Stage 9 left it with default redeems, an overlay, and a README. What it doesn’t have yet is a way to feel it. You’ve been test-firing events one at a time from the Dashboard, and one bot every thirty seconds is not what launch night looks like.
The Crowd Simulator fixes that: fake viewers redeeming your events at a steady rate, against your real bridge, your real adapter, and a real Zandronum server. This stage ships a scenario file with the Pack so the rehearsal sounds like a Doom crowd instead of a uniform random one.
The scenario
Section titled “The scenario”One new file at the Pack root, crowd.toml:
[weights]say = 4.0add_bot = 2.0gravity = 1.0fast_monsters = 1.0
[cadence]rate_per_min = 12
[corpus]"say.message" = [ "get behind the barrel lol", "MOON GRAVITY MOON GRAVITY", "he's one shot trust me", "rip counter +1 incoming", "imagine dodging", "chat is helping :)", "who bought ANOTHER bot", "left left LEFT",]Two choices worth explaining:
- Chat dominates. Real crowds talk far more than they spend.
sayat weight 4 with the effects trailing behind gets the proportions right, and it hammers the handler with the trickiest input surface: viewer text going through your sanitizer into the game console. - The corpus is in character.
say.messageis the event’s viewer-input field, so every canned line arrives exactly like a redemption’s typed text. Generic filler words would pass the schema; these read like chat.
The file is data for the mobrule CLI, not for the Pack. The bridge never
reads it, the manifest doesn’t mention it, and shipping it changes nothing
at runtime. It rides along in the Pack folder the way a good README does.
Run it
Section titled “Run it”Start the game and adapter as usual (the Launcher from stage 2 works), then:
mobrule dev crowd --scenario crowd.tomlWatch what happens at redemption pace: toasts credit ricewaffle and
orbofmeat, bots pour in on the effects queue while gravity holds the timed
queue, the chaos counter climbs. Press Ctrl-C and the sim prints what it
fired. In the Dashboard audit every one of these carries the sim source,
so nothing from the rehearsal is mistaken for a real fire later.
Two variations worth trying:
mobrule dev crowd --scenario crowd.toml --chaos 0.3mobrule dev crowd --scenario crowd.toml --seed 7 --duration 60 --record run.jsonlThe first mixes hostile viewer text into say: exactly the injection
attempts your stage-3 sanitizer exists for, now arriving unannounced in a
stream of normal traffic. The second records a deterministic minute of chaos
you can --replay after any adapter change, which is the cheapest
regression test this Pack will ever get.
What the stage teaches
Section titled “What the stage teaches”A Pack is finished when someone else can enjoy it, and “enjoy” includes the streamer’s first look. A shipped scenario means “see what this Pack is like” is one command for anyone who downloads it, and it means you, the author, rehearse with the same crowd every time. When you build your own Pack, write the scenario early. It pays for itself the first time a corpus line breaks your handler before a viewer does.
See also
Section titled “See also”- Crowd Simulator: flags, scenario format, timelines.
- Defining Events: viewer input and schemas.