Save Game Inspector / Reference

Blueprint nodes

v1.2.0Runtime plugin
  • UE 5.5–5.8
On this pageLoad nodesVersion and report nodesLoad outcomesSave Game MigrationMigration context nodesPathsStructures and enumerations

Every node the plugin adds for your game. The load nodes are in the node menu under Save Game, next to the engine's own save nodes; the migration nodes appear inside a Save Game Migration Blueprint under Migration. They work in packaged games.

Keep saving with the engine's Save Game To Slot, Async Save Game To Slot, or Save Game To Memory. While the plugin is enabled, every save records the Save Data Version of its SaveGame class, which the migrated load nodes read.

Callable nodes have execution pins. Pure nodes have none and run each time a connected node reads their output.

Load nodes#

Use these instead of the engine's load nodes when older saves may meet a changed SaveGame class. They load the save the same way, then apply your rename rules and any due migration steps, remove saved fields that would stop the engine's loader, and report anything still lost.

Load Game From Slot (Migrated)#

Callable · Menu: Save Game

Loads a slot, recovers what your rules and migration steps cover, and reports what happened.

Input Type Details
Slot Name String The slot your game saves to.
User Index Integer Default 0. The platform user, as on the engine's node.
Output Type Details
Return Value Save Game The loaded SaveGame, or None. Cast it to your SaveGame class.
Report Save Game Migration Report What the load did. See Save Game Migration Report.

Returns None, with the reason in the report's Error, when the slot is empty, the file is damaged, or its SaveGame class no longer exists. See Load outcomes.

Async Load Game From Slot (Migrated)#

Async · Menu: Save Game

The same load without blocking the game while the file is read. The node continues at once from its top execution pin; On Loaded or On Failed runs when the load finishes.

Input Type Details
Slot Name String The slot to load.
User Index Integer Default 0.
Output Type Details
On Loaded Execution The save loaded. Save Game and Report are set.
On Failed Execution Nothing loaded: an empty slot, a damaged file, a missing class, or no save system on the platform. Report says which.
Save Game Save Game The loaded SaveGame, or None.
Report Save Game Migration Report What the load did. See Save Game Migration Report.

Load Game From Memory (Migrated)#

Callable · Menu: Save Game

Migrated load for save data your game reads itself, for example from cloud storage. The report's Slot Name is empty.

Input Type Details
Save Data Byte array Must be connected. The bytes of a save written by Save Game To Memory or Save Game To Slot.
Output Type Details
Return Value Save Game The loaded SaveGame, or None.
Report Save Game Migration Report What the load did. See Save Game Migration Report.

Version and report nodes#

Get Save Game File Info#

Callable · Menu: Save Game

Reads what a slot's file says about itself without loading the save: its SaveGame class, its Save Data Version, and the engine that wrote it.

Input Type Details
Slot Name String
User Index Integer Default 0.
Output Type Details
Return Value Boolean False when the slot has no readable save. Info's Error says why, for example that there is no save in the slot.
Info Save Game File Info See Save Game File Info.

Get Save Data Version For Class#

Pure · Menu: Save Game

The Save Data Version new saves of this SaveGame class are stamped with, and that a migrated load upgrades older saves to.

Input Type Details
Save Game Class Save Game class reference Your SaveGame class. None returns the project-wide version.
Output Type Details
Return Value Integer The project-wide version, usually 0, until the class has had a New Save Version.

Has Unrecovered Fields#

Pure · Menu: Save Game

True when the load lost data that nothing recovered: a dropped field, a lost enum value, a conversion that may have lost information, or a reference that no longer resolves. Use it to warn the player or log the report.

Input Type Details
Report Save Game Migration Report Must be connected. The report from a migrated load.
Output Type Details
Return Value Boolean

Describe Migration Report#

Pure · Menu: Save Game

The report as one line for a log or debug display, for example Slot1: BP_Save_C v2 -> v3, 1 migration step, 2 fields dropped, 1 recovered. It also mentions possible-loss conversions, unresolved references, removed fields, and saves written by a newer build when they apply. When nothing loaded, it reads Slot1: nothing loaded (reason).

Input Type Details
Report Save Game Migration Report Must be connected. The report from a migrated load.
Output Type Details
Return Value String

Get Current Save Data Version#

