Every tool here acts on the server or in a standalone game; on a client it does nothing, and its calls report NotAuthority once.
The four placed tools are in Place Actors under Save:
Save when the player walks in (Checkpoint Volume)
- Drag Checkpoint Volume from Place Actors > Save into the level. Scale its brush over the path, such as the end of a bridge.
- Under Rolly Save in its Details, fill in Checkpoint Name, such as
Bridge(at most 128 characters), and Slot Location, such asOld Bridge.
When a player’s pawn enters, it saves a checkpoint as Save Rolly Checkpoint does, into memory and the slot checkpoint, and slot lists show its name and place. It triggers Once: the save holds it triggered, so after Load Rolly Checkpoint walking in again saves nothing. A save that fails clears Triggered, so the next entry tries again; during a save block the checkpoint waits and saves when the block goes. See Autosave and save checkpoints for the retry.
A Checkpoint Volume placed in the level has a shape; one spawned during play has no brush, never triggers and says so (SpawnedVolume). To save from something spawned, use a component (see Spawn tools and areas during play).
Autosave when the player enters an area
Drag Autosave Volume from Place Actors > Save over the area and scale its brush. For an autosave from an actor of your own, give a Blueprint actor a Box Collision and a Rolly Save Trigger component (Add Component, Rolly group) and set the trigger’s Action to Autosave. Each entry requests an autosave with the actor’s name as the reason, as Request Autosave does: it is dropped within Minimum Gap of the last save to storage, after Stop Autosave and in a map listed in Maps Without Autosave, and the log says why. Tick Ignore Minimum Gap for an autosave that must happen right after another save, such as after a story moment. In a map without autosave, Data Validation and the Message Log report AutosaveExcludedMap.
Add a save point
A save point is an object the player uses, such as a shrine, or walks up to. Drag Save Point from Place Actors > Save into the level. In its Details, pick your Mesh in place of the engine’s cylinder and set Overlap Radius, the reach at which walking up triggers it. Pick its Action:
| Action | Does |
|---|---|
| Automatic | Asks for the slot screen, in Slot Screen’s mode, for a local player when something listens to On Slot Screen Requested, the Rolly Save Subsystem’s or the trigger’s own; when no listener handles the request (NotMarkedCheckpoint), when nothing listens, and for remote players, saves a checkpoint, also with the mode at Load or New Game |
| Save Checkpoint | Saves a checkpoint named Checkpoint Name |
| Autosave | Requests an autosave |
| Save to Slot | Saves the game to Slot Name, such as Slot 1 |
| Open Slot Screen | Asks for the slot screen, in Slot Screen’s mode (Save, Load or New Game); saves nothing itself. With nothing listening it reports NoListener once, and with listeners none of which handled the request NotMarked |
| Events Only | Saves nothing; your graph acts in On Triggered |
The slot screen request reaches On Slot Screen Requested on the Rolly Save Subsystem, with the player, the mode and the save point, then the trigger’s own On Slot Screen Requested, both while the request runs. Bind either to open your menu, and call Mark Slot Screen Request Handled in that listener before it returns, as Rolly Save’s slot screen does when it opens: only a marked request counts as handled, so a listener that only watches, such as one that writes a log line, leaves Automatic’s checkpoint in place. Turn off Project Settings > Plugins > Rolly Save > Slots > Slot Screen Requests Need a Mark to count every listener, as before. A remote player cannot get a screen from the server: Automatic saves a checkpoint for them, and Open Slot Screen fires the event and reports RemotePlayer once.
Make your own actor a save point
To make a save point of your own Blueprint, such as a campfire or a bed, add a Rolly Save Trigger to any actor with a Box, Sphere or Capsule Collision. With Shapes empty, every Box, Sphere and Capsule Collision and brush of the actor is its shape; a mesh counts only when you pick it in Shapes. Two shapes of one trigger make one entry and one leave for an actor in both.
The shape must generate overlap events and overlap the Pawn channel for players and pawns. Data Validation names a shape that never triggers (NeverTriggers) and a Shapes entry it cannot use (ShapeNotFound).
Choose who triggers it and how often
| Setting | Values |
|---|---|
| Trigger By | Players (pawns a player controls), Any Pawn (AI too), Any Actor (anything its shape overlaps, such as a cart; set the shape to overlap that actor’s channel) |
| Players | Any Player, Local Players Only (the listen server’s host and split-screen players), All Players Inside (triggers when the last player with a pawn walks in, such as at a co-op exit) |
| Triggers | Once (per playthrough; saved), Once per Visit (each time its map opens, by travel or a load), Each Entry |
| Cooldown | With Each Entry, entries this many seconds of game time after it triggered are ignored |
| Filter, Except | Only actors that pass Filter trigger it; actors any Except entry matches never do. For players and pawns the pawn is checked. Maps limits where it acts |
| Trigger on Appear | Off: an actor already inside when the map begins play, placed inside by a load or spawned inside, such as at a respawn, triggers only after it leaves and enters again. On: it triggers once the map began play, the load ended, or the frame after the spawn |
On a dedicated server Local Players Only never triggers and says so (LocalPlayersOnServer).
Trigger it from your interaction system
Turn Trigger on Overlap off when only your code should trigger it, such as on an interact key.
Blueprint
On the server, call Trigger on the Rolly Save Trigger with the pawn, its controller or the actor that uses it as User. Enabled, Trigger By, Players, Filter, Triggers, Cooldown and Can Trigger Rolly Save apply as for walking in. It returns Triggered, false when a check refused, on a client, and while Is Restoring is true.
React when it triggers
| Event | Fires |
|---|---|
| On Triggered | Right before the action, with the User; Set Slot Location and Set Slot Game Fields called here reach this save |
| On Save Finished | When the action’s save ended, with its Result; not for an autosave that was dropped |
| On Slot Screen Requested | When the action asked for the slot screen |
| On State Changed | When Enabled or Triggered changes, on the server and, when its actor replicates, on clients |
Use On State Changed for looks, such as a lit campfire, and set them in Begin Play too: a load that opens the map sets Triggered and Enabled before Begin Play, without the event. A load with Keep Current Map that changes them calls it.
To refuse a use, implement the Rolly Save Trigger Interface on the trigger’s actor (Class Settings > Interfaces) and return false from Can Trigger Rolly Save, such as while enemies are near. A Blueprint child of the Checkpoint Volume overrides it in My Blueprint > Interfaces.
Blueprint
Bind the events on the component in the actor’s graph. For a placed Save Point or volume, select it, open the Level Blueprint, right-click and create a reference to it, drag from the reference to get its Trigger, and drag from that to Assign On Triggered.
C++
#include "Level/RollySaveTriggerInterface.h"
// In an actor that implements IRollySaveTriggerInterface:
bool AMyShrine::CanTriggerRollySave_Implementation(URollySaveTriggerComponent* Trigger, AActor* User)
{
return !bEnemiesNear;
}
SavePoint->OnTriggered.AddDynamic(this, &AMyShrine::HandleSaved); // void HandleSaved(AActor* User), a UFUNCTIONTurn tools on and off during play
Set Enabled turns a trigger or a Reset Area on or off, such as off once a dungeon is cleared; Rearm lets a Once or Once per Visit trigger trigger again and ends its Cooldown. Saves keep Enabled and Triggered, and clients see them through On State Changed.
Reset an area when the player returns
Drag Reset Area Volume from Place Actors > Save over the place, such as a cave with loot and enemies, or add a Rolly Save Reset Area component to an actor with a Box, Sphere or Capsule Collision. With Resets at On Revisit, each return to the level by travel starts the saved actors inside as designed: changed values reset, placed actors destroyed in play come back, and actors spawned during play inside, such as dropped loot, are removed. What a player holds is never removed. Untick Remove Spawned Actors to keep spawned actors and reset only placed ones.
An area decides by place: placed actors by where the level puts them, so a crate carried out comes home and one pushed in keeps its state; spawned actors by where they were saved. An actor’s components, child actors and attached handlers reset with it. The area never resets its own actor; another area can.
With Reset Instances ticked, the default, the area also resets the saved instances of instanced meshes and foliage inside its shapes, each by its own place, whatever its actor’s place, changes kept for another mesh included: felled trees inside come back, moved ones go home and ones planted inside go, while the rest of a foliage actor that spans the map keeps its harvest (see Save harvested foliage and instanced meshes). Untick it to reset actors and leave instances as the player left them. With Resets at Never, removed instances inside do not regrow while the area holds them, and regrow by their kept time once it is gone or turned off (see Regrow removed instances).
Resets need Remember Levels (on by default) and Actors under What Saves: without them every return starts the level as designed anyway, and Data Validation says so (LevelsNotRemembered, ActorsNotSaved). A load restores the saved world and resets nothing, apart from marked areas (see Reset an area now).
Was Reset on Arrival is true when the area reset as the level was built, so a spawner’s Begin Play can spawn its enemies again; On Area Reset fires once the level’s actors have begun play.
In a streaming level, a level instance or a World Partition cell, an area resets as its level streams in again, with that level’s own leave clock: an area spanning cells resets each cell’s actors when that cell was away long enough, placed actors destroyed in play included. A level that streams in for the first time after the player arrived follows the arrival’s decision, and a level’s first return after a load follows the load: only marked areas reset it. A level the engine shows again as the same object, before garbage collection takes it, keeps its actors as they left and resets nothing until a load changes its records. A spawned area that leaves with its level keeps its shape, so it resets that level’s actors before it is back itself. On Area Reset fires once that level’s actors have begun play, before On Streamed Level Ready (see Save streamed levels and World Partition worlds). An area in a streaming sublevel or a Standalone level instance exists only while its level is loaded, so it cannot reset the actors of other levels while its level is unloaded; Check Open Map warns about one whose shapes reach saving actors of other levels (see Check your save setup).
Reset after time passes
Set Resets to After Game Time and Reset After to the time, such as 3600 for an hour (1 second to 100 years; Data Validation reports values outside, BadDuration). A return resets the area once that much time passed on Clock since the player left. A clock that went back resets nothing and counts from the next leave.
| Clock | Counts |
|---|---|
| Project Default | Project Settings > Plugins > Rolly Save > Reset Areas > Reset Clock: Play Time (default) or Game Clock |
| Play Time | The game’s play time: pauses stop it, saves keep it |
| Game Clock | Your game’s time, such as in-game days, from the Game Clock Class in Project Settings |
Blueprint
For in-game days, make a Blueprint of Rolly Save Game Clock, override Get Game Time Seconds to return your calendar’s seconds (0 or more), such as from your Game Instance, and pick it as Game Clock Class in Project Settings. It is read once at each leave and level build, never polled. A time that is not a number, negative or above 100 years resets nothing and is reported once (BadTime).
C++
UCLASS()
class UMyCalendarClock : public URollySaveGameClock
{
GENERATED_BODY()
public:
virtual double GetGameTimeSeconds_Implementation() const override
{
const UMyGameInstance* Game = GetWorld() ? GetWorld()->GetGameInstance<UMyGameInstance>() : nullptr;
return Game ? Game->CalendarSeconds : 0.0;
}
};Decide where areas overlap
Where areas overlap, the one with the higher Priority decides; the area’s Details list its Overlapping Areas. With equal Priority, the one that resets least decides: Never, then On New Game Plus, then After Game Time (the longer Reset After first), then On Revisit. Areas that tie reset an actor only when each of them would. An area whose Filter or Except leaves an actor out does not decide for it.
For a dungeon that respawns until it is cleared: an On Revisit area over the dungeon, and a Never area with Priority 1 over the boss room, so the boss stays dead. Or call Set Enabled with false on the dungeon’s area once it is cleared.
Reset an area now
A reset applies when the level is next built. Mark Area for Reset marks an area for that build: the next return by travel, or a load of a save made after the call. Mark All Areas for Reset marks every area of the current map. To reset at once, mark, save with Save Game to Rolly Memory Slot, and load that slot with Load Game from Rolly Memory Slot and Open Saved Map (see Keep snapshots in memory). Is Marked for Reset is true until the reset happens; saves keep the mark.
Keep places through New Game Plus
Areas with Resets at Never keep their actors through returns, loads and New Game Plus, such as a player’s house whose furniture stays in the next cycle. Start Rolly New Game Plus keeps the saved state of the actors inside enabled Never areas, spawned actors inside and areas on spawned actors included, while everything else starts as designed, other areas too: an area turned off or marked in the last cycle is on and unmarked. It keeps them in the map it is called in and, with Remember Levels on, in every level Rolly Save kept. Without Remember Levels it keeps the map it is called in only when New Game Plus opens that same map, and Data Validation says so on each Never area (LevelsNotRemembered).
On New Game Plus areas keep their actors through returns and loads, and their actors start as designed at New Game Plus, as the rest of the world does. See Start New Game+.
Read the tools in the editor
Each tool shows a sprite, a label and, for a volume, a brush colour, in the editor only:
| Tool | Brush | Label |
|---|---|---|
| Save Point | its mesh | what its Action saves to: the Checkpoint Name, the slot, Load, New Game or Events Only |
| Checkpoint Volume | blue | its Checkpoint Name |
| Autosave Volume | cyan | none |
| Reset Area Volume | rose | its Resets, such as On Revisit, After 1 h or Never, Priority 1 |
A label ends in (off) while Enabled is off. Show > Sprites > Rolly Save hides the sprites; Show > Advanced > Render (3D) Text hides the labels.
In the Details, Rolly Save comes first after Transform. Checks lists what Data Validation finds wrong with the tool, each problem with its fix, as you edit it. A Reset Area placed in a level lists its Overlapping Areas: the enabled areas of the level whose bounds overlap its own, at most 8, and which area decides where they overlap (see Decide where areas overlap); while the area is off, the others decide. Click a name to select that area.
Spawn tools and areas during play
A volume spawned during play has no brush, so it never triggers or resets anything, and says so once (SpawnedVolume). Spawn a Blueprint actor with a Box, Sphere or Capsule Collision and a Rolly Save Trigger or Rolly Save Reset Area instead.
A Reset Area on a spawned actor saves a snapshot of its settings and shapes, so it resets on a return before its actor is spawned again. A Box, Sphere or Capsule Collision is kept exactly; any other shape, such as a mesh, as its bounding box, reported once per class (SpawnedShape). A Gameplay Tag Query in its Filter or Except is kept up to 64 expressions and 64 tags, nested at most 8 deep; an area with a larger query resets nothing before its actor is back (SpawnedTagQuery).
Play with several players
Triggers and areas act on the server: clients’ pawns trigger them there, and a client’s own calls do nothing. Local Players Only ignores remote players’ pawns; All Players Inside waits for every player with a pawn. Enabled and Triggered replicate when the actor replicates, for looks on clients through On State Changed. Is Restoring on the Rolly Save Subsystem is true while a load or a level’s return sets saved values; triggers ignore entries then, so check it in triggers of your own.