# 78 — WBP_SplashScreen ## Blueprint Spec — UE 5.5–5.7 --- ### Parent Class `UserWidget` ### Dependencies - [`BPC_LoadingScreen`](../11-polish/76_BPC_LoadingScreen.md) — Transition to loading - [`BPC_AudioManager`](../10-adaptive/66_BPC_AudioManager.md) — Splash audio - [`BPC_InputManager`](../02-player/13_BPC_InputManager.md) — Skip input - [`GI_GameManager`](../01-core/05_GI_GameManager.md) — Boot flow control (Phase 0) - [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) — Check for existing save ### Purpose Introductory splash screen sequence shown on game boot before the main menu or loading screen. Displays company logos, game title, engine badges, and legal notices in a timed sequential presentation. Supports skip-to-main-menu via input, accessibility features (slow mode), and conditional branching based on save state. ### Enums **ESplashElementType** | Value | Description | |-------|-------------| | CompanyLogo | Developer/publisher logo | | EngineLogo | UE5 logo, power badges | | GameTitle | Full game title card | | LegalNotice | Copyright, ratings info | | Warning | Health/safety warnings | | AccessibilityNotice | Accessibility info | ### Structs **FSplashElement** | Field | Type | Description | |-------|------|-------------| | ElementType | ESplashElementType | What to show | | DisplayDuration | Float | Seconds to display | | FadeInTime | Float | Fade in duration | | FadeOutTime | Float | Fade out duration | | Texture | UTexture2D | Logo/image to show | | TitleText | FText | Optional text overlay | | SubtitleText | FText | Optional subtitle | | bCanSkip | Bool | Allow skip this element | ### Variables | Name | Type | Description | |------|------|-------------| | `SplashSequence` | TArray\ | Ordered splash elements | | `CurrentElementIndex` | Int32 | Active element | | `bIsPlaying` | Bool | Sequence running | | `bSkipped` | Bool | User skipped | | `bSlowMode` | Bool | Accessibility slow mode | | `CurrentTimer` | Float | Element timer | | `bTransitionComplete` | Bool | Sequence done | ### Functions | Name | Inputs | Outputs | Description | |------|--------|---------|-------------| | `PlaySplashSequence` | — | — | Start boot splash | | `ShowElement` | Element: FSplashElement | — | Display single element | | `AdvanceToNext` | — | — | Move to next element | | `SkipSplash` | — | — | End sequence early | | `FadeInElement` | Duration: Float | — | Fade animation | | `FadeOutElement` | Duration: Float | — | Fade animation | | `HandleInput` | Action: FName | — | Skip/confirm binding | | `OnSequenceComplete` | — | — | Splash finished | | `SetSlowMode` | bEnabled: Bool | — | Accessibility mode | | `CheckSaveState` | — | Bool | Has existing save | ### Blueprint Flow ``` [PlaySplashSequence] └─► Create splash sequence from configuration: CompanyLogo (3s display, 1s fade in/out) EngineLogo (2s display, 0.5s fade in/out) GameTitle (4s display, 1.5s fade in/out) LegalNotice (3s display, 1s fade in/out) └─► bIsPlaying = true └─► CurrentElementIndex = 0 └─► ShowElement(SplashSequence[0]) └─► Bind input actions: BPC_InputManager -> "Confirm" -> SkipSplash() BPC_InputManager -> "Pause" -> SkipSplash() [ShowElement] └─► Get Element = SplashSequence[CurrentElementIndex] └─► Set visibility for appropriate canvas panel └─► If Element.Type == CompanyLogo: Set logo image, center └─► Else if Element.Type == GameTitle: Set title text, subtitle, large text block └─► Else if Element.Type == LegalNotice: Set legal text, small, bottom-aligned └─► Play FadeInElement(Element.FadeInTime) └─► Timer = 0 └─► Tick: Timer += DeltaTime If Timer >= Element.DisplayDuration: AdvanceToNext() [AdvanceToNext] └─► Play FadeOutElement(CurrentElement.FadeOutTime) └─► On fade complete: Hide current element CurrentElementIndex++ If CurrentElementIndex >= SplashSequence.Length: OnSequenceComplete() Else: ShowElement(SplashSequence[CurrentElementIndex]) [SkipSplash] └─► If bSkipped: return └─► bSkipped = true └─► Fade out current element (fast, 0.2 seconds) └─► Clear all elements └─► OnSequenceComplete() [OnSequenceComplete] └─► bIsPlaying = false └─► CheckSaveState(): If save exists: Load main menu If no save: Show main menu (new game focus) If first boot ever: Show language/accessibility prompt └─► Broadcast OnSplashComplete() └─► Remove self from viewport ``` ### Event Dispatchers | Name | Payload | Description | |------|---------|-------------| | `OnSplashComplete` | bSkipped: Bool | Splash sequence done | ### Communications With | Target | Method | Why | |--------|--------|-----| | [`BPC_LoadingScreen`](../11-polish/76_BPC_LoadingScreen.md) | Direct call | Load main menu | | [`BPC_AudioManager`](../10-adaptive/66_BPC_AudioManager.md) | Direct call | Splash audio | | [`BPC_InputManager`](../02-player/13_BPC_InputManager.md) | Event binding | Skip input | | [`GI_GameManager`](../01-core/05_GI_GameManager.md) | Direct call | Boot flow | | [`SS_SaveManager`](../05-saveload/28_SS_SaveManager.md) | Direct call | Save detection | ### Reuse Notes - Fully configurable splash sequence via data - Supports accessibility slow mode (doubles all durations) - Skip input at any point - First-boot branching for language/accessibility setup - Handles both new game and existing save flows - Legal notice compliance baked into sequence - Can be reused for "press any key" or demo mode splash screens