Problems you may see while you set up Rolly Save, what causes them and how to fix them. A setup message in the Message Log or on screen has its own entry on the generated setup messages page, Reference/SetupMessages.md.
Sheet
63 of 64
Rev
1.0.0
Updated
On this sheet
Save files
A save file’s name is not the slot’s name
Cause: file names hold the slot’s key: the name in lowercase, or, when it has other characters or more than 40 of them, its letters and digits followed by eight hex digits (My Slot! is rollysave_slot_my_slot_7537df76_a.sav).
Fix: none needed. Use the slot’s name in your game; the name as given is kept inside the file.
Saves use the prefix rollysave, not the one in Project Settings
Cause: File Prefix in Project Settings > Plugins > Rolly Save is not 1 to 16 lowercase letters and digits starting with a letter, so Rolly Save falls back to rollysave and reports a setup error.
Fix: correct File Prefix, such as mygame. Saves written under rollysave meanwhile no longer show once the prefix changes.
Two slots overwrite each other
Cause: their names differ only in the case of A to Z (Slot1, SLOT1), which Rolly Save treats as one slot on every platform, since some file systems ignore case.
Fix: give the slots names that differ in more than case.
A save fails with NameCollision
Cause: another name already saved to the same file name, such as My Slot! and a slot named my_slot_7537df76. Saving would replace the other slot’s save, so nothing is written and a setup error names both.
Fix: rename one of the slots.
Writing a save fails
Cause: the platform’s save system refused the write. LowStorage: the drive that holds the game’s Saved folder is nearly full. Failed: a folder the game may not write to (Saved/SaveGames, or %LOCALAPPDATA%\<Project>\Saved\SaveGames in a packaged Windows game), a removed memory card, or a full disk on storage that cannot report its free space, such as storage that keeps users apart on consoles. The slot’s previous save is kept either way.
Fix: free space on the drive and check that the game can write to the folder, then save again; the next save goes to the same copy.
A load says it came from the backup
Cause: the slot’s newer copy is damaged, could not be read, or was cut short, possibly to no bytes at all, by a crash, a killed game or a write that failed, so the save before it loaded. The result’s bFromBackup is true and the store raises OnLoadedFromBackup.
Fix: tell the player the last save may be missing. The next save to the slot writes over the damaged copy. If it happens without a crash or a failed write, check the storage itself, such as a failing memory card, and run rolly.save.verify on the slot to see each copy’s state.
A save made by a newer version will not load or save
Cause: the slot’s newest copy was written by a newer version of your game or of Rolly Save, such as a save synced from a device with an update installed. This version cannot read it, so the load reports NewerVersion instead of loading the older copy, and saves to the slot report NewerVersion and write nothing, so the newer save survives.
Fix: update the game on this device. To start over on this version, save to another slot, or delete the slot.
Saves from two copies of the game running at once overwrite each other
Cause: each running game remembers which copy of a slot holds the newest save. A second copy writing the same save folder at the same time, such as a standalone game started beside Play In Editor, is not noticed, and either can write over the save the other just made.
Fix: run one copy of the game per save folder at a time.
On iOS every save fails or reads as empty
Cause: with Project Settings > Platforms > iOS > Enable Cloud Kit Support on and iCloud save files sync strategy other than Never, the iOS save system reports a write as done but uploads the old file instead of writing the new one, and reports a load as done without returning the file’s bytes. Rolly Save reads every write back on iOS, so such a write reports Failed, and counts a copy that loads without bytes as damaged.
Fix: set iCloud save files sync strategy to Never (do not use iCloud for Load/Save Game).
Save protection
A load gives the backup and says “This save was changed outside the game, so its backup loaded.”
Cause: Protect Saves is on, and the newest copy’s checksums hold but its signature does not: a tool that rewrites the checksums, such as a save editor that knows the format, changed the file. With Changed Saves at Use Other Copy, the default, the other copy loaded; the result has the Issues line ChangedOutsideGame and On Save Changed Outside Game fired. A byte changed by hand, in a hex editor, breaks the checksums instead: that copy counts as damaged, as on a failing disk, and the backup loads with the damaged copy’s result (see “A load says it came from the backup”).
Fix: none needed; the next save writes over the changed copy. To load changed saves and only flag them, set Changed Saves to Load and Report under Project Settings > Plugins > Rolly Save > Protection.
A load fails with Tampered
Cause: with Changed Saves at Use Other Copy, the newest copy was changed outside the game and the other copy was changed too, is damaged or is missing, such as for a slot saved once; a part save of that slot saves nothing, with the same status. Or an imported file was changed: an import has no other copy to stand in for it, so it is refused whatever Changed Saves says.
Fix: put back the files the game wrote, or import the file the game exported.
A load or a save fails with ProtectionKeyMissing
Cause: the slot’s newest copy was protected with a key this build does not hold: not Protection Key, not in Previous Protection Keys, and not given by the Protection Key Provider, as after a key was removed before every slot was saved under the key that replaced it. Such a copy is kept: the load and every save of that slot fail, and the Message Log names the file once (KeyMissing). A backup under such a key is no problem: the newest copy loads and the next save writes over the backup.
Fix: add the key the save was protected with to Previous Protection Keys under Project Settings > Plugins > Rolly Save > Protection.
Saves from before protection count as changed
Cause: Accept Unprotected Saves is off, so a file without protection is treated as changed outside the game.
Fix: turn Accept Unprotected Saves on until your players’ saves have each been saved once with protection.
Saves are written unprotected although Protect Saves is on
Cause: a setup error in the Message Log and Data Validation: no Protection Key (NoKey), a key that is not 64 hex digits or is all zeros (BadKey), or a Protection Key Provider that gave no keys or is not a C++ class (ProviderFailed). Until it is fixed, saves are written unprotected and unprotected saves load.
Fix: press Generate Key beside Protection Key, or fix the provider’s GetKeys.
Setup error TooManyKeys
Cause: Previous Protection Keys holds more than 16 keys, such as after Generate Key with 16 listed; only the first 16 are read.
Fix: remove a key only once no player’s save has its newest copy under it: such a slot neither loads nor saves without the key. A backup under a removed key is written over by the slot’s next save.
Generate Key says no key was generated
Cause:Config/DefaultGame.ini could not be checked out or made writable.
Fix: check the file out of revision control or clear its read-only flag, then press Generate Key again. Nothing changed meanwhile.
The Save Inspector shows a copy as “Changed outside the game” that the game loads
Cause: Changed Saves is Load and Report. The inspector names what it found in the copy; the game still loads it and reports it.
Fix: none needed.
Saving the game
A save fails with NotAuthority: “was called on a client”
Cause: the game was saved on a client of a networked game. The server owns the game’s state, so saving runs on the server or in a standalone game, and a client’s call writes nothing.
Fix: save on the server, such as from the Game Mode. From a client’s menu, send the request to the server first with a Run on Server event on the player controller, and save there.
A save fails with InvalidInput: “was called without a running game”
Cause: the save was asked for while the game instance had no game world, such as during its start before a map loaded, or from an editor tool outside Play In Editor.
Fix: save from a Blueprint or C++ object of the running game, such as an actor, a widget, the Game Mode or the Game Instance once a map is loaded.
A save fails with InvalidInput: “was given the slot name”
Cause: the slot name is empty, longer than 1,024 characters or holds a NUL character, which a save file cannot keep.
Fix: use a name of 1 to 1,024 characters, such as Slot 1. Names that differ only in capital letters are one slot.
A save fails with InvalidData: “could not be saved”
Cause: one object of the save cannot be saved as it is, and the setup message and the result’s Detail name it and the reason. Its data is what a load would refuse (see “Capturing fails: cannot be saved, since a load would refuse what it saves” below), or the objects of the whole save pass a bound of a file (“a file may”), or its class was being replaced by a Blueprint compile or Live Coding at that moment. Nothing is written, and the slot keeps its previous save.
Fix: change what the named object saves as the reason says. For a class being recompiled, save again once the compile finished.
A variable of the game instance, Game Mode, Game State or Level Blueprint is not saved
Cause: the variable does not have SaveGame ticked; or its category is off under What Saves in Project Settings > Plugins > Rolly Save; or the object is a subsystem without SaveGame properties and without an OnRollySavePreSave or OnRollySaveLoaded function, which saves nothing. SaveGame properties the engine’s own classes declare, such as an actor’s Can Be Damaged, do not count: a Game Mode, Game State or Level Blueprint without a SaveGame variable of your own saves nothing. A Level Blueprint of a streaming level is not saved in this version.
Fix: tick SaveGame in the variable’s Details (the Variable section’s advanced options), and turn the category on under What Saves.
Saves record Game Data Version 1, not the one in Project Settings
Cause: Game Data Version in Project Settings > Plugins > Rolly Save is below 1, which only an edited config file holds, so saves record 1 and a setup error says so.
Fix: set Game Data Version to 1 or higher.
A node’s Success and Failure never run
Cause: the Blueprint that called the node was destroyed before the result arrived, such as an actor destroyed in the same frame. The operation still finishes; only that Blueprint’s pins do not run. A load with Open Saved Map destroys every object of the old map, the caller among them (see “A load’s callback or Success pin never runs” below).
Fix: call the node from an object that lives until the result, such as the Game Instance, or bind On Save Finished or On Load Finished on the Rolly Save Subsystem.
Copy Rolly Slot fails with InvalidInput or NotFound
Cause: InvalidInput: From Slot Name and To Slot Name are the same slot, also when they differ only in capital letters, or one of them cannot be a slot name. NotFound: From Slot Name holds no save.
Fix: copy into another slot. Use List Rolly Slots to offer only slots that hold a save.
A save’s Issues list KeptRecordDropped
Cause: a save writes back what the last load or save held for objects that are not there, such as another map’s Level Blueprint or a registered object destroyed since. Counted with the new captures, that state would have passed a bound of the file, so it was left out; the save itself succeeded.
Fix: call Clear Loaded Game when the player starts a new game, so a new game keeps nothing of the last one. If the objects of the game itself come close to a bound, save less in them (the reason in the line names the bound).
A save fails with Blocked
Cause: a save block is on: an object called Add Save Block, such as a boss at the start of its fight, and has not removed it. Saves, quick saves, part saves, memory saves and rewind points are refused until every block goes.
Fix: Is Save Blocked lists each block as <object>: <reason>. Call Remove Save Block with that reason where the moment ends; an actor’s blocks also go at its End Play.
Save Game Part to Rolly Slot fails with Damaged or NewerVersion: “did not write”
Cause: the slot holds a damaged save, or one of a newer version of your game. A part save keeps the rest of the slot, which it cannot read there, so it writes nothing and the slot keeps its save.
Fix: delete the slot, or save the whole game into it with Save Game to Rolly Slot.
A save takes several frames, and an item appears twice or not at all
Cause: the save’s kind is in Spreading Work > Save Kinds, so it captures actors over several frames, and the item moved between two actors during the capture.
Fix: add a Save Block around such moves, which pauses the capture, or remove the kind from Save Kinds in Project Settings > Plugins > Rolly Save > Spreading Work.
The log says a save “reached Max Save Frames”
Cause: the world held more actors than Save Time per Frame captures in Max Save Frames frames, so the save captured the rest in one frame.
Fix: raise Save Time per Frame or Max Save Frames in Project Settings > Plugins > Rolly Save > Spreading Work.
Actors with a Group are missing from a part save of World
Cause: an actor with a Group saves with its group, which World leaves out; whole saves hold it.
Fix: add the group to the scope’s Groups, or clear the actor’s Group.
Setup error: “so its actors save with the world”
Cause: Group in Actor Defaults, a Save Rule or a Rolly Save component is no group name, such as one of more than 1,024 characters (BadActorGroup), so its actors save with the world.
Fix: use 1 to 1,024 characters, such as Chapter2.
Setup error: “saves with the world, not with the group”
Cause: the map’s path and the group’s name take more than 1,024 characters together, which a save’s chunk key cannot hold (GroupTooLong).
Fix: use a shorter Group in the source the message names.
Loading the game
A load fails with MissingMap: “which this build does not have”
Cause: the save was made in a map this build lacks: the map was renamed, moved or deleted, or a packaged build leaves it out. Nothing was loaded, and the game stays where it is.
Fix: if you renamed or moved the map, add a Rename Map step to your Migrations asset (see Keep old saves loading after an update). If a packaged build lacks it, add it to Project Settings > Packaging > List of maps to include in a packaged build.
A load fails with TravelFailed: “opening … failed”
Cause: the engine refused or failed the map change: the Game Mode refused the map’s name, the map failed to load, or another map change opened another map first. The saved values were not applied, and the game is in whatever map the engine opened.
Fix: fix the cause the message names; the log line before it has the engine’s details. Start no other map change while a load runs.
A load’s Issues list ClassMismatch: “was saved as … and is now …”
Cause: the object is now of another class than the save recorded and is no child of it: the Game Mode or Game State was replaced, an actor placed in the level or one of its components was replaced by one of another class, or a subsystem, registered object or actor class was renamed without a redirect. Its saved values were kept and not applied. A load with Keep Current Map in another map than the saved one does not report the Game Mode, the Game State or the world’s subsystems, which each map has its own of.
Fix: use the saved class again. For a renamed C++ or Blueprint class, add +ClassRedirects=(OldName="/Script/MyGame.OldName",NewName="/Script/MyGame.NewName") under [CoreRedirects] in Config/DefaultEngine.ini (a Blueprint’s is its _C path). For a class you replaced on purpose, a Replace Class step in your Migrations asset moves the saved values to it.
Saves and loads return Busy
Cause: a load runs, from its call until its saved values are set, or the world is in seamless travel. A save then would hold neither the old game nor the loaded one. Spread After Begin Play values give no Busy: a save asked for while they are set sets the rest first. An autosave into the autosave slots also ends with Busy when a load or a map change comes between its capture and its write.
Fix: save or load again once On Load Finished fired, or from Begin Play of the loaded map, where the values are set.
A save fails with Busy: “asked for from On Save Started”
Cause: a listener of On Save Started saved, which would start a save from every save without end.
Fix: save from On Save Finished, or on the next tick with a Delay.
On Load Finished fires, but the game did not load
Cause: On Load Finished fires for every load that ended, also one refused or failed before the map changed: Not Found, Damaged, Newer Version, Missing Map, and Busy when a load was asked for while another ran, which fires while that other load still runs.
Fix: branch on the Result’s Status with Switch on Rolly Save Status, and treat only Succeeded as a loaded game.
A load’s callback or Success pin never runs
Cause: a load with Open Saved Map changes the map, which destroys the old map’s objects, the one that called Load among them, such as the pause menu. Only a caller that lives through the map change, such as the Game Instance, gets the callback or the node’s Success.
Fix: bind On Load Finished in Begin Play of an object of the loaded map, or read Get Last Load Result there.
An object has its defaults after a load
Cause: its saved values were not applied: its class changed (ClassMismatch above), its What Saves category is off, it was registered under another name than when it saved, or it is the Level Blueprint of the saved map while the load used Keep Current Map in another map. A registered object takes its values only when it registers under its saved name.
Fix: register the object under the name it saved with, in its Begin Play or later: the values are set inside that call. Turn the category on, and use the saved class or a redirect.
A part load fails with NotFound, or its Issues list MissingPart
Cause: the slot’s save holds nothing of a part the scope names: a save of other parts only, a group name that differs in capital letters, or a save made before the objects joined the group, which holds them with the world.
Fix: use the group’s name exactly as the objects register with it. For a save made before the group existed, load World once, then save the group.
A load lists RejectedImport: “it was saved as”, “the asset registry knows”, “one load may load” or “bytes on disk”
Cause: the asset registry knows the saved path otherwise than the save names it: an asset of another class, such as a data asset replaced by a texture of the same name in a game update, or a path that is no asset, no object inside an asset and no Blueprint class. Or the save names more than 16,384 packages that are not loaded, or more than 1 GiB of them, which only an edited file does. Loading such a package would load whatever it holds, so it is not loaded.
Fix: none needed: the property that points at it loads empty. If a game update replaced or moved the asset, restore it or add a redirect to its new path (see Rename saved data without losing saves).
A part load’s Issues list PartNotKept
Cause: the slot’s save was made by another version of the game, the engine or a plugin than the save the last whole load read, such as a save made before an update. Its values applied to the objects that exist, but the game keeps one version’s records, so it does not keep the part’s: an object that registers after the load takes what the last whole load holds for it, and the next save keeps that for objects that are not there.
Fix: register the part’s objects before the part load. Or load the whole slot, or save it once with this version, so later part loads of it are kept.
-RollySaveLoad does nothing
Cause: a Shipping build with Project Settings > Plugins > Rolly Save > Testing > Command Line Load in Shipping off, which logs a warning; or the name could not be used or the slot did not load, which gives the setup error BadName or LoadFailed; or the switch reached only a client, which follows its server.
Fix: use a Development build, or turn Command Line Load in Shipping on for test builds only; check the name with rolly.save.list, and quote names with spaces: -RollySaveLoad="Slot 1".
The player cannot move for a moment after a load
Cause: Hold Players holds each player until the ground under its pawn has loaded: the cells within Hold Radius, an object of Ground Object Types within Ground Trace Distance below it, and for a client that level on its own machine.
Fix: lower Hold Radius, add your floor’s object type to Ground Object Types, or set Hold Players to Off or Hold Method to Events Only in Project Settings > Plugins > Rolly Save > Holding Players to handle it yourself (see Hold players until the ground has loaded).
Setup warning: “was released after Max Hold Time”
Cause: the ground had not loaded within Max Hold Time; the message names the test that failed: the cells, the ground below the pawn, or the client’s level, or that the player had no pawn, such as one destroyed during the hold.
Fix: follow the message’s fix.
The world waits Max Hold Time after a load before On World Ready
Cause: a player has no pawn after the load while its Game Mode gives it a pawn class, such as a match that has not started, so the world waits for the pawn, up to Max Hold Time.
Fix: start the match, or give the player its pawn, right after the load; set the player to spectate when it gets no pawn; or call Release Held Rolly Players when your game takes over the wait.
Data Validation warning: “Ground Object Types is empty”
Cause: Hold Until Ground is on and Ground Object Types lists no type, so the trace finds no ground and every hold that waits for ground lasts Max Hold Time (NoGroundTypes).
Fix: add your floors’ object types, such as WorldStatic and WorldDynamic, to Ground Object Types, or untick Hold Until Ground in Project Settings > Plugins > Rolly Save > Holding Players.
The pawn falls through the floor after a load or travel
Cause: Hold Players is Off, or After Loads for a travel; Hold Method is Events Only and nothing holds the pawn; Max Hold Time ended the hold; or the player joined after On World Ready, which Rolly Save does not hold.
Fix: set Hold Players to After Loads and Travel, hold the pawn yourself in On Player Held, raise Max Hold Time, or call Hold Rolly Player for a player that joins later once it has its pawn.
On World Ready never fires, or Wait for Rolly World Ready never continues
Cause: Max Hold Time is 0 and a player’s ground never loads, or its pawn never comes; another load or a travel started first, which ends the wait without the event, and Wait for Rolly World Ready called in the map that went ends without Ready; or On World Ready is bound on a client, where it never fires.
Fix: set Max Hold Time above 0; call Wait for Rolly World Ready from Begin Play of the loaded map’s actors, or from an object that outlives the map, such as the Game Instance, which continues in the next map; bind On World Ready on the server.
Saving actors
Setup error: “the Custom Save ID … so the actor saves under its name”
Cause: the Custom Save ID of the actor’s Rolly Save component is longer than 128 characters or holds a character it cannot hold, such as a space, #, |, :, / or a letter outside A to Z. Data Validation reports it in the editor too.
Fix: use 1 to 128 letters, digits, _, - and ., such as FrontDoor, or clear Custom Save ID.
Setup error: “both have the Custom Save ID”
Cause: two actors of one map have the same Custom Save ID, or IDs that differ only in capital letters. Neither can tell its saved state from the other’s, so both save under their names.
Fix: give each its own Custom Save ID in its Rolly Save component.
Setup warning: “the Custom Save ID … is not used, since”
Cause: the actor saves under an ID of another kind: a child actor saves through its Child Actor Component, a spawned actor under a GUID of its own, the Game Mode and the Game State by their roles.
Fix: clear Custom Save ID in its Rolly Save component.
Setup warning: “overrides Save Transform in its Rolly Save component, but its root … is Static”
Cause: the actor’s Rolly Save component ticks Save Transform, but a root that is Static or Stationary cannot move once its actor initialized, so its transform is not saved. Reported once per class in a session; without the tick, such actors are skipped silently.
Fix: set the root’s Mobility to Movable, or clear the Save Transform tick.
Setup warning: “a spawned … was not respawned, since the class”
Cause: the save holds a spawned actor whose class this build cannot spawn: it was renamed or deleted, or it is abstract, deprecated, not an actor class, or one the engine makes on every map load. The load’s Issues list it as RespawnRefused, and the next save keeps its values.
Fix: for a renamed or moved class, add a Replace Class step to your Migrations asset or a +ClassRedirects line under [CoreRedirects]. For a class that should no longer come back, add a Remove Records of Class step.
A spawned actor is missing after a load
Cause: it did not save: its class and components have no variable with SaveGame ticked, it implements no Rolly Save Interface and has no Rolly Save component, Respawn is off for it, it is registered under a name, it is a player’s own pawn (a local player’s saves with the player, see Save the player), or its class is one the engine makes on every map load. A child actor does not save when the actor of its Child Actor Component does not come back.
Fix: tick SaveGame on a variable of it, or add a Rolly Save component, and leave Respawn on.
A placed actor is back where the level put it after a load
Cause: it does not save: its class and components have no variable with SaveGame ticked, it implements no Rolly Save Interface and has no Rolly Save component, or a Save Rule or Actor Defaults sets its Saving to Never. Or it saves, but its root’s Mobility is Static or Stationary, or Save Transform is off for it, so it keeps the place the level gives it.
Fix: add a Rolly Save component to it (Add in its Details) and set its root’s Mobility to Movable. The outliner’s Rolly Save column says whether an actor saves and why (see Set up your project and test saving in the editor).
A spawned actor loads with a value its construction script sets
Cause: a load sets a spawned actor’s saved values before its construction script runs, so a construction script that sets a variable with SaveGame ticked overwrites the saved value.
Fix: set such a variable in Begin Play instead, and skip it there when Was Restored by Load is true.
An actor lost its saved state after it moved to another sublevel or was replaced
Cause: a placed actor saves under its level and name, and moving it to another sublevel, replacing it or copying it gives it another name.
Fix: fill in Custom Save ID in its Rolly Save component before you release: it saves under that ID wherever it is in the map.
A Rolly Save component’s overrides changed during play are gone after a load
Cause: the overrides are not saved: after a load the actor has the values set in the editor. Blueprint can read them but not set them for this reason.
Fix: set them in the editor. For state that changes in play, use variables with SaveGame ticked.
An actor has two of a component after a load
Cause: its Blueprint adds the component in Begin Play every session, and the load already created the saved one.
Fix: add the component in Begin Play only when Was Restored by Load is false.
A component that C++ or a Game Feature adds keeps its defaults after a load
Cause: a load creates only components that Blueprint, the details panel or a Rolly Save component added; the component’s creator makes this one, and it takes its saved values only when it appears under its saved name, the frame after it appears. A Game Feature action that gives components automatic names gives them another name in each session, and a component of another class than saved keeps its defaults (ClassMismatch). Until a matching component appears, its saved values are kept for the next save.
Fix: let Game Feature actions name their components after their class, or add such a component in the details panel or with an Add Component node if a load should create it. Code that reads the component’s saved values in its Begin Play reads them in On Rolly Save Loaded instead.
An attached actor is not attached after a load, and the Issues say its parent “is not there”
Cause: the parent it was saved on is gone, such as a placed parent destroyed after the save or one whose class cannot be spawned, so the actor goes where it was in the level when it was saved. A save made by an earlier version of Rolly Save holds only the transform relative to the parent: there the actor stays where it is, and a spawned actor spawned again starts at the world origin.
Fix: keep the parent from being destroyed while the actor should stay attached, or detach the actor first.
A load’s Issues list NotApplied: “its object is of class … now”
Cause: a component that an actor’s construction script makes, or a child actor, appeared only after its actor was spawned again, and it is now of another class than saved, whose variables the saved values do not read into. The saved values are kept for the next save.
Fix: give the component or child actor its saved class again, or, if you replaced it on purpose, add a Replace Class step to your Migrations asset.
A load’s Issues list DestroyedSinceSave
Cause: a load with Keep Current Map found a placed actor the save holds, destroyed after the save. Only loading its level makes a placed actor again, so it stays destroyed.
Fix: load with Open Saved Map to bring it back.
Setup warning: “the load removed …, which the save holds as destroyed, but it does not replicate, so clients still see it”
Cause: on a listen or dedicated server, a load removed a placed actor that does not replicate, so the server’s removal never reaches clients and they keep showing it. Reported once per class in a session.
Fix: tick Replicates in the actor’s Class Defaults, or clear Keep Destroyed in a Rolly Save component on it.
A crate drops its loot again when a load removes it
Cause: on a listen or dedicated server, a replicated placed actor that the save holds as destroyed runs Begin Play, End Play and Event Destroyed once before the load removes it, so clients see it go; a load with Keep Current Map runs End Play and Event Destroyed.
Fix: in those events, skip what a destruction in play does when Is Removed by Load is true.
Crates that came to rest fall or jitter after a load
Cause: Save Physics Sleep is off for them, so they come back as Start Awake says; or a body touching a moving one woke them.
Fix: tick Save Physics Sleep in Actor Defaults, a Save Rule or their Rolly Save component.
On Saved or On Rolly Save Saved does not run
Cause: the save failed, the object was destroyed before the file was written, or the level was only remembered as the player left it, which writes no file. The events run on the server or in a standalone game only.
Fix: check the save’s result. Put what must run when a level is left in On Pre Save, which runs then too.
On Rolly Save Loaded runs after Begin Play
Cause: with Keep Current Map, an actor spawned again runs Begin Play while it spawns, before its construction-script components and child actors have their values; and a component that its creator adds after the load gets its values the frame after it appears.
Fix: set up what depends on saved values in On Rolly Save Loaded or the Rolly Save component’s On Loaded, and skip it in Begin Play when Was Restored by Load is true.
Save Rules
A Save Rule does nothing
Cause: its Enabled is off; its Match has no class, interface or tag (setup error NoCondition); its Maps leave out this map, or its Except leaves the actor out; a rule of higher Priority, or the actor’s Rolly Save component, sets the same tick again; the component has Use Save Rules off or lists the rule in Ignored Rules; or the rule was made during this Play In Editor session, and rules are found when the game instance starts.
Fix: open the actor’s Rolly Save component, or add one: Effective Settings shows each value’s source and every rule that matches, with disabled and ignored ones dimmed. The rule editor lists its problems at the top and counts the open level’s actors it matches. Start Play In Editor again after making a rule.
A rule of a plugin mounted during play does nothing
Cause: rules are found when the game instance starts; a Game Feature, DLC or mod plugin mounted later brings rules nobody looked for.
Fix: call the Reload Save Rules node after mounting the plugin; its rules apply once it completes.
A gameplay tag rule misses Blueprint actors
Cause: a Blueprint actor keeps its gameplay tags in a variable, and Blueprints cannot implement the Gameplay Tag Asset Interface. Rules also see only the tags an actor has when it saves and loads: a respawned actor has its class defaults then.
Fix: name the variable, such as OwnedTags, in Project Settings > Plugins > Rolly Save > Gameplay Tag Variables, or match by Actor Tags.
An actor saves that should not
Cause: Actor Defaults, a Save Rule or its Rolly Save component sets Saving to Always, or it has a variable with SaveGame ticked, a Rolly Save component, a property saved by path or an attached Save Handler.
Fix: set Saving to Never in a rule that matches it or in its component. To keep one actor out of one rule, list the rule in its component’s Ignored Rules, or add an Except entry to the rule.
A value saved by path comes back, but nothing that depends on it updates
Cause: Rolly Save knows no setter for the property, and it has no C++ setter, so the load wrote the value and redrew the component without what a setter would also update, such as collision. Pick Properties marks such rows refresh only or written only.
Fix: pick a function in Apply With below the row in Pick Properties (the entry’s Setter), such as the plugin’s own Set function; or update what depends on it in On Rolly Save Loaded or the Rolly Save component’s On Loaded. For a C++ property of your own, give its UPROPERTY a Setter.
A value in Not Saved came back once
Cause: the save was made before the Not Saved entry, so it still holds the value, and a load restores it. The next save leaves it out.
Fix: none needed.
A load’s Issues list PathNotApplied
Cause: a value saved by path that the actor’s rules and component no longer pick: a rule changed, a Not Saved entry leaves it out, its component no longer has the class or tag the entry names, or the property is gone, renamed or of another type now.
Fix: none needed: the actor keeps its value, and the next save writes what is picked now. For a renamed property, change the entry’s Property to the new name and add +PropertyRedirects from the old name, so saves made before load the value (Rename saved data). For a value of a changed type, add a migration step that reads it with Get Path Value and writes it with Set Path Value.
A save’s Issues list PathLeftOut
Cause: a value saved by path holds an object a save cannot hold, such as a dynamic material instance the component made, so it was left out, and a load keeps the live value. For Override Materials, the whole value is left out while one slot of the mesh holds a dynamic instance, so a plain material your game set on another slot of that mesh is not saved either.
Fix: for a mesh’s dynamic material instances, attach the Material Parameters handler, which saves them (see Save materials, timelines, sequences, montages and sounds); make the mesh’s other changed slots dynamic instances too, or give a plain material its own mesh. For other objects, save what the object is made from instead, such as its parameters in variables with SaveGame ticked, and make it again in On Rolly Save Loaded.
A load’s Issues list PathKeptLive
Cause: a value saved by path holds an asset or a saved object that is missing or of another class now, so the actor keeps its live value rather than an empty one. The next save writes the live value.
Cause: the save holds an actor whose Saving is Never now, or a component that a Not Saved entry leaves out whole, so its saved state was not applied. The next save holds nothing of it.
Fix: none needed; set Saving otherwise or remove the entry to save it again.
An actor’s values arrive after its Begin Play
Cause: its Apply Timing is After Begin Play, from Actor Defaults, a Save Rule or its Rolly Save component, so a load that opens the map and a level’s return set its values once every actor’s Begin Play ran.
Fix: set Apply Timing to Before Begin Play where Begin Play should see the values, and use On Rolly Save Loaded for setup that needs them.
An actor’s saved values never come back
Cause: its Apply Timing is When Asked, so its values, its components’ and its attached handlers’ wait until the game calls Apply Saved Values for it; or an attached handler’s own Apply Timing is When Asked.
Fix: call Apply Saved Values with the actor once it has set itself up, on the server or in a standalone game. It returns false when nothing waits, such as in a new game.
A SaveGame tick made in Pick Properties is missing in the packaged game
Cause: the tick changed the Blueprint, but the Blueprint was not saved, or it did not compile (setup warning CompileFailed), so the cooked game has the old flag.
Fix: save the Blueprints the picker’s footer lists as unsaved, and fix the compile errors of a Blueprint CompileFailed names.
Pick Properties’ ticks cannot be changed
Cause: Play In Editor is running, which the banner at the top says; or the row is locked: a rule that applies later picks or leaves it out, or its Blueprint is in a plugin that cannot be written, so its variables save by path.
Fix: stop Play In Editor. For a locked row, open the rule its From link names, or pick the variable by path.
Saving the player
The player’s pawn starts at the Player Start after a load
Cause: What Saves > Local Players is off, the pawn’s Save Transform is off in Actor Defaults or its Rolly Save component, the player joined from another machine (only local players and a listen server’s host save), or the pawn is of another class than saved (ClassMismatch in the load’s Issues). After travel, and after a load with Keep Current Map in another map than the saved one, this is expected: the saved place belongs to the saved map.
Fix: turn Local Players and Save Transform on, and keep the pawn class, or add a Replace Class step to your Migrations asset.
The player is out of the vehicle after a load
Cause: the player’s own pawn saves with the player and the vehicle as an actor of its own; a load gives the player the Game Mode’s new pawn, and the vehicle comes back with nobody in it.
Fix: save a reference to the vehicle in a variable with SaveGame ticked on the player controller, and call Possess with it in the controller’s On Rolly Save Loaded (see Save the player).
The player’s health or gold is back at its default after travel
Cause: travel never applies the player’s saved state; the Game Mode spawns a new pawn in each map.
Fix: keep such values in the game instance, in an object registered with Register Object for Saving, or in a player state that seamless travel carries on.
Remembering levels
A level is back as the player left it after a restart or a new game
Cause: Remember Levels keeps a level when the player leaves it, also when the map opened next is the same map.
Fix: call Clear Loaded Game when the player starts a new game, or Forget Level for the level before the restart opens it again.
A level starts as designed when the player returns
Cause: Remember Levels is off, the level was forgotten (Forget Level, Forget All Levels, Clear Loaded Game), a load ran since, or the level was left by a load’s own travel, which keeps nothing. When keeping the level fails, the log says “the level was not remembered” with the reason.
Fix: tick Project Settings > Plugins > Rolly Save > Levels > Remember Levels, and look for Forget Level calls, such as in the level’s Begin Play.
Setup error: “Forget Level was given no level, so nothing was forgotten”
Cause: the Level pin of Forget Level is empty.
Fix: pick the level in Level, or call Forget All Levels.
Returning to a level by seamless travel pauses as the level opens
Cause: the level’s kept state names assets that were still loading when its actors initialized, such as data assets only its saved variables point at; the return waits for them, since seamless travel opens the level in one frame and an asset missing then would load as empty.
Fix: give the travel a transition map (Project Settings > Maps & Modes > Transition Map), whose loading gives those assets time to load, or have the map itself refer to the assets it always needs.
Saves grow with every map the player visits
Cause: each level the player left is kept, and every save holds every kept level.
Fix: call Forget Level for levels the player cannot return to, or untick Remember Levels if travel should open levels as designed.
Streamed levels and World Partition
In Play In Editor, Begin Play of an actor in a streamed level reads its default values
Cause: Play In Editor runs construction scripts on a streamed level as it first becomes visible, which resets Blueprint variables that are not Instance Editable; Rolly Save sets their saved values again after the level’s Begin Play. Packaged games set them once, before Begin Play.
Fix: none needed; test Begin Play logic that reads saved variables of streamed actors in a packaged build.
Setup warning: “was loaded under a name the engine numbers anew each session”
Cause: Load Level Instance without an Optional Level Name Override names the level with a counter that changes each session, so its actors would get other IDs next session.
Fix: pass an Optional Level Name Override that is the same each session, such as Cellar_1, or place the level as a Level Instance actor.
Loot or another spawned actor is missing until its level streams in
Cause: a spawned actor comes back into the level it lived in, its owner’s level when it has an owner, and for a World Partition cell into the cell at its saved place once that cell has streamed in, never above a floor that has not loaded.
Fix: none needed; spawn actors that must exist everywhere into the persistent level, such as with the Game State as owner.
Changes made in a level or World Partition cell are gone after it streams out and in, or after a load
Cause: Remember Streamed Levels is off, so a level that unloads is forgotten and a save made after holds nothing of it; the level’s name changes each session (setup warning); or its actors’ Saving is Never.
Fix: turn on Remember Streamed Levels in Project Settings > Plugins > Rolly Save > Levels; give the level a stable name.
A forgotten level comes back as it was, or a Reset Area does not reset a level that streamed out and in
Cause: the engine showed the level again as the same object: it only turned invisible, or streamed in again before garbage collection took it, so its actors kept their state. Remember Streamed Levels off forgets the level’s records, but its actors were never loaded again.
Fix: unload the level rather than hide it, such as with Unload Stream Level, so the engine loads it again; garbage collection after a level streams out ends the reuse.
Setup warning: “streamed in before the assets its saved values name had loaded”
Cause: Keep Assets of Unloaded Levels is off, or the assets kept for unloaded levels reached 16,384 packages or 1 GiB, so the level’s values waited for an asynchronous load.
Fix: turn the setting on; past the limit, save fewer different assets in streamed actors’ values.
Actors inside a level instance lost their saved state
Cause: they save under the level instance actor’s ID, which renaming, replacing or copying that actor changes.
Fix: give the level instance actor a Rolly Save component with a Custom Save ID before release.
A level instance your game unloaded is loaded again after a load
Cause: Save Level Instance State is off for it; it is embedded in a World Partition map or is a Packed Level Actor, which have no such state; or you look on a client, which keeps its instances loaded in this version.
Fix: tick Save Level Instance State, and set the instance’s Level Behavior to Standalone.
Setup warning: “cannot change which level a level instance shows”
Cause: your game gave a level instance another level with Set World Asset, which the engine’s Level Instance actor has only in editor builds, so a packaged game keeps the level it has and does not set the saved state of its actors.
Fix: none needed if you changed the level on purpose. To swap levels in a packaged game, use a level instance class whose C++ code sets its level, or load the level with Load Level Instance under a name.
The log says LevelInstanceChanged: “and the saved state of its actors was made in”
Cause: a level instance shows another level than the one the saved state of its actors was made in, such as after an update gave it another level, or after its level was renamed or moved without a Core Redirect. Those records leave the loaded game, and its actors start as designed.
Fix: none needed after an update that changed the level. For a renamed or moved level, add a Core Redirect from its old path (see Rename saved data without losing saves).
Rooms your game loaded with Load Level Instance are missing after a load
Cause: they were loaded without an Optional Level Name Override (setup warning LevelNameNotStable), Save Run-Time Levels is off, the game set them to unload before the save, or a level could not be loaded again (setup warning DynamicLevelNotLoaded).
Fix: pass a name that is the same each session, such as Cellar_1, and keep Save Run-Time Levels on.
Setup warning: “with Load Level Instance was not loaded again, since”
Cause: the level is gone or renamed without a Core Redirect, its streaming level class does not load, or Load Level Instance refused it; the log’s LogLevelStreaming line says why. The saved state of its actors waits, and saves keep the level.
Fix: restore the level or class, or add a Core Redirect for it.
Setup warning: “levels your game loaded with Load Level Instance under a name, above 1,024”
Cause: the map has more such levels than a save holds; the last by name are not saved.
Fix: unload levels the player cannot return to, or turn off Save Run-Time Levels and load them yourself.
The log says “LoadLevelInstance called with a name that already exists” after a load
Cause: Rolly Save loaded the level again as the load set the map’s values, before your Begin Play loads it under the same name.
Fix: find the level with Get Streaming Level instead of loading it, or turn off Save Run-Time Levels.
Data Layers are back at their start states after a load
Cause: Save Data Layers is off; the layer is in Data Layers Not Saved; its Load Filter is Client Only; or, with Changed Layers, the layer was in its start state when the game saved, and a load sets a layer its save does not mention back to that state.
Fix: turn on Save Data Layers in Project Settings > Plugins > Rolly Save > Levels, or remove the layer from Data Layers Not Saved.
Setup warning: “could not set the Data Layer”
Cause: the layer is no runtime layer any more, or only clients may change it on a server (StateRefused).
Fix: set Data Layer Type to Runtime and Load Filter to None or Server Only in the layer, or list it in Data Layers Not Saved.
Instances and foliage
Harvested trees or bushes are back after a load
Cause: Instances Mode is Off for their actor, as by default; Components or Meshes leave the component out; the component holds more instances than Max Instances per Component (setup warning TooManyInstances); they are landscape grass, which is never saved; or the harvest happened on a client.
Fix: set Instances in Project Settings > Plugins > Rolly Save > Actor Defaults or in a Save Rule whose Match lists the class Instanced Foliage Actor, and check its Components and Meshes; paint plants players change with the Foliage tool; harvest on the server (see Save harvested foliage and instanced meshes).
Setup warning: “has … instances, above Max Instances per Component”
Cause: one component holds more instances than Max Instances per Component, so none of their changes save.
Fix: raise Max Instances per Component in Project Settings > Plugins > Rolly Save > Actor Defaults, or spread the instances over several components.
Setup warning: “instance changes to save, more than the 1,048,576 one component’s save holds”
Cause: one component’s save would hold more instance changes than the save format takes, as a Whole List of more than 1,048,576 instances does.
Fix: spread the instances over several components, or set Mode under Instances to Changes so only what players change saves.
A load’s Issues list InstancesNotMatched
Cause: the level changed since the save: an instance moved past Match Tolerance, foliage was repainted, or the foliage grid size changed, which renames World Partition foliage actors.
Fix: raise Match Tolerance, or undo the change. Untick Keep Unmatched to drop such changes at the next save.
Instances a construction script places come back changed or doubled after a load
Cause: the script places them at random, so the level’s design differs each session and saved changes match nothing.
Fix: use a Random Stream with a fixed seed, or set Instances to Whole List for that actor.
Instances double after each load
Cause: code adds instances at every start after the actor’s Begin Play, such as on a timer or in On Rolly Save Loaded; the load set the ones it added before, and it adds them again. Instances Begin Play itself adds are part of the design and come back once.
Fix: check Was Restored by Load before adding, or set Instances to Whole List for that component.
Instances of a component your game added during play are gone after a load
Cause: its actor’s Instances Mode is Off, or Components or Meshes leave it out; or your C++ code makes the component with New Object, which a load does not make again.
Fix: check the actor’s Instances settings; make the component again in your code before the load applies, or add it with Add Instance Component so a load makes it.
Setup warning: “custom data values per instance, more than the 256 a save holds”
Cause: the component’s Num Custom Data Floats is above 256, so a save holds only the first 256 values of each instance.
Fix: set Num Custom Data Floats to 256 or fewer.
Setup warning: “hold a place or custom data value that is not a number a save holds”
Cause: game code gave those instances a transform or custom data value that is not finite, such as one divided by zero, so their changes are left out of saves.
Fix: find where your game sets them and keep the values finite.
Your data for an instance, such as wood left, belongs to another instance after a load
Cause: indices change as instances are removed.
Fix: keep the data under the key Get Rolly Instance Key gives.
Setup warning: “saves the instances of …, so none of them are saved”
Cause: a Save Rule’s or Rolly Save component’s Instances take none of the actor’s components; the message names why.
Fix: follow the message’s fix.
Effective Settings says “Takes no component”
Cause: the actor’s Instances take none of the components in its Components panel; the line names why, as the setup warning “saves the instances of …, so none of them are saved” does while playing: Components is Foliage and PCG Output on an actor with neither, Meshes lists none of its meshes, or it has no instanced component.
Fix: set Components to Every Instanced Mesh, add the meshes to Meshes or empty it, or take Instances out of the source that sets them. A component your construction script or game adds is not counted there but saves while playing (see Save harvested foliage and instanced meshes).
The Gameplay Debugger reads “0 of 2 components tracked”
Cause: Components or Meshes leave those components out, or your game added them during play: a component Rolly Save did not meet as its level loaded is tracked from the next save or load on.
Fix: check Components and Meshes in the actor’s Effective Settings or its Save Rule; for components your game adds, save once, or add them in the construction script.
Setup warning: “changed them without Add Instance”
Cause: code wrote instance data directly, which sends none of the engine’s instance events, so Rolly Save matched the instances to the level’s design by place.
Fix: change instances with the functions the message lists.
Setup warning: “custom data values each, and it now has”
Cause: Num Custom Data Floats of the component changed since the save, so only the first values of each saved instance were set.
Fix: set it back, or untick Save Custom Data under Instances if the values no longer matter.
Setup warning: “were made for …, and it now shows”
Cause: the component shows another mesh than when the save was made, so its saved instance changes were not set; or a level update added or removed a foliage type, which renumbers the foliage actor’s components.
Fix: none needed when you changed the mesh on purpose; set it back to bring the changes back while Keep Unmatched is on. Add new foliage types after the shipped ones and keep the old ones.
A load’s Issues list InstanceSectionKept
Cause: a later version of Rolly Save wrote the component’s instance changes, so this version keeps them unread and does not set them.
Fix: none needed: every later save writes them back unchanged beside the component’s own changes, and that version reads them.
A load’s Issues list InstanceSectionDropped
Cause: a component’s record held two instance sections that did not apply, such as changes made for two other meshes, so the older was dropped.
Fix: none needed when you changed the mesh on purpose; keep a component’s mesh, or set it back before the next save, to keep its changes.
Clients see harvested trees again after a load
Cause: the engine does not replicate instanced meshes’ instances, and Rolly Save sets them on the server only.
Fix: send harvests to clients yourself, such as a multicast of the instance’s key.
Removed instances never regrow
Cause: Regrow After, and the mesh’s entry of Regrow After per Mesh, are 0; Reset Clock is Game Clock without Game Clock Class (setup warning “counts on the game clock”); a Reset Area set to Never with Reset Instances on holds them; the actor’s Instances are Whole List; or play time stands still while the game is paused.
Fix: set Regrow After under Instances; pick your Game Clock, or set Reset Clock to Play Time; move the area, or untick its Reset Instances. Instances a Never area held regrow by their kept time once the area is gone or turned off with Set Enabled.
Trees never regrow while the player stays
Cause: Reset Clock is Game Clock: Rolly Save reads your clock only at saves, leaves, builds and Check Rolly Regrowth, so it cannot tell when your game time reaches a due time.
Fix: call Check Rolly Regrowth after your clock moves, such as after the player slept.
Setup warning: “has more instance changes than a save has room for”, and InstancesLeftOut in the save’s Issues
Cause: with this component’s changes the file would pass its bound of 8,388,608 instance entries, so saves leave them out and a load does not bring them back: a component with a level design shows that design, one that started without one keeps the instances it holds; the rest of the save holds. Most often Instances were turned on during play: a component the settings take only after its level was built has no design, so each save holds all its instances.
Fix: turn Instances on before levels load, as Actor Defaults or a Save Rule that applies from the start; list the harvestable meshes in Meshes. The next session copies the designs and saves only changes.
Memory grows once Instances are on
Cause: each saved instance holds about 56 bytes, plus 4 per custom data value, while its level is loaded; 8 more once instances were removed or added, and about 20 more after the first key lookup.
Fix: list the harvestable meshes in Meshes, or set Components to Foliage and PCG Output.
Engine state
A door, platform or cutscene is back at its start after a load
Cause: no Save Rule or Rolly Save component attaches the Timelines or Level Sequence handler to the actor; Components leaves the timeline out; or your C++ made the timeline during play without a name, so the engine numbered it and the load cannot find it (HandlerTargetMissing).
Cause: no rule or component attaches Material Parameters; your game set a plain material with Set Material, which is no dynamic material instance; or Parameter Names leaves the parameter out.
Fix: attach Material Parameters; for Set Material, pick Override Materials of the mesh in Pick Properties; add the parameter to Parameter Names or empty the list.
Every lamp saves after Material Parameters is attached
Cause: Begin Play sets parameters on each lamp’s dynamic material, so each lamp holds state.
Fix: set those values in a material instance asset instead, and make dynamic instances only where your game changes them.
A montage starts over, or an idle montage plays, after a load
Cause: no Montages handler; the montage was blending out at the save, which saves nothing; Stop Other Montages is off, so Begin Play’s montage goes on; or the montage was made during play with Play Slot Animation as Dynamic Montage, which is no asset.
Fix: attach the Montages handler and tick Stop Other Montages.
Music starts from its beginning after a load
Cause: it is a MetaSound or a sound wave that cannot seek (setup message NotSeekable), or a sound cue with random or concatenated nodes.
Fix: play music that must resume as a sound wave that seeks, and check it in a packaged build.
Music resumes a little early or late
Cause: Position is Estimated and the pitch changed while it played, or it is a UI sound that plays through pauses.
Fix: set Position to Reported in the Audio handler.
A sound stopped at the save plays after a load
Cause: Stop Saved Stopped is off, so Auto Activate plays it as the actor loads; or no Audio handler is attached.
Fix: attach the Audio handler and tick Stop Saved Stopped.
Events of a sequence or timeline fire again, or never, after a load
Cause: Fire Events decides whether the event keys between the start and the saved time fire as the handler sets the time.
Fix: set Fire Events in the Timelines or Level Sequence handler.
Characters a cutscene moved snap back when it ends after a load
Cause: Restore State returns them to their state at the load, not to their state before the cutscene.
Fix: add a save block while a cutscene plays (see Block saving during a fight), or untick Restore State on the Level Sequence Actor.
A sequence started with Create Level Sequence Player plays on and cannot be stopped after a load
Cause: your variable to the actor Create Level Sequence Player made is gone after the load.
Fix: place a Level Sequence Actor and play it instead.
Data Validation: “which it does not offer”
Cause: a Timelines, Level Sequence, Montages or Audio handler has Apply Timing Before Begin Play, which needs registered components, and a streamed level has none before Begin Play (TimingNotOffered). It applies After Begin Play.
Fix: pick After Begin Play or When Asked.
Data Validation: “Global Handlers lists the … handler”
Cause: an engine state handler saves the actor it is attached to, and a Global Handler has none (GlobalNotAllowed); it is skipped.
Fix: remove it from Global Handlers and attach it in a Save Rule or Rolly Save component.
Setup warning: “above the … the … handler saves”
Cause: an actor has more components, material slots, parameters on a slot or active montages than a save holds (TooMany); those past the limit are not saved.
Fix: follow the message’s fix: narrow Components, list the parameters your game changes in Parameter Names, or none needed for montages, of which the first 32 save.
A load’s Issues list HandlerTargetMissing
Cause: the actor no longer has a component, material slot, parameter, timeline, montage or sound the save names, as after an update renamed it, or the save names a montage made during play, which is no asset; it keeps its design.
Fix: none needed after a content change: the next save drops them.
A load’s Issues list HandlerValueSkipped or HandlerEntriesDropped
Cause: the save holds a value no target takes, such as a number that is not finite, a timeline play rate faster than 1,000 either way, a material parameter’s layer index below 0 or a second entry for one target, or more entries than a save holds, as an edited or damaged save can.
Clients see doors closed, materials and sounds as designed after a load
Cause: this version sets engine state on the server; replicated timelines and sequence actors with Replicate Playback reach clients, the rest does not.
Fix: tick Replicated on the timeline or Replicate Playback on the Level Sequence Actor.
The log says the world “has no audio device”
Cause: the world plays no sound, as a dedicated server’s, so the Audio handler keeps the sound states it loaded and sets none (NoAudioDevice).
Fix: none needed: each player’s machine plays its own sounds.
A sound or sequence your game set when it spawned an actor is back to its class’s after a load
Cause: Rolly Save notes what a spawned actor holds after its spawn as its design and saves an asset only when it differs; a load spawns the actor again from its class.
Fix: set the asset after the spawn, such as with Set Sound or Set Sequence, so the save holds it.
Data Validation warning: “attaches the … handler, but …, so it saves nothing”
Cause: the engine state handler finds nothing to save on the actor or on the classes Match lists (NoTargets): Material Parameters without a mesh or decal, Timelines without a timeline, Level Sequence on another actor than a Level Sequence Actor, Montages without a skeletal mesh, Audio without an audio component that stays, Blackboard, StateTree or Gameplay Abilities on a controller, Blackboard on an actor that is no pawn, StateTree without a StateTree component on the actor or its AI Controller Class (with Include AI Controller off, on the actor itself), Gameplay Abilities without an Ability System component on the actor or its AI Controller Class (with Include AI Controller off, on the actor itself), such as a character whose Ability System Interface returns its Player State’s component, or Components leaving out every component of the handler’s kind. A rule’s check counts the listed classes only, and their child classes may add components: its message ends “their child classes were not checked”, except when the classes are controllers.
Fix: follow the message’s fix: match the actors that have such components (for AI, the pawns, under which AI state saves; for a player’s ability system on the Player State, the Player State class), change Components, tick Include AI Controller, or remove the handler. A rule whose child classes add the components saves them: no change is needed there (see Check your save setup).
Effective Settings says a handler “finds nothing”
Cause: as for NoTargets above, for the component’s actor; the line’s tooltip holds the problem and its fix.
Fix: follow the tooltip’s fix.
Parameter collection values are back at their defaults after a load
Cause: the collection is not in Project Settings > Plugins > Rolly Save > Levels > Saved Parameter Collections; or the values were set in another map, since each map keeps its own.
Data Validation error: “Saved Parameter Collections lists”
Cause: an entry is empty, cannot be loaded (renamed or deleted) or is listed twice, so it is ignored (BadCollectionEntry); or the list holds more than 64 collections, so those after the 64th are not saved (TooManyCollections).
Fix: pick the collection again or remove the entry; keep 64 or fewer.
A load’s Issues list CollectionParameterMissing
Cause: the save holds values of parameters the collection no longer has, as after an update removed or renamed them; they are not set.
Fix: none needed after a content change: the next save drops them.
AI
An AI forgets what it knew after a load
Cause: no Blackboard handler is attached to the pawn (a rule that matches AI controllers saves nothing of them); Keys or Not Saved Keys leave the key out; or the handler waits for the AI (setup warning AINotReady).
An AI controller’s own Blackboard observer misses a load’s values
Cause: the controller runs a Behavior Tree and the Blackboard handler’s Restart Logic is on, the default: while the tree restarts, no observer is told of the loaded values, since the tree reads them all again. A controller that runs no tree hears them.
Fix: turn Restart Logic off in the Blackboard handler: the running tree goes on and every observer hears the keys that changed.
Setup warning: “waits, since it has no AI controller”
Cause: the pawn has no controller: your game spawned it, and the default Auto Possess AI gives spawned pawns none; its Auto Possess AI is Disabled; or Spawn Missing Controller is off for a pawn a load spawned again.
Fix: possess it in your game and call Apply Saved Values for it, set Auto Possess AI to Placed in World or Spawned, or tick Spawn Missing Controller.
Setup warning: “waits, since its AI controller … has no blackboard”
Cause: the controller runs its Behavior Tree later than its On Possess and Begin Play, such as after a cutscene.
Fix: run the Behavior Tree in On Possess or Begin Play, or set Apply Timing to When Asked and call Apply Saved Values once it runs.
Setup warning: “waits, since its StateTree … is not running”
Cause: the tree starts after the handler applies: Start Logic Automatically is off, or the StateTree AI component of a pawn your game spawned could not start at its controller’s Begin Play, which comes before the controller has its pawn.
Fix: start the tree before the handler applies, or set Apply Timing to When Asked and call Apply Saved Values after Start Logic; for a StateTree AI component, call Start Logic in the controller’s On Possess.
Setup warning: “came back from the save without a controller”
Cause: a pawn the load spawned again has no AI Controller Class, so Spawn Missing Controller gives it none (ControllerNotSpawned).
Fix: set AI Controller Class on its class, or possess it in your game and call Apply Saved Values for it.
Setup warning: “which reads its own bytes, and a save cannot hold it”
Cause: a Blackboard Struct key or a StateTree parameter holds a struct whose code writes its own bytes (KeyLeftOut, ParameterLeftOut); the save leaves it out and succeeds.
Fix: use a struct of plain variables, list the key in Not Saved Keys, or untick Save Parameters.
A Blackboard Struct key has its default after a load
Cause: the struct’s members do not have SaveGame ticked, and a struct saves only those that do.
Fix: tick SaveGame on each member that saves (a Blueprint struct: each variable’s advanced options).
An AI’s StateTree starts at its root after a load
Cause: Save Active States is off; the tree was not running when the handler applied; an update removed or moved the state (HandlerTargetMissing); or the state belongs to a linked override your game added during play.
Fix: tick Save Active States, and start the tree before the handler applies.
A StateTree parameter is back at its default after a load
Cause: the parameter is not set on the component (its override is not ticked in the component’s StateTree reference), so the engine gives it the tree’s default whenever it reads it; or Save Parameters is off.
Fix: tick the parameter’s override on the component and set its value there.
A Behavior Tree task starts again after a load
Cause: where a Behavior Tree was is not saved; Restart Logic restarts it with the saved keys.
Fix: none needed; untick Restart Logic to let the running tree go on with the keys.
The log warns BlackboardChanged after a load
Cause: the controller’s blackboard is another asset than the saved one, and neither is the other’s parent. The AI handlers set their values a tick after the load reported, so the line goes to the log, not into the load’s Issues.
Fix: none needed after an update; if your controller changes blackboards after it possesses the pawn, set Apply Timing to When Asked and call Apply Saved Values after the change.
The StateTree and GameplayStateTree plugins are on after installing Rolly Save
Cause: Rolly Save’s StateTree support needs them, and StateTree brings PropertyBindingUtils (Beta).
Fix: none needed.
Gameplay Ability System
Effects or abilities are doubled after a load
Cause: your game applies or gives them again after the Gameplay Abilities handler applied, such as in its own On Rolly Save Loaded or a frame later; what it gives in Begin Play or as it possesses the pawn is matched instead.
Fix: add the asset tag Rolly.Save.NotSaved to such effects and abilities, or list them in Not Saved Effects and Not Saved Abilities, so your game gives them itself (see Save Gameplay Ability System state).
A character’s attributes, abilities and effects are not saved
Cause: its Ability System Component is on the Player State, and the rule that lists the Gameplay Abilities handler matches only the character, whose Ability System Interface returns the Player State’s component; the handler saves the components an actor owns. The rule’s Data Validation warns (NoTargets), and Effective Settings says the handler finds nothing.
Fix: attach the handler in a rule that matches your Player State class.
Data Validation error: “… in the Gameplay Abilities handler of … lists …, so the entry is ignored”
Cause: an entry of one of the handler’s lists means nothing (BadEntry): it is empty; its class cannot be loaded or is of another kind, such as an effect in Not Saved Abilities; it is listed twice; its attribute is gone from its attribute set; Not Saved Attributes lists an attribute Attributes lists too; or its gameplay tag was renamed or removed from the project. An Attributes list that holds only an empty entry saves no attribute.
Fix: follow the message’s fix: pick the class, attribute or tag again, keep the attribute in one list, or remove the entry.
An AI bot’s abilities and effects are not back after a load
Cause: its Ability System Component is on its AI controller or that controller’s Player State, and Include AI Controller is off, or the rule matches the controller, which never saves; or the bot has no AI controller yet (setup warning AINotReady).
Fix: attach the handler to the bot’s pawn with Include AI Controller on; possess bots your game spawns and call Apply Saved Values for them.
A damage or heal over time executes once more after a load
Cause: the effect has Execute Periodic Effect on Application, which runs once on the tick after the effect is applied again, and its period starts again at the load.
Fix: none in the save; untick Execute Periodic Effect on Application where the extra execution matters.
The log warns EffectNotApplied after a load
Cause: the engine refused a saved effect as it applied it again: its application requirements, an immunity of the target or a chance to apply below 100 %.
Fix: none needed when the refusal is what your effect asks for; otherwise save the tags its requirements read as loose tags, or give the target the tags before the handler applies.
Attribute values are left out with HandlerTargetMissing for an attribute set
Cause: the component lacks a set the save holds values for, such as one your game adds when an item is equipped.
Fix: tick Add Missing Attribute Sets, or add the set before the handler applies, such as in Begin Play.
A player’s abilities are doubled after seamless travel
Cause: seamless travel carries the Player State with its Ability System Component, and your game gives its start abilities again in the new map; Rolly Save applies nothing at travel.
Fix: give start abilities only when the component lacks them.
Setup warning: “The variable … of the ability … is a …, which a save cannot hold”
Cause: a variable with SaveGame ticked on an ability holds a struct whose code writes its own bytes, or a type a save cannot hold: a weak, lazy or interface reference, a delegate or an optional, also inside an array, set or map, or a C++ fixed-size array (VariableLeftOut). The save leaves it out and succeeds.
Fix: use a struct of plain variables, an object or class reference, or a TArray, untick SaveGame on the variable, or untick Save Ability Variables.
The log warns “No GameplayCueNotifyPaths were specified” once a session
Cause: the Gameplay Ability System warns once its first Ability System Component registers in a project without gameplay cue paths; any project that uses Ability System Components gets it, with or without Rolly Save.
Fix: add +GameplayCueNotifyPaths=/Game/YourCues under [/Script/GameplayAbilities.AbilitySystemGlobals] in your project’s DefaultGame.ini.
The Gameplay Abilities and Data Registry plugins are on after installing Rolly Save
Cause: Rolly Save’s Gameplay Ability System support needs Gameplay Abilities, which brings Data Registry (Beta); both stay unused until a Save Rule lists the handler.
Fix: none needed.
Destruction
A broken collection stands whole after a load
Cause: Destruction is Off for its actor; the collection changed since the save (the load’s Issues list GeometryCollectionChanged); the restore failed (setup warning “could not be restored as saved”); or, on a client, Enable Replication is off on the collection, or Enable Abandon After Level leaves its pieces to each client.
Fix: set Destruction in Actor Defaults, a Save Rule or the actor’s Rolly Save component; follow the warning; on the geometry collection component, tick Enable Replication and untick Enable Abandon After Level under Network (see Keep broken destructibles broken).
Setup warning: “was saved broken from …, so it stands whole”
Cause: the collection’s asset, piece count, hierarchy or rest places differ from the save’s, as after a new fracture, so its saved pieces are kept and not set; the warning names which.
Fix: none needed when you changed the collection on purpose: the next saves keep the pieces until it breaks again. Set the saved asset back to restore them.
Setup warning: “could not be restored as saved”
Cause: the warning names the reason: the collection’s component does not simulate physics; it has no physics state, as without collision or in a world without physics; or its physics state holds another number of pieces than the save, as after its asset changed during play.
Fix: tick Simulate Physics on the component, or set Destruction to Off for collections that never break; give it collision; call Reset State on the component after you change its rest collection during play.
Setup warning: “broke, but … so its pieces are not saved”
Cause: the collection has more than 65,536 pieces, the most a save holds of one collection; its physics state holds another number of pieces than its rest collection, as after the asset changed during play; or it has no physics state, as after Destroy Physics State. It stands whole after a load.
Fix: fracture it into fewer pieces, or into several collections of at most 65,536 pieces each; call Reset State on the component after you change its rest collection during play; keep its physics state while it is broken.
Setup warning: “has no room for its pieces”, and GeometryPiecesLeftOut in the save’s Issues
Cause: with this collection’s pieces the file would pass its bound of 4,194,304 pieces, so saves leave them out and it stands whole after a load; the rest of the save holds.
Fix: fracture your collections into fewer pieces, or set Destruction to Off for those whose broken state does not matter.
Effects on clients play again after a load
Cause: with Enable Replication on, each client releases the restored pieces as the engine replicates any break, and its On Chaos Break Event fires for them. Rolly Save runs no code on clients and cannot stop those events.
Fix: keep effects that must not repeat off the break event on clients, or play them only when a replicated variable your game saves, such as Collapsed, says the break is new (see Keep broken destructibles broken).
Setup warning: “holds a broken piece whose place is not finite”
Cause: the physics flung a piece to no place at all, as after an explosion of extreme force; the save holds that piece in its cluster.
Fix: none needed: the piece comes back in its cluster after a load, and the rest of the collection as saved.
Setup warning: “has Enable Replication and Enable Abandon After Level on”
Cause: on a listen or dedicated server, the server turns off each piece of the collection past Replication Abandon After Level once it breaks and leaves it to each client, so saves keep no break past that level and clients show none of a load’s restore. The editor’s check Replicated Collections That Abandon Pieces says the same of each such collection whose actor’s Destruction is not Off when you save or check the map.
Fix: untick Enable Abandon After Level under Network on the geometry collection component.
A load’s Issues list DestructionSectionKept
Cause: a later version of Rolly Save wrote the collection’s pieces with flags this version does not know, so the load keeps them unset and the collection stands whole.
Fix: none needed: saves write the pieces back unchanged, so the later version restores them. Load the save with that version.
Pieces that broke off joined come back apart
Cause: Destruction is Broken Pieces, which brings joined pieces back as separate resting pieces.
Fix: set Destruction to Exact Groups.
Clients keep pieces apart that a load put back together
Cause: the load was in place, onto a collection that broke further since the save, and a client cannot join its pieces again.
Fix: none in this version: a client shows the saved state once the collection is made again, as when its level loads again.
A destroyed actor still shows from far away
Cause: Hide Destroyed in HLOD is off; its HLOD is not built as destructible; the actor has a Custom Save ID or stands in a level instance; or it was renamed since the HLOD was built.
Fix: turn on Hide Destroyed in HLOD in Project Settings > Plugins > Rolly Save > Levels; build its HLOD layer as destructible (see Keep broken destructibles broken); build the HLODs again after renaming actors.
An actor a load brought back is missing from the distant view
Cause: its HLOD stayed loaded, and the engine raises no actor it hid.
Fix: none needed: the actor shows once its HLOD registers again, as when the HLOD’s cell loads again.
PCG
A PCG forest grows back when the player walks away and returns
Cause: Instances is Off for the actor that holds the PCG component, as by default, or Meshes leaves the forest’s meshes out; or the graph spawns them on the GPU (setup warning “spawns … on the GPU”); or the cell’s output is only Instanced Skinned Mesh components.
Fix: set Instances in Actor Defaults, a Save Rule or that actor’s Rolly Save component (see Save PCG worlds); for partitioned output, on the actor that holds the original PCG component, such as the PCG Volume. For a run-time cell of skinned meshes alone, such as a crowd, have the graph spawn a static mesh in the cell too, or keep the crowd’s state in your own variables.
A changed seed or graph parameter is back at its placed value after a load
Cause: PCG Values is Off for the actor; Regenerate PCG is Never, so the output still shows the old values; the generation failed (setup warning “did not generate again after the load”); or the value is one the graph reads elsewhere, such as an actor’s property.
Fix: set PCG Values to Changed Values, and Regenerate PCG to When Values Changed; save values a graph reads elsewhere as variables of their own.
A PCG component generates twice after a load
Cause: Regenerate PCG is Always and your game generates the component after the load too, such as in On Rolly Save Loaded.
Fix: set Regenerate PCG to When Values Changed, or leave the generation to your game with Never.
Clients show the placed seed and the unharvested output after a load
Cause: Rolly Save sets PCG values and output changes on the server only; PCG and the engine replicate neither.
Fix: send what clients need yourself, such as a multicast event that sets the seed and calls Generate Local.
Setup warning: “spawns … on the GPU”
Cause: the graph’s spawner runs on the GPU, where no instances exist on the CPU, so changes to them are not saved.
Fix: untick Execute on GPU on that spawner node for meshes players change, or leave the mesh out of Meshes under Instances.
Setup warning: “has saved values that name the graph parameters”
Cause: the graph no longer has those parameters with the saved types, as after you renamed one or changed its type, so they were not set.
Fix: none needed when you changed the graph on purpose: the next save keeps the values the component holds then.
Setup warning: “has saved values that name the graph …, which cannot be loaded”
Cause: the saved graph was renamed, moved without a redirector or deleted, so none of the saved values were set: the component keeps its graph, seed and parameters.
Fix: none needed when you replaced the graph on purpose; otherwise restore it, or keep a redirector when you move it.
Setup warning: “did not generate again after the load”
Cause: the warning names the reason: Activated is off on the component; its graph is not loaded, as when a packaged game did not cook it; or PCG cancelled the generation. The output does not show the saved values.
Fix: turn Activated on in your game to generate it; reference the graph from the PCG component in a map you ship; see PCG’s line in the Output Log for a cancelled generation.
A load’s Issues list PCGOutputNotMatched
Cause: the graph, its seed or its inputs changed since the save, so saved changes match no generated instance within Match Tolerance, or name a mesh the graph no longer spawns.
Fix: raise Match Tolerance, or undo the change. With Keep Unmatched on, the default, saves write the changes back, so undoing the change brings them back; untick it to drop them at the next save.
The PCG plugin is on after installing Rolly Save
Cause: Rolly Save’s PCG support needs the PCG plugin, which Rolly Save turns on.
Fix: none needed: PCG is production in UE 5.8 and on by default.
Old saves
A load, save or copy fails with NewerVersion and names a game data version
Cause: the save records a Game Data Version above the one in this build’s Project Settings, such as a save synced from a device that has an update. That build may have changed the saved data in ways this one cannot read, so nothing was loaded (“made by a newer version of the game”). Saves and copies to that slot end with NewerVersion and write nothing (“the slot’s newest save has game data version 5, above this save’s 3”), so the slot keeps the save; Delete still deletes it.
Fix: update the game on this device. If Game Data Version was lowered by mistake, set it back: never lower it after a release.
A load fails with MigrationFailed
Cause: a step of your Migrations asset failed on the save, and a setup error names its index in Steps, its type, its To Version and why: Fail Migration, a Blueprint error in Migrate, a value written past a limit of the save format, or a record the step left in a state a load refuses. Or Migrations in Project Settings names an asset that cannot be loaded, and the save’s version is below Game Data Version. Nothing of the save was loaded.
Fix: fix the step, then run the old-save check on saves of that version. Pick the Migrations asset again if it was renamed or deleted.
Setup warning: “reads … as …, but it was saved as …, so Get Saved Value returned false”
Cause: the variable connected to Get Saved Value’s Value has another type than the value was saved with, such as a Float for a value saved as an Integer.
Fix: connect a variable of the saved type the message names. To change the type, read the value as that type and write it back with Set Saved Value.
Setup warning: “which holds a pointer or a string table text that a step cannot read, so Get Saved Value returned false”
Cause: a step read a value, or a struct, that points at another saved object, at an object the saved object owns, or at an asset or class that is not loaded, or that holds a text from a string table that is not loaded. Steps run before the save’s objects and assets load, so the read cannot fill that pointer or keep the text’s table, and writing the value back would lose it. The message names the value and what it could not read. An asset or string table the editor has loaded may not be loaded in a packaged game.
Fix: rename or remove such a value instead of rewriting it, or keep the members that change in a value of their own in a new version of the struct.
Setup warning: “used a Rolly Save Record that is no longer valid”
Cause: a step used a record that a Find Records node returned in another Migrate call, such as one kept in a variable of the step.
Fix: find the records again in each Migrate.
A migration step changes nothing
Cause: its To Version is not above the save’s Game Data Version, or is above Game Data Version in Project Settings; the asset is not the one Project Settings names in Migrations; a Blueprint step has no Event Migrate; or Classes names another class than the save recorded. The asset’s Data Validation reports all but the last.
Fix: run Data Validation on the asset, and compare Classes with the class rolly.save.dump <slot> -records lists for the object.
The old-save check fails with MissingClass
Cause: a saved object’s class is no longer in the game: the class was renamed, deleted, or belongs to a plugin that is turned off. A load would keep its record without applying it.
Fix: for a renamed class, add +ClassRedirects or a Replace Class step. For objects you removed on purpose, add a Remove Records of Class step, which declares them gone.
The old-save check warns DroppedValue, EditorOnlyRename or StructWithoutIds
Cause: DroppedValue: the save holds a value under a name its class no longer has, which a load drops. EditorOnlyRename: the editor finds a renamed Blueprint variable through its property ID, which a packaged game lacks, so the packaged game drops the value. StructWithoutIds: a Blueprint struct in the save has no member IDs yet, so a member renamed later loses its value in a packaged game.
Fix: for a renamed value, add a Rename Saved Value step; for one removed on purpose, a Remove Saved Value step. For EditorOnlyRename also set the Blueprint’s Class Settings > Should Cook Property Guids? to Yes. For StructWithoutIds, open the struct and save it.
RollySaveCheckSaves exits with code 2
Cause: the folder does not exist, -Folder= names no folder, or the folder and its subfolders hold no file named <prefix>_slot_<name>_a.sav or _b.sav with the File Prefix of your Project Settings.
Fix: give the folder’s full path, or one relative to the project’s folder, and copy the saves with their file names unchanged.
Engine saves
Import Engine Save Game fails with WrongClass: “which is not … or a child of it”
Cause: the engine save holds another class than Expected Class or a child of it. A Blueprint class that is neither loaded nor known to the asset registry, such as one a packaged build leaves out, is refused the same way, with “The file’s class:” and why.
Fix: set Expected Class to the class your game gave Create Save Game Object. In a packaged game, make sure that class is cooked, such as through Project Settings > Packaging > Additional Asset Directories to Cook.
Import Engine Save Game fails with Damaged
Cause: the file is not one Save Game to Slot wrote, was written by an engine too old to record its custom versions, is cut short or edited, or one of its values does not read; Detail says which.
Fix: none for that file: start the player with a new game.
Setup error: “Import Engine Save Game was given no Expected Class” or “the name of a Rolly Save file”
Cause: Expected Class is empty, or the slot name is the file name of one of Rolly Save’s own saves, such as rollysave_slot_quick_a. Nothing was imported.
Fix: set Expected Class to the Save Game class the slot was saved with. Load Rolly Save’s own slots with Load Game from Rolly Slot.
Registering objects
Register Object for Saving returns false: “saves without a name”
Cause: the object is the game instance, one of its subsystems, the Game Mode, the Game State, a subsystem of the game world or the map’s Level Blueprint. These save with no setup under their role, and one object has one save ID.
Fix: remove the Register Object for Saving call for it.
Register Object for Saving returns false: “which What Saves … leaves out”
Cause: the object is the game instance, one of its subsystems, the Game Mode, the Game State, a subsystem of the game world or the map’s Level Blueprint, and its switch under What Saves in Project Settings > Plugins > Rolly Save is off, so it saves nothing. Registering it under a name does not save it either.
Fix: to save it, turn its switch on under What Saves, and remove the Register Object for Saving call for it.
Register Object for Saving returns false: “is registered for”
Cause: another live object holds the name. Names compare with capital letters, so Chest and chest are two names.
Fix: give each object its own name, such as Chest_1 and Chest_2. A name frees up when its object is destroyed or unregistered.
Register Object for Saving returns false: “is registered as”
Cause: the object already holds another name, and one object has one save ID.
Fix: register each object under one name, or call Unregister Object for Saving before registering it under a new one.
Register Object for Saving returns false: “was given the name” or “was given no object”
Cause: the name is empty, longer than 1,024 characters or holds a NUL character; or the Object pin was connected to an empty reference.
Fix: use a name of 1 to 1,024 characters, such as QuestLog. Connect the object to register, or leave Object unconnected to register Self.
An object registered on a client is not saved
Cause: registering on a client succeeds and does nothing, since only the server saves; a replicated actor’s Begin Play runs on both sides.
Fix: none needed: the server’s registration of the same actor saves it.
Slot lists
Game Fields are empty in every slot: “which has no member with SaveGame ticked”
Cause: the struct in Slot Fields Struct has no member with SaveGame ticked, and slot metadata keeps only those members (NoSavedFields).
Fix: tick SaveGame on each member your list shows: in a Blueprint struct under the variable’s advanced options, in C++ as UPROPERTY(SaveGame).
A slot is missing from the list
Cause: on storage that cannot list its files, as on some consoles, the slot index is the only list, and a slot written while the index could not be updated, or after both index files were lost, is not in it. On any storage, a slot whose newest copy is damaged or made by a newer version is left out of a list rebuilt from the files.
Fix: load the slot by name once: the index adds it back. Run rolly.save.verify -index to see the index’s two copies.
A list shows the save before the last one
Cause: the game ended between a save and the index write that follows it, so the index holds the slot’s previous header. Loads always take the newest copy.
Fix: none needed: the entry is corrected the next time the slot is saved or loaded.
A slot lists without its play time, place or game fields
Cause: Has Metadata is false for a save of an earlier version of Rolly Save, or one whose metadata cannot be read; the log names why. Game Fields alone are empty when Slot Fields Struct in Project Settings is empty or names another struct than the save holds, or when the fields brought the save’s metadata past 16,384 bytes, which its Issues list as FieldsTooLarge.
Fix: none needed for old saves: the slot loads, and its next save records them. Pick the struct the saves hold in Slot Fields Struct, and keep only what the list shows in it.
A title is gone or did not change
Cause: Set Rolly Slot Title was given more than 128 characters, which it refuses with the setup message TitleTooLong. A title set for a slot without a save waits for that slot’s first save in this session only; a copy or an import into the slot, or a failed save to a new slot, drops it. A saved title above 128 characters, which no game writes, lists as empty.
Fix: keep titles to 128 characters, and set the title of a new slot in the session that saves it, or save with Save Game to New Rolly Slot, which writes the title with the save.
Set Rolly Slot Title fails with InvalidData: “holds values this version cannot write back”
Cause: the slot’s save was made by a newer version of your game or of Rolly Save, whose metadata holds a value this build does not know, or its game fields are of a struct this build does not have. Rewriting the metadata would drop that value, so the title stays as it was.
Fix: set the title in the build that made the save, or save the slot again in this build, which writes metadata it knows.
Thumbnails
Saves have no picture
Cause: Save Thumbnails is off; the save’s kind is not in Thumbnails > Kinds; Max Wait is 0, or the frame did not come within it, such as while the window is minimized or rendering is off; a store’s Flush ran before the frame came (ThumbnailSkipped: the saves were flushed), as Rolly Save’s own flush does when the game exits or goes to the background; a part save keeps the slot’s picture; or the picture did not fit Max Size. The save’s Issues say ThumbnailSkipped or ThumbnailTooLarge. A dedicated server, a client and a game without a game viewport, such as a commandlet, save without pictures.
Fix: turn Save Thumbnails on, add the kind, raise Max Wait or raise Max Size (KiB) under Project Settings > Plugins > Rolly Save > Thumbnails.
The picture shows the pause menu’s blur or menu camera
Cause: the picture was taken after the menu changed the view, or the save is no Manual or Quick save, which alone take a held picture.
Fix: call Capture Rolly Save Thumbnail before you open the menu; the next Manual or Quick save holds that picture.
The picture shows the wrong player in split screen
Cause: a save no player asked for, such as an autosave, takes player 1’s view.
Fix: call Capture Rolly Save Thumbnail with the saving player’s controller before the save, or set Thumbnails > View to Whole Viewport.
Load Rolly Slot Thumbnail fails with NotFound
Cause: the slot holds no save, its save holds no picture, or the picture is one this version does not show: not PNG or JPEG, or a size outside 1 to 2,048 pixels or unlike what the save records.
Fix: check Has Thumbnail in the slot’s info before you ask for its picture, and show a placeholder otherwise.
Slot screen
The slot screen does not open
Cause: Project Settings > Plugins > Rolly Save Screens > Show Slot Screen is off, so nothing answers Request Slot Screen and Save Points; the game is a client, which refuses with “Only the host can save and load.” and the setup warning ClientScreen; Who Can Load is First Player and another player asked for Load or New Game; the screen is already open for that player; or the style saves at once (Save in Playthroughs or during an active run, New Game in Free Slots).
Fix: turn Show Slot Screen on, or call Open Rolly Slot Screen, which opens it either way; open it on the host or in a standalone game; check Who Can Load and Slot Style.
A Save Point saves a checkpoint instead of opening the screen
Cause: its Action is Automatic, Show Slot Screen is off, and nothing binds On Slot Screen Requested or no listener marked the request handled (the Message Log note NotMarkedCheckpoint).
Fix: turn Show Slot Screen on, or bind On Slot Screen Requested, on the Rolly Save Subsystem or on the Save Point, to open your own menu and call Mark Slot Screen Request Handled in it before it returns. To count every listener as handling the request, turn off Slot Screen Requests Need a Mark under Project Settings > Plugins > Rolly Save > Slots.
Setup warning: “Mark Slot Screen Request Handled was called while no slot screen request ran”
Cause: the call came outside a listener of On Slot Screen Requested, or after a delay or a load inside it, once the request had ended.
Fix: call it inside the listener, before the listener returns; open your menu later if you need to.
Loading asks every time, or never asks
Cause: Ask Before Loading is Always or Never; with When Progress Is Unsaved it asks only when more than Unsaved After of play since the last save or load would be lost, and never in a map of Menu Maps.
Fix: set Ask Before Loading, Unsaved After and Menu Maps under Project Settings > Plugins > Rolly Save Screens > Confirmations.
New Game does nothing
Cause: nothing binds On New Game Chosen of the Rolly Save UI Subsystem and New Game Map is empty; the setup warning NoNewGameListener says so.
Fix: set New Game Map under Project Settings > Plugins > Rolly Save Screens > New Game, or open your start map in On New Game Chosen.
There is no profile chip
Cause: Profile Keys is not Named, or the screen is in Save mode, which saves for the player’s own profile.
Fix: set Project Settings > Plugins > Rolly Save > Profiles > Profile Keys to Named.
Saves of another profile do not show
Cause: Slots Shown is Auto, which with Named or Provider profile keys lists the player’s profile’s saves, or Current Profile.
Fix: set Project Settings > Plugins > Rolly Save Screens > Profiles > Slots Shown to All Profiles.
A numbered slot reads “Another profile’s save” and cannot be used
Cause: with Numbered Slots every profile shares slot_1 to slot_, and while each profile sees only its own saves (Slots Shown), a slot holding another profile’s save is kept for it.
Fix: raise Number of Slots, set Slots Shown to All Profiles so players see and replace each other’s saves after the overwrite question, or use Free Slots, whose new saves take free slots.
Overwrite, Delete or another answer does nothing, and the row changes
Cause: the save the question named was replaced while the question was open, by another player’s save or by an autosave under the Side Drawer, which does not pause the game. The answer acts only on the save the question named.
Fix: none needed: the row shows the new save; ask again to act on it.
A game field shows nothing
Cause: Game Fields names a member the Slot Fields Struct lacks (setup warning GameFieldNotFound), one whose type rows cannot show, such as a struct or an array (GameFieldType), or the save holds another struct or none.
Fix: pick a member that is a Text, a number, a Boolean, an enum, a String or a Name, or format the value into a Text member when you fill the struct.
A game field shows an enum’s code name in a packaged game
Cause: a packaged game keeps no display names of C++ enums, so the field shows the value’s name.
Fix: use a Blueprint enum, which keeps its display names, or keep the words in a Text member.
There is no search
Cause: the list holds fewer saves than Search From, or Search From is 0.
Fix: lower Search From under Project Settings > Plugins > Rolly Save Screens > Rows, or let players sort.
Some saves are missing from a long list, with “Showing 100 of 150 saves.”
Cause: Max Rows builds rows for the first saves only, after sorting.
Fix: search finds every save; raise Max Rows (up to 1,000) to build more rows.
There is no Abandon Run, Copy or Export
Cause: Copy and Export need Allow Copy and Allow Export, and Export and Import a platform that writes files (Windows, Mac and Linux); Abandon Run shows only on a run that goes on.
Fix: turn them on under Project Settings > Plugins > Rolly Save Screens > Actions.
The screens’ words are not translated
Cause: the texts of Project Settings > Plugins > Rolly Save Screens live in Config/DefaultGame.ini, which the localization gather does not read by default.
Fix: add *.ini to the Gather Text From Source paths of your localization target.
Saving indicator and loading overlay
The saving indicator does not show
Cause: Show Indicator is off; the save’s kind is not in Kinds; the player has a Rolly screen open and Hide Under Screens is on; the save was a profile’s alone and Show for Profiles is off; or the platform shows its own saving interface (Platform Save Interface on, on a platform that has one) and Hide When the Platform Shows Its Own is on.
Fix: turn Show Indicator on, add the kind, or untick Hide Under Screens or Hide When the Platform Shows Its Own under Project Settings > Plugins > Rolly Save Screens > Saving Indicator.
Show Rolly Saving Indicator Preview shows nothing
Cause: a save shows the indicator already, the platform shows its own saving interface, Seconds is 0 or less, or Player is empty.
Fix: call it with the player’s own controller and a time above 0, outside a save.
The saving indicator shows in player 1’s part of the screen in split screen
Cause: only a save a player’s slot screen started shows in that player’s part; autosaves, checkpoints and saves from your own code are the game’s and show in player 1’s.
Fix: none needed for saves of the whole game; for a player’s own save, start it from the slot screen.
The loading overlay does not show
Cause: Show Overlay is off, or the load keeps the current map and Show for Keep Current Map is off.
Fix: turn them on under Project Settings > Plugins > Rolly Save Screens > Loading Overlay.
The loading overlay stays up after the map has loaded
Cause: Wait for World keeps it until On World Ready, while players are held until the ground under them has loaded and spread values are set.
Fix: see the entries on holding players under Loading the game, or untick Wait for World under Project Settings > Plugins > Rolly Save Screens > Loading Overlay.
“Loading” shows in a corner after a load that kept the current map
Cause: Show While Held: the player has been held for Held Delay until the ground under it has loaded.
Fix: none needed; to show it later, raise Held Delay, and to show nothing, untick Show While Held or Show Indicator under Project Settings > Plugins > Rolly Save Screens > Saving Indicator.
The loading overlay stands still while the map loads
Cause: the engine loads the map on the game thread, and Map Load Screen is Frozen, the default: the window keeps its last frame, with the bar at 80 %, until the new map draws.
Fix: set Map Load Screen to Movie Player under Project Settings > Plugins > Rolly Save Screens > Loading Overlay, and check it in Standalone or a packaged build.
Message Log: “Map Load Screen is Movie Player, which Play In Editor cannot show”
Cause: the editor switches the engine’s movie player off, so map loads keep the last frame in Play In Editor.
Fix: none needed; play Standalone or a packaged build to see the Movie Player screen.
The Movie Player screen does not show
Cause: the game set up a loading screen of its own with the movie player, which Rolly Save leaves alone; the load travels seamlessly, which never uses the movie player; the overlay is off for the load; or the movie player is off (-NoLoadingScreen, a server, no threaded rendering), which one log line says.
Fix: turn Show Overlay on, and leave the movie player’s loading screen unset for Rolly Save’s loads.
Memory slots
A memory slot or rewind point is gone
Cause: memory slots last for the game instance only. Past Memory Slots or Rewind Points in Project Settings the oldest goes; Clear Loaded Game drops them all; a whole-game load from storage drops the rewind points, and Rewind Rolly Game the points newer than the one it loaded.
Fix: raise Memory Slots or Rewind Points under Project Settings > Plugins > Rolly Save > Memory Slots, and save to a slot what must outlast the session.
Rewind Rolly Game fails with NotFound
Cause: there are fewer rewind points than Steps, such as right after a load from storage, which drops them.
Fix: check Get Memory Slots for the points there are, and save a rewind point after each load.
Autosave
Nothing autosaves
Cause: Autosave Interval is 0, its default, so no timer runs; requests still save. Or the map is in Maps Without Autosave, the game is a client, or Stop Autosave turned autosave off for the session. A request within Minimum Gap of the last save to storage is dropped. The log says, for each autosave asked for, why it was dropped.
Fix: set Autosave Interval under Project Settings > Plugins > Rolly Save > Autosave, call Start Autosave after a menu that stopped it, or lower Minimum Gap.
The timer autosaves later than Autosave Interval
Cause: the timer starts over at every save to storage, a manual or quick save too, and does not run while the game is paused. An interval below Minimum Interval (10 seconds by default) counts as Minimum Interval.
Fix: none needed: the player never gets an autosave right after saving.
An autosave writes into the player’s own slot
Cause: Autosaves Write To is Current Slot, so autosaves write the slot last saved or loaded by name; or a single-slot run is active, whose slot takes every save.
Fix: set Autosaves Write To to Own Slot for the autosave slots autosave_1 and up.
Checkpoints
Load Rolly Checkpoint loads the checkpoint before the last one
Cause: the last Save Rolly Checkpoint was called during a save block, so it waits and saves when the last block goes; or it was called during a load and failed with Busy.
Fix: save checkpoints outside save blocks and loads, such as at the door before the fight, and check the node’s Failure.
A retry reads storage instead of memory
Cause: the memory copy is gone: a whole-game load from storage, New Game+ and Clear Loaded Game drop it, and a restarted game has none. During a run, checkpoints keep no memory copy.
Fix: none needed: Load Rolly Checkpoint loads the checkpoint from storage then.
Leaving the game
No save is made when the game is minimized or loses focus on a desktop
Cause: Windows, Mac, Linux and the Steam Deck send no background moment, so Save When Backgrounded saves only on Android and iOS. Save When Window Loses Focus is off by default.
Fix: turn on Save When Window Loses Focus under Project Settings > Plugins > Rolly Save > Lifecycle Saves, and keep the autosave timer on for games that can be killed without a quit.
A save is missing after the Steam Deck slept
Cause: sleep sends the game nothing, and a Steam Deck switched off while asleep ends the game without a quit. Steam’s Dynamic Cloud Sync uploads the files as the Deck sleeps, so a save written at that moment can upload cut short.
Fix: keep the autosave timer on, so the last autosave is recent; a slot whose newest copy was cut short loads its other copy as the backup.
A quit or background in the title screen saves nothing, or a level saves nothing until its first save
Cause: Lifecycle Saves In is Game in Play, the default: lifecycle saves write only where a game is in play. While Maps Without Autosave lists no map, a game is in play after a whole-game load or save in the map, in the map your game opens after Clear Loaded Game or Start Rolly Run, after seamless travel, or after Set Rolly Game in Play, and your game’s own Open Level of another map ends it, so a level it opened that way is not in play until its first save; the Message Log notes the first such drop of a session (NoGameInPlay). The profiles still save there while Save Profiles with Game is on.
Fix: none needed for a title screen. For levels your game opens itself, list your title, menu and loading maps in Maps Without Autosave under Project Settings > Plugins > Rolly Save > Autosave, so every other map is in play, or call Set Rolly Game in Play in their Begin Play; for a game that opens straight into play, set Lifecycle Saves In to Any Map under Lifecycle Saves.
No quit save in Play In Editor
Cause: ending Play In Editor tears the worlds down without quitting the game, so Save When Quitting does not run there; closing the editor is not a game’s quit either.
Fix: run rolly.save.lifecycle quit while you play, or try the quit in a standalone or packaged game.
A lifecycle save ends with Busy or is dropped
Cause:Busy: a load ran until its values were set, or the map was changing by seamless travel, and a half-loaded world is never written. Dropped: no game is in play in the map, the map is in Maps Without Autosave (in both cases the profiles save anyway while Save Profiles with Game is on), autosave is stopped, the last lifecycle save was less than Minimum Gap ago, or saving slots is paused after the saving user signed out. The log names the reason.
Fix: none needed for a load; lower Minimum Gap under Lifecycle Saves for games that pause and resume quickly.
Platform users and storage space
Saves end with SignedOut
Cause: on storage that keeps users apart, as on consoles, the platform user who owns the slots signed out, or the first local player moved to another user. With When the Saving User Changes at Stop Until Load, the default, saving slots stays paused after the sign-in until a load or Clear Loaded Game, so one user’s game never lands in another’s storage. A write asked for before a sign-out that had not started ends with SignedOut too.
Fix: follow the platform’s rules from On User Signed Out, such as returning to the title screen; once a user is signed in, load a save or call Clear Loaded Game. Set When the Saving User Changes to Follow to save on at the sign-in.
A player’s profile is gone after a sign-out
Cause: the profile’s user signed out; the profile went unsaved, since that user’s storage is closing.
Fix: save profiles before the game lets a player sign out; the profile loads again when the player gets a signed-in user.
A guest’s profile is not saved
Cause: a local player without a platform user has no storage of its own, and every guest would share one profile file, so Guest Profiles at Not Saved, the default, keeps its profile in memory with defaults; Save Rolly Profile refuses it with InvalidInput.
Fix: set Guest Profiles to With the Saving User under Project Settings > Plugins > Rolly Save > Platform to keep guests’ profiles with the slots.
On Low Storage never fires
Cause: Low Storage Warning is 0; the storage keeps users apart, as on consoles, and cannot be measured; or the drive cannot report its free space. It also fires once per session, and again only after the free space rose above the warning.
Fix: set Low Storage Warning under Project Settings > Plugins > Rolly Save > Platform. Check Rolly Storage Space says with Known false where the storage cannot tell.
Level tools
Walking into a trigger, Save Point or volume does nothing
Cause: Data Validation or the Message Log names a shape or collision problem (NoShape, ShapeNotFound, NeverTriggers, SpawnedVolume); Enabled is off; Triggers is Once or Once per Visit and it already triggered (Triggered, under the advanced settings, which a save keeps); Cooldown has not passed; Trigger By, Players, Filter or Except leaves the pawn out; Can Trigger Rolly Save on its actor returns false; or the game is a client.
Fix: follow the setup message; call Set Enabled or Rearm; adjust Trigger By, Players, Filter or Except; trigger it on the server.
A checkpoint saves when the player spawns or a load places them inside
Cause: Trigger on Appear is on, or your game moves the player inside after the map began play or the load ended, which counts as walking in.
Fix: turn Trigger on Appear off; in C++, move the player inside a URollySaveSubsystem::FRestoreScope, which makes Is Restoring true; or turn the trigger off with Set Enabled around your move.
An autosave trigger saves nothing
Cause: the autosave was dropped: within Minimum Gap of the last save to storage, in a map listed in Maps Without Autosave, or after Stop Autosave. During a save block it waits. The log says which.
Fix: tick Ignore Minimum Gap on the trigger, remove the map from Maps Without Autosave, or call Start Autosave.
A Reset Area did nothing in the same visit
Cause: an area resets when its level is next built: on a return by travel, or a load of a save made after Mark Area for Reset.
Fix: call Mark Area for Reset, save with Save Game to Rolly Memory Slot and load that slot with Open Saved Map.
A Reset Area did not bring harvested foliage back
Cause: Reset Instances is off on the area; its Filter or Except leaves out the foliage actor’s class; the instances lie outside its shapes, each judged by its own place, not by its actor’s; or the level was not built again yet.
Cause: a load restores the saved world: only areas marked for reset before the save reset. A placed actor destroyed in play comes back only when its level is built again, so a load with Keep Current Map never brings it back.
Fix: mark the area before the save, and load with Open Saved Map.
An actor inside two areas did not reset
Cause: the other area decides there: the higher Priority, then the area that resets least (Never, On New Game Plus, After Game Time with the longer Reset After, On Revisit). Areas that tie reset an actor only when each of them would.
Fix: raise this area’s Priority, or turn the other area off with Set Enabled.
An After Game Time area never resets
Cause: its Clock is Game Clock (or Project Default with Reset Clock at Game Clock) and Game Clock Class is empty (NoGameClock), or the clock returned a time that is not a number, negative or above 100 years (BadTime). A clock that went back resets nothing until Reset After passes from the next leave.
Fix: pick your clock in Project Settings > Plugins > Rolly Save > Reset Areas > Game Clock Class, or set Clock to Play Time; return seconds of game time, 0 or more, from Get Game Time Seconds.
A spawned area reset more than its shape
Cause: its shape is no Box, Sphere or Capsule Collision, such as a mesh, so saves keep its bounding box (SpawnedShape).
Fix: use a Box, Sphere or Capsule Collision as the area’s shape.
A spawned area resets nothing on a return
Cause: the Gameplay Tag Query of its Filter or Except holds more than 64 expressions or 64 tags, or nests deeper than 8, which saves do not keep, so the area resets nothing before its actor is spawned again (SpawnedTagQuery).
Fix: make the query smaller, use Gameplay Tags instead, or place the area in the level.
The log says “ResetAreaEntryIgnored”
Cause: the save’s record of a map’s Reset Areas holds an entry or value this version does not take, such as an area name over 1,024 characters, more than 1,024 entries, a time out of range or a shape that cannot be used, or a second record of the areas. Saves of this version never write them. One read lists at most 32 such lines and counts the rest in one more.
Fix: none needed: the rest of the save loads, and the next save writes the areas as they are.
Data Validation says a Reset Area “is spatially loaded”
Cause: its actor is in a World Partition map with Is Spatially Loaded on, so the area exists only while its cell is loaded, and a level built while its cell is not loaded resets nothing inside it (SpatiallyLoaded). The Reset Area Volume is never spatially loaded.
Fix: untick Is Spatially Loaded in the actor’s World Partition section, or use a Reset Area Volume.
A Never area’s actors start as designed after New Game Plus
Cause: Remember Levels is off and New Game Plus opened another map than the one it was called in (LevelsNotRemembered on the area); the area is turned off; another area decides for those actors (see “An actor inside two areas did not reset”); or the level’s capture was refused, which the log names: “New Game+:
Fix: turn Remember Levels on in Project Settings > Plugins > Rolly Save, call Set Enabled on the area, or give the Never area a higher Priority.
A tool shows no sprite or label in the editor
Cause: Show > Sprites > Rolly Save or Show > Advanced > Render (3D) Text is off, or the plugin’s sprite files did not load, which the log names: “Rolly Save: the picture did not load”. Sprites and labels never show in game.
Fix: turn both on in the viewport’s Show menu; reinstall the plugin when the log names a picture.
Single-slot runs
A save, memory slot or rewind fails with InvalidInput: “a run is active”
Cause: a single-slot run is active, so every save goes to its slot; saves of other names, part saves and loads, memory slots and rewind are refused (OutsideRunSlot).
Fix: hide those actions while Is Run Active is true. Quick Save, autosaves and checkpoints write the run’s slot.
A run’s slot loads with OlderCopy
Cause: the slot holds a copy older than the run’s last save the first local player’s profile recorded, such as a copy the player put back from another folder.
Fix: none needed: that is what a run refuses. Load the run’s newest save; Get Save Status Text gives the player a sentence.
A run’s slot fails with Damaged after a crash
Cause: the newest copy of the run’s save was damaged, and the backup copy is below the save number the profile recorded, so loading it would undo the run’s last save.
Fix: none: the run’s last save is lost. End the run with End Rolly Run.
Older copies of a run still load
Cause: the profile could not record the run’s saves: no local player was there, the profile did not load, or the ledger holds 1,024 runs that go on. Each such save’s Issues have a NotRecorded line. A load also takes an older copy when the game has no local player or the first one’s profile was refused, since there is no ledger to judge it by.
Fix: make sure the first local player’s profile loads (Load Rolly Profile says why it did not), and end finished runs with End Rolly Run so the ledger can drop them.
Start Rolly Run fails with SlotExists
Cause: the slot holds a save, a damaged one too. Start Rolly Run never deletes.
Fix: delete the slot first, or start the run in an empty slot.
Profiles
Get Profile gives None with Busy
Cause: the profile is still loading; it starts when the local player joins.
Fix: use Load Rolly Profile, which gives the profile once it is ready, or bind On Profile Loaded.
Get Profile gives None with InvalidInput
Cause: Player is not a local player’s own controller of this game, such as a remote player’s controller on the server, or None; the setup message NotLocalPlayer names it.
Fix: pass the player’s own controller, such as Get Owning Player in a widget. Each machine keeps its own players’ profiles.
A profile’s values are not saved
Cause: the variable does not have SaveGame ticked (Compiler Results and Data Validation warn), Profile Class is empty, or the player left before a save: removing a local player saves nothing.
Fix: tick SaveGame on the variable, pick your Blueprint in Profile Class, and call Save Rolly Profile before a player leaves.
A profile stays unusable, with Damaged or NewerVersion
Cause: its file did not load, so Rolly Save keeps it untouched and refuses to save defaults over it; the setup warning Refused names it.
Fix: tell the player. Load Rolly Profile reads it again; Reset Rolly Profile deletes it and starts over.
A player gets a new named profile instead of the one picked
Cause: with Profile Keys at Named, the profile the player picked was deleted, such as on another machine, or another local player uses it or was switching to it as the player joined; the player then gets a new profile, or at Max Named Profiles what When Profiles Are Full says.
Fix: pick the profile again with Use Rolly Profile; it is remembered for the next start.
A named profile does not load: “Profile player0 did not load (Damaged)”
Cause: with Profile Keys at Named, the platform user’s own file (player<N>), which names the player’s profile, is damaged, so the player has no profile key and the profile stays unusable.
Fix: Use Rolly Profile for that player replaces the damaged file with one that names the profile picked; Reset Rolly Profile deletes it, and the player gets a profile as a new player does.
A joining player has no profile, with InvalidInput: “When Profiles Are Full is Refuse”
Cause: Max Named Profiles exist and Project Settings > Plugins > Rolly Save > Profiles > When Profiles Are Full is Refuse, so the player is given none.
Fix: show the profiles with List Rolly Profiles and let the player pick one with Use Rolly Profile, delete one, raise Max Named Profiles, or set When Profiles Are Full to Reuse Oldest Unused.
Create, Rename, Delete or Use Rolly Profile fails with InvalidInput
Cause: Profile Keys is not Named. Create: Max Named Profiles exist, or the name is empty or above 64 characters (NameTooLong). Delete: a local player uses the profile, switches to it or is given it. Use: another local player uses the profile or is switching to it. All but Create: the key is no named profile’s key, profile_ and eight lowercase hexadecimal digits.
Fix: set Profile Keys to Named; delete a profile or raise Max Named Profiles under Project Settings > Plugins > Rolly Save > Profiles; switch the player to another profile with Use Rolly Profile before deleting theirs.
Every player uses the platform user’s profile although Profile Keys is Provider
Cause: Player ID Provider is empty, abstract, no Rolly Save Player ID Provider, or cannot be loaded (setup error NoProvider); or Get Profile Key gave an empty key or one above 1,024 characters (ProviderEmptyKey, ProviderKeyTooLong).
Fix: pick your Blueprint of Rolly Save Player ID Provider in Project Settings > Plugins > Rolly Save > Profiles, and return a key of 1 to 1,024 characters for every local player.
An older copy of a run loads after the player switched profile
Cause: Run Ledger is Profile, so each profile records its own runs; Data Validation warns with LedgerPerProfile while Profile Keys is Named or Provider.
Fix: set Project Settings > Plugins > Rolly Save > Profiles > Run Ledger to Shared.
A new named profile starts with another profile’s values
Cause: a value of the local player or a Local Player Subsystem without SaveGame ticked, which no profile holds, or one your code sets after the profile loaded. Use Rolly Profile and Reset Rolly Profile set only SaveGame variables back to their defaults, and not those inside instanced objects, data a class writes in its own Serialize, or state built in On Rolly Save Loaded.
Fix: tick SaveGame on the variable, or set it, and the values above, from On Profile Loaded.
New Game+
A carried value is missing in the new game
Cause: the object was not registered with a group Carry names when Start Rolly New Game Plus was called, so nothing of it was captured. World cannot be carried.
Fix: register the object with Register Object for Saving and a group, such as Carry, before you call Start Rolly New Game Plus, and add that group to Carry.
Moving saves
An export fails with NameCollision
Cause: a file of that name in the export folder is no Rolly Save file, which an export never replaces (ForeignFile).
Fix: use another file name.
An import fails with InvalidInput
Cause: the file is larger than Max Import Size (MiB), and was not read; or it holds a profile or the slot index, not a slot’s save; or the file name or slot name breaks its rule (BadFileName, BadSlotName).
Fix: raise Max Import Size under Project Settings > Plugins > Rolly Save > Sharing Saves for saves that large, or import a slot’s export.
An import or rename fails with SlotExists
Cause: the target slot holds a save, or is the active run’s slot: an import and a rename never overwrite.
Fix: pick an empty slot name, or delete the slot first.
List Rolly Export Files misses a file
Cause: it lists the first 1,000 files by name with the Export Extension, and leaves out files whose header does not read as a Rolly Save file’s.
Fix: keep fewer exports, or delete the ones the list leaves out.
The file nodes fail on a console or phone
Cause: files can be exported and imported on Windows, Mac and Linux only (Unsupported).
Fix: check Can Transfer Save Files, and use Export Rolly Slot to Bytes and Import Rolly Slot from Bytes elsewhere.
Save Inspector
A save opens read-only
Cause: the source is the backup copy, the slot index, a file or JSON not imported yet, or the running game (ReadOnlySource); no copy verifies, or a copy was made by a newer version or holds a higher Game Data Version than the project’s (NotLoadable); or the save records a version at another number than this build’s, so its values and title cannot be written (OtherVersions). The edit bar names which.
Fix: Restore as Newest on a backup, Import as Slot on a file, open a slot instead of the index, save the running game to a slot and open that; for OtherVersions, load the save in Play In Editor and save it again. The Game Data Version and removals change in an OtherVersions save as it is.
A value has a lock
Cause: the value points at a saved or owned object, or is a keyed or string table text (ReferenceNotKept); it is kept as its saved bytes, such as a struct with a serializer of its own (NotReadable); or it belongs to data a newer version wrote (CarriedData). Its tooltip says which.
Fix: change the record it points at, remove the value, or use Replace with Plain Text on a keyed text; change other values in your game and save again.
A value inside a property bag cannot be changed
Cause: values inside a property bag, such as StateTree parameters, are read-only in the Save Inspector (InsideBag).
Fix: export the save as JSON, change the value there and import it (see Export and import saves as JSON), or change it in your game and save again.
A written change is gone
Cause: Play In Editor saved the slot after the write, and its save replaced yours as the newest; a write never replaces a save made after the slot was opened, but a save made after the write does.
Fix: stop Play In Editor before writing, or write with Save as New Slot and load that slot.
Write says the slot was saved after you opened it
Cause: a game saved the slot after it was opened (Changed); nothing was written and the changes stay staged.
Fix: Save as New Slot keeps your changes; Open Again shows the newer save and drops them.
A change is refused while a write runs
Cause: the open save is being written (Writing): the write holds the changes as they were when it started, and a write that succeeds opens the save again.
Fix: make the change once the save shows again.
The slot list lacks a slot
Cause: the slot index lags behind the files, as after a crash during a save.
Fix: use Open by Name in the source picker, which reads both copies directly; the next save of the game lists the slot again.
Select does nothing
Cause: the record line says why: the actor exists only while playing, it is in another map (Open Map), World Partition has not loaded it or its sublevel is hidden or not loaded (Load and Select), no actor of that name is in the world, the record is no actor’s (a registered object, a profile record or a handler), or the server runs in its own process.
Fix: play to select spawned actors, players and the Game Mode; use Open Map or Load and Select; turn on Run Under One Process in Editor Preferences > Level Editor > Play.
The record line says “a map this project does not have” and offers no Open Map
Cause: the save names a map that is not in this project, such as a save of another project or of a plugin this editor has not loaded.
Fix: open the save in the project it comes from, or enable the plugin whose map it names.
Running Game says nothing is playing
Cause: Play In Editor is not running, or it runs only clients and the server in a process of its own.
Fix: start Play In Editor with a standalone game, a listen server, or Run Under One Process on.
No RollySave category in the Gameplay Debugger
Cause: the build has no Gameplay Debugger: Test and Shipping builds lack it by default, and Shipping never shows the RollySave category; or the category is off, which it is until you turn it on.
Fix: toggle RollySave with its number key in the debugger, or set Active in Game in Project Settings > Engine > Gameplay Debugger > Categories > RollySave. For a Test build, set bUseGameplayDebugger = true in the game’s Target.cs.
Saves as JSON
A JSON import names a line and a column
Cause: the text does not read there (NotImported): a JSON syntax error, or a value past a bound, such as a name of more than 1,023 characters, 300 for an Int8, a key the format lacks (keys are case-sensitive, so Name is not name), a key given twice, a value’s value before its type, or a record whose values would take more memory than is left of the decoded save’s limit. The message says what was found and the bound.
Fix: correct the file at that line and column, or export the save again. A record whose values take more memory as they are read than is left of the decoded save’s limit (the reason names the bytes) imports when the save is exported again with Readable Values off, which writes each value as its bytes.
A JSON import refuses a bag: “a bag head that does not hold its descriptions” or “bag values that its head does not have”
Cause: a property bag’s head was changed, or its values were given a member, a type or a count its layout lacks, or a bag with data was given no values.
Fix: keep head as the export wrote it and change only the values inside values, keeping their names and types.
A JSON export holds bytes, not values
Cause: Readable Values was off; or the save records its package version or a custom version at another number than this build’s, as after an engine or plugin update changed one, so a changed value could be written in a form that save does not read; or it lacks the editor object version or Rolly Save’s record version, which texts and records are read by. A version only this build registers does not count. A value of a type the export does not read, such as a keyed text, is its bytes in every export.
Fix: load the save in Play In Editor and save it again, then export that save with Readable Values on.
A JSON import fails with InvalidData: “values are written only at this build’s versions”
Cause: the file holds readable values and records a version at another number than this build’s, or lacks one its values are read by (ValuesNeedVersions); the message names it.
Fix: export the save again with Readable Values off, which writes every value as its saved bytes.
A JSON import fails with InvalidInput
Cause: the file is larger than Max JSON Import Size (TooLarge) or holds a profile or the slot index (KindNotSlot); or the build is a Shipping or Test build and JSON Import in Shipping is off, the default, so players cannot load hand-edited saves through JSON (ImportOff).
Fix: raise Max JSON Import Size for larger files, import only a slot’s JSON, and turn on JSON Import in Shipping under Project Settings > Plugins > Rolly Save > Sharing Saves for builds sent to testers.
Saves stay marked as edited
Cause: a save loaded from a file the Save Inspector or a JSON import changed records that in its header field EDIT, and every later save of that game keeps the mark, so a bug report from such a save can be told apart.
Fix: nothing to fix; start a new game for saves without the mark.
Quick keys
F5 and F9 do nothing
Cause: Enable Quick Keys in Project Settings > Plugins > Rolly Save > Quick Save is off, which is the default; or the game takes no game input at that moment, such as in a menu shown with Set Input Mode UI Only; or Play In Editor’s viewport does not have focus; or the game is a client of a networked game, where the key gives the Not Authority setup message.
Fix: tick Enable Quick Keys, click into the viewport, and press the keys in a standalone game or on a listen server’s host. In a menu, use buttons that call Rolly Quick Save and Rolly Quick Load.
Setup error: “Quick Save Key and Quick Load Key are both”
Cause: both settings hold the same key, so pressing it only quick saves.
Fix: pick two different keys in Project Settings > Plugins > Rolly Save > Quick Save.
Setup warning: “Enable Quick Keys is on, but”
Cause: Quick Save Key or Quick Load Key is None, so no key does that.
Fix: pick a key, such as F5 for Quick Save Key and F9 for Quick Load Key.
A quick key also does something else in the game
Cause: the quick keys reach the game’s own input too, so an input action bound to the same key also runs.
Fix: pick keys your game does not use, or leave Enable Quick Keys off and call Rolly Quick Save and Rolly Quick Load from your own input action.
Pressing F5 turns the view to shader complexity, or F9 takes a screenshot
Cause: outside Shipping the engine runs its debug commands on these keys too: Engine/Config/BaseInput.ini binds viewmode shadercomplexity to F5 and shot showui to F9, Rolly Save’s default quick keys. The check Debug Commands on Quick Keys names them as Play In Editor starts.
Fix: press Remove Them in the check’s message, or beside the quick keys in Tools > Rolly Save > Set Up Project…: it adds -DebugExecBindings lines for them to Config/DefaultInput.ini. Or pick other quick keys.
Remove Them says it could not write Config/DefaultInput.ini
Cause: the file is read-only, and revision control did not check it out or it could not be made writable. Nothing changed.
Fix: check the file out or make it writable, then press Remove Them again, or add the -DebugExecBindings lines for the commands the message names under [/Script/Engine.PlayerInput] by hand.
Save Handlers
A handler attached by a Save Rule saves nothing for an actor
Cause: the actor’s Saving is Never, a later rule or its component lists the class in Removed Handlers, or its save ID would pass 1,024 characters (setup error IdTooLong, once per actor and handler).
Fix: check the actor’s Effective Settings, which lists each attached handler and each removal with its source; shorten the handler’s folder path or the actor’s name for IdTooLong.
Your Handlers does not list a handler Blueprint
Cause: the Blueprint is abstract (Class Settings > Generate Abstract Class) or deprecated (Class Settings > Deprecate), and no entry can be made of such a class; or its parent is no Rolly Save Handler.
Fix: untick Generate Abstract Class and Deprecate on the Blueprint you attach, and make it from Rolly Save Handler or a child of it.
A Save Handler’s Apply never runs
Cause: the handler is not listed in Project Settings > Plugins > Rolly Save > Global Handlers; or the loaded save was made before it was listed, so it holds no record of it; or its Blueprint was renamed or moved since the save, without a redirect; or the load failed; or the game is a client, where no handler runs.
Fix: list the handler, and save again before you test the load. After renaming a handler Blueprint, add +ClassRedirects or +ObjectRedirects with the old and new path of its class (see Rename saved data without losing saves).
An attached handler’s Apply runs only when the game asks, or never
Cause: a C++ handler’s CanApplyNow returned false when its Apply Timing came, so its loaded values wait. Saves made meanwhile keep its loaded record.
Fix: call URollySaveWorldSubsystem::RetryPendingHandlers for the actor once what the handler restores is there, such as from that object’s own event.
Setup error: “Global Handlers lists the … handler, which saves the actor it is attached to”
Cause: Global Handlers lists an engine state handler, which saves the components of the actor it is attached to; a Global Handler has no actor, so it is skipped.
Fix: remove it from Global Handlers in Project Settings > Plugins > Rolly Save > Save Handlers, and attach it in a Save Rule or Rolly Save component.
Data Validation warning: “has Apply Timing Before Begin Play, which it does not offer”
Cause: an engine state handler needs registered components, which a level that streams in does not have before Begin Play, so it applies After Begin Play.
Fix: pick After Begin Play or When Asked on the entry.
What a Save Handler’s Apply set is gone once the map started
Cause: Apply Timing is Before Begin Play, and the actor Apply changed sets itself up again in its Begin Play, over the loaded state.
Fix: set Apply Timing to After Begin Play in the handler’s Class Defaults.
Setup warning: “has no variable with SaveGame ticked”
Cause: the Save Handler has no variable with SaveGame ticked, so it saves nothing. Compile, Data Validation and the first save of a game report it.
Fix: select each variable that Gather sets and tick SaveGame in its Details (the Variable section’s advanced options).
Compiler Results warning: “Gather in … sets …, which does not have SaveGame ticked”
Cause: a Set node that Event Gather reaches through exec wires writes a variable of the handler without SaveGame ticked, so the value it sets is not saved.
Fix: tick SaveGame on the variable, or stop setting it in Gather if it should not save.
Setup error: “Global Handlers in Project Settings … lists”
Cause: an entry of Global Handlers is empty, names a class that cannot be loaded, such as a Blueprint renamed or deleted, or names an abstract class. That entry does not save.
Fix: pick a Blueprint subclass of Rolly Save Handler again, or remove the entry.
Setup warning: “Global Handlers lists … times”
Cause: one class is listed more than once. It saves once.
Fix: remove the extra entries.
Cook warning: “is named in Project Settings > Plugins > Rolly Save > Global Handlers but does not exist”
Cause: a class listed in Global Handlers was renamed, moved or deleted, so the cook cannot add it.
Fix: pick the class again in Global Handlers, or remove the entry.
Console commands
rolly.save.list says the slot index “does not exist”
Cause: nothing was saved with this File Prefix on this storage: the game saved under another prefix, or with another Storage Backend.
Fix: check File Prefix and Storage Backend in Project Settings > Plugins > Rolly Save, then save once.
rolly.save.dump says “nothing loads”
Cause: the slot holds no save, or no copy of it loads; the status follows in parentheses.
Fix: check the slot’s name with rolly.save.list, and run rolly.save.verify on it to see each copy’s state.
Saved values
A value is back at its default after a load
Cause: the property is not flagged SaveGame; or it is a member of a struct and the member, or the struct property holding it, lacks the flag (every level needs it); or it is also Transient, which wins; or it is editor-only (declared inside WITH_EDITORONLY_DATA), which a packaged game lacks, so Rolly Save leaves it out in the editor too. State an actor or a scene component keeps in its Serialize override is not saved: they save their properties only. Or the property, or a struct member, was renamed after the save was made, and the save still names it the old way.
Fix: flag the property and every struct level above it SaveGame, and remove Transient. Move state kept outside properties into a SaveGame property, or into a component that is not a scene component. After a rename, add the redirect Rename saved data without losing saves names for it.
A renamed Blueprint variable loads in Play In Editor but is empty in the packaged game
Cause: a packaged game finds a renamed Blueprint variable by the ID a save holds beside its name, and a build writes and reads those IDs only for Blueprints cooked with them, which is off by default. The editor always has them. A save written by a build without them holds the variable’s name only.
Fix: for the saves players already have, add +PropertyRedirects=(OldName="/Game/Chests/BP_Chest.BP_Chest_C.OldName",NewName="NewName") under [CoreRedirects] in Config/DefaultEngine.ini: only the redirect restores them. To spare later renames the redirect, also set the Blueprint’s Class Settings > Should Cook Property Guids? to Yes, or Project Settings > Engine > Cooker > Cook Blueprint property GUIDs? to All Blueprints, and keep it on in every build: saves written from then on hold the IDs, while the saves written before still need the redirect. A renamed member of a Blueprint struct needs neither.
A renamed gameplay tag loads under its old name
Cause: saves hold tags by name, and the old name is no tag of the game any more. In the editor the log says “Invalid GameplayTag … found in property”.
Fix: add a redirect in Project Settings > Project > GameplayTags > Gameplay Tag Redirects from the old tag to the new one. Tags in tag containers follow it too.
A property that points at an object loads empty
Cause: the result’s Issues say which. UntrackedObject: when the record was captured, the object had no save ID, was not owned by the saved object, and was neither an asset nor a type, such as another object created during play; or the saved object owns it through an actor, a component or another saved object; or its path is longer than 1,023 characters. UnresolvedReference: the saved object it pointed at was not loaded or was destroyed before the record applied, or no resolver given to the reader knows its ID. RejectedReference: the object of that ID is of a class the property cannot hold. MissingImport: the asset was not loaded when the record applied, since no FRollySavePreloader ran first or its issues list the asset, or it was renamed or deleted; an issue that says “redirected to” names the path a redirect sent it to, where no asset was found. RejectedImport: the asset is now of another class, or of one the property cannot hold.
Fix: register the objects records point at in the FRollySaveNameRegistry or resolver you give to both the writer and the reader, under the same names, and register them before records apply. Apply records that point at each other in one FRollySaveApplySession. Run FRollySavePreloader on the records and apply them from its callback. After moving or renaming an asset, add a redirect in Config/DefaultEngine.ini under [CoreRedirects]: a packaged game has no redirector assets to follow. For an asset moved to another folder, +PackageRedirects=(OldName="/Game/Items/DA_Sword",NewName="/Game/Weapons/DA_Sword"); for a renamed asset, both full paths, +ObjectRedirects=(OldName="/Game/Items/DA_Sword.DA_Sword",NewName="/Game/Items/DA_Blade.DA_Blade"). A Blueprint class takes either +ObjectRedirects or +ClassRedirects on its path ending in _C; a soft reference to it follows +ObjectRedirects only.
An object the saved object owned loads empty or keeps its old values
Cause: the result’s Issues say which. MissingImport: the object’s class was renamed or deleted. RejectedImport: its class is now abstract or deprecated, or the property no longer holds that class; or it is a default subobject, made by its owner’s constructor, whose class changed, so it keeps its place without the saved values. An object inside one of these loads empty too, with an issue that names its outer, even when a default subobject keeps the outer’s place.
Fix: after renaming a class, add a redirect in Config/DefaultEngine.ini under [CoreRedirects], such as +ClassRedirects=(OldName="/Script/MyGame.OldQuest",NewName="/Script/MyGame.Quest"). For a Blueprint class, name its class’s path, which ends in _C, in either redirect: +ObjectRedirects=(OldName="/Game/Quests/BP_OldQuest.BP_OldQuest_C",NewName="/Game/Quests/BP_Quest.BP_Quest_C") or +ClassRedirects with the same paths. A default subobject of a new class starts from its class defaults; move values that must survive the change into the owner’s SaveGame properties.
Capturing fails with LimitExceeded: a text is nested more than 32 levels deep
Cause: a text was built by formatting it into itself again and again, such as a log that adds each line with FText::Format. Every format is one level, and loading each level is a nested call, so a save holds at most 32.
Fix: keep the lines in a TArray<FText> property and join them for display, or save FText::AsCultureInvariant(Text.ToString()) when the text need not follow a language change.
An enum loads as an invalid value, with a warning in the log
Cause: enums are saved by value name, and the saved name is gone from the enum: the value was renamed or deleted. The enum then holds the value one past its last, the enum’s hidden _MAX entry.
Fix: for a renamed value of a C++ enum, add +EnumRedirects=(OldName="/Script/MyGame.EMyEnum",ValueChanges=(("EMyEnum::OldValue","EMyEnum::NewValue"))) under [CoreRedirects] in Config/DefaultEngine.ini. Reordering values needs nothing.
A struct property keeps its default after a load, with “has a struct type mismatch” in the log
Cause: the C++ struct type the property holds was renamed since the save, so the engine skips the saved value; the properties after it still load.
Fix: add +StructRedirects=(OldName="/Script/MyGame.OldStruct",NewName="/Script/MyGame.NewStruct") under [CoreRedirects] in Config/DefaultEngine.ini, the struct names without their F. The same line covers instanced structs and property bags that hold the struct.
An instanced struct is empty after a load, with “Unable to find serialized UScriptStruct” in the log
Cause: the struct type it held was renamed or deleted, so its saved value is skipped; the properties after it still load.
Fix: for a renamed C++ struct, add +StructRedirects=(OldName="/Script/MyGame.OldStruct",NewName="/Script/MyGame.NewStruct") under [CoreRedirects] in Config/DefaultEngine.ini.
A load is refused as Damaged and names a property
Cause: a record of the file holds bytes no save writes, or goes past one of the format’s limits, so the structure check refused it and nothing of the file applied. The result’s detail names the record, the property and what is wrong. The file was edited or forged, or written by a build whose code saved differently, such as a Serialize override that changed what it writes without a version.
Fix: for files your game wrote, check the class the detail names: a Serialize override must call Super::Serialize first and read exactly what it wrote, using a custom version (Ar.UsingCustomVersion) when that changes. Files from other players that fail are refused on purpose.
Capturing fails: “cannot be saved, since a load would refuse what it saves”
Cause: the capture checks its record as a load will. InvalidInput: the data is not what a load reads, most often a Serialize override that writes before it calls Super::Serialize (“must call Super::Serialize”), a property bag whose properties carry flags that change how values are stored, or an instanced struct or property bag holding a struct with a Serialize of its own, such as FInstancedStructContainer, or a property type the save cannot read through (“reads to their end”). LimitExceeded: values nested more than 64 levels deep (each struct, container element, instanced struct and property bag is one level), owned objects nested more than 64 deep, a property bag of more than 1,024 properties, a text that pads a number to more than 1,024 digits, or a text that would display more than about a million characters beyond its saved size in any language, such as formats nested in formats whose patterns repeat an argument, or translated patterns formatting formatted texts three deep. Or the captures of one file, given one FRollySaveCheckBudget, would together pass a bound of a whole file (“a file may”): 262,144 owned objects, texts that display about 67 million characters beyond their saved size (an ordinary line such as “Gold: 1,234” counts about 100), 4,096 property bag layouts, or 256 MiB of instanced struct and property bag values and the container elements inside them.
Fix: call Super::Serialize before writing your own values. Move a struct with a Serialize of its own out of the instanced struct or bag into a property of its class, which saves any struct type. Flatten deep nesting, keep large collections in arrays of structs instead of owned objects, and save the values a long formatted text is built from instead of the text. At a bound of a whole file, split the saved objects across files, or save a long log’s values and rebuild its lines when it loads.
A text shows a missing string table entry after a load, with “Failed to find string table entry” in the log
Cause: the string table the text comes from was not loaded when the record applied. Rolly Save never makes the engine load it then, since a load must not stall the game: the preloader did not run, or the table was renamed, moved or deleted since the save.
Fix: run FRollySavePreloader on the records before they apply. After moving a table, add a +PackageRedirects entry under [CoreRedirects] in Config/DefaultEngine.ini.
The preloader reports RejectedImport: “holds a map”, “no string table there” or “no asset or type”
Cause: a record names a map’s package, a level’s actor package, an object that is loaded but is no asset or type (such as an object in a level), or saved an import as a string table where the asset registry knows none. No save writes these for assets that still exist, so the file was edited, or the asset was replaced by another of that name. A Level Blueprint’s record you captured yourself names its class, which lives in its map’s package.
Fix: none needed: the import is not loaded and the property it fills loads empty. Restore the asset if a game update replaced it. Pass a Level Blueprint’s record to FRollySavePreloader::Start in ClassLoadsElsewhere too: its class loads with its map.
Capturing or applying returns InvalidInput: “called off the game thread” or “while garbage collection runs”
Cause: a capture, a structure check or an apply ran on a worker thread, or from code that garbage collection calls, such as a destructor or BeginDestroy. Records read and change objects and call their functions, which only the game thread may do outside garbage collection, so nothing was captured or applied and no function was called. An apply refused this way keeps its prepared records.
Fix: capture and apply from the game thread, such as from a tick, a timer or the preloader’s callback. Encoding and writing the file may run on a worker afterwards.
Applying returns InvalidInput: “Prepare and apply in one frame”
Cause:FRollySaveApplySession::Apply ran in a later frame than the first Prepare since the last Apply. A type loaded in between would change what the structure check walked, so nothing applied and the prepared records were dropped.
Fix: call Prepare for every record, then Apply, in one function, such as the preloader’s callback; prepare again when a frame has passed.
OnRollySaveLoaded, OnRollySavePreSave or OnRollySaveSaved is never called
Cause: the function takes parameters, returns a value, is static or is a network function; a setup warning in the Message Log names the class. Or its name differs. OnRollySaveLoaded also does not run for an object whose record was refused or did not read to its end.
Fix: declare it exactly as UFUNCTION() void OnRollySaveLoaded(); (or as a Blueprint native event, or a Blueprint function of that name without inputs or outputs), and check the load’s result.
Editor checks
Saving a map shows no check results
Cause: Check After Saving is Off; it was an autosave, which is never checked; the check found only notes, which a save does not list; the map, actor or asset is ignored; or the check’s row in Check Severities is Off.
Fix: use Tools > Rolly Save > Check Open Map, which lists notes too, and review Editor Checks and Check Severities in Project Settings > Plugins > Rolly Save.
A check fires on a level instance
Cause: Custom Save ID in a Level Instance: the map embeds the level several times as Embedded level instances, so the Custom Save ID of an actor inside it repeats in every copy.
Fix: clear the Custom Save ID on the actor inside that level, or set Level Behavior to Standalone on those level instances.
A check says a Reset Area “exists only while” its level is loaded
Cause: the area sits in a sublevel or a Standalone level instance and its shapes reach saving actors of other levels, which it cannot reset while its level is unloaded.
Fix: move the area to the persistent level or into the map, or fit its shapes to its own level’s actors.
A check reports something you intend
Cause: the setup is deliberate, such as a struct member you keep out of saves on purpose.
Fix: press Ignore on the actor or asset in the Message Log, add the folder to Editor Checks > Ignored Folders, or set the check’s row in Check Severities lower or to Off (see Check your save setup).
A revision control submit fails with a Rolly Save error
Cause: a check at Error, such as Duplicate Custom Save ID, fails Data Validation, which runs before a submit.
Fix: fix the problem, ignore it, or set the check’s row in Check Severities to Warning.
The RollySaveCheckProject commandlet exits 2
Cause: nothing to check: no map or Save Rule under -Path, a -Map that names no map, or -Map= or -Path= without a value. The first line it prints counts the maps and rules it found.
Fix: give -Map a map’s long package name, such as /Game/Maps/Tavern, and -Path a content folder, such as /Game/Maps.
Ignore {Asset} says it “could not change” the asset
Cause:Config/DefaultGame.ini is read-only, and revision control did not check it out or the file could not be made writable. Nothing changed.
Fix: check the file out or make it writable, then press Ignore again, or add the asset to Editor Checks > Ignored Assets in Project Settings.
A Blueprint compile warns about struct members or property GUIDs
Cause: a SaveGame variable holds a struct with members without SaveGame, which are not saved, or the Blueprint’s Should Cook Property Guids? gives No, so renaming a SaveGame variable later loses its value in packaged games.
Fix: press Flag Every Member in the Message Log’s message, or tick SaveGame on the members; set Should Cook Property Guids? to Yes in Class Settings. To stop these warnings, untick Editor Checks > Check Blueprints on Compile.
Unloaded actors are counted as “last saved before Rolly Save stored their data in World Partition”
Cause: their actor files were saved before this version, so their World Partition data has no RollySaveId, and duplicate Custom Save IDs among them cannot be found without loading them.
Fix: load and save them once, or resave them with the Resave Actors builder (see Check your save setup).
Testing in the editor
The filter menu’s Rolly Save entry lists level tools, not Saves State
Cause: Type Filters > Rolly Save filters by the classes of Rolly Save’s Place Actors category, such as Save Points and volumes. The filters of what Rolly Save keeps are a group of their own.
Fix: use Other Filters > Rolly Save State.
The Rolly Save column is missing from the outliner
Cause: Editor Preferences > Plugins > Rolly Save > Outliner Column is Hidden; the column is hidden in this outliner; or the experimental outliner of TEDS.UI.SetOutlinerPurpose is on, which shows no plugin columns.
Fix: set Outliner Column to Icon and Reason or Icon Only; right-click the outliner’s header and tick Rolly Save; or go back to the default outliner.
Actors in the outliner read Unloaded
Cause: they are not loaded, their class is not in memory, and their World Partition data has no Rolly Save entry: they were saved before this version, or have no Rolly Save component.
A foliage actor reads If destroyed although its Save Rule saves Instances
Cause: the rule’s Meshes lists none of the painted meshes, so its Instances take none of the actor’s components, and the tooltip names no source that saves instances.
An actor reads If destroyed but should save its values
Cause: nothing gives it state to save: no SaveGame variable, no Rolly Save component and no matching Save Rule that saves something or sets Saving to Always.
Fix: add one of them. Hover the row for what applies to it, or open its Rolly Save component’s Effective Settings.
The viewport shows no Rolly Save markers
Cause: Show > Developer > Rolly Save Markers is off in that viewport; the actor is farther than Max Distance or past Max Markers; it is a Save Point or one of the volumes, which Mark Level Tools leaves out by default; Game View (G) is on; the actor is hidden; or it saves only that it was destroyed. The log names a marker picture that did not load: “Rolly Save: the picture did not load”.
Fix: turn the flag on; raise Max Distance or Max Markers, or tick Mark Level Tools, in Editor Preferences > Plugins > Rolly Save; press G to leave Game View; reinstall the plugin when the log names a picture.
Play from Slot starts in the wrong map
Cause: Keep Current Map is on, so the slot’s values are set in the map you play; the load failed, which a notification names; the server runs in its own process (Play As Client with Run Under One Process off), which loads nothing; or you pressed Simulate.
Fix: untick Keep Current Map in the menu of the save icon right of Play; pick another slot; turn on Run Under One Process in Editor Preferences > Level Editor > Play; press Play.
Set Up Project cannot write its settings
Cause:Config/DefaultGame.ini is read-only, and revision control did not check it out or it could not be made writable. Nothing changed.
Fix: press Check Out or Make Writable in the panel’s notice above its buttons, then Apply again.