Ludum Dare 24 – Recap
Ludum Dare 24 may have only lasted 48 short hours, but they were some of the most intense 48 hours I’ve ever been through, and I do some crazy shit in my spare time. A few days ago, I made a Ludum Dare 24 intro post, stating that I would be working on a game titled Unnatural Selection. With Ludum Dare 24 now at a close, I’d love to recap on how I fared this time around. Before you read on, give the game a try.
What Went Right
Aside from a slow start on day one, due to thinking of ideas, things actually went incredibly smooth this Ludum Dare. I came up with a new game concept, increased my skills in pixel art, composed a new audio track, and programmed like a mad-man. I beat my perfectionist nature that normally prevents me from working quickly, and I genuinely acted upon nearly everything I learned from my last Ludum Dare attempt; staying sober was in fact a great idea.
On the programming front, I literally coded the most I ever have in 48 hours. I ignored the raging temptation to neatly program everything, and simply pushed forward. I’ll admit, the code isn’t nearly as sloppy as I thought it would be, and it won’t be too hard to go back and tidy things up. For me, this was a great lesson, because my perfectionism with neat code has been a major slowdown for my development.
At the beginning of this Ludum Dare, I told myself that I wanted to overlap some of the work I was going to be doing, with that of which will be needed in future projects. I wasn’t entirely sure if that would even be possible, but I made it happen. I wanted to create a system for loading levels on the fly, and completely erasing the previous levels from memory. With the evolving arena mechanic in Unnatural Selection I got to create that system, and I’m now ready to put that into use with other projects, particularly my Halloween project.
If there is one thing I fear when going into a Ludum Dare, it’s that I’ll have to do my own graphics. In case you’re not aware of this, I am in no way a graphical artist. I have an eye for what looks good, and what doesn’t, but that has little to do with my actual skills. Needless to say, I’m always concerned with what graphical direction I’ll take for any one man competition / jam, and this time around was no exception.
To my surprise, I was actually quite capable of creating half-way decent pixel art. I looked at a lot of NES favorites for inspiration, and closely analyzed what exactly made pixel art work, and I was able to replicate the effects with some success. I’m not sure I’d release a game with the art I came up with, but it certainly exceeded my expectations, and I’m quite proud of what I came up with.
Audio has always been a strong point for me, despite the fact that I hardly use such skills outside of casual piano / synth playing. I decided to not leave audio for the last minute this time around, and I think it paid off quite nicely.
For sound effects, I used BFXR, a slightly more advanced version of the wonderful SFXR. It didn’t take me long at all to come up with the effects I used, and I think they’re all quite fitting. For music, I used my Korg X-50, and recorded directly to my computer using my Cakewalk UA-1G audio interface, and Sonar 6 LE. I then perfected the loop using Audacity, and exported at a lower sample rate mp3 to conserve file size on my swf. I was very surprised at how quickly I came up with an upbeat, action-like loop, and am quite fond of the piece. If you’d like to listen to or download the track, you can check it out here.
What Went Wrong
While almost everything went perfectly, I did fall short in a few key areas. I told myself from the very beginning not to polish anything until all the core mechanics were in, and I unfortunately didn’t listen to myself as much as I should have. To me, there are five main components to Unnatural Selection.
First – the game is a platformer. This means it needs solid movement and controls. That was easily taken care of, as I’ve been working on a paltformer framework, and simply used that. I quickly got a basic test level up and running, and ensured that I was ready to go.
Second – the arena needs to evolve, and be pseudo-randomly generated. I split the arena into three sections, bottom, middle, top, and decided that I’d create five maps for each section for the Ludum Dare version. Aside from the three sections, there was one “core” map that contained the static connection pieces, locations that would exist in all maps, where each segment would link to those it was connected to. I knew right off how I was going to handle this, and got it done in only a few hours. However, when I went to test my example maps (the core map, and one for each section), I ran into a problem. The maps connected fine, but everything felt extremely tight, and not very fluid. The maps were too small, and there wasn’t enough room to move around and have the game feel right. I then spent numerous hours coming up with new arena dimensions, changing how the maps linked together, and ensuring that there was enough space for fluid movement. I finally got things exactly how I wanted, but I lost a good four hours in the process.
Third – the safe room mechanic. Every thirty to sixty seconds, an alarm sounds, and the player must get back to the safe room. To me, this was as core a mechanic as anything, and I really put a lot of effort into making it feel right. I had to ensure the alarm went off, the room locked down, doors shut, doors opened when lockdown was done, etc. While the idea isn’t too complicated, creating the code for it wasn’t as simple as I expected. I then spent a lot of time polishing this mechanic by adding sounds, visual effects, etc, which should have waited until the last few hours of the competition. If I had gone with simpler graphics for this part of the game, I probably would have had enough time to implement the final, and potentially most important aspects of the game.
Fourth – combat. One thing is for certain, without being able to beat up enemies, or die yourself, there isn’t too much of a game. I didn’t think it would take long to implement a bit of collision detection and basic attacking, and I was right about that, but I simply didn’t give myself that time. I frantically worked as fast as I could in the last few hours, and simply ran out of time. If I had one or two more hours, this game would have turned out significantly better. The only lesson to be learned here, is to finish all core mechanics before you polish anything, period.
Fifth – the upgrade system. As far as fun goes, this was going to be what really drove the game home. You’re in an arena that’s constantly evolving, and the only way to keep up with it’s dangers, is to venture outside of the safe room and collect credit orbs which can be spent to upgrade your own abilities. Upgrades were going to include time extensions, health, and more. The higher up in the arena you went (third section being the top), the better the credit orb rewards were to be. This was essentially what would make or break the game, and make it unique, but a lot more time was needed to implement this. I suspect I would have needed another four to eight hours to properly implement this, with graphics and all. I was okay with leaving this out, as it was considered extra if I had enough time from the beginning, but I do consider it a core component to the finished game’s design, and it’s unfortunate that I didn’t get to it.
All in all, this was the best Ludum Dare yet. During those 48 hours, I really learned what I’m capable of doing in a short amount of time, and it’s sure to change my work habits from here on out. I’m going to be much more into rapid prototyping, and less focused on neat, organized code that has to be perfect. I had an amazing time exploring areas of game development I normally don’t touch, and it was an absolute blast hanging out in the Ludum Dare IRC during breaks to discuss works in progress with others. As for the game, I’ve evolved upon the original idea, and plan on making it feature complete in the near future. In the end, I’d consider this Ludum Dare to be an absolute success, and I can’t wait until December for the next one.