# 11 — UI, HUD, and Sessions **Status: Draft** - **Scope:** Native HUD / widget-controller path (Batch 1); Pass 3 resolution of `WBP_PlayerHUD`; Pass 7 GAS attribute UI binding confirmation. Full frontend/session graphs deferred to Pass 4. - **Inspection method:** Native C++ read; AssetTools class/tags/deps/refs; ObjectTools; Pass 7 Overlay path verification. - **Last updated:** 2026-07-16 - **Current phase:** Phase 1 — Static Architecture - **Last completed pass:** Pass 7 (Batch 4B) — GAS attribute UI portion - **Next pass expected to contribute:** Pass 4 (sessions/frontend) ## Draft tracking ### Completed sections - InitOverlay call chain from player InitAbilityActorInfo - OverlayWidgetController attribute broadcasts/bindings - AdvancedSessions / AdvancedSteamSessions enabled + descriptor paths - Widget subclass path seeds - WBP_PlayerHUD resolved as AHUD (`RIRHUD` child) - GM_Dungeoneer assigns HUDClass / PC / PS - **Pass 7:** Exact Overlay paths; stamina delegate type reuse confirmed; dual HUD vs ASC still unsynchronized ### Pending sections - Main menu / browser / character-select widget flow - Production vs Example Advanced Sessions Blueprints - WBP_Overlay progress-bar Blueprint binding deep dive - CommonUI usage - BPI_PlayerController.UpdatePlayerHUD widget targets ### Evidence still required - Whether both Overlay ASC HUD and DEPRECATED UpdatePlayerHUD run in PIE - Session create/find/join graphs --- ## WBP_PlayerHUD resolution (Pass 3) | Field | Value | |-------|--------| | Path | `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD` | | Asset class | `WBP_PlayerHUD_C` | | Generated parent | `/Script/REALMSINRUIN.RIRHUD` | | Type | **AHUD Blueprint** (not `UserWidget`) | | IsDataOnly | True | | Referencers | `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` | | Dependencies | REALMSINRUIN, `/Game/_Main/UI/Widgets/Overlay/WBP_Overlay`, `/Game/_Main/UI/Widgets/WidgetController/BP_OverlayWidgetController` | **Observed Implementation:** Naming `WBP_` is misleading Documented Intent; asset is the game HUD class assigned on `GM_Dungeoneer`. **Pass 7 path correction:** Overlay widget exact path is `/Game/_Main/UI/Widgets/Overlay/WBP_Overlay` (not `/Game/_Main/UI/Widgets/WBP_Overlay`). --- ## HUD init (Observed Implementation) ### Native GAS path `ARIRPlayerCharacter::InitAbilityActorInfo` → `ARIRHUD::InitOverlay(PC, PS, ASC, AS)` → create `OverlayWidgetClass` → `UOverlayWidgetController` binds ASC attribute delegates → `BroadcastInitialInitialValues` → `AddToViewport`. Controller asset: `/Game/_Main/UI/Widgets/WidgetController/BP_OverlayWidgetController` (Blueprintable subclass of native `UOverlayWidgetController`). Broadcasts: Health, MaxHealth, Mana, MaxMana, Stamina, MaxStamina from `URIRAttributeSet`. ### Legacy BP path (still connected) `BP_PlayerCharacterBase` EventPossessed → Delay 0.4 → `Server_UpdateHUD` → compute DEPRECATED health/mana percentages → `BPI_PlayerController.UpdatePlayerHUD`. **Technical Debt / Incomplete Refactor:** Dual attribute UI — no synchronization observed (Pass 7). **Technical Debt (Pass 7 confirmed):** In `OverlayWidgetController.h`, `OnStaminaChanged` is typed `FOnManaChangedSignature` and `OnMaxStaminaChanged` is typed `FOnMaxManaChangedSignature` (stamina delegates reuse mana signature types). Dedicated `FOnStaminaChangedSignature` / `FOnMaxStaminaChangedSignature` are declared but unused for those properties. --- ## Framework assignments (GM_Dungeoneer CDO) | Property | Value | |----------|--------| | HUDClass | `WBP_PlayerHUD_C` | | PlayerControllerClass | `PC_Character_C` | | PlayerStateClass | `BP_PlayerState_C` | | DefaultPawnClass | None | `PC_Character` implements `BPI_PlayerController`; holds `CharacterSelectHUD`; Enhanced Input IMC `IMC_PlayerDefault` + `IA_Movement`. --- ## Sessions (Observed Implementation) Project plugins AdvancedSessions + AdvancedSteamSessions enabled (VersionName 5.8). `GM_Dungeoneer` deps include AdvancedSessions. Full session create/find/join graph archaeology → **Pass 4**.