Opentilt

Tag, you're out!

About

The game

A game of Tilt is played without a screen. Indoors or outdoors, but preferably in a dimly lit place. Whenever a player's controller moves too much, the player is out. The last man standing, wins the game. The controllers are incredibly sensitive to movement. It usually takes a few rounds to get used to...

Johann Sebastian Joust

Johann Sebastian Joust is a no-graphics, digitally-enabled playground game for 2 to 7 players, designed for motion controllers such as the PlayStation Move. The goal is to be the last player remaining.

Opentilt was inspired by Johann Sebastian Joust and mimics it in several ways, but does deviate from the original. Most notably, music is completely missing in Opentilt. On the other hand, Opentilt is open source and can be played on cheap homebuilt hardware, with more players, and it does not require a laptop.

I saw JS Joust at OHM2013, but I had no idea what it was. A week or so after OHM, I asked about the game with the coloured lights, and someone who had played it explained to me how it went. Someone on IRC knew its name. When I learned more about the game through the Johann Sebastian Joust website and some Youtube videos, I really wanted to play that game.

However, it was not available for purchase and the required Playstation Move controllers are expensive. It looked like it needed a MacBook too, which I don't have either. So I decided to try and create a similar game myself, to see if it was as much fun as people had told me.

If you like Opentilt, please consider buying JS Joust when it becomes available. They've been developing the game since 2011 and as of November 2013, it's still not available for purchase, so it's probably a lot of work for them, and they deserve to be rewarded for inventing such a great game!

About the project

In August 2013, the idea was conceived to make a game like JS Joust. Parts were ordered from China and early September, some prototypes were built. By the end of October, the source code was considered sufficiently stable and the hardware was labeled "revision 1". Most of the programming effort went into having the devices communicate, as the dynamics of sensing movement were implemented minutes after the accelerometers arrived... The hardware design was released in November 2013, and the source code is available on GitHub. Most of the project is done by Juerd Waalboer, who can be reached at #####@juerd.nl.

The hardware design (based on closed source off-the-shelf components) and software source code are licensed under the GPL license. Anyone can build it and play the game. If you feel like turning it into a commercial product, good luck. Just understand that I do not accept any responsibility and will not provide any free support to commercial entities. If you want a different license, please contact the author.

Everything was designed, assembled and tested at Revelation Space, the hackerspace in The Hague, with the help of many of its participants and visitors.

Play

Connection phase

One by one, turn the devices on. The first controller will be the host, or master controller, that the others will connect to.

steady magentaHost controller
blinking blue (slow)Client controller

Starting the game

Once all the client controllers are connected (they should blink in sync), shake the host controller for a few seconds to start the game. During the game, or when the game is over, shaking the host controller will restart the game.

Once the first game has been started, no new clients can connect.

faster blinkingGame starts in 5 seconds

Winning and losing

The only way to win, is not to lose. If your controller is tagged (if it moves too much), you're out. The last one alive wins the game. Protect your own device and jostle those of the other players. Don't make any sudden moves!

Suggested house rules: always keep the controller in your hand with the light clearly visible, and don't interact with other players once you're out. Try not to injure anyone!

steady blueStill alive
steady redDead
blinking green (fast)Game over; you win!
blinking red (pulsating)Game over; you lose.

Single player

A game started without any clients, is a single player game. This makes little sense, because there is no way to win. However, it can be used for numerous creative purposes, including a simple drinking game.

Just like in the regular game, shake the controller to restart.

blinking greenish yellowGame starts in 5 seconds
steady greenish yellowStill alive
steady redDead

Error codes

blinking red (2 times)Communication with host lost; resets at game restart
blinking red (3 times)Power-on self test failed for radio module

Build (DIY)

Shopping list

Instructions

Fix the Arduino Nano v3.0

Almost all the cheap Arduino Nano v3 clones have nasty bug: the TEST pin of the FTDI should be connected to GND, but is left floating. It usually takes a while before the issue becomes apparent. You'll have to fix this before soldering the Arduino to the PCB!

Add a blob of solder to connect pins 25 and 26 of the FT232RL chip. You may want to use strong magnification (10x) to make it easier, but it can definitely be done by hand.

Optionally, to conserve power, the power LED and the voltage regulator can be removed. The "pin 13 LED" is useful because it is also used for the SPI clock, which means that it'll blink when data is sent or received. Especially if you have a bright blue power LED, I recommend removing it because it'll be annoying in the dark.

The circuit board

You could use the supplied kicad or gerber files for a real PCB, but perforated prototyping board works well too; the PCB was designed on the same 0.1" grid.

Don't use "female headers" or DIP sockets; the modules will come loose after a few hours of playing.

Place the components

The Arduino, accelerometer and radio modules go in the obvious locations. Make sure you get the orientation of the accelerometer module right.

The 150 Ω resistors are for R and G, the 330 Ω one is for B.

The BTN pins are not used, see Power button.

The LED

Clip the leads of the LED so they're just long enough for the dupont wires. Heat shrink, hot glue or tape the connected pins together for sturdiness.

Consult your supplier for the pinout; this is not the same for every RGB LED. If you don't know the pinout, trial and error works fine; connecting the wires in the wrong order will not damage the LED.

Drill or cut a hole in the ping pong ball and stick the LED through it. Use some glue to keep them together.

The case

If you're using the USB plug for the power supply (easiest way), you'll need to use something to keep it plugged in. I found that tie wraps around the power bank, and through the mounting holes of the PCB, works very well.

To prevent the components from falling out of the tube's bottom end, I used a laser cut disc that holds the battery, and bent the tube so it couldn't get past that point. However, duct tape would probably work well too.

Power button

The game was designed with the ATMEGA328's power savings features in mind, and has a connection for a power button. Alas, the Arduino Nano has an FTDI chip that stays powered, and it would drain a battery in a few days, so a real power button is still needed. Instead, for the first version of Opentilt, I just kept the A side of the USB cable within reach. Unplug = power off.

Putting it all together

Glue, sellotape, tie wraps, whatever comes to mind... :-)

Programming the Arduino

Get the source code from Github, and upload it to your Arduinos.

If you want to use the power button feature, even though it doesn't really work well enough, you will need Optiboot or the Arduino Uno boot loader.

Repeat until n >= 2

The more, the merrier. The game can be played with as little as 2 players, but it's a lot more fun if you have 6 or 8.

Buy

Opentilt is not for sale.