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.

AxisFieldQuestion it answers
TriggersResetTriggersWhich reset events apply to this Actor
PersistencePersistenceModeDoes the change come back, stay, or happen once
RestoreRestoreStrategyHow the Actor returns to its captured state
RuntimeRuntimeActorBehaviorWhat 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:

ValueBehaviour
ResettableThe Actor returns to its captured state on a matching reset. Session-only: excluded from persistent export.
PersistentNever modified by an ordinary reset. Included in persistent snapshots.
OneShotCan 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:

ActorModeResult after a rest
EnemyResettableRespawns
Shortcut doorPersistentStays open
Unique pickupOneShotStays consumed

Selection rules

  • A normal resettable record is selected only when its Region and reset-reason tag both match.
  • A Persistent record is never selected by a normal reset.
  • A OneShot record 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 a OneShot Actor whose origin is RuntimeSpawned is never removed by a normal reset because it is never selected.

Restore strategy

EWSRFRestoreStrategy:

ValueBehaviour
AutomaticRestore only the built-in snapshot: transform, tags, visibility, collision, tick, mesh components, supported instance properties
AutomaticThenInterfaceRestore the automatic snapshot and attachments, then call the custom-state interface. Default.
InterfaceOnlyCall 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:

ValueBehaviour
RemoveOnMatchingResetDestroy the Actor when a matching reset runs. Default.
PreserveLeave it alone
RestoreToCapturedStateKeep it, but return it to its captured state
IgnoreDo 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:

ValueMeaning
AutoDetected from how the Actor came into the world. Default.
PlacedTreat as authored in a level
RuntimeSpawnedTreat 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

GoalTriggersModeStrategyRuntime
Enemy that respawns at a bonfireRest, PlayerDeath, RegionResettableAutomaticThenInterfaceRemoveOnMatchingReset
Prop that is genuinely destroyed and comes backRest, RegionResettableAutomaticThenInterface—
Shortcut that stays open foreveranyPersistentAutomatic—
Chest that can only be opened onceanyOneShotAutomaticThenInterface—
Boss-fight adds that vanish on restartEncounterRestartResettableAutomaticRemoveOnMatchingReset
Summoned ally that survives the resetanyResettableAutomaticPreserve

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:

  1. FWSRFRegistrationOptions::Policy, when registering explicitly from code;
  2. the state component’s ResetPolicy, for the normal component workflow;
  3. 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

Type to search titles, sections and keywords.