API Reference

Types are in CrimsonSettings unless noted. BP = Blueprint-callable.

Authoring & registry

TypeKindDescription
UCrimsonSettingsDataAssetUDataAssetSections of FCrimsonSettingDescriptor entries. Per entry: Type, DevName, DisplayName, Description, Storage (bPersistToSharedStore, StorageKey), type fields (range/step/options/action text), Metadata (PerformanceImpact, bRequiresRestart, bRequiresConfirmation, SettingTags, ConflictRules).
UCrimsonSettingRegistryAbstract, BlueprintableBP: Populate From Data Asset (optional ParentCollection nests each section instead of giving it a tab), K2_BindSetting, K2_RegisterVideo/Audio/Input/GameplaySettings, K2_RegisterSetting, K2_RegisterKeybindingSettings(LocalPlayer, Collection, bGamepad), Apply Preset, Save/Load/Delete Profile, Profile Exists, Get Saved Profile Slot Names, Set Preview Mode, and the five AddDefault*Settings builders. C++: Initialize, OnInitialize, Regenerate, IsFinishedInitializing, SaveChanges, RegisterSetting, RegisterSettingInParent, FindSettingByDevName / FindSettingByDevNameChecked<T>, GetSettingsForFilter, GetTopLevelSettings() (registration order - what a tab rail is built from). Events (C++): OnSettingChangedEvent, OnSettingEditConditionChangedEvent, OnSettingNamedActionEvent, OnExecuteNavigationEvent. Events (BP): On Setting Named Action (OnSettingNamedActionBP) - a BlueprintAssignable mirror of OnSettingNamedActionEvent, same payload, broadcast right after it.
UCrimsonSettingRegistry - default buildersBP + C++AddDefaultVideoSettings, AddDefaultAudioSettings, AddDefaultMouseAndKeyboardSettings, AddDefaultGamepadSettings, AddDefaultGameplaySettings. Each builds its collection from this plugin's own storage and setting types, registers it, and returns it so a caller can append rows. Input splits by DEVICE, so each input builder ends with a Keybindings sub-collection filled by K2_RegisterKeybindingSettings. See How-To: Use the Ready-Made Collections.
UCrimsonSettingBlueprintLibraryUBlueprintFunctionLibraryFactory nodes: Create Collection, Create Scalar/Discrete Setting, Create Action, Add Setting To Collection; Get Saved Profile Slot Names.
UCrimsonSettingsDeveloperSettingsUDeveloperSettingsBackedByCVarsThe one Project Settings entry (Crimson -> Crimson Settings, config = Game). Audio: DefaultControlBusMix, LoadingScreenControlBusMix, UserSettingsControlBusMix and the five per-bus paths. Keybind display: KeybindDisplayMode (Normal / Glyphs / Short; Glyphs is the default), KeyAbbreviations (ships with 23 entries), GetAbbreviatedKeyName(Key). Critical bindings: CriticalMappingNames (ships empty), IsCriticalMapping(Name). Performance: DesktopFrameRateLimits.

Settings & value types

TypeKindDescription
UCrimsonSettingAbstract UObjectBase: DevName, DisplayName, description, Tags, PerformanceImpact, restart/confirmation flags, edit conditions, conflict rules.
UCrimsonSettingValueScalar_BPScalar valueSlider. OnGetValue/OnSetValue/OnGetFormattedText; BPSourceRange/BPSourceStep/BPDefaultValue; optional keyed storage source.
UCrimsonSettingValueDiscrete_BPDiscrete valueOptions. OnGetOptions/OnGetIndex/OnSetIndex; BPOptions/BPDefaultIndex; optional keyed storage source.
UCrimsonSettingValueScalarDynamic / ...DiscreteDynamicC++ valueData-source-backed (SetDynamicGetter/SetDynamicSetter). Discrete has _Bool/_Number/_Enum/_Color/_Vector2D variants.
UCrimsonSettingActionActionButton; fires a named action tag or custom delegate.
UCrimsonSettingCollection / ...CollapsibleContainerSection grouping; collapsible variant fires OnExpandedChanged.
ECrimsonSettingChangeReasonEnumChange, DependencyChanged, ResetToDefault, RestoreToInitial.
ECrimsonSettingPerformanceImpactEnumNone/Low/Medium/High/VeryHigh - drives the row badge.

