Cooper 32 vs Doctor Dynamo Postmortem

Posted by (twitter: @rnlf_13)
April 22nd, 2015 8:53 am

TL;DR: I made a game and LMMS sucks.

So, this was my fifth Ludum Dare Compo in a row (and the fifth in total). As usual I had a great time and I am really impressed with what people can make in 48 hours. So much fun checking the blog regularly to see how people are progressing. Keep up the good work everybody! This is the postmortem of my game “Cooper 32 vs. Doctor Dynamo”, it became quite long, I hope there are people who like that.

Preparation

 

I really wanted to improve my art style and music this time, as those often seem to be the most difficult for me, and my results in these categories seem to confirm that.

So I really practiced making music and doing pixel art over the weeks before the competition, set up my tools, got to know them better. I evaluated several graphics editors, because I found GIMP not very suitable for pixel art anymore. It worked okay in the past, but it is not really geared towards this type of graphics style. So I tried GrafX2, Aseprite, and Pixra.

GrafX2 is a pretty neat editor, but it is lacking some features and the GUI shares its palette with the image, which can be a problem if you actually use all 256 colors it allows. It has lots of features, more than the other tools I tried, but I didn’t really get used to interface. Pixra is very bare bones and allows editing images really fast, if you know what you are doing and what the result is supposed to look like. Neither of these is true for me, so Pixra was not a good choice.

In the end I tried Aseprite, which has all the features I need. It does not only distinguish between image layers, but also image frames and allows to show the previous frame in a shine-through manner, which really helps with animations. Its interface is similar to that of GrafX2, but less “retro” in style and thus easier to learn for someone who missed the good old times. After editing the sprite as separate frames, it allows to merge them automatically into a spritesheet, which is really helpful.

There were two problems with Aseprite though: First, it had an enormous input lag on my development machine (a fact I only discovered on Friday evening a few hours before the compo) and when exporting a spritesheet, it doesn’t set the transparent color index correctly. The second problem is a rather minor one, as you can just open the spritesheet and change the transparent color index.

The input lag though, was very annoying, because it meant I couldn’t use the program at all: When moving the mouse across the window, it got slower and slower, it certainly looked like the input events were queuing up. So, I spent two weeks learning this tool and now it decides to misbehave on my other computer? I searched the Internet for a solution, tried newer version, all had the same problem. So I decided to debug the thing, and after just two or three hours of searching, I found the problem: They are using Allegro 4 for their interface, which only reads up to five (!!) input events per render frame, so if more than five events arrive at the program in one frame, they will queue up until it becomes really unusable. Now guess who bought a high resolution gaming mouse a few weeks ago.

I cranked the limit up to a few thousand events per second, et voilĂ , it worked. If you experience the same problem, just ask me and I’ll tell you how to fix it. I am preparing a patch for the Aseprite developers and hope to get it included in their code base.

So, this was solved and I could finally make sprites again.

It took me three days to get LMMS with Windows-VST support on 64-bit Linux working and I thought, hey, finally I can use one of those cool VST synthesizers like Synth1!

Yeah, it worked after reinstalling different versions of Wine and recompiling LMMS several times in the process and I was happy about that. More on this in the “What went wrong” section.

This all ended 4 hours prior to the competition, when I decided to finally go to bed in order to be fresh and well rested for the weekend. I tried not to think about the themes too much (I had forgotten most of the options in the final round anyway), so instead I couldn’t sleep because I wasn’t thinking about the tools and how to make a cool soundtrack for the game.

The Theme

The theme was one of the better ones that made it to the final round and also one of the few that I actually upvoted. I had no great Ideas for it anyhow, so I googled around for a while, until I remember that “conventional weapon” had something to do with “not a weapon of mass destruction”, so I googled “Conventional Weapon”, which confirmed it and thus I decided that “Not conventional” is close enough to “Unconventional” and make something about nukes. The rest of the idea followed quickly, so it became “A platformer where you play as a secret agent and have to nuke the secret base of the villain in an Austin Powers like setting”.

Making the Game and the Good Parts

I really spent less time on code this time than I usually do. In exchange, I spent almost half a day making the tileset (with which I am very happy, might not look like much to the more experienced pixel wizards around here, but it really was an achievement for me):

Tileset

