Compare commits
3
Commits
e028e16f70
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e9f9bebdc | ||
|
|
1aa4e0126b | ||
|
|
ee65271212 |
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<h1 align="center">
|
||||
<img src="http://realmsinruin.net/wp-content/uploads/2025/04/ror-title-dev.png">
|
||||
<img src="REALMSINRUIN_TITLE_DEV.png">
|
||||
</h1>
|
||||
|
||||
<div align="center">
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Reference in New Issue
Block a user