Reset policies and persistence
The four axes of FWSRFResetPolicy — triggers, persistence mode, restore strategy and runtime-Actor behaviour — and how they combine.
FWSRFResetPolicy answers four independent questions. Keeping them separate is deliberate: choosing
a persistence mode never forces a restore strategy, and neither dictates what happens to Actors that
were spawned while the game was running.
| Axis | Field | Question it answers |
|---|---|---|
| Triggers | ResetTriggers | Which reset events apply to this Actor |
| Persistence | PersistenceMode | Does the change come back, stay, or happen once |
| Restore | RestoreStrategy | How the Actor returns to its captured state |
| Runtime | RuntimeActorBehavior | What happens to Actors spawned during play |
Reset triggers
A Gameplay Tag container. A request selects a record only when the request’s Reason is present
here. An empty trigger set means the Actor never responds to any reset — the Inspector reports that
as a configuration warning, because it is almost always a mistake.
Persistence mode
EWSRFPersistenceMode:
| Value | Behaviour |
|---|---|
Resettable | The Actor returns to its captured state on a matching reset. Session-only: excluded from persistent export. |
Persistent | Never modified by an ordinary reset. Included in persistent snapshots. |
OneShot | Can be permanently consumed or completed. Included in persistent snapshots. |
Persistent means untouched, not remembered
A Persistent record is skipped by resets. Whether that state survives a new session depends on
your save flow — you still have to call Capture WSRF Persistent State and store the snapshot. See
Persistence adapter.
The classic souls-like arrangement, expressed in three records:
| Actor | Mode | Result after a rest |
|---|---|---|
| Enemy | Resettable | Respawns |
| Shortcut door | Persistent | Stays open |
| Unique pickup | OneShot | Stays consumed |
Selection rules
- A normal resettable record is selected only when its Region and reset-reason tag both match.
- A
Persistentrecord is never selected by a normal reset. - A
OneShotrecord is unconditionally excluded from normal reset selection, even when the request reason is empty or invalid — empty triggers are not the protection mechanism. A consumed Boss / Elite or Unique Pickup never returns from rest, player death, manual or region reset, and aOneShotActor whose origin isRuntimeSpawnedis never removed by a normal reset because it is never selected.
Restore strategy
EWSRFRestoreStrategy:
| Value | Behaviour |
|---|---|
Automatic | Restore only the built-in snapshot: transform, tags, visibility, collision, tick, mesh components, supported instance properties |
AutomaticThenInterface | Restore the automatic snapshot and attachments, then call the custom-state interface. Default. |
InterfaceOnly | Call the custom-state interface without automatic Actor/component restoration |
AutomaticThenInterface is the default for new components, and an Actor that does not implement
IWSRFResettable behaves exactly like Automatic. Choosing InterfaceOnly means you take full
responsibility for putting the Actor back — useful for Actors whose visual state is driven entirely
by their own logic. Automatic component capture still occurs for InterfaceOnly: it keeps
persistence, respawn data, diagnostics and later runtime policy changes complete.
InterfaceOnly without the interface
Selecting InterfaceOnly on an Actor that does not implement WSRF Resettable produces an Actor
that is scheduled but never actually restored. Validation flags this case.
Runtime Actor behaviour
EWSRFRuntimeActorBehavior applies to Actors whose origin is RuntimeSpawned:
| Value | Behaviour |
|---|---|
RemoveOnMatchingReset | Destroy the Actor when a matching reset runs. Default. |
Preserve | Leave it alone |
RestoreToCapturedState | Keep it, but return it to its captured state |
Ignore | Do not manage it at all during resets |
RestoreToCapturedState cannot resurrect
RestoreToCapturedState restores a surviving spawned Actor. It cannot respawn a
runtime-spawned Actor that has already been destroyed — WSRF has no authored source placement for
that instance. Recreate it from a surviving owner or spawner, or store explicit project logic in
Custom State.
See Runtime-spawned Actors for the full lifecycle, including how origin is detected.
Actor origin
EWSRFActorOrigin decides which rules apply:
| Value | Meaning |
|---|---|
Auto | Detected from how the Actor came into the world. Default. |
Placed | Treat as authored in a level |
RuntimeSpawned | Treat as created during play |
Override this only for unusual workflows — for example an Actor spawned by a construction step that should nevertheless be treated as placed content.
Combinations worth knowing
| Goal | Triggers | Mode | Strategy | Runtime |
|---|---|---|---|---|
| Enemy that respawns at a bonfire | Rest, PlayerDeath, Region | Resettable | AutomaticThenInterface | RemoveOnMatchingReset |
| Prop that is genuinely destroyed and comes back | Rest, Region | Resettable | AutomaticThenInterface | — |
| Shortcut that stays open forever | any | Persistent | Automatic | — |
| Chest that can only be opened once | any | OneShot | AutomaticThenInterface | — |
| Boss-fight adds that vanish on restart | EncounterRestart | Resettable | Automatic | RemoveOnMatchingReset |
| Summoned ally that survives the reset | any | Resettable | Automatic | Preserve |
Each of those is what a shipped preset configures, which is why the presets are the recommended starting point rather than a beginner’s shortcut.
Where the policy lives
Three places, in order of precedence at registration time:
FWSRFRegistrationOptions::Policy, when registering explicitly from code;- the state component’s
ResetPolicy, for the normal component workflow; - the World Manifest entry, which carries the authored policy so a never-loaded Actor is still known to the subsystem.
All three use the same struct, so a policy authored in the editor is the policy applied at runtime.
At runtime, Set Reset Policy updates the subsystem immediately for the current play session. The
change is transient — it does not rewrite the authored Blueprint or component default — and a reset
already in progress keeps the policy snapshot taken when its selection began; the new policy applies
to later resets.
Last updated: 2026-09-04