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).

MemberAccessDescription
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
OnLoadingScreenVisibilityChangedC++ only (native multicast)(bool bIsVisible) - fires on show (before widget creation) and hide
OnLoadingScreenContentReadyC++ 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 / UnregisterLoadingProcessorC++ onlyAdd/remove an external ICrimsonLoadingProcessInterface vote (stored weakly)
GetShaderPrecompileState()BlueprintPureECrimsonShaderPrecompileState. Reveal shader UI only on Precompiling.
GetShaderPrecompileProgress()BlueprintPure0..1. Advisory - the bar can stall below 1.0; completion is delegate-driven.
GetShaderPrecompilePSOsRemaining()BlueprintPureOutstanding PSOs. Clamped to a minimum of 1 by the engine while precompiling.
GetShaderPrecompilePSOsTotal()BlueprintPureBatch size. Estimated if the precompile began before the plugin module loaded.
IsBlockingOnShaderPrecompile()BlueprintPureTrue while the shader gate specifically is holding the screen.
RequestBlockUntilShaderPrecompileComplete()BlueprintCallableHold until the batch finishes. Only meaningful in BackgroundThenBlockOnPlay; no-op once complete.
OnShaderPrecompileProgress / ...BPDelegate(float Progress, int32 Remaining, int32 Total). Fires when the outstanding count changes.
OnShaderPrecompileComplete / ...BPDelegateFires 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>().

PropertySectionTypeDefaultNotes
LoadingScreenWidgetDisplayFSoftClassPath (UUserWidget)emptyFalls back to SThrobber + error log when unset/unloadable
LoadingScreenZOrderDisplayint3210000Viewport Z-order of the widget
HoldLoadingScreenAdditionalSecsTimingfloat (s)2.0Seeds the hold CVar at startup; console/cmdline CVar set overrides; skipped in editor unless the Debugging toggle is on
LoadingScreenHeartbeatHangDurationTimingfloat (s)0.0Non-zero = hang detector fires after this much continuous visibility; 0 = off
LogLoadingScreenHeartbeatIntervalTimingfloat (s)5.0Seconds between 'still showing because...' log lines; 0 = off
TipsCollectionTipsTSoftObjectPtr<UCrimsonLoadingTipsCollection>nullNull = no tip text
bPickNewTipEachLoadTipsbooltruefalse = one tip per session
TipCategoryFilterTipsFGameplayTagemptyWhen set, only matching-Category tips are candidates
BackgroundCollectionBackgroundsTSoftObjectPtr<UCrimsonLoadingBackgroundCollection>nullNull = no background
bPickNewBackgroundEachLoadBackgroundsbooltruefalse = one background per session
bUseLivePreviewCinematic PreviewboolfalseKeeps world rendering ON during loads; unlocks the render target below
ShowcaseRenderTargetCinematic PreviewTSoftObjectPtr<UTextureRenderTarget2D>nullEditCondition: bUseLivePreview
bForceTickLoadingScreenEvenInEditorDebuggingbooltrueForce one Slate tick on show in PIE so the widget appears immediately
bHoldLoadingScreenAdditionalSecsEvenInEditorDebuggingbool (Transient)falseApply the hold delay in PIE; not saved to config
bEnableShaderPrecompileGateShader PrecompilationbooltrueMaster switch for all PSO precompile handling.
ShaderPrecompileGateModeShader PrecompilationECrimsonShaderPrecompileGateModeBlockUntilCompleteWhether and when a precompile holds the screen.
ShaderPrecompileGraceSecsShader Precompilationfloat2.0Hold silently this long before revealing shader UI.
MaxShaderPrecompileBlockSecsShader Precompilationfloat0.0Hard cap on the hold; 0 means none. Backstop only.
bRunShaderPrecompileGateInEditorShader PrecompilationboolfalseEditor never opens a bundled cache; use SimulateSecs instead.
bHoldForRuntimePSOPrecacheRuntime PSO PrecacheboolfalseDrain outstanding precache requests before the screen hides.
RuntimePSOPrecacheMinPriorityRuntime PSO PrecacheECrimsonPSOPrecacheWaitPriorityHighAndAboveFeeds r.PSOPrecaching.MinPriorityForActivePrecacheRequests.
RuntimePSOPrecacheThresholdRuntime PSO Precacheint320Outstanding requests tolerated before hiding.
MaxRuntimePSOPrecacheWaitSecsRuntime PSO Precachefloat10.0Cap on the drain. Not optional.

