From ee6527121224f43d38216a3fbe72a5d632bc688c Mon Sep 17 00:00:00 2001 From: Trevor Date: Thu, 16 Jul 2026 23:17:56 -0700 Subject: [PATCH] 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 --- .gitattributes | 2 + .../Archaeology/02-ProjectArchitecture.md | 41 ++- .../Archaeology/03-ClassHierarchy.md | 29 ++- .../Archaeology/06-PartialGASArchitecture.md | 29 ++- .../Archaeology/08-CharacterSystems.md | 8 +- .../Archaeology/11-UI-HUD-And-Sessions.md | 234 +++++++++++++----- .../Archaeology/12-Pickups-And-Effects.md | 148 +++++++++-- .../13-Unknowns-And-RuntimeQuestions.md | 64 ++--- Documentation/Archaeology/14-EvidenceIndex.md | 35 ++- Documentation/Archaeology/15-HandoffStatus.md | 124 +++++----- README.md | 2 +- 11 files changed, 501 insertions(+), 215 deletions(-) diff --git a/.gitattributes b/.gitattributes index 98e96d3a..993ce524 100644 --- a/.gitattributes +++ b/.gitattributes @@ -21,6 +21,8 @@ *.gif filter=lfs diff=lfs merge=lfs -text *.obj filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text +# README hero image: normal Git blob (not LFS) so Gitea can render it inline +REALMSINRUIN_TITLE_DEV.png filter= diff= merge= -text *.jpg filter=lfs diff=lfs merge=lfs -text *.jpeg filter=lfs diff=lfs merge=lfs -text *.hdr filter=lfs diff=lfs merge=lfs -text diff --git a/Documentation/Archaeology/02-ProjectArchitecture.md b/Documentation/Archaeology/02-ProjectArchitecture.md index d30db3b9..11d58807 100644 --- a/Documentation/Archaeology/02-ProjectArchitecture.md +++ b/Documentation/Archaeology/02-ProjectArchitecture.md @@ -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) diff --git a/Documentation/Archaeology/03-ClassHierarchy.md b/Documentation/Archaeology/03-ClassHierarchy.md index 2478d41d..d1fd5457 100644 --- a/Documentation/Archaeology/03-ClassHierarchy.md +++ b/Documentation/Archaeology/03-ClassHierarchy.md @@ -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 | diff --git a/Documentation/Archaeology/06-PartialGASArchitecture.md b/Documentation/Archaeology/06-PartialGASArchitecture.md index 0d8c79b0..dcdad8c2 100644 --- a/Documentation/Archaeology/06-PartialGASArchitecture.md +++ b/Documentation/Archaeology/06-PartialGASArchitecture.md @@ -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. --- diff --git a/Documentation/Archaeology/08-CharacterSystems.md b/Documentation/Archaeology/08-CharacterSystems.md index 6a608cdc..d4be9064 100644 --- a/Documentation/Archaeology/08-CharacterSystems.md +++ b/Documentation/Archaeology/08-CharacterSystems.md @@ -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 diff --git a/Documentation/Archaeology/11-UI-HUD-And-Sessions.md b/Documentation/Archaeology/11-UI-HUD-And-Sessions.md index 48c8ad9e..854b8e76 100644 --- a/Documentation/Archaeology/11-UI-HUD-And-Sessions.md +++ b/Documentation/Archaeology/11-UI-HUD-And-Sessions.md @@ -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 | diff --git a/Documentation/Archaeology/12-Pickups-And-Effects.md b/Documentation/Archaeology/12-Pickups-And-Effects.md index ab07edac..26b9fb92 100644 --- a/Documentation/Archaeology/12-Pickups-And-Effects.md +++ b/Documentation/Archaeology/12-Pickups-And-Effects.md @@ -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. diff --git a/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md b/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md index 644696be..c8989784 100644 --- a/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md +++ b/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md @@ -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 diff --git a/Documentation/Archaeology/14-EvidenceIndex.md b/Documentation/Archaeology/14-EvidenceIndex.md index ff44501c..abf27a26 100644 --- a/Documentation/Archaeology/14-EvidenceIndex.md +++ b/Documentation/Archaeology/14-EvidenceIndex.md @@ -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 | — | diff --git a/Documentation/Archaeology/15-HandoffStatus.md b/Documentation/Archaeology/15-HandoffStatus.md index a598abe0..b3f846af 100644 --- a/Documentation/Archaeology/15-HandoffStatus.md +++ b/Documentation/Archaeology/15-HandoffStatus.md @@ -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. diff --git a/README.md b/README.md index 9f5cdaa9..367039d4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +