Document Batch 4D archaeology and add README title image outside LFS.
Exclude REALMSINRUIN_TITLE_DEV.png from Git LFS so the README hero renders on Gitea. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5,11 +5,11 @@
|
||||
- **Scope:** Project modules, targets, Build.cs dependencies, plugins (engine + project-local), gameplay-relevant configuration (maps, tags, input, networking, GAS-related settings), engine vs project boundaries.
|
||||
- **Inspection method:** Read-only inspection of `.uproject`, Target.cs, Build.cs, module startup, plugin descriptors, `Config/*.ini`, and PluginToolset (`ListEnabledPlugins`, `GetPluginInfo`, `IsEnabled`).
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** No Git repository at project root (filesystem integrity used). PluginToolset `ListEnabledPlugins` returns the full editor-enabled set (engine + project). No `OnlineSubsystem` / Steam settings found under `Config/`. SemanticSearch not used.
|
||||
- **Tool or visibility limitations:** PluginToolset `ListEnabledPlugins` returns the full editor-enabled set (engine + project). No `OnlineSubsystem` / Steam settings found under `Config/` (Pass 4 reconfirmed). Map World Settings GameMode not in asset-registry tags — inferred from package dependencies. SemanticSearch not used.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 1 (Batch 1)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 10 (map/GameMode relationships); Batch 4 Pass 4 (session usage confirmation)
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -20,27 +20,44 @@
|
||||
- Advanced Sessions / Advanced Steam Sessions descriptors
|
||||
- DefaultEngine / DefaultGame / DefaultGameplayTags / DefaultInput highlights
|
||||
- CoreRedirects (GAS* → RIR* rename evidence)
|
||||
- **Pass 4:** Per-map GameMode via deps; GameDefaultMap/EditorStartupMap; GI unwired; OnlineSubsystem INI negative inventory; production AdvancedSessions node consumers
|
||||
|
||||
### Pending sections
|
||||
- Per-map GameMode assignment (requires map World Settings / asset inspection without loading levels)
|
||||
- Confirmation of which enabled engine plugins are referenced by live gameplay content
|
||||
- OnlineSubsystem / Steam runtime configuration location
|
||||
- Confirmation of which other enabled engine plugins are referenced by live gameplay content
|
||||
- Runtime OnlineSubsystem default platform when INI keys absent
|
||||
|
||||
### Evidence still required
|
||||
- Map asset tags / World Settings for `MainMenu`, `Test01`, `Dev_Island`, character-select maps
|
||||
- Whether `NetworkPrediction` / `OnlineFramework` / `AbilitySystemGameFeatureActions` are used by project Blueprints or only enabled
|
||||
- Whether JoinSession travels without explicit ClientTravel pin
|
||||
- Steam runtime defaults
|
||||
|
||||
### Tool or visibility limitations
|
||||
- Cannot load levels; map GameMode must come from asset metadata / config
|
||||
- Full enabled-plugin list is large; usage confirmation deferred to later batches
|
||||
- Map World Settings GameMode tags unavailable; dependency inference used
|
||||
- Full enabled-plugin list is large
|
||||
|
||||
### Unknowns requiring later verification
|
||||
- Where GameInstance class is configured (`GI_Dungeoneer` discovered via subclass search; not set in inspected DefaultEngine.ini)
|
||||
- GlobalDefaultGameMode absent from DefaultEngine.ini — GameMode likely per-map
|
||||
- `GI_Dungeoneer` not assigned via `GameInstanceClass` and has 0 referencers — Present but Unconnected
|
||||
- GlobalDefaultGameMode absent — per-map overrides only
|
||||
- No project OnlineSubsystem INI under `Config/`
|
||||
|
||||
---
|
||||
|
||||
## Pass 4 — Maps, GameModes, sessions, config (Batch 4D)
|
||||
|
||||
**Observed Implementation**
|
||||
|
||||
| Topic | Finding |
|
||||
|-------|---------|
|
||||
| Startup maps | `GameDefaultMap=/Game/_Main/Levels/Maps/MainMenu.MainMenu`; `EditorStartupMap=/Game/_Main/Levels/Testing/Test01.Test01` |
|
||||
| Map → GameMode (deps) | MainMenu→`GM_MainMenu`; Test01 / Dev_Island / LEVEL_01→`GM_Dungeoneer` |
|
||||
| GameInstance | `GI_Dungeoneer` empty; **not** in `GameInstanceClass`; 0 asset referencers |
|
||||
| Sessions | Production create/find/join in `PC_MainMenu` / `WBP_MainMenu` / `WBP_GameSlot`; example BP 0 refs |
|
||||
| OnlineSubsystem INI | **Absent** from project `Config/*.ini` and plugin Config greps |
|
||||
| DefaultPawn | `GM_Dungeoneer` DefaultPawn=None; pawn from character-select SpawnActor+Possess |
|
||||
|
||||
Full matrices: `11-UI-HUD-And-Sessions.md`.
|
||||
|
||||
---
|
||||
|
||||
## 1. Project descriptor
|
||||
|
||||
**Observed Implementation** — [`REALMSINRUIN_DEV.uproject`](REALMSINRUIN_DEV.uproject)
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
- **Tool or visibility limitations:** Inherited Blueprint variables require querying each parent; CustomEvent FunctionFlags not exposed via ObjectTools; Gunslinger FiB/IsDataOnly anomaly.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 9 (Batch 4C) — enemy hierarchy/control expanded
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -20,14 +20,15 @@
|
||||
- WBP_PlayerHUD asset-class resolution (AHUD, not UserWidget)
|
||||
- BP_PlayerState DefaultAttributesGameplayEffect = None
|
||||
- **Pass 9:** Enemy EventGraphs empty; stock AIController; BPI partial; no BT/BB
|
||||
- **Pass 4/10:** Frontend PC/GM/GI roles; BPI_PlayerController `UpdatePlayerHUD`/`AddGold` unimplemented on `PC_Character`; EffectActor vs `BP_BasePickUp` hierarchies
|
||||
|
||||
### Pending sections
|
||||
- Frontend/session graphs (Pass 4)
|
||||
- CommonUI content usage
|
||||
- Exact CustomEvent reliable flags
|
||||
|
||||
### Evidence still required
|
||||
- Exact CustomEvent reliable flags
|
||||
- PIE possession of placed skeletons
|
||||
- CommonUI content usage
|
||||
- Whether any other class implements `AddGold` / `UpdatePlayerHUD`
|
||||
|
||||
---
|
||||
|
||||
@@ -132,12 +133,16 @@ See Batch 1 sections for `ARIRBaseCharacter`, `ARIRPlayerCharacter`, `ARIRBaseEn
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/Blueprints/Player/PC_Character` |
|
||||
| Parent | RIRPlayerController |
|
||||
| Interface | BPI_PlayerController (GetPC_DungeoneerReference) |
|
||||
| Interface | BPI_PlayerController |
|
||||
| Variables | CharacterSelectHUD |
|
||||
| Implemented events | ServerSpawnCharacter, ReceiveBeginPlay, PlayerFirstSpawn, PlayerSelectScreenChoice, PlayerRespawn |
|
||||
| **Not implemented** (`bIsImplemented=false`) | `UpdatePlayerHUD`, `AddGold`, `SetPlayerCanMove`, `AddKill_PlayerController` |
|
||||
| Native C++ | `RIRPlayerController` has **no** `UpdatePlayerHUD` / `AddGold` symbols |
|
||||
| CDO IMC | `/Game/_Main/Blueprints/Player/Inputs/IMC_PlayerDefault` |
|
||||
| CDO MovementInput | `/Game/_Main/Blueprints/Player/Inputs/Movement/IA_Movement` |
|
||||
|
||||
**Pass 4:** BeginPlay creates char-select only on Authority∧IsServer. Spawn path: select → ServerSpawnCharacter → GM GetSelectedClass → PlayerFirstSpawn → SpawnActor+Possess.
|
||||
|
||||
### 4.2 `BP_PlayerState`
|
||||
|
||||
| Field | Value |
|
||||
@@ -155,16 +160,17 @@ See Batch 1 sections for `ARIRBaseCharacter`, `ARIRPlayerCharacter`, `ARIRBaseEn
|
||||
|
||||
| Asset | Parent | Notes |
|
||||
|-------|--------|-------|
|
||||
| `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` | GameInstance | IsDataOnly; no implemented events; empty deps |
|
||||
| `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` | GameInstance | Empty EventGraph; **0 referencers**; not in `GameInstanceClass` INI — Present but Unconnected |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` | GameModeBase | BPI_GameMode; vars PlayerStartLocations, ConnectedPlayers, Player Stats; events PostLogin/Logout/BeginPlay/GetSelectedClass |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_MainMenu` | GameModeBase | IsDataOnly; deps PC_MainMenu, BP_MainMenuPawn |
|
||||
| `/Game/_Main/Blueprints/Player/PC_MainMenu` | PlayerController | HostGame CreateAdvancedSession; JoinGame JoinSession; creates WBP_MainMenu |
|
||||
|
||||
**GM_Dungeoneer CDO (Observed Implementation):**
|
||||
|
||||
- HUDClass = `WBP_PlayerHUD_C`
|
||||
- PlayerControllerClass = `PC_Character_C`
|
||||
- PlayerStateClass = `BP_PlayerState_C`
|
||||
- DefaultPawnClass = None (spawn via PC flow)
|
||||
- DefaultPawnClass = None (spawn via PC char-select flow)
|
||||
|
||||
---
|
||||
|
||||
@@ -179,6 +185,8 @@ See Batch 1 sections for `ARIRBaseCharacter`, `ARIRPlayerCharacter`, `ARIRBaseEn
|
||||
|
||||
No separate ability/damage/targeting/session BPI assets under `/Game/_Main/Blueprints/Interfaces` beyond the four above.
|
||||
|
||||
**Pass 10:** Callers of `UpdatePlayerHUD` / `AddGold` exist; `PC_Character` does not implement them → Present but Unconnected.
|
||||
|
||||
---
|
||||
|
||||
## 7. WBP_PlayerHUD resolution
|
||||
@@ -192,6 +200,7 @@ No separate ability/damage/targeting/session BPI assets under `/Game/_Main/Bluep
|
||||
| Verdict | **AHUD Blueprint**, not a Widget Blueprint. `WBP_` prefix is misleading. |
|
||||
| Referencers | `GM_Dungeoneer` |
|
||||
| Dependencies | REALMSINRUIN, `WBP_Overlay`, `BP_OverlayWidgetController` |
|
||||
| CDO (Pass 10) | `overlayWidgetClass=WBP_Overlay_C`; `overlayWidgetControllerClass=BP_OverlayWidgetController_C` |
|
||||
|
||||
Resolves Batch 1 subclass-search anomaly: ObjectTools returned this asset under RIRHUD search because it **is** an RIRHUD child.
|
||||
|
||||
@@ -210,5 +219,7 @@ Resolves Batch 1 subclass-search anomaly: ObjectTools returned this asset under
|
||||
| Enemy ASC access | Enemy ASC on self | Base GetASC from PlayerState | Both Observed; interface path likely broken for enemies |
|
||||
| Default attributes | GE assets exist; property on PS | BP_PlayerState CDO = None; never applied in C++ | Property unused; apply path still Unknown / missing |
|
||||
| HUD naming | `WBP_PlayerHUD` name suggests widget | Parent is RIRHUD (AHUD) | AHUD — name is Documented Intent mismatch |
|
||||
| Dual HUD systems | Native InitOverlay → WBP_Overlay + ASC | BP Server_UpdateHUD → DEPRECATED floats → UpdatePlayerHUD | Both Observed Implementation; incomplete GAS migration |
|
||||
| Dual HUD systems | Native InitOverlay → WBP_Overlay + ASC | BP Server_UpdateHUD → UpdatePlayerHUD | Overlay Connected; UpdatePlayerHUD **unimplemented** on PC (Pass 10) |
|
||||
| Gameplay Abilities | URIRGameplayAbility Documented Intent | No GA assets; legacy Server_Ability_* | Legacy BP abilities active |
|
||||
| Gold | BP_BasePickUp calls AddGold | AddGold unimplemented on PC_Character | Mutation Present but Unconnected |
|
||||
| GameInstance | GI_Dungeoneer asset exists | Not in GameInstanceClass; 0 refs | Present but Unconnected |
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
- **Tool or visibility limitations:** `GameplayEffectComponents` array unreadable via ObjectTools (cues/component tags Unknown on GE CDOs); BlueprintGeneratedClass CDO sometimes rejects duration/modifier property names depending on load path — modifiers recovered via successful GE CDO queries on Default__ / generated class where available; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
- **Last completed pass:** Pass 10 (Batch 4D) — Overlay bindings + EffectActor authority static pass
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
- Gameplay Cue negative inventory
|
||||
- EffectActor + consumable BP wiring
|
||||
- Dual HUD path + stamina delegate type debt
|
||||
- **Pass 10:** WBP_Overlay Health/Mana bindings only; no stamina widget; EffectActor no authority; UpdatePlayerHUD unimplemented on PC
|
||||
|
||||
### Pending sections
|
||||
- PIE: Overlay bars update on potion overlap; dual-resource display
|
||||
|
||||
### Evidence still required
|
||||
- PIE: EffectActor vs enemy GetASC null early-out impact
|
||||
- Sphere collision GenerateOverlapEvents exact (tool limit)
|
||||
- Dual HUD path + stamina delegate type debt
|
||||
- Legacy vs GAS boundary table
|
||||
- Enemy ASC compatibility table
|
||||
- Subsystem status matrix
|
||||
@@ -56,7 +65,7 @@
|
||||
| Gameplay Effects | **Partially Integrated** | 8 GE BPs under GAS/GameplayEffects | 4 consumable GEs assigned + applied; 4 default GEs orphaned | No Max* on default GEs; no Gunslinger GE | Pass 7 inventory |
|
||||
| Gameplay Tags | **Present but Unreferenced** | 12 tags in DefaultGameplayTags.ini | Zero native string refs; zero asset referencers observed | Tags unused by GEs (legacy containers empty) | Config; Source grep; tag tool |
|
||||
| Gameplay Cues | **Missing** | No project cue notify assets; no GC_ assets; no GameplayCue.* project tags beyond Test orphan | None observed | SoundCue `*_Cue` assets are audio, not GAS | find_assets; search_subclasses |
|
||||
| Attribute-driven UI | **Active but Unverified** | InitOverlay → OverlayWidgetController broadcasts + binds | WBP_Overlay via WBP_PlayerHUD | Dual path with DEPRECATED HUD; stamina delegates wrong type alias | RIRHUD.cpp; OverlayWidgetController.h |
|
||||
| Attribute-driven UI | **Active but Unverified** | InitOverlay → OverlayWidgetController → WBP_Overlay Health/Mana bars bind delegates | WBP_Overlay via WBP_PlayerHUD CDO classes assigned | Legacy UpdatePlayerHUD **unimplemented**; stamina broadcasts with **no stamina widget** | RIRHUD; WBP_Overlay DSL; PC list_events |
|
||||
| Legacy-resource synchronization | **Missing** | No mirror code between ASC attrs and DEPRECATED_* | Both UI paths independent | Static divergence possible | Pass 5–7 |
|
||||
| Enemy effect compatibility | **Partially Integrated / Existing Baseline Defect** | Enemy owns ASC; EffectActor uses `GetAbilitySystemComponent` via interface | Interface GetASC → PlayerState → **nullptr on enemies** | Pickups/effects may skip enemies | RIRBaseCharacter.cpp; RIREffectActor.cpp |
|
||||
|
||||
@@ -172,7 +181,7 @@ Defined in `Config/DefaultGameplayTags.ini` (ImportTagsFromConfig=True).
|
||||
|---|---|---|---|---|---|---|
|
||||
| Health combat damage | ApplyDamage + DEPRECATED_CurrentHealth (Amazonian AnyDamage) | Attribute Health via GE (potions only) | None | **Legacy for combat**; GAS for potions | Dual health pools possible | Does potion heal update combat death? |
|
||||
| Mana ability cost | DEPRECATED_*ManaCost + FCanUseMana | Attribute Mana via GE potions | None | **Legacy for abilities** | Potion mana may not affect ability costs | PIE both meters |
|
||||
| HUD bars | Server_UpdateHUD → UpdatePlayerHUD (DEPRECATED %) | InitOverlay → OverlayWidgetController ASC delegates | None | **Both connected** | Dual UI | Which bars visible? |
|
||||
| HUD bars | Server_UpdateHUD → UpdatePlayerHUD (DEPRECATED %) | InitOverlay → OverlayWidgetController ASC delegates | None | Overlay Connected; UpdatePlayerHUD **Present but Unconnected** | Incomplete dual UI | Overlay only? |
|
||||
| Healing | DEPRECATED_RecoverPlayerHealth (Cleric) | GE_PotionHeal / HoT | None | Both | Inconsistent heal systems | — |
|
||||
| Death | PlayerDeath / IsDead bool | State.Dead tag unused; no attr death | None | Legacy | Tag unused | — |
|
||||
| Blocking | IsBlocking bool + ABP | State.Blocking unused | None | Legacy | Tag unused | — |
|
||||
@@ -211,7 +220,7 @@ Defined in `Config/DefaultGameplayTags.ini` (ImportTagsFromConfig=True).
|
||||
|
||||
---
|
||||
|
||||
## EffectActor boundary (Pass 7; Pass 10 deferred)
|
||||
## EffectActor boundary (Pass 7 + Pass 10)
|
||||
|
||||
`ARIREffectActor::ApplyEffectToTarget`:
|
||||
|
||||
@@ -224,11 +233,13 @@ Defined in `Config/DefaultGameplayTags.ini` (ImportTagsFromConfig=True).
|
||||
| BP | Instant | Duration | Graph |
|
||||
|---|---|---|---|
|
||||
| `BP_HealthPotion` | GE_PotionHeal | None | Sphere OnComponentBeginOverlap → ApplyEffecttoTarget(Instant) → DestroyActor |
|
||||
| `BP_ManaPotion` | GE_PotionMana | None | Same pattern (agent + refs) |
|
||||
| `BP_ManaCrystal` | None | GE_MoT_Small | Same Duration pattern |
|
||||
| `BP_OrangeSlice` | None | GE_HoT_Small | Same Duration pattern |
|
||||
| `BP_ManaPotion` | GE_PotionMana | None | Same Instant |
|
||||
| `BP_ManaCrystal` | None | GE_MoT_Small | Sphere → Apply(Duration) → Destroy |
|
||||
| `BP_OrangeSlice` | None | GE_HoT_Small | Sphere → Apply(Duration) → Destroy |
|
||||
|
||||
Authority on overlap application: **Requires Runtime Inspection** (not traced beyond DSL). Full pickup respawn/UI → Pass 10.
|
||||
**Pass 10 static:** No `SwitchHasAuthority` on any of the four; `bReplicates=false`; no target filter; Destroy always follows Apply call (including null ASC early-out path); no UI notify; no respawn. Authority / client overlap = **Authority Risk** / Requires Runtime Inspection. Full matrices: `12-Pickups-And-Effects.md`.
|
||||
|
||||
**Overlay (Pass 10):** `WBP_Overlay` forwards controller to Health + Mana progress bars only; **no stamina widget**. Bars bind OnHealth/ManaChanged → SetProgressBarPercent.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
- **Inspection method:** Read-only AssetTools + BlueprintTools + ObjectTools; connected subgraphs on all five playables + base correlation.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 7 (Batch 4B)
|
||||
- **Next pass expected to contribute:** Pass 9 / Pass 4 when authorized
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D) — char-select spawn correlation
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
- Pass 6 Ability 001–004 path reconstruction
|
||||
- Pass 8: AnimBP/Montage/AnimNotify callback wiring — see `10-AnimationDependencies.md`
|
||||
- **Pass 7:** Character DefaultAttributes GEs orphaned; no per-character ASC grant; Gunslinger still no GE
|
||||
- **Pass 4:** Char-select offers Paladin/Wizard/Cleric/Amazonian only (Gunslinger absent); DefaultPawn=None → PlayerFirstSpawn
|
||||
|
||||
### Pending sections
|
||||
- Weapon component deep dive if separate assets exist beyond overlaps
|
||||
@@ -29,6 +30,7 @@
|
||||
- Notify trigger times (Manual Editor)
|
||||
- Interrupt cleanup if AN_AttackComplete skipped
|
||||
- PIE spawn attribute values vs orphan default GEs
|
||||
- Remote-client character-select visibility
|
||||
|
||||
---
|
||||
|
||||
@@ -38,6 +40,8 @@
|
||||
|
||||
**Observed Implementation:** ASC on `ARIRPlayerState`; character caches pointers in `InitAbilityActorInfo`. Native also calls `ARIRHUD::InitOverlay` (GAS attribute UI path).
|
||||
|
||||
**Pass 4 spawn path:** With `GM_Dungeoneer.DefaultPawnClass=None`, playable pawns come from `WBP_CharacterSelect` → `PC_Character.PlayerSelectScreenChoice` → `ServerSpawnCharacter` → `GM_Dungeoneer.GetSelectedClass` → `PlayerFirstSpawn` (SpawnActor + Possess). Selectable classes: Paladin, Wizard, Cleric, Amazonian. **Gunslinger not offered** on the select UI.
|
||||
|
||||
---
|
||||
|
||||
## Playable Blueprint paths
|
||||
|
||||
@@ -2,90 +2,208 @@
|
||||
|
||||
**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.
|
||||
- **Scope:** Pass 4 frontend / sessions / maps + Pass 10 HUD / widget architecture (Batch 4D). Static read-only only.
|
||||
- **Inspection method:** BlueprintTools `read_graph_dsl` / `list_events`; ObjectTools CDO; AssetTools deps/refs; UMG `GetWidgetDescription`; filesystem `Config/*.ini` grep; EditorApp `IsPIERunning` / SceneTools `get_current_level`.
|
||||
- **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)
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 (synthesis) when explicitly authorized
|
||||
|
||||
## 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
|
||||
- Framework / frontend matrix
|
||||
- Session create / find / join graphs and classification
|
||||
- Online configuration inventory (negative for OnlineSubsystem under project Config)
|
||||
- Map / travel / pawn-spawn matrix
|
||||
- HUD architecture (ASC Overlay + legacy BPI hole)
|
||||
- Widget inventory
|
||||
- Character-selection matrix
|
||||
|
||||
### 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
|
||||
- Runtime session / travel validation (PIE / standalone / multiplayer — not authorized)
|
||||
- JoinSession internal ClientTravel confirmation
|
||||
- CommonUI production usage beyond enabled plugin
|
||||
|
||||
### Evidence still required
|
||||
- Whether both Overlay ASC HUD and DEPRECATED UpdatePlayerHUD run in PIE
|
||||
- Session create/find/join graphs
|
||||
- Whether `JoinSession` travels without an explicit success pin
|
||||
- Whether listen-server remote clients ever receive `WBP_CharacterSelect`
|
||||
- Whether `W_HUD_OLD` is ever created (no connected creator found)
|
||||
- Steam / OnlineSubsystem runtime defaults when INI keys are absent
|
||||
|
||||
### Tool or visibility limitations
|
||||
- Map World Settings GameMode not in asset-registry tags; inferred from map→GM package dependencies
|
||||
- Sphere / widget collision templates often unreadable via CDO `get_properties`
|
||||
- Native `RIRHUD` / `OverlayWidgetController` bodies opaque to BP DSL (header/source used where present)
|
||||
- `GI_Dungeoneer` empty EventGraph returns `""` from `read_graph_dsl`
|
||||
|
||||
---
|
||||
|
||||
## WBP_PlayerHUD resolution (Pass 3)
|
||||
## 1. Framework and frontend matrix
|
||||
|
||||
| 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`).
|
||||
| Asset | Parent | Role | Entry points | Connected downstream flow | Status | Evidence |
|
||||
|-------|--------|------|--------------|---------------------------|--------|----------|
|
||||
| `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` | `GameInstance` | Intended GI scaffold | None found | Empty EventGraph; **0 referencers**; not in `DefaultEngine.ini` `GameInstanceClass` | Present but Unconnected | AssetTools refs; DSL empty; Config grep |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_MainMenu` | `GameModeBase` | Main-menu GameMode | Map World Settings (MainMenu) | CDO: `PC_MainMenu`, `BP_MainMenuPawn`; EventGraph empty stubs | Active but Unverified | CDO + map deps |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` | `GameModeBase` | Gameplay GameMode | Test01 / Dev_Island / LEVEL_01 deps | Collects PlayerStarts; `GetSelectedClass` → `PlayerFirstSpawn`; PostLogin/Logout track PCs | Active but Unverified | EventGraph DSL |
|
||||
| `/Game/_Main/Blueprints/Player/PC_MainMenu` | `PlayerController` | Host / join session owner | BeginPlay; `HostGame`; `JoinGame` | Creates `WBP_MainMenu`; AdvancedSessions create; JoinSession | Active but Unverified | EventGraph DSL |
|
||||
| `/Game/_Main/Blueprints/Player/PC_Character` | `RIRPlayerController` | Char-select + spawn | BeginPlay; BPI select/spawn/respawn | Char-select widget (server branch); `ServerSpawnCharacter` → GM → `PlayerFirstSpawn` | Partial | EventGraph + `list_events` |
|
||||
| `/Game/_Main/UI/Widgets/MainMenu/BP_MainMenuPawn` | (menu pawn) | Default pawn on MainMenu | GM_MainMenu DefaultPawn | Visual / idle menu pawn | Active but Unverified | GM CDO |
|
||||
| `/Game/_Main/UI/Widgets/MainMenu/WBP_MainMenu` | UserWidget | Main menu + session UI | PC_MainMenu BeginPlay | NewGame→Test01; Host→PC_MainMenu; Find→FindSessionsAdvanced; slots | Active but Unverified | EventGraph DSL |
|
||||
| `/Game/_Main/UI/Widgets/MainMenu/WBP_GameSlot` | UserWidget | Session row | Created by Find success loop | Displays GameName/MaxPlayers; Join→PC_MainMenu.JoinGame | Active but Unverified | EventGraph DSL |
|
||||
| `/Game/_Main/UI/Widgets/CharacterSelectScreen/WBP_CharacterSelect` | UserWidget | Class picker | PC_Character BeginPlay (Authority+IsServer) | Sets class soft refs; Start→`PlayerSelectScreenChoice`; MainMenu→OpenLevel MainMenu | Partial (server-only create) | EventGraph DSL |
|
||||
| `/Game/_Main/UI/Widgets/WBP_PreAlphaDevMessage` | UserWidget | Dev watermark | PC_MainMenu + PC_Character BeginPlay | AddToViewport only | Active but Unverified | EventGraph DSL |
|
||||
| `/Game/_Main/Blueprints/Examples/ExampleAdvancedSessionsFunctionsChar` | Character example | Plugin sample | None | **0 referencers** | Example Only | get_referencers |
|
||||
|
||||
---
|
||||
|
||||
## HUD init (Observed Implementation)
|
||||
## 2. Session flow matrix
|
||||
|
||||
### Native GAS path
|
||||
| Operation | Entry point | Session node | Settings | Success path | Failure path | Travel/cleanup | Status |
|
||||
|-----------|-------------|--------------|----------|--------------|--------------|----------------|--------|
|
||||
| Host / create | `WBP_MainMenu` StartGameButton → `PC_MainMenu.HostGame` | `CreateAdvancedSession` | Extra: `GameName` (string), `MaxPlayers` (int); MaxPlayers arg = Players (2–4) | OnSuccess → `OpenLevel` `/Game/_Main/Levels/Testing/Dev_Island` with `?listen` | **No OnFailure pin connected in DSL** | Listen-server OpenLevel; no DestroySession | Partial |
|
||||
| Find | RefreshButton / RefreshGames | `FindSessionsAdvanced` (results max 999) | Default AdvancedSessions search (no extra filters in graph) | OnSuccess → clear scroll → create `WBP_GameSlot` per result | OnFailure → PrintString `FailedtoFindSessions` | None | Active but Unverified |
|
||||
| Join | `WBP_GameSlot` Clicked → `PC_MainMenu.JoinGame` | Engine/Advanced `JoinSession` | SearchResult from slot | **No OnSuccess pin in DSL** | OnFailure → PrintString `FailedtoJoinGame` | Relies on JoinSession internal travel; **no explicit ClientTravel** | Partial |
|
||||
| Destroy / leave | — | — | — | — | — | **No DestroySession / EndSession graph found** | Missing |
|
||||
| Return to menu | `WBP_CharacterSelect` MainMenuButton | None | — | `OpenLevel` MainMenu | — | Level travel only; no session cleanup | Partial |
|
||||
| Single-player New Game | `WBP_MainMenu` NewGameButton | None | — | `OpenLevel` Test01 | — | No session | Active but Unverified |
|
||||
|
||||
`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.
|
||||
**Classification note:** Production AdvancedSessions **nodes are connected** in menu Blueprints. That does **not** prove sessions work without OnlineSubsystem configuration + runtime testing. Plugins enabled ≠ production online service configured.
|
||||
|
||||
---
|
||||
|
||||
## Framework assignments (GM_Dungeoneer CDO)
|
||||
## 3. Online configuration inventory
|
||||
|
||||
| Property | Value |
|
||||
|----------|--------|
|
||||
| HUDClass | `WBP_PlayerHUD_C` |
|
||||
| PlayerControllerClass | `PC_Character_C` |
|
||||
| PlayerStateClass | `BP_PlayerState_C` |
|
||||
| DefaultPawnClass | None |
|
||||
Project `Config/*.ini` and `Plugins/*/Config/*.ini` grep for OnlineSubsystem / Steam / NetDriver / GameInstanceClass returned **no matches**. No `Saved/Config/**/*.ini` present in the workspace snapshot.
|
||||
|
||||
`PC_Character` implements `BPI_PlayerController`; holds `CharacterSelectHUD`; Enhanced Input IMC `IMC_PlayerDefault` + `IA_Movement`.
|
||||
| File | Section | Key | Value classification | Consumer | Ownership | Status |
|
||||
|------|---------|-----|----------------------|----------|-----------|--------|
|
||||
| `Config/DefaultEngine.ini` | `/Script/EngineSettings.GameMapsSettings` | `GameDefaultMap` | `/Game/_Main/Levels/Maps/MainMenu.MainMenu` | Engine startup map | Project-owned | Observed Implementation |
|
||||
| `Config/DefaultEngine.ini` | same | `EditorStartupMap` | `/Game/_Main/Levels/Testing/Test01.Test01` | Editor load | Project-owned | Observed Implementation |
|
||||
| `Config/DefaultEngine.ini` | — | `GameInstanceClass` | **Absent** | Would wire `GI_Dungeoneer` | — | Missing |
|
||||
| `Config/DefaultEngine.ini` | — | `GlobalDefaultGameMode` | **Absent** | Per-map overrides used instead | — | Missing (by design / debt) |
|
||||
| `Config/*.ini` | — | `DefaultPlatformService` / `OnlineSubsystem*` / `SteamDevAppId` / `SteamNetDriver` / `NetDriverDefinitions` | **Absent** | AdvancedSessions create/find/join | Engine default / unknown | Missing (project config) |
|
||||
| `REALMSINRUIN_DEV.uproject` | Plugins | `AdvancedSessions`, `AdvancedSteamSessions` | Enabled (prior Pass 1) | Menu session nodes | Project-owned plugin enable | Active but Unverified |
|
||||
| — | — | Secret-bearing Steam keys | **Not present** in inspected project Config | — | — | Negative inventory |
|
||||
|
||||
**Production reachability:** Session Blueprint path is **Partial / Active but Unverified**. OnlineSubsystem project configuration is **Missing**. Do not claim multiplayer sessions function.
|
||||
|
||||
---
|
||||
|
||||
## Sessions (Observed Implementation)
|
||||
## 4. Map and travel matrix
|
||||
|
||||
Project plugins AdvancedSessions + AdvancedSteamSessions enabled (VersionName 5.8). `GM_Dungeoneer` deps include AdvancedSessions.
|
||||
| Map | GameMode | Entry referencers | Exit/travel path | Pawn-spawn path | Role | Reachability |
|
||||
|-----|----------|-------------------|------------------|-----------------|------|--------------|
|
||||
| `/Game/_Main/Levels/Maps/MainMenu` | `GM_MainMenu` (deps) | `GameDefaultMap`; CharacterSelect MainMenuButton | Host→Dev_Island; NewGame→Test01; Join→(JoinSession) | `BP_MainMenuPawn` via DefaultPawn | Frontend | Config + UI connected |
|
||||
| `/Game/_Main/Levels/Testing/Test01` | `GM_Dungeoneer` | NewGame; EditorStartupMap | CharSelect→MainMenu OpenLevel | Char-select → ServerSpawnCharacter → PlayerFirstSpawn | Testing gameplay | Connected (SP path) |
|
||||
| `/Game/_Main/Levels/Testing/Dev_Island` | `GM_Dungeoneer` | Host OnSuccess `?listen` | Same char-select spawn | Same | Host listen target | Connected (host path) |
|
||||
| `/Game/_Main/Levels/Maps/LEVEL_01` | `GM_Dungeoneer` (+ dungeon generator dep) | No menu OpenLevel found | Unknown | Same GM spawn path if entered | Gameplay / dungeon | Present; menu reachability **Unknown** |
|
||||
|
||||
Full session create/find/join graph archaeology → **Pass 4**.
|
||||
No dedicated lobby or character-select map. Character select is an in-level widget under `GM_Dungeoneer`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Pawn spawn and possession (DefaultPawn = None)
|
||||
|
||||
**Observed Implementation** connected path:
|
||||
|
||||
1. `GM_Dungeoneer` CDO `DefaultPawnClass = None`
|
||||
2. `PC_Character` BeginPlay (Authority ∧ IsServer) creates `WBP_CharacterSelect`, AddToViewport, GameAndUI cursor
|
||||
3. Player picks Paladin / Wizard / Cleric / Amazon → stores soft class on widget
|
||||
4. StartButton → `PlayerSelectScreenChoice(SelectedClass)` → RemoveFromParent HUD → `ServerSpawnCharacter`
|
||||
5. `GM_Dungeoneer.GetSelectedClass` → `PlayerFirstSpawn(PC, class, random PlayerStart location + Z50)`
|
||||
6. `SpawnActor` + `Possess`
|
||||
|
||||
**Remote branch empty:** listen-server **clients** have no CreateWidget for character select in this graph (**Partial** / multiplayer risk).
|
||||
|
||||
**Gunslinger:** `Player_Gunslinger` exists (doc 08) but is **not** offered on `WBP_CharacterSelect`.
|
||||
|
||||
**Respawn:** `PlayerRespawn` also SpawnActor+Possess; call-site inventory deferred (not fully traced this pass).
|
||||
|
||||
---
|
||||
|
||||
## 6. HUD architecture matrix
|
||||
|
||||
| Layer | Creator | Widget/controller | Data source | Viewport path | Cleanup/recreation | Status |
|
||||
|-------|---------|-------------------|-------------|---------------|--------------------|--------|
|
||||
| Game HUD class | Engine via `GM_Dungeoneer.HUDClass` | `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD` (`RIRHUD`) | CDO class defaults only (data-only BP) | Engine HUD spawn | Per-PC HUD lifetime | Active but Unverified |
|
||||
| ASC Overlay | Native `ARIRHUD::InitOverlay` from `ARIRPlayerCharacter::InitAbilityActorInfo` | `WBP_Overlay` + `BP_OverlayWidgetController` | `URIRAttributeSet` Health/Mana/(Stamina broadcasts) | Native AddToViewport | Recreate on InitAbilityActorInfo / local HUD present | Active but Unverified |
|
||||
| Health bar | `WBP_Overlay` EventWidgetControllerSet | `WBP_HealthProgressBar` | OnHealthChanged / OnMaxHealthChanged | Child of Overlay | With Overlay | Connected (static) |
|
||||
| Mana bar | same | `WBP_ManaProgressBar` | OnManaChanged / OnMaxManaChanged | Child of Overlay | With Overlay | Connected (static) |
|
||||
| Stamina UI | — | **No stamina widget in Overlay tree** | Controller still has stamina delegates (doc 06 type debt) | **None** | — | Present but Unconnected (broadcasts without widget) |
|
||||
| Legacy HUD update | `BP_PlayerCharacterBase` Server_UpdateHUD | `BPI_PlayerController.UpdatePlayerHUD` | DEPRECATED health/mana % | **No implementer** | — | **Present but Unconnected** |
|
||||
| Legacy widget asset | Unknown | `/Game/_Main/UI/Widgets/HUD/W_HUD_OLD` | Unknown | No creator found this pass | — | Present but Unreferenced / Unknown |
|
||||
| Char-select UI | PC_Character BeginPlay | `WBP_CharacterSelect` | Local widget vars | AddToViewport (server) | RemoveFromParent on Start | Partial |
|
||||
| Main menu UI | PC_MainMenu BeginPlay | `WBP_MainMenu` | Session results | AddToViewport | Level travel tears down | Active but Unverified |
|
||||
|
||||
### ASC Overlay path (Observed Implementation)
|
||||
|
||||
`InitAbilityActorInfo` → `ARIRHUD::InitOverlay` → create `OverlayWidgetClass` (`WBP_Overlay_C`) + `OverlayWidgetControllerClass` (`BP_OverlayWidgetController_C`) → bind ASC → broadcast initial values → progress bars bind delegates → SetProgressBarPercent.
|
||||
|
||||
**CDO assignments confirmed:** both Overlay classes non-null on `Default__WBP_PlayerHUD_C` — null-class abort of InitOverlay **not** indicated for defaults.
|
||||
|
||||
### Legacy path (caller Connected; receiver Missing)
|
||||
|
||||
Possession → Delay → `Server_UpdateHUD` → DEPRECATED % → `UpdatePlayerHUD` on PC.
|
||||
|
||||
`PC_Character` `list_events`: `UpdatePlayerHUD` **`bIsImplemented=false`**. Native `ARIRPlayerController` header/source contain **no** `UpdatePlayerHUD`. **Issue:** Incomplete Refactor / Present but Unconnected.
|
||||
|
||||
**Dual-system reachability:** ASC Overlay statically reachable after pawn InitAbilityActorInfo. Legacy UpdatePlayerHUD call is connected from character but **lands on unimplemented BPI** — not a second working bar system unless another implementer exists (none found on PC_Character).
|
||||
|
||||
---
|
||||
|
||||
## 7. Widget inventory
|
||||
|
||||
| Widget/HUD | Asset class | Parent | Owner | Data inputs | Connected entry path | Status |
|
||||
|------------|-------------|--------|-------|-------------|----------------------|--------|
|
||||
| WBP_PlayerHUD | AHUD BP | `RIRHUD` | GM_Dungeoneer HUDClass | Overlay class CDOs | GameMode HUD spawn | Active but Unverified |
|
||||
| WBP_Overlay | UserWidget | `RIRUserWidget` | RIRHUD InitOverlay | WidgetController | Native InitOverlay | Active but Unverified |
|
||||
| BP_OverlayWidgetController | WidgetController BP | `OverlayWidgetController` | InitOverlay | ASC AttributeSet | Native | Active but Unverified (empty BP graph) |
|
||||
| WBP_HealthProgressBar | UserWidget | ProgressBar hierarchy | Overlay child | Health/MaxHealth delegates | EventWidgetControllerSet | Connected |
|
||||
| WBP_ManaProgressBar | UserWidget | ProgressBar hierarchy | Overlay child | Mana/MaxMana delegates | EventWidgetControllerSet | Connected |
|
||||
| WBP_ProgressBarBase | UserWidget | — | Parent of bars | — | Inheritance | Scaffolding |
|
||||
| WBP_MainMenu | UserWidget | — | PC_MainMenu | Players, FoundSessions | BeginPlay | Active but Unverified |
|
||||
| WBP_GameSlot | UserWidget | — | MainMenu Find loop | FoundSession | Find OnSuccess | Active but Unverified |
|
||||
| WBP_CharacterSelect | UserWidget | — | PC_Character | SelectedCharacterClass | Server BeginPlay | Partial |
|
||||
| WBP_PreAlphaDevMessage | UserWidget | — | Both PCs | None | BeginPlay | Active but Unverified |
|
||||
| W_HUD_OLD | UserWidget | — | Unknown | Unknown | **No creator found** | Present but Unreferenced |
|
||||
| WBP_BannerMessage | UserWidget | — | Unknown | — | Not traced to pickups | Present; consumer Unknown |
|
||||
| WBP_PlayerStats / WBP_GameStats* | UserWidget | — | Unknown | — | Not traced this pass | Present; reachability Unknown |
|
||||
| Pause menu | — | — | — | — | Project search empty | Missing |
|
||||
|
||||
---
|
||||
|
||||
## 8. Character-selection matrix
|
||||
|
||||
| Entry point | Available classes | Selection storage | Server authority | Spawn/possession consumer | Persistence | Status |
|
||||
|-------------|-------------------|-------------------|------------------|---------------------------|-------------|--------|
|
||||
| `WBP_CharacterSelect` buttons | `Player_Paladin`, `Player_Wizard`, `Player_Cleric`, `Player_Amazonian` | Widget var `SelectedCharacterClass` (soft class) | Start → `PlayerSelectScreenChoice` → `ServerSpawnCharacter` → GM | `PC_Character.PlayerFirstSpawn` SpawnActor+Possess | **Session/travel only** (widget local; not GI) | Partial |
|
||||
| Gunslinger | — | — | — | — | Not in UI | Missing from select UI |
|
||||
| GI storage | — | `GI_Dungeoneer` empty / unwired | — | — | None | Missing |
|
||||
|
||||
---
|
||||
|
||||
## 9. Startup and frontend flow (summary)
|
||||
|
||||
1. Packaged/game default map: **MainMenu** (`GameDefaultMap`)
|
||||
2. Editor default: **Test01** (`EditorStartupMap`) — skips menu when editing
|
||||
3. MainMenu: `GM_MainMenu` + `PC_MainMenu` creates `WBP_MainMenu`
|
||||
4. Branches: NewGame→Test01; Multiplayer Host→CreateAdvancedSession→Dev_Island `?listen`; Find/Join→session nodes
|
||||
5. Gameplay maps: `GM_Dungeoneer` + `PC_Character` → character select (server) → spawn selected class
|
||||
6. `GI_Dungeoneer` does **not** participate in observed flow
|
||||
|
||||
---
|
||||
|
||||
## 10. Confirmed classifications (Pass 4 / Pass 10 UI)
|
||||
|
||||
| System | Classification |
|
||||
|--------|----------------|
|
||||
| ASC Overlay Health/Mana bars | Active but Unverified |
|
||||
| Stamina UI | Present but Unconnected (no widget) |
|
||||
| Legacy UpdatePlayerHUD | Present but Unconnected (unimplemented on PC) |
|
||||
| AdvancedSessions menu create/find/join graphs | Partial / Active but Unverified |
|
||||
| OnlineSubsystem project INI | Missing |
|
||||
| ExampleAdvancedSessionsFunctionsChar | Example Only |
|
||||
| GI_Dungeoneer | Present but Unconnected |
|
||||
| Pause menu | Missing |
|
||||
| Session destroy/cleanup | Missing |
|
||||
|
||||
@@ -2,30 +2,37 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Native `ARIREffectActor` mechanism; Pass 7 consumable GE assignments and overlap→apply wiring. Full per-pickup respawn/UI/authority deep dive deferred to Pass 10.
|
||||
- **Inspection method:** Native C++; search_subclasses; AssetTools refs; ObjectTools GE class props; BlueprintTools EventGraph DSL on `BP_HealthPotion`.
|
||||
- **Scope:** Pass 10 pickup / consumable / EffectActor / currency archaeology (Batch 4D). Complements Pass 7 GE inventory in doc 06.
|
||||
- **Inspection method:** BlueprintTools EventGraph DSL; ObjectTools CDO; `search_subclasses` on `RIREffectActor`; AssetTools referencers; SceneTools `find_actors` on already-loaded Test01 (read-only).
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 7 (Batch 4B) — EffectActor + GE wiring seed
|
||||
- **Next pass expected to contribute:** Pass 10
|
||||
- **Last completed pass:** Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized; PIE for authority / overlap validation
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- ApplyEffectToTarget GE application path
|
||||
- Instant/Duration GE class properties
|
||||
- Blueprint child paths for potions / orange slice / mana crystal
|
||||
- **Pass 7:** Exact Instant/Duration GE assignments; HealthPotion overlap→Apply→Destroy; GE modifier magnitudes; enemy GetASC null risk
|
||||
- All four `ARIREffectActor` children overlap → Apply → Destroy
|
||||
- Legacy `BP_BasePickUp` / gold path
|
||||
- GE application matrix + enemy GetASC incompatibility
|
||||
- Currency / collectible matrix + negative stamina-potion inventory
|
||||
- Pickup issue matrix
|
||||
|
||||
### Pending sections
|
||||
- Per-pickup authority, destroy/respawn, UI notify (Pass 10)
|
||||
- ManaPotion / ManaCrystal / OrangeSlice graph confirmation beyond refs (HealthPotion DSL verified)
|
||||
- Gold / stamina pickups if present
|
||||
- Sphere collision profile / `GenerateOverlapEvents` exact values (tool limit)
|
||||
- Runtime multiplayer authority behavior for non-replicating EffectActors
|
||||
- Whether full-health HealthPickUp leaves actor undestroyed (DSL branch shape)
|
||||
|
||||
### Evidence still required
|
||||
- Whether ApplyEffect runs with HasAuthority on overlap
|
||||
- Whether GetAbilitySystemComponent succeeds for player vs fails for enemy in PIE
|
||||
- Stacking / re-pickup behavior
|
||||
- PIE: player overlap applies GE and updates Overlay bars
|
||||
- PIE: enemy overlap early-out
|
||||
- PIE: gold AddGold no-op (unimplemented BPI)
|
||||
- Respawn / lifespan (none found statically)
|
||||
|
||||
### Tool or visibility limitations
|
||||
- CDO `get_properties("sphere")` → None (component templates)
|
||||
- Redirector paths reject `read_graph_dsl` (use canonical Potion/Food/Treasure paths)
|
||||
- Native `ApplyEffectToTarget` body in C++ (already documented Pass 7)
|
||||
|
||||
---
|
||||
|
||||
@@ -35,23 +42,112 @@
|
||||
|
||||
1. `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor)`
|
||||
2. Early-out if null
|
||||
3. MakeOutgoingSpec(GEClass, 1.f) + ApplyGameplayEffectSpecToSelf
|
||||
3. `MakeOutgoingSpec(GEClass, 1.f)` + `ApplyGameplayEffectSpecToSelf`
|
||||
|
||||
**Enemy ASC defect interaction:** Library GetASC uses `ARIRBaseCharacter::GetAbilitySystemComponent` → PlayerState. Enemies return **nullptr** → ApplyEffect early-out. **Issue:** Existing Baseline Defect / Incomplete Refactor. Classify static consequence separately from runtime chase/attack defects.
|
||||
**Enemy compatibility:** Library/interface GetASC uses `ARIRBaseCharacter::GetAbilitySystemComponent` → PlayerState. Enemies return **nullptr** → early-out. **Enemy-Incompatible Due to ASC Accessor** (static). Separate from chase/attack Implementation Missing (doc 09).
|
||||
|
||||
---
|
||||
|
||||
## Blueprint subclasses (Observed Implementation)
|
||||
## 1. Pickup inventory
|
||||
|
||||
| Asset | InstantGameplayEffectClass | DurationGameplayEffectClass |
|
||||
|-------|----------------------------|------------------------------|
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_HealthPotion` | `GE_PotionHeal` (+25 Health Instant) | None |
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_ManaPotion` | `GE_PotionMana` (+30 Mana Instant) | None |
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_ManaCrystal` | None | `GE_MoT_Small` (+0.25 Mana / 0.1s for 1s) |
|
||||
| `/Game/_Main/Blueprints/Items/Food/BP_OrangeSlice` | None | `GE_HoT_Small` (+0.5 Health / 0.1s for 1s) |
|
||||
| Pickup | Parent | Collision/overlap | Authority | Effect or mutation | Presentation | Destroy/respawn | Status |
|
||||
|--------|--------|-------------------|-----------|--------------------|--------------|-----------------|--------|
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_HealthPotion` | `RIREffectActor` | `OnComponentBeginOverlap(Sphere)` | **None** (`SwitchHasAuthority` absent); `bReplicates=false` | Instant `GE_PotionHeal` via `ApplyEffecttoTarget` | None in graph | Immediate `DestroyActor`; **no respawn/lifespan** | Active but Unverified / Authority Risk |
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_ManaPotion` | `RIREffectActor` | Sphere overlap | Same | Instant `GE_PotionMana` | None | Destroy; no respawn | Active but Unverified / Authority Risk |
|
||||
| `/Game/_Main/Blueprints/Items/Potion/BP_ManaCrystal` | `RIREffectActor` | Sphere overlap | Same | Duration `GE_MoT_Small` | None | Destroy; no respawn | Active but Unverified / Authority Risk |
|
||||
| `/Game/_Main/Blueprints/Items/Food/BP_OrangeSlice` | `RIREffectActor` | Sphere overlap | Same | Duration `GE_HoT_Small` | None | Destroy; no respawn | Active but Unverified / Authority Risk |
|
||||
| `/Game/_Main/Blueprints/Items/Treasure/BP_SmallGoldPickUp` | `BP_BasePickUp` → `Actor` | Parent `PickUpRadius` overlap | **Yes** Authority + tag `Player` | `AddGold(PickUpAmount=25)` | `CoinsPickUp_Cue` | Destroy; no respawn | Partial (AddGold unimplemented) |
|
||||
| `/Game/_Main/Blueprints/Items/BP_BasePickUp` | `Actor` | `PickUpRadius` | Authority + `Player` tag | Switch `E_PickUpType`: Gold / Health / Mana | SFX on paths | Destroy on success paths | Partial / Technical Debt |
|
||||
|
||||
**BP_HealthPotion EventGraph (Observed Implementation):** `OnComponentBeginOverlap(Sphere)` → `ApplyEffecttoTarget(OtherActor, InstantGameplayEffectClass)` → `DestroyActor`.
|
||||
**Redirectors (not separate logic):** `Items/BP_HealthPotion`, `Items/BP_ManaPotion`, `Items/BP_OrangeSlice`, `Items/BP_SmallGoldPickUp` → canonical paths above.
|
||||
|
||||
Same structural pattern reported for other three consumables (referencer graph + agent); Pass 10 should re-confirm each DSL.
|
||||
**`search_subclasses(RIREffectActor)`:** only the four GE pickups (+ native base). Gold is **not** an EffectActor child.
|
||||
|
||||
**Classification:** Pickups are the **only Observed Implementation** of runtime Gameplay Effect application found in Pass 7. Combat abilities remain ApplyDamage / DEPRECATED (doc 05). Full GE inventory: doc 06.
|
||||
**Stamina pickup:** project search for stamina potion/widget assets → **none**. Explicit negative inventory.
|
||||
|
||||
**Test01 placement (Observed Implementation):** 1× each GE pickup; 3× `BP_SmallGoldPickUp`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Gameplay Effect application matrix
|
||||
|
||||
| Pickup | Target filter | ASC lookup | GE | Apply call | Null behavior | Player compatibility | Enemy compatibility |
|
||||
|--------|---------------|------------|----|------------|---------------|----------------------|---------------------|
|
||||
| BP_HealthPotion | None in BP (any OtherActor) | Native ApplyEffectToTarget → GetASC | `GE_PotionHeal` Instant +25 Health | `ApplyEffecttoTarget(OtherActor, InstantGameplayEffectClass)` | Early-out; **DestroyActor still runs after call** | Compatible if player ASC via PlayerState | **Enemy-Incompatible Due to ASC Accessor** (null ASC) |
|
||||
| BP_ManaPotion | None | Same | `GE_PotionMana` Instant +30 Mana | Instant class | Same (destroy always) | Compatible (static) | Enemy-Incompatible |
|
||||
| BP_ManaCrystal | None | Same | `GE_MoT_Small` Duration | `DurationGameplayEffectClass` | Same | Compatible (static) | Enemy-Incompatible |
|
||||
| BP_OrangeSlice | None | Same | `GE_HoT_Small` Duration | Duration class | Same | Compatible (static) | Enemy-Incompatible |
|
||||
|
||||
**Connected path (all four GE pickups):**
|
||||
|
||||
`OnComponentBeginOverlap(Sphere)` → `ApplyEffecttoTarget` → `DestroyActor`
|
||||
|
||||
No actor-class filter, no Player tag, no authority switch, no UI notification, no Niagara in graph.
|
||||
|
||||
**Classification reminder:** GE property assignment + overlap apply call = Connected static path. Runtime success = **Requires Runtime Inspection**.
|
||||
|
||||
---
|
||||
|
||||
## 3. Currency / collectible matrix
|
||||
|
||||
| Asset/system | Entry point | Stored value | Authority | Replication | UI | Persistence | Status |
|
||||
|--------------|-------------|--------------|-----------|-------------|----|-------------|--------|
|
||||
| `BP_SmallGoldPickUp` / `GoldPickUp` | Authority overlap + tag Player | Calls `BPI_PlayerController.AddGold(PickUpAmount)`; CDO Amount=25 | Authority gated on pickup | Pickup `bReplicates=true` | No gold UI widget found | **No GI / save store found** | Partial |
|
||||
| `AddGold` on `PC_Character` | Called from `GoldPickUp` | Interface method | — | — | — | — | **Present but Unconnected** (`bIsImplemented=false`; not in `RIRPlayerController` C++) |
|
||||
| Legacy Health/Mana via `BP_BasePickUp` | Enum Health/Mana | `DEPRECATED_RecoverPlayerHealth/Mana` | Authority | — | None | Character DEPRECATED floats | Technical Debt / dual with GAS potions |
|
||||
| Inventory / Coin / Currency / Score systems | Searched | — | — | — | — | — | **Explicit negative inventory** (no connected non-gold currency beyond above) |
|
||||
| Stamina collectible | Searched | — | — | — | — | — | **Missing** |
|
||||
|
||||
**Gold consequence:** Overlap can destroy the gold actor and play SFX while `AddGold` does nothing statically — **Incomplete Refactor**.
|
||||
|
||||
---
|
||||
|
||||
## 4. Pickup issue matrix
|
||||
|
||||
| Asset | Missing or defective link | Static consequence | Runtime question | Classification |
|
||||
|-------|---------------------------|--------------------|------------------|----------------|
|
||||
| All four EffectActor pickups | No `SwitchHasAuthority`; `bReplicates=false` | Overlap may fire on clients; destroy may desync | Who applies GE / who destroys? | Authority Risk |
|
||||
| All four EffectActor pickups | No target filter | Non-player actors may trigger destroy | Does debris/AI destroy potions? | Requires Runtime Inspection |
|
||||
| All four EffectActor pickups | Destroy after Apply even if ASC null | Enemy (or null ASC) still destroys pickup | Wasted loot on enemy touch? | Enemy-Incompatible Due to ASC Accessor + destroy side effect |
|
||||
| All four EffectActor pickups | No respawn / lifespan | One-shot only | Intentional? | Partially Implemented |
|
||||
| All four EffectActor pickups | No UI notify | Overlay may update via ASC only | Bars animate on pickup? | Active but Unverified |
|
||||
| `BP_BasePickUp` Health/Mana | Uses DEPRECATED recover, not GEs | Dual heal/mana systems vs potions | Which values HUD shows? | Technical Debt / Incomplete Refactor |
|
||||
| `BP_SmallGoldPickUp` | `AddGold` unimplemented on PC | Gold mutation missing | Does gold vanish with no score? | Present but Unconnected (receiver) |
|
||||
| Stamina | No pickup / no Overlay widget | Stamina attribute UI unused | — | Missing |
|
||||
| Sphere collision props | Unreadable via MCP CDO | Cannot classify Collision Configuration Conflict from profile alone | GenerateOverlapEvents true? | Unknown — Tool Limitation |
|
||||
|
||||
---
|
||||
|
||||
## Legacy BP_BasePickUp detail (Observed Implementation)
|
||||
|
||||
```
|
||||
OnComponentBeginOverlap(PickUpRadius)
|
||||
→ SwitchHasAuthority → Authority
|
||||
→ ActorHasTag(OtherActor, "Player")
|
||||
→ Switch E_PickUpType:
|
||||
Gold → GoldPickUp → GetPlayerREF → AddGold(PC, Amount) → Coins SFX → Destroy
|
||||
Health → HealthPickUp → if DEPRECATED health < max → DEPRECATED_RecoverPlayerHealth → potion SFX → Destroy
|
||||
Mana → ManaPickUp → analogous DEPRECATED mana recover
|
||||
```
|
||||
|
||||
**DSL note:** Health/Mana sound+destroy appear in the true branch of the “not full” check (no explicit `else`). If already full, static reading suggests **no destroy** — **Requires Runtime Inspection** / possible Partial behavior.
|
||||
|
||||
---
|
||||
|
||||
## UI notifications from pickups
|
||||
|
||||
| Source | Notification | Status |
|
||||
|--------|--------------|--------|
|
||||
| GE pickups | None in graphs | Missing |
|
||||
| Gold | Audio only | Partial |
|
||||
| `WBP_BannerMessage` | Not referenced by pickups this pass | Present; Unconnected to pickups |
|
||||
|
||||
ASC Overlay health/mana bars may reflect GE changes if InitOverlay path active — that is attribute UI, not pickup-specific notification.
|
||||
|
||||
---
|
||||
|
||||
## Correlation to prior docs
|
||||
|
||||
- GE CDO magnitudes / orphan default-attribute GEs: **doc 06** (unchanged inventory; reachability of consumable GEs **confirmed Active static path** again).
|
||||
- Enemy GetASC: **doc 06 / 09** — pickup enemy incompatibility unchanged; no new enemy AI analysis.
|
||||
- HUD dual path: **doc 11** — Overlay may show GE heals; legacy UpdatePlayerHUD unimplemented.
|
||||
|
||||
@@ -2,44 +2,46 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Unresolved questions after Batches 1–3, Batch 4A–4C (Passes 8, 7, 9).
|
||||
- **Inspection method:** Consolidation through Pass 9.
|
||||
- **Scope:** Unresolved questions after Batches 1–4D (Passes 4, 7–10).
|
||||
- **Inspection method:** Consolidation through Pass 10.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; AnimGraph transition DSL empty; no PIE.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; AnimGraph transition DSL empty; Sphere CDO collision unreadable; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1–3 / Pass 7 / Pass 8 resolutions
|
||||
- **Pass 9 resolutions:** chase/attack Implementation Missing; empty enemy EventGraphs; stock AIController; no BT/BB/navmesh; orphan attack montage; ABP SetIsDead(false); GetASC not chase cause
|
||||
- Batch 1–3 / Pass 7 / Pass 8 / Pass 9 resolutions
|
||||
- **Pass 4 resolutions:** GI empty/unwired; session graphs Partial; OnlineSubsystem INI Missing; map/GameMode deps; char-select spawn
|
||||
- **Pass 10 resolutions:** Overlay Health/Mana only; UpdatePlayerHUD/AddGold unimplemented; EffectActor authority risk; gold Partial; no stamina pickup/UI
|
||||
|
||||
### Pending sections
|
||||
- Frontend/session (Pass 4)
|
||||
- Pickup deep graphs (Pass 10)
|
||||
- Runtime test procedures
|
||||
- Runtime test procedures (Pass 11 may list; PIE still unauthorized until requested)
|
||||
|
||||
### Evidence still required
|
||||
- PIE possession / ApplyDamage feedback / Death state reachability
|
||||
- Session create/find/join with OnlineSubsystem defaults
|
||||
- Notify trigger times (Manual Editor)
|
||||
|
||||
---
|
||||
|
||||
## Resolved in Batch 4C (Pass 9)
|
||||
## Resolved in Batch 4D (Pass 4 + Pass 10)
|
||||
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Where does chase/attack live? | **Nowhere connected** — native + BP EventGraphs empty; BPI AddPlayerTarget/EnemyMeleeAttack unimplemented | Implementation Missing | 09 |
|
||||
| AIController? | Stock `/Script/AIModule.AIController`; AutoPossessAI PlacedInWorld | Observed Implementation | 09 |
|
||||
| BehaviorTree/Blackboard/Perception? | None in project | Missing | 09 |
|
||||
| Navmesh in Test01? | No NavMeshBoundsVolume / RecastNavMesh | Missing (secondary) | 09 |
|
||||
| Does GetASC defect cause chase failure? | **No** — chase has no ASC dependency | Observed Implementation | 09, 06 |
|
||||
| Enemy attack montage? | Exists; 0 referencers | Present but Unreferenced | 09, 10 |
|
||||
| Enemy death anim? | ABP Death + death anims; IsDead forced false each Update | Connected but Incomplete | 09, 10 |
|
||||
| Enemy receive player damage? | No ReceiveAnyDamage / health mutation on enemy BP | Implementation Missing | 09, 05 |
|
||||
| Where is session logic? | `PC_MainMenu` + `WBP_MainMenu` / `WBP_GameSlot` — not GI | Observed Implementation | 11 |
|
||||
| Is GI used? | Empty; not in GameInstanceClass; 0 refs | Present but Unconnected | 11, 02 |
|
||||
| OnlineSubsystem project INI? | Absent from Config/*.ini | Missing | 11, 02 |
|
||||
| How DefaultPawn=None gets a pawn? | Char-select → ServerSpawnCharacter → PlayerFirstSpawn | Connected (static) | 11, 08 |
|
||||
| Gunslinger in select UI? | No | Missing from select | 11, 08 |
|
||||
| Does UpdatePlayerHUD update widgets? | Unimplemented on PC_Character; not in RIRPlayerController C++ | Present but Unconnected | 11, 03 |
|
||||
| Stamina UI? | No Overlay child; no stamina widget asset | Present but Unconnected / Missing | 11, 06 |
|
||||
| Pickup authority? | EffectActors: no SwitchHasAuthority; gold: has Authority | Authority Risk / Partial | 12 |
|
||||
| Gold storage? | AddGold called but unimplemented | Present but Unconnected | 12 |
|
||||
| Stamina / other currency pickups? | None found | Missing / negative inventory | 12 |
|
||||
|
||||
---
|
||||
|
||||
@@ -52,8 +54,14 @@
|
||||
| AutoPossessAI PlacedInWorld | Possession Configuration Conflict for **spawned** enemies | Do spawners create uncontrolled pawns? |
|
||||
| ABP SetIsDead(false) | Connected but Incomplete | Death state ever entered? |
|
||||
| No enemy damage reception | Existing Baseline Defect | Player hits show nothing? |
|
||||
| Enemy GetASC nullptr | Incomplete Refactor | EffectActor on enemy |
|
||||
| Dual HUD / orphan default GEs | Incomplete Refactor | PIE attribute/UI |
|
||||
| Enemy GetASC nullptr | Incomplete Refactor | EffectActor on enemy destroys loot without heal? |
|
||||
| UpdatePlayerHUD unimplemented | Incomplete Refactor | Does Server_UpdateHUD no-op? |
|
||||
| AddGold unimplemented | Incomplete Refactor | Gold SFX+destroy without score? |
|
||||
| EffectActor no authority | Authority Risk | Client/server double-destroy or missed GE? |
|
||||
| JoinSession no OnSuccess pin | Partial | Does join travel occur? |
|
||||
| OnlineSubsystem INI Missing | Missing | LAN/Steam sessions fail silently? |
|
||||
| Char-select server-only create | Partial | Remote clients stuck without pawn UI? |
|
||||
| Orphan default GEs / dual resources | Incomplete Refactor | Spawn Health/Mana vs Overlay |
|
||||
|
||||
---
|
||||
|
||||
@@ -61,16 +69,16 @@
|
||||
|
||||
| Question | Method | Priority |
|
||||
|---|---|---|
|
||||
| Sessions / frontend | Pass 4 | Medium |
|
||||
| Full pickup authority/respawn | Pass 10 | Medium |
|
||||
| PIE: possession, ApplyDamage feedback, Death, EffectActor | PIE | High |
|
||||
| Controlled PIE — sessions, Overlay, potions, gold, enemy idle | PIE (explicit auth) | High |
|
||||
| JoinSession travel internals | PIE / Manual Editor | High |
|
||||
| ABP Death transition pins | Manual Editor | Low |
|
||||
| Sphere GenerateOverlapEvents exact | Manual Editor / SCS | Medium |
|
||||
|
||||
---
|
||||
|
||||
## Priority order for later verification
|
||||
|
||||
1. Pass 4 — sessions / frontend
|
||||
2. Pass 10 — pickup deep dive
|
||||
3. Controlled PIE — enemy idle/possession, player hit feedback, dual HUD, potions
|
||||
4. Pass 11 — migration matrix (after Batch 4 complete)
|
||||
1. **Pass 11** — synthesis / executive summary / migration matrix (when authorized)
|
||||
2. Controlled PIE — menu→Test01 spawn, Overlay bars, potion GE, gold no-op, enemy idle
|
||||
3. Multiplayer PIE — host Dev_Island, join travel, remote char-select
|
||||
4. Manual Editor — collision templates, AnimGraph pins
|
||||
|
||||
@@ -5,30 +5,39 @@
|
||||
- **Scope:** Compact cross-model index of material findings.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Every batch
|
||||
- **Last completed pass:** Pass 4 + Pass 10 (Batch 4D)
|
||||
- **Next pass expected to contribute:** Pass 11 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1–3; Pass 7; Pass 8; **Pass 9 enemy AI rows**
|
||||
- Batch 1–3; Pass 7; Pass 8; Pass 9; **Pass 4 frontend/sessions; Pass 10 HUD/pickups**
|
||||
|
||||
### Pending sections
|
||||
- Session flow rows (Pass 4)
|
||||
- Pass 11 synthesis rows
|
||||
|
||||
---
|
||||
|
||||
| System | Subsystem | Finding | Evidence type | Classification | Exact source | Exact symbol | Blueprint path | Graph | Node/event | Asset/config | Doc | Confidence | Remaining verification |
|
||||
|--------|-----------|---------|---------------|----------------|--------------|--------------|----------------|-------|------------|--------------|-----|------------|------------------------|
|
||||
| Frontend | GI | Empty; 0 refs; not GameInstanceClass | Observed Implementation | Present but Unconnected | DSL; refs; Config | GI_Dungeoneer | GI_Dungeoneer | EventGraph | — | DefaultEngine.ini | 11,02 | High | — |
|
||||
| Frontend | Startup | GameDefaultMap=MainMenu; EditorStartup=Test01 | Observed Implementation | Active | DefaultEngine.ini | GameDefaultMap | — | — | — | Config/DefaultEngine.ini | 11,02 | High | — |
|
||||
| Sessions | Host | CreateAdvancedSession → OpenLevel Dev_Island ?listen | Observed Implementation | Partial | read_graph_dsl | HostGame | PC_MainMenu | EventGraph | CreateAdvancedSession | — | 11 | High | PIE Steam/LAN |
|
||||
| Sessions | Find | FindSessionsAdvanced → WBP_GameSlot rows | Observed Implementation | Active but Unverified | DSL | RefreshButton | WBP_MainMenu | EventGraph | FindSessionsAdvanced | — | 11 | High | PIE |
|
||||
| Sessions | Join | JoinSession; no OnSuccess; no ClientTravel | Observed Implementation | Partial | DSL | JoinGame | PC_MainMenu | EventGraph | JoinSession | — | 11 | High | PIE travel |
|
||||
| Sessions | Config | No OnlineSubsystem/Steam keys in project Config | Observed Implementation | Missing | filesystem grep | — | — | — | — | Config/*.ini | 11,02 | High | Engine defaults |
|
||||
| Sessions | Example | ExampleAdvancedSessionsFunctionsChar 0 refs | Observed Implementation | Example Only | get_referencers | — | Examples/... | — | — | — | 11 | High | — |
|
||||
| Maps | GameMode | MainMenu→GM_MainMenu; Test01/Dev_Island/LEVEL_01→GM_Dungeoneer | Inferred (deps) | Active but Unverified | get_dependencies | — | maps | — | — | — | 11 | Medium | World Settings tags |
|
||||
| Spawn | Pawn | DefaultPawn=None; char-select SpawnActor+Possess | Observed Implementation | Connected | DSL | PlayerFirstSpawn | PC_Character / GM_Dungeoneer | EventGraph | GetSelectedClass | — | 11,08 | High | Remote client |
|
||||
| Select | Classes | Paladin/Wizard/Cleric/Amazonian; no Gunslinger | Observed Implementation | Partial | DSL | SelectedCharacterClass | WBP_CharacterSelect | EventGraph | OnClicked | — | 11,08 | High | — |
|
||||
| HUD | Overlay | CDO Overlay+Controller assigned; Health+Mana bars | Observed Implementation | Active but Unverified | ObjectTools; UMG; DSL | InitOverlay | WBP_PlayerHUD / WBP_Overlay | EventWidgetControllerSet | — | — | 11,06 | High | PIE |
|
||||
| HUD | Stamina UI | No stamina widget in Overlay | Observed Implementation | Present but Unconnected | GetWidgetDescription | — | WBP_Overlay | — | — | — | 11 | High | — |
|
||||
| HUD | Legacy | UpdatePlayerHUD bIsImplemented=false; not in C++ | Observed Implementation | Present but Unconnected | list_events; Source grep | UpdatePlayerHUD | PC_Character | — | — | BPI_PlayerController | 11,03 | High | PIE no-op |
|
||||
| Pickup | GE | Four EffectActors overlap→Apply→Destroy; no authority | Observed Implementation | Active but Unverified / Authority Risk | DSL | ApplyEffecttoTarget | BP_*Potion/Crystal/Slice | EventGraph | OnComponentBeginOverlap | GE_* | 12,06 | High | PIE |
|
||||
| Pickup | Enemy | GetASC nullptr; destroy still runs | Observed Implementation | Enemy-Incompatible Due to ASC Accessor | RIREffectActor; GetASC | ApplyEffectToTarget | — | — | — | — | 12,06,09 | High | PIE |
|
||||
| Pickup | Gold | Amount=25; AddGold unimplemented | Observed Implementation | Partial / Present but Unconnected | DSL; list_events | AddGold | BP_BasePickUp / PC_Character | GoldPickUp | — | — | 12 | High | PIE |
|
||||
| Currency | Other | No stamina/coin/score systems beyond gold call | Observed Implementation | Missing / negative | asset search | — | — | — | — | — | 12 | High | — |
|
||||
| Enemy | EventGraph | BeginPlay/Tick/Overlap present; bodies empty | Observed Implementation | Present but Unconnected | read_graph_dsl | EventTick | BP_Enemy_Skeleton | EventGraph | EventTick | — | 09 | High | — |
|
||||
| Enemy | Chase | No MoveTo/GetPlayer/target store | Observed Implementation | Implementation Missing | DSL + searches | — | BP_Enemy* | — | — | — | 09 | High | — |
|
||||
| Enemy | Attack | EnemyMeleeAttack unimplemented; montage 0 refs | Observed Implementation | Implementation Missing / Present but Unreferenced | interface; get_referencers | EnemyMeleeAttack | BPI_EnemyCharacter | — | — | Anim_SkeletonAttackMontage | 09,10 | High | — |
|
||||
| Enemy | Controller | Stock AIController; AutoPossessAI PlacedInWorld | Observed Implementation | Partially Implemented (possession only) | ObjectTools CDO+instance | aIControllerClass | BP_Enemy_Skeleton | — | — | /Script/AIModule.AIController | 09 | High | PIE possess |
|
||||
| Enemy | AI frameworks | No BT/BB/StateTree/EQS/Perception assets | Observed Implementation | Missing | find_assets; search_subclasses | — | — | — | — | — | 09 | High | — |
|
||||
| Enemy | Nav Test01 | No NavMeshBoundsVolume/RecastNavMesh | Observed Implementation | Missing (secondary) | find_actors | — | — | — | — | Test01 | 09 | High | — |
|
||||
| Enemy | Damage in | No ReceiveAnyDamage; no health mutation | Observed Implementation | Implementation Missing | list_events | ReceiveAnyDamage | BP_Enemy* | — | — | — | 09,05 | High | PIE hit |
|
||||
| Enemy | Death ABP | Death state + anims; SetIsDead(false) every Update | Observed Implementation | Connected but Incomplete | read_graph_dsl | SetIsDead | ABP_Skeleton | EventGraph | BlueprintUpdateAnimation | Anim_Monster_Dead_* | 09,10 | High | Transition pins |
|
||||
| Enemy | GetASC | Defect does not explain chase/attack | Observed Implementation | Existing Baseline Defect (separate) | RIRBaseCharacter.cpp | GetAbilitySystemComponent | — | — | — | — | 06,09 | High | — |
|
||||
| Enemy | Highlight | Native custom depth ITargetInterface | Observed Implementation | Active | RIRBaseEnemyCharacter.cpp | HighlightActor | — | — | — | — | 09 | High | — |
|
||||
| Continuity | Editor | PIE=false; Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | — |
|
||||
| Repo | Git | Clean at Batch 4C start | Observed Implementation | — | git status | — | — | — | — | — | 15 | High | — |
|
||||
| Continuity | Editor | PIE=false; Test01; sel Skeleton_C_1 | Observed Implementation | — | IsPIERunning; get_current_level | — | — | — | — | Test01 | 15 | High | — |
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
- **Scope:** Authoritative cross-model continuation document for Phase 1.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass / batch:** Batch 4C (Pass 9)
|
||||
- **Next authorized work:** Wait for user — recommend **Batch 4D** (Pass 4 sessions and/or Pass 10 pickups) as separately authorized
|
||||
- **Last completed pass / batch:** Batch 4D (Pass 4 + Pass 10)
|
||||
- **Next authorized work:** Wait for user — **Pass 11** (synthesis / executive summary / Ability Migration Matrix) only when explicitly authorized
|
||||
|
||||
## Phase completed
|
||||
|
||||
| Item | Value |
|
||||
|------|--------|
|
||||
| Phase | Phase 1 — Static Architecture (in progress) |
|
||||
| Batch completed | Batch 4C — Enemy AI static analysis |
|
||||
| Passes completed | Pass 9 |
|
||||
| Phase | Phase 1 — Static Architecture (in progress; static archaeology complete pending Pass 11) |
|
||||
| Batch completed | Batch 4D — Frontend/sessions + UI/HUD/pickups |
|
||||
| Passes completed | Pass 4, Pass 10 |
|
||||
| Date completed | 2026-07-16 |
|
||||
| Model identifier | Cursor Grok 4.5 |
|
||||
|
||||
@@ -22,46 +22,54 @@
|
||||
|
||||
## Repository integrity
|
||||
|
||||
### Starting state (Batch 4C)
|
||||
### Starting state (Batch 4D)
|
||||
|
||||
- **Git:** Clean (`git status --short` empty; diffs empty).
|
||||
- **Baseline includes:** `e50c8032` Batch 4B Pass 7 GAS archaeology.
|
||||
- **Git:** Clean (`git status --short` empty; `git diff` / `git diff --cached` empty).
|
||||
- **Authorization gate:** Batch 4C committed; Migration-Notes resolved; working tree empty before investigation.
|
||||
- **Editor:** `IsPIERunning=false`; level `/Game/_Main/Levels/Testing/Test01`; selected actor `BP_Enemy_Skeleton_C_1`.
|
||||
|
||||
### Ending state (Batch 4C close)
|
||||
### Ending state (Batch 4D close)
|
||||
|
||||
- Modified files: Markdown under `Documentation/Archaeology/` (listed below).
|
||||
- **Unexpected working-tree changes (not caused by Pass 9; not reverted):**
|
||||
- Deleted: `Migration-Notes/UE54-Baseline.md`
|
||||
- Untracked: `Documentation/Migration-Notes/`
|
||||
- No Unreal assets, source, config, plugins, or maps modified by this batch.
|
||||
- PIE not started; level and selection unchanged.
|
||||
- Ending Git: Archaeology Markdown dirty **plus** the unexpected Migration-Notes paths above.
|
||||
- Modified files: Markdown under `Documentation/Archaeology/` only (listed below).
|
||||
- Temporary scratch files `_tmp_pass4.txt` / `_tmp_pass10.txt` deleted if present.
|
||||
- No Unreal assets, source, config, plugins, or maps modified.
|
||||
- PIE not started; level and selection unchanged at closeout check.
|
||||
- Ending Git: Archaeology Markdown dirty only (expected before user commit request).
|
||||
|
||||
---
|
||||
|
||||
## Areas fully inspected (Batch 4C)
|
||||
## Areas fully inspected (Batch 4D)
|
||||
|
||||
- `ARIRBaseEnemyCharacter` / `ARIRBaseCharacter` GetASC / `ITargetInterface`
|
||||
- `BP_EnemyCharacterBase` + `BP_Enemy_Skeleton` EventGraphs, GetEnemyREF, CDO control
|
||||
- `BPI_EnemyCharacter` (GetEnemyREF / AddPlayerTarget / EnemyMeleeAttack)
|
||||
- Placed `BP_Enemy_Skeleton_C_1` controller/possession props
|
||||
- Project-wide BT/BB/StateTree/EQS/AIPerception/AIController subclass searches
|
||||
- Test01 NavMeshBoundsVolume / RecastNavMesh absence
|
||||
- `ABP_Skeleton` EventGraph + deps; `Anim_SkeletonAttackMontage` referencers
|
||||
### Pass 4
|
||||
- `GI_Dungeoneer`, `GM_MainMenu`, `GM_Dungeoneer`, `PC_MainMenu`, `PC_Character`
|
||||
- `WBP_MainMenu`, `WBP_GameSlot`, `WBP_CharacterSelect`, `BP_MainMenuPawn`
|
||||
- Session create/find/join completion/failure pins
|
||||
- Maps MainMenu, Test01, Dev_Island, LEVEL_01 (GameMode via deps)
|
||||
- `Config/*.ini` OnlineSubsystem / Steam / GameInstanceClass grep (negative)
|
||||
- Example AdvancedSessions BP referencers
|
||||
|
||||
### Pass 10
|
||||
- `WBP_PlayerHUD` CDO Overlay classes; `WBP_Overlay` tree + bar bindings
|
||||
- `BP_OverlayWidgetController` (empty BP; native parent)
|
||||
- `BPI_PlayerController` UpdatePlayerHUD / AddGold implementation status
|
||||
- Four `RIREffectActor` pickups EventGraphs + CDO GE / replicate
|
||||
- `BP_BasePickUp` / `BP_SmallGoldPickUp` gold + DEPRECATED health/mana paths
|
||||
- UI inventory (pause missing; W_HUD_OLD unreferenced creator)
|
||||
- Test01 placed pickup counts
|
||||
|
||||
## Areas partially inspected
|
||||
|
||||
- `BP_Enemy_Skeleton_C_0` (presence only)
|
||||
- ABP Death transition pin details (AnimGraph DSL empty)
|
||||
- CharacterMovement orient flags (partially unreadable)
|
||||
- JoinSession internal travel (no explicit success pin)
|
||||
- Remote-client character-select (server-only CreateWidget)
|
||||
- Sphere collision profile / GenerateOverlapEvents (tool limit)
|
||||
- LEVEL_01 menu reachability (no OpenLevel referencer found)
|
||||
- WBP_BannerMessage / GameStats widgets (existence only)
|
||||
|
||||
## Areas not yet inspected
|
||||
|
||||
- Pass 4 frontend/sessions
|
||||
- Pass 10 full pickup deep dive
|
||||
- Pass 11 migration matrix
|
||||
- PIE / runtime
|
||||
- **Pass 11** synthesis / `01-ExecutiveSummary` / `07-AbilityMigrationMatrix`
|
||||
- PIE / standalone / multiplayer runtime
|
||||
- Full CommonUI content usage
|
||||
|
||||
---
|
||||
|
||||
@@ -69,43 +77,45 @@
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md | Draft (Pass 9 rewrite) |
|
||||
| Documentation/Archaeology/03-ClassHierarchy.md | Draft |
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft (enemy ApplyDamage note) |
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/10-AnimationDependencies.md | Draft |
|
||||
| Documentation/Archaeology/02-ProjectArchitecture.md | Draft (Pass 4 maps/config) |
|
||||
| Documentation/Archaeology/03-ClassHierarchy.md | Draft (PC/GI/BPI holes) |
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft (Overlay + EffectActor Pass 10) |
|
||||
| Documentation/Archaeology/08-CharacterSystems.md | Draft (char-select spawn) |
|
||||
| Documentation/Archaeology/11-UI-HUD-And-Sessions.md | Draft (Pass 4+10 rewrite) |
|
||||
| Documentation/Archaeology/12-Pickups-And-Effects.md | Draft (Pass 10 rewrite) |
|
||||
| Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md | Draft |
|
||||
| Documentation/Archaeology/14-EvidenceIndex.md | Draft |
|
||||
| Documentation/Archaeology/15-HandoffStatus.md | Draft |
|
||||
|
||||
**12 not modified** (no new EffectActor evidence beyond Pass 7).
|
||||
**07 not created.**
|
||||
**09 not reopened** (pickup enemy ASC note only via 12/06).
|
||||
**05 / 10 Animation** not modified.
|
||||
**07 not created.** **01-ExecutiveSummary not created.**
|
||||
|
||||
## Key Pass 9 outcomes
|
||||
## Key Batch 4D outcomes
|
||||
|
||||
1. **Chase primary classification: Implementation Missing** (empty Tick/Overlap; no MoveTo; no target acquisition).
|
||||
2. **Attack primary classification: Implementation Missing** (EnemyMeleeAttack unimplemented; orphan montage).
|
||||
3. **Stock AIController + PlacedInWorld** — possession may occur; no behavior.
|
||||
4. **No BT/BB/Perception/navmesh** in project / Test01.
|
||||
5. **GetASC defect is separate** — does not cause chase/attack failure.
|
||||
6. **ABP SetIsDead(false)** every Update — death path incomplete.
|
||||
7. **Player ApplyDamage has no enemy health/death consumer** statically.
|
||||
1. **Sessions live in menu PC/widgets**, not GameInstance; AdvancedSessions nodes connected; OnlineSubsystem project INI **Missing**.
|
||||
2. **GI_Dungeoneer Present but Unconnected.**
|
||||
3. **Pawn spawn:** DefaultPawn=None → character-select → SpawnActor+Possess (Gunslinger not in UI; char-select server-only create).
|
||||
4. **ASC Overlay** Health/Mana connected statically; **no stamina widget**; Overlay class CDOs assigned.
|
||||
5. **Legacy UpdatePlayerHUD and AddGold unimplemented** on `PC_Character` (not native either).
|
||||
6. **Four GE pickups** Active static path with **Authority Risk**; gold Partial (AddGold hole); no other currency.
|
||||
7. **Do not claim sessions or pickups work** without runtime testing.
|
||||
|
||||
## Suggested next bounded task
|
||||
|
||||
**Authorize Batch 4D explicitly**, e.g.:
|
||||
**Authorize Pass 11 explicitly** (Phase 1 synthesis only), e.g.:
|
||||
|
||||
1. Pass 4 — Frontend / sessions
|
||||
2. Pass 10 — Pickup deep dive
|
||||
1. Create `01-ExecutiveSummary.md` / update synthesis docs
|
||||
2. Create `07-AbilityMigrationMatrix.md`
|
||||
3. No PIE unless separately authorized
|
||||
|
||||
**Do not begin** Pass 11 or PIE until authorized.
|
||||
**Do not begin Pass 11 without explicit user authorization.**
|
||||
|
||||
**Starting files:** `00`, `09`, `11`, `12`, `13`, `14`, `15`.
|
||||
---
|
||||
|
||||
## Confirmation
|
||||
## Continuity checklist for next model
|
||||
|
||||
- No Unreal assets modified
|
||||
- No source/config/map/plugin modified
|
||||
- No editor state intentionally modified
|
||||
- No work beyond Pass 9 performed
|
||||
- Waiting for explicit authorization before Batch 4D
|
||||
1. Read docs 00, 00A, 02–06, 08–15 (and 11–12 as primary Batch 4D deliverables).
|
||||
2. Confirm git status before any work; only Archaeology Markdown may change unless user expands authorization.
|
||||
3. Confirm PIE stopped; level Test01 unless user changed it.
|
||||
4. Pass 11 = synthesis only — no Unreal mutation, no PIE unless authorized.
|
||||
|
||||
Reference in New Issue
Block a user