The importance of preset saves

When building a game with any sort of progression you need a quick way to jump to various points of said progression. For a multiplayer FPS that might be having the ability to debug-drop weapons. For a 2d platformer that might just involve a level select.

For some games it might just involve this wonderful option in the right-click menu of the Unreal Editor:

For many games, the one I'm working on in my spare time included, this isn't quite enough though. In a game where a single level can have multiple states of progression, you need a way to set those states easily.

This is a panel I built with a list of "preset saves" which are really simple blueprints that setup a save data object however I want. The highlighted section at the top is the currently loaded level in the editor - I can use this to load into any part of the game but generally if I'm actively working on a level then that's the one I want to load into. In addition to this panel, I also have a console command that will let me do the same:

Had to blur out the command itself unfortunately. Also, if you're looking for how to make this sort of fancy auto-complete for your commands check out my tweet on the subject :)

Clicking on any of the options here will run the specified blueprint on the active save file and then reload the save.

Most blueprints simply set the level path, player start name, and a "chapter progression flag" (basically an enum that says how far the player has progressed within a set of levels). Some may set other options like level progression flags (for progression within a single level) or attributes on the player themselves (whether they can use abilities, their health, etc).

Here's an example of what a blueprint looks like:

This one sets the current level and player start (both in the panel on the right), and then the chapter's progression flag and a level progression flag (the node graph on the left).

I cannot overstate how incredibly useful this functionality is. To jump to the middle of a level it's just a click of a button. There are certain areas of levels that would otherwise be impossible to jump to without playing up to that point. A major example is when there are sublevels that are streamed in only after certain events are triggered - I would have to play up until the point those events happen if it wasn't for these preset saves.

Why not json?

I previously posted a snippet showing how to import and export saves as json. This seems like a good way to store a bunch of preset save files that are easily editable right? Well, yes, but there are some benefits to sticking with blueprints here - it's easier to update references to assets that have moved and there's extra programmability if a bunch of saves start from a common base. When the game is actively under development and the save format is changing constantly, it's much easier to keep blueprints up to date instead of json files.

I do still use json-based saves whenever I need to debug how saves are created or to make a quick edit so there's still value for me. It just isn't quite as useful as something blueprint-based.

Show Comments