API Reference
Types are in the CrimsonLoadingScreen runtime module unless noted. BP (pure) = pure Blueprint node; BP = Blueprint-callable with exec pins; C++ only = no Blueprint node.
UCrimsonLoadingScreenManager
UGameInstanceSubsystem + FTickableGameObject. Never creates on dedicated servers. Obtain: Blueprint uses the subsystem getter node (search Crimson Loading Screen Manager); C++ uses static UCrimsonLoadingScreenManager* Get(const UObject* WorldContextObject) (C++ only).
| Member | Access | Description |
|---|---|---|
GetCurrentTip() / GetCurrentTipCategory() | BP (pure) | Tip FText / FGameplayTag picked for this load; empty/invalid without a TipsCollection |
GetCurrentBackground() | BP (pure) | UMaterialInterface* picked for this load; null without a BackgroundCollection |
GetShowcaseRenderTarget() | BP (pure) | The configured render target; null unless `bUseLivePreview` is on |
GetCachedCharacterInfo() | BP (pure) | Snapshot gathered when the screen opened (safe while the pawn is gone) |
GetLocalPlayerCharacterInfo() | BP (pure) | Live provider query (PC -> Pawn -> Pawn components, first local player only) |
GetLoadingScreenDisplayStatus() | BP (pure) | True while the widget is on the viewport |
GetDebugReasonForShowingOrHidingLoadingScreen() | BP (pure) | Human-readable current show/hide reason |
OnLoadingScreenVisibilityChanged | C++ only (native multicast) | (bool bIsVisible) - fires on show (before widget creation) and hide |
OnLoadingScreenContentReady | C++ only (native multicast) | (const FCrimsonLoadingCharacterInfo&) - fires just before the screen becomes visible |
On Loading Screen Visibility Changed (OnLoadingScreenVisibilityChangedBP) | BP (assignable) | Blueprint mirror of the native visibility delegate |
On Loading Screen Content Ready (OnLoadingScreenContentReadyBP) | BP (assignable) | Blueprint mirror of the native content-ready delegate |
RegisterLoadingProcessor / UnregisterLoadingProcessor | C++ only | Add/remove an external ICrimsonLoadingProcessInterface vote (stored weakly) |
GetShaderPrecompileState() | BlueprintPure | ECrimsonShaderPrecompileState. Reveal shader UI only on Precompiling. |
GetShaderPrecompileProgress() | BlueprintPure | 0..1. Advisory - the bar can stall below 1.0; completion is delegate-driven. |
GetShaderPrecompilePSOsRemaining() | BlueprintPure | Outstanding PSOs. Clamped to a minimum of 1 by the engine while precompiling. |
GetShaderPrecompilePSOsTotal() | BlueprintPure | Batch size. Estimated if the precompile began before the plugin module loaded. |
IsBlockingOnShaderPrecompile() | BlueprintPure | True while the shader gate specifically is holding the screen. |
RequestBlockUntilShaderPrecompileComplete() | BlueprintCallable | Hold until the batch finishes. Only meaningful in BackgroundThenBlockOnPlay; no-op once complete. |
OnShaderPrecompileProgress / ...BP | Delegate | (float Progress, int32 Remaining, int32 Total). Fires when the outstanding count changes. |
OnShaderPrecompileComplete / ...BP | Delegate | Fires once when the batch finishes. |
UCrimsonLoadingScreenSettings
UDeveloperSettings (Config=Game, DefaultConfig): Project Settings -> Crimson -> Crimson Loading Screen, persisted to DefaultGame.ini under [/Script/CrimsonLoadingScreen.CrimsonLoadingScreenSettings]. Not Blueprint-exposed - runtime values surface through the manager getters. C++: GetDefault<UCrimsonLoadingScreenSettings>().
| Property | Section | Type | Default | Notes |
|---|---|---|---|---|
LoadingScreenWidget | Display | FSoftClassPath (UUserWidget) | empty | Falls back to SThrobber + error log when unset/unloadable |
LoadingScreenZOrder | Display | int32 | 10000 | Viewport Z-order of the widget |
HoldLoadingScreenAdditionalSecs | Timing | float (s) | 2.0 | Seeds the hold CVar at startup; console/cmdline CVar set overrides; skipped in editor unless the Debugging toggle is on |
LoadingScreenHeartbeatHangDuration | Timing | float (s) | 0.0 | Non-zero = hang detector fires after this much continuous visibility; 0 = off |
LogLoadingScreenHeartbeatInterval | Timing | float (s) | 5.0 | Seconds between 'still showing because...' log lines; 0 = off |
TipsCollection | Tips | TSoftObjectPtr<UCrimsonLoadingTipsCollection> | null | Null = no tip text |
bPickNewTipEachLoad | Tips | bool | true | false = one tip per session |
TipCategoryFilter | Tips | FGameplayTag | empty | When set, only matching-Category tips are candidates |
BackgroundCollection | Backgrounds | TSoftObjectPtr<UCrimsonLoadingBackgroundCollection> | null | Null = no background |
bPickNewBackgroundEachLoad | Backgrounds | bool | true | false = one background per session |
bUseLivePreview | Cinematic Preview | bool | false | Keeps world rendering ON during loads; unlocks the render target below |
ShowcaseRenderTarget | Cinematic Preview | TSoftObjectPtr<UTextureRenderTarget2D> | null | EditCondition: bUseLivePreview |
bForceTickLoadingScreenEvenInEditor | Debugging | bool | true | Force one Slate tick on show in PIE so the widget appears immediately |
bHoldLoadingScreenAdditionalSecsEvenInEditor | Debugging | bool (Transient) | false | Apply the hold delay in PIE; not saved to config |
bEnableShaderPrecompileGate | Shader Precompilation | bool | true | Master switch for all PSO precompile handling. |
ShaderPrecompileGateMode | Shader Precompilation | ECrimsonShaderPrecompileGateMode | BlockUntilComplete | Whether and when a precompile holds the screen. |
ShaderPrecompileGraceSecs | Shader Precompilation | float | 2.0 | Hold silently this long before revealing shader UI. |
MaxShaderPrecompileBlockSecs | Shader Precompilation | float | 0.0 | Hard cap on the hold; 0 means none. Backstop only. |
bRunShaderPrecompileGateInEditor | Shader Precompilation | bool | false | Editor never opens a bundled cache; use SimulateSecs instead. |
bHoldForRuntimePSOPrecache | Runtime PSO Precache | bool | false | Drain outstanding precache requests before the screen hides. |
RuntimePSOPrecacheMinPriority | Runtime PSO Precache | ECrimsonPSOPrecacheWaitPriority | HighAndAbove | Feeds r.PSOPrecaching.MinPriorityForActivePrecacheRequests. |
RuntimePSOPrecacheThreshold | Runtime PSO Precache | int32 | 0 | Outstanding requests tolerated before hiding. |
MaxRuntimePSOPrecacheWaitSecs | Runtime PSO Precache | float | 10.0 | Cap on the drain. Not optional. |
Hold votes
| Type | Kind | Description |
|---|---|---|
ICrimsonLoadingProcessInterface | UInterface | C++ only to implement (plain virtual ShouldShowLoadingScreen(FString& OutReason)). Auto-polled on GameState, local PlayerControllers, and all their components; other objects register via the manager. Static helper ShouldShowLoadingScreen(UObject*, FString&) tests any object. |
UCrimsonLoadingProcessTask | UObject + the interface | BP: CreateLoadingScreenProcessTask(WorldContextObject, Reason) (static factory - keep the returned reference in a variable!), Unregister(), SetShowLoadingScreenReason(Reason). Held weakly by the manager: dropping every reference lets GC release the hold automatically. |
Tips & backgrounds
| Type | Kind | Description |
|---|---|---|
FCrimsonLoadingTip | Struct (BlueprintType) | Text (FText), Category (FGameplayTag), Weight (float, min 0.01, default 1.0). All read-only in BP. |
UCrimsonLoadingTipsCollection | UDataAsset | Tips array. BP: GetRandomTip(CategoryFilter, OutTip) - weighted random, category-filtered, returns false when nothing matches. |
UCrimsonLoadingBackgroundCollection | UDataAsset | Backgrounds - TArray<TSoftObjectPtr<UMaterialInterface>>, loaded on demand per pick. |
Cinematic preview
| Type | Kind | Description |
|---|---|---|
ICrimsonLoadingCharacterProvider | UInterface (BP-implementable) | GetLoadingCharacterInfo(OutInfo) -> bool - BlueprintNativeEvent; implement on the PC, Pawn, or a Pawn component. First valid result wins; first local player only. |
ICrimsonLoadingCinematicInterface | UInterface (BP-implementable) | OnLoadingScreenStarted(CharacterInfo) / OnLoadingScreenEnded() - BlueprintNativeEvents; sent to every actor in the current world on show/hide (ended gets an empty info). |
FCrimsonLoadingCharacterInfo | Struct (BlueprintType) | MeshComponents, AdditionalActors - both readable and writable in BP. C++-only helpers: IsValid() (a leader with a mesh exists), GetLeaderComponent(). |
FCrimsonLoadingMeshComponent | Struct (BlueprintType) | SlotName, Mesh (null = empty slot), Materials, AnimInstanceClass (leader only), bIsLeader, RelativeTransform. All BP-writable. |
FCrimsonLoadingActorEntry | Struct (BlueprintType) | ActorTypeTag, Mesh, Materials, AnimInstanceClass, AttachSocketName (None = free placement), RelativeTransform. All BP-writable. C++-only IsValid(). |
Console variables & flags
| Name | Default | Description |
|---|---|---|
CrimsonLoadingScreen.HoldLoadingScreenAdditionalSecs | seeded from the Project Setting (2.0) | Post-load hold in seconds; console/cmdline set overrides the setting |
CrimsonLoadingScreen.LogLoadingScreenReasonEveryFrame | false | Print the show/hide reason every frame - first tool for a stuck screen |
CrimsonLoadingScreen.AlwaysShow | false | Pin the screen up for widget iteration |
-NoLoadingScreen (command line) | - | Suppress the loading screen entirely; non-shipping builds only |
CrimsonLoadingScreen.ShaderPrecompile.Disable | 0 | Disable all PSO precompile handling, overriding project settings. |
CrimsonLoadingScreen.ShaderPrecompile.LogProgress | 0 | Log precompile progress whenever the outstanding count changes. |
CrimsonLoadingScreen.ShaderPrecompile.SimulateSecs | 0 | Simulate an N-second precompile so the UI can be authored in PIE. Self-clearing. |
Editor tooling & logging
| Item | Description |
|---|---|
MCP tool crimson.loading.get_state | Editor module; requires an active PIE session. Returns visibility, debug reason, current tip, and tip category. |
| MCP resources | crimson://schema/loadingscreen/tips-collection (generated class doc) and crimson://patterns/loadingscreen/setup (setup walkthrough). |
Log category LogCrimsonLoadingScreen | All manager activity: show/hide reasons, widget load errors, visible-duration summaries. |
Shader precompilation types
| Type | Kind | Description |
|---|---|---|
ECrimsonShaderPrecompileState | UENUM | Idle / Warming / Precompiling / Complete. Warming is inside the grace period - show nothing. |
ECrimsonShaderPrecompileGateMode | UENUM | BlockUntilComplete / BackgroundThenBlockOnPlay / NeverBlock. |
ECrimsonPSOPrecacheWaitPriority | UENUM | All / MediumAndAbove / HighAndAbove / HighestOnly. |
FCrimsonShaderPrecompileMonitor | Private class | Module-owned observer of FShaderPipelineCache. Not public API; reach it via the manager. |
Modules
| Module | Type | Notes |
|---|---|---|
CrimsonLoadingScreen | Runtime | Everything above except MCP. Public deps: Core, CoreUObject, GameplayTags, CrimsonCommon. |
CrimsonLoadingScreenEditor | Editor | MCP tool + schema resources only; never ships in packaged builds. |