Storage

TypeKindDescription
UCrimsonSettingsSharedULocalPlayerSaveGamePer-player save. Keyed store BP: Get/Set Float/Int/Bool/String Value, Has Keyed Value. Broadcasts OnSettingChanged; SaveSettings. Static LoadOrCreateSettings(LocalPlayer) (no singleton).
UCrimsonSharedSettingsSubsystemULocalPlayerSubsystemOwns/loads the per-player UCrimsonSettingsShared; BP Get Shared Settings; static Get(LocalPlayer); debounced auto-save on change.
UCrimsonSettingsLocalUGameUserSettingsMachine-local (GameUserSettings.ini): display, audio, input, scalability. Static Get(); RunAutoBenchmark(bSaveImmediately) (the screen's RunHardwareBenchmark calls it).
UCrimsonSettingsLocal - performance stats (removed)BothNo longer part of this plugin. See How-To: Performance Stats on the HUD for building the page yourself (CrimsonCore ships a ready-made one).
FCrimsonPerformanceStatGroup (removed)structMoved to CrimsonCore (UCrimsonCorePerfStatSettings).
FCrimsonSettingDataSourceC++ interfaceResolve/GetValueAsString/SetValue over a ULocalPlayer context. Impls: ...LocalSettingDataSourceStatic, ...SettingDataSourceDynamic, FCrimsonKeyedSharedSettingDataSource.
UCrimsonSettingsProfile / ...ProfileIndexUSaveGameA TMap<FName,FString> snapshot of all settings, and the index of saved slots.
UCrimsonSettingPreset / FCrimsonSettingPresetEntryUDataAsset / structA named batch of DevName -> value overrides applied via Apply Preset.

Input & rebinding

TypeKindDescription
UCrimsonSettingKeyboardInputUCrimsonSettingValueOne rebindable action, scoped to ONE device. C++ only - the class declares no UFUNCTIONs. GetSlotForButton, GetKeyForButton, GetKeyTextForButton(ButtonIndex, DisplayMode) (virtual), ChangeBinding(ButtonIndex, Key), GetAllMappedActionsFromKey, ClearConflictingBindings, IsMappingCustomized (virtual), protected hooks OnBindingApplied / OnBindingResetToDefault / DoesMappingConflict / OnConflictingBindingCleared, GetAssociatedInputAction, MakeDeviceDevName(ActionName, bGamepad) (static). Warning state: IsCriticalMapping, IsUnboundOnThisDevice, ShouldWarnUnbound.
UCrimsonSettingsListEntrySetting_KeyboardInputRow widgetRequired binds Button_PrimaryKey, Button_SecondaryKey, Button_Clear, Button_ResetToDefault. Optional UCommonActionWidget glyph slots ActionWidget_PrimaryKey, ActionWidget_SecondaryKey, ActionWidget_PrimaryKey_Gamepad, ActionWidget_SecondaryKey_Gamepad. Text: CriticalUnboundText, CriticalUnboundTooltip, ClearButtonTooltip, ResetButtonTooltip.
ECrimsonKeybindDisplayModeEnumNormal (Full Names) / Glyphs (Platform Glyphs, the default) / Short (Abbreviated).
FCrimsonKeyAbbreviationStructOne Key -> Abbreviation override for Short mode.
UCrimsonSettingRegistry::KeybindingSettingClassProperty (EditDefaultsOnly, BlueprintReadWrite)The UCrimsonSettingKeyboardInput subclass the registry builds for keybind rows. Point it at a subclass to add chord support (CrimsonCore's UCrimsonCoreSettingKeyboardInput is the reference).
UCommonActionWidgetWidget (Epic CommonUI)What the four glyph slots are typed as. Subclass it to add a key-slot property, an input-type pin, and a fallback that reads UEnhancedInputUserSettings::GetActiveKeyProfile() when no mapping context is applied - see How-To: Rebindable Keys.
CrimsonSettingsTags::Action_*Gameplay tagsCrimsonSettings.Action.Brightness, CrimsonSettings.Action.SafeZone, CrimsonSettings.Action.Benchmark - broadcast through OnSettingNamedActionEvent when an action row fires.

Presentation

TypeKindDescription
UCrimsonSettingScreenCommonActivatableWidgetScreen base. Override CreateRegistry (C++) or Create Registry (K2_CreateRegistry); requires a Settings_Panel bind-widget. BP: ApplyChanges, CancelChanges, ResetToDefaults, SetLivePreview, RunHardwareBenchmark(WorkScale=10), NavigateToSetting / NavigateToSettings, AttemptToPopNavigation, GetSettingCollection, ConfirmSettingChange / RevertSettingChange, ClearDirtyState. Hooks: K2_OnRestartRequired, K2_OnConfirmationRequired, OnSettingsDirtyStateChanged (BlueprintNativeEvent); native twins NativeOnRestartRequired, NativeOnConfirmationRequired.
UCrimsonSettingPanelCommonUserWidgetScrollable list. Set Search Text, Set Tag Filter, Clear Tag Filter.
UCrimsonSettingListEntryRow widgetK2_OnSettingAssigned, K2_OnSettingStateChanged (dirty/default), K2_OnConflictWarningChanged; IsSettingDirty, IsSettingAtDefault, GetConflictWarningText.
UCrimsonSettingRegistryChangeTrackerUObjectDrives Apply/Cancel; AnyDirtySettingRequiresRestart().
FCrimsonSettingConflictRuleStructWatches another setting's value and surfaces an inline warning.
CrimsonSettingsTagsNamespaceBuilt-in category tags (Performance/Visual/Audio/Input/Gameplay/Accessibility) for tag filtering.
UCrimsonFirstRunWizard / UCrimsonFirstRunStepWidgetsFirst-run sequence. Wizard BP: HasCompletedSetup() (static), GoToNextStep (refuses while the step's CanAdvance() is false; finishes on the last step), GoToPreviousStep, FinishSetup, SkipSetup, GetCurrentStepIndex, GetTotalSteps, GetCurrentStep, IsAtFirstStep, IsAtLastStep; properties StepClasses, bAutoSkipIfCompleted (default true). Hooks K2_OnStepChanged / K2_OnWizardComplete / K2_OnWizardSkipped with native twins. Step: K2_OnStepActivated / K2_OnStepDeactivated (native twins), CanAdvance and GetStepTitle (BlueprintNativeEvent). State: UCrimsonFirstRunState, a USaveGame with bSetupCompleted, in slot CrimsonSettings.FirstRun (user index 0). Finish records completion; Skip deliberately does not.
UCrimsonBrightnessEditor / UCrimsonSafeZoneEditorAbstract CommonActivatableWidgetCalibration screens implementing ICrimsonSettingActionInterface. Binds Switcher_SafeZoneMessage, RichText_Default, Button_Back, Button_Done; property bCanCancel. Adjust live on the gamepad right stick (Gamepad_RightY, 0.2 dead zone) and the mouse wheel, read straight from Slate rather than through an Input Action. Gamma clamps 1.0 - 3.0. See How-To: Brightness & Safe Zone Calibration.
UCrimsonSettingAction_BrightnessEditor / UCrimsonSettingAction_SafeZoneEditorAction rowsEach supplies a child UCrimsonSettingValueScalarDynamic (DisplayGamma 1.0 - 3.0 step 0.01, and the safe-zone value) so Done writes through the registry and Apply lights up. The safe-zone row carries FCrimsonSettingEditCondition_SafeZoneEditable, which hides it unless the platform declares Platform.Trait.SupportsSafeZoneEditing or UCrimsonSettingsLocal::IsTitleSafePaddingAvailable() is true.