Xtreme Crop Duster Simulator ’82 – A Post-Mortem

Posted by (twitter: @rjhelms)
December 19th, 2015 6:41 pm

Congratulations on another great Ludum Dare, everybody. I’ve been having an absolute blast playing through the mountain of games.

I’ve never actually written a post-mortem for a Ludum Dare entry before, but figured that for my fourth go-around I probably should. As such, here is the post-mortem for my entry, Xtreme Crop Duster Simulator ’82.


As mentioned above, this is my fourth Ludum Dare entry (having previously participated in LD30-32, taking LD33 off due to a family commitment.) However, this was my first time making it in for the compo deadline. I used my usual tools – Unity/C#, etc – with the exception that I used Photoshop instead of GIMP this time around (as I finally shelled out for a subscription) and gave Chiptone a spin for sound effects, which worked very nicely.

What went well

  • I actually finished a game for the compo deadline, after 3 Ludum Dares failing over to the jam when I wasn’t ready by 9pm on Sunday.
  • Despite wringing my hands the whole weekend about what I thought was a dubious idea, looking back on it it’s a pretty good take on the theme.
  • I had a lot of success with the retro feel, bringing a lot more polish and sophistication to the emulation of an old system than I had achieved in the past.
  • Wrote my level loader in a way that should be reusable
  • Didn’t go insane, or become miserable from stress and sleep deprivation
  • Made something pretty fun
  • Learned to use SidTracker64, which is an awesome app I’ll certainly be coming back to.

What went poorly

  • The GitHub client crashed. A lot.
  • I didn’t reach all of my targets – I wanted 8 levels and at least 2 songs in the game, only achieved 5 levels and one (very short) song.
  • Some of the sprite work isn’t as nice as I’d like, especially a few of the airplane rotations.
  • Didn’t realize I was writing the game with controller support the whole time, so it’s not reflected in the in-game text.
  • After the compo, I had way more trouble porting to other platforms than I should have – the Mac port went fine, but WebGL never worked right and the Linux port took a lot more futzing with than it should have. It especially didn’t help that each test of a Linux build involved rebooting my machine – hours become an eternity when you’re groping blindly for a fix, rebooting constantly to test small, unsuccessful changes.

If you’re interested in a more detailed play-by-play of the weekend, it follows below the break. Otherwise, why not give the game a try and let me know what you think?


With the themes revealed, the first thing to do was some brainstorming – I typically use XMind for that, as it’s a good way to get ideas down in a quick and dirty fashion with some structure to it. The mind-map ended up looking like this:

With none of those ideas greatly appealing to me, by 11pm I had started in on the crop duster idea. I wasn’t thrilled about anything I had, but that was the best one on the list, so off I went. First thing was a single airplane sprite, and a controller to let it fly around – at this point, it just moved at a constant speed in the direction it was facing.

How things looked at the end of Friday night

I knew from the first that I was going to use a retro graphics style, as I had done in my previous LD entries Smugglers! and Red Threat, so started with a 4-colour CGA palette. One thing that left me dissatisfied about those two games is that they didn’t compensate for the non-square pixels of older systems, so I wanted to find a way to do that in Unity. I hacked together a dirty two-camera setup which came close, and left it for the night. After that, feeling limited by the 4-colour palette, I made the choice to go to a Commodore 64-style 16 colour palette, drew the 8 sprites for the different airplane angles, and called it a night. My last commit clocked in at 2:41 AM.

When I went to bed, I wasn’t thrilled about the idea for the game – I was fully prepared to wake up in the morning with a better idea, and scrap everything. That didn’t happen, as it turned out.


Saturday morning, I woke up around 10am feeling somewhat sleep-deprived, and got right down to work. The day was a real flurry of activity, so I’ll just summarize it in point-form:

  • Made improvements to the two-camera approach, allowing for pixel-perfect rendering of any in-game resolution and pixel aspect ratio. At this time I also put on the shader effects for CRT emulation, and the C64-style border around things.
  • Implemented the actual flight dynamics, with flying up slowing the plane down and flying down speeding it up.
  • Added behaviour for crop-dusting, takeoff, landing, and crashing – at that point, all of the basic game mechanics were in place.
  • Added the UI, such as it is.
  • (Re)implemented a level loader to load the stages from text files. I basically end up writing this same code from scratch every Ludum Dare, but I think this one is clean enough that I could package it up for easy reuse in the future.
  • Added a whole bunch of terrain sprites.
  • Added the other airplanes, with their “AI behaviour” of flying at a constant speed in a straight line.
  • Implemented the first three levels.
  • Added the sound effects (but no music at this point.)
  • On-going balance tweaks
  • Spent some time puttering around with music, but nothing came worth keeping.
