Walnut (2017-2020)

A game engine for developing immersive out-of-home experience

Solo work. I wrote this framework from scratch, and have been its main developer for three years

Walnut is a game-engine for “in real life” location-based entertainment. It is a toolkit for creators to develop experiences that blend two distinct forms of entertainment:

  • Linear theatrical storytelling. Theater plays and amusement park dark-rides incorporate highly produced AV content, physical sets, mechatronics, and/or lighting design that work together in a precise sequence to tell a story the same way every time. Show creators can use Walnut’s sequencing tools to produce theatrical shows with a narrative arc.

  • Gameplay. Games of all sorts let players control the outcome, and can provide a sense of mastery that forms positive memories. Walnut provides an SDK to develop games that get players to actively engage with the show. Players can act collaboratively and asynchronously, each influencing the outcome in their own way and at their own pace, subject to the show designer’s constraints.

Walnut is a show sequencer, Python programming SDK, hosted game runtime, communications backplane, IO hardware library, and web-based testing and operations toolkit distributed as containerized Docker microservices for easy development and deployment.

With Walnut, Two Bit Circus creates interactive shows that together constitute a whole new class of out-of-home entertainment interleaving story narrative and active play. These are social experiences, designed for groups large and small. We call these experiences “story rooms.” They are created by a team at Two Bit Circus comprising storytellers, game and theatrical designers, visual artists, software programmers, and fabricators. Walnut is designed to maximize specialists’ creative efforts and help teams collaborate. Theater people don’t have to write code to make theater; programmers don’t need to learn visual tools to express what’s best done with code. IT and operations can deploy and run a show with confidence.

Like a theatrical play, each story room is designed around a custom-built physical set. We’ve created the bridge of an intergalactic starship, a cartoon operating-room, a 100-person touch-screen theater, a park-wide scavenger hunt, a bartending robot, and more. These sets serve more than just decoration: touch-screens, levers, buttons, and other sensors allow guests to interact; AV, lights, and mechatronics drive narrative and bring the space to life. To accommodate many simultaneous guest interactions, shows require many computers, I/O controllers, and other embedded electronics spread throughout.

Walnut is a layer above traditional game engines. It includes SDKs to coordinate frontends developed in Unity, OpenFrameworks, and HTML5/JS. Screen-based interactions usually occur on touch-screens, but we’ve developed experiences that incorporate AR/VR. Shows developed with Walnut can even make an app or webpage available that allows guests to engage with the experience from their mobile devices.

For developing non-screen interactions, Walnut connects to programmable logic controllers (PLCs), devices running ROS (Robot Operating System), Arduino microcontrollers, DMX lights, and more. A single story room commonly uses many of these interfaces simultaneously. An abstraction layer makes a room full of diverse hardware feel like a single cohesive unit. Developing for a room of dozens of heterogeneous devices is as simple as for a single device.

Walnut is primarily programmed in Python, which enables show designers to leverage powerful tools from the Python ecosystem. This includes third party online APIs and deep learning techniques like conversational interfaces, language generation, and computer vision.

A show creator both programs and sequences the show from a central server located on-premises or in the cloud. Updates to software running on local computers throughout the room are automatically pushed from the server. Each show exists as a single git repository which incorporates the Walnut SDK as a submodule and can be deployed easily at new sites.

Using Prometheus monitoring software, Walnut continuously captures game logs and health data from show hardware, and can forward it to off-site monitoring to help developers identify gameplay trends and hardware problems.

Walnut incorporates many features to address the unique needs of location-based entertainment. Every Walnut installation comes with basic web-based tools for staff to start, stop, and seek through a show using a tablet. The designer can easily extend this interface using Vue.js templates for greater insight, troubleshooting, or control of a show.

To ensure guest throughput, rooms’ interactive sections are given time limits. If a limit is reached, it can indicate guest confusion or hardware failure. Walnut can automatically signal staff on their tablet, or flash exterior indicator lights.

Hardware fails; when it does, it’s easy to replace. Every computer is provisioned from a central Puppet server; when replacing a computer, a game technician need only change one configuration file and the new computer takes on the correct role.

Story rooms transport guests to invented places. That makes guests want to snap selfies, which can break the immersion. To keep guests’ phones in their pockets, we’ve outfitted some story rooms with high-quality cameras that take the perfect shot (or short video) at the perfect time. Walnut has tools to time the shutter with the action, and to make media available to guests when the experience ends.

Modern entertainment needs modern tools. Walnut combines the latest techniques from game development, robotics, theatrical show control, and cloud dev-ops. It has given Two Bit Circus the power to prototype quickly, to collaborate effectively, and to build reliable shows that we once considered unreasonably complicated.

project image