What I Did Over the Weekend
I spend all week programming at Metal Toad so you would think I'd want to spend my weekend doing anything but. Yet, instead of enjoying the unseasonably warm January weather, I spent last weekend at an event, writing code. Why? Because I sincerely love programming. Taking the micro elements and fitting them into the larger macro picture, is much like writing music, but instead of trying to convince an orchestra to play my music I have a quad-core super computer that will run anything I toss at it with ease (my first computer was 1mHz).
The Global Game Jam is an annual event that takes place at different 'jam' sites around the world. I have attended for the last 3 years. The goal is to come together and make a video game, or non-digital game like a board game or card game. Participants rapidly prototype game designs and are some are able to step out of the box and inject new ideas to help grow the game industry. We share a common theme and the constraints of time and man-power. It asks participants to create a game from beginning to end in a prescribed time (maximum of 48 hours). The brief time span is meant to help encourage creative thinking and to help narrow scope. The first year my team made a board game (YODO) and the second year we made an iPad app for 3 players over 2 iPads (Cuppa Quest, which actually was an Indiecade finalist 2014). There is always a theme and this year's was 'What do we do now?'. Normally everyone shows up and says what they do and people join groups. Since I came with a couple of my friends we already had a partially formed group. We also bucked the trend since we knew what we wanted to work on and with what technology. We came ready with Philips Hue lights, MiLights, and a heap of knowledge of iOS and Mac programming. We also knew we wanted to work with sound, and more specifically, 3d audio.
Friday night is for forming groups and figuring out what you want or can do in the short timespan of a weekend. We wanted to create an experience with headphones on and our eyes closed. After initial testing we realized that our eyelids mask most colors. Since our eyelids have blood vessels running through them most of the light colors showed up as a type of red. 'Seeing Red' isn't a great thing. That idea needed to be shelved. We needed a new concept. Since our lights were already hooked up and flashing our custom colors we thought that we could project onto a wall, or onto a screen or even on curtains. While those solutions worked I came up with the idea of getting vellum to make glasses. Vellum is traditionally calfskin, but this was art store vellum and looked like a frosted plastic. Not only would it look super cool, but a quick trip to the art supply store would be rejuvenating. By 10pm Friday I had a visual demo showing my spirit animal (Salmon/Trout) following a line with droppable sprites which will represent audio.
My friend had colors showing up on screen and on both brands of lights. We'd made progress but we'd need custom file formats, to eventually merge our code and to write and record audio for our story (and also collect free effects samples that we couldn't make ourselves). With sleep creeping into our eyes, my friends ask me what time I'd like to close up shop for the night. When I answered 11, there was notable relief (note: apparently we're all old now?). I felt the same relief when I got home and realized I had hit the jackpot: My newborn son was asleep and I was able to make it through a full nights sleep without being woken up.
Saturday was a blur of 0's and 1's, else's and if's, true's and false's, as I spent the majority of the day writing code. We also had a nice PVC frame with curtains to make a dark room.
By Saturday evening we had tools that actually did stuff and I had audio samples playing through my earphones ramping up and down as we passed by them in space. OpenAL was key and the ObjectAL library wrapping it in Objective-C made it even easier. My friend had also made progress making a framework to send colors to the Hue bulbs, the MiLights and also to display on the iPhone screen. Before closing up shop for the evening we scrummed about story, colors and what we could actually accomplish in this timeframe. We still had two projects so at a certain point we'd need to merge them together.
Sunday came and we were all tired. If you are interested in having a baby I would say that babies are marvelous and a great thing to do. If you will never have a baby I may say that I may forget a lot of this due to lack of sleep. First order of business was deciding on what formats we needed. We decided on Json because of the ease of translation to NSDictionaries and NSArrays. I now had a tool in which you could visually drag and drop samples on the phone and then 'play' through it with a narrator pegged to our immediate left side (at least that's what it sounded like). We also had a lot of audio files for the choose-able effects and narration to put into the game. The deadline for the show-and-tell was 5pm and it was only from 2-3pm that we were merging our code. Normally having multiple developers on the same code-base is easy with git (and even easier with a GUI tool like GitBox). It is just that we were working on vastly different things at the beginning and it didn't make sense to merge until that later point. In the end after we had all the materials and programmed light patterns I was able to drop in the audio files and make experiences. The tools felt mature at that point but it was still tedious adding new audio samples and trying to time the lights correctly.
Finally it came time for our presentation and it went incredibly well! Our 'machine', the Sim-O-Tron 500, had a queue the entire time, and even though it was only an artful narrative fictional adventure, the response was overwhelmingly positive.
As I reflect on this experience, I couldn't be happier I participated. It jazzed me even further for working on great projects at Metal Toad. Not only are there fantastic programmers to pair with and learn from, but we have time to make the right decisions and the experience and ability to add polish not available to some geeky programmer just working on a weekend project.