Rune use recording¶
What is recorded¶
The Mind Palace plaque design records two kinds of footage for each learned rune:
- The first successful use of the rune.
- The three most recent uses of the rune.
The checkpoint save stores the first-use clip: each used rune's knowledge entry holds one FName recording ID. The three most recent uses are specified by the Mind Palace design and join the knowledge entry as a recent-use list when the plaques need them.
Clip length¶
Each Mind Palace plaque clip is specified as 2 to 3 seconds long and looping.
The clip save format does not store a fixed length field. Playback length comes from the recorded frames and their per-frame timestamps. UGameplayRecordingWidget::PlayRecording accepts a loop flag, so a plaque can request looping playback directly.
Where it is viewed¶
Recordings are viewed on a pedestal plaque in the Memory Palace.
The large plaque shows the first successful use. Three smaller plaques show the three most recent uses. Playback occurs only while the player is zoomed into that pedestal. When the player exits the zoomed view, playback stops.
Storage¶
Rune-to-clip keying¶
Rune knowledge lives in the checkpoint save, URephrasedSaveGame::Knowledge. Each rune's FRuneKnowledgeEntry holds FirstUseRecordingId, the clip of its first successful use.
URephrasedSaveSubsystem exposes:
HasUsedRune(URuneDataAsset* Rune): true once the rune has been part of an activated sentence.GetRecordingForRune(URuneDataAsset* Rune): returns the first-use recording ID, orNoneif the rune has not been used.MarkRuneUsed(URuneDataAsset* Rune, FName RecordingId): links the rune to a clip.
When a sentence activates, the rune coordinator records one clip and links it to both words, but only to a word that has no clip yet, so each rune keeps its first use. The write lands in the resident save and reaches disk with the next checkpoint.
At world start and again when recording begins, UGameplayRecorderSubsystem deletes every clip slot the save no longer references (GetReferencedRecordingIds). It waits until the save has been read, so clips are never swept before their references load.
Clip storage¶
UGameplayRecordingSave extends USaveGame and stores one recorded clip. Each clip lives in its own save slot so clips load independently.
Clip fields:
Version:int32, value2.RecordingId:FName.FrameSize:FIntPoint.FramesPerSecond:float.Frames:TArray<FGameplayRecordingFrame>.
Each FGameplayRecordingFrame contains:
JpegData:TArray<uint8>.TimeSeconds:float, the seconds since the clip started. Frames are not evenly spaced when the game hitches, so playback follows this timestamp.
The class provides:
GetSlotName(FName RecordingId).HasRecording(FName RecordingId).DeleteRecording(FName RecordingId).
Recorder subsystem¶
UGameplayRecorderSubsystem is a UWorldSubsystem that records low-resolution gameplay clips. It captures the game view without the HUD and saves each clip to its own save slot.
StartOrJoinRecording(UObject* Holder)returns the recording ID. A clip keeps recording while at least one holder has joined it.ReleaseRecording(UObject* Holder, bool bKeepClip)drops a hold. Once no holders remain, the clip records a short post-roll and then saves.- A clip is written to disk only if at least one holder released with
bKeepClip. - Clips auto-stop at a hard frame cap.
- Frames come from a scene capture that mirrors the player camera, are read back from the GPU without blocking, and are JPEG-compressed on worker threads.
- Finishing a stopped clip, including draining its last frames, serializing, and writing, stays off the game thread so saving does not hitch.
Playback widget¶
UGameplayRecordingWidget is the UUserWidget base for playing a saved clip into an image widget.
- Blueprint subclasses must name their image widget
FrameImage; the field isBindWidgetand case-sensitive. PlayRecording(FName RecordingId, bool bLoop)loads the clip asynchronously and plays it.StopPlayback()stops playback and leaves the current frame on screen.OnPlaybackFinishedandOnRecordingNotFound(FName RecordingId)are Blueprint-implemented events.- The widget decodes one JPEG frame at a time into a single transient texture and keeps playing while the game is paused.
A Mind Palace pedestal hosts a Blueprint subclass of UGameplayRecordingWidget on its plaque and plays the recording ID from GetRecordingForRune while the player is focused on it.
Saves during development¶
The console variable Rephrased.Save.WipeOnPlay is on by default, so everyday development starts clean: ARephraseCharacter::BeginPlay calls WipeAllSaves, which clears the checkpoint save, its knowledge, and every clip slot. Set it to 0 to keep saves and clips across PIE runs. Only pawns with bClearsSaveOnBeginPlay wipe, so the Mind Palace pawn leaves progress alone.
Authoring rule for designers¶
Recording happens automatically when a rune command resolves. Designers do not author clips, place recording triggers, or hand-create plaque footage. The clip is a capture of the gameplay view around that successful use.
What to check before calling it done¶
- A rune used for the first time produces a clip.
- The clip is 2 to 3 seconds long and loops on the plaque.
- A fourth use replaces the oldest of the three recent clips, once the knowledge entry holds a recent-use list.
- Reloading keeps recordings, with
Rephrased.Save.WipeOnPlayset to0. - Pedestal playback loops while zoomed in and stops when the player exits the zoomed view.
Sources¶
- Mind Palace Doc (Sept 10) - https://docs.google.com/document/d/1SJmAOAfufwu9qbgOUCZI1GF3yFlYUOLtF2s-FMq7W0w/edit - covers the Mind Palace pedestal plaques and the 2 to 3 second looping recording specification.
Change history¶
- 2026-09-29 — Gabriel Li — Recording links live in the checkpoint save's rune knowledge; documented the clip sweep and
Rephrased.Save.WipeOnPlay. - 2026-09-17 — Gabriel Li — Rewrote the page as the Rune use recording specification and aligned the storage description with the verified UPlayerRuneKnowledge, UGameplayRecordingSave, UGameplayRecorderSubsystem, and UGameplayRecordingWidget headers.
- 2026-09-10 — rsafadi — Initial page: first-use rune recordings.