Hold votes

TypeKindDescription
ICrimsonLoadingProcessInterfaceUInterfaceC++ 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.
UCrimsonLoadingProcessTaskUObject + the interfaceBP: 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

TypeKindDescription
FCrimsonLoadingTipStruct (BlueprintType)Text (FText), Category (FGameplayTag), Weight (float, min 0.01, default 1.0). All read-only in BP.
UCrimsonLoadingTipsCollectionUDataAssetTips array. BP: GetRandomTip(CategoryFilter, OutTip) - weighted random, category-filtered, returns false when nothing matches.
UCrimsonLoadingBackgroundCollectionUDataAssetBackgrounds - TArray<TSoftObjectPtr<UMaterialInterface>>, loaded on demand per pick.

Cinematic preview

TypeKindDescription
ICrimsonLoadingCharacterProviderUInterface (BP-implementable)GetLoadingCharacterInfo(OutInfo) -> bool - BlueprintNativeEvent; implement on the PC, Pawn, or a Pawn component. First valid result wins; first local player only.
ICrimsonLoadingCinematicInterfaceUInterface (BP-implementable)OnLoadingScreenStarted(CharacterInfo) / OnLoadingScreenEnded() - BlueprintNativeEvents; sent to every actor in the current world on show/hide (ended gets an empty info).
FCrimsonLoadingCharacterInfoStruct (BlueprintType)MeshComponents, AdditionalActors - both readable and writable in BP. C++-only helpers: IsValid() (a leader with a mesh exists), GetLeaderComponent().
FCrimsonLoadingMeshComponentStruct (BlueprintType)SlotName, Mesh (null = empty slot), Materials, AnimInstanceClass (leader only), bIsLeader, RelativeTransform. All BP-writable.
FCrimsonLoadingActorEntryStruct (BlueprintType)ActorTypeTag, Mesh, Materials, AnimInstanceClass, AttachSocketName (None = free placement), RelativeTransform. All BP-writable. C++-only IsValid().

Console variables & flags

NameDefaultDescription
CrimsonLoadingScreen.HoldLoadingScreenAdditionalSecsseeded from the Project Setting (2.0)Post-load hold in seconds; console/cmdline set overrides the setting
CrimsonLoadingScreen.LogLoadingScreenReasonEveryFramefalsePrint the show/hide reason every frame - first tool for a stuck screen
CrimsonLoadingScreen.AlwaysShowfalsePin the screen up for widget iteration
-NoLoadingScreen (command line)-Suppress the loading screen entirely; non-shipping builds only
CrimsonLoadingScreen.ShaderPrecompile.Disable0Disable all PSO precompile handling, overriding project settings.
CrimsonLoadingScreen.ShaderPrecompile.LogProgress0Log precompile progress whenever the outstanding count changes.
CrimsonLoadingScreen.ShaderPrecompile.SimulateSecs0Simulate an N-second precompile so the UI can be authored in PIE. Self-clearing.

Editor tooling & logging

ItemDescription
MCP tool crimson.loading.get_stateEditor module; requires an active PIE session. Returns visibility, debug reason, current tip, and tip category.
MCP resourcescrimson://schema/loadingscreen/tips-collection (generated class doc) and crimson://patterns/loadingscreen/setup (setup walkthrough).
Log category LogCrimsonLoadingScreenAll manager activity: show/hide reasons, widget load errors, visible-duration summaries.

Shader precompilation types

TypeKindDescription
ECrimsonShaderPrecompileStateUENUMIdle / Warming / Precompiling / Complete. Warming is inside the grace period - show nothing.
ECrimsonShaderPrecompileGateModeUENUMBlockUntilComplete / BackgroundThenBlockOnPlay / NeverBlock.
ECrimsonPSOPrecacheWaitPriorityUENUMAll / MediumAndAbove / HighAndAbove / HighestOnly.
FCrimsonShaderPrecompileMonitorPrivate classModule-owned observer of FShaderPipelineCache. Not public API; reach it via the manager.

Modules

ModuleTypeNotes
CrimsonLoadingScreenRuntimeEverything above except MCP. Public deps: Core, CoreUObject, GameplayTags, CrimsonCommon.
CrimsonLoadingScreenEditorEditorMCP tool + schema resources only; never ships in packaged builds.