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)

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

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

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.

Modules

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