How-To: Presets & Profiles

Goal: ship one-click presets (Low/Medium/High) and let players save/load named snapshots of every setting.

Prerequisites
A registry with settings (Quick Start). Both features are optional.

Presets (author a batch of overrides)

Create a UCrimsonSettingPreset data asset and add FCrimsonSettingPresetEntry rows - each maps a DevName to a serialized value (number for scalar, index for discrete). Apply it in one call.

cpp
Registry->ApplyPreset(HighQualityPreset); // sets every listed DevName to its preset value

Named profiles (save / load snapshots)

Profiles serialize all registered settings to a USaveGame slot. All value types round-trip automatically.

cpp
Registry->SaveProfile(TEXT("MyProfile")); // write a snapshot
Registry->LoadProfile(TEXT("MyProfile")); // returns false if the slot is missing
Registry->DeleteProfile(TEXT("MyProfile"));
Registry->ProfileExists(TEXT("MyProfile")); // non-destructive check
// List saved profiles (BlueprintCallable static):
TArray<FString> Slots = UCrimsonSettingBlueprintLibrary::GetSavedProfileSlotNames();
Verify
Applying a preset moves the relevant sliders/options at once; saving then loading a profile restores every value exactly.
Related: hardware auto-detect
UCrimsonSettingScreen::RunHardwareBenchmark() runs UE's GPU/CPU scalability benchmark, applies the recommended quality to UCrimsonSettingsLocal, saves GameUserSettings.ini, and regenerates the registry so the UI reflects it - one call from an 'Auto-Detect' button.