Last weekend I participated in Indie Speed Run 2013 a 48 hour game making competition for teams of up to 4 people. For our team I was focused on programming while Saam handled art/design and Jerry worked on sound/music. This was the first time we were working together and also my first game jam working on a team.
Sometime around 7 PM we hit the magic button to begin the jam and receive our 2 random game elements that must be featured prominently in the game. Our theme was “Secret” and our element was “Vines”. We brainstormed for about an hour and came up with the rough plan to make a platformer where the character swings from vines inside a secret lab, working as a secret agent to get past traps and find a “Secret Formula”.
Day 1: Platforming, physics, and rope swinging.
I created a new branch on the Frank Engine repository on source forge for the project. This allows anyone to see not only our full source code but every revision we went through over the 48 hours. Saam was also connected to the repository which was a mostly efficient way to share files. We ran into a few issues with SourceForge and SVN but overall it was worth it.
I was a little nervous after we had decided on the gameplay because platforming can be tricky to get right with Box2d, especially with the added difficulty of swinging from vines. I was never able to get the feel quite right when I tried to make platformers in the past, but I wanted to try something new for the jam. Sure enough I had to battle some physics issues…
I started using box shape for the player’s collision physics. A box is desirable for platforming games because it allows players to move all the way to the corner of a ledge, and rotation is prevented so they won’t fall off. The problem is that my game composes the terrain using separate physics objects for each tile and as the player slides along they occasionally “stub their toe” so to speak which causes them to stop in place. A similar issue also occurred when jumping against a flat wall. Switching to a circle shape fixed the toe stubbing issue but has a different problem because the player can only walk half way off a ledge before their sloping bottom causes them to fall. I ended up using a combination of the two cases which is a box with rounded corners. To create the shape I am using 2 boxes and 4 circle shapes. The boxes are slightly smaller then the circles to fully eliminate the toe stubbing. Looking at it now I could probably tighten up the collision to better match the artwork but this was close enough for the jam.
Rope swinging is another potential difficult physics issue but I was determined to get it feeling good on the first night. I started by hacking up a my own custom rope constraint using something like a spring but I couldn’t eliminate the springiness. Then I tried the Box2d distance joint which ended up working awesome despite a few quirks. I stayed up late tweaking the feel of the platforming and rope swinging.
Day 2: Enemies, art, and a new font.
The rope swinging was good enough to prove it as a solid primary mechanic so I moved on to implementing some of the objects we had discussed. Since it was a secret agent type of game we decided that security cameras, rockets and laser trip wires would be the main level design elements. Those are mostly simple things to implement and are pretty quick for me to add in my engine.
I also hooked up the art and animations from Saam and added some special effects. For the in game font we used the Nokia Cellphone FC font, which I had to install and convert for this game. While I was busy with the programming, Saam was adding new art and level design while Jerry was creating music and sound effects. By the end of the second day we had the level design mostly blocked out and a good feel to the gameplay.
Day 3: Sound, music, more enemies, and polish.
Early on the final day I hooked up all the sound effects and music that Jerry had been working on. I also added a simple system to allow for music transitions, something I’ve not yet had to do in my engine.
The game was feeling pretty good at this point so I wanted to add moving cranes to keep the gameplay interesting. To make this happen I had to write a more sophisticated vine system to attach to the moving objects properly because previously it was only attaching to stationary things. It ended up paying off because I made it so the player can grab onto other movable objects like crates which turned out to be more fun then expected. We all had had a laugh when Saam discovered that you could even grab rockets and fly them around like a kite.
The last thing I got to spend time on was the beginning and end sequences of the game. When the player starts the game they crash out of the tube and at the end they are transformed back to being human. I rushed to implement a camera shake system for the opening sequence and several other little tweaks. About an hour before our deadline the game felt complete. We played through it a for a while, make a few last minute tweaks and submitted it.
This was a very successful game jam for us because we worked well together, learned a lot, and delivered a solid 48 hour game, though we could have used a little more time.
Really the only thing that went wrong is we could have used more time for polish. I would have loved to have a few extra hours to just refine our final product. I ran into some engine issues that cost me time, like issues with the font conversion system. As a result of this speed run I’ve already made a bunch of improvements to the game engine so things go smoother next time.
Overall things went really well, especially considering our team had not worked together before. We tried to keep things as simple as possible and threw out ides that would have complicated things. We had an idea early on about having the player somehow get powers or grow from being in the light (because she’s a plant) but thankfully we decided to throw that idea out about halfway through because it was in total opposition to our theme and we never really figured out how it would work. We also had planned on having more enemy types but whittled it down to the simple elements that most fit the theme and setting.
Here’s a link to the most recent version of Secret Formula that contains some tweaks, bug fixes, and other improvements.