The Body is Obsolete
2025-2026Real-time / Networked
Browser-based interactive fiction disguised as a chatroom, with generative p5.js visuals. Built independently for live performance.
Interactive fiction disguised as an MSN-era chatroom. The audience joins what looks like a retro messenger — draggable windows, avatars, a synthwave grid rendered in p5.js — and a story arrives message by message, in real time. They steer it by clicking dialogue choices, which post to the chat as their own lines.
How it works
- The story is written in Twine and compiled offline to JSON by a custom twee-to-JSON compiler. The server only ever plays JSON; the narrative stays editable by a non-programmer.
- Nobody types the script live. The server performs it: each line lands after a delay of 500 ms + 40 ms per character (clamped between 1 and 6 seconds), so the narrator appears to type like a person.
- Three separate pages, three roles: the player chatroom, a narrator console ("Initiate Transmission", restart, end), and a control desk with live sliders for the glitch intensity and colour theme of the p5 visuals.
- While a story is running, join/leave notices are suppressed so the fiction never breaks. If the narrator disconnects mid-story, "Liz has left the chat" is deferred until the story formally ends — and only sent if she's still gone.
- Branching resolves server-side against variable state, so choices can be gated and the story can notice things — a counter mechanic lets it say "the third time you ask" and mean it.
Numbers
112 story nodes, 154 choices, 141 narrator lines. Runs on Express and Socket.IO, self-hosted in Docker behind an Nginx proxy.
Node.jsSocket.iop5.js
interactive-fictionp5socket-ioperformance