Ludum Dare 45

I made a game for Ludum Dare 45 last weekend. This is the direct link to play it right now, in your browser. The theme was “Start With Nothing”. I was resistant to that theme at first, I still think it’s a bad theme, but this is kind of traditional with Ludum Dare. You’re supposed to hate the theme. Theoretically they are chosen by your peers. I voted on themes in all the voting rounds. I voted against this one. It won anyway. There are lots of fun conspiracy theories. Ultimately it doesn’t matter. You can do what you want. Only one voting category is “theme”, but people will ding you for not following it.

I made a physics spaceship game. Two of my favorite things. I snarkily named it “Star Twit: H. Nothing” where H. is for Hubert. I kind of thought there would be more people who made that exact same joke, but I haven’t seen another yet. Despite that sarcasm, I did actually embrace the theme. On each level, of which there are six, your spaceship starts with exactly zero parts. You pick up some subset of them and then have to solve the level. I am pretty happy with how it turned out.

Things that went well:

  • I wrote it in TypeScript. TypeScript is Microsoft’s embrace-and-extend of JavaScript. Embrace-and-extend has been held up as an example of Microsoft’s evilness, but in this case, JavaScript is a terrible language and TypeScript makes it almost acceptable. I found it to be an excellent compromise. I wanted my game to run in browsers, without distancing myself completely from my target environment (as Unity’s WebGL build target does) but with a real modern IDE to work in. VSCode and TypeScript fit this bill.
  • Pixi.js is the underlying JavaScript graphics API I chose. There are TypeScript bindings for it, as there are for many popular JavaScript packages. It is nice and easy to use and performed well.
  • The TypeScript port of Box2D was also key to making this work. It’s amazing how well it actually runs.
  • TypeScript + WebPack + VSCode + Chrome Debugger extension means my environment works like all the strongly typed environments I’m used to, and also reloads my game in a couple of seconds as I save changes. This was GREAT.
  • I wrote an ECS setup in my starter project, and it played well with TypeScript. I had skepticism about starting with a kind of complex engine architecture (albeit one I’m very familiar with) in a language I didn’t know a lot about.

Things that didn’t go so well:

  • I’m getting consistently dinged on sound design. I agree, it’s terrible. It’s all just random sounds from bfxr and it sounds like a 1979 Atari at best. If I want to do better in ratings in future Ludum Dares, I need to up my game here.
  • People complain about the controls. It’s kind of deliberate, I really, really like the one level where you can only turn your ship and nothing else. But it’s all physics based and making the ship control nicely the rest of the game broke this level badly. As a 10 minute Ludum Dare game I’m ok with this, but if it was a real full length game, it would not be acceptable.
  • Spent a lot of time struggling with syncing physics and visuals and controls. The final result is that the camera is actually a little bit off-center and a few people have noticed. If I do another one of these on the same tech stack, I need to spend more time reconciling this before the jam starts. There’s a lot of hacky code I’m not proud of to make things work well enough, but not well.

This is the second Ludum Dare I’ve done. The first was Ludum Dare 35 in 2016, in which I made Spaceshift and apparently never even posted it to this blog. I had been thinking it was the last thing I had posted all these years. I really enjoyed doing this one, and I’m going to try to make it a habit. The next one is in April 2020. Maybe I’ll even make another blog post between then and now? No promises.

Sunday, October 13th, 2019 Uncategorized

Leave a Reply