How-To: Turnkey Save Setup with CrimsonCore

Goal: get a working save/load loop with essentially no C++ by using the ready-made integration in the CrimsonCore plugin. (CrimsonCore - requires all Crimson plugins.)

This page needs CrimsonCore
(CrimsonCore - requires all Crimson plugins.) CrimsonCore is free to download, but compiles only with all Crimson plugins installed - it depends on every one of them. If you own CrimsonSaveSystem alone, this page is not your path: build the same loop yourself with Quick Start: Saveable Systems, How-To: Persist a Level Actor, and How-To: Build a Save/Load Menu, which cover the identical ground using only this plugin.
Prerequisites
Your project uses CrimsonCore (its GameMode ACrimsonGameMode, GameState, and ACrimsonPlayerState). CrimsonCore already depends on CrimsonSaveSystem.

1. Use the CrimsonCore game framework classes

ACrimsonGameMode already forwards player login/logout to the save manager (NotifyPlayerLoggedIn / NotifyPlayerLoggedOut) and saves on exit, and ACrimsonPlayerState already saves its per-player data (stat tags, squad id) as a player-scoped fragment. No wiring needed.

Verify
In a Listen Server + Client PIE test with bVerboseLogging on, the log shows the player's fragment loading on join and flushing on leave.

2. Make your world actors persist

Reparent placed actors to ACrimsonPersistentActor (it implements ICrimsonSaveableActor for you) and mark their variables SaveGame. Shipped ACrimsonCorePickupActor pickups already persist as collected.

Content Browser -> right-click -> Blueprint Class -> search Crimson Persistent Actor (CrimsonCore - requires all Crimson plugins) -> create. Then, for each variable you want persisted, select it in My Blueprint -> Details -> Advanced -> tick `SaveGame`. The parent class already implements ICrimsonSaveableActor and carries a persistent id component, so there is nothing else to add.

3. Drive New Game / Save / Load from your menu

UCrimsonSaveFacade is a Blueprint function library with one-call helpers. Save Game guarantees an active slot and - because the main save includes world state - persists systems and world actors in one call.

In your save-menu widget, bind each button to one facade node. Right-click in the graph and search Start New Game, Save Game, Load Game, Get Save Slots, or Delete Slot - they all sit under the Crimson|SaveSystem category. The main one is On Clicked (SaveButton) -> Save Game -> Branch on its return value, so you can show a failure toast when no slot is active.

Start New Game takes Slot Index and Character Name; Load Game and Delete Slot take Slot Index; Get Save Slots returns the header array. These are static library nodes, so there is no manager to fetch first, and their World Context Object pin stays hidden in an Actor or Widget graph - the node resolves the world from the graph's own owner.

Verify
New Game -> change a persistent actor -> Save -> restart PIE -> Load. Everything comes back, with no save code written by you beyond the menu button bindings.

See also

  • How-To: Build a Save/Load Menu - the full slot-list / delete / metadata recipe
  • How-To: Save Player Progression - extend the player-state fragment
  • How-To: Persist a Level Actor - the raw-interface path without CrimsonCore