← Halloween 2026

The Séance

Drawing Room Running in the show Firmware by Sid Loritsch, updated by Orson

Two séance tables, 16 seats. Abigail asks 15 questions; each seat answers with 6 lit buttons. Every player has two candles. Lose both and you leave the circle, while the game goes on around you.

On this page

Status right now (2026-10-12)
PartState
Firmware on the tableseance_master 1.4.9 (as of 2026-10-11).
Next firmware1.4.12, built and registered on Understudy, not yet flashed. It fixes the replayed clips Brett heard on 10-11 (a question or "not everyone got that right" played twice). Zach will flash it the next time he is at the venue, through Understudy.
BrightSign cardSéance v2 layout: 70 audio clips (intro, 15 questions, finale, "everyone is out" ending, round results, test-mode announcement). A re-voiced v3 take of the same script exists as a card-only swap; which take is on the card now is not recorded here.
CandlesBoth tables lit, each on its own data line (table one = Mega pin 21, table two = pin 20).
Show networkAn ESP32 radio on the Mega (seance-1) sends every line the game prints to Understudy and takes staff commands back.
Staff answer keyOne-page printed sheet for staff (v2 audio).
Overview & player flow

16 players across two 8-seat tables in the Drawing Room, playing one game. Each seat has 6 lit buttons (YES, NO, TRUE, FALSE, SUN, MOON) and 2 candles. Players register by holding SUN + MOON together, then answer 15 questions about Abigail's séance as her narration plays. Questions 1 to 3 are practice. From question 4, a second wrong answer puts that player out, and the game keeps going for everyone else.

Control: one Arduino Mega runs the whole game. Each seat's button box is a small Waveshare module, and all 16 share one RS-485 wire back to the Mega. A BrightSign plays all the audio when the Mega asks for a clip. The Mega owns all the game logic; the BrightSign never decides anything about scoring.

Patron walkthrough
  1. Waiting Candles lit at every seat, button lights off. The start button blinks. staff press and release the start button (input 8 of a seat box) → Mega asks the BrightSign for the intro clip
  2. Intro & registration Abigail welcomes the circle. When she asks, SUN and MOON flash at every seat; each player holds both. A registered seat's candles turn bright, and the candle ring fills seat by seat as the time to join runs out. flashing starts at the intro's TRIG (43.2 s); registration closes 60 s in ("Wonderful."); candles light on "You have two candles." (87 s). Seats nobody registered at go dark for the game.
  3. Questions 1–3 (practice) Buttons are dark while she asks; all 6 light up when it's time to answer. Wrong answers cost a candle only for now, and she tells the circle how they did. 10 s answer window; the chosen button stays lit; candles show green/red for 3 s; after Q3 everyone still in gets both candles back
  4. Questions 4–15 Same answer cue. One wrong answer puts out a candle; a second puts out both and that player leaves the circle. After each question Abigail says what happened ("Two of you have lost a candle", "One of you has left the circle", "Three of you remain"). no answer counts as wrong; an eliminated seat's buttons go dark and its presses are ignored
  5. Ending If anyone is left after Q15, the finale plays and the survivors' candles flicker green. If everyone is out early, the "everyone is out" ending plays and all candles slowly flash red. finale = clip 16, all-out ending = clip 17; when the clip ends the table goes back to Waiting
