I seem to be taking a hell of a lot of development time adding systems and editor tools that let me create data, but it's all for a specific purpose. That being to speed up development of new features. As a side benefit, these features tend to enable the game to be more data driven. Which in turn means one major upside - mod support!
This week I've been writing something that has been needed for a while now. That is the ability to load and save the databases that drive the game. Its kind of hard to explain, but Unity basically doesn't like mods. Instead is tends to want to pre-package everything into a file and then just have an exe that "plays" that set of data.
But I don't really like the idea of a monolithic codebase where everthing is fixed and can't be updated. For the most part I would prefer it if players could add new items or at least fiddle with what already exists. Which is why moving to more data-driven systems tends to help. So most of the development effort this week has been on extending the editors I wrote previously to allow saving and loading of data from human readable json text files.
This is a really useful bit of work, not least because I managed to figure out some new C# methods and extended the core code with features like json serialization. It also paves the way for some more editor tools, which theoretically could be used by anyone with Unity to edit data for the game (although I think it'd probably be as easy to write an editor using winforms and C#).
What this all means, is that Items, Inventories, Recipes (containers with a required inventory and a output inventory) and other data-driven classes now can be stored to external data files. Which is good news in terms of data security for when I add the 1000's of new recipes I plan on featuring in the game.
You can probably tell by the screenshot above that I haven't had time to really test out these changes with huge amounts of data yet. But they work well enough to continue with other code.
The other thing I've been working on this week comes from the features (trading in particular) that were worked on last week. I noticed there was some slowdown when switching potential trade partner. I only have access to Unity pro a few days a week (while I work with a particular company) so I didn't get the chance until recently to profile what was wrong with the feature. It was taking a while to refresh the UI and I thought I'd isolated where it might be slowing. Turns out it was an issue with a bunch of debug logging I'd added when I'd first worked on the system. Long story short it was allocating memory during the debugging and that was causing an error with the garbage collector.
I'm just about to add some extra touches to the recipe database editor that struck me while I was working on this weeks tools. In that I didn't have any progression through the recipes. So very shortly I'll have a way of restricting what type of recipes can be crafted and at which "level" the machine used for crafting them is. So essentially you'll have to upgrade crafting facilities (most recipes require a specific machine or cooking appliance) to craft more exotic goods. Hopefully next week I'll show you crafting food (using a barbeque or other type of cooking appliance), smelting metal to create refined metal, combining blueprints and components to craft a simple device etc.
I also plan on introducing the communications functionality. That is, how you learn about other rigs and generate potential trading partners as well as how to recruit newcomers into your community.