We did it again, folks! I’m buried in a mountain of great games, and figured I’d take a few minutes from trying to dig my way out to write up a post-mortem for my Ludum Dare 35 entry, Robot Escape.

This was my 5th Ludum Dare, and all-in-all I think things went pretty well. After finishing in time for the compo in LD34, I really wanted to do so again, but circumstances conspired against me this time around – oh well. I’ll explain in the “What went poorly” section.
What went well
- First and foremost, I had fun, and made something I’m pretty proud of.
- The core mechanics of the game – restricted lines of sight, and reconfiguring yourself to get around different obstacles – worked out really well, both on their own and together.
- I’m getting really comfortable with my Ludum Dare tool-chain. In the past I’ve always lost some time farting about with Unity’s quirks, but this time everything went pretty darn smoothly.
- In the same vein, a lot of what I spent time on in LD34 served me well as techniques I was able to reuse this time – in particular, I was able to just drop in the two-camera setup for an “authentic” retro feel I developed that time, and (as predicted) my level loader from that time around was clean enough to reuse – although my level-loading needs were a lot simpler this time around.
- I experimented with keeping my code a bit cleaner by having a lot of my entities be pure C#, with only a handful of MonoBehaviours responsible for interacting with Unity. I’m not sure I did it well enough to be a reusable approach, but for a game like this it worked really well.
What went poorly
- I started really late. I have the nasty flaw of being a gigging musician, and the band always seems to find ways to need my time during Ludum Dare. This time around, we were playing a gig out of town on Friday, so I completely missed the theme reveal and didn’t make it home until about 4am. I took a look at the theme as soon as I got home, but didn’t seriously start the clock, so to speak, until around 11am on Saturday. (The gig went really well – it’s only a “went poorly” item from a Ludum Dare perspective.)
- I lost another two hours to a power outage on Saturday evening. Thankfully, I didn’t lose any work as I’ve got a UPS for my computer. It wasn’t a total loss, however, as I took some time to do a bit of planning on pen and paper by candlelight.
- I didn’t get the controls right. This seems to be the biggest pain point people raise in the comments on the game, and I agree – I had planned to take some time to tweak them, at minimum, and ideally make them configurable, but I didn’t make it there before the deadline.
- I wanted more/tougher enemy types, but only had time for two. Similarly, it would have been nice to have a bit clearer feedback about when the enemies were firing on/hit the player.
- It took a concerning about of time for this game to actually be fun – any beginner’s guide to Ludum Dare tells you to make sure your core idea is fun as quickly as possible, but mine didn’t really get there until pretty late on Sunday.
A more detailed run down of the jam follows below the break – but if you don’t want to read that, why, you could always give the game a try and let me know what you think!
Saturday
Like I said, I didn’t get started until around 11am on Saturday. As always, I started with some time brainstorming around the theme, coming up with this mind-map:


The abandoned CGA look.
It took a long time to turn that into a more concrete idea for a game, and I spent about 7 hours between the brainstorming and coming up with a rough design. Before I actually got working in Unity, I took some time to mock up the basic screen layout and some idea of the sprite aesthetic. At this point, I was thinking of going for a 4-colour CGA-inspired graphics style, like I used in my first Ludum Dare entry, Smugglers!
Seeing this mockup made me abandon that idea, and I switched over to using a 16-colour “EGA” palette instead. For the rest of the weekend, I had the idea in the back of my mind that I could pretty easily implement both palettes, in an awesome nod to the games of the early 90s, but I never got around to it.

Saturday night – just a single-mechanic prototype, really.
Around 6:30pm, I actually got down to coding. Saturday was all about getting the line-of-sight mechanics in place – I implemented all the different sensors that ended up in the game, including the sprites and the code behind them. I think this was a big reason why my game didn’t end up “fun” until so late: I spent the whole first day polishing up one mechanic, and as a result didn’t get any sort of challenge – or win and lose conditions – implemented until well into the second day.
Also on Saturday, I implemented the level loader, and mocked up the UI. There was no navigation between levels, and barely any functionality tied to the UI, but having those in place early on made fleshing them out easier later on in the weekend. My last commit clocked in at 2:17am, wrapping up the day by adding the different sprites for the four sensors and making the UI show which one was active.
Sunday
I slept in way too late on Sunday, and didn’t get actually get down to being productive until around 11:30am. If I was smart, I would have moved right into adding the enemies and win and lose conditions – so naturally, that’s not what I did. Instead, I spent the first 6 or so hours of the day implementing the sprites and logic for the different chassis and tools, and the UI for configuring your bot. This was a bit of a gamble, as there was nothing for them to do at this point in development, but thankfully my design choices ended up being perfectly workable. By this point, it was abundantly clear that I wasn’t going to finish the game in time for the compo deadline, so I probably slacked a bit thinking I had a lot more time than I needed. That wasn’t really the case in the end.

Sunday night – actually a “game” by this point.
After that, I finally turned my focus on making what was, up until this point, just a prototype for a line of sight mechanic, into an actual game: I implemented the two enemy types, the basics of both enemy and player fire, and rudimentary win and lose conditions. At this point there was no hit point system, so getting hit by an enemy laser was an instant kill. My commit at 10:58pm says “Add enemies: this might almost be a game soon” – I kept working on enemies and the combat mechanics until 3:22am, and by that point the thing most certainly were a game, albeit a very small and buggy one.
At some point during Sunday I also took a short break to spend some time working on the music – I didn’t finish, but came up with a first draft of the music that ended up appearing in the finished game.
Monday
I started Monday feeling a little bit down about my prospects for finishing the game in time for the jam deadline. There was still a ton of things to do, and I didn’t get started until after 10am. Thankfully, I managed to get a lot of things done incredibly quickly. Roughly in order (timestamps are for the final commit in that area):
- Hit points for the player and enemies, and polished up projectiles – 12:29pm
- “Hearing” in the enemies, making the silent chassis have a point – 12:47pm
- Powerups to enable different parts – 3:07pm
- Navigation between different levels – 3:32pm
- Rubble, making the off-road chassis have a point – 3:48pm
- Status messages at bottom of the screen – 4:45pm
- Actuator and probe functionality, including door, switches and terminals – 5:36pm
- Sound and music – 8:17pm
- Win, lose and title screens – 8:17pm
- Game balance – 8:33pm
- Level design – 9:00pm
At some point in the day, I also axed the grid lines on-screen. I don’t remember exactly what inspired me to do that, but I think it’s a nice improvement in the visual style, and it was super easy to do: the lines were always just another image overlaid on top of all the sprites, so it was just a matter of turning that image off.

… and finally, the finished product!
Just like in the last Ludum Dare, this time around the very final minutes were a mad dash to design levels. I had put some thought in ahead of time to how the progression of levels was going to be structured, but (apart from level 1) they all were thrown together at the last minute. In fact, level 6 was designed – in its entirety – between 8:55 and 9:00pm.
At that point – well, at that point it was the jam deadline, so the game was as done as it was going to get. If you’ve made it this far, you’re obviously pretty interested in my little game, so why not go take a look at it for yourself? I’d love to know what you think!
Tags: 2D, final, jam, post-mortem, postmortem, unity