# 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](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/).*
