Here is the process of me planning a little game that uses a zoetrope as its main controller - the result of some tinkering during an incredibly busy grad school semester. What you see is a rough proof of concept before I actual fully put things together. This was initially inspired by my early research work at McGill, which was essentially 60% camera systems in video games; 25% virtual reality; 14% digital interfaces and like 1% computer vision (for babies, like really basic stuff). The question driving this was how do we see a game world through several layers external to the actual interactivity: through interfaces, camera effects, and in this case, even a pseudo-Victorian illusionary contraption?
I did everything – coding, soldering, construction, visuals, etc. - by myself and at this stage this was a rough prototype and work-in-progress. See the end result in the next post on this page.
You’re one bird in a huge fleet finally making it back home after migrating south for the winter. It’s your turn to take over and lead everyone, but you can only vaguely remember the right path to take based on previous journeys. Control your fleet along the traces of your memory and return home.
The path of the previous flock (the ‘trace’) is randomly generated and requires the player to move along the x, y, and z axis. However this is complicated by the fact that the trace is gradually fading when you aren’t making contact with it. If you lose it completely, you’re lost and the game is over. I originally had it set where the animation speed also changed the opacity and overall game speed rather than the X axis movement, but it made it overtly complicated so I put this idea aside for now.
I’m super terrible at titling things and tend to be drawn towards awful, day-ruining Franglais puns, so I was stuck between the portmanteaus Bons-Eye (good-eye/tree thing, see concept images below for its use), and Petitwo, (short and sweet servings that are intricately decorated, like a petit four pastry but half the size). I went with Petitwo since it sounds more sophisticated? Maybe? In any case it’s not ‘Fly Away Home’ and the entire world should be grateful for that.
The zoetrope is an early animation device that uses the persistence of vision to prevent the blurring of an image sequence, creating the appearance of an animation that’s kind of like a flipbook. There are various modifications to the basic zoetrope concept, as a phenakistoscope, a praxinoscope, and more contemporary models that use 3D models, but the base idea is consistent. I got the idea to modify the zoetrope so that you could see through the drum while still maintaining the illusion of movement inside. In the ideal world with perfect light conditions, I would use window privacy film that creates a two-way mirror effect. This way you could see through the entire drum and still have the division of frames through the slits, as the surface facing you would be the mirrored/tinted side.
But this doesn’t work, at least not within an inch of a bright monitor, as the mirrored effect requires a contrast between the two sides that the film is dividing. The best alternative solution involved attaching the slots to the top of the drum, which one would look through. The rest of the zoetrope would be clear but the front would be obscured by a panel. The positioning of the slots determines how much screen space would be visible past the drum, so this was probably the most critical aspect of assembling the zoetrope correctly.
As the zoetrope needs to spin very, very fast, the design had to be mindful of potential freak accidents. So there’s two things I did as failsafes in case the zoetrope went rogue and physically flew off the rails. In order to protect the tablet I have support ledges at the bottom-back side, and the top-front side of the tablet (seen in the diagrams at the bottom of the page). As well, I am going to go way, way overboard with nuts and bolts to ensure that the drum is spinning in the spot with not even a millimeter or two off course. I’ve tested it and shaken it while it’s running without anything happening, but nothing can be 100%. Therefore as an added feature you can feel enlivened by the risk of everything going totally wrong – the adrenaline rush you experience playing a game with real and terrible consequences of potential physical disfigurement. Really though, the super rough prototype build I had used was completely safe, but upgrading to my wood frame made it extremely sturdy and stable.
I made the drum of the zoetrope from a clear acrylic container – not glass due to the weight and my desire to not die should it wildly spin off, which definitely happened while prototyping with an empty peanut butter jar (explaining the aforementioned paragraph). It has a black base and frame that holds the Arduino and positions the whole thing in the correct position in front of the tablet (or monitor in the case of the video but I’ll explain this later)
Inside and attached to the drum are eight birds that all together create a ‘flight cycle’. I originally used silhouette cut outs, but eventually upgraded by recreating them in the style in the game’s graphics. I built up the birds with paper mache so there’s some dimensionality and texture to them, but they’re light enough to prevent them from falling off the drum. I’ll probably end up 3D printing them for extra polish.
To put the “player” outside of not only the game, but the screen is a pretty unique concept and it was my intention to just see how this idea can be explored. This certainly doesn’t exist as anything other than a novelty but, you know, it’s cool and something I’ve never seen before.
The entire thing is powered with an Arduino Uno, which is pretty self-explanatory. It’s controlling a few things:
- The motor, and therefore the speed of the animation, is controlled with a potentiometer. In order to keep track of where the animation frame is (thereby positioning the hit boxes in the game appropriately), I used a stepper motor; at 8 frames in the animation and 200 steps per 360 degree revolution with the stepper, there would be 50 steps (or 45 degrees in the full rotation) for each frame. Math. I think I may adjust the heights of the frames just to make it more obvious that the hitboxes do change shape and position to match the animation, but that may dramatically increase the difficulty.
- The push button is used to fly into the landscape; movement on the Z axis isn’t something that’s typically seen in a sidescroller-like game, and was pretty much stolen from an unexecuted idea I had floating around.
- I also made a foot pedal controller that will cause the birds move vertically, basically with the same dynamics as Flappy Bird and those helicopter flash games. It just maps to a keyboard key, which is nothing special, but it lets me reuse this in other applications.
- So there’s one aspect that I think is really cool, as this isn’t a game that is designed to be a solitary, single-player experience. Similar to Twitter campaigns where a certain number of retweets will “unlock” a still for an upcoming movie or whatever, the objective in this game involves a collaboration with everyone who plays it over a set period of time. Birds that are migrating will often take turns at being the leader in order to prevent fatigue. In the game, when you lose track of your flock’s trace, the distance you traveled is added to the total distance flown over the course of a certain time period. This distance travelled (in meters or kilometers) is determined by the time played and the average speed of actual migratory birds flying, in order to appeal to that demographic that really, really values aviary realism. The goal is to fly a hypothetical route across North America, so every playthrough counts and the more people that take turns being the ‘leader’, the better.
- Bonus New Game+ mode: should the total distance be reached, just reverse everything and have the flock fly the other direction! Two games in one! Value! Replayability! Wow!
- The game’s graphics are in a sort of paper mache style that are modelled in C4D and rendered as flat images that then become sprites in Unity. It’s easy, forgiving, and quick for me to do (at the expense of being a slightly larger image size), so that’s why I did it. As I’m testing the zoetrope in different light conditions I’m looking at different contrasts so everything is still visible, but the style will be consistent.
- The landscape also varies depending on where you are the overall journey. The types of foliage you encounter gradually changes: basically there’s a bunch of “themes” (see images below for their concepts) and several transitioning stages between them. To do this I created an array of sprites, and the range of objects that Random.Range() would be able to choose from depended on how far the overall trip has progressed. As you can guess then, every play through is completely unique. Some objects will appear rarely and I’m even right now making a few ‘landmarks’ that only appear once along the entire cross-country journey, just to make the experience extra special.
- Related to the landscape is a small weather system that I think is really cool that no one will really care about. Basically, depending on the type of landscape, there’s a probability of certain intensities rain or snow occurring. So when you’re in a marshland there’s a high chance for medium or heavy rain, and the likelyhood of heavy snow increases as you progress through the full “winter theme”.
- Under the hood, everything’s coded in C# and has surprisingly few draw calls and no noticeable bugs, but of course there are always ways to improve and clean things up (optimizing the way that I have the Arduino and Unity talking to each other, for one thing). All planes of the landscape are randomly generated, instantiated, and destroyed as soon as they’re off screen, so things aren’t able to stick around to create too many problems. There are a lot of planes in the scene so it was really important for me to keep things simple where I could. Fun fact: the landscape planes change the speed they move past the player as they get closer to the screen, creating an artificial parallax effect that I originally conceived of here.