# UI Overrides — Game-Specific Widget Blueprints **Game:** Project Void | **Build Phase:** 11 **Framework Systems:** 44_SS_UIManager through 57_WBP_SettingsMenu (all 14 UI systems) **Demonstrated By:** 8 game-specific WBP_ child widgets --- ## Purpose Defines every game-specific Widget Blueprint override. Each is a **child** of the framework WBP_ parent, inheriting all framework logic while adding horror-game visual styling, branding, and game-specific menu options. **Rule:** Game widgets are children of framework widgets. They override visual styling and add game-specific buttons/options. Never rebuild framework logic in game widgets. --- ## Widget Index | Game Widget | Parent (Framework) | Purpose | |-------------|-------------------|---------| | `WBP_GameHUDController` | `WBP_HUDController` (47) | Root HUD — horror-themed diegetic layout | | `WBP_GameMainMenu` | `WBP_MainMenu` (51) | "Project Void" title screen | | `WBP_GamePauseMenu` | `WBP_PauseMenu` (55) | In-game pause with horror styling | | `WBP_GameInventoryMenu` | `WBP_InventoryMenu` (49) | Inventory grid with asylum aesthetic | | `WBP_SplashHorror` | `WBP_SplashScreen` (114) | Boot splash sequence | | `WBP_JournalHorror` | `WBP_JournalDocumentViewer` (50) | Document reader with aged-paper styling | | `WBP_DeathScreen` | `UserWidget` (custom) | Death/void space screen overlay | | `WBP_LoadingHorror` | — (used by BPC_LoadingScreen) | Level loading with tips | --- ## 1. WBP_GameHUDController — Root HUD **Parent:** `WBP_HUDController` | **Asset Path:** `Content/Game/UI/WBP_GameHUDController.uasset` ### Child Widgets (auto-created by parent) | Widget | Position | Visibility | |--------|----------|------------| | `WBP_DiegeticHUDFrame` (46) | Bottom-center (wristwatch position) | Gameplay only | | `WBP_InteractionPromptDisplay` (48) | Center-bottom (crosshair area) | When focused on interactable | | `WBP_ObjectiveDisplay` (54) | Top-right | When objective active | | `WBP_NotificationToast` (53) | Top-center (slide-in) | On events | | `WBP_ScreenEffectController` (56) | Full screen (behind all UI) | Always (transparent until effect) | | `WBP_AccessibilityUI` (45) | Bottom-center (subtitles) | Dialogue playing | ### Game-Specific Overrides #### Visual Styling (Class Defaults) | Property | Framework Default | Horror Override | |----------|-----------------|-----------------| | `HUDTintColor` | White | Pale amber `#D4A574` (aged paper) | | `HUDFontFamily` | Roboto | `Chiller` or serif horror font | | `CrosshairStyle` | Dot | Faint vertical line (no crosshair — diegetic aim) | | `HUDBackgroundOpacity` | 0.5 | 0.2 (minimalist) | | `HealthBarColor` | Red | Deep crimson `#8B0000` | | `StaminaBarColor` | Yellow | Faded gold `#B8860B` | | `StressBarColor` | Purple | Void purple `#4B0082` | #### Functions to Override ``` Override: UpdateDiegeticHUDFrame │ ├─ Parent: UpdateDiegeticHUDFrame (calls framework HUD update logic) │ └─ [Horror-Specific Additions] ├─ Get BPC_StateManager → GetHeartRate() │ └─ WBP_DiegeticHUDFrame → SetHeartRateIndicator(rate) │ └─ Visual: subtle heartbeat pulse on health bar edge │ ├─ Get BPC_StressSystem → GetCurrentStressTier() │ └─ WBP_ScreenEffectController → UpdateStressVignette(tier) │ ├─ Calm: no effect │ ├─ Uneasy: very subtle edge darkening │ ├─ Disturbed: peripheral blur + vignette │ ├─ Breaking: tunnel vision + color desaturation │ └─ Catatonic: near-black edges, breathing effect │ └─ Get BPC_HidingSystem → GetBreathHoldRemaining() └─ WBP_DiegeticHUDFrame → ShowBreathHoldMeter(seconds) └─ Visual: shrinking circle near crosshair area ``` #### Phase Visibility (inherited from parent, overridden) | Game Phase | HUD Visible | Notes | |-----------|:---:|-------| | `MainMenu` | No | Menu layer active instead | | `Loading` | No | Loading screen visible | | `InGame` | Yes | Full HUD | | `Paused` | No | Dimmed, pause menu overlay | | `Cutscene` | No | Clean cinematic view | | `DeathLoop` | Partial | Only death screen overlay | | `AltDeathSpace` | No | Void has its own UI | | `Credits` | No | Credits widget active | | `PostGame` | Partial | Stats overlay | --- ## 2. WBP_GameMainMenu — Title Screen **Parent:** `WBP_MainMenu` | **Asset Path:** `Content/Game/UI/WBP_GameMainMenu.uasset` ### Layout ``` ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ ██████╗ ██████╗ ██████╗ ██╗ │ │ ██╔══██╗██╔══██╗██╔═══██╗ ██║ │ │ ██████╔╝██████╔╝██║ ██║ ██║ │ │ ██╔═══╝ ██╔══██╗██║ ██║██ ██║ │ │ ██║ ██║ ██║╚██████╔╝╚█████╔╝ │ │ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ │ │ │ │ ██╗ ██╗ ██████╗ ██╗██████╗ │ │ ██║ ██║██╔═══██╗██║██╔══██╗ │ │ ██║ ██║██║ ██║██║██║ ██║ │ │ ╚██╗ ██╔╝██║ ██║██║██║ ██║ │ │ ╚████╔╝ ╚██████╔╝██║██████╔╝ │ │ ╚═══╝ ╚═════╝ ╚═╝╚═════╝ │ │ │ │ [ NEW GAME ] │ │ [ CONTINUE ] (dim if no save) │ │ [ LOAD GAME ] │ │ [ SETTINGS ] │ │ [ CREDITS ] │ │ [ QUIT ] │ │ │ │ v1.0 — UE5 Demo │ │ "In the void, memory is currency." │ │ │ └──────────────────────────────────────────────────────┘ ``` ### Overrides from WBP_MainMenu | Element | Framework | Horror Override | |---------|-----------|----------------| | Title | Plain text | Animated glitch-effect title (Timeline: opacity flicker + position jitter) | | Background | Solid color | Semi-transparent 3D scene visible behind UI | | Buttons | Square, solid | Faded rounded, amber highlight on hover | | Font | System default | Horror serif font | | Continue button | Standard | Reads "Continue the Nightmare" | | Quit button | Standard | Reads "Wake Up" (thematic) | | Version text | Bottom-right | Bottom-center with tagline | | Ambient effect | None | Occasional text glitch on title (every 8-12 seconds) | ### Functions #### Override: OnConstruct ``` OnConstruct │ ├─ Parent: OnConstruct (check SS_SaveManager.HasAnySave for Continue) │ └─ [Horror Additions] ├─ StartTitleGlitchTimer (random 8-12 second interval) │ └─ Title Text → SetRenderOpacity(random 0.7-1.0) + position jitter │ ├─ SS_AudioManager.PlayMusic("menu_theme", MS_MusicBus) │ └─ Fade in from 0.0 to 1.0 over 3 seconds │ └─ Get GI_HorrorGame → TotalDeaths └─ If > 0: show small text "Deaths: [N]" below version Override: OnNewGame │ ├─ Parent: OnNewGame (calls SS_SaveManager.ResetGameState) ├─ GI_HorrorGame → SetSessionFlag("NewGameStarted", true) ├─ GI_HorrorGame → SetGamePhase(Loading) ├─ OpenLevel("L_Asylum_Entry") └─ SS_AudioManager.FadeOutMusic(2.0) Override: OnContinue │ ├─ Parent: OnContinue (load latest save) ├─ SS_SaveManager.LoadLatestSaveSlot() ├─ Get SaveHeader → LastChapterTag └─ GI_HorrorGame → TransitionToChapter(LastChapterTag) Override: OnQuit │ ├─ Show confirmation: "Are you sure you want to wake up?" │ ├─ Yes → GI_HorrorGame.QuitToDesktop() │ └─ No → close confirmation └─ (Remove standard quit confirm, use themed text) ``` --- ## 3. WBP_GamePauseMenu — Pause Screen **Parent:** `WBP_PauseMenu` | **Asset Path:** `Content/Game/UI/WBP_GamePauseMenu.uasset` ### Layout ``` ┌────────────────────────────────────────┐ │ │ │ ┌──────────────┐ │ │ │ PAUSED │ │ │ └──────────────┘ │ │ │ │ [ RESUME ] │ │ [ SAVE GAME ] │ │ [ LOAD GAME ] │ │ [ SETTINGS ] │ │ [ RETURN TO MENU ] │ │ [ WAKE UP (QUIT) ] │ │ │ │ ───── Chapter: Ward A ───── │ │ Deaths: 2 Time: 00:14:32 │ │ │ └────────────────────────────────────────┘ ``` ### Game-Specific Functions ``` Override: OnConstruct │ ├─ Parent: OnConstruct │ └─ [Show Session Stats] ├─ GS_HorrorGameState → GetSessionTimeFormatted() │ └─ Set TimeText ├─ PS_HorrorPlayerState → DeathsThisChapter │ └─ Set DeathsText └─ GM_HorrorGameMode → GetCurrentChapter() └─ Set ChapterText Override: OnResume │ ├─ Parent: OnResume (close menu, set phase) └─ SS_AudioManager.PlaySFX("menu_close") Override: OnSave │ ├─ SS_SaveManager.CreateManualSave("PauseSave") ├─ Show toast: "Progress saved." └─ SS_AudioManager.PlaySFX("save_confirm") Override: OnQuitToMenu │ ├─ Show confirmation: "Return to main menu? Unsaved progress will be lost." │ ├─ Yes → SS_SaveManager.QuickSave → OpenLevel("L_MainMenu") │ └─ No → close confirmation └─ (Add quick-save before quit for safety) ``` --- ## 4. WBP_GameInventoryMenu — Inventory Screen **Parent:** `WBP_InventoryMenu` (49) | **Asset Path:** `Content/Game/UI/WBP_GameInventoryMenu.uasset` ### Visual Overrides | Element | Framework Default | Horror Override | |---------|-----------------|-----------------| | Grid Background | Dark gray | Aged parchment texture | | Slot Border | Thin white | Worn leather frame | | Item Icon Background | None | Vignette behind each icon | | Category Tabs | All/Weapons/Items | All/Weapons/Tools/Keys/Documents | | Weight Bar | Bottom | Bottom with thematic label "Burden" | | Selected Item Info | Right panel | Right panel with "flavor text" from item desc | | Font | System | Typewriter/courier for item names | ### Additional Functions ``` Override: OnItemSelected(ItemData, SlotIndex) │ ├─ Parent: OnItemSelected (framework: show item details, enable actions) │ └─ [Horror Additions] ├─ If ItemData.ItemType == Document: │ └─ Show "Read" button → push WBP_JournalHorror with document │ ├─ If ItemData.bIsKeyItem: │ └─ Show "KEY ITEM" badge on item detail panel │ └─ Warning text: "Cannot be discarded" │ └─ Show item flavor text below description └─ Small, italic: "It feels cold to the touch." Override: UpdateGrid │ ├─ Parent: UpdateGrid │ └─ [Horror Additions] ├─ Get PS_HorrorPlayerState → GetSanityPercentage() │ └─ If < 25% (Breaking): items shift slightly on grid refresh │ └─ Subtle: slot positions jitter 1-2px randomly │ (Memory Drift System bleed into UI) │ └─ BPC_CollectibleTracker → GetFoundCount() + GetTotalCount() └─ Display at bottom: "Memories Recovered: [N]/15" ``` --- ## 5. WBP_SplashHorror — Boot Splash Screen **Parent:** `WBP_SplashScreen` (114) | **Asset Path:** `Content/Game/UI/WBP_SplashHorror.uasset` ### Splash Sequence ``` Sequence (inherits parent's FSplashElement array): 1. COMPANY LOGO — 2.5s ├─ FadeIn: 0.5s ├─ Display: 1.5s ├─ FadeOut: 0.5s └─ Texture: T_StudioLogo 2. UE5 LOGO — 1.5s ├─ FadeIn: 0.3s ├─ Display: 1.0s └─ FadeOut: 0.2s 3. GAME TITLE — 3.5s ├─ FadeIn: 0.8s ├─ Display: 2.5s │ └─ "PROJECT VOID" — large, with slow glitch effect ├─ FadeOut: 0.2s └─ Audio: deep bass rumble begins 4. HEALTH WARNING — 2.0s ├─ FadeIn: 0.5s ├─ Display: 1.0s │ └─ "This game contains psychological horror, │ disturbing imagery, and themes of │ mental illness. Player discretion advised." ├─ FadeOut: 0.5s └─ Can be skipped 5. AUTO-ADVANCE ├─ Dispatch OnSequenceComplete └─ Level Blueprint → OpenLevel("L_MainMenu") ``` ### Override ``` Override: PlaySplashSequence │ ├─ Parent: PlaySplashSequence │ └─ [Horror Additions] ├─ SS_AudioManager.PlayMusic("splash_ambient", MS_MusicBus) │ └─ Starts at 0.0 volume, fades to 0.5 over 2 seconds │ └─ [Accessibility] ├─ If SS_SettingsSystem.GetBool("subtitles_enabled"): │ └─ Show subtitle text for health warning └─ If SS_SettingsSystem.GetBool("slow_mode"): └─ Double all display durations ``` --- ## 6. WBP_JournalHorror — Document Viewer **Parent:** `WBP_JournalDocumentViewer` (50) | **Asset Path:** `Content/Game/UI/WBP_JournalHorror.uasset` ### Visual Design ``` ┌─────────────────────────────────────┐ │ ┌───────────────────────────────┐ │ │ │ │ │ │ │ [AGED PAPER TEXTURE BG] │ │ │ │ │ │ │ │ Patient File #47 │ │ │ │ ───────────────────── │ │ │ │ │ │ │ │ "The subject exhibits │ │ │ │ extreme paranoia and │ │ │ │ claims to hear voices │ │ │ │ from within the walls..." │ │ │ │ │ │ │ │ ── Dr. Blackwood, 1923 │ │ │ │ │ │ │ │ [← PREV] [NEXT →] │ │ │ └───────────────────────────────┘ │ │ │ │ [CLOSE] [FLAG IMPORTANT] │ └─────────────────────────────────────┘ ``` ### Override Behavior ``` Override: ShowDocument(DocumentData) │ ├─ Parent: ShowDocument (renders pages) │ └─ [Horror Styling] ├─ Page background: T_Parchment texture (aged paper) ├─ Font: Typewriter style, slightly uneven (random kerning) ├─ Ink color: Dark brown (#3B2314) not pure black ├─ Page edge: Slight vignette around border │ ├─ [Memory Drift Integration] │ └─ If BPC_StressSystem.GetCurrentStressTier() >= Breaking: │ └─ Some words on page randomly shift/unblur │ (subtle hallucination bleed) │ Timer: every 4-6 seconds, shift 1-2 words, revert after 1s │ └─ [Accessibility] └─ If SS_SettingsSystem.GetBool("dyslexia_font"): └─ Switch to OpenDyslexic font Override: FlagDocument(DocumentData) │ ├─ BPC_DocumentArchiveSystem.FlagAsImportant(DocumentData) ├─ WBP_NotificationToast.Show("Document flagged for review") └─ (Items flagged as important glow faintly in inventory) ``` --- ## 7. WBP_DeathScreen — Death Overlay **Parent:** `UserWidget` (custom — no framework parent) | **Asset Path:** `Content/Game/UI/WBP_DeathScreen.uasset` ### Purpose Shown when the player dies (overlay, not a separate level). Handles the death-to-respawn flow and void space entry. ### Layout ``` ┌──────────────────────────────────────────────┐ │ │ │ │ │ ┌──────────────┐ │ │ │ YOU DIED │ │ │ │ (fade in) │ │ │ └──────────────┘ │ │ │ │ Death Cause: Void Entity │ │ Chapter: Basement │ │ Deaths this run: 4 │ │ Time survived: 00:45:12 │ │ │ │ ┌─────────────────────┐ │ │ │ "The void watches. │ │ │ │ It always watches."│ │ │ └─────────────────────┘ │ │ │ │ [CONTINUE] [MAIN MENU] │ │ (respawn at (quit to │ │ checkpoint) menu) │ │ │ │ (if void-qualifying death shows instead:) │ │ [ENTER THE VOID] │ │ │ └──────────────────────────────────────────────┘ ``` ### Variables | Variable | Type | Default | Purpose | |----------|------|---------|---------| | `DeathCause` | Text | — | Set by BPC_DeathHandlingSystem before show | | `DeathChapter` | Text | — | Current chapter at time of death | | `DeathsThisRun` | Int | 0 | From PS_HorrorPlayerState | | `TimeSurvived` | Text | "" | Formatted playtime | | `bCanEnterVoid` | Boolean | false | True if void space conditions met | | `RandomFlavorTexts` | Array\ | — | Pool of death-screen quotes | ### Functions ``` ShowDeathScreen(DeathCause: Text, bVoidQualified: Boolean) │ ├─ Set DeathCause, DeathChapter, DeathsThisRun, TimeSurvived │ ├─ [Fade In] │ ├─ SetRenderOpacity(0.0) │ └─ Timeline: 0.0 → 1.0 over 2.0 seconds │ ├─ [Visual Effects] │ ├─ Background: dark red gradient (bottom) to black (top) │ ├─ Vignette: heavy edge darkening │ └─ Particle: faint void particles drifting upward │ ├─ [Audio] │ ├─ SS_AudioManager.StopAllSFX() │ ├─ SS_AudioManager.FadeOutMusic(1.0) │ └─ SS_AudioManager.PlaySFX("death_sting") │ └─ Low bass rumble + heartbeat stop │ ├─ [Flavor Text] │ ├─ Select random quote from RandomFlavorTexts │ └─ Display in center with slow fade-in │ ├─ [Button Visibility] │ ├─ bVoidQualified? → Branch │ │ ├─ True: Show "ENTER THE VOID" (primary) │ │ │ + "Continue" (secondary, below) │ │ └─ False: Show "CONTINUE" (primary) │ │ │ └─ Always show "MAIN MENU" (secondary) │ └─ [Accessibility] └─ If SS_SettingsSystem.GetBool("reduce_jumpscares"): └─ Skip death sting audio, play soft tone instead OnContinueClicked │ ├─ GM_HorrorGameMode.HandlePlayerDead → resume respawn flow ├─ HideDeathScreen() └─ (BPC_PlayerRespawnSystem handles the actual respawn) OnEnterVoidClicked │ ├─ GM_HorrorGameMode → bVoidSpaceActive = true ├─ BPC_AltDeathSpaceSystem.EnterVoidSpace() ├─ TransitionToChapter(Chapter.VoidSpace) └─ HideDeathScreen() OnMainMenuClicked │ ├─ Show confirmation: "Return to main menu? All unsaved progress lost." │ ├─ Yes → OpenLevel("L_MainMenu") │ └─ No → close confirmation └─ HideDeathScreen() (called by hide function) ``` ### Flavor Text Pool | Quote | |-------| | "The void does not forget. It merely waits." | | "Each death is a memory. Each memory is a key." | | "You've been here before. You'll be here again." | | "The asylum remembers what you cannot." | | "Death is not an ending. It is a doorway." | | "Breathe. The darkness is patient." | | "They say the patients never truly die here." | | "You are one step closer to the truth." | --- ## 8. WBP_LoadingHorror — Loading Screen **Parent:** Associated with `BPC_LoadingScreen` (110) | **Asset Path:** `Content/Game/UI/WBP_LoadingHorror.uasset` ### Layout ``` ┌─────────────────────────────────────────────┐ │ │ │ │ │ ┌─────────────────────┐ │ │ │ │ │ │ │ LOADING... │ │ │ │ │ │ │ │ ████████░░░░ 65% │ │ │ │ │ │ │ └─────────────────────┘ │ │ │ │ CHAPTER NAME: Ward A — Patient Wing │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ "Darkness is your ally. │ │ │ │ Enemies can't see what they │ │ │ │ can't hear." │ │ │ └─────────────────────────────────────┘ │ │ │ │ [void symbol] │ │ │ └─────────────────────────────────────────────┘ ``` ### Variables | Variable | Type | Default | Purpose | |----------|------|---------|---------| | `TipsDataTable` | DataTable | `DT_LoadingTips` | Pool of loading tips | | `TipTimer` | Float | `8.0` | Seconds between tip rotation | | `CurrentTipIndex` | Int32 | `0` | Which tip is showing | | `BackgroundImage` | Texture | — | Blurred screenshot of current area | ### Functions ``` ShowLoadingScreen(ChapterTag: GameplayTag) │ ├─ [Set Chapter Name] │ ├─ GM_HorrorGameMode → HorrorLevelNames → get name from tag │ └─ Set ChapterNameText │ ├─ [Select Background] │ └─ Load background texture based on ChapterTag │ ├─ Entry → "asylum_cell_blur" │ ├─ WardA → "ward_a_hallway_blur" │ ├─ WardB → "ward_b_courtyard_blur" │ ├─ Basement → "basement_dark_blur" │ └─ Void → "void_abstract" │ ├─ [Start Tip Rotation] │ ├─ Pick random tip from TipsDataTable │ └─ Set Timer (8.0s, looping) → ShowNextTip │ ├─ [Progress Bar] │ └─ Bind to level load progress (Get Async Load Percentage) │ └─ Update ProgressBar percent every tick │ ├─ [Audio] │ ├─ SS_AudioManager.PlaySFX("loading_ambient_loop") │ └─ SS_AudioManager.FadeOutMusic(0.5) │ └─ [Add to Viewport] HideLoadingScreen() │ ├─ Stop TipTimer ├─ SS_AudioManager.StopSFX("loading_ambient_loop") ├─ Remove from viewport └─ Broadcast OnLoadingComplete ``` --- ## UI Integration with Framework Systems ``` SS_UIManager (44) — Owns all menu widgets, pushes/pops stack │ ├─ MAIN MENU flow: WBP_GameMainMenu → (Settings) → WBP_SettingsMenu │ WBP_GameMainMenu → (Credits) → WBP_CreditsScreen │ ├─ PAUSE flow: IA_PauseMenu → Push WBP_GamePauseMenu │ └─ (Settings) → Push WBP_SettingsMenu │ ├─ INVENTORY flow: IA_OpenWatch → Push WBP_GameInventoryMenu │ └─ (Read Document) → Push WBP_JournalHorror │ └─ DEATH flow: BPC_DeathHandlingSystem → Show WBP_DeathScreen (NOT through SS_UIManager — direct overlay) WBP_HUDController (47) → WBP_GameHUDController │ ├─ Always visible during InGame phase ├─ Hides during menu push (SS_UIManager coordinates) └─ Children: DiegeticHUDFrame, InteractionPrompt, Objective, Toast, ScreenEffect SS_EnhancedInputManager (128) │ ├─ Coordinates with SS_UIManager for input mode changes │ ├─ Menu open → SetInputModeUIOnly → show cursor │ └─ Menu close → SetInputModeGameOnly → hide cursor │ └─ IA_PauseMenu → SS_UIManager IA_OpenWatch → SS_UIManager + push WristwatchUI context ``` --- ## Accessibility Requirements All game UI widgets must implement: | Feature | Implementation | Target | |---------|---------------|--------| | **Subtitles** | `WBP_AccessibilityUI` — shows all dialogue, whispered voices | Deaf/HoH | | **Colorblind modes** | 3 presets (Protanopia, Deuteranopia, Tritanopia) — adjust health/stress colors | Colorblind | | **High contrast** | Toggle via Settings — increases HUD opacity to 0.9, brightens colors | Low vision | | **Dyslexia font** | Toggle via Settings — switch all text to OpenDyslexic | Dyslexia | | **Controller support** | All menus navigable via D-Pad + A/B buttons | Console players | | **Text size** | Slider (Small/Medium/Large) — scales all UI text | Low vision | | **Reduce jumpscares** | Toggle — replaces stingers with soft tones, removes screen shake | Anxiety/PTSD | | **Hold-to-confirm** | All destructive actions (Quit, Delete Save) require 1s hold | Accidental press | --- ## Blueprint Wiring Checklist - [ ] Create `WBP_GameHUDController` — child of `WBP_HUDController` — set horror colors/fonts - [ ] Create `WBP_GameMainMenu` — child of `WBP_MainMenu` — Project Void branding - [ ] Create `WBP_GamePauseMenu` — child of `WBP_PauseMenu` — session stats display - [ ] Create `WBP_GameInventoryMenu` — child of `WBP_InventoryMenu` — parchment styling - [ ] Create `WBP_SplashHorror` — child of `WBP_SplashScreen` — boot sequence - [ ] Create `WBP_JournalHorror` — child of `WBP_JournalDocumentViewer` — aged paper - [ ] Create `WBP_DeathScreen` — custom UserWidget — death/respawn flow - [ ] Create `WBP_LoadingHorror` — associated with `BPC_LoadingScreen` — tips + progress - [ ] Create `DT_LoadingTips` Data Table — 10 horror-themed tips - [ ] Wire all widgets into `SS_UIManager` menu stack - [ ] Test all accessibility toggles work through `WBP_SettingsMenu` - [ ] Verify UI layer hides/shows correctly with game phase changes --- *UI Overrides for Project Void. See [GAMEINDEX.md](GAMEINDEX.md) for full game structure. See [hud-overview.md](../architecture/hud-overview.md) for HUD architecture. See individual framework widget specs in [06-ui/](../blueprints/06-ui/).*