Blood pumping, heart racing, I can almost smell the pixels in the air
A few days ago, I finally finally started working on the AdventureFar code again, instead of monkeying around with tools. For the record: I completed one large tool (to assist in plot development) and one minor tool (to assist in tile art) both that I'll release next week for free, and two or three really minor tools that are in-house only, and I was sidetracked on a code library and two related tools (one medium and one small) that I forced myself to axe, despite coming out well, because I couldn't go any longer without working on AdventureFar.
It feels really good to be back. The AdventureFar code base is really clean and well organized, and is a real pleasure to work with, unlike the tools I rushed together that in the end I have to fight against to get working.
I've mentioned on the forums in past that while working on AdventureFar I separate the code into three separate categories as I go:
- Common (General code, not game-specific. A little API-specific stuff in subfolders (Like 'Common/SFML', and 'Common/Qt'), but mostly standard library based.
- Engine (Game genre specific. Generic 2D tile-based RPG code. Displaying maps, handling gamestates, collision, scripting, saving and loading, general application flow (the main loop), etc...)
- Game (Game specific. Game states will go in here. Right now there is only one, but others will be added. Any other game specific stuff will go in here... but ideally most game-specific stuff will be loaded by Engine from external resources such as scripts and config files)
Before I left it, when merging the Editor with the game, I created a fourth category: Editor. However, yesterday I decided to merge Editor with the Engine category since they were too tightly-coupled. Engine code needs to know about Editor to launch the Editor, and because Engine controls the main window which Editor is embedded into, and Editor needs to be based on Engine to have read/write access to the world data and tile caches which Engine manages. Also, since Editor is only a dozen files or so, it doesn't overly bloat Engine for it to be added.
It feels really good (I can't stress it enough), to work on a clean codebase. Especially a clean codebase that I made myself! A first for me.
Also, since I haven't worked on the game for about 5 or 6 months, or however long it's been, some of the libraries I was using have been updated. So the first thing I did was migrate over to the newest versions of all the libraries I was using. A relatively harmless transition, because as minor-version updates, they mostly stayed source-compatible.
Once I get the editor fully implemented, I want to try compiling my code using the new C++11 standard, and migrate to that. I believe the new standard greatly helps maintain clean codebases, what with things like the range-for statement, strongly typed enums, and most importantly (to me) in-class member initialization.
Libraries used in AdventureFar:
- SFML 1.6
- Qt 4.8 (Moved from 4.7)
- Lua 5.2 (Moved from 5.1)
- Boost 1.48.0 (Moved from 1.45 or something)
AdventureFar was original using SFML, Lua, and Boost, but the Editor uses Qt. When I decided to integrate the editor into the game itself, it meant I had to include those that library as an additional dependency. I could use Qt to replace SFML... and was actually starting to do that, but I decided SFML would actually help with development speed, so I kept both APIs and made them work together. I currently have a Qt main window, with Qt editor panels that can be toggled on and off around the sides, with an embedded SFML graphical window managed by Qt in the center. Weird, but functional.
I got an interesting and unexpected business offer yesterday, and if I accept it, it may slow down development - but it'd only be part time on the side, so it wont stop development, only slow it - and hopefully not by much.
Currently I'm working on cleaning and refactoring the codebase further, as well as getting the non-working editor fully integrated. I also have identified a few new features I need to add to map files before I lock the format inplace and go crazy making the world.
I have my older brother reviewing some new plot material, and reworking it.
My friend, a composer, recently contacted me requesting I send him a new list of songs needed for the game, because "I'm almost finished with the first list you sent me"... A year and a half ago I sent him a list of 20 or 30 'possible song ideas' that 'You can make as few or as many as you like, just do whatever interests you' (since he offered his services for free as a way to hone his skills).
I'm surprised, and thankful, that he's stuck with me for almost a year and half now, while I continually mis-estimate my progress milestones on the game time and time again. I'm even more surprised that he's "almost done with the list" - the list of song suggestions such as "White forest", "Dark dungeon", "Old swamp", "Battle Song #3" (seriously), and equally spontaneous and non-descriptive songs. I forgot I even sent him a list, it was so long ago. That guy has patience!
His works are really good too, those of them that I've heard already, and he gets better and better with each song. I can't wait to see what new works he has come up with. If he's reading this (which he isn't): Thank you! You have more patience for me than I have for myself.
Here's some new art I made:
I am really excited for AdventureFar, and my blood is pumping again. Accidentally trapping myself into taking several months off to work on tools has really increased my longing to work on the game itself.