Pure · Menu: Save Game

Deprecated. Each SaveGame class now has its own version; use Get Save Data Version For Class.

Output Type Details
Return Value Integer The project-wide version.

Load outcomes#

Situation Result
The slot is empty None. Error says there is no save in the slot. The async node takes On Failed.
The SaveGame class no longer exists, is abstract, or is not a SaveGame None. Every saved field is listed as dropped, with the reason Class Missing.
The file is damaged or truncated None. Error describes the damage.
A field changed type in a way that would stop the engine's loader The field is removed before loading and reported, Stripped Crashing Fields is true, and the rest of the save loads.
The save was written by a build with a higher version of its class Loads. Saved By Newer Version is true, and none of that class's steps run.
The save was written before the plugin was installed Loads with Saved Version 0 and Stamped false. Due steps run as usual.

Save Game Migration#

A Save Game Migration Blueprint is one migration step: it upgrades older saves of the SaveGame classes it lists to its Target Version. New Save Version creates one for you. It is not a SaveGame class, and your SaveGame classes stay as they are.

To make one by hand, create a Blueprint class with Save Game Migration as its parent, set the Class Defaults below, and override Migrate. New migration Blueprints are added to Project Settings → Plugins → Save Game Inspector → Migrations automatically and are included when you package. Renames and deletions are followed. A migration Blueprint marked Generate Abstract Class is skipped, so it can serve as a base for other steps.

Class Defaults#

Setting Default Details
Target Version 1 Saves whose class version is lower are upgraded to this version by this step. Minimum 1.
Save Game Classes Empty SaveGame classes this step applies to, including their subclasses, whose versions it counts in. Empty applies it to every SaveGame class, each counted in its own version.
Field Moves Empty Saved values to move before Migrate runs, each with a From and To path. [*] matches every element. See Save Game Field Move.

Migrate#

Event · Target: Save Game Migration Blueprints

Override it to upgrade the loaded save. It runs after the step's Field Moves; the default does nothing. Use the Context to read values the current class dropped, write them into the SaveGame, and mark them recovered. Migrate also runs in the editor, when you press Migrate in the inspector and in the New Save Version preview, so it must not depend on a level or world.

Event pin Type Details
Save Game Save Game The loaded save. Cast it to your SaveGame class and write the upgraded values.
Context Save Game Migration Context Access to every saved value. See the next section.

When steps run#

A migrated load works in this order:

  1. Renames the editor can follow are recovered.
  2. Field Renames entries are applied. They only fill fields the class dropped and never overwrite a loaded value.
  3. Due steps run, lowest Target Version first. Each applies its Field Moves, then Migrate.

A step is due when the save's version of the class it counts in is below its Target Version, this build's version of that class has reached its Target Version, and the save was not written by a newer build of that class. A step that lists a parent class also upgrades saves of its subclasses, counted in the parent's version.

Migration context nodes#

Drag from the Context pin of Migrate to use these nodes. The context holds every value the save file contains, including fields the current class no longer has. It is valid only inside Migrate.

Get Dropped Fields#

Pure · Target: Save Game Migration Context · Menu: Migration

Every saved field that did not load cleanly, with what has been recovered so far.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Output Type Details
Return Value Save Game Dropped Field array See Save Game Dropped Field.

Has Dropped Field#

Pure · Target: Save Game Migration Context · Menu: Migration

True when the current class dropped this saved field and nothing has recovered it yet.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Return Value Boolean

Has Saved Value#

Pure · Target: Save Game Migration Context · Menu: Migration

True when the file holds a value at the path. Values equal to the class default are not written to saves, so they are absent.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Return Value Boolean

Get Saved Value As String#

Pure · Target: Save Game Migration Context · Menu: Migration

The saved value as text, such as 42, "Sword", (X=1,Y=2), or [1,2,3], up to 4,096 characters.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Return Value String Empty when the file has no value there.

Get Saved Element Count#

Pure · Target: Save Game Migration Context · Menu: Migration

How many elements a saved array, set, or map holds in the file.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Return Value Integer -1 when the path is not a saved container.

Get Saved … (typed values)#

Pure · Target: Save Game Migration Context · Menu: Migration

