Tuesday, January 31, 2012

Auralboros and Global Game Jam 2012

On January 27–29, six of my seminar students and I participated in Global Game Jam 2012. For those who don't know about the annual event, it is a 48-hour period during which people from around the world collaborate to make digital or analog games. All of the artifacts from the jam are made available under a Creative Commons BY-NC-SA-3.0 license. The closest location to us was in Indianapolis, but we decided to make the trip to Columbus. This was partially to avoid the congestion due to the start of the pre-SuperBowl parties but also to give us some geographical change: putting ourselves in a completely new place allowed us to treat the whole event as a kind of retreat.

After a fun pre-recorded keynote and some comments from game designer, author, and GGJ organizer Ian Schreiber, the theme was announced:
The GGJ2012 Theme
I love the fact that the theme is a picture with deep symbolic and historical meaning. This is, of course, an ouroboros, a word which I only know as a player of Betrayal at House on the Hill.

After everyone had a chance to think for a bit, people began pitching their game ideas. Some were closely tied to literal interpretations of the theme and others to the symbolic meaning of the theme. Many discussions began with the theme but then wandered away. I found the creative challenge to be in capturing the spirit of the theme in a game, especially with respect to the combination of endlessness across generations. Based on this, I pitched an idea for a game with rich audio experience. For the next 42 hours, I worked with Ryan Thompson on what would become known as Auralboros.

Auralboros Logo by Rebecca Austin
You can play the game on the Web, or you can go there indirectly through its GGJ entry. Note that it requires Unity Web Player, which is only available for Windows and Mac OS X, unfortunately. I encourage you to play the game before you read on, lest I give away some of its secrets. There are not many secrets, so you can understand why I'd want to keep them safe.

We decided to use Unity very early in the project. We knew that this would let us easily produce a game that could be hosted on the Web. We also figured that it would be easy to add pizzazz once the core mechanics were done. We invested several hours into the core gameplay sans audio, and it wasn't until midday on Saturday that we realized that Unity's audio API is practically non-existent. To be clear, you can very easily play back audio—including 3D audio—within Unity, but it does not support synthesis. In the end, after painful struggles with my laptop to try to get full-duplex audio to work, we ended up using MuseScore to drop notes onto the staff and then export WAV files. I had hoped to test the game with both chromatic and pentatonic scales, but we never got that far.

I had been looking for an excuse to practice some of the tips in Clean Code, but the truth is that I don't program anywhere near as much as I would like to. Working with Ryan provided a great opportunity. This was also my first time pair-programming. I've been having my students pair-programming for years, but I've always been forced into a "mentor" role rather than a "peer" role. For Auralboros, Ryan and I were simply working together as a team, and I'm happy with the results. He caught a few of my errors, and I caught a few of his. I definitely took the lead on some of the more abstract software design ideas, but none of them were so wild as to be outside of his understanding once we had them down.

We had the core game experience working by early Sunday, and so we turned our attention to beautification. I knew from early in the design that I wanted to have feedback based on a player's matching their own sounds. That is, Auralboros does not force you to do anything specific with it, but if you make yourself a rhythm game, then you get positive feedback. Our first attempt involved counting right and wrong notes, but after this failed, I realized that what we needed was a physics simulation. We created a "gravity" value as a constant downward acceleration. Each time you get a note right (i.e. you hit that key again when its cube is at the top of the screen), you get a boost to upward acceleration. This affects a velocity, which in turn affects a point. We map the point first through a series of greyscale values for the background, and then for increasing opacity on the two feedback orbs. After capping acceleration and velocity, this worked like a charm. Along the way, Rebecca Austin joined our efforts, designing our logo and textures on the two feedback orbs.
The Auralboros Team
For the most part, we kept to the headphones as we developed the game. It was always fun when someone would ask to see the latest build, leading to strange sounds and usually laughter filling the room, though I don't blame anyone for being a bit miffed at the distraction...
Josh's reaction to Auralboros during GGJ, as captured by Rebecca Austin
A few hours into development, Ryan and I started using Trello to manage our tasks. I had read about this tool and recommended it to others, although I had never quite found a use for it myself. This was a perfect application, and it helped that sharing between two Google Accounts was seamless. We had three sections to our board: defects, for those things that were broken; to do, for features we wanted to add but could live without; and paulish for ideas that would make the player experience more glossy. There was only one to do item that we didn't have time to add, and that was having the cube halos fade in and out based on distance to the apex. We finished our game about an hour before the deadline, so we may have been able to squeeze this in, but it would have meant re-exporting and uploading, and that was just not worth it. The GGJ servers were getting hit pretty hard.

I think it was good for all of us Ball State folks to have a classic R1 campus experience as well. We were at two different buildings for the event. On Friday, Parking was hard to find, and we walked around the building once due to poor signage. It happened to be a teaching building, and it was cluttered and musty. The classroom in which we met had grimy walls and inadequate blackboards. We did appreciate that we could lean back in the chair-desks, which would make it easier to rest during boring lectures. The next day, we were in the OSU Union—not a teaching space, but a place for events, meetings, and chats with alumni and benefactors. It was absolutely gorgeous, my favorite part being the totally gratuitous projector-that-descends-from-the-ceiling in our meeting room.

Special thanks goes out to Brian Orchosky, the site coordinator: if you see him, buy him a drink. 
Site coordinator Brian Orchosky
Global Game Jam 2012 was the largest game jam ever, and it was great to be a part of it. You can check out all 2000+ games at the GGJ Web site. Note that you can search by site, so you might want to take a look at the other games created in Columbus or in a city near you.

The Ball State University contingent in Columbus at the end of GGJ 2012
It was a great event, and we all enjoyed the weekend together. Thanks to Phil and Kristen for stopping in to see us, even if you couldn't participate in the whole jam. The only real downer was that when I got directions to the Jeni's Splendid Ice Cream on our route home, it turned out to be the one in the North Market, which was closed by the time we got there. I suppose we'll just have to go back sometime.

No comments:

Post a Comment