I Dream of Post-Mortems
Ludum Dare #30 was my fifth successful Ludum Dare, which brings me to a 50% success rate. Yay! Time for a post-mortem.
By the way, you can also play my game.
What went right
The engine. I wrote the engine in C++ this time, and took notes from an article called “Programming M. C. Kids” Iz-Tavares and Chang. The platformer physics turned out rather well, and the game feels responsive but not crazy. There was even enough time for some tricky shader effects, and I’m going to show those off in a GIF:
Core gameplay. Once the gameplay concept got to its final, simplified form, I could focus on implementing it and writing levels. The level format was just ASCII text, so I could crank them out pretty quickly, and I ended up with 9 levels.
Sound effects. Just a couple hours with a microphone (and some music software) were all it took. There are 13 sounds with an average of 5 variations each, and the engine picks a variation at random each time a sound is played. The effect is rather nice, especially for the footsteps.
Dialogue This was the last piece of code implemented, but it gives crucial context to the game. The writing isn’t great, but I’m really glad it’s there.
Analytics. I keep a record of every time a level is beaten or restarted, along with a couple other things. Here’s a chart of the statistics for each of the 9 levels. You can see that about 60% of the players who start the game finish it, and players who get to level 8 restart it 2.5 times, on average.
What went wrong
No tutorial. The game doesn’t exactly throw you into the deep end, but it does very little to tell you what you’re expected to do. This was painfully obvious once I watched someone else play the game. For everyone who played my game: thank you for taking the time to figure things out!
The worst part is the double jump. I was careful to make it so you could beat the game without the double jump, but there are some places where you have to restart if you don’t know about the double jump.
Slow start to the project. Looking at the commit logs, the game didn’t even respond to input until 16 hours into the contest, and jumping didn’t work until 21 hours had passed. I spent the time refactoring, messing with base code, and other things that don’t make games.
Not enough time on graphics and music. With only an hour and ten minutes left to go, I cranked out a music track and a bunch of sprites. I spent less than 10 minutes on music, and that’s including the time it took to start up the sequencer. I picked out two chords (Cm9 and Gm9), hit record, and rendered the result to disk without editing it at all. I even used the default patch you get when you start a new song!
Special thanks to Obsolete Entertainment, who put footage of gameplay for Dreamless on YouTube. In general, thanks to everyone who posts videos of the games they play!