This plugin is a tool for make your own savegame system.

Structure

Instances

Are savegames (represents a whole save of all archives in your app).  These can be duplicated, deleted etc…
You swap from one to another when (for exemple) changing player. These are represented by an identifier named InstanceID. There is no “slots” system ( or we’ll provide some as downloadable content ) but you will make yours easily with your own classes using instanceObjects.
See more…

Archives

Are pack of elements, each archive have its own file on hard drive.
An archive can stay in memory for fast (de)serialization.
The identifier that represent it is ArchiveID.
See more…

Elements

Are objects, that can be (de)serialized from/to an archive.
The identifier that represent these is ElementID, which contain an ArchiveID, it contain all informations for access an object in file.
See more…

Identifiers

All identifers can be created using String, Array or int. When using an array, it is used as a path.
Exemple :
You create an ArchiveID with [“my_category”,”my_subCategory”,”my_archive”].
You create an InstanceID 
with [“my_player”,”save1″] and activate this instance.
Your archive will then be located at ‘../my_player/save1/my_category/my_subCategory/my_archive.dtarc”).

See more…

DeepObjects

Are sub objects of an element, any object can have deepObjects.
DeepObjects doesn’t need any identifiers because these are part of an element.
You’ll mostly use DeepObjects for deep save components or generated objects but you can do what you want (save a lot’s of actors in an elements is up to you). You can deepSave objects in an array or map using the ArrayToObject node.
See more…

Serialization

You can (De)serialize:
– An element.
– An archive (all IElements in this archive).
– An instance (all IElements).

Each object can receive events about serialization (DeepObjects too) and can lock his (de)serialization process (for exemple if an object know it wasn’t modified it can lock his serialization for optimisation purpose).

An archive will self load when needed, but you can manage cached datas yourself.
For exemple load an archive when entering a box trigger and unload (and save) it when the player goes out of that box, all (De)serialization for objects of this archive won’t need to access file while the player is in. We’ll soon add a timer option in archive settings for inactivity auto unload.

GetObject

It is a feature that allow you to get an IElement using its ElementID.
It will return the object even if it is not loaded in your world, in which case the object will be loaded from its saved state.

Blueprint users are sometime facing a problem when they need to access data of an object in a level from an other level. This is also solved with getObject (will only work in game but you are able to create the link in editor).

With this feature you will store variables where these have to be, and never have to create an actor that store duplicated informations in the persistant level. This way is bad for maintenance reasons and keep datas in sync is sometime not easy.
See more…

Options and informations

All pins, nodes and variables are tooltiped, and there is some documentation nodes for fast help in blueprint.

BP_ArchiveMaster is an actor that contain all your savegame settings and informations.
From here you can :

– Create pre made instances that you will be able to export to your game, set readonly, (de)serialise from the editor…etc
– Access archives settings.
– See each element in each archives, the last register time and object, you can delete them…etc