Recently I introduced my current project, which I've been calling the "Top-Secret Lunchbox", on Adafruit's Show and Tell stream. I wrote this playground to go into more detail about how I built it.
I mentioned in the stream that it took me about a week to design and build the lunchbox, but that's a pretty generous estimate that does not tell the entire story. For starters, it does not include writing any code beyond basic hardware bring-up (the game code is essentially an entire other project). It also doesn't account for the fact that this is my third attempt at such a project, building on roughly three months of prior learning and experimentation. I was able to reuse many solutions from that experience, including designs for 3D-printed panel mounts for various hardware. This allowed me to make more informed choices and reduced the amount of time needed for learning and experimentation.
The short time frame also belies that this is a fairly complex gadget for a hobbyist project. It uses most of the hardware features of the RP2040 Propmaker Feather, as well as all of the available GPIO (except for the servo output, which I did actually consider using at one point for something like a haptic motor). It required designing and printing several parts for basic assembly. It required a lot of soldering, and some "clever" solutions to some interesting challenges.
Given the overall complexity, and the fact that I was still "winging it" on several aspects of the project, this article will describe more "how I did it" than "how you should do it". I will provide as much detail as I can about the entire process, including designing, printing, wiring, and assembly. I will also provide CircuitPython source code for a full working game! You can find a walkthrough of the game at the end of this article.
Update:
I went on the show a few weeks later with the Ruiz Brothers to show off a little more of the completed game. Check it out!
Table of contents
This article is organized into the following sections:
- Project inspiration and goals
- Bill of materials
- 3D CAD and printing
- Enclosure "lid" and "Motherboard"
- Enclosure box, aka "The Panel"
- The Game
Project inspiration and goals
The idea for this project is derived from my love of spy movies and cryptic logic puzzles, like the ones you might find in a video game or an escape room. Since I first started hacking around with electronics I've wanted to design, build, and hide a weird computer game inside of a normal, mundane, everyday object. The initial inspiration came from this episode of John Park's workshop where he in turn was inspired by this video to create a "connect the wires" style puzzle.
After seeing this mechanism in action, I really wanted to re-create a portable version of it that I could use to both create a standalone experience, as well as possibly incorporate into a larger experience in the future.
I had a few specific goals in mind:
- Keep the project scope fairly small, using only whatever hardware I could connect to the GPIO afforded by a single microcontroller. In this case, since I knew I also wanted to incorporate a lot of LEDs and an audio component, the Propmaker Feather was the perfect choice.
- Keep component connections as modular as possible, and avoid soldering directly to the microcontroller. While it did take some initial up-front work, it made prototyping and experimentation *so* much easier in the long run, and allowed me to easily make hardware modifications as my ideas evolved. The Propmaker Feather provides some help with this, as it uses a screw terminal mount for connecting a button, a speaker, and a Neopixel strip. For everything else, I built a sort of "motherboard" using a Featherwing Tripler. The motherboard includes header mounts for the Feather, and screw terminal mounts providing solderless access to GPIO, additional ground and power connections, and another SPI port. The swirly PCB board allowed me to easily mount external breakout modules, usually taking advantage of I2C over Stemma QT cables for easy, no-solder connections.
- Use parts I already had on hand where possible, and buy as few new parts as I could. I've hoarded quite the collection of components since the start of the pandemic, and now I'm always looking for ways to actually use them.
- Use iconic, familiar technology like seven segment displays and old-school bubble LEDs, combined with a novel input mechanisms (on-off key switch, the "switchboard"), to produce a tactile and engaging experience.
- Design and program a game in CircuitPython containing a small suite of puzzles. The puzzles should be simple enough to figure out without lengthy explanation, while still providing a fun and fair challenge.
- Use synthio to create a semi-procedural soundtrack for the game.
- Include additional hardware for future expansion. I specifically wanted to include hardware for timekeeping, data persistence, battery monitoring, and serial communication. This could allow me to create entirely new types of puzzles, as well as even integrate/connect it it with other "top-secret" projects to create an easily transportable "escape room" of sorts.
Adafruit Parts
- RP2040 Propmaker Feather
- Featherwing Tripler
- Swirly aluminum PCB mount (10x5)
- 6 x Magnetic Pin Back
- Short Feather headers kit - male
- Short Feather headers kit - female
- Black Nylon Machine Screw and Stand-off Set – M3 Thread
- Black Nylon Machine Screw and Stand-off Set – M2.5 Thread
- 10 x through-hole Neopixel LEDs
- Key/lock switch kit
- Clear arcade button
- NeoPixel Mini-Button PCB
- 1 x JST PH 3-Pin plug-plug cable
- 2 x JST PH 3-Pin socket cable
- 1 x 200mm Stemma QT cable (for seven segment display)
- Small oval speaker (https://www.adafruit.com/product/4227 will also work)
- 0.56" seven segment display backpack
- 2200 mAh cylindrical LiPo battery
- (Optional) 8 KB FRAM module
- (Optional) 5-port Stemma QT Hub + 1 x 100mm Stemma QT cable
- (Optional) RTC module + 1 x 50mm Stemma QT cable
- (Optional) LiPo Battery monitor module + 1 x 2-pin battery jumper cable + 1 x 50mm Stemma QT cable
- Small metal lunchbox
- 0.96" 128x64 monochrome OLED display
- VHB foam tape
- Heat shrink tubing
- 4 x M2.5 Heat set inserts (for mounting Swirly PCB board to enclosure "lid")
- M2 screw and standoff kit
- 2 x 12-pin screw terminals
- 3 x 8-pin screw terminals (only 2 are needed if omitting the FRAM module)
- 1 x 3-pin screw terminal
- 5 x TRS patch cables
- 11 x TRRS jacks
- 1 x USB-C Panel mount extension
- 28 Gauge 5-wire ribbon cable
- Gel filters (cut to size)
I designed most of the models used here with OpenSCAD, a free, parametric 3D CAD tool that uses a scripting language to construct 3D models. Since the enclosure for the lunchbox is essentially just a box with a snap-fit lid and a bunch of holes cut in it, and since I'm a programmer by trade, this made OpenSCAD a decent choice for this project.
You can find the resulting STL files for the 3D printed parts I designed here. The 3D models for the Neopixel Arcade Button mod can be found here. If you are willing to brave the undocumented, barely-organized, and probably incoherent SCAD source to make modifications, you can find the OpenSCAD project tree on Github.
Filament
All parts were printed using PLA filament, using a 0.2 mm layer height and 15% infill. I used the following filaments:
- Polymaker PLA PRO Filament 1.75mm - Silver
- Polymaker PLA Filament 1.75mm - Black
- Polymaker PLA Filament 1.75mm - White
Below is a list of each 3D printed part I used, including the filament color, and additional information where necessary.
Panel/Enclosure Box
File: lunchbox-box.stl
Color: Silver
This portion of the enclosure contains the panel-mounted hardware. Some hardware already comes with built-in panel mount mechanisms, others use 3D printed parts and screws, nuts, and standoffs to mount. This part should be printed face down, without supports. It takes a very long time to print, so you may also wish to use a brim when slicing to prevent warping.
File: lunchbox-top.stl
Color: Silver
This is the "lid" to the box, even if technically it's on the bottom. Using heat set inserts and screws, the swirly PCB board will be mounted to this part. This part also contains the LiPo battery compartment. This part should be printed with the flat side down, no supports necessary. Again, due to the long printing time, you may wish to use a brim when slicing to prevent warping.
File: battery-holder-top.stl
Color: Silver
Once the battery is inserted into the battery compartment, this part snap-fits onto the top to keep the battery in place. This part should be printed with the flat side down. No supports are necessary.
File: usb-panel-spacer.stl
Color: Any
This piece is used as a standoff for the USB-C panel mount extension to keep the top of the extension flush with the mounting nut. Print as indicated above with no supports.
File: speaker-mount.stl
Color: Black
This part is used to mount the speaker to the enclosure panel with 2 M2.5 screws and nuts. It should be printed with supports as shown in light green in the above-right image (In PrusaSlicer, I used the "Support on build plate only" option). I needed to both an inside and an outside brim when slicing because the part is tiny and did not adhere well to my bed on its own (dark green on the top-right image).
File: oled_faceplate.stl
Color: Black
This part is mounted on top of the enclosure panel using the same screws to mount the OLED display to the bottom of the enclosure. It hides the OLED ribbon/circuitry that is still visible due to the design of the breakout, as well as provides camouflage for the black nylon screws used for mounting. It should be printed flat on the printer bed. No supports are needed.
File: seven-seg-faceplate.stl
Color: Black
Like the OLED display faceplate, this faceplate hides the edges of the panel mounted display and provides camouflage for the mounting screws. Additionally, it holds in place the gel cutout that provides a nice, easy-on-the-eyes filter for the display. Print flat on the bed, with no supports.
Files: abd-cap.stl and abd-connector-v2.stl
Color: White
These parts provide mounting and diffusion for the Neopixel in the modified arcade button. These parts can be found here as part of the Neopixel Arcade Button learn guide.
File: thru_hole_led_mount.stl
Color: Any
These are used to build the LED assemblies for the switchboard LEDs. There are 2 assemblies, each requiring 2 of these printed parts (4 copies total). Print them flat on the bed, with no supports.
File: storage_box.stl
Color: Silver
This piece is used to provide storage for the 5 cables and the start-up key. Printed in the orientation shown in the above-right image, with "Supports on build plate only" in PrusaSlicer, and I used a brim, though you might not need one.
File: legend.stl
Color: Silver, Black
This piece is a "legend" for the solution to one of the puzzles in the game. It is printed in the same color as the cable storage compartment (with the symbols printed in a different color), and stored in the bin with the symbols facing down. This creates a false bottom to the storage compartment, which the user must discover in order to solve the symbol puzzle. Print flat on the bed, with the symbols facing upward. In the slicer, I set up a filament change for the final two layers (layers 6 and 7), using black filament to print the symbols.
Files: enclosure-standoff-left-right.stl and enclosure-standoff-top-bottom.stl
Color: Black
These spacers are attached to the inside of the lunchbox to prevent it from sliding around in transit. The thicker ones go on the left/right sides of the lunchbox, and the thinner ones on the top/bottom sides. I used VHB foam tape to affix them to the lunchbox, about halfway down the height of the lunchbox. Printed flat on the bed with no supports (2 of each).
Enclosure "lid" and "Motherboard"
Below is a visual tour through the assembly, with special notes in the captions of things to be aware of.
GPIO Mapping
The following describes the GPIO assignments for the hardware connected to the Feather.
-
Main GPIO (21/21 used)
- SPI bus (3 GPIO): MISO, MOSI, SCK
- I2C bus (2 GPIO): SCL, SDA
- Serial port (2 GPIO): TX, RX
- Switchboard (10 GPIO): D10, D11, D12, D13, A0, A1, A2, A3, D24, D25
- OLED display (3 GPIO): D5 (CS), D6 (DC), D9 (RES)
- 8KB FRAM breakout (1 GPIO): D4 (CS)
-
Special GPIO
- On-off switch (1 GPIO): EN
- Neopixel data (1 GPIO): EXTERNAL_NEOPIXELS
- Speaker (2 GPIO): SPK+, SPK-
- Arcade button (1 GPIO): EXTERNAL_BUTTON
-
I2C Peripherals (Stemma QT)
- Seven segment display
- RTC Breakout
- Battery monitor breakout
-
SPI Peripherals
- OLED display
- 8KB FRAM breakout
-
3V power
- 8KB FRAM breakout
- OLED display
-
Ground
- Arcade button
- On-Off switch
- Serial port
- OLED Display
- 8KB FRAM breakout
-
OLED display connection (display / Feather)
- D0 / SCK
- D1 / MOSI
- RES / D9
- DC / D6
- CS / D5
Enclosure top, a.k.a. "The Panel"
Below is a tour of each of the panel-mounted hardware, with additional notes about assembly and mounting where applicable.
1. USB-C charging/programming port
The USB-C panel mount extension is used to provide easy access to the Feather's USB-C port for charging the LiPo battery and editing the CircuitPython code. The extension features a threaded column and includes a mounting nut. I was not a fan of the way the extension column protrudes well past the panel face and mounting nut, so I used a 3D printed standoff and the rubber ring included with the extension to make the face of the extension more flush with the mounting nut. I think this looks better, and it won't obstruct the lunchbox lid from closing. I discarded the cap that came with the extension as I did not need it.
2. Speaker assembly
The oval speaker is inserted into the speaker mount, and then mounted with the speaker face-up to the underside of the panel using M2.5 screws and nuts. I needed to clip off the 2-pin connector on the speaker and splice wires to longer ones to connect it to the SPK+ and SPK- GPIO on the Feather's screw terminal block. I used wire with silicone insulation (strands of the ribbon cable from the bill of materials will work fine) and some heat shrink tubing to splice the wires. The silicon insulation provides some needed strain relief, as the original wires on the speaker use PVC and can break easily when jostled too much.
3. Serial communication port
The serial port is intended to be a method of extending the project in the future, by allowing other gadgets to connect and communicate with it. It uses a TRRS jack with a threaded column and is easily mounted to the panel with the included nut. Wires are soldered to 3 leads on the bottom of the jack and reinforced with heat shrink tubing. The other end of the wires are connected to the following pins of the Feather:
- Pin 1: Ground
- Pin 3: RX
- Pin 4: TX
4. OLED display
I chose to use a monochrome 128x64 OLED SPI display due to the fast drawing speed afforded by SPI bus, and the vastly reduced amount of memory and bandwidth needed to draw a 1-bit image. In previous experience with the RP2040 in CircuitPython, the drawing speed for a 16-bit color TFT display was prohibitively slow, even using SPI. Additionally, it often produced undesirable crackling and screeching from the audio system, even when making only small updates to the display. I think the monochrome display also lends a more old-school feel to the gadget, and since I mainly just want to use it for simple text instructions and images anyway, I'm happy with the result. I still feel I need a slightly-larger-than-average audio buffer for the mixer to prevent audio issues, but things still seem responsive enough that I'm satisfied with the final hardware configuration.
For wiring, I soldered 28 gauge silicone ribbon cable wires directly to the display GPIO pins, and connected the other ends to the Feather's SPI GPIO. I mounted it together with the 3D-printed OLED faceplate, using M2 screws. The faceplate is mounted on top of the panel, and the OLED breakout is mounted on the underside of the panel using M2 nuts.
5. Seven segment display
The seven segment display is mounted to the panel using 4x sets of M2 screws, nuts, and M2x6mm standoffs. The standoffs and nuts are attached to the display breakout, and are used to position the top of the display flush with the panel surface when the display is inserted through the display cutout.
I used an exacto knife to cut the filter gel to fit underneath the faceplate such that the filter gel completely covers the face of the display, but the edges of the filter gel are obscured by the faceplate. The display breakout is positioned on the underside of the panel, and screws are inserted through the holes in the faceplate and enclosure panel, and screwed into the standoffs attached to the display breakout. The display is wired to the Feather using a 200mm Stemma QT cable, plugged into either the I2C Stemma QT port on the Feather, or one of the ports of the 5-port I2C hub if using that.
6. On-Off Key Lock switch
Mounting the key lock switch is straightforward, as the column of the lock is threaded, and a mounting nut is included. I soldered wires onto the two leads, using heat shrink wrap to reinforce the connection. I wired one to a ground pin on the Feather, and the other to the Feather's EN GPIO.
One oddity resulting from connecting a toggle switch to the EN pin is that it will behave the opposite as you might expect. For example, the green dot on the switch face will actually be the off position, and the red dot will be on. This is because the circuit is open when the key is in the "red" position. When the key is in the "green" position, due to the behavior of the EN pin, the closed circuit to ground signals the Feather to turn off the 3V regulator, thus shutting off power to the device. I considered printing a small piece of faceplate geometry for the switch to indicate the direction to turn, but ultimately decided that this inconsistency adds to the "charm" of the gadget (and there's only one way you can turn the key anyway).
I used the Neopixel Arcade Buttons learn guide to mod an arcade button. The one I built has some small differences:
- I installed the button Neopixel PCB to the Neopixel mount with a little bit of hot glue, to help keep it centered on the mount and prevent it from jiggling around when the button is pressed.
- For the DI pad and the adjacent 5V and GND pads on the Neopixel, I didn't solder on a connector. I just soldered a good length of wire to each of the pads, and stripped and tinned the other sides of the wires. Then I connected the wires directly into the EXTERNAL_NEOPIXEL, GND, and 5V pins on the Feather's screw terminal block.
- I soldered couple of inches of silicone wire to each of the Neopixel's outgoing pads, and spliced the other ends to a 3-pin JST socket, so that I could easily connect the switchboard Neopixel assemblies to the Neopixel chain later.
For the button circuit, I soldered a wire to each of the button leads, using heat shrink tubing as reinforcement and insulation. One wire is connected to a ground pin on the Feather, the other is connected to the EXTERNAL_BUTTON GPIO located on the Feather's screw terminal.
To mount the button, I slid the the completed button assembly through the top of the arcade button slot in the panel, with the tabs aligned with the tab slots on the cutout. I slightly pushed in the tabs when inserting to prevent strain, which could cause them to break off. Once the arcade button clicked into the panel, I rotated it 90 degrees to hold it firmly in place.
8. "Switchboard" jacks
The switchboard jacks use the same TRRS hardware as the serial port. I soldered a wire to pin 1 (the "sleeve") on the bottom of each jack, and used some heat shrink wrap to reinforce the connection. I also used a little bit of hot glue to attempt to better adhere the bottom disc of the jacks to the cylinder that contains it, as these jacks do not appear to be of the highest quality, and I was having separation issues after many repeated cycles of plugging cables into them and removing them. I then connected each of the wires to GPIO on the Feather. A periodic scanning algorithm is used to determine if any of the jacks' GPIO are connected to each other.
9. "Switchboard" Neopixels
This was probably the trickiest part of the build. Ideally, I would have designed a custom PCB to hold the thru-hole Neopixels and provide mounting holes. However, due to the fact that I do not yet know how to design PCBs, and I just wanted something I could put together at home in a short period of time, I devised a sort of mounting bracket to help me with this.
There are 2 Neopixel assemblies, and each one uses 2x 3D-printed bracket pieces, 5x thru-hole Neopixels, and 4x M2.5 screws and nuts for mounting to the panel.
To build each assembly, first I inserted each of the 5 thru-hole Neopixels through the rectangular slots on the first bracket with the LEDs on top and the leads all facing the same way. Then, I carefully bent the 5V leads of each LED underneath the bracket to the left of the mounting holes (making sure not to obstruct them, so we can insert the mounting screws later) and soldered them together to create a 5V "rail", being very careful not to melt or warp the bracket's plastic. I then bent the GND leads of each LED to the other side of the mounting holes (again, making sure not to obstruct them), and soldered them together to make a GND "rail". I made sure to leave enough of the 5V and GND leads exposed on both the input and output sides of the assembly so that I could solder JST connectors to them later. Next I inserted the remaining non-bent DIN and DOUT leads through the rectangular slots on the second bracket. Then I carefully bent and soldered each LED's DOUT lead to the adjacent LED's DIN lead, making sure not to obstruct the mounting holes. Again, I tried to leave enough of the lead exposed on both sides of the assembly so that I could solder on JST connectors.
For the connectors, I cut a 3-pin JST plug-plug connector in half to make 2 plug connectors. I then soldered one to the "input" side of each Neopixel assembly. For only one of the assemblies, I soldered a 3-pin JST socket to the "output" side, so that the second assembly can be plugged into to the first to complete the Neopixel chain. I then used a little bit of hot glue to help reinforce and insulate the solder joints of the connectors.
Finally, I mounted each assembly to the panel by pushing the LEDs up through the holes in the panel, inserting the screws through the screw mounting holes of both the panel and the LED assemblies, and fastening the hex nuts to the screws underneath the second bracket of each assembly. Then, I connected the first assembly to the arcade button's Neopixel, and connected the second assembly to the first assembly, using the soldered-on JST connectors.
10. Cable/Key storage compartment
The 3D-printed cable storage compartment provide storage for the switchboard cables, power toggle key, and symbol puzzle legend. It is mounted to the underside of the panel using M3 screws and nuts. It should be printed the same color as the enclosure box to provide a more seamless look. The symbol puzzle legend is printed with the same filament as the storage compartment and the enclosure, and stored face down to provide a "false bottom". In order for the player(s) to solve the Symbolic Dispatch puzzle, they need to discover the false bottom and remove it from the storage compartment.
11. Lunchbox spacers
These 3D-printed spacers are attached to the inside of the lunchbox with VHB foam tape. Even though the magnetic connection is strong between the enclosure magnets and the bottom of the lunchbox, it still tends to slide around when carried without some mechanical support. These spacers simply help to hold the enclosure in place. Due to the sort of trial-and-error approach I used to size the enclosure to the lunchbox, the spacers on the left and right side of the lunchbox are just a little bit thicker than the ones on the top and bottom.
CircuitPython 9 source code
The CircuitPython 9.1.1 source code for the "Top-Secret Lunchbox" game can be found here on github. Simply copy the entire contents of the project root directory to your lunchbox's CIRCUITPY drive. If CircuitPython is installed properly and there are no hardware issues, the game should start.
Editing the source code
On the next launch after installing the game source code, to prevent accidental editing of source code, the Feather's USB drive functionality is disabled unless the lunchbox is booted into "edit mode". To enable edit mode:
- Make sure the lunchbox is powered off.
- Using two of the cables, connect the top-left switchboard jack to the bottom-right, and connect the top-right switchboard jack to the bottom-left, resembling an "X".
- Connect one end of a USB cable to the lunchbox's USB-C port, and the other to your computer.
- Insert the power key into the on-off switch and turn to power on the lunchbox.
The lunchbox's CIRCUITPY drive should now be visible to your computer, and you should be able to view and edit the source code.
Acknowledgements
Eighties Dystopia Synth soundtrack
Special thanks to todbot for the eighties dystopia synth example from the excellent CircuitPython Synthio Tricks repo, which I abused liberally to create the "soundtrack" throughout the game.
Sound FX/Sprites
Special thanks to kenney.nl for the amazing royalty-free assets. The Top-Secret Lunchbox game uses assets from the following asset packs:
Interface sounds: https://kenney.nl/assets/interface-sounds
1-Bit Platformer Pack: https://kenney.nl/assets/1-bit-platformer-pack
The soundstrack changes in a few ways as the player progresses through the game:
- Whenever a player plugs/unplugs a cable into the switchboard jacks, the soundtrack responds by moving to the next note.
- As the player solves puzzles, the tempo of the soundtrack increases.
- When the player starts a puzzle, the sountrack "ducks" to half volume. The volume is returned to normal when the puzzle is completed.
If the soundtrack becomes annoying, you can toggle it on/off in the hub/main menu screen by pressing the arcade button. The victory/failure music will still play during the dispatch success/failed screen, however upon returning to the hub the music will stop playing if the soundtrack is toggled off.
Game Walkthrough
Intro
At launch, the very first thing the code does is import the Neopixel library and sets the button and switchboard LEDs to blue. This is important because it can take 2-3 seconds to import all of the libraries and hardware drivers, and we want to provide some visual indication that the lunchbox has indeed booted as quickly as possible.
Then, a short animation will play on both the OLED display and the switchboard LEDs, while a soothing eighties dystopia synth startup "song" plays over the speaker.
Once the animation is complete, you will be taken to...
The hub/main menu is where the player selects the first/next puzzle they'd like to try. The button and the switchboard LEDs pulse blue, while the OLED display shows two important pieces of information:
- On the right side is a representation of the switchboard, with the letters A-J labeling each switchboard jack.
- On the left side is a representation of 5 switchboard connections, each showing a connection between two letters between A-J
To select a puzzle, the player must insert a cable into one of the connections indicated. If the selection is valid, the player will be taken to the confirmation screen with the name of the selected puzzle, and prompted to remove the cable. If it is not valid, the LEDs indicating the connection turn red, and the player will be prompted to remove all cables.
The arcade button toggles the dynamic soundtrack playback on/off.
Upon completion or failure of each puzzle, the player will be returned to the hub to select the next puzzle, until all puzzles have been solved. Once a puzzle has been solved, it's connection will no longer be displayed in the hub.
"Spectral Dispatch" is a color matching game. The goal of the puzzle is to find the jacks that light up with matching colors when connected with a cable. The OLED display will prompt the player to insert a cable to begin. Once the first connection is made, the OLED display will show the number of connection attempts remaining, and a countdown will begin on the seven segment display. The player then must insert and remove cables as necessary to connect the jacks with matching colors. Each connection made counts as an attempt. If the player runs out of attempts or the countdown expires before all 5 color pairs are connected, the puzzle is failed, and the player will have to select it and try again from the hub.
The goal of Additive Dispatch is to use the cables to make connections until the numeric value on the seven segment display matches the numeric value on the OLED display. By connecting various jacks together with one or more cables through trial and error, the player must deduce:
- That each jack has a numeric value between 0-9. From top to bottom, the left column of jacks has the values 0-4, and the right column has the values 5-9.
- As connections are made, the values of each connected jack are summed together and shown on the seven segment display. For example, if jacks "3" and "7" are connected, the value "10" will be added to the sum shown on the seven segment display.
There is no time constraint or failure mode, so the player can take as much time and as many connection attempts as needed to figure out the solution. Once 5 numbers have been matched, the puzzle is solved.
In Symbolic Dispatch, the player must make the connection indicated by the OLED display. However, the connection jacks are represented by symbols that are not present anywhere else in the game software (these are of course symbols from the infamous Wingdings font). In order to solve the puzzle, the player must realize that the cable storage compartment has a false bottom. Printed underneath the false bottom is a legend matching symbols to their respective jacks. Using this legend, the player can now make the indicated connections. If an incorrect connection is made, the puzzle is failed, and the player must select it from the hub and try again. Ideally, the time consuming failure loop coupled with the sheer number of possible connections should indicate to the player that there must be a better way, and they will begin searching the physical lunchbox enclosure for the solution. Once 5 correct connections are made, the puzzle is solved.
Temporal Dispatch is a test of the player's reaction time. The player is prompted to "Get Ready" on the OLED display, and 3 seconds will appear on the seven segment display. After a brief randomized period, two switchboard LEDs will light up, and the countdown will begin. If the player runs out of time, or makes an incorrect connection, the puzzle is failed, and the player must select it from hub and try again. If the user makes the correct connection in time, the cycle will repeat for 4 more rounds.
In Gremlin Dispatch, the goal is to find the 5 hidden gremlins in the system. The player is prompted to make a connection. There are 45 possible connections the player can make with a single cable. When a connection is made, the connection number is shown on the seven segment display.
If a gremlin is not present on the connection, the OLED display will show a mostly-empty screen. If there is not a gremlin on a nearby connection, the switchboard LEDs will dimly glow blue. If there is a gremlin on a connection nearby, the switchboard LEDs will glow green. The closer the connection is to a gremlin's connection, the brighter the LED will glow.
If a gremlin is present on the chosen connection, the arcade button will light up, and the player must press it quickly to capture the gremlin before it escapes. The puzzle is failed if the gremlin escapes, if the player removes the cable before capturing the gremlin, or the player inserts another cable before capturing the gremlin. If the puzzle is failed, the player must select it again from the hub to retry.
The puzzle is won win all 5 gremlins are captured.
modem screeches
Mystery man's voice: "Hello?"
short pause
"Who is this? Wait..."
"How did you get this number?"
Doom synth plays and volume slowly fades to zero as switchboard LEDs pulse red
This page (Building a "Top-Secret" lunchbox) was last updated on October 10, 2024.