It’s been more than a day since the end of my first ever participation in the 48 hour Ludum Dare competition, and it’s time to take a retrospective look at what I did. The goal here is to spot where I made mistakes, where I did well, and what I can do differently in the future.
Let me start off by saying that I’m already very proud of how well I did. This not only is the first ludum dare I’ve done and completed, it’s also the first non-trivial game project I’ve undertaken and completed. That being said, there’s still plenty of room for improvement. Let’s see what happened after the bump…
What Happened
I started off this competition hatching out a lot of ideas in my notebook within the first few hours:
- Dwarf Mage Mind Control
- Bomberman Spinoff
- Sumo Vs. World
- World Domination (Political)
The astute reader will note that my game idea is nowhere on there. What I ended up doing after I came up with that set, though, was ruled out ones I thought were too ambitious, or too uncreative, and revised some that sounded too generic. So Dwarf Mage Mind Control became Trance Cat, and the rest were ruled out, mostly due to overambition.
I was planning on referencing Futurama’s Hypnotoad by modeling the main character of the game after it. I quickly switched gears however, for a different idea. I wanted to insert some social commentary into the game by unsubtly using memes as the actual weapons of the game, and how memes would affect the enemies by turning them into enemies of your enemies. Thus, trance cat became lolcat.
At this point, I had the basics of my game idea down. Everyone loves lolcats, I said, and these memes are also quite hilarious. The enemies would be zombies of various schools of thought, (an oh so subtle commentary here,) who are placated by “lolisms” and other cute or funny moves that my cat would spout or perform, and would subsequently fight to protect their beloved lolcat. This was going to be a game about survival. If you beat the clock counting down from ten minutes, then you won. There was also to be an unlimited mode, where you just lasted as long as you could. As you played, the music would get faster and faster until it reached a nearly incomprehensible tempo, hopefully ratcheting up the tension as the enemies came at you faster and more often.
So I began work on the first day, a mere 2 hours in, everything sketched out on my notebook or my whiteboard. (Sorry for the lack of pictures, I have no camera.) My first task was to make sprites for the cat. To do this, I decided to look for some rotoscoped cat animations and reference them in my sprite creation. For this purpose, I found this little gem that was most helpful. You might even recognize it if you’ve played my game and I did well enough in drawing.
I think in retrospect that this was the first mistake I made, even if I still wonder what would have become of “trance cat” a la Hypnotoad. I spent over half of my first day just getting the animations of my main character down. After that, I realized far ahead of my scheduled time that I would have to make feature cuts due to the amount of time left. I cut the number of attacks or moves that lolcat could do from 6 down to 1. I cut the number of types of enemies from 6 down to 1.
Now I began setting up the code to make all this work, and by the end of the day I had a fairly reasonable beginning, and I was confident that I could still finish this. Happy at this point, I slept.
When I awoke, I decided to get to work generating the attacks for lolcat’s “lolisms” that he would spout, his only surviving attack from the original 6. I generated 42 different known memes, meta-memes, or silly self-references in the form of words that would appear over the lolcat when he attacks. This was my second mistake, in my mind. I spent way too much time doing this, (probably about 3-4 hours), and even researched memes a bit when necessary from knowyourmeme. “Cheat! Charlatan!” you say, well, you may be right.
Now, armed with the attacks, I could finally have some integration in my game between the NPCs and the main character. I got the zombie placating working, and began to circulate my first “playable” build. This is when the “Oh god the shit has hit the fan” realization moment began to happen. I hadn’t even begun to work on the game logic like winning and losing and even just making it fun, and we’re well into the second day.
To make things worse, the consensus was that the lolcat’s attacks were not having the effect that I had originally hoped. A sharp player (MikeP from gamedev.net) noted that while these memes and such were funny, it was usually because they were in context, with an accompanying image, music, or some other media. He was totally right. Here I am thinking that just referencing the memes was funny, and my lolcat just looks like an idiot for it. Another smart playtester (Sargon, also from gamedev.net) noted that it would be funnier if the zombies went flying off after I attacked them, and collided with each other on the way. The message was loud and clear. The way it was now was too boring, and there was little time left for very radical ideas.
So things had to change, and fast. There was just one problem. Actually, I lied, there were two problems. I still had to sleep soon, and I also had to do a few hours of Real Life Work after that. This was midway through the second day, so this left me about two hours to complete my game.
Things were not looking very peachy.
After I got back from work, I entered a frenzy the likes of which would make a salty sailor gape in awe. I had even less time than I had hoped, just about an hour and 40 minutes.
In this time I altered my plan; I decided to leave music until the very end, and focused on getting the enemy vs. enemy collision working first.
This was relatively easily done, considering that I was at this point writing desperate brute-force hacks at lightning speed.
10 minutes later I had them simply canceling each other out instead of flying off all happy-faced and awesomely. This will have to do.
I moved on.
Now I had to have a new attack. I settled on something simple, and quickly drew up a little blood spouting out sideways.
It looked like I had used MS Paint.
I motion blurred each frame, made it work, and moved on.
I had 15 minutes left.
I quickly hacked up an endgame scenario. A “You died” screen. I began to construct a notification of how long you lasted, and then…
Time’s up!
It was over. I was done. You couldn’t win, but you could lose, and that would have to be all.
I built my port with py2exe, submitted my build and source, and realized that in my last test of the end-game screen, the notification of how long you lasted hadn’t even showed up. I’d messed up.
Too late now.
The Aftermath Inspection
I think that I made 2 key mistakes here. The first of which was spending an insane amount of time on doing the animation of the cat. It looks great, except for animation problems, (and a duplicating sprite bug that I wasn’t able to track down before time ran out), but there was no real reason that it needed to be so detailed.
The second problem was spending so much time on an ineffective attack, generating a bunch of images that I didn’t even use. There’s just no real reason to spend so much time on any one thing in a competition like this.
These mistakes cost me precious bugfixing and polish time later on down the line, and in reality then were at least a double-whammy, especially if they were cut.
I’m sure I made other mistakes. I suspect that my idea was not funny enough. This will have to be worked on by improving my funny bone, or brainstorming process, or both. I also don’t like now that I’d not had much of a base of code to work from, but this can easily be fixed over the coming months.
Speaking of Fixes…
So what can I do next time, to do much better than I did this time?
I’ve decided to do the following:
- Build a Good Foundation
- Keep It Simple, Stupid!
- Practice Concurrent Time Management
In order to build a good foundation, I’m going to have to spend time between competitions polishing my existing code base, making it extensible, reusable, and of course free to use by others before the competition.
In order to keep things simple, I’m going to have to not go overboard in my planning stages. Deciding to try and capture the live movement of an animal by drawing each frame agonizingly in too much detail is murder on time. Having quantity over quality is a time killer, and makes for a shoddy product as well.
In a previous post made before the competition started, I laid out a sort of time-frame for working during the competition, compartmentalizing designing, working, analysis, fixing, and polishing.
Things didn’t happen even close to that after the first design then work stage, and the second day beginning analysis stage. I quickly found out that after I did something really stupid, I had to react immediately, and not just wait till the next analysis stage and plod along meanwhile as if everything was hunky dory. In this spirit then, I’ve decided that while some of it was good for the initial planning and second day broad analysis, I’m going to try and do more concurrent time management, or at least fake that by having more micro-cycles of design, implement, polish. In these micro-cycles, I’m going to have to keep one eye on the big picture as well.
The Big Picture
Even after all this, I feel like I’ve won simply because of what I’ve learned, and the improvement steps that I will have to take before the next competition. The feedback I get now is just cake on top, even if they quite rightly call my game a hunk of shit. I’m enjoying playing other peoples’ games, and leaving some notes on my experience too, as that is broadening my horizons with regard to game design; This is altogether unexpected, but not unwelcome.
If you’ve made it this far down, congratulations, and I hope that you got some use out of what is a personal analysis for yourself. Thanks for reading!
-AndrewBC
P.S – Leave a comment if you have some useful tips, observations, rants, or some cookies for me!