There has been a trend in the development of this game:
1. I encounter a problem.
2. It becomes obvious that there are two ways of solving the problem: quickly and messily, or cleanly and with more effort.
3. I solve the problem the easy way.
4. Time passes.
5. It becomes clear that I am going to need to re-implement the whole thing the hard way after all. I do, and the game becomes much better.
This happened with the screen-drawing system, the graphics-loading, particles, scrolling, parallax, and pretty much every other system the game has.
One thing that has loomed over me since the beginning was the likelihood that we would need a level editor. Now that most of our systems are in place, and it’s time to use them to create a demo level, this problem came scowling to the fore. Until now we’ve been building levels by typing some values in a text file, but one can only estimate and manually adjust numerical values so many times. We need a level editor, but to create one worth using, with drag-and-drop objects, asset libraries, layers, alignment, and all of that, would take about as long to create as the game itself. But wait: there is already a program that does all of those things, and quite a bit more: [OmniGraffle](http://www.omnigroup.com/applications/omnigraffle/). Not only that, but OmniGraffle’s file format is a standard property list, which can be parsed facilely in Python and manipulated just like any other data in the game. That means creating a Graffle-to-Soft-Landing converter was hilariously easy. Now we have a world-class level editor, almost for free. This is the true value of good software: it’s designed to do stuff its creators never even imagined.
Note that I’d be praising OmniGraffle even if I didn’t work for the company that makes it. :D