Well - it's deadline time, and I wasn't able to scrape out the time to make the sword work the way I intended to. This is the final build of Dungeon, with a terrible name, and it's a stealth game.
What went well:
Doing my own art
I floundered a lot at first, but eventually managed to buckle down and just draw some things (and they're all fairly identifiable as the things I set out for them to be, so - success). This is something I'm going to continue doing for other projects in order to help myself grow - I don't know that I'll ever get good at art, but I can at least get decent enough that it won't slow me down.
At the start of the project, I was compiling and running using a shell script I'd cobbled together by hand. By the end, I had a nice Makefile I was using that could generate debug builds, package up release builds, and (assuming it was a mobile project) share builds to TestFlight for me to test. All of those tooling improvements continue to pay dividends as I work on more projects.
By working to make sure that play mode was almost always playable, I was able to easily cut down scope and trim things out when it became clear that I wouldn't have the time to get them in before my (arbitrarily defined) deadline. Even though this project took (much) longer than I expected it to, I ground it out and I finished it.
What didn't go well:
Poorly planned level editor
I didn't put a lot of thought into my level editor, and that began to show through the cracks fairly early on - I had designed it around editing a single level on the screen, without giving any thought to the overworld. This led to a structure that was fairly brittle to work with/around and probably cost me more hassle than it was worth - but by the time I realized it, I had already sunk enough time into working around it that I didn't want to go back. In hindsight I think I made the right decision in terms of just getting the project finished, but next time I build a level editor I'll definitely give more thought to how it integrates with the greater scope of the project.
Not enough thought about distribution
In some of the earlier builds, you can see there's a downloadable Dungeon.app as well as a rooms.xml file - and if you don't load room1.xml when you first start it up, Things Break. This was pure laziness on my part - that's how I built it for debugging, so that's how it was distributed. After thinking it over I realized that kind of sucked for distributing it, so I sat down and hacked out a good-enough level loader - but I think that could have gone a lot better if I'd given it more thought upfront.
Shoehorned Play Mode
The play mode was built right on top of the level editor, and both codepaths still exist within the app (although I don't think it's possible for you to build + play a new dungeon layout anymore because of the embedded levels); this caused problems because the level editor needed a lot less chrome than Play Mode did, and as a result I ended up punting on adding any chrome to Play Mode. It still works, and you still know when you have keys and things, but - that could have been handled better, if I'd been clearer about my plans for what Play Mode would look like upfront.
At first I did tile-based collision detection, which worked...okay. I ran into problems while I was filling in the enemy behaviors though; now that there were things on the screen that moved and didn't move tile-to-tile, none of my collision detection work made sense. I ended up having to rip out and replace it at the eleventh hour, which was a good learning exercise but would have been unnecessary if I'd done it right the first time. I'm going to give more thought to what's required in terms of collisions on the next project right at the start, so that I can avoid having to do that again.
I'm glad that this is finished and I was able to finish something and wrap it up in a way that's maybe not the most polished, but is complete. While I didn't do as much with the game as I wanted to - I still learned a lot, added techniques to my repertoire for the next project, and came out of this with a finished project that's completely self-contained and ready to be distributed. Overall, I'd say this was a good experience.
But I am pretty excited to work on the next project.