I just finished my first Ludum Dare competetion, and I wanted to take some time to reflect on the process. I’m going to describe my general thought process and state of mind at key points throughout the process. If I do this again I might make smaller blog posts along the way, but for this one I simply did not have the time.
When the last round of voting came up I took a look at the options. I saw a few that I liked, and came up with a few vague ideas that could be easily tweaked to fit a variety of themes. I was at the gym on Friday when the theme was announced. I had my phone sitting in front of me on the treadmill just waiting for the clock to tick over. When it did I was confused, I saw 10 seconds and immediately thought it was a delay or something related to the timer. After I finished my run and hit refresh a few times it clicked. My concept for 10 seconds also included space and replication, so as I got in the car to head home, I started tweaking the idea to emphasis the selected theme, and iron out some details.
I tend to over design things. It’s a problem I have always had, and knowing this I probably should not have given myself so much time to work on design without any code, but when I got home I drew up some character prototypes in photoshop, sketched out a basic map and then went out to eat dinner. 48 hours of uninterrupted time is hard to come by when you are married, so I talked about the contest and what exactly it would entail with my wife over dinner. My wife is not a gamer, but I pitched her my idea anyway, and the artistic aspects of it appealed to her, so I felt confident. The issue was that at that point my design was far more than I could code in the time I had remaining. It was obvious to her, but I’ve always been a bit cocky about my coding speed.
After dinner I set to work. I sketched up a basic map, ironed out the gameplay details and set to rewriting the boilerplate code that I needed to get it up and running. I used LibGDX as my engine, and I while I’ve made a number of prototypes in it, this was my first attempt to actual release something with it. I realized about half way through the setup that I had no idea how to build or release this project. Those were problems for later, I had a lot of code to write. I was up until about 1:00 am working on it, and I ended the day pretty satisfied with my progress. Nothing was actually playable, but my data was all structured, I had my code organized and ready for the coming barrage. I’m glad I did that, because towards the end my adherence to standards started to dwindle and without that solid base it would have turned into mush.
Saturday was a blur. I wrote more code than was healthy. I had coffee for breakfast and didn’t eat lunch. This was a bad idea as my body started complaining at around hour 12. I had the character moving, most of the graphics were done, the map file was coming together, I was in the zone. At one point I read the same line in the data file three time looking for something that wasn’t even in that file and I decided a break was in order. My wife welcomed my return to the real world for a few hours to eat dinner. We ordered a pizza and threw some X-Files on the netflix. A quick aside, “First Person Shooter” may be the worst X-Files episode ever made.
After that I dove head first back into the code. There were still gameplay actions not coded, only half of the items were in, and I hadn’t fully designed the map. There was a lot to be done, and looking at what I had I wondered where the time had gone. Surely this wasn’t the best I could produce in 12 hours. It was mostly data management and rendering code. Probably my worst decision was to not use Tiled to do my maps. I cracked open a hex editor and got down and dirty with the bits. It worked and I’ve done it before so it wasn’t hard, for the map data it was just fine, but for the rest it was a bit of a mess. I was hand counting byte offsets and doing hex conversions in my head, not the most efficient way to make a good design. I switched to using Tiled just to map out how I wanted it to look, but I was too deep into that format to change.
Towards the end of the night I was losing focus. I couldn’t concentrate, it took me 20 minutes to add one item to the map. No sweat, I’ll do something easier, and the map still needs to be fully designed. After a long, painful hour of drawing in tiled I had finished my map design. It was untested, I didn’t know if players would be able to make the runs necessary within the time allotted, but I was done. Sleep did not come easy, my head was still reeling with what I had left to do, but eventually I drifted out. I woke up to my dogs going crazy about something stupid, what I’ll never know, but the damage was done, and hey, I had an extra hour to work I wasn’t counting on.
As the morning went on, the pieces started to fall into place. One after another, things were getting to a release-ready status. Yeah, some of the newer methods had comment like “This is the method that handles telekinesis” and my controller that was originally only supposed to handle the 10 second run phases had ballooned to handling the entire game, but hey, it was working. About two hours before the deadline I had it playable. Start to finish, you could beat the game, as intended. With the last two hours I added a splash screen, main menu and ending screen, as well as figured out how to put sound effects into the game. I have to hand it to the guys at bad logic, their sound library is incredibly easy to use. In the end, a game was made, I had fun, and I took a break to play with my dogs and talk to my wife.
There are a few pieces missing. No background music, the sound effects are obviously tacked on, and I forgot to change the logo on window. The flavor text indexes are off, another issue with using a hex editor, and I didn’t get to add the other humans to the beds throughout the ship. Even with all of that, I’m pretty pleased with how the game came out. If I do this again in the future, there are a few things I know now not to do, but I think for my first time doing the dare, it went pretty well.
You can find the ludum dare entry page here.