- Updated Master Blueprint Index to include Multiplayer Networking support. - Added detailed Multiplayer Networking sections across all developer documentation (01-11). - Introduced authority maps, key patterns, and RPC guidelines for each system. - Established a comprehensive multiplayer networking architecture document outlining core principles, replication strategies, and anti-cheat considerations. - Enhanced UI documentation to clarify local-only behavior and binding to replicated dispatchers. - Implemented client prediction strategies and RPC naming conventions for consistency across the framework.
10 KiB
06 — UI, Menus & Diegetic Presentation Systems (Systems 44-57)
Category Purpose: These 14 systems form the complete UI layer — menu management, HUD presentation, inventory display, interaction prompts, notifications, screen effects, settings, accessibility, and diegetic in-world interfaces. The SS_UIManager is the central orchestrator; all widgets operate under its stack-based menu system. The architectural principle "UI Reads, Never Writes" applies: widgets display data but never own game logic.
System Index
| # | System | Asset Type | Role |
|---|---|---|---|
| 44 | SS_UIManager |
Subsystem | UI subsystem; menu stack, context-based switching, input mode |
| 45 | WBP_AccessibilityUI |
Widget | Accessibility settings; subtitles, colorblind, controller |
| 46 | WBP_DiegeticHUDFrame |
Widget | Diegetic in-world HUD frame (wristwatch, helmet display) |
| 47 | WBP_HUDController |
Widget | Root HUD widget; manages all HUD sub-widgets |
| 48 | WBP_InteractionPromptDisplay |
Widget | Interaction prompt popup; key, description, hold progress |
| 49 | WBP_InventoryMenu |
Widget | Inventory grid UI; drag-drop, sort, examine, equip, drop |
| 50 | WBP_JournalDocumentViewer |
Widget | Document/journal viewer; pages, font styles, highlights |
| 51 | WBP_MainMenu |
Widget | Main menu; new game, continue, load, settings, quit |
| 52 | WBP_MenuFlowController |
Widget | Menu state machine; transitions, back navigation |
| 53 | WBP_NotificationToast |
Widget | Toast notification; objective update, item found, achievement |
| 54 | WBP_ObjectiveDisplay |
Widget | Active objective HUD element; current quest/objective |
| 55 | WBP_PauseMenu |
Widget | Pause menu; resume, settings, save, load, quit |
| 56 | WBP_ScreenEffectController |
Widget | Full-screen effects; damage vignette, stress, flash |
| 57 | WBP_SettingsMenu |
Widget | Settings menu; audio, video, controls, gameplay |
Architecture: UI Layer
┌────────────────────────────────────────────────────────────────┐
│ UI ARCHITECTURE │
│ │
│ SS_UIManager (GameInstanceSubsystem) │
│ │ Menu stack: push/pop menus with priority │
│ │ Context switching: Default → Hiding → Wristwatch → UI │
│ │ Input mode coordination with SS_EnhancedInputManager │
│ │ │
│ ├─► WBP_MenuFlowController (menu state machine) │
│ │ ├─► WBP_MainMenu │
│ │ ├─► WBP_PauseMenu │
│ │ ├─► WBP_SettingsMenu → WBP_AccessibilityUI │
│ │ └─► WBP_CreditsScreen │
│ │ │
│ └─► WBP_HUDController (ingame HUD root) │
│ ├─► WBP_ObjectiveDisplay (current objective) │
│ ├─► WBP_InteractionPromptDisplay (interact prompt) │
│ ├─► WBP_NotificationToast (popup notifications) │
│ ├─► WBP_ScreenEffectController (damage/stress FX) │
│ ├─► WBP_DiegeticHUDFrame (in-world wristwatch) │
│ └─► WBP_InventoryMenu (inventory screen) │
│ └─► WBP_JournalDocumentViewer (documents) │
└────────────────────────────────────────────────────────────────┘
44 — SS_UIManager: UI Orchestrator
What It Does: The central UI authority. Manages a menu stack for push/pop navigation, handles context-based UI switching (Default/Hiding/Wristwatch/UI modes), coordinates input mode changes with SS_EnhancedInputManager (cursor visibility, input blocking), and provides the canonical entry point for opening any menu.
How It Works Internally:
Menu Stack:
PushMenu(MenuWidget)— adds to stack, opens widget, applies input modePopMenu()— removes top, returns to previous, restores input mode- Priority-based: UI(100) > Inspection(20) > WristwatchUI(10) > Hiding(5) > Default(0)
- Higher priority menus block lower ones
Context Switching:
- Listens to game state changes (death, hiding, combat)
- Automatically shows/hides appropriate HUD elements per context
- Coordinates with
SS_EnhancedInputManagerfor input mode changes (game-only vs UI-only vs game-and-UI)
Input Mode Coordination:
- On menu open: request UI input mode (show cursor, block game input)
- On menu close: request game input mode (hide cursor, enable game input)
- Handles edge cases: pause menu over inventory, settings over pause
47 — WBP_HUDController: Root HUD Widget
What It Does: The root widget that owns and manages all HUD sub-widgets. Handles visibility toggling based on game context, manages layout, and routes data from gameplay systems to correct sub-widgets.
Key Sub-Widgets Managed:
- Health/stamina/stress bars (bound to respective system dispatchers)
WBP_ObjectiveDisplay— current quest textWBP_InteractionPromptDisplay— shows/hides based onOnTargetFound/OnTargetLostWBP_NotificationToast— queued notification displayWBP_ScreenEffectController— damage vignette, stress overlayWBP_DiegeticHUDFrame— wristwatch HUD for immersive mode
Data Flow: HUD binds to dispatchers; never polls. OnHealthChanged → update health bar. OnObjectiveTagsChanged → update objective text. OnTargetFound → show interaction prompt.
48 — WBP_InteractionPromptDisplay: Interaction Prompt
What It Does: Shows the "Press E to Open" style prompt when the player looks at an interactable. Handles three input modes:
- Press: shows key icon + action text
- Hold: shows radial fill progress bar + action text
- DoubleTap: shows double-tap indicator
Binds to BPC_InteractionDetector.OnTargetFound/Lost and OnHoldProgressUpdated.
49 — WBP_InventoryMenu: Inventory Grid UI
What It Does: Full inventory screen with drag-and-drop grid layout. Displays all items from BPC_InventorySystem, supports sort modes, item inspection, equip/unequip, drop, use, and combine operations.
Features:
- Grid-based layout with item icons and stack counts
- Drag-and-drop between slots (rearrange)
- Right-click context menu: Use, Equip, Drop, Examine, Combine
- Category tabs for filtering
- Weight bar showing current/max capacity
- Tooltip on hover showing item details (name, description, stats)
- Quick slot assignment (drag to hotbar)
Data Binding: Subscribes to all BPC_InventorySystem event dispatchers. On any change, refreshes the affected slot, not the entire grid.
51-57: Menu & Screen Widgets
- 51 WBP_MainMenu: New Game, Continue, Load Game, Settings, Quit. Checks save manifest for Continue availability.
- 52 WBP_MenuFlowController: State machine for menu navigation. Handles transitions, back button, and prevents menu stacking bugs.
- 53 WBP_NotificationToast: Animated popup for objectives, items, achievements. Queued system — multiple toasts stack vertically with auto-dismiss.
- 54 WBP_ObjectiveDisplay: Shows current active objective text on HUD. Updates on
GS_CoreGameState.OnObjectiveTagsChanged. - 55 WBP_PauseMenu: Resume, Settings, Save, Load, Quit to Menu. Checks
GM_CoreGameMode.bPauseAllowed. - 56 WBP_ScreenEffectController: Full-screen post-process effects driven by gameplay state: damage vignette (red flash on hit), stress overlay (chromatic aberration, darkening), healing glow, death fade to black.
- 57 WBP_SettingsMenu: Audio (volume sliders per bus), Video (resolution, quality), Controls (key rebinding via
SS_EnhancedInputManager), Gameplay settings, Accessibility tab →WBP_AccessibilityUI.
45-46, 50: Supporting Widgets
- 45 WBP_AccessibilityUI: Subtitle toggle/size, colorblind modes, controller remapping, difficulty presets, hold-to-confirm toggle. Reads/writes via
SS_SettingsSystem. - 46 WBP_DiegeticHUDFrame: In-world HUD rendered on wristwatch or helmet display via
BPC_DiegeticDisplay. Shows minimap, compass, health, ammo — diegetic (exists in world) not screen-space. - 50 WBP_JournalDocumentViewer: Reads documents from
BPC_DocumentArchiveSystem. Page-turning interface with font styles, highlighted keywords, and categorization.
Common Implementation Patterns in This Category
- UI Reads, Never Writes: Widgets bind to gameplay dispatchers and display data. They call functions on systems (UseItem, EquipItem) but never own game state.
- Menu Stack Navigation:
SS_UIManager.PushMenu()/PopMenu()ensures clean navigation without manual visibility management. - Context Priority Ladder: Default(0) < Hiding(5) < WristwatchUI(10) < Inspection(20) < UI(100). Higher priority contexts override lower ones automatically.
- Input Mode Sync: Every menu open/close coordinates with
SS_EnhancedInputManagerfor cursor + input blocking. - Dispatcher Binding, Not Polling: All HUD widgets bind to gameplay dispatchers on construct and unbind on destruct. No widget uses Event Tick for polling.
- Toast Queue: Notifications are queued and displayed sequentially with auto-dismiss — prevents notification spam.
Multiplayer Networking
All UI is local per-client. Zero networking code in widgets.
UI Networking Pattern
Server state changes → replicated variable → OnRep fires dispatcher
→ Widget (local) already bound to that dispatcher
→ Widget updates with zero multiplayer awareness
Category Rules
- WBP_ Widgets:* Local only. Bind to replicated dispatchers from gameplay systems. Use the same binding code as single-player.
- SS_UIManager: Local per-client. Menu stack is per-player — different players can be in different menus.
- Input mode changes: Handled per-client by
SS_EnhancedInputManagerlistening to game phase dispatchers. - HUD visibility: Each client independently determines what to show based on their replicated state (e.g., hiding player sees different HUD than exposed player).
Developer Reference v1.0 — 06 UI Systems. Companion to docs/blueprints/06-ui/ specs.