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