API Reference
Types are in CrimsonSettings unless noted. BP = Blueprint-callable.
Authoring & registry
| Type | Kind | Description |
|---|---|---|
UCrimsonSettingsDataAsset | UDataAsset | Sections 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). |
UCrimsonSettingRegistry | Abstract, Blueprintable | BP: 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 builders | BP + 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. |
UCrimsonSettingBlueprintLibrary | UBlueprintFunctionLibrary | Factory nodes: Create Collection, Create Scalar/Discrete Setting, Create Action, Add Setting To Collection; Get Saved Profile Slot Names. |
UCrimsonSettingsDeveloperSettings | UDeveloperSettingsBackedByCVars | The 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
| Type | Kind | Description |
|---|---|---|
UCrimsonSetting | Abstract UObject | Base: DevName, DisplayName, description, Tags, PerformanceImpact, restart/confirmation flags, edit conditions, conflict rules. |
UCrimsonSettingValueScalar_BP | Scalar value | Slider. OnGetValue/OnSetValue/OnGetFormattedText; BPSourceRange/BPSourceStep/BPDefaultValue; optional keyed storage source. |
UCrimsonSettingValueDiscrete_BP | Discrete value | Options. OnGetOptions/OnGetIndex/OnSetIndex; BPOptions/BPDefaultIndex; optional keyed storage source. |
UCrimsonSettingValueScalarDynamic / ...DiscreteDynamic | C++ value | Data-source-backed (SetDynamicGetter/SetDynamicSetter). Discrete has _Bool/_Number/_Enum/_Color/_Vector2D variants. |
UCrimsonSettingAction | Action | Button; fires a named action tag or custom delegate. |
UCrimsonSettingCollection / ...Collapsible | Container | Section grouping; collapsible variant fires OnExpandedChanged. |
ECrimsonSettingChangeReason | Enum | Change, DependencyChanged, ResetToDefault, RestoreToInitial. |
ECrimsonSettingPerformanceImpact | Enum | None/Low/Medium/High/VeryHigh - drives the row badge. |
Storage
| Type | Kind | Description |
|---|---|---|
UCrimsonSettingsShared | ULocalPlayerSaveGame | Per-player save. Keyed store BP: Get/Set Float/Int/Bool/String Value, Has Keyed Value. Broadcasts OnSettingChanged; SaveSettings. Static LoadOrCreateSettings(LocalPlayer) (no singleton). |
UCrimsonSharedSettingsSubsystem | ULocalPlayerSubsystem | Owns/loads the per-player UCrimsonSettingsShared; BP Get Shared Settings; static Get(LocalPlayer); debounced auto-save on change. |
UCrimsonSettingsLocal | UGameUserSettings | Machine-local (GameUserSettings.ini): display, audio, input, scalability. Static Get(); RunAutoBenchmark(bSaveImmediately) (the screen's RunHardwareBenchmark calls it). |
UCrimsonSettingsLocal - performance stats (removed) | Both | No 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) | struct | Moved to CrimsonCore (UCrimsonCorePerfStatSettings). |
FCrimsonSettingDataSource | C++ interface | Resolve/GetValueAsString/SetValue over a ULocalPlayer context. Impls: ...LocalSettingDataSourceStatic, ...SettingDataSourceDynamic, FCrimsonKeyedSharedSettingDataSource. |
UCrimsonSettingsProfile / ...ProfileIndex | USaveGame | A TMap<FName,FString> snapshot of all settings, and the index of saved slots. |
UCrimsonSettingPreset / FCrimsonSettingPresetEntry | UDataAsset / struct | A named batch of DevName -> value overrides applied via Apply Preset. |
Input & rebinding
| Type | Kind | Description |
|---|---|---|
UCrimsonSettingKeyboardInput | UCrimsonSettingValue | One 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_KeyboardInput | Row widget | Required 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. |
ECrimsonKeybindDisplayMode | Enum | Normal (Full Names) / Glyphs (Platform Glyphs, the default) / Short (Abbreviated). |
FCrimsonKeyAbbreviation | Struct | One Key -> Abbreviation override for Short mode. |
UCrimsonSettingRegistry::KeybindingSettingClass | Property (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). |
UCommonActionWidget | Widget (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 tags | CrimsonSettings.Action.Brightness, CrimsonSettings.Action.SafeZone, CrimsonSettings.Action.Benchmark - broadcast through OnSettingNamedActionEvent when an action row fires. |
Presentation
| Type | Kind | Description |
|---|---|---|
UCrimsonSettingScreen | CommonActivatableWidget | Screen 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. |
UCrimsonSettingPanel | CommonUserWidget | Scrollable list. Set Search Text, Set Tag Filter, Clear Tag Filter. |
UCrimsonSettingListEntry | Row widget | K2_OnSettingAssigned, K2_OnSettingStateChanged (dirty/default), K2_OnConflictWarningChanged; IsSettingDirty, IsSettingAtDefault, GetConflictWarningText. |
UCrimsonSettingRegistryChangeTracker | UObject | Drives Apply/Cancel; AnyDirtySettingRequiresRestart(). |
FCrimsonSettingConflictRule | Struct | Watches another setting's value and surfaces an inline warning. |
CrimsonSettingsTags | Namespace | Built-in category tags (Performance/Visual/Audio/Input/Gameplay/Accessibility) for tag filtering. |
UCrimsonFirstRunWizard / UCrimsonFirstRunStep | Widgets | First-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 / UCrimsonSafeZoneEditor | Abstract CommonActivatableWidget | Calibration 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_SafeZoneEditor | Action rows | Each 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. |