Files
realms-in-ruin-dev/Documentation/Phase2/00-Phase2A-RuntimeBaseline.md
T
tedwardsandCursor 9919faab4a Document Phase 2A1 runtime baseline evidence and open decisions.
Capture bounded PIE observations for ASC/legacy divergence, HUD, and blocked ability/multiplayer paths without implementing fixes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 06:22:50 -07:00

213 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 2A1 — Runtime Baseline
| Field | Value |
|---|---|
| Status | Draft |
| Date | 2026-07-17 |
| Engine | Unreal Engine 5.8 |
| Git commit | `aa0058a0` |
| Map | `/Game/_Main/Levels/Testing/Test01` |
| Primary PIE mode | `PlayMode_InEditorFloating` (required for Slate UMG drive) |
| Authorization | Phase 2A1 evidence-only; no asset/config/source mutation; no commit |
## Continuity gate
| Check | Result |
|---|---|
| `git rev-parse --short HEAD` | `aa0058a0` |
| `git status --short` | empty |
| `git diff --name-only` | empty |
| `git diff --cached --name-only` | empty |
| `IsPIERunning` (start) | false |
| Current level | `/Game/_Main/Levels/Testing/Test01` |
| Selection | empty (Pass 11 continuity; not restored) |
| Test01 dirty | false |
## Entry path
PIE on loaded `Test01``WBP_CharacterSelect` → character button → Start.
- In-viewport PIE: Slate cannot see UMG character-select buttons.
- Floating PIE: Slate sees PALADIN / WIZARD / CLERIC / AMAZON / Start.
- Start click produces Blueprint runtime warning on `GM_Dungeoneer.PlayerFirstSpawn` (`Accessed None` on `K2Node_Event_PlayerController`) but pawn still spawns and is possessed.
---
## 1. Test execution summary
| Test ID | Mode | Character | Players | Result | Confidence | Blocking issue |
|---|---|---|---|---|---|---|
| RT-001 | 1P Floating PIE | Amazonian | 1 | Observed Runtime Behavior | High | None |
| RT-002 | 1P Floating PIE | Paladin | 1 | Partial — init divergence observed; ability cost path not exercised | High (init) / Tool Limitation (activation) | Enhanced Input not injectable via Slate `PressKey` |
| RT-003 | 1P Floating PIE | Paladin (session) | 1 | Blocked by Test Environment / Tool Limitation | High | No movement/ability input injection; cannot reach pickups without moving actors |
| RT-004A | 1P Floating PIE | Amazonian | 1 | Tool Limitation | High | Enhanced Input activation unreachable via available tools |
| RT-004B | — | Amazonian | — | Blocked by Test Environment | High | No non-mutating interrupt action available without ability input |
| RT-005 | 1P Floating PIE | Paladin | 1 | Tool Limitation | High | Same Enhanced Input limitation |
| RT-006 | 1P Floating PIE | Prefer Amazonian | 1 | Blocked by Missing Implementation / Test Environment | High | Enemy attack Missing; no connected player-damage source without ability input |
| RT-007 | 2P listen PIE | — | — | Blocked by Test Environment / Tool Limitation | High | `playNumberOfClients=1`; `StartPIE` has no player-count; config save unauthorized |
| RT-008 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 |
| RT-009 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 |
| RT-010 | 2P | — | — | Blocked by Test Environment / Tool Limitation | High | Depends on RT-007 |
| RT-011 | 1P Floating PIE | Paladin session / enemy actors | 1 | Observed Runtime Behavior (boundary) | MediumHigh | Ability damage path not exercised (input limitation) |
---
## 2. Initialization matrix
| Role/character | ASC H/MaxH | ASC M/MaxM | ASC S/MaxS | Legacy health | Legacy mana | Legacy stamina | Active GEs | Granted GAs |
|---|---|---|---|---|---|---|---|---|
| Authority / Amazonian (RT-001) | 75 / 100 | 25 / 50 | 0 / 0 | DEPRECATED_CurrentHealth=0 / MaxHealth=0 | CurrentMana=0 / MaxMana=0 | CurrentStamina=85 / MaxStamina=100 | none | none |
| Authority / Paladin (RT-002 init) | 75 / 100 | 25 / 50 | 0 / 0 | CurrentHealth=0 / MaxHealth=0 | CurrentMana=100 / MaxMana=100 | CurrentStamina=0 / MaxStamina=0 | none | none |
| Remote client | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable |
### RT-001 detail (Amazonian)
| Field | Actual |
|---|---|
| ASC Owner actor | `BP_PlayerState_C_0` (ASC component on PlayerState) |
| ASC Avatar | Player pawn resolves same ASC via character GetASC path (inspector accepts pawn) |
| Active Gameplay Effects | `[]` |
| Granted Gameplay Abilities | `[]` |
| IsDead | false |
| CurrentlyAttacking | false |
| Net role | ROLE_Authority |
| HUD actor | `WBP_PlayerHUD_C_0` present |
| Overlay classes on HUD | `WBP_Overlay`, `BP_OverlayWidgetController` assigned |
| Overlay instances (Slate) | Two progress bars visible after spawn; no stamina widget text/bar observed |
| Legacy HUD receiver | Not observed to display values (no visible numeric legacy HUD) |
| Expected static ASC | Health=75, MaxHealth=100, Mana=25, MaxMana=50, Stamina possibly zero — **Confirmed** |
| Expected legacy sync | Potentially differ — **Confirmed diverge**; Amazonian legacy health/mana are **0** |
### CDO defaults (read-only; explains runtime zeros)
| Class | CurrentHealth | MaxHealth | CurrentMana | MaxMana | CurrentStamina | MaxStamina |
|---|---|---|---|---|---|---|
| `BP_PlayerCharacterBase` CDO | 0 | 0 | 0 | 0 | 0 | 0 |
| `Player_Amazonian` CDO | 0 | 0 | 0 | 0 | 85 | 100 |
| `Player_Paladin` CDO | 0 | 0 | 100 | 100 | 0 | 0 |
| Paladin Ability004ManaCost CDO | — | — | cost **0** | — | — | — |
---
## 3. HUD matrix
| Role/character | Overlay instances | Health display | Mana display | Stamina display | Legacy HUD behavior | Respawn behavior |
|---|---|---|---|---|---|---|
| Amazonian SP | 2 progress bars observed in floating PIE | Present (ASC Overlay path) | Present (ASC Overlay path) | None observed | No visible legacy numeric HUD; `UpdatePlayerHUD` not validated by value change | Not observed (RT-006 blocked) |
| Paladin SP | 2 progress bars observed | Present | Present | None observed | Same | Not observed |
| Remote client | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable |
---
## 4. Ability execution matrix
| Test | Input role | Server RPC | Multicast | Notify execution roles | Gameplay execution role | Cost role | Cleanup result |
|---|---|---|---|---|---|---|---|
| RT-002 Paladin 004 | Attempted Slate `PressKey` Four + LMB; CurrentlyAttacking remained false | Not observed | Not observed | Not observed | Not observed | Not observed (CDO cost=0 anyway) | Not applicable |
| RT-004 Amazonian 001 | Tool Limitation — Enhanced Input not driven by Slate | Not observed | Not observed | Not observed | Not observed | Not applicable (no mana cost) | Not observed |
| RT-005 Paladin 001 | Tool Limitation | Not observed | Not observed | Not observed | Not observed | Not observed | Not observed |
| RT-008 remote | Blocked (no 2P) | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable | Not applicable |
**Input tooling note:** `IA_Ability_001` = LeftMouseButton; `IA_Ability_004` = Four. Slate `PressKey` returns true but does not change `CurrentlyAttacking` or resources. OS-level input injection was blocked by environment policy. Classified **Tool Limitation**.
---
## 5. Damage/death matrix
| Source | Target | Damage receiver | Health source changed | Death trigger | Replication | Respawn | Result |
|---|---|---|---|---|---|---|---|
| Enemy attack | Player | Not applicable | Not observed | Not observed | Not observed | Not observed | Blocked by Missing Implementation (enemy attack Missing per Phase 1) |
| Player ability ApplyDamage | Enemy / other player | Not observed | Not observed | Not observed | Not observed | Not observed | Tool Limitation (ability input) + RT-009 blocked (no 2P) |
| Debug / temporary damage actor | — | — | — | — | — | — | Not authorized |
---
## 6. Pickup matrix
| Pickup | Present in Test01 | Overlap role | GE applications | Server destruction | Client destruction | ASC change | Legacy change | Result |
|---|---|---|---|---|---|---|---|---|
| BP_HealthPotion | Yes (1) | Not observed | Not observed | Not observed | Not applicable (1P) | Not observed | Not observed | Blocked — cannot walk to overlap without input / cannot move actors |
| BP_ManaPotion | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) |
| BP_ManaCrystal | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) |
| BP_OrangeSlice | Yes (1) | Not observed | Not observed | Not observed | Not applicable | Not observed | Not observed | Blocked (same) |
| BP_SmallGoldPickUp | Yes (3) | Not observed | Not applicable (AddGold no-op) | Not observed | Not applicable | Not applicable | Not applicable | Blocked (same) |
| Runtime `bReplicates` (HealthPotion) | — | — | — | — | — | — | — | **false** (Observed Runtime Behavior; confirms Phase 1) |
---
## 7. Static-versus-runtime reconciliation
| Phase 1 finding | Runtime result | Confirmed | Refined | Contradicted | New limitation |
|---|---|---|---|---|---|
| ASC Health 75 / Max 100 / Mana 25 / Max 50 | Amazonian + Paladin match | Yes | — | — | — |
| Stamina ASC may be zero | ASC Stamina/MaxStamina = 0/0 | Yes | — | — | — |
| No granted project GAs / no default GE | Empty granted + active effects | Yes | — | — | — |
| Legacy and ASC not synchronized | Amazonian legacy H/M=0 vs ASC 75/25; Paladin legacy Mana 100 vs ASC 25 | Yes | Amazonian combat legacy health starts at **0** (CDO) | — | Death/combat using legacy health is immediately at death threshold risk |
| Overlay Health/Mana present; no stamina widget | Two progress bars; no stamina UI | Yes | — | — | — |
| Pickup `bReplicates=false` | HealthPotion runtime false | Yes | — | — | — |
| Enemy ASC on character | Component present (`AbilitySystemComponent`, `AttributeSet`) | Yes | AbilitySystemInspector cannot query attributes (`does not have an AbilitySystemComponent`) — likely InitAbilityActorInfo / interface exposure gap | — | Inspector Tool Limitation vs true missing ASC |
| Enemy chase/attack Missing | No outbound enemy damage available for RT-006 | Yes | — | — | — |
| AnimNotify-driven gameplay authority | Not exercised | — | — | — | Enhanced Input injection Tool Limitation |
| Char-select server spawn path | Floating PIE Start → spawn + possess works | Yes | GM `PlayerFirstSpawn` emits Accessed None warning | — | — |
| 2-client PIE via editor | `playNumberOfClients=1`, Standalone | — | — | — | Cannot raise clients without unauthorized config save |
---
## Per-test records (abbrev)
### RT-001 — Single-player initialization (Amazonian)
- **Date:** 2026-07-17
- **PIE mode:** Floating, 1 player, Standalone
- **Actions:** StartPIE → AMAZON → Start
- **Pass/fail:** Observed Runtime Behavior (matches ASC expected; legacy divergence stronger than “may differ”)
- **Cleanup:** StopPIE
### RT-002 — Legacy vs ASC divergence (Paladin)
- **Actions:** Restart PIE → PALADIN → Start; record resources; attempt Ability 004 via Slate key
- **Actual:** Init divergence confirmed (ASC Mana 25 vs legacy Mana 100). Ability activation not achieved. Paladin Ability004ManaCost CDO = 0.
- **Classification:** Observed Runtime Behavior (init) + Tool Limitation (cost mutation path)
- **Cleanup:** session continued then StopPIE
### RT-003 — Consumables
- **Classification:** Blocked by Test Environment / Tool Limitation
- **Note:** All four GE pickups + three gold pickups exist in map; overlap not reachable without movement input or unauthorized actor moves.
### RT-004 / RT-005 — Ability chains
- **Classification:** Tool Limitation (Enhanced Input)
### RT-006 — Damage/death/respawn
- **Classification:** Blocked by Missing Implementation (enemy attack) and Tool Limitation (player ability damage)
### RT-007RT-010 — Two-player
- **Read:** `playNumberOfClients=1`, `playNetMode=PIE_Standalone`
- **Attempt:** Non-persisting UI set not achieved via available Slate surface during session
- **Classification:** Blocked by Test Environment / Tool Limitation
- **Open environment decision:** how to enable 2-client PIE without config persistence (see `02-Phase2A-OpenDecisions.md`)
### RT-011 — Enemy boundary
- **Observed:** Enemy actors present; ASC + AttributeSet components present; `bCanBeDamaged=true`; AbilitySystemInspector attribute query fails; no player→enemy damage exercised
- **Classification:** Observed Runtime Behavior (component presence / inspector failure) + incomplete damage-path validation
---
## Tool limitations (session)
1. In-viewport PIE: Slate cannot drive `WBP_CharacterSelect`.
2. Floating PIE required for UMG button clicks.
3. Slate `PressKey` / `Click` on viewport does not trigger Enhanced Input actions.
4. OS-level input injection blocked by environment policy.
5. `StartPIE` has no `NumberOfPlayers`; raising clients requires Play settings mutation that saves (unauthorized).
6. Enemy ASC component exists but AbilitySystemInspector rejects actor as having no ASC.
7. Enemy `IsDead` property not readable via ObjectTools on runtime instance (name/exposure).
## Mutation confirmation
No Unreal assets, source, configuration, maps, plugins, or persistent editor settings were modified. Only new Markdown under `Documentation/Phase2/` is intended to change.