Spacefight is done - even though there's maybe still some better art on the way, it's as feature complete as I'd like it to be in order for me to wrap it up and move on to other projects. Time to think about it!
What went well:
Doing my own art
I'm still focused on doing my own art until I hit the point where something is done and I'd like to see about getting better art - that worked out well this time. I'm getting faster at making art, and because of the space setting I didn't need to spend a lot of time on backgrounds or making anything super intricate. I spent a little more time than I should have on some of it, but I'm counting that as skills practice. Overall I'm pretty happy with how my art turned out for this - even if my new art doesn't come through, I'm fine with wrapping this up as-is.
Automated tooling
I know I called this out in my last postmortem as well, but staying focused on automating and keeping my builds as simple as possible has continued to pay dividends. This was the first project where I generated a build for Windows, so I got to spend some time setting up a VM and making my Makefile cross-platform. I can generate a build on OS X or Windows (under Powershell) by just getting to the project directory and running `make package`, which has been pretty great. There are still some kinks to work out when it comes to packaging up the files and getting them onto Dropbox, but overall the process is fast and pretty efficient.
Controller support
This was my first game that supported a controller - I started out using KeyActionBinder, but ran into problems with it not recognizing the Logitech F-310 under OS X. That was a snag, and I ended up having to sit down and bang out my own simple controller class, but overall it worked out - I now have a small library that gives me good support for the PS3/4 controller, Xbox 360/One controller, and the F-310 on OS X and windows (or at least, the windows machine I tested on). I'm looking forward to being able to use this to give myself a headstart on my next project that involves a controller.
Music
Adding music to the game made it feel a lot more real, and only took maybe half an hour of searching Incompetech's royalty free section. There's a huge collection of music available there, and it's still growing - I'll definitely be using it on my next project as well. Bfxr was also great for getting good sound effects I could move forward with quickly - they also made the game sound a lot more like a real game, vs. just being a silent experience.
Trimming down screens
When I circled back to polish the UI, I also realized that certain screens didn't need to exist - so I removed them. Not only was that a good opportunity to remove some code - it also made the screens flow better in general, because there aren't any screens that aren't 100% necessary now. This is something that I'm going to be doing with everything else I make too, because the streamlined experience feels a lot better.
What didn't go so well:
Scope control
I ended up having to cut out a lot of what I had planned for Spacefight in order to get it finished before I ran out of attention to spend on it. I rationalized it by saying "I can put that in spacefight 2" (and if I ever make that, I will) - but I definitely had a much much larger scope planned than what I ended up finishing with. If I'd honed my scope a little better going in, I think I wouldn't have felt quite so overwhelmed in the early stages.
Time management
Spacefight was supposed to take three months, and if I'd focused on it and given it the time it needed - it probably would have (albeit at the reduced scope I mentioned earlier). Instead if took something closer to 9 months because I got distracted by other things a lot - I'm not super choked up about this, but I think I could have enjoyed both building Spacefight and the fun distractions a little more if I had just buckled down and finished the job a little faster vs. letting it languish.
Idea too complex
"Local multiplayer split screen space dogfighting game" is how I described Spacefight when I first sat down to plan it out; that's a lot of adjectives that each need implementation time. I'd never done local multiplayer, split screen, or dogfighting - which meant that instead of being able to focus in on one small mechanic and hone it into something super polished, I had to spend time learning and implementing all of the supporting systems (like controller support). While overall the code is a net gain because I can use it for other projects, this definitely blew out the implementation time because before I could build a space game, I needed to first invent the universe.
Closing thoughts
Overall I'm pretty happy with how Spacefight turned out - this project taught me that the budget I need to manage on the things I'm building is made of attention, not money. Going forward I'd like to experiment with focusing on smaller, more polished games with a little less complexity - but we'll see how that goes in practice.