Reflections on TO Jam 2014

TO Jam Notes

The past weekend I participated in my second game programming competition called TOjam. The goal was to simply make a game in under 48 hours, similar to Ludum Dare though with a local community to build your games with.

Compared to the Toronto Global Game Jam, I'd say things definitely went a lot better for me this time. The big reason was because I was on a team so we were able to distribute work and test iterate over the ideas relatively quickly.

The main idea of the game was to build out a western-style shootout but with princesses as the people in the standoff. The theme changed around a few times though the end product was something we were all super happy with.

Day 1 – Spinning

The first day, Friday, consisted of us mainly trying to figure out how we wanted the mechanics to work in order for the shootout to happen. One thing I thought that might've been interesting was to have a QWOP style interaction with drawing your pistol. This could've ended up being something interesting, though given my lack of experience with Box2d and how janky the experience felt we decided to scrap it.

you-are-the-dead

We also weren't super sure on what kind of art style we wanted to go with. We decided to spend a bit of time trying out a few different art styles, though it was uncomfortable and definitely slowing the designers down.

Day 2 – Locking down the mechanics

When I came in on Saturday we did a brief discussion about what we were looking to do and how to get there. I started working on more prototypes using boxes and such until I had some rough assets to drop in.

Most of the work for me consisted of getting all the collision detection working, controlling the various player states and managing things like the bullets that were being fired. One part of the project that was starting to really hurt was how player state was being managed. Initially I was simply having it driven by button presses which lead to some really weird edge-cases that would cause players to die when they shouldn't and so on.

This was around the time when one of the designers, David Rusak needed to know how we were going to be handling the animations. Initially I was simply going to perform a bunch of transforms on various parts of the sprite (such as rotating the arm) but after talking to some more experienced jammers at the event, decided to go with frame-style animations instead.

The big thing I wanted to avoid was the use of Sprite-sheets. For super detailed things they are awesome, but depending on your frame rate and how you are updating them, they can be really hard to tweak. Another thing that I was worried about was figuring out when certain parts of the animation had finished. I sat down with David and we chatted about an idea I had that would make it super easy for designers to tweak timings that didn't require developer intervention.

I want to say this worked out really well because we were using Löve2D and Lua which has that lovely benefit where code can be data. Writing out the data-structure was extremely straight-forward, and "parsing" it was practically trivial. Another added benefit was we were able to add events that would be fired when a frame of the animation had completed. This meant I was able to move over to a callback pattern for controlling player state.

Once we had the animations setup I took to helping out the designers with some work. They were super busy working on all their art so I took to building out the various aspects of the UI that could still look good but be built out by a developer. This mainly consisted of stuff like the DRAW! screen and instructions. Initially I grabbed some ancient assets from Microsoft to use as the buttons though they made us pretty sad. They were super dated looking for one, and really didn't fit in with anything we had built out.

three-two-one-draw

By the end of day 2 we had made some awesome progress! There were a few missing pieces, but overall it was at the point where we just needed to add the finishing polish.

Day 3 — The Final Day

The Final Day

It was pretty much all about polish during the last day. I spent a bit of time within Audacity to tweak some sound effects to fill in some of the empty parts of our game. Another thing I spent time on was trying to figure out where the loop points of our game music was. I'd say there is a bug in Löve2d when it comes to playing audio, even when you are playing sounds set to loop. The problem is when the music is over there will be dead air before the music starts up again which is quite jarring.

When we started getting closer to the end of the event, I figured it would be a good idea for us to get together and hammer out all the remaining pieces that needed to be worked on in order for us to consider the game done. There were going to be a few missing features, but a big thing for me was something that didn't crash and played well. 7pm was pencils down, so I figured we could call our tojam release time to be an hour before. This would give us enough time to catch any last minute problems and put together the binaries for release.

Post-Jam

I'd have to say this was one of the better hackfests/jams I've participated in. The one thing that really stood out is there was a vision that was easy to realize and a scope that wasn't too crazy. I also feel that we weren't afraid to cut out things that might've ended up in some features that might've been cool but could've compromised the integrity of the project. Finally, I had chosen to use tools I was familiar with which meant that while I was still spending time learning, the slope wasn't as steep as it's been in the past.

If you're interested in playing the game, you can grab a copy for Windows or Mac. I also suggest that you take a look at the other games that were built during the jam as well!