Such jam. After a long while, I’m back to blogging business and this time it is time for a quick post mortem of this year’s Finnish Game Jam or Global Game Jam, whatever you want to call it. Our project was called Chip Away, mainly because of chiptune music that was going to be in the game. You can check out a gameplay video on YouTube or download the game from the Global Game Jam website and try it out yourself.

The beginning.

We formed our team well before the jam and set some extra constraints for us since everyone was pretty experienced already. We were originally supposed to be a team of six, but dropped to four people when the jam started because everyone couldn’t make it. Roles for the team came naturally, with Mikko and Simo (both are from Rightware) taking the responsibility of gameplay programming and everything related to the game engine, Antti (Afterlife Entertainment) taking up graphics and game design while I (representing Critical Force Entertainment) started working with all things audio. And here comes the first mistake: I was programming an audio framework, namely paerinae chiptune-o-matic,¬†pretty much from scratch on OS X, while other guys were using Windows. We should have tested my base audio library on friday with the game engine, yam2d, to be sure that everything works. But more on that later. The idea for the game was pretty much set before the jam even started so the actual theme from the jam is pretty much shoehorned in, but you can see it there somewhere.;)

Jam goes on…

The first few hours went by with all of us happily doing our things and the first thing that was somewhat ready, was my chiptune thingy. I then spent several hours to make the generated tunes sound good by adding filters and delay effects, before eventually the need for sleep became imminent. During the first few hours of the jam, I was interrupted by a call from China, which pretty much meant that I lost several jamming hours from the next day by having to go and do some real work. My lesson from that is, that make sure there are no distractions from “real life” when participating in a game jam. The next day after I got back to the jam site, I started working on a way to integrate sound effects into the same audio stream with the chiptune. This was the first thing where I started to cheat and stepped out of the procedural world by generating sound effects beforehand and storing them in C++ header files for easy access. After I had the first effects playing through the system, I myself moved to Windows platform as well – something that I should have done way earlier. And that is because after setting up the game project to use paerinae, it didn’t even get to the main() function before crashing!

Oh shit, debug time!

We spent way too long, almost three hours, trying to figure out what is wrong with the system. Eventually, we came to the conclusion that we have no way to trick the system to use DirectSound (or any other DirectX library) with yam2d as it uses OpenGL and it won’t play nicely with DirectX APIs. There was around four hours left in the jam, and I had to take out RtAudio, the cross-platform library I had used previously and replace it with BASS audio library. Luckily BASS is very well documented and there is a good example of how to stream out audio that is generated during runtime. This of course meant that I had to strip, rewrite and hammer a new callback function for the synthesis, which meant that the new version didn’t sound as great as the one I have running on OS X. But it is close enough, and I think that with some optimization I’m able to bring all the oscillators from that version live on Windows as well. By the way, it’s quite funny to try and debug an audio error where you can see that there is signal coming to the sound output from the windows mixer, but you can’t hear a damn thing, even though you have your headphones plugged in and all volume controls set to max (mute was disabled also). After messing around with the audio libraries, we were done. We got a version with audio ready two hours before the final deadline and had all necessary sound effects in place 40 minutes before the deadline.

Lessons learned?

I can’t even remember how many times I’ve participated in a game jam, but every time there has been something I’ve learned. Here’s my list of what to remember when a wild game jam appears, this is not from just one year, but something that I’ve accumulated over the years.

  • Throw out the first three ideas you get, maybe even more. You’ll get better ideas along the way so take your time to think about the idea first.
  • Plan ahead – make a list of what is needed and when it is needed
  • Setup your tools beforehand, you don’t have time to install new tools during the jam
  • Test that all the frameworks that you are going to use work with each other!
  • Get some healthy food like fruits and vegetables for you to snack on.
  • Remember to drink water
  • Remember to sleep! I can’t stress this enough, you’ll get much more done if you give your brain some time to rest, so I suggest at least six hours of sleep every night during a jam.
  • Upload your work WAY before the deadline. Especially in Global Game Jam, the server is going to be super crowded at the deadline.

Even though the jam was exhausting once again, I got to do something that I haven’t done in years: low-level C++ programming!

That’s about it. Now it is finally time to go to sleep and get ready for the workday. Oh yeah, if you haven’t already, check out our latest game Company of Tanks on Google Play.