What's built
FieldValue
Seats16 (8 per table), 2 tables, 1 room
Controller1× Arduino Mega 2560 with an RS-485 shield
Seat boxes16 Waveshare Modbus RTU 8-channel I/O modules on one RS-485 bus (inputs = the 6 buttons + start, outputs = the button lamps)
CandlesWS2815 addressable LED strips, a block of LEDs per seat (only the first two lit); table one on pin 21, table two on pin 20
AudioBrightSign on serial (Mega Serial2 ↔ the BrightSign's GPIO header used as a serial port, 9600 baud). Needs BrightSign firmware 9.1.151 or newer.
Show networkESP32 radio on Mega Serial1 (seance-1), forwards the game log to Understudy and passes staff commands in
Firmwareplatform/tools/seance_master: Sid's original (2026-09-30) kept beside it, with a diff of every change
SpecBrett's "Condensed Programming & Wiring Clean Sheet" (2026-08-11). The game rules match it; the hardware differs (see Build list).
Protocol: Mega ↔ BrightSign

Sid's own short text lines, one per line, ending in a carriage return. This replaced the spec's Q07_START / Q07_READY idea, but it does the same job: the Mega never has to know how long a clip is.

DirectionLineMeaning
Mega → BrightSignPLAY nplay clip n (0 = intro, 1–15 = questions, 16 = finale, 17 = all out, 18–68 = round results, 69 = test-mode announcement)
BrightSign → MegaSTRT nclip n started
BrightSign → MegaTRIG nclip n reached its cue point
BrightSign → MegaFEND nclip n finished (the answer window opens)
BrightSign → MegaHELOidle heartbeat; the Mega waits for it at power-on

The BrightSign repeats its current status every ~2 s. Lessons from the live tests:

Staff tools & tests

At the table

Commands (USB serial at 115200, or over the show network via Understudy)

CommandWhat it does
TESTMODE / TESTMODE n / TESTMODE SEATS 2,4,7 / TESTMODE OFFcomputer players in all / up to n / these empty seats; OFF cancels. Between games only. Each computer seat follows a fixed plan (one wins with both candles, one with one candle, the rest go out at different questions) and every press is logged.
LIGHTTEST / LIGHTTEST OFFevery candle LED red, green, blue, white in turn, and every button lamp flashes, to spot a dead LED or lamp
CANDLES r g b / CANDLES CYCLE / CANDLES OFFall candles one colour, or a red/green/blue cycle (same wrong candles every time = colour order; random = cable)
PLAY nplay one clip on the real speakers without starting a game

While the Mega waits for the BrightSign at power-on, each seat whose button box answered keeps its candles lit and its buttons chase; a dark seat means its box isn't on the bus. For strip problems alone there is also a separate LED-only firmware, led_strip_test (red, green, blue on both candle lines, nothing else).

Game logic

Registration

Each seat registers by pressing SUN + MOON at the same time. If other buttons are pressed with them, it doesn't count. A seat that never registers is out of the game.

Answering

Only players still in are waited on. One answer per player per question, in a 10-second window that opens when the question clip ends. No answer counts as wrong. After each window the candles show right/wrong for 3 s, then Abigail announces the round.

Q1–3: practice

Wrong = one candle out for now; nobody leaves. After Q3 everyone still in gets both candles back.

Q4–15: for real

1st wrong = one candle out. 2nd wrong = both out, that player leaves the circle (buttons dark, presses ignored). If every player is out, the game skips to the "everyone is out" ending.

Answer key & question titles (spec §12–13)
QCorrectTitlePhase
1SUNThe ThreadPractice
2NOThe Unplanned MusicPractice
3SUNKeeping the Act AlivePractice
4NOThe Dual-Signal Timing LogicLive
5SUNLocking the Circle & Social StakesLive
6MOONThe Subtle Atmospheric ShiftLive
7MOONThe First Controlled SignLive
8MOONThe Masterstroke of ProofLive
9MOONThe Unscripted Temperature PlungeLive
10MOONThe Electrical DistortionLive
11FALSECreeping Audience SuspicionLive
12SUNThe Sudden Chant & CollapseLive
13SUNThe Violent ClimaxLive
14SUNThe Trance DelusionLive
15SUNThe FlatlineLive

The firmware uses these same 15 answers. The v2 narration (2026-10-10) reworded some questions (Q14 rewritten, practice rounds announced as practice) without changing any correct button.

Build list
QtyComponentRole / notes
1Arduino Mega 2560 + RS-485 shieldruns the game for both tables
16Waveshare Modbus RTU 8-channel I/O modulesone per seat: 6 button inputs + start input, button lamp outputs
1BrightSign playeraudio only, firmware 9.1.151+
96Illuminated momentary buttons6 per seat × 16 seats
2WS2815 LED strips (12 V)the candles, one strip per table, a block of LEDs per seat
1ESP32 radioshow-network bridge (seance-1)

This differs from the spec's parts list (two Megas linked by RS-485, 16-channel input expanders, 32 separately wired candles with MOSFET drivers). Sid's build puts every seat on one RS-485 bus to a single Mega and uses addressable strips for the candles. Table two's strip needed extra care over its long run: a spare "booster" LED at its start, and it is only sent data when its own candles change.

External build: Sid Loritsch

Sid Loritsch, a contractor working for A&L/Brett, wrote the original firmware (a PlatformIO Arduino project) and the BrightSign script (autorun.brs), and did the first wiring. His original code from 2026-09-30 is now in this repo next to our updated version, with a diff of every change.

How this fits our platform

On the show network, but still standalone

The game runs entirely on its own Mega and BrightSign. The ESP32 bridge only reports and relays: Understudy sees every line the game prints (registrations, answers, BrightSign status) and can send staff commands like LIGHTTEST or TESTMODE. Unplug it and the game plays the same.

RS-485, used for real

The seat boxes share one wired RS-485 bus (Modbus). It is the first real RS-485 deployment in the project, though it links the Mega to its seat boxes, not table to table as the spec described.

The same LED-vs-serial lesson as Cross-Pollination

Addressable LED updates blocking the serial port caused dropped messages here, just as they did in Cross-Pollination (confirmed 2026-09-27). The fix is the same idea: refresh LEDs only when they change and never while a message is arriving. The Reserve's ESP32 barrel station reuses these lessons.

The BrightSign tells the game when a clip ends

The Mega waits for the BrightSign's FEND instead of hard-coding clip lengths, so re-voiced audio (v2, v3) only needed a new card, with three intro cues pinned to the same times.

Open items
  1. Flash 1.4.12 (Zach, at the venue, through Understudy), then watch the log for "re-requested" to confirm clips no longer replay.
  2. "Some buttons need 2 pushes" (Zach, 10-09): the firmware now logs raw presses and loop timing; a game's log still needs checking.
  3. Send Sid/Brett the bug write-up and logs.