26th Ludum Dare - Postmortem

(This is a postmortem for the 26th Ludum Dare game programming competition. The theme was “minimalism” and I wrote an HTML5 game called “::.::::::..)

First things first: the ratings are in:

My entry was placed 60th overall (out of 1610) which is just fantastic!

The other rating categories:

#31  Mood
#54  Graphics
#60  Overall
#121 Theme
#142 Innovation
#190 Fun
#221 Audio
#444 Humor

This time around I focused on making a good game. Which seems a bit like a tautology, but for my first Ludum Dare I mainly focused on surviving the compo and didn’t care that much about the result.

So, this postmortem is different from the last one in that I’ll try to discuss the places where I think I succeeded in making a good game - and, of course, the places where I failed.


I used the tried and tested HTML5-canvas again, with the game code written in plain old JavaScript. This was a good choice, 48 hours are not enough time to really get into trouble with technical debt - so, the language doesn’t matter, and the programming style doesn’t matter.

What does matter though is that everyone is able to play the game, which is pretty much a given for non-WebGL HTML5 games. You can throw any modern browser at it and it will Just Work, regardless of the OS.

If it wasn’t for Firefox, that is. Firefox 10 (a pretty old version, the latest release is twenty-something) is my main browser, but it’s not usable for games:

Again, the Firefox I have here is old. My distro’s release cycle has just …well cycled some weeks ago and I’ll have a newer FF version for the next compo - maybe that fixes things.


::.::::::. looks much better than any game I have ever written before but it’s still quite a long way from looking great. I am, however, very pleased with the enemy health visualization:

The fish-eye camera effect was well-received, too. This “effect” falls out for free in a raycaster (normally, you would correct the view to avoid it, but I found that leaving it in made the game look more strange and interesting).

However, from playing some LD entries written by people who know what they are doing I found that I need to pay much more attention to visual consistency.

The game doesn’t run at the full resolution of the underlying canvas, but it’s very inconsistent about it: horizontally, “game-pixels” are 8 real pixels big but vertically, a game-pixel is the same as a real pixel. The game also has a limited resolution in the z-direction (the axis that goes “into” the screen) which is extremely unusual and a result of my KISS (here: “Keep It Super-Stupid”) raycaster implementation.

The inconsistency gets worse when shooting since the “focus” effect is a horizontal gradient at the full canvas resolution. Also, the text in the game uses a standard sans-serif font instead of something that makes (visually) sense in terms of the rest of the game’s graphics. This is an extremely big oversight on my part - the game uses a language with only 3 symbols (“.”, “:”, and “|”) - I easily could have drawn those by hand. In retrospect, I really don’t remember why I didn’t do that.

And then there are the colors - well, no, not good. I should have just gone to one of these color theme sites and select a reasonably good theme and be done with it. What I did, instead, was using the usual full-red, full-green, full-blue colors. I’m a bit blind to how ugly that is (not physically blind, only psychologically) - but it’s the first thing I thought when I started playing the other entries: “Oh shit, I fucked up the colors again, didn’t I?”. Yup.

These things seem small and unimportant but it’s exactly that what makes the difference between a polished, good-looking game and - well, the one I turned in. But even with all that I still have place 54 in the graphics category, so it seems that people didn’t mind that much.


The game doesn’t have that many gameplay mechanics, but that’s pretty much expected for a game written in 48 hours. Since “running around and shooting” is the main thing in the game, I focused on making that a fun thing to do.

The subtle things I think I did right:

What I should have done differently:

Things I’m not so sure about:

Apart from the obvious “shoot everything that moves” mechanic, there’s the level selection canvas which is a direct result of how the player played the game. Originally, I thought one would be able to draw pictures using this canvas but that turned out to be pretty much impossible - the enemies just move too fast and too randomly for the player to use them as a pen. So that “mechanic” turned out to be more of a gimmick. Which is okay, I think.


My last LD entry didn’t have sound, but for ::.::::::. I included some sound effects made with the great great great sfxr. And, by golly, did it make a difference! The sound effects are very simple but it’s still much more fun to play with sound. I didn’t expect that, to be honest.

Sfxr is basically a synthesizer but it’s tuned for sounds from the 16-bit-console era. I originally wanted some kind of a looping ragtime-melody as the background music but that turned out to be a) impossible to do with sfxr, and b) too much work to do with other tools. So, I just made some very simple “sine wave + phaser” sound and looped that. This transformed the game from a fun/silly shooter to a slightly frightening bad-trip like experience.

And that got me place 31 in the “mood” category. The power of sound, it’s really astonishing.

I’m pleased with the sound effects, except for the noise the gun makes. It’s a machine-gun like noise, which fits well to the jitter but doesn’t fit to the “shooting focus” gradient thing and the abstract look of the game world. I wanted it to have more like of a continuous “laser weapon” kind of sound, but everything I tried sounded weak and not-at-all dangerous.

The players weren’t that pleased with the sound effects, though - place 221 is pretty bad, considering how well the game did in the other categories. But it was my first game with sound, so that is only more motivation to do better next time.

Technically, the sound effects are small .wav files, using the HTML5 Audio object to load and play them. This worked great, no problems at all (at least on my machine). The machine-gun sound is the result of just hitting .play() every frame, which basically loops it (i.e. it doesn’t do anything if the sound is still playing). Obviously I don’t know if that worked for everyone, but it was a very easy-to-use API.


I’m quite pleased with ::.::::::.. It’s a small game, but it’s complete

I still have a lot to learn about game development but I think this LD was a step in the right direction. :-)

See Also

Previously: Overwriting Dynamically Linked Stuff

Next up: Colored Text in wmii's Status Bar

The machine thinks that the Web-Log entries 26th Ludum Dare - Postmortem, Purely Functional Games, and Ludum Dare Postmortem might be related to the topic so eloquently discussed above. The machine is sometimes right.