Files
UE5-Modular-Game-Framework/docs/blueprints/05-saveload/37_BP_Checkpoint.md
Lefteris Notas 411edea8ce add blueprints
2026-05-19 13:22:27 +03:00

7.4 KiB

BP_Checkpoint — Checkpoint Actor

File: Content/Framework/Save/BP_Checkpoint

Purpose: Manages checkpoint volumes in the world, tracks the most recent checkpoint crossed by the player, and triggers save operations via SS_SaveManager. Also stores respawn transform data for use by the death handling systems.

Depends On: SS_SaveManager, GM_CoreGameMode Used By: Player Controller or Game Mode (placed at game setup)


Enums

// E_CheckpointActivationMode — Determines when a checkpoint triggers
E_CheckpointActivationMode
{
  OnOverlap,     // Player overlaps the checkpoint volume
  OnInteract,    // Player must press an interact key at the checkpoint
  Automated      // Triggered by external event (e.g., completing a puzzle)
}

Structs

// S_CheckpointData — Runtime data for one checkpoint
S_CheckpointData
{
  CheckpointTag:      GameplayTag   // Unique identifier for this checkpoint
  DisplayName:        FText         // "Save Room - Floor 2", etc.
  RespawnLocation:    Transform     // Where the player spawns on reload
  CameraCutTransform: Transform     // Optional camera cut point for respawn transition
  bHasBeenUsed:       Bool          // Has the player crossed this checkpoint?
  ActivationMode:     E_CheckpointActivationMode
  bAutoSave:          Bool          // Does crossing this checkpoint trigger an auto-save?
  LinkedObjectives:   Array of GameplayTag  // Objectives to mark complete on activation
}

// S_RespawnCache — Lightweight in-memory respawn data (not saved to disk)
S_RespawnCache
{
  LastCheckpointTag:      GameplayTag
  LastCheckpointLocation: Transform
  bIsRespawnFromDeath:    Bool      // False = checkpoint load, True = death respawn
  DeathCountAtCheckpoint: Integer   // Snapshot of death count for metrics
}

Variables

Name Type Description
RegisteredCheckpoints Map (GameplayTag → S_CheckpointData) All checkpoint volumes in the current level
ActiveCheckpoint S_CheckpointData The most recently activated checkpoint
RespawnCache S_RespawnCache Lightweight cache for respawn without full load
bCanCrossCheckpoint Bool Cooldown guard to prevent double-trigger (reset after 0.5s)
DefaultRespawnTransform Transform Fallback spawn point if no checkpoint exists (level start)
CheckpointCooldownTimer Float Timer handle for cooldown (0.5s default)

Functions / Events

Name Inputs Outputs Description
RegisterCheckpoint Data: S_CheckpointData Adds a checkpoint to the registered map
UnregisterCheckpoint CheckpointTag: GameplayTag Removes a checkpoint from the map
ActivateCheckpoint CheckpointTag: GameplayTag Sets the given checkpoint as active; triggers save if bAutoSave is true
GetActiveCheckpoint S_CheckpointData Returns the currently active checkpoint
GetRespawnTransform Transform Returns the respawn location (active checkpoint or fallback)
HasActiveCheckpoint Bool Returns whether a checkpoint has been crossed
GetCheckpointList Array of S_CheckpointData Returns all registered checkpoints (for UI map / fast travel)
ClearCheckpointData Resets all checkpoint state (on new game)
SetDefaultRespawn Transform: Transform Sets the fallback respawn point when no checkpoint exists
OnPlayerDeath Fired by GM_CoreGameMode; caches current checkpoint as death respawn point
OnPlayerRespawn Fired after respawn; clears death flags

Event Dispatchers

Name Parameters Fired When
OnCheckpointActivated CheckpointTag: GameplayTag, DisplayName: FText A checkpoint is crossed and becomes active
OnCheckpointSaveTriggered CheckpointTag: GameplayTag An auto-save was triggered by this checkpoint
OnRespawnPointSet RespawnTransform: Transform The respawn point has changed
OnCheckpointListChanged CheckpointCount: Int A checkpoint was added or removed

Blueprint Flow Diagram

flowchart TD
    A[Player overlaps checkpoint volume] --> B{Volume implements\nI_CheckpointVolume?}
    B -->|No| C[Ignore]
    B -->|Yes| D[Get checkpoint GameplayTag]
    D --> E{Can cross?\nbCanCrossCheckpoint}
    E -->|No| F[Ignore]
    E -->|Yes| G[Set bCanCrossCheckpoint = false]
    G --> H[Lookup in RegisteredCheckpoints map]
    H --> I{Found?}
    I -->|No| J[Log warning: unregistered checkpoint]
    I -->|Yes| K[Set ActiveCheckpoint = found data]
    K --> L[Set RespawnCache.LastCheckpointTag]
    L --> M[Set RespawnCache.LastCheckpointLocation]
    M --> N[Broadcast OnCheckpointActivated]
    N --> O{bAutoSave?}
    O -->|Yes| P[SS_SaveManager.SaveCheckpoint\nCheckpointTag]
    P --> Q[Broadcast OnCheckpointSaveTriggered]
    O -->|No| R[Skip save]
    R --> S[Start cooldown timer 0.5s]
    Q --> S
    S --> T[Timer expires -> set bCanCrossCheckpoint = true]

Communication Matrix

Target System Method Why
SS_SaveManager Direct call SaveCheckpoint Trigger checkpoint auto-save
SS_SaveManager Bind to OnLoadComplete Restore active checkpoint tag after load
GM_CoreGameMode Bind to death/respawn events Receive death and respawn notifications
BPC_PlayerRespawnSystem Provide GetRespawnTransform Supply respawn location on death
BPC_DeathHandlingSystem Provide RespawnCache data Death handling reads cache for appropriate flow
Checkpoint Volume Actors Interface call Register/unregister via BeginPlay/EndPlay
WBP_CheckpointNotification Dispatcher OnCheckpointActivated Show "Checkpoint Saved" HUD notification
WBP_MapWidget Function GetCheckpointList Display discovered checkpoints on map

Checkpoint Volume Setup

BP_CheckpointVolume (Box Collision, Render CustomDepth)
  └── Collision: OverlapOnly (PlayerOnly)
  └── OnComponentBeginOverlap
       └── Get owner's CheckpointTag (GameplayTag)
       └── Call BP_Checkpoint.ActivateCheckpoint(Tag)

Checkpoint Volume Variables:

Variable Type Source
CheckpointTag GameplayTag Set per-instance in level
DisplayName FText Set in defaults (e.g., "Hospital Lobby")
RespawnLocation Transform Arrow component on the volume
CameraCutTransform Transform Optional arrow component
ActivationMode E_CheckpointActivationMode Overlap by default
bAutoSave Bool True by default

Reuse Notes

  • Each checkpoint volume creates itself by calling RegisterCheckpoint in BeginPlay with its configured S_CheckpointData
  • Single-player only — multiplayer requires a server-authorised version with per-player checkpoint tracking
  • The 0.5s cooldown prevents double-activation from overlapping two volumes simultaneously
  • DefaultRespawnTransform should be set by GM_CoreGameMode on level start from the PlayerStart actor
  • CheckpointTag naming convention: Checkpoint.<LevelName>.<AreaName>
  • Renamed from BPC_CheckpointSystem to BP_Checkpoint per Master naming convention.