The Attack of the Crimson Plumber! – Ludum Dare 25

Continuing on my current trend of writing blog posts about a year late, let me tell you about my last Ludum Dare game!

One of these days, I will make a Ludum Dare game with an actual opponent. My Ludum Dare 25 game was no such achievement, but I ended up happier with it than my last one. The tight deadline led to some very satisfying late changes and workarounds, and only a few disastrous omissions.

It all started with a hideous tile system demo, of course.
It all started with a hideous tile system demo, of course.

The LD25 theme was “You are the villain.” I managed to come up with an idea reasonably quickly: the player needs to place traps in a side-scrolling platformer modelled after a Mario boss battle. As usual, that idea ballooned into something way more complicated than I could have handled in 48 or 72 hours. I had to do the hard part (editing!) while I made the thing. At its fullest, this would have demanded some fancy game mechanics to ensure the player doesn’t break the game and some fancy AI that can actually navigate traps. And then some even fancier AI that can navigate traps without being predictable or annoyingly capable.

Dreading all the decision-making around that, I doddled along for the first day and a half, mostly just fiddling with the base technology. I wanted some practice with HTML Canvas, so I grabbed the Dart SDK as well, since I thought that language looked pretty interesting. As might be expected, this was a really great combination — I barely had any trouble with it. Eventually, I came up with some rudimentary behaviour for the opponent, so it always walks ahead and jumps (or doesn’t jump) according to certain combinations of blocks in its path. The graphics looked bad and I felt somewhat relieved thinking that I just wasn’t going to bother subjecting anyone to this thing.

It got more complicated, and worse in just about every way.
It got more complicated, and worse in just about every way.

Then a friend convinced me to release it for some reason. What a jerk.

The painfully unreliable collision detection reminded me of those old handheld LCD games, so in the last few hours I changed most of the graphics to snap to a grid and I switched to a grey colour palette for the foreground, with a fixed coloured background. I also added a simple LCD ghosting effect, and I tinkered with buffers for some interesting effects.

I think it looks quite handsome, for about half an hour of work.

The rest of the game turned out more complicated than I had time for, so it all kind of falls apart if you look at it for more than a minute, but it was fun to explore Dart and HTML Canvas. I hadn’t used them before, and now that I’ve had some time to play around I feel really good about both of them. I hope I get to use them again some day! Next time, I’ll remember to implement timing code first.

That background gradient worked wonders.
That background gradient worked wonders.

If you want to play the game for some reason, it’s available on the web. It should work with any modern browser. The source is in a single .dart file (I mentioned it was terrible, right?), and all the rest is on the game’s entry page at

As always, other magical people made some amazing things. Here are some of my favourites:

  • Age of Umpires. Sort of reminds me of Konami Ice Hockey. Also, believe me: the referee mode is incredible.
  • Dance Man. This one is by Andrew Brown, my friend who did Baby Farm for LD23. Bizarre and yet brilliant, again, as usual.
  • Space Lord. Space invaders. Need I say more?