End of Saturday night - looks a lot like the finished product.

End of Saturday night – looks a lot like the finished product.

Even at this point, I was having doubts about my idea, but feeling very good about the scope of what I’d taken on and my ability to complete it for the compo. In my past three tries at Ludum Dare, I’d aimed at the compo each time but taken on too much, so my games were only finished in time for the jam. This time, I put the project to bed for the night with a clear vision of what was required to finish, and a positive feeling that I would be able to finish in time for the 9pm deadline.

My final commit went in at 3:29AM, as I went to sleep with visions of the finished game in my head.


If Friday was a sprint, Saturday was a marathon, and Sunday was a mad dash. My band typically rehearses on Sundays for a few hours, and Ludum Dare weekend is no exception, so for most of the day I had that looming over my head – being away from the project for two hours in the final stretch of the compo was not something I looked forward to. On top of that, sleep deprivation started to catch up to me – while I aimed to be awake at 9 and get right down to work, I actually slept in to almost 11.

Thankfully, none of this was actually a problem, and while I didn’t feel good about my prospects when I left the house for the practice, taking the time off really let me focus on what was actually left and I came back with less than three hours to finish, but with confidence that I’d be able to do so.

The list of things I did on Sunday is a bit smaller, because I only had 10 hours to work less the two hours I was away. Before the rehearsal:

  • More balance tweaking: made some of the levels a bit easier, and made the landing a bit more forgiving.
  • Prepared the title, level clear, game over, and win screens, with all the control code to move between them. At this point, things were really a game!
  • Made some crappy music, just to get the logic to have it playing in place.
  • Realized that I had controller support the whole time, thanks to how I’d implemented the controls in Unity.

And after the rehearsal:

  • Actually wrote music I was happy with. I came across an iPad app called SidTracker64, which was easy enough to learn to use and fit the aesthetic perfectly, as it emulates the sound chip in a Commodore 64. I had aimed for at least two songs (one main theme, and another game-over theme) but ended up only having one.
  • Added two more levels – level 5 was actually made in the final 10 minutes of the compo.
  • Packaged it up and submitted it!

If you want to see what the game looked like at the end of Sunday, you’re in luck – it’s right here on the Ludum Dare website!

Tags: , , , ,

7 Responses to “Xtreme Crop Duster Simulator ’82 – A Post-Mortem”

  1. komjaur says:

    Github my favourite crashing simulator 😀

    • rjhelms says:

      It was insane. In the past, it’s been pretty reliable for me, but for some reason it was a nightmare all through the weekend. Lots of times, it would crash immediately on launch, and not stop doing that until I made a commit from the command line.

      I guess the moral of the story there is that I really should become more comfortable with using git directly, rather than relying on a dubious front end.

  2. jangdan says:

    Hey, Im not sure if its only me, but the Mac version keeps crashing after setting the display settings. Maybe you could take a look?

    • rjhelms says:

      Thanks for letting me know – unfortunately I don’t have a Mac, so have relied on other people to test that build for me. That makes troubleshooting any issues difficult unless they can reproduce them.

      The Unity player requires OS X 10.8 or higher, so that may be the issue – alternately, some of the shaders I’ve used were giving me grief in the Linux build, so it’s possible that there’s similar problems with the Mac one.

      One option I’m mulling for a post-compo version is having two graphics modes, with the lower one disabling all the shaders to support more hardware – alas, at this point I don’t know if I’ll have time to put that together before the end of the judging period.

  3. pkenney says:

    Thanks for the nice writeup! I’ve never used the Unity built-in shaders and I’m not familiar with the idea of using a 2-camera setup. Can you comment a bit more on those parts?

Leave a Reply

You must be logged in to post a comment.

[cache: storing page]