Improvements under the hood

Apr, 14

Many changes have happened in KeeperRL land in the last few weeks. Most of them were in the game’s internals, so they may not be very interesting to you, but they are important for development. I treat KeeperRL as a very long term project, so I spend a lot of time trying to improve its internal architecture. Badly written code, much like a messy bedroom, decreases your morale, and causes you to trip over things as you’re trying to reach your goal. Not to mention bugs!

In this spirit I spent a whole week switching to a new serialization library, which is the backbone of the saving and loading system. The new one, Cereal is more modern than Boost serialization, and easier to use on multiple platforms. As it turned out, it also decreased saving and loading times about two to three times, and reduced save file size almost twice!

This encouraged me to do some cleaning and remove a few obsolete classes from the code. Traps, torches, and portals are now regular Furniture, much like all other static things on the map. This was an opportunity to rework portals a little bit, to make them more useful. From now on they will be constructed by imps, and will not time out. You will use them actively, just like stairs. I think that in such form they will be a great addition to the dungeon. Unfortunately, teaching the AI to use them for pathfinfing is a much bigger deal, so for now they are there only to the advantage of players. But I will revisit this problem later, because having the AI use portals, and be smart about it, would be really, really fun.

As another gameplay change, I deflated the quantities of all resources in the game, except mana. Everything now costs five times less wood, gold, iron, and so on, and you also receive less of everything. The only real effect is on the size of stockpiles that are generated, because every unit of resource in KeeperRL, except mana, exists in the game as an individual item. This used to inflate save file size quite a bit.

Going back to technical stuff, I noticed that switching off Vertical Sync in the window configuration, which ties the game’s framerate to the refresh rate the monitor, fixes some severe frame dropping that I experience on the development build of the game. I’m not sure if this has much effect in the real world, but I added the option to switch off V-Sync in the game’s settings. I’m also contemplating just switching it off by default. I need to research how other games approach this issue.

Last, but not least, I had some time to work on the tutorial. It’s going to take the form of very small, detailed tasks for the player to perform as they build their dungeon. As KeeperRL is fairly complex, there will be a large number of these steps, so it’s going to take longer to finish than I expected initially. This is what the tutorial will look like. In addition to giving you instructions, the game also highlights the relevant UI elements for the current task.

COMMENTS