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.
| Part | State |
|---|---|
| Firmware on the table | seance_master 1.4.9 (as of 2026-10-11). |
| Next firmware | 1.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 card | Sé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. |
| Candles | Both tables lit, each on its own data line (table one = Mega pin 21, table two = pin 20). |
| Show network | An ESP32 radio on the Mega (seance-1) sends every line the
game prints to Understudy and takes staff commands back. |
| Staff answer key | One-page printed sheet for staff (v2 audio). |
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.
| Field | Value |
|---|---|
| Seats | 16 (8 per table), 2 tables, 1 room |
| Controller | 1× Arduino Mega 2560 with an RS-485 shield |
| Seat boxes | 16 Waveshare Modbus RTU 8-channel I/O modules on one RS-485 bus (inputs = the 6 buttons + start, outputs = the button lamps) |
| Candles | WS2815 addressable LED strips, a block of LEDs per seat (only the first two lit); table one on pin 21, table two on pin 20 |
| Audio | BrightSign 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 network | ESP32 radio on Mega Serial1 (seance-1), forwards the game log to Understudy and passes staff commands in |
| Firmware | platform/tools/seance_master: Sid's original (2026-09-30) kept beside it, with a diff of every change |
| Spec | Brett's "Condensed Programming & Wiring Clean Sheet" (2026-08-11). The game rules match it; the hardware differs (see Build list). |
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.
| Direction | Line | Meaning |
|---|---|---|
| Mega → BrightSign | PLAY n | play clip n (0 = intro, 1–15 = questions, 16 = finale, 17 = all out, 18–68 = round results, 69 = test-mode announcement) |
| BrightSign → Mega | STRT n | clip n started |
| BrightSign → Mega | TRIG n | clip n reached its cue point |
| BrightSign → Mega | FEND n | clip n finished (the answer window opens) |
| BrightSign → Mega | HELO | idle heartbeat; the Mega waits for it at power-on |
The BrightSign repeats its current status every ~2 s. Lessons from the live tests:
PLAY is resent until the BrightSign confirms it. In 1.4.9 only a clean
STRT counts, so a chopped one made a clip play twice (10-11). 1.4.12
accepts any status naming the right clip, waits 6 s before resending, and holds the candles still
for up to 1.5 s after each PLAY. Not flashed yet.FEND 15 once ended
the game before the finale).| Command | What it does |
|---|---|
TESTMODE / TESTMODE n / TESTMODE SEATS 2,4,7 / TESTMODE OFF | computer 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 OFF | every 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 OFF | all candles one colour, or a red/green/blue cycle (same wrong candles every time = colour order; random = cable) |
PLAY n | play 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).
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.
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.
Wrong = one candle out for now; nobody leaves. After Q3 everyone still in gets both candles back.
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.
| Q | Correct | Title | Phase |
|---|---|---|---|
| 1 | SUN | The Thread | Practice |
| 2 | NO | The Unplanned Music | Practice |
| 3 | SUN | Keeping the Act Alive | Practice |
| 4 | NO | The Dual-Signal Timing Logic | Live |
| 5 | SUN | Locking the Circle & Social Stakes | Live |
| 6 | MOON | The Subtle Atmospheric Shift | Live |
| 7 | MOON | The First Controlled Sign | Live |
| 8 | MOON | The Masterstroke of Proof | Live |
| 9 | MOON | The Unscripted Temperature Plunge | Live |
| 10 | MOON | The Electrical Distortion | Live |
| 11 | FALSE | Creeping Audience Suspicion | Live |
| 12 | SUN | The Sudden Chant & Collapse | Live |
| 13 | SUN | The Violent Climax | Live |
| 14 | SUN | The Trance Delusion | Live |
| 15 | SUN | The Flatline | Live |
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.
| Qty | Component | Role / notes |
|---|---|---|
| 1 | Arduino Mega 2560 + RS-485 shield | runs the game for both tables |
| 16 | Waveshare Modbus RTU 8-channel I/O modules | one per seat: 6 button inputs + start input, button lamp outputs |
| 1 | BrightSign player | audio only, firmware 9.1.151+ |
| 96 | Illuminated momentary buttons | 6 per seat × 16 seats |
| 2 | WS2815 LED strips (12 V) | the candles, one strip per table, a block of LEDs per seat |
| 1 | ESP32 radio | show-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.
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.
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.
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.
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 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.