[PLUGIN] Savior

Savior 3 update:

[Improvement]:

  • Savior 3 is nearly 30% faster on heavy data loading. :heavy_check_mark:
  • Restores Relative Transform attachments on respawn. :heavy_check_mark:
  • Load World: added “Reset Level on Load” option. :heavy_check_mark:
  • Load Level: added “Stream Level on Load” option. :heavy_check_mark:
  • Mitigating ‘Child Actor’ transform conflicts on load. :heavy_check_mark:
  • Added support for Class Reference properties. :heavy_check_mark:
  • Added support for Int64 properties. :heavy_check_mark:

[New Built-in Systems]:

  • Save/load Skeletal/Mesh Reference (root component mesh). :heavy_check_mark:
  • Save/load Animation Blueprints’ properties (Variables). :heavy_check_mark:
  • Save/load Movable Lights’ native properties. :heavy_check_mark:
  • Save/load Dynamic Materials’ properties. :heavy_check_mark:

[New Nodes]:

  • [SAVIOR] Open Level (+HUD). :heavy_check_mark:
  • [SAVIOR] Open Level (+HUD) +Callbacks]. :heavy_check_mark:
  • [SAVIOR] Load Object : (Slot Data). :heavy_check_mark:
  • [SAVIOR] Load Component : (Slot Data). :heavy_check_mark:
  • [SAVIOR] Load Actor : (Slot Data). :heavy_check_mark:

Open Level (+HUD) nodes:

These nodes can execute an action to open a persistent level while triggering a Savior Slot’s loading screen.
It doesn’t perform any data load from any slot, just opens a regular persistent map.

https://i.imgur.com/pmtpt0J.png

Load Object nodes:

The Load xxx (Data) internally were called StaticLoadxXx functions…
This have changed, you will have to replace them to new ones now they have been renamed in C++.

https://i.imgur.com/PyXPhih.png

Animation Blueprint Variables:

I have added support for directly saving and loading properties of Anim Instance Blueprints that are marked ‘Save Game’ on spawned Characters;
Removing the need to pass data through Characters to their AnimBP after a slot was loaded.
Your Animation Blueprint must implement the ‘Savior Serializable’ interface for this to work.

https://i.imgur.com/BuQiulT.png

https://i.imgur.com/AFDA4Cb.png

https://i.imgur.com/3na8G8C.png

Skeletal Meshes, Static Meshes, and Dynamic Material Instances:

A bundle of new algorithms that allows us to save and runtime load skeletals or meshes of root components;
As well as restoring dynamic material instances’ parameters, such as scalar params, vector params, and texture object params.
This was the hardest one to add since it touches stuff from a bunch of different threads, including the rendering thread.

https://i.imgur.com/RhgN9qs.gif

Movable Light Sources:

And finally, native C++ properties of movable light sources can be saved and restored without requiring ‘Save Game’ flags.
Only ‘Movable’ light sources are supported.

https://i.imgur.com/52gtwVx.png

Some notes to keep in mind with Savior v3:

  • Savior 3 can save and restore scalar public parameters, vector parameters, and public texture parameters of dynamic material instances on Actors’ meshes.

  • So “Save Actor” function automatically saves Dynamic Material Instances for Actor that implements the ‘Serializable’ interface.

  • And “Save World” function makes use of the Save Actor node, so the same rule from above applies when using this function.

  • Dynamic Material Instances does not require ‘Save Game’ check box on properties.

  • Check Epic’s documentation on dynamic material instances.

  • To save an Animation Instance, the Anim BP class must implement the ‘Serializable’ interface.

  • When serializing Animations, it’s not desirable to add a SGUID to Animation Instance if owning Actor already has a valid SGUID (it’s just not necessary).

  • Animation Properties to be saved require to be marked with the ‘Save Game’ check box, just like properties of regular Blueprints.

  • Light Component properties are only saved/loaded if the light source transform is set to ‘Movable’, dynamic lights.

  • None of Savior 3 features work for the ‘Minimal’ data set, only slots using ‘Complex’ data format (‘Compression’ setting on Slot class) support these new features.

2 Likes