The level layout took maybe eight hours or so (not counting entities, triggers and scripted events, which were all added later). Sometimes I thought “oh, this jump is pretty difficult to get right”, but on the other hand didn’t want to make it too easy. Rule of thumb: When you as the developer think that it is pretty difficult, it is probably “beyond hope” for other players. I carefully simplified some of the harder parts shortly before submitting, but I underestimated how hard the game really was.

I also made the very first walk cycle that actually looks like walking instead of “wiggling his legs in random directions” and since I decided to use just a relatively small, premade palette this time (Dawnbringer 32 Color Palette, thanks for suggesting it, person on #ludumdare, whose identity I forgot!), stuff looked way more coherent than my sprites and tiles usually do. I think I learned a lot about how colors have to work together during this LD and that the same absolute color can be perceived very differently, based on the colors around it. In this regard, this LD was a great benefit to me.

My code is a real mess this time, as I really focused on the visuals, but I didn’t care too much about that.

 

What went wrong?

As I wrote above, I wanted to use LMMS for the music. I had been warned by several people about that, but I thought usually the tools are not responsible when people make low quality stuff so I wanted to see this through. I should have listened. LMMS kept crashing without a warning, leaving the VST synth in a Limbo state (the process still ran perfectly fine in its wine environment). I was unable to load more than one VST at a time, could sometimes not add new bassline tracks and similar. All in all, it was horrible. I managed to come up with two tracks though, the first one being about 20 seconds long and thus really repetetive, the second one being much better but still crappy. In the game, once you place the nuke you have to back to the beginning while the timer of the nuke counts down. To increase the feeling of time pressure I wanted to add a break beat, fast piece of music to that part of the game. I succeeded in that, but besides that, the music only consists of a very simple double full note baseline played by a very unnerving bass synth, combined with some arpeggios thrown on top of this. As someone wrote here on ludumdare.com a few days before the compo: It’s still better than nothing.

The sound effects were not much more fun either. I used jfxr, which had served me well in the past. But today, my system tried to kill the experience for me: In Firefox it was unusably slow and Chromium kept crashing my ALSA subsystem, which meant I couldn’t hear any sounds in the game anymore. The only thing that helped was to shut down Chromium and wait a minute to get the system to clean itself magically up again. To the end, all sounds and music in the game sounded very distorted and I could only hope that that was a problem with my computer and not within the game code (it turned out to be true, phew).

Even though I am happy with the tileset and sprites, making them took way to much time, so that I had too little time to add all the tiny features I had planned in the beginning and had to stick with my placeholder lava sprites, which I intended to replace later when I made them). I also wanted to add some particle effects for the lava, footsteps, nuke fallout, lasers and similar stuff, but I totally ran out of time for that (even though it would probably only have taken two or three hours in total, I didn’t even have that anymore).

Anyway, I had a working game that was feature-complete for the biggest part, so I submitted it half an hour early.

postmortem

The Aftermath

Of course, I have missed a lot of problems in the game, that other people discovered very quickly for me. Also, things that are very clear in your own head, aren’t usually easy to understand for others. I had to explain how to reach the winning condition with the “good” ending several times, and especially the difficulty was way over the top. Others make difficult stuff on purpose, in my case it was more of an accident, and people notice such things. The jumps are impossible without hours of training, there were still too few checkpoints (which I added specifically to remedy the excessive difficulty), the guard had the annoying property of switching their viewing direction and immediately ring the alarm, which led some people to believe the visibility detection for the guards was wrong – in fact it is not, it’s just presented in an unfortunate way. And the in-game dialogs with the instructions were not always clear enough or simply insufficient. Those are things to keep in mind for the next time.

Someone complained about having to perfom to many “an heros” (a term I learned during this LD) for going to places you should not have gone.

People kept telling me the controls were pretty good and accurate (something people didn’t tend to say of my earlier platformer games, for good reasons).

I fixed most of the problems in my post compo release, which is still pretty hard, but in a manageable way: More waypoints, relaxed guards, better scripting in cases you enter a location from which you cannot finish the game anymore, … stuff like that. I hear people like the post compo version, so it was good spending some hours on that.

An Invitation

If you haven’t already, please consider playing and rating my game “Cooper 32 vs. Doctor Dynamo” and leave a comment! I have also recorded a timelapse which I will release tonight, so if you’re into such things, I’ll have something for you soon.

 

More Words

WordPress said there were 1968 words in this text, so I have to fill up the space to 2000. Yadda yadda. Beetlejuice, beetlejuice, beetlejuice. Ten, nine, eight, seven, six, five, four, oh…


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]