Read a saved value as a particular type. Each node has a Value output and returns true when it could produce a value of that type.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Value The node's type The saved value.
Return Value Boolean False when the file has nothing usable at the path.
Node Value type Reads
Get Saved Bool Boolean A Boolean, a number (non-zero is true), or text such as "true".
Get Saved Int Integer64 Integers, floats (truncated), Booleans as 0 or 1, enums as their numeric value, and numeric text.
Get Saved Float Float Any number, Booleans, enums, and numeric text.
Get Saved String String Strings, names, text, enum names, and reference paths as they are; anything else as text.
Get Saved Name Name The same as Get Saved String. False for text of 1,024 characters or more.
Get Saved Text Text Saved text as it was, and strings, names, enum names, and references converted. Numbers return empty text.
Get Saved Enum Name Name Saved enum values only: the entry name as saved, even when the enum no longer has that entry.
Get Saved Soft Object Path Soft Object Path The saved path of an object or soft reference.
Get Saved Object Object A saved reference, loaded when needed. False when the path is not a reference, nothing exists at the saved path, or it points into a level. True with None for an empty reference.

Get Saved Struct#

Pure · Target: Save Game Migration Context · Menu: Migration

Copies a saved struct into the struct variable you connect to Value. Members are matched by name, so an older version of a struct fills the members that still fit.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.
Output Type Details
Value Any structure Connect a variable of the struct type you want filled.
Return Value Boolean True when anything was written.

With nothing connected to Value, the node reports an error during play.

Move Saved Value#

Callable · Target: Save Game Migration Context · Menu: Migration

Copies a saved value into a field of the SaveGame, converting the type when needed, and marks the saved field recovered. Works for any type, including containers and structs; arrays grow and map entries are created as needed. A failed or partial move adds a note to the report.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String Saved field to copy from.
Target Path String Field of the current SaveGame to copy into. A Blueprint struct member's display name also works.
Output Type Details
Return Value Boolean False when the value could not be moved.

Mark Recovered#

Callable · Target: Save Game Migration Context · Menu: Migration

Marks a dropped field, and every dropped field under it, as handled after you recovered it yourself, for example by reading it with Get Saved Int and setting a variable.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Path String An exact saved path, such as Gold, Inventory[3].Durability, or Stats["Wins"]. See Paths.

Add Note#

Callable · Target: Save Game Migration Context · Menu: Migration

Adds a line to the report's Notes.

Input Type Details
Target Save Game Migration Context The Context pin of the Migrate event.
Note String

