As many of you will know, hot weather and software development do not go together. The last few weeks have seen temperatures in Britain hit the high 90s, which wouldn't be so bad if I had air conditioning. Suffice to say, my productivity hasn't been as high as I'd like it. Still, at least I have a mild sun-tan.
Here's what's been cooking (almost literally) over the last few weeks:
Flexible Resource System
So far this has turned out to be a huge time saver. Instead of altering code every time a new resource should be loaded, the application will scan the resource directory and load resources as required.
The current system uses XML to define which resources should be loaded. XML makes the whole system nice and flexible, and it's easy to read and modify. Every resource used by the game can be loaded using this system, and each resource file has a namespace to avoid naming collisions.
Future improvements will add a "load on demand" system and a resource cache to help lower memory consumption.
The standard Blitz debugging system is somewhat lacking. It does the trick if you're running your program from the IDE, but once it's in the wild it's useless. Naturally, I had to write my own system.
The logging component is quite simple, uses XML for storage and XSL to make it look pretty. It's not particularly powerful, but it's useful for getting system information and tracking function execution times. So far it's saved me from a few problems, and helped me to smooth down a couple of time consuming functions, so it's powerful enough.
I created a Doom style console that allows the user to manipulate game objects using a command line. It can also display internal information that can be useful for debugging purposes. It's the sort of component that isn't vital, but is super handy when it's there. Just the ability to spawn objects manually is worth the time it took to create.
An Object / Entity System
This is easily the most time consuming thing I've worked on, and it's also the most complex and frustrating. It's still not finished, but it's usable.
The main idea is to have a "pluggable" object that will be given different behaviours. At the moment, each object is made up of States, and each State is made up of Triggers. These triggers fire "Actions" when they are activated. For example, a treasure chest would have two states ("Opened" and "Closed"). A chest with the "Closed" state would have an "onInspect" trigger, which would run several actions when the character inspected it. These actions could include giving an item to the character, as well as playing sounds, animations and changing the state of the chest to "Opened".
BlitzPlus doesn't support true Object Orientation, so the whole system has been a bit of a battle. I've been using the "Blitz Virtual Machine" to script behaviour, and it's working nicely so far.
Some Flexible Tools
To save time, I created an automatic build script that will build resources using a simple script. At the moment it's a series of batch files and smaller tools, but I've started writing a Blitz builder that's loosely based on nAnt.
The Blitz Builder uses an XML script to build the application and its resources, and each script can have various configurations. It's quite simple at the moment, but it's being built in a flexible way so new commands can be added easily using plugins. It also has much better output, so the full build process can be built and timed. No prizes for guessing what file format the output logs use…
Other Bits and Pieces
Other tasks I've been working on include designing a nice website for the project, trying out various project management tools and cleaning up some of my code libraries so they can be released at a later date.