Files
UE5-Modular-Game-Framework/docs/game/ui-overrides.md
Lefteris Notas 040db37720 Add UI Overrides and Weapons Index documentation for Project Void
- Created ui-overrides.md detailing game-specific Widget Blueprint overrides, including purpose, widget index, visual styling, and accessibility requirements.
- Established weapons-index.md outlining all held weapon actors, including their components, logic, and comparisons for gameplay mechanics.
2026-05-21 22:27:57 +03:00

29 KiB

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<Text> 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 for full game structure. See hud-overview.md for HUD architecture. See individual framework widget specs in 06-ui/.