Over the course of the initial part of the game, players get access to a series of 6 "tone" sliders that change pitch as they move up and down. Players must harmonize all six sliders in order to trigger the output.
Each tone is generated by the tone() function on an Arduino, which produces a 50% duty cycle PWM signal at a given frequency. This PWM signal drives the gate of a MOSFET which drives a small loudspeaker. Because square waves are miserable to listen to, there is a 3-step RC ladder on the MOSFET drain which converts the signal to approximate a sine wave. Higher order harmonics are not relevant here.
The chase game is a simple video game played on a 16x16 Neopixel grid. Meant to symbolize the struggle that the players themselves are experiencing in the escape room, the game features an antagonist, a monster, that players must escape from for long enough in order to survive to the next level. The trick is that the joystick with which the game is played is located on the other side of the room, on a different surface as the screen, in a different orientation, and with an obfuscated view of the game.
The game code runs a state machine that considers the game environment, the player's progress, the monster's decisions, and any player input. The electronics are relatively straightforward, with the caveat that the Neopixel is both power hungry and sensitive to variations in voltage, and it operates at the lower end of the Arduino voltage range. Therefore I designed in accommodations for wire length and buck converter placement to prevent spurious resets.