Inspiration
Early playtests exposed a problem: once a short puzzle's solution was known, another attempt offered little reason to stay. I wanted audience participation to remain useful throughout the run. The film-set setting gives every disruption two readings: bad weather, an obstructed route or an unruly cast can also become the next solution. Audience-controlled games are an established genre; the contribution here is a connected job system in which the meaning of a tool changes with the current objective and physical state.
What it does
Borrow the Trouble is a browser game for a streamer and Twitch chat. The streamer moves, carries a case, uses an umbrella and chooses between jobs. Viewers send gusts, rain and ducks, or request changes to bridges, fire and delivery gates. Shared energy, cooldowns and advance warnings make interference bounded and readable.
Rain makes stopping harder, but extinguishes task fires. Wind pushes the case and actor, but can lift an umbrella. Ducks bump the player, but can be gathered for a photo, evacuated or lured onto a bridge plate. The player must complete six jobs on one persistent set. Delivery, fire rescue, evacuation and photos have different position and input checks; completing one job keeps the case, ducks, set changes, score and clock. Falls consume a limited life rather than resetting the entire shift. A separate practice mode simulates audience input and six objective-specific practice scenes remain available.
How I built it and used Codex
Codex helped develop the original Three.js scene and input-driven physics, then translate playtest feedback into distinct objectives and continuous job choices. It helped debug picking up the case, jump timing, wet-ground braking, stable plate drops, recoverable bridge closures and audience-budget scheduling. It also wrote behavioral checks for incorrect strategies and repeatability across job sheets.
For live integration, I reused the in-memory Twitch adapter built earlier in this same hackathon for BRIDGE//CREW / WICKWEFT. The current game has its own objectives, state and command director. A Public Twitch application uses device authorization with only user:read:chat; Twurple receives official EventSub messages. Node.js owns a fixed-step world and broadcasts state to controller and OBS views. Accepted commands use the exact same rule checks as practice. Receipts distinguish real messages from local input. No client secret or stream key is needed by the game.
Codex implemented the new mapping, message deduplication, mode separation, disconnect pause, command receipts and English broadcast HUD. It operated the authorized integration test, reviewed recorded frames, corrected a stale replay score label, and added a regression check to keep finished recordings' audience source unchanged when changing modes. It prepared the English narration, captions, video edit and reproducible instructions. The build thread's session ID is 01a18b9d-196a-7620-aa7c-126f34318fff.
What I tested
On November 1, 2026, OBS broadcast the current build to soanequinn at 1080p/30 fps. I verified the actual Twitch viewer page. One full continuous round completed six jobs with 22 points and three lives in 75.6 active seconds. Four actual rain messages extinguished the task fires. A real bridge-closure message warned and waited for occupants to clear. A real duck-spawn message added three ducks; the final evacuation completed with those three remaining ducks. The saved round trace and chat receipts agree with the observed result.
This was a channel-owner integration test. Local player keys and job choices were automated for repeatable capture; all six accepted chat commands came through Twitch, with simulated audience actions disabled. The video labels this scope. It does not establish independent-audience engagement or long-term replayability. The final code passes 68 behavioral tests, including cooldowns, duplicate messages, live-mode isolation, pause behavior and recording source preservation.
Challenges and learning
An audience disruption needs readable counterplay. Bridge closure now waits for occupants and announces itself before applying. Recoveries preserve the task, and selection does not stop the set. OBS setup also revealed that changing a Qt field through accessibility did not commit the browser-source URL; entering the URL normally and confirming it fixed the capture. Reviewing the recording caught the replay HUD briefly mixing a final outcome with historical score data, which was corrected after capture. The demo uses the correct post-replay result.
What is next
Observed sessions with independent streamers and viewers, focusing on whether the same disruptions produce new decisions after players know the rules. Measure idle time, failed command understanding and voluntary replays before claiming retention improvements. The current result is a working live integration and a playable continuous prototype.
Built With
- codex
- ffmpeg
- javascript
- node.js
- obs
- openai
- three.js
- twitch
- twurple
Log in or sign up for Devpost to join the conversation.