The context also has read-only variables: Saved Version (the file's version of the class this step counts in, 0 for saves written before the plugin), Target Version (the running step's version), Current Version (this build's version), and Slot Name (empty for a save loaded from memory).

Paths#

Saved fields are named by paths. Copy them from the inspector's Issues list or Raw view rather than retyping them, because saved names can differ from the names the editor shows.

Form Example
Field Gold
Struct member Stats.Wins
Array element Inventory[3], Inventory[3].Durability
Map entry with a name or string key Stats["Wins"]
Map entry with a number key Scores[3]
Map entry with an enum or Boolean key The entry name, or True and False
Fixed-size array slot Slots[2]
Every element Inventory[*].Durability

[*] works in Field Moves, Field Renames, Add Rename Rule, and the New Save Version window, where the [*] in the destination takes the index matched in the source. The context nodes take exact paths only. Set elements have no path; move the whole set.

Type conversion#

Moves, renames, and Get Saved Struct convert values the way the engine converts them on load:

  • Numbers convert between sizes. Float to integer truncates, and narrowing or out-of-range values are reported as a possible loss.
  • Enums convert by entry name or by a valid number.
  • Strings, names, and text convert into each other, and numbers become text. A name cannot hold 1,024 characters or more.
  • References are found by their saved path and loaded when needed. A reference into a level is refused.
  • Structs copy member by member by name, and the report names members with nowhere to go.
  • Arrays fill from an array or a set, sets from a set or an array, and maps only from a map.

Structures and enumerations#

Save Game Migration Report#

Returned by every migrated load.

Member Details
Slot Name The slot that was loaded. Empty for a load from memory.
Class Path The SaveGame class named in the file.
Loaded True when a SaveGame object was produced.
Error Why nothing loaded: an empty slot, a damaged file, or a missing class.
Saved Version The file's Save Data Version for its class. 0 for saves written before the plugin.
Stamped True when the file carries a Save Data Version.
Current Version This build's Save Data Version for the class.
Saved By Newer Version The file came from a build with a higher version of the class. None of that class's steps ran.
Applied Steps The migration steps that ran, by class name, in order.
Fields Every saved field that did not load cleanly. See Save Game Dropped Field.
Notes Lines added by migration steps and moves.
Stripped Crashing Fields True when fields that would have stopped the engine's loader were removed before loading.

Save Game Dropped Field#

Member Details
Path Where the field is, such as Inventory[3].Durability.
Saved Type The type the field was saved as.
Current Type The field's type in the current class. Empty when the field no longer exists.
Outcome What happened to it. See Field outcomes.
Reason Why. See Field reasons.
Saved Value The saved value as text.
Dropped When Packaged True when a packaged game loses this field with the engine's loader, even if the editor kept it.
Recovered True when a rename rule, field move, or migration step brought it back.
Recovered By Which kind of rule recovered it. See Recovered by.
Recovered Into The field the value was recovered into.
Loaded Into The field it loaded into when that differs from the saved one, for example saved Gold, loaded into Coins.

Save Game File Info#

Returned by Get Save Game File Info.

Member Details
Valid False when the file is not a save, or is truncated or damaged.
Error Why the file could not be read.
Class Path The SaveGame class that wrote the file.
Class Found True when that class exists in this build and is a SaveGame.
Save Data Version The class's version when the file was written. 0 for saves written before the plugin.
Stamped True when the file carries a Save Data Version.
Current Version This build's version for the class. The file is older when its own is lower.
Engine Version The engine build that wrote the file.
Package Version UE4, Package Version UE5, Save Game File Version Engine file-version numbers, for diagnostics.
File Size Size of the file in bytes.

Save Game Field Move#

One entry of a migration step's Field Moves.

Member Details
From The saved field, such as OldGold or Inventory[*].Durability. [*] matches every element.
To The current field, such as Coins or Inventory[*].Condition. Its [*] uses the element matched in From.

Save Game Field Rename#

One entry of Project Settings → Plugins → Save Game Inspector → Field Renames, applied on every migrated load before any migration step.

Member Details
Save Game Class The class the rename applies to. Empty applies it to every SaveGame class.
From The old field name as saved, such as Gold.
To The new field name, such as Coins.

Field outcomes#

Outcome Meaning
Loaded Loaded exactly as saved.
Converted The field's type changed and the value converted without loss.
Converted (possible loss) The type changed and the conversion may have lost information, such as a narrower number or a sign change.
Loaded Into Deprecated Loaded into a deprecated variable. The next save drops it.
Enum Value Lost The saved enum entry no longer exists.
Dropped None of the saved value reached the object.
Unresolvable Reference A saved object reference could not be found, so the field loaded as None.

Field reasons#

Reason Meaning
Field Removed The class or struct no longer has a field of that name.
Type Changed The field's new type cannot take the saved value.
Struct Type Changed The field is now a different struct that cannot read the old one.
Container Type Changed An array, set, or map changed its element type, and the whole container was dropped.
Static Array Shrunk A fixed-size array got shorter; elements past its new end are skipped.
No Longer Saved The field still exists but is no longer saved.
Would Crash Stock Loader Loading the field would have stopped the engine's loader, so it was removed first.
Renamed (kept in the editor only) The editor followed a rename that a packaged game does not. Add a Field Renames entry or a field move.
Editor Only Field Loaded only because the field is editor-only data. A packaged game drops it.
Runtime Object A reference to an object created during play. Saves keep only its path, not its contents.
Missing Asset The referenced asset no longer exists at the saved path.
Class Missing The save's SaveGame class no longer exists, so nothing in it loads.
Undecodable The plugin could not read this value.

Recovered by#

Value Meaning
None Not recovered.
Core Redirect A property redirect in your project's configuration. A packaged game ignores these for saves.
Property Guid The editor matched a renamed Blueprint variable.
Field Renames Table An entry in Project Settings → Field Renames.
Field Move A migration step's Field Moves.
Migration A migration step's Migrate event, through Move Saved Value.
Documentation
↑ ↓ Navigate ↵ Openesc Close