This past weekend Ludum Dare celebrated its tenth anniversary. Ten years of crazy people going it alone to create a game in 48 hours. Two years ago they expanded the event to allow teams to participate in a separate but concurrent 72 hour jam. This is my fourth Ludum Dare (1, 2, 3) but my first as a jam participant. I teamed up with Neven Mrgan and Alex Ogle to create Millinaut.
Neven was working from Portland and Alex and I from Chattanooga in the Tubatomic offices. (Trivia: The Tub offices are above an event space that hosted two proms during this event.) We used Dropbox to share files and Skype to bridge the two locations. (Did you know that on the iPad 3 video chat will drain the battery faster than USB can charge it? Neither did I.) We did very little preparation in advance of the theme annoucement. I made sure Flash Builder still worked and figured out how to import Tiled maps into Flixel.
As Neven said, “Flash, lol”. Why Flash instead of HTML5? My last two Ludum Dare games were HTML5 and the results were really lackluster. Zero to poor audio support, terrible mobile performance, and ugh, the choice between anti-aliasing or memory devouring in-canvas scaling. I’d rather create a good experience on one platform than a poor experience on many.
Like everyone else we got the theme “Tiny World” at 9 Eastern/6 Pacific on Friday night. While brainstorming we touched on Liliputians, Innerspace, and Alan Moore’s Voice of the Fire. We talked about the myriad things that can happen in small spaces, phonebooths, hotels, airplane cabins, and in our own heads. About small physical spaces observed over huge stretches of time. The idea of splitting yourself into smaller and smaller pieces and using the discarded pieces to progress.
An early narrative saw the player in a coma, wandering around inside his own head, piecing together the experiences that lead him to and eventually out of his current predicament. Was he a heroic fireman or a poisoned king? A victim of a drowning or a car accident? An astronaut knocked unconscious during reentry? We talked about additive level design where the entire game would play out in one room with each colected item filling in a narrative blank and adding more detail and new challenges to the game world. A player would control ego, super ego and id. The idea of an introspective totem pole eventually lead to the segmented gameplay mechanic.
While Neven pixelled the protagonist and Alex developed gameplay ideas and continued exploring narrative options I stumbled through loading tmx files. Within a couple hours we had the core dropping heads and using them as platforms mechanic working and were able to build and test levels quickly.
Things get blurry here. Collision resolution with a segmented character was really difficult to implement. Adding in enemies and spikes only complicated things. The stack height affects environmental collisions but the damageable hitbox doesn’t actually change size. Changing the player’s height caused Flixel’s camera to shift suddenly or pushed the player into the ground and out the bottom of the level. Once we introduced enemies the idea of activating the heads, one moving up, the other falling was developed. So now the heads had different collision states. For a while you could ride the rocket up the screen (or the planet down) but that ability neutered the challenge of the vertical platforming.
While I continued to debug and add features, Neven and Alex both designed levels to explore the gameplay possibilities. Occasionally Neven would create some new characters or animation sequences. Alex performed the unenviable task of building up a library of sound effects and serving as a second pair of eyes and lobes diagnosing bugs in the game. Early Sunday morning I composed a background theme and slept for the first time since Thursday night (I slept 11 hours total during the event which spanned 72 hours plus the 12 hours before we got the theme).
The final 24 hours were focused on polishing what we already had. Inserting sound effects, composing background music and goal fanfare, fixing bugs, refining enemy and projectile interaction, creating more bugs, setting up autotiling and implementing the parallax starfield. Alex figured out how to get cutscenes created in the Flash IDE into Flixel and built those out. Neven trimmed the level fat. We had a bit of a scare at zero hour when the Flash Builder release build wouldn’t load our external levels so we ended up posting the debug build.
Ludum Dare is always a rewarding experience. You have a deadline and a direction and 48 (or 72) hours to see where they take you. At the end of the weekend you have something that didn’t exist before. It’s simultaneously exhausting and rejuvenating. You can relive our experience and if you participated you can rate our game.