Skip to main content

save kit

19 tools. Generated from the plugin source; do not edit by hand.

Guide​

Start by inspecting the concrete SaveGame class: save.inspect_class {class} lists default values and whether every reflected property actually has the SaveGame flag. save.write creates a slot from that class and only accepts values for writable SaveGame properties. save.read, save.get_property, and save.validate always load through the platform save system and return a clear missing/corrupt result instead of treating a file as valid.

Use save.set_property for a focused existing-slot change; save.reset_property restores the class default. save.reset_slot writes a complete class-default slot. save.copy_slot preserves the serialized object class, while save.migrate copies only same-name, same-type SaveGame fields into a chosen new class and returns skipped-field reasons. Compare before deleting or replacing a slot with save.compare and use save.validate_many for a bounded batch audit.

Raw save.read_bytes / save.write_bytes are recovery tools, not a format editor. The write is Risk 4 because invalid bytes can make a slot unloadable. Unreal exposes no cross-platform public slot listing or header reader, so this kit does not invent either.

Creating a schema: save.create_save_game_class {folder, name, variables:[{key:"Score",value:"int"}]} creates and compiles a SaveGame Blueprint whose variables all carry the SaveGame flag (types: bool, int, int64, float, string, name, text, vector, rotator, transform). Pass its path as class to save.write. Values use Unreal text syntax (42, Smoke, (X=1,Y=2,Z=3)).

In the editor, slots are files under <Project>/Saved/SaveGames/<slot>.sav. save.delete removes one; save.delete_many {slots:[...]} removes several and reports missing ones instead of failing.

Tools​

Legend. risk 0 = read-only, 1 = harmless editor op, 2 = modifies asset, 3 = deletes/replaces asset, 4 = project/config/build op, 5 = potentially destructive (calls above MaxAutoRisk need "_confirm": true). mutates = runs in a transaction (edit.undo reverts). requires PIE / requires world = refused without a PIE session / an open level. requires plugin = unavailable while the plugin is disabled. dryRun = honours the dryRun argument. smoke = covered by edit.self_test.

save.compare (risk 1, smoke)​

No description.

ArgumentTypeDescription
firstSlotstringrequired. First plain slot name.
secondSlotstringrequired. Second plain slot name.
userIndexintegerPlatform user index used for both slots. Default 0.

Returns: equal, different, firstOnly, secondOnly.

save.copy_slot (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
destinationSlotstringrequired. Destination plain slot name.
destinationUserIndexintegerDestination platform user index; -1 keeps userIndex. Default -1.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.create_save_game_class (risk 2, mutates, smoke)​

Creates a SaveGame Blueprint asset with typed variables, all flagged SaveGame, and compiles it; returns its schema.

ArgumentTypeDescription
folderstringrequired. Content folder of the new SaveGame Blueprint, e.g. /Game/Save.
namestringrequired. Asset name, e.g. BP_PlayerSave.
variablesarray of UeaKeyValueVariables to add: key = variable name, value = type (bool, int, int64, float, string, name, text, vector, rotator, transform). Every variable is flagged SaveGame.

Returns: class, properties, saveGamePropertyCount.

save.delete (risk 3, mutates, destructive, smoke)​

No description.

ArgumentTypeDescription
slotstringrequired. Plain slot name; separators are rejected.
userIndexintegerPlatform user index. Default 0.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.delete_many (risk 3, mutates, destructive, smoke)​

Deletes several save slots (files under Saved/SaveGames in editor builds); missing slots are reported, not failed.

ArgumentTypeDescription
slotsarray of stringrequired. Plain slot names to validate.
userIndexintegerPlatform user index. Default 0.

Returns: results, validCount, invalidCount.

save.get_property (risk 1, smoke)​

No description.

ArgumentTypeDescription
propertystringrequired. Authored SaveGame property name.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.inspect_class (risk 0, smoke)​

No description.

ArgumentTypeDescription
classstringrequired. SaveGame class name or path.

Returns: class, properties, saveGamePropertyCount.

save.list_properties (risk 0, smoke)​

No description.

ArgumentTypeDescription
classstringrequired. SaveGame class name or path.

Returns: class, properties, saveGamePropertyCount.

save.migrate (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
destinationSlotstringrequired. Destination slot.
destinationClassstringrequired. Destination class. Matching SaveGame properties are copied by name and compatible type.
destinationUserIndexintegerDestination platform user index; -1 keeps userIndex. Default -1.
failIfDestinationExistsbooleanRefuse to replace the destination slot. Default false.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.read (risk 1, smoke)​

No description.

ArgumentTypeDescription
propertyContainsstringReturn only properties whose names contain this text.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.read_bytes (risk 2, smoke)​

No description.

ArgumentTypeDescription
slotstringrequired. Plain slot name; separators are rejected.
userIndexintegerPlatform user index. Default 0.

Returns: slot, userIndex, byteCount, base64.

save.reset_property (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
propertystringrequired. Authored SaveGame property name.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.reset_slot (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
classstringrequired. Concrete SaveGame class whose defaults replace this slot.
failIfExistsbooleanRefuse to replace an existing slot. Default false.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.set_property (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
valuestringrequired. New value in the same Unreal text form used by the details panel.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.slot_exists (risk 0, smoke)​

No description.

ArgumentTypeDescription
slotstringrequired. Plain slot name; separators are rejected.
userIndexintegerPlatform user index. Default 0.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.validate (risk 1, smoke)​

No description.

ArgumentTypeDescription
slotstringrequired. Plain slot name; separators are rejected.
userIndexintegerPlatform user index. Default 0.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.validate_many (risk 1, smoke)​

No description.

ArgumentTypeDescription
slotsarray of stringrequired. Plain slot names to validate.
userIndexintegerPlatform user index. Default 0.

Returns: results, validCount, invalidCount.

save.write (risk 3, mutates, smoke)​

No description.

ArgumentTypeDescription
classstringrequired. SaveGame class name or path.
valuesarray of UeaKeyValueSaveGame property -> Unreal text value.
failIfExistsbooleanReject a slot that already exists. Default false.

Returns: slot, userIndex, exists, valid, class, byteCount, properties, problems.

save.write_bytes (risk 4, mutates, smoke)​

No description.

ArgumentTypeDescription
base64stringrequired. Base64 raw save-system bytes. This bypasses SaveGame deserialization.

Returns: slot, userIndex, byteCount, base64.