Breathing Room Postmortem
Update I also participated in the 21st Ludum Dare. Check out the Data Entry Sentry Postmortem too.
This past weekend I participated in the 20th Ludum Dare, a 48 hour game making competition. I still consider myself a novice game developer with only one finished game to my name (with another on the way) so Ludum Dare was a great way to see how far I’ve progressed. This year’s theme ended up being a reference to NES classic The Legend of Zelda, “It’s Dangerous to go Alone! Take this!” I turned this into a Flash “game” called Breathing Room. (I’d recommend playing the post-Dare updated version now.)
In the week leading up to the competition the southeast US was hit by severe weather so I was without power for the latter half of the week—which was when I had planned to set up my development environment and get up to speed on the new Flixel.
On Your Mark
Upon hearing the theme late Friday night I developed 3 ideas (the client in me rejoices):
- Chibi Pan & Pup: Pan (the god, not the Peter) is stranded in Winter Cave and given a wolf cub to help him survive the trip back to Summer Wood. Pup can sniff out rejuvenating food and the omnipresent threat of less helpful, fully grown wolves in the whiteout outside Winter Cave. In this top-down game the player must find food to keep his strength up and avoid wolves while searching for each exit. Pup’s portrait in the HUD would change based on whether Pan is going towards or away from food. Music would change to indicate an approaching or receding threat.
- The Asthmathlete: A bubble boy is given an inhaler that grants him superhuman speed and reflexes (which in gameplay is represented by the slowing down of other entities). In this sidescrolling platformer, the player must navigate an impossibly fast gauntlet using the Asthmathletes unique power.
- Pogo Bass: A professionally trained (and sharply dressed) concert bassist uses his upright as a pogostick. Plucking each of its four strings produces a different offensive waveform in this sidescrolling metroidvania. The bass was given to him by an old man in a dimly lit cave. What.
After spending about three quarters of the first day working on the Chibi Pan idea I decided it wasn’t going to work out. I wasn’t sure the simplistic hot-or-cold mechanic would prove sufficiently interesting to carry a game. I also realized that I wasn’t going to have time to develop the maps to really explore the mechanic sufficiently. So around 6pm on Saturday I moved on to my next idea.
Around this time I also switched back from Windows to OS X. Flash Develop really is a great tool but Windows 7 was actively working against me and the absence of Photoshop was killing me. I work and think best when tabbing back and forth between pixels and code. Initial attempts to get mxmlc playing nice with Xcode or TextMate failed so I ended up in a trial version of Adobe Flash Builder 4 for the remainder of the project. (Only much later did I realize that mxmlc was probably working fine. The problem was swfs were launching in one of the many out-of-date Flash Player apps the Creative Suite and others have littered across my harddrive rather than the current standalone Player I had just installed. Sigh.)
Getting up to speed on Flash Builder and Flixel was pretty painless. I quickly worked through the EZPlatformer example on Flash Game Dojo. AdamAtomic’s Mode was also extremely helpful when figuring out sprites, sounds, groups and emitters. I still don’t know why Flash Builder insists on highlighting every occurrence of a frequently changing and seemingly arbitrary variable name.
I spent a short amount of time in Photoshop to create some very simple assets for the player, various threats and level tiles (the video attachment of initial gameplay was added to Dribbble four hours later).
The bulk of my time was spent implementing the helpful “cross your heart and hope not to die” checkpoints and various threats like repeating horizontal and vertical darts, spikes, bouncing exploding bombs, the masher with its invisible trigger and flickering platforms.
I wrestled with DAME for a bit but never figured out a workflow for producing populated levels. I ended up manually editing a CSV of solid tiles and calculating threat and checkpoint positions manually for the final, sadly brief, working level.
The last three hours (especially) were a blur, writing and producing some music in GarageBand (the threatening, crunchy Breathless and it’s pluckier, Zelda-tinged counterpart Respite that plays after using your inhaler) and implementing the title screen. I guess at some point in these last hours I implemented the lung HUD too.
I was under the impression our games had to be submitted at the 48 hour mark and had it uploaded about 5 minutes shy of that window. Turns out we had a whole hour after the working 48 to upload. Gah.
What would I do with more time?
- Multiple self-contained levels. Initial levels would introduce each threat in isolation (with plentiful checkpoints) before exploring their interaction with previously encountered threats (with fewer and fewer checkpoints).
- Additional threats like rising platforms (below spikes), falling platforms, rushing bolders, falling ceilings and rising floors.
- Additional abilities like exhaling to power peak flow meters that temporarily open doors.
- Better visual and audio presentation, including sound effects and a proper title screen/ending. Music shouldn’t restart when you die.
- Explore the development of rhythm as it relates to inhaling, level design and audio.
- Improved character physics. Jump control becomes increasingly important as you cluster horizontal and vertical threats.
All said, I’m proud of what I was able to accomplish in the short 48 hours. Flixel is a capable framework and ActionScript 3 was surprisingly easy to pickup (and luxuriously succinct compared to Objective-C). Once The Last Rocket is out the door I might even return to this idea and flesh it out into a full game.