Document Batch 4A Pass 8 animation archaeology: AnimNotify callbacks and ability cleanup wiring.
Resolves UseAbility* callers via shared AN_Ability notifies, qualifies Pass 6 ability statuses, and records AnimBP/Montage dependencies without modifying Unreal assets. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,14 +2,14 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Shared `BP_PlayerCharacterBase` ability architecture (Batch 2) plus per-character Ability 001–004 connected-path reconstruction (Batch 3 Pass 6).
|
||||
- **Inspection method:** Read-only BlueprintTools `find_nodes` / `get_node_infos` / `get_connected_subgraph` / `read_graph_dsl`; AssetTools deps; ObjectTools CDO samples.
|
||||
- **Scope:** Shared `BP_PlayerCharacterBase` ability architecture (Batch 2) plus per-character Ability 001–004 connected-path reconstruction (Batch 3 Pass 6), qualified by animation-notify wiring (Batch 4A Pass 8).
|
||||
- **Inspection method:** BlueprintTools connected subgraphs (Pass 6); AnimNotify `Received_Notify` DSL + montage dependency/referencer graphs (Pass 8).
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** CustomEvent Reliable/Unreliable flags not exposed; comment-box regions not found via `find_nodes(title=Comment)`; Montage notify tracks not deep-inspected (Pass 8).
|
||||
- **Tool or visibility limitations:** CustomEvent Reliable flags not exposed; Montage Notifies array / trigger times unreadable via ObjectTools; AnimGraph DSL empty.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 (GAS systemwide) / Pass 8 (AnimBP/Montage notifies)
|
||||
- **Last completed pass:** Pass 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Pass 7 (GAS) when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -18,20 +18,21 @@
|
||||
- Base Server_Ability_* stubs
|
||||
- Multicast FX helpers
|
||||
- Death / respawn / HUD (DEPRECATED floats)
|
||||
- **Per-character Ability 001–004 connected paths for all five playables**
|
||||
- Per-character Ability 001–004 connected paths for all five playables
|
||||
- Parent-call inventory
|
||||
- Resource / damage / projectile inventories
|
||||
- Montage dependency seeds
|
||||
- **Pass 8:** UseAbility* callers resolved (`AN_Ability_001–004`); `AN_AttackComplete` cleanup; Pass 6 reclassification table in `10`
|
||||
|
||||
### Pending sections
|
||||
- Cross-character migration matrix (Pass 11 → doc 07)
|
||||
- Montage notify → UseAbility exact wiring (Pass 8)
|
||||
- Runtime verification of CDO damage/mana values (PIE)
|
||||
- Interrupt cleanup if `AN_AttackComplete` skipped
|
||||
|
||||
### Evidence still required
|
||||
- Who fires UseAbility* (anim notifies vs other) — Requires Manual Editor Inspection / Pass 8
|
||||
- FCanUseMana implementation body (function on base — not re-walked this batch beyond call sites)
|
||||
- Client_Charge timeline details beyond ChargeTimeline / LineTrace / SetActorLocation
|
||||
- Notify trigger times (Manual Editor Inspection)
|
||||
- FCanUseMana implementation body (call sites only)
|
||||
- Client_Charge timeline numeric details
|
||||
|
||||
---
|
||||
|
||||
@@ -44,12 +45,17 @@ flowchart TD
|
||||
SBegin -->|base| Print[PrintString Override]
|
||||
SBegin -->|child override| Child[Character body]
|
||||
Child --> MC[Multicast_PlayMontage]
|
||||
Child --> Use[UseAbilityN Authority]
|
||||
MC --> AN[AN_Ability_00N notify]
|
||||
AN --> Use[UseAbilityN Authority]
|
||||
Use --> Dmg[ApplyDamage or RecoverHealth]
|
||||
MC --> ANC[AN_AttackComplete]
|
||||
ANC --> Clear[SetIsAttacking clears CurrentlyAttacking]
|
||||
```
|
||||
|
||||
**Observed Implementation:** No `UGameplayAbility` activation. Reliability: **Unknown — MCP property visibility limitation**.
|
||||
|
||||
**Pass 8:** `UseAbility*` is invoked from AnimNotify Blueprints (`AN_Ability_001–004`), not from AnimBP EventGraphs. `Multicast_PlayMontage` completion pins are unwired — cleanup for notify-driven attacks uses `AN_AttackComplete` → `SetIsAttacking`. Full animation tables: `10-AnimationDependencies.md`.
|
||||
|
||||
| Base event | Body |
|
||||
|---|---|
|
||||
| Server_Ability_*_Begin | PrintString `"Override Ability N"` |
|
||||
@@ -76,10 +82,10 @@ flowchart TD
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate !attacking && !dead → CurrentlyAttacking → SetPlayerCanMove(true) → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate only | None | UseAbility001 Authority: BoxOverlap(90,50,100) forward×150 → ApplyDamage(DEPRECATED_Ability001Damage) | Attack_A/B/C/D_Fast_Montage | Server_Ability_001_End not implemented locally | **Implemented** (End Partial) | get_connected_subgraph |
|
||||
| Ability 002 | Server_Ability_002_Begin; Server_Ability_002_End | No | Begin: gate → CurrentlyAttacking → CanMove false → IsBlocking true | None in Begin | Gate | None | Block state only (no ApplyDamage in Begin) | None in Begin (IsBlocking likely AnimBP) | End: CurrentlyAttacking=false → CanMove true → IsBlocking false | **Partial** (block state; no hit absorb path traced) | subgraph Event_5 / Event_7 |
|
||||
| Ability 003 | Server_Ability_003_Begin; Charge; Client_Charge; ChargeBox overlap | No | Gate → FCanUseMana(DEPRECATED_Ability003ManaCost) → CurrentlyAttacking → CanMove false → ChargeBox QueryOnly → Charge + Client_Charge | Client_Charge | Gate + mana | DEPRECATED_Ability003ManaCost via FCanUseMana | ChargeBox Authority: NOT tag Player → ApplyDamage(DEPRECATED_Ability003Damage) | ChargeTimeline + LineTrace + SetActorLocation lerp | Ends not locally implemented for 003 | **Implemented** (charge + overlap damage) | subgraph Event_6 / Charge / ChargeBox |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana(DEPRECATED_Ability004ManaCost) → CurrentlyAttacking → CanMove false → Multicast_PlayMontage(Paladin_Ability004_Montage) | Multicast_PlayMontage; UseAbility004: Multi_SpawnParticle (EmitterTemplate empty) + Multicast_PlaySFX(MagicSpell_01_Cue) | Gate + mana | DEPRECATED_Ability004ManaCost | UseAbility004 Authority: SphereOverlap radius 300 → ApplyDamage(DEPRECATED_Ability004Damage) | Paladin_Ability004_Montage | End not local | **Implemented** (FX particle template empty) | subgraph Event_8 / Event_11 |
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate !attacking && !dead → CurrentlyAttacking → SetPlayerCanMove(true) → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate only | None | UseAbility001 Authority BoxOverlap ApplyDamage — **caller: AN_Ability_001** | Attack_A/B/C/D_Fast_Montage | **AN_AttackComplete** → SetIsAttacking (no local End) | **Implemented** (Pass 8 qualified) | Pass 6 + Pass 8 |
|
||||
| Ability 002 | Server_Ability_002_Begin; Server_Ability_002_End | No | Begin: gate → CurrentlyAttacking → CanMove false → IsBlocking true | ABP Block (no Montage) | Gate | None | Block state only | ABP_Paladin Block via IsBlocking | End clears attacking/CanMove/IsBlocking | **Partial** | Pass 6 + Pass 8 |
|
||||
| Ability 003 | Server_Ability_003_Begin; Charge; Client_Charge; ChargeBox overlap | No | Gate → FCanUseMana → Charge + Client_Charge | Client_Charge | Gate + mana | DEPRECATED_Ability003ManaCost | ChargeBox Authority ApplyDamage | ChargeTimeline (not Montage) | Not notify-driven | **Implemented** | Pass 6 |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana → Multicast_PlayMontage(Paladin_Ability004_Montage) | Multicast_PlayMontage | Gate + mana | DEPRECATED_Ability004ManaCost | UseAbility004 Authority AoE — **caller: AN_Ability_004**; empty particle | Paladin_Ability004_Montage | **AN_AttackComplete** cleanup | **Implemented** (Pass 8 qualified; FX hole) | Pass 6 + Pass 8 |
|
||||
| Basic attack | Same as Ability 001 | No | Same | Same | Same | Same | Same | Attack_* montages | Same | **Implemented** (=001) | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death | Inherited PlayerDeath | — | Base | Base | — | DEPRECATED health (if damaged via AnyDamage — Paladin has no local AnyDamage) | Base | Base | Base | **Inherited** | list_events |
|
||||
@@ -97,7 +103,7 @@ flowchart TD
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate → CurrentlyAttacking → CanMove true → Multicast_PlayMontage(random Ability001Montage) | Multicast_PlayMontage | Gate | None | UseAbility001 Authority: BoxOverlap → ApplyDamage(DEPRECATED_Ability001Damage) | A_Hu_F_Combat_2H_Attack* montages | End not local; CurrentlyAttacking cleared via base SetIsAttacking (Inferred) | **Implemented** | subgraph |
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate → CurrentlyAttacking → CanMove true → Multicast_PlayMontage(random Ability001Montage) | Multicast_PlayMontage | Gate | None | UseAbility001 Authority BoxOverlap ApplyDamage — **caller: AN_Ability_001** | A_Hu_F_Combat_2H_Attack* montages | **AN_AttackComplete** → SetIsAttacking | **Implemented** (Pass 8 confirmed) | Pass 6 + Pass 8 |
|
||||
| Ability 002–004 | Inherited only | N/A | Base PrintString | — | — | — | — | — | Base empty End | **Stub** (inherited) | list_events |
|
||||
| Basic attack | Ability 001 | No | Same | Same | Same | Same | Same | Attack montages | Same | **Implemented** (=001); **Observed Runtime Behavior:** known working melee | parity brief + subgraph |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
@@ -116,10 +122,10 @@ flowchart TD
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin | No | Gate → CurrentlyAttacking → CanMove false → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate | None | **No UseAbility001** — no hit path | Cleric_PrimaryAttack_* | End not local | **Partial** (montage only) | subgraph |
|
||||
| Ability 002 | Server_Ability_002_Begin; UseAbility002 | No | Gate → FCanUseMana(Ability002ManaCost) → CurrentlyAttacking → CanMove true → Multicast_PlayMontage(Cleric_Ability002_Montage) | Multi_SpawnParticle (EmitterTemplate **empty**); UseAbility002 Authority heal | Gate + mana | DEPRECATED_Ability002ManaCost | SphereOverlap 400 tag Player → DEPRECATED_RecoverPlayerHealth(Ability002Damage); self heal | Cleric_Ability002_Montage | End not local | **Partial** (heal works; particle empty) | subgraph |
|
||||
| Ability 003 | Server_Ability_003_Begin; Server_Ability_003_End; ConcentrateHandle; EndConcentrate | No | Mana≥cost → DivineCircleActive + SetTimer 0.25 ConcentrateHandle | ConcentrateHandle: Multicast_PlayMontage(Cleric_Ability003) + ApplyDamage(Ability003Damage) on non-Player | Gate + mana | DEPRECATED_Ability003ManaCost | ApplyDamage DoT | Cleric_Ability003_Montage (in timer) | End → EndConcentrate clears timer/state | **Implemented** | subgraph + DSL |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana called but Branch Condition=**literal true** (CanUse unwired) → montage | UseAbility004: find ClosestEnemy tag Enemy → SpawnActor **Class empty** | Gate; mana bypassed | DEPRECATED_Ability004ManaCost (unused result) | Spawn params Damage=20 HealPerHit=10 (unwired class) | Cleric_Ability004_Montage | End not local | **Partial / Existing Baseline Defect** | subgraph |
|
||||
| Ability 001 | Server_Ability_001_Begin | No | Gate → CurrentlyAttacking → CanMove false → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate | None | **AN_Ability_001 present but UseAbility001 unimplemented** — no hit | Cleric_PrimaryAttack_* | AN_AttackComplete still clears attacking | **Partial** (montage + dead notify) | Pass 6 + Pass 8 |
|
||||
| Ability 002 | Server_Ability_002_Begin; UseAbility002 | No | Gate → FCanUseMana → Multicast_PlayMontage(Cleric_Ability002_Montage) | Multicast_PlayMontage | Gate + mana | DEPRECATED_Ability002ManaCost | UseAbility002 Authority heal — **caller: AN_Ability_002**; empty particle | Cleric_Ability002_Montage | AN_AttackComplete | **Partial** (notify-driven heal; FX hole) | Pass 6 + Pass 8 |
|
||||
| Ability 003 | Server_Ability_003_Begin; Server_Ability_003_End; ConcentrateHandle; EndConcentrate | No | Mana≥cost → DivineCircleActive + SetTimer 0.25 ConcentrateHandle | ConcentrateHandle plays montage + ApplyDamage; ABP Divine Circle state | Gate + mana | DEPRECATED_Ability003ManaCost | ApplyDamage in timer; **AN_Ability_003 → UseAbility003 dead/vestigial** | Cleric_Ability003_Montage (timer byproduct) | EndConcentrate | **Implemented** (timer-driven; vestigial notify) | Pass 6 + Pass 8 |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana called but Branch Condition=**literal true** → montage | Multicast_PlayMontage | Gate; mana bypassed | DEPRECATED_Ability004ManaCost unused | UseAbility004 — **caller: AN_Ability_004**; SpawnActor Class empty | Cleric_Ability004_Montage | AN_AttackComplete | **Partial / Existing Baseline Defect** | Pass 6 + Pass 8 |
|
||||
| Basic attack | Ability 001 montage | No | Same | Same | Same | — | Missing hit | PrimaryAttack montages | — | **Partial** | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death / HUD | Inherited | — | Base | Base | — | — | — | — | — | **Inherited** | — |
|
||||
@@ -195,9 +201,9 @@ Reliability: **Unknown — MCP property visibility limitation** for all CustomEv
|
||||
| DEPRECATED_CurrentHealth | Amazonian AnyDamage | Subtract + death check |
|
||||
| DEPRECATED_RecoverPlayerHealth | Cleric UseAbility002 | Interface message |
|
||||
| CurrentlyAttacking / IsDead | All ability gates | Replicated on base |
|
||||
| IsBlocking | Paladin 002 Begin/End | Local; AnimBP dependency Unknown |
|
||||
| PerformingWhirlwind | Amazonian AnyDamage | Get only — never Set |
|
||||
| DivineCircleActive / TimerHandle | Cleric 003 | Timer loop |
|
||||
| IsBlocking | Paladin 002 Begin/End | Local; **ABP_Paladin Block state** (Pass 8 Observed Implementation) |
|
||||
| PerformingWhirlwind | Amazonian AnyDamage | Get only — never Set; **not in AnimBP/montages** (Pass 8) |
|
||||
| DivineCircleActive / TimerHandle | Cleric 003 | Timer loop; **ABP_Cleric Divine Circle state** reads flag (Pass 8) |
|
||||
|
||||
**No ASC attribute reads/writes in ability graphs.** No GameplayAbility grant/activate.
|
||||
|
||||
@@ -208,10 +214,12 @@ Reliability: **Unknown — MCP property visibility limitation** for all CustomEv
|
||||
- Client IA → Server Begin: Observed Implementation
|
||||
- Damage on UseAbility* / ChargeBox: Authority SwitchHasAuthority — Observed Implementation
|
||||
- Multicast used for montage/SFX/particle presentation — Observed Implementation
|
||||
- **Pass 8:** Multicast montage → AnimNotifies fire on evaluating machines; gameplay still Authority-gated inside UseAbility* / SetIsAttacking
|
||||
- **Pass 8 static risk:** hit windows depend on server evaluating Multicast montage notifies; interrupt may skip `AN_AttackComplete` (completion pins unwired)
|
||||
- Cleric Ability 004: mana CanUse **unwired** (literal true) — Existing Baseline Defect
|
||||
- Cleric Ability 004: SpawnActor Class empty — Existing Baseline Defect
|
||||
- Multi_SpawnParticle EmitterTemplate empty (Paladin 004, Cleric 002) — Partially Implemented
|
||||
- End events missing for most slots — Incomplete Refactor
|
||||
- End events missing for most slots — Incomplete Refactor (cleanup often via `AN_AttackComplete` instead)
|
||||
- Amazonian/Paladin Ability 001: no mana cost — Observed Implementation
|
||||
- Dual HUD still uses DEPRECATED floats on Server_UpdateHUD — Incomplete Refactor (Batch 2)
|
||||
|
||||
@@ -221,15 +229,22 @@ Reliability: **Unknown — MCP property visibility limitation** for all CustomEv
|
||||
|
||||
| Classification | Characters / slots |
|
||||
|---|---|
|
||||
| **Implemented** | Paladin 001, 003, 004 (with noted FX holes); Amazonian 001; Cleric 003 |
|
||||
| **Partial** | Paladin 002; Cleric 001, 002, 004; Amazonian End/whirlwind |
|
||||
| **Implemented** | Paladin 001, 003, 004 (FX hole on 004); Amazonian 001; Cleric 003 (timer; vestigial AN_Ability_003) |
|
||||
| **Partial** | Paladin 002; Cleric 001 (dead notify), 002 (heal + FX hole), 004 (broken spawn); Amazonian whirlwind |
|
||||
| **Stub** | Wizard 001–004; Gunslinger 001–004 (inherited PrintString) |
|
||||
| **Missing** | Wizard/Gunslinger combat bodies; most Ends; UseAbility on Wizard/Gunslinger |
|
||||
| **Present but Unconnected** | NS_Wizard_Ability001; GE_* DefaultAttributes orphans; BP_PlayerProjectile; PerformingWhirlwind setter |
|
||||
| **Missing** | Wizard/Gunslinger combat bodies; most Server Ends |
|
||||
| **Present but Unconnected** | NS_Wizard_Ability001; GE_* orphans; BP_PlayerProjectile; PerformingWhirlwind setter; Cleric_Hu_M_Spell_Staff_Up_Impact_Montage (0 refs) |
|
||||
| **Deprecated connected** | All DEPRECATED_* damage/mana/health in active paths |
|
||||
| **Notify Present; Receiver Unimplemented** | Cleric AN_Ability_001 → UseAbility001; Cleric AN_Ability_003 → UseAbility003 |
|
||||
|
||||
---
|
||||
|
||||
## Pass 8 animation callback note
|
||||
|
||||
Full tables and reclassification: `10-AnimationDependencies.md`. Primary status labels unchanged except qualifications above; no silent rewrites.
|
||||
|
||||
---
|
||||
|
||||
## Migration relevance (inventory only)
|
||||
|
||||
Replacement targets: IA→Server custom events; ApplyDamage/RecoverPlayerHealth; FCanUseMana + DEPRECATED costs; Multicast_PlayMontage; Charge timeline; DivineCircle timer; dual HUD floats.
|
||||
Replacement targets: IA→Server custom events; AnimNotify→UseAbility timing; ApplyDamage/RecoverPlayerHealth; FCanUseMana + DEPRECATED costs; Multicast_PlayMontage; Charge timeline; DivineCircle timer; dual HUD floats; `AN_AttackComplete` lockout cleanup.
|
||||
|
||||
@@ -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 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 / Pass 8
|
||||
- **Last completed pass:** Pass 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Pass 7 / Pass 4 / Pass 9 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -17,18 +17,16 @@
|
||||
- Shared input / RPC / death / HUD / multicast architecture
|
||||
- Interface BPI_PlayerCharacter surface
|
||||
- Override matrix (which Server_Ability events children implement)
|
||||
- **Pass 6:** Full Ability 001–004 path reconstruction per character — see `05-LegacyAbilityArchitecture.md`
|
||||
- Charge / DivineCircle / Whirlwind / UseAbility hit paths inventoried
|
||||
- Montage dependency seeds — see `10-AnimationDependencies.md`
|
||||
- Pass 6 Ability 001–004 path reconstruction
|
||||
- **Pass 8:** AnimBP/Montage/AnimNotify callback wiring — see `10-AnimationDependencies.md`
|
||||
|
||||
### Pending sections
|
||||
- AnimNotify → UseAbility wiring (Pass 8)
|
||||
- Weapon component deep dive if separate assets exist beyond overlaps
|
||||
- Gunslinger intended design (no static implementation)
|
||||
|
||||
### Evidence still required
|
||||
- Exact who calls UseAbility* (likely AnimNotify — Pass 8)
|
||||
- PlayerDeath callers beyond Amazonian ReceiveAnyDamage
|
||||
- Notify trigger times (Manual Editor)
|
||||
- Interrupt cleanup if AN_AttackComplete skipped
|
||||
|
||||
---
|
||||
|
||||
@@ -103,10 +101,11 @@ Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerPaladinREF, PlayerHitCheck |
|
||||
| Local vars | Ability001Montages, ChargeStartLoc, ChargeFinishLoc, IsCharging, IsBlocking |
|
||||
| AnimBP | ABP_Paladin |
|
||||
| Ability events implemented | Server_001 Begin; 002 Begin+End; 003 Begin; 004 Begin; UseAbility001/004; Charge; Client_Charge |
|
||||
| AnimBP | ABP_Paladin (`.../Paladin/ABP_Paladin`) — Locomotion: Idle/WalkRun/Charge/Block/Death |
|
||||
| Ability events | Server_001 Begin; 002 Begin+End; 003 Begin; 004 Begin; UseAbility001/004; Charge; Client_Charge |
|
||||
| Parent Call on Ability overrides | **No** |
|
||||
| Pass 6 status | 001 Implemented; 002 Partial (block); 003 Implemented (charge+damage); 004 Implemented (empty particle template) |
|
||||
| Pass 8 | AN_Ability_001/004 + AN_AttackComplete on montages; IsBlocking drives Block state |
|
||||
|
||||
### Amazonian
|
||||
|
||||
@@ -114,9 +113,10 @@ Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerAmazonREF, PlayerHitCheck |
|
||||
| Local vars | DynamicMaterials, Ability001Montage, PerformingWhirlwind |
|
||||
| AnimBP (deps) | ABP_Amazon |
|
||||
| AnimBP (deps) | ABP_Amazon — Locomotion Idle/WalkRun/Death only |
|
||||
| Ability events | Server_001 Begin; UseAbility001; ReceiveAnyDamage |
|
||||
| Pass 6 status | 001 Implemented (= known working melee); 002–004 inherited stubs; PerformingWhirlwind never Set |
|
||||
| Pass 8 | AN_Ability_001 + AN_AttackComplete on all four attack montages; whirlwind not in AnimBP |
|
||||
|
||||
### Cleric
|
||||
|
||||
@@ -127,6 +127,7 @@ Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
| Ability events | Server_001–004 Begin; Server_003 End; UseAbility002/004; ConcentrateHandle; EndConcentrate |
|
||||
| Parent Call on Ability overrides | **No** |
|
||||
| Pass 6 status | 001 Partial (montage only); 002 Partial heal (empty particle); 003 Implemented DivineCircle; 004 Broken spawn + mana bypass |
|
||||
| Pass 8 | AN_Ability_001/003 dead (UseAbility unimplemented); 002/004 notify-live; ABP Divine Circle state; AN_AttackComplete on all ability montages |
|
||||
|
||||
### Wizard
|
||||
|
||||
@@ -137,6 +138,7 @@ Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
| Ability events | **None** implemented (BeginPlay/Tick/Overlap only) |
|
||||
| BeginPlay Parent | **No** (skips base InitialSpawnLocation set) |
|
||||
| Pass 6 status | 001–004 inherited PrintString stubs; NS_Wizard_Ability001 / GE_Wizard_DefaultAttributes / BP_PlayerProjectile unwired |
|
||||
| Pass 8 | ABP_Wizard locomotion+death only; **no** Wizard montages in class folder |
|
||||
|
||||
### Gunslinger
|
||||
|
||||
@@ -148,6 +150,7 @@ Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
| Dependencies | Only BP_PlayerCharacterBase |
|
||||
| BeginPlay/Tick/Overlap | Call Parent |
|
||||
| Pass 6 status | 001–004 inherited PrintString stubs; no weapon/projectile/AnimBP/GE |
|
||||
| Pass 8 | Confirmed: no AnimBP dependency; no shared attack montage path |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,92 +2,174 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Montage and AnimInstance seeds discovered during Pass 6 ability-path reconstruction. Not a full AnimBP / notify archaeology pass.
|
||||
- **Inspection method:** Connected subgraphs on character ability events; AssetTools dependency paths when visible on Multicast_PlayMontage pins.
|
||||
- **Evidence classifications used:** Observed Implementation, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Montage section names, play rate, start position, and AnimNotify tracks not deep-inspected — Defer Pass 8. Root-motion requirements Unknown without Montage asset inspection.
|
||||
- **Scope:** Animation Blueprints, Montages, AnimNotify Blueprints, and ability-callback wiring for the five playable characters (Batch 4A Pass 8). Builds on Pass 6 montage seeds.
|
||||
- **Inspection method:** AssetTools deps/referencers/tags; BlueprintTools list_graphs/variables/events + `read_graph_dsl` on notify `Received_Notify` and AnimBP EventGraphs; character ability paths correlated from Pass 6 (not re-walked).
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Montage `Notifies` array unreadable via ObjectTools; asset-registry `AnimNotifyList` tag often empty for BP notifies; `read_graph_dsl` empty on AnimGraph/state/transition graphs; notify trigger times/section names not exposed; no dedicated Montage toolset. Notify presence recovered via dependency/referencer graphs + notify BP bodies.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 8
|
||||
- **Last completed pass:** Pass 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Pass 7 (GAS) or Pass 4/9 when authorized — not auto-started
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Per-character Montage asset paths tied to Ability 001–004 Begin paths
|
||||
- AnimBP class references from character deps (structural)
|
||||
- Notes on UseAbility* vs Montage timing (inferred notify dependency)
|
||||
- Per-character AnimBP architecture table
|
||||
- Per-ability Montage + notify tables
|
||||
- AnimNotify/callback inventory (`AN_Ability_001–004`, `AN_AttackComplete`)
|
||||
- Resolved UseAbility* callers (montage notifies → BPI)
|
||||
- Pass 6 reclassification table
|
||||
- Cleanup via `AN_AttackComplete` → `SetIsAttacking`
|
||||
- Networking/authority static notes for multicast montage + notify gameplay
|
||||
- Wizard / Gunslinger animation dependency confirmation
|
||||
|
||||
### Pending sections
|
||||
- AnimNotify → UseAbility* wiring
|
||||
- Montage section / blend / root-motion details
|
||||
- ABP state machines reacting to IsBlocking / CurrentlyAttacking
|
||||
- Exact notify trigger times / track indices (Requires Manual Editor Inspection)
|
||||
- Montage section names / blend / root-motion flags (MCP unreadable)
|
||||
- Transition-rule DSL for every AnimBP (partial reconstruction via VariableGet nodes on Paladin)
|
||||
- Weapon collision enable/disable notify states (none found on inspected montages)
|
||||
|
||||
### Evidence still required
|
||||
- Exact notify names that call UseAbility001 / UseAbility002 / UseAbility004
|
||||
- Whether End events stop montages (most Ends missing)
|
||||
- Manual editor confirmation of notify timing windows
|
||||
- Whether interrupted montages skip `AN_AttackComplete` (static risk only)
|
||||
- Gunslinger mesh AnimClass assignment on CDO (data-only; deps show no AnimBP)
|
||||
|
||||
---
|
||||
|
||||
## Shared helper
|
||||
## Shared animation → ability architecture
|
||||
|
||||
| Helper | Owning BP | Behavior |
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Begin[Server_Ability_N_Begin] --> MC[Multicast_PlayMontage]
|
||||
MC --> Play[PlayMontage Mesh]
|
||||
Play --> AN1[AN_Ability_00N]
|
||||
Play --> ANC[AN_AttackComplete]
|
||||
AN1 --> BPI[BPI UseAbility00N]
|
||||
BPI --> Auth[SwitchHasAuthority]
|
||||
Auth --> FX[ApplyDamage / Heal / Spawn]
|
||||
ANC --> SetAtk[BPI SetIsAttacking]
|
||||
SetAtk --> Clear[CurrentlyAttacking false]
|
||||
```
|
||||
|
||||
**Observed Implementation:** `Multicast_PlayMontage` on `BP_PlayerCharacterBase` plays the montage with **OnCompleted / OnBlendOut / OnInterrupted unwired**. Attack-window gameplay and `CurrentlyAttacking` cleanup for notify-driven abilities depend on embedded AnimNotify Blueprints, not montage delegates.
|
||||
|
||||
**Shared notify Blueprints** (`/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterRelated/`):
|
||||
|
||||
| Notify BP | Received_Notify body | Classification |
|
||||
|---|---|---|
|
||||
| Multicast_PlayMontage | BP_PlayerCharacterBase | Multicast → PlayMontage on mesh AnimInstance |
|
||||
|
||||
Gameplay effects (ApplyDamage / heal / spawn) observed **after** Montage Begin in separate UseAbility* or timer/overlap events — typically **during** Montage if notify-driven. Exact notify wiring: **Unknown — Requires Manual Editor Inspection / Pass 8**.
|
||||
| `AN_Ability_001` | `Abilities\|UseAbility001(GetOwner(MeshComp))` | Observed Implementation |
|
||||
| `AN_Ability_002` | `UseAbility002(GetOwner)` | Observed Implementation (Cleric agent + deps) |
|
||||
| `AN_Ability_003` | `UseAbility003(GetOwner)` | Observed Implementation (Cleric agent + deps) |
|
||||
| `AN_Ability_004` | `UseAbility004(GetOwner)` | Observed Implementation (Paladin/Cleric agents + deps) |
|
||||
| `AN_AttackComplete` | `BPIPlayerCharacter\|SetIsAttacking(GetOwner(MeshComp))` | Observed Implementation (`read_graph_dsl`) |
|
||||
|
||||
---
|
||||
|
||||
## Player_Paladin
|
||||
## 1. Per-character animation architecture
|
||||
|
||||
| Ability | Montage path(s) | AnimInstance | Gameplay vs Montage | End stops Montage? |
|
||||
|---|---|---|---|---|
|
||||
| 001 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Attack_A_Fast_Montage` (+ B, C, D_Fast) via `Ability001Montages` array random | ABP_Paladin | UseAbility001 ApplyDamage separate Authority path | Unknown (no local End) |
|
||||
| 002 | None in Begin subgraph | ABP_Paladin | IsBlocking state only — AnimBP reaction Inferred | End clears IsBlocking; Montage stop Unknown |
|
||||
| 003 | ChargeTimeline (not Montage) | ABP_Paladin | ChargeBox ApplyDamage during charge | No local 003 End |
|
||||
| 004 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Abilities/Paladin_Ability004_Montage` | ABP_Paladin | UseAbility004 AoE + SFX separate | Unknown |
|
||||
| Character | AnimBP | Skeleton | Relevant state machines | Montage slots | Ability callbacks | Death path | Confidence |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| Paladin | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/ABP_Paladin` | `SKEL_Hu_M` | `Locomotion`: Idle, Walk/Run, Charge, Block, Death | UpperBody (montages) | None in ABP — notifies call character BPI | `IsDead` → Death state; DeathIndex random | High |
|
||||
| Amazonian | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Amazon/ABP_Amazon` | `SKEL_Hu_F` | `Locomotion`: Idle, Walk/Run, Death | UpperBody | None in ABP | `IsDead` → Death | High |
|
||||
| Cleric | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Cleric/ABP_Cleric` | Male (`SKEL_Hu_M` family) | `Locomotion`: Idle, Walk/Run, **Divine Circle**, Death | UpperBody | None in ABP; reads `DivineCircleActive?` from Cleric | `IsDead` → Death | High |
|
||||
| Wizard | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Wizard/ABP_Wizard` | `SKEL_Hu_M` | `Locomotion`: Idle, Walk/Run, Death | None used by abilities | None — no ability montages in Wizard folder | Death anims in deps | High |
|
||||
| Gunslinger | **None** (deps = base only; IsDataOnly) | Unknown / inherited | N/A | N/A | None | Inherited base death only | Medium |
|
||||
|
||||
SFX: `MagicSpell_01_Cue` via Multicast_PlaySFX on Ability 004 UseAbility path.
|
||||
**ABP parent class (all inspected):** stock `Engine.AnimInstance` — Observed Implementation.
|
||||
|
||||
**Paladin ABP drivers (EventGraph):** per-frame reads `IsCharging`, `IsBlocking`, `IsDead`, velocity→`IsMoving` from Paladin REF. Block/Charge/Death transitions driven by those booleans — Observed Implementation.
|
||||
|
||||
**Cleric ABP drivers:** `DivineCircleActive?` ← `GetDivineCircleActive` on Cleric REF; `IsDead`; speed/moving — Observed Implementation (`read_graph_dsl`).
|
||||
|
||||
**Amazonian / Wizard ABP:** locomotion + death only — no Block/Charge/DivineCircle states — Observed Implementation.
|
||||
|
||||
---
|
||||
|
||||
## Player_Amazonian
|
||||
## 2. Per-ability Montage table
|
||||
|
||||
| Ability | Montage path(s) | AnimInstance | Gameplay vs Montage | End stops Montage? |
|
||||
|---|---|---|---|---|
|
||||
| 001 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Amazon/AnimMontages/A_Hu_F_Combat_2H_Attack01_Montage` (+ Attack02, Attack_Base, Attack) via `Ability001Montage` array | ABP_Amazon | UseAbility001 Authority damage separate | Unknown (no local End) |
|
||||
| 002–004 | None (inherited stubs) | — | — | — |
|
||||
| Character | Slot/system | Caller | Montage | Section | Notifies | Callback target | Gameplay consequence | Cleanup dependency | Evidence status |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| Paladin | Ability 001 | `Server_Ability_001_Begin` → Multicast | `.../Paladin/AnimMontages/Attack_{A,B,C,D}_Fast_Montage` (random) | Default (single segment); name Unknown | `AN_Ability_001`, `AN_AttackComplete` (+ sound on A) | `UseAbility001`; `SetIsAttacking` | Authority BoxOverlap ApplyDamage | `AN_AttackComplete` → clear CurrentlyAttacking | Observed Implementation |
|
||||
| Paladin | Ability 002 | Begin/End set `IsBlocking` | **No Montage** | — | — | ABP Block state | Presentation only | End clears IsBlocking | Observed Implementation |
|
||||
| Paladin | Ability 003 | Charge + Client_Charge | **No Montage** (ChargeTimeline) | — | — | — | ChargeBox ApplyDamage | Timeline/End paths (not notify) | Observed Implementation |
|
||||
| Paladin | Ability 004 | `Server_Ability_004_Begin` → Multicast | `.../Paladin/AnimMontages/Abilities/Paladin_Ability004_Montage` | Unknown | `AN_Ability_004`, `AN_AttackComplete`, Niagara `NS_Paladin_Ability004` | `UseAbility004`; `SetIsAttacking` | Authority SphereOverlap ApplyDamage + SFX | `AN_AttackComplete` | Observed Implementation |
|
||||
| Amazonian | Ability 001 / melee | `Server_Ability_001_Begin` → Multicast | `.../Amazon/AnimMontages/A_Hu_F_Combat_2H_Attack{01,02,_Base,_}_Montage` | Unknown | `AN_Ability_001`, `AN_AttackComplete` | `UseAbility001`; `SetIsAttacking` | Authority BoxOverlap ApplyDamage | `AN_AttackComplete` | Observed Implementation + Observed Runtime Behavior |
|
||||
| Amazonian | 002–004 | Inherited stubs | None | — | — | — | PrintString | — | Observed Implementation |
|
||||
| Cleric | Ability 001 | `Server_Ability_001_Begin` → Multicast | `.../Cleric/AnimMontages/Cleric_PrimaryAttack_*` (4) | Unknown | `AN_Ability_001`, `AN_AttackComplete` | `UseAbility001` (**unimplemented** on Cleric) | **No hit** — dead notify | `AN_AttackComplete` still clears attacking | Observed Implementation |
|
||||
| Cleric | Ability 002 | Begin → Multicast | `.../Cleric/AnimMontages/Abilities/Cleric_Ability002_Montage` | Unknown | `AN_Ability_002`, `AN_AttackComplete` (+ Niagara/sound deps) | `UseAbility002` (implemented) | Authority heal Players | `AN_AttackComplete` | Observed Implementation |
|
||||
| Cleric | Ability 003 | `ConcentrateHandle` timer plays montage | `.../Cleric/AnimMontages/Abilities/Cleric_Ability003_Montage` | Unknown | `AN_Ability_003` (**dead**), `AN_AttackComplete` | `UseAbility003` unimplemented; damage in timer | ApplyDamage in ConcentrateHandle | `EndConcentrate` (not notify) | Observed Implementation |
|
||||
| Cleric | Ability 004 | Begin → Multicast | `.../Cleric/AnimMontages/Abilities/Cleric_Ability004_Montage` | Unknown | `AN_Ability_004`, `AN_AttackComplete` | `UseAbility004` (broken spawn) | SpawnActor empty class | `AN_AttackComplete` | Observed Implementation |
|
||||
| Wizard | 001–004 | Inherited stubs | **No montages** in Wizard anim folder | — | — | — | PrintString | — | Observed Implementation |
|
||||
| Gunslinger | 001–004 | Inherited stubs | None | — | — | — | PrintString | — | Observed Implementation |
|
||||
|
||||
**Observed Runtime Behavior:** Amazonian melee (Ability 001 path) is the known working combat baseline.
|
||||
**Present but Unconnected montage:** `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Cleric/AnimMontages/Cleric_Hu_M_Spell_Staff_Up_Impact_Montage` — references `AN_Ability_004` / `AN_AttackComplete`; **0 referencers**.
|
||||
|
||||
Play rate: Multicast path uses rate **1** (Pass 6 / Amazonian agent). Start position: Unknown. Root motion: Unknown — Tool Limitation.
|
||||
|
||||
---
|
||||
|
||||
## Player_Cleric
|
||||
## 3. AnimNotify / callback table
|
||||
|
||||
| Ability | Montage path(s) | Notes |
|
||||
|---|---|---|
|
||||
| 001 | Cleric_PrimaryAttack_* via Ability001Montages | Montage only — no UseAbility001 |
|
||||
| 002 | Cleric_Ability002_Montage | Heal in UseAbility002 |
|
||||
| 003 | Cleric_Ability003_Montage | Played inside ConcentrateHandle timer loop |
|
||||
| 004 | Cleric_Ability004_Montage | Spawn broken; montage still plays |
|
||||
|
||||
Exact `/Game/...` Cleric montage folder paths: recorded as class-named montages under Cleric AnimMontages in deps — full absolute paths Require Manual Editor Confirmation if not pinned in subgraph (Observed Implementation of PlayMontage call; path strings from character asset deps).
|
||||
| Notify or callback | Asset | Character | Ability | Receiver | Downstream path | Authority observation | Connection status |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| AN_Ability_001 | `.../PlayerCharacterRelated/AN_Ability_001` | Paladin, Amazonian | 001 | Character via BPI `UseAbility001` | Authority overlap ApplyDamage | Multicast montage → notify all machines; damage Authority-only | **Connected** |
|
||||
| AN_Ability_001 | same | Cleric | 001 | BPI `UseAbility001` | **No implementation** on Cleric/base | Notify fires; no gameplay | **Notify Present; Receiver Unimplemented** |
|
||||
| AN_Ability_002 | `.../AN_Ability_002` | Cleric | 002 | `UseAbility002` | Authority heal | Same multicast pattern | **Connected** |
|
||||
| AN_Ability_003 | `.../AN_Ability_003` | Cleric | 003 | `UseAbility003` | Unimplemented; damage is timer | Vestigial | **Notify Present; Receiver Unimplemented** |
|
||||
| AN_Ability_004 | `.../AN_Ability_004` | Paladin | 004 | `UseAbility004` | Authority AoE damage | Multicast + Authority | **Connected** |
|
||||
| AN_Ability_004 | same | Cleric | 004 | `UseAbility004` | Broken SpawnActor | Multicast + Authority | **Connected (broken body)** |
|
||||
| AN_AttackComplete | `.../AN_AttackComplete` | Paladin, Amazonian, Cleric (all listed montages) | 001/002/004 (+ Cleric primary) | BPI `SetIsAttacking` | Base Authority: CurrentlyAttacking=false, CanMove true | Multicast notify; state Authority-only | **Connected** |
|
||||
| PerformingWhirlwind | N/A animation | Amazonian | — | Character EventAnyDamage Get only | No AnimBP/montage Set | — | **Present but Unconnected setter** |
|
||||
| Divine Circle state | ABP_Cleric | Cleric | 003 presentation | Reads DivineCircleActive | Locomotion state | Cosmetic | **Connected** (presentation) |
|
||||
|
||||
---
|
||||
|
||||
## Player_Wizard / Player_Gunslinger
|
||||
## 4. Pass 6 reclassification table
|
||||
|
||||
No ability Montage invocations. No character-local Multicast_PlayMontage callers for abilities.
|
||||
| Character | Slot | Previous status | Revised status | New evidence | Reason |
|
||||
|---|---|---|---|---|---|
|
||||
| Paladin | 001 | Implemented | **Implemented** (qualified) | `AN_Ability_001` → `UseAbility001`; cleanup `AN_AttackComplete` | Animation connectivity confirmed; status unchanged |
|
||||
| Paladin | 002 | Partial | **No change** | ABP Block driven by `IsBlocking` | Presentation path confirmed; hit absorb still untraced |
|
||||
| Paladin | 003 | Implemented | **No change** | No Montage; ChargeTimeline | Animation pass does not alter charge path |
|
||||
| Paladin | 004 | Implemented | **Implemented** (qualified) | `AN_Ability_004` → `UseAbility004` | Connectivity confirmed; empty particle remains |
|
||||
| Amazonian | 001 | Implemented | **No change** | Full notify → damage → cleanup chain | Confirms known working melee path |
|
||||
| Amazonian | 002–004 | Stub | **No change** | No montages/notifies | — |
|
||||
| Amazonian | Whirlwind | Partial / unconnected setter | **No change** | Not in ABP or montages | Still Get-only on character |
|
||||
| Cleric | 001 | Partial (montage only) | **Partial** (qualified: dead notify) | `AN_Ability_001` present; `UseAbility001` unimplemented | Notify does not add gameplay |
|
||||
| Cleric | 002 | Partial | **Partial** (qualified: notify-driven heal) | `AN_Ability_002` → `UseAbility002` | Heal path confirmed animation-timed; FX hole remains |
|
||||
| Cleric | 003 | Implemented | **Implemented** (qualified: timer + vestigial notify) | Damage in ConcentrateHandle; `AN_Ability_003` dead; ABP Divine Circle state | Notify not required for damage |
|
||||
| Cleric | 004 | Partial / defect | **No change** (qualified: notify-timed) | `AN_Ability_004` → broken `UseAbility004` | Spawn defect unchanged |
|
||||
| Wizard | 001–004 | Stub | **No change** | ABP locomotion only; zero Wizard montages | — |
|
||||
| Gunslinger | 001–004 | Stub | **No change** | No AnimBP; deps = base only | — |
|
||||
|
||||
---
|
||||
|
||||
## Cleanup / End dependency summary
|
||||
## Networking and authority (static)
|
||||
|
||||
| Character | Ability End stops Montage? |
|
||||
| Observation | Classification |
|
||||
|---|---|
|
||||
| Most slots | **Unknown / Missing End** — Server_Ability_*_End not overridden; base End empty |
|
||||
| Paladin 002 | Clears IsBlocking / CurrentlyAttacking / CanMove — Montage stop not observed |
|
||||
| Cleric 003 | EndConcentrate clears timer / DivineCircleActive — Montage stop not observed |
|
||||
| Montage started via Multicast → notifies evaluate on server and clients | Observed Implementation / Inferred (UE montage notify semantics) |
|
||||
| `UseAbility*` / `SetIsAttacking` bodies use `SwitchHasAuthority` | Observed Implementation (Pass 6) |
|
||||
| Duplicate damage prevented by Authority gate if notify fires everywhere | Inferred static risk mitigation — Requires Runtime Inspection |
|
||||
| Gameplay depends on cosmetic Multicast montage evaluating notifies on the server | Observed Implementation — **static risk:** if server skips animation evaluation, hit windows may not fire |
|
||||
| Missing `AN_AttackComplete` (interrupt) leaves `CurrentlyAttacking` true | Inferred — PlayMontage interrupt pins unwired |
|
||||
| No client-authoritative ApplyDamage in notify receivers | Observed Implementation |
|
||||
|
||||
Root motion required: **Unknown — Defer Pass 8**.
|
||||
---
|
||||
|
||||
## Answers to Pass 8 known questions (compact)
|
||||
|
||||
1. **UseAbility* callers:** `AN_Ability_001–004` AnimNotify BPs (not AnimBP EventGraph).
|
||||
2. **Paladin 001 damage:** Yes — via `AN_Ability_001` during montage.
|
||||
3. **Paladin block:** No Montage; ABP `Block` state from `IsBlocking`; End clears flags.
|
||||
4. **Paladin charge cleanup:** Not Montage-callback; ChargeTimeline / ability logic.
|
||||
5. **Amazonian melee path:** Begin → Multicast montage → `AN_Ability_001` → `UseAbility001` → Authority damage; `AN_AttackComplete` clears attacking.
|
||||
6. **Weapon collision notifies:** Not observed on inspected montages (overlap queries inside UseAbility*).
|
||||
7. **PerformingWhirlwind:** Never set by animation; still unconnected.
|
||||
8. **Cleric 001 hidden gameplay:** No — notify dead (`UseAbility001` unimplemented).
|
||||
9. **Cleric 002/003/004:** 002/004 notify-driven; 003 timer-driven; Divine Circle ABP presentation.
|
||||
10. **Wizard spell assets via anim:** No Wizard montages; no notify chain to unwired NS/GE/projectile.
|
||||
11. **Gunslinger shared AnimBP/Montage:** No — no AnimBP dependency.
|
||||
12. **CurrentlyAttacking clear:** Via `AN_AttackComplete` for notify-driven attacks; interrupt cleanup Unknown.
|
||||
13. **Death anims:** ABP Death state from `IsDead`; destruction/respawn remain character `PlayerDeath` (not notify-driven).
|
||||
14. **Client-only gameplay timing:** Damage Authority-gated; presentation may diverge — Requires Runtime Inspection.
|
||||
|
||||
@@ -2,152 +2,101 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Unresolved questions after Batches 1–3. Separates confirmed static findings from questions needing further Blueprint, runtime, or config inspection.
|
||||
- **Inspection method:** Consolidation of Batches 1–3; Batch 3 resolved per-character ability path unknowns.
|
||||
- **Scope:** Unresolved questions after Batches 1–3 and Batch 4A Pass 8.
|
||||
- **Inspection method:** Consolidation of Batches 1–3 + Pass 8 animation archaeology.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; CustomEvent FunctionFlags not readable; comment-box membership limited; no PIE this batch.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; CustomEvent FunctionFlags unread; Montage Notifies array / times unreadable; AnimGraph DSL empty; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 (Pass 4 / 7 / 8 / 9 — only when authorized)
|
||||
- **Last completed pass:** Pass 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Pass 7 / 4 / 9 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1 unknowns grouped by verification method
|
||||
- Batch 2 resolutions: WBP_PlayerHUD class; BP_PlayerState DefaultAttributes=None; legacy ability routing documented
|
||||
- Batch 3 resolutions: per-character Ability 001–004 connected paths; Wizard/Gunslinger stub confirmation; UseAbility* presence matrix
|
||||
- Enemy ASC accessor defect still confirmed static
|
||||
- Batch 1–3 unknowns and resolutions
|
||||
- **Pass 8 resolutions:** UseAbility* callers; Amazonian melee anim path; Cleric dead notifies; cleanup via AN_AttackComplete; PerformingWhirlwind not animation-driven
|
||||
|
||||
### Pending sections
|
||||
- Frontend/session/enemy AI/animation unknowns (Batch 4)
|
||||
- Runtime test procedures after static ability archaeology
|
||||
- Frontend/session/enemy AI (Pass 4 / 9)
|
||||
- GE/cue inventory (Pass 7)
|
||||
- Runtime test procedures
|
||||
|
||||
### Evidence still required
|
||||
- AnimNotify → UseAbility* wiring (Pass 8)
|
||||
- Live ASC vs DEPRECATED HUD coexistence in PIE
|
||||
- Enemy BP AI connected graphs (Pass 9)
|
||||
- GE/cue referencer map (Pass 7)
|
||||
- Notify trigger times (Manual Editor)
|
||||
- Interrupt vs AN_AttackComplete behavior (PIE)
|
||||
- Live ASC vs DEPRECATED HUD coexistence (PIE)
|
||||
|
||||
---
|
||||
|
||||
## Resolved in Batch 2 (no longer Unknown)
|
||||
## Resolved in Batch 2–3 (unchanged)
|
||||
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Is `WBP_PlayerHUD` a Widget or AHUD? | Parent is `RIRHUD`; AHUD Blueprint; `WBP_` name misleading | Observed Implementation | 03, 11 |
|
||||
| Does `BP_PlayerState` assign DefaultAttributes GE? | CDO `defaultAttributesGameplayEffect` = **None** | Observed Implementation | 03, 06 |
|
||||
| How are abilities routed/networked on base? | IA_Ability_* → Server_Ability_* stubs/overrides; Multicast FX helpers | Observed Implementation | 05, 08 |
|
||||
See prior tables in git history / Batch 3 handoff. Key: legacy IA→Server_Ability_*; DefaultAttributes=None; WBP_PlayerHUD is AHUD.
|
||||
|
||||
---
|
||||
|
||||
## Resolved in Batch 3 (Pass 6)
|
||||
## Resolved in Batch 4A (Pass 8)
|
||||
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Full Ability 001–004 paths per playable | Documented per character in tables | Observed Implementation | 05, 08 |
|
||||
| Does Wizard implement Server_Ability_*? | No local implementations; inherit PrintString stubs | Observed Implementation | 05, 08 |
|
||||
| Is Gunslinger data-only? | IsDataOnly=True; deps only base; inherited stubs | Observed Implementation | 05, 08 |
|
||||
| Amazonian working melee path | Ability 001 Begin → Multicast montage → UseAbility001 Authority BoxOverlap ApplyDamage | Observed Implementation + Observed Runtime Behavior | 05 |
|
||||
| Are UseAbility* still invoked? | Present and connected on Paladin 001/004, Amazonian 001, Cleric 002/004; caller of UseAbility* itself Unknown (likely AnimNotify) | Observed Implementation / Unknown caller | 05, 10 |
|
||||
| Who calls PlayerDeath from Amazonian? | ReceiveAnyDamage → DEPRECATED_CurrentHealth ≤0 → PlayerDeath | Observed Implementation | 05, 08 |
|
||||
| Parent calls on ability overrides? | Paladin/Amazonian/Cleric: **No** | Observed Implementation | 05 |
|
||||
| Who calls UseAbility*? | `AN_Ability_001–004` AnimNotify BPs → BPI interface on montage owner | Observed Implementation | 10, 05 |
|
||||
| Paladin 001 damage via anim callback? | Yes — `AN_Ability_001` during Attack_* montages | Observed Implementation | 10 |
|
||||
| Paladin block Montage/notify? | No Montage; ABP Block from `IsBlocking`; End clears | Observed Implementation | 10 |
|
||||
| Paladin charge Montage cleanup? | No — ChargeTimeline / ability logic | Observed Implementation | 10 |
|
||||
| Amazonian working melee anim path? | Begin → Multicast → `AN_Ability_001` → UseAbility001 → Authority damage; `AN_AttackComplete` clears | Observed Implementation + Observed Runtime Behavior | 10 |
|
||||
| Weapon collision notify windows? | Not observed — overlaps inside UseAbility* | Observed Implementation (absence) | 10 |
|
||||
| PerformingWhirlwind set by anim? | No — not in ABP/montages; still Get-only | Observed Implementation | 10 |
|
||||
| Cleric 001 hidden notify gameplay? | Notify present; `UseAbility001` unimplemented — dead | Observed Implementation | 10 |
|
||||
| Cleric 002/003/004 anim dependency? | 002/004 notify-driven; 003 timer + vestigial AN_Ability_003; ABP Divine Circle | Observed Implementation | 10 |
|
||||
| Wizard spell via anim callbacks? | No Wizard montages; ABP locomotion only | Observed Implementation | 10 |
|
||||
| Gunslinger shared AnimBP/Montage? | No AnimBP dependency | Observed Implementation | 10 |
|
||||
| CurrentlyAttacking clear on montage complete? | Via `AN_AttackComplete` → SetIsAttacking; interrupt Unknown | Observed Implementation / Unknown interrupt | 10 |
|
||||
| Death anim invoke destroy/respawn? | No — ABP Death presentation; PlayerDeath on character | Observed Implementation | 10 |
|
||||
|
||||
---
|
||||
|
||||
## Confirmed static defects with runtime questions
|
||||
|
||||
| Confirmed finding | Evidence classification | Issue classification | Exact evidence | Runtime question |
|
||||
|---|---|---|---|---|
|
||||
| Enemy ASC on self vs GetASC from PlayerState | Observed Implementation | Incomplete Refactor | RIRBaseEnemyCharacter.cpp; RIRBaseCharacter.cpp | Which systems fail when interface ASC lookup is null for enemies? |
|
||||
| Dual HUD attribute paths (ASC Overlay vs DEPRECATED floats) | Observed Implementation | Incomplete Refactor | RIRHUD InitOverlay; BP Server_UpdateHUD | Do both run? Which drives visible bars in PIE? |
|
||||
| DefaultAttributesGameplayEffect unused (C++ and BP_PlayerState=None) | Observed Implementation | Partially Implemented | RIRPlayerState.h; BP_PlayerState CDO | What sets initial Health/Mana at spawn? |
|
||||
| Cleric Ability 004 SpawnActor Class empty + mana CanUse unwired | Observed Implementation | Existing Baseline Defect | Player_Cleric UseAbility004 / Begin | Does 004 appear to fire but do nothing in PIE? |
|
||||
| Multi_SpawnParticle empty EmitterTemplate (Paladin 004, Cleric 002) | Observed Implementation | Partially Implemented | UseAbility graphs | Visible missing VFX only? |
|
||||
|
||||
---
|
||||
|
||||
## Requires Blueprint / animation inspection (remaining)
|
||||
|
||||
| Question | Why insufficient | Paths | Method | Priority | Dependency |
|
||||
|---|---|---|---|---|---|
|
||||
| Who calls UseAbility*? | Events connected; callers not in EventGraph | Character AnimMontages / AnimBP | Pass 8 notify walk | High | Pass 6 bodies done |
|
||||
| Enemy chase/attack Blueprint logic | Structural only in Pass 3 | BP_EnemyCharacterBase, BP_Enemy_Skeleton, BPI_EnemyCharacter | Pass 9 connected graphs | High | Pass 3 structure |
|
||||
| Do EffectActor children call ApplyEffectToTarget? | Native mechanism only | BP_HealthPotion etc. | Pass 10 | Medium | Batch 1 |
|
||||
| Is CommonUI used by live content? | Plugin enabled; no native refs | /Game/_Main/UI | Widget parent inspection | Low | Batch 1 |
|
||||
| Paladin Ability 002 block absorb | IsBlocking set; no damage absorb path traced | ABP_Paladin / PlayerHitCheck | Pass 8 + hit graphs | Medium | Pass 6 |
|
||||
| Amazonian PerformingWhirlwind | Get without Set | Player_Amazonian | Search all graphs / macros | Low | Pass 6 |
|
||||
|
||||
---
|
||||
|
||||
## Requires runtime inspection / PIE
|
||||
|
||||
| Question | Why | Method | Priority |
|
||||
|---|---|---|---|
|
||||
| Enemy ASC accessor impact | Static mismatch; need consumers | PIE + AbilitySystemInspector | High |
|
||||
| Default attribute values after spawn | No apply path found | PIE attribute values after possess | High |
|
||||
| Dual HUD coexistence | Two static paths | Observe both overlay and UpdatePlayerHUD | Medium |
|
||||
| Session create/find/join | Latent online ops | Network test after Pass 4 | Medium |
|
||||
| Ability Server RPC reliability / prediction feel | Flags unread | Multi-client ability press | Medium |
|
||||
| Wizard BeginPlay skipping Parent | May leave InitialSpawnLocation unset | Spawn Wizard → death/respawn location | Medium |
|
||||
|
||||
---
|
||||
|
||||
## Requires broader filesystem/configuration inspection
|
||||
|
||||
| Question | Search | Priority |
|
||||
| Confirmed finding | Issue | Runtime question |
|
||||
|---|---|---|
|
||||
| OnlineSubsystem / Steam settings location | Config/**, Plugins/**/Config, Saved/Config | Medium |
|
||||
| GameInstance class assignment outside DefaultEngine sample | INI + referencers of GI_Dungeoneer | Medium |
|
||||
| Enemy ASC vs GetASC | Incomplete Refactor | PIE impact |
|
||||
| Dual HUD paths | Incomplete Refactor | Which drives bars? |
|
||||
| DefaultAttributes unused | Partially Implemented | Spawn attribute source? |
|
||||
| Cleric 004 empty SpawnActor + mana bypass | Existing Baseline Defect | PIE behavior |
|
||||
| Gameplay hit windows depend on Multicast montage notify eval on server | Technical Debt / static risk | Does server always evaluate notifies? |
|
||||
| Interrupt may skip AN_AttackComplete | Incomplete Refactor | Stuck CurrentlyAttacking? |
|
||||
| Cleric AN_Ability_001 / 003 dead receivers | Existing Baseline Defect / Technical Debt | Cosmetic-only primary attack? |
|
||||
|
||||
---
|
||||
|
||||
## Requires manual editor inspection
|
||||
## Requires further inspection
|
||||
|
||||
| Question | Why | Paths |
|
||||
| Question | Method | Priority |
|
||||
|---|---|---|
|
||||
| Montage notify timings | Registry tags limited | Character montages |
|
||||
| DEPRECATED comment-box visual regions | find_nodes Comment returned [] | BP_PlayerCharacterBase / children EventGraphs |
|
||||
| CustomEvent Reliable vs Unreliable | ObjectTools on node failed | Server_/Multicast_ events |
|
||||
| Notify trigger times / sections | Manual Editor | Medium |
|
||||
| Interrupt cleanup | PIE | High |
|
||||
| GE/cue referencers | Pass 7 | High |
|
||||
| Enemy BP AI | Pass 9 | High |
|
||||
| Sessions / frontend | Pass 4 | Medium |
|
||||
| Paladin block absorb (PlayerHitCheck) | Graph walk (non-anim) | Medium |
|
||||
|
||||
---
|
||||
|
||||
## Tool and environment limitations
|
||||
|
||||
| Item | Detail | Impact |
|
||||
|---|---|---|
|
||||
| Semantic Search | HTTP 401 / no API key | No semantic discovery |
|
||||
| CustomEvent FunctionFlags | list_properties failed on event nodes | RPC reliability Unknown |
|
||||
| Comment boxes | find_nodes(title=Comment) empty | Visual DEPRECATED regions Unknown |
|
||||
| Git | Available (baseline commit exists) | Dirty-tree gate works |
|
||||
| No PIE in Batch 3 | Constraint honored | Runtime questions deferred |
|
||||
|
||||
---
|
||||
|
||||
## Naming ambiguities
|
||||
|
||||
| Item | Status |
|
||||
| Item | Impact |
|
||||
|---|---|
|
||||
| Amazon vs Amazonian | Still open for GE folder naming (Pass 7) |
|
||||
| WBP_PlayerHUD | **Resolved** — AHUD named like a widget |
|
||||
|
||||
---
|
||||
|
||||
## Conflicting evidence
|
||||
|
||||
| Conflict | Current resolution | Remaining |
|
||||
|---|---|---|
|
||||
| Enemy ASC ownership vs accessor | Confirmed static defect | PIE impact |
|
||||
| Default attributes present vs unused | BP_PlayerState=None; C++ unused; character GEs orphaned | Who applies GEs if anyone |
|
||||
| URIRGameplayAbility "all abilities" vs legacy BP | Legacy active; GA scaffolding only | Pass 7 reconfirm |
|
||||
| Dual HUD systems | Both connected | PIE which is authoritative for bars |
|
||||
| Montage `Notifies` property unreadable | Times Unknown; presence via deps |
|
||||
| AnimNotifyList registry tag empty for BP notifies | Do not trust tag alone |
|
||||
| AnimGraph / transition DSL empty | State drivers via EventGraph + VariableGet |
|
||||
| CustomEvent Reliable flags | Unknown |
|
||||
| No PIE in Batch 4A | Runtime deferred |
|
||||
|
||||
---
|
||||
|
||||
## Priority order for later verification
|
||||
|
||||
1. Batch 4 Pass 7 — GE/cue/tag inventory
|
||||
2. Pass 8 — AnimNotify → UseAbility wiring
|
||||
3. Pass 9 — enemy Blueprint AI
|
||||
4. Pass 4 — sessions / frontend
|
||||
5. Controlled PIE for ASC, attributes, dual HUD, enemy GetASC, Cleric 004 / Wizard spawn
|
||||
1. Pass 7 — GE/cue/tag inventory
|
||||
2. Pass 9 — enemy Blueprint AI
|
||||
3. Pass 4 — sessions / frontend
|
||||
4. Controlled PIE — dual HUD, notify interrupt, server montage eval, Cleric 001/004
|
||||
|
||||
@@ -5,56 +5,36 @@
|
||||
- **Scope:** Compact cross-model index of material findings. Full analysis lives in linked docs.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Last completed pass:** Pass 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Every batch
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1 evidence rows (modules, native hierarchy, GAS ownership, plugins, config)
|
||||
- Batch 2 evidence rows (BP hierarchy, legacy abilities, WBP_PlayerHUD, BP_PlayerState)
|
||||
- Batch 3 evidence rows (per-character Ability 001–004 paths, RPCs, resources, montages)
|
||||
- Batch 1–3 evidence rows
|
||||
- Batch 4A Pass 8 AnimBP / Montage / AnimNotify rows
|
||||
|
||||
### Pending sections
|
||||
- GE/cue referencer rows (Pass 7)
|
||||
- AnimNotify → UseAbility rows (Pass 8)
|
||||
|
||||
---
|
||||
|
||||
| System | Subsystem | Finding | Evidence type | Classification | Exact source | Exact symbol | Blueprint path | Graph | Node/event | Asset/config | Doc | Confidence | Remaining verification |
|
||||
|--------|-----------|---------|---------------|----------------|--------------|--------------|----------------|-------|------------|--------------|-----|------------|------------------------|
|
||||
| Module | Descriptor | Single runtime module REALMSINRUIN; Engine 5.8 | Observed Implementation | Intended Behavior | REALMSINRUIN_DEV.uproject | Modules[REALMSINRUIN] | — | — | — | REALMSINRUIN_DEV.uproject | 02 | High | — |
|
||||
| Character | Player ASC | ASC owned by PlayerState; Mixed replication | Observed Implementation | Intended Behavior | RIRPlayerState.cpp | CreateDefaultSubobject ASC | BP_PlayerState | — | — | — | 03,06,08 | High | Runtime values |
|
||||
| Character | GetASC | Base GetASC reads PlayerState only | Observed Implementation | Incomplete Refactor | RIRBaseCharacter.cpp | GetAbilitySystemComponent | — | — | — | — | 03,06,13 | High | PIE on enemy |
|
||||
| GAS | Ability class | URIRGameplayAbility empty; no subclasses | Observed Implementation | Partially Implemented | RIRGameplayAbility.* | InstancingPolicy | — | — | — | — | 03,06 | High | Pass 7 |
|
||||
| GAS | Default GE | BP_PlayerState DefaultAttributesGameplayEffect=None | Observed Implementation | Partially Implemented | ObjectTools CDO | defaultAttributesGameplayEffect | BP_PlayerState | — | — | — | 03,06,13 | High | Other apply sites |
|
||||
| GAS | Orphan GE | GE_Cleric/Wizard_DefaultAttributes unwired; 0 referencers | Observed Implementation | Present but Unconnected | AssetTools refs | — | Player_Cleric / Wizard | — | — | GE_*_DefaultAttributes | 06 | High | Pass 7 |
|
||||
| Ability | Input | IA_Ability_001–004 Started→Server_Ability_*_Begin | Observed Implementation | Intended Behavior | BlueprintTools | EnhancedInputAction | BP_PlayerCharacterBase | EventGraph | IA_Ability_* | IA_Ability_* | 05,08 | High | — |
|
||||
| Ability | Base stub | Server_Ability_*_Begin PrintString Override | Observed Implementation | Partially Implemented | get_connected_subgraph | PrintString | BP_PlayerCharacterBase | EventGraph | Server_Ability_001_Begin | — | 05 | High | — |
|
||||
| Ability | Paladin 001 | Begin montage + UseAbility001 Authority BoxOverlap ApplyDamage | Observed Implementation | Implemented | get_connected_subgraph | ApplyDamage | Player_Paladin | EventGraph | UseAbility001 | Ability001Montages | 05,08 | High | Notify caller Pass 8 |
|
||||
| Ability | Paladin 002 | Block state Begin/End; no ApplyDamage in Begin | Observed Implementation | Partial | get_connected_subgraph | IsBlocking | Player_Paladin | EventGraph | Server_Ability_002_* | — | 05 | High | Hit absorb Pass 8 |
|
||||
| Ability | Paladin 003 | Mana + ChargeTimeline + ChargeBox ApplyDamage | Observed Implementation | Implemented | get_connected_subgraph | ChargeBox | Player_Paladin | EventGraph | Charge / Client_Charge | — | 05 | High | — |
|
||||
| Ability | Paladin 004 | Mana + montage + SphereOverlap ApplyDamage; empty particle | Observed Implementation | Implemented / Partial FX | get_connected_subgraph | UseAbility004 | Player_Paladin | EventGraph | UseAbility004 | Paladin_Ability004_Montage | 05,10 | High | — |
|
||||
| Ability | Amazonian 001 | Same pattern as Paladin melee; known working runtime | Observed Implementation + Observed Runtime Behavior | Implemented | get_connected_subgraph | UseAbility001 | Player_Amazonian | EventGraph | Server_Ability_001_Begin | Amazon Attack montages | 05,08 | High | — |
|
||||
| Ability | Amazonian 002–004 | Inherited PrintString only | Observed Implementation | Stub | list_events | bIsImplemented | Player_Amazonian | — | — | — | 05 | High | — |
|
||||
| Ability | Amazonian death | AnyDamage → DEPRECATED_CurrentHealth → PlayerDeath | Observed Implementation | Partial (legacy health) | get_connected_subgraph | ReceiveAnyDamage | Player_Amazonian | EventGraph | ReceiveAnyDamage | — | 05 | High | — |
|
||||
| Ability | Cleric 001 | Montage only; no UseAbility001 | Observed Implementation | Partial | get_connected_subgraph | Multicast_PlayMontage | Player_Cleric | EventGraph | Server_Ability_001_Begin | — | 05 | High | — |
|
||||
| Ability | Cleric 002 | Heal Players via RecoverPlayerHealth; empty particle | Observed Implementation | Partial | get_connected_subgraph | UseAbility002 | Player_Cleric | EventGraph | UseAbility002 | — | 05 | High | — |
|
||||
| Ability | Cleric 003 | DivineCircle timer ConcentrateHandle ApplyDamage; End cleans | Observed Implementation | Implemented | get_connected_subgraph | ConcentrateHandle | Player_Cleric | EventGraph | Server_Ability_003_* | — | 05 | High | — |
|
||||
| Ability | Cleric 004 | Mana CanUse unwired; SpawnActor Class empty | Observed Implementation | Existing Baseline Defect | get_connected_subgraph | SpawnActor | Player_Cleric | EventGraph | UseAbility004 | BP_PlayerProjectile unwired | 05,13 | High | PIE |
|
||||
| Ability | Wizard | No Server_Ability_* / UseAbility*; inherit stubs | Observed Implementation | Stub | list_events + EventGraph | — | Player_Wizard | EventGraph | — | NS_Wizard_Ability001 unwired | 05,08 | High | — |
|
||||
| Ability | Gunslinger | IsDataOnly; only base deps; inherit stubs | Observed Implementation | Stub / Existing Baseline Defect | get_asset_tags | IsDataOnly | Player_Gunslinger | — | — | — | 05,08 | High | — |
|
||||
| Ability | Parent call | Paladin/Amazonian/Cleric ability overrides skip Parent | Observed Implementation | Incomplete Refactor | get_connected_subgraph | Parent call absent | Player_* | EventGraph | Server_Ability_*_Begin | — | 05 | High | — |
|
||||
| Ability | Multicast | Multicast_PlayMontage→PlayMontage | Observed Implementation | Intended Behavior | get_connected_subgraph | PlayMontage | BP_PlayerCharacterBase | EventGraph | Multicast_PlayMontage | — | 05 | High | — |
|
||||
| Ability | End stubs | Most child Ends missing; base End empty | Observed Implementation | Partially Implemented | list_events | Server_Ability_*_End | children | EventGraph | — | — | 05 | High | Pass 8 cleanup |
|
||||
| Anim | Montages | Per-class Attack/Ability montages seeded | Observed Implementation | — | Multicast pins / deps | Ability001Montages | Player_* | EventGraph | Multicast_PlayMontage | /Game/.../AnimMontages/... | 10 | High | Pass 8 notifies |
|
||||
| HUD | Legacy | Server_UpdateHUD uses DEPRECATED health/mana % | Observed Implementation | Incomplete Refactor | get_connected_subgraph | UpdatePlayerHUD | BP_PlayerCharacterBase | EventGraph | Server_UpdateHUD | DEPRECATED_* | 05,06,11 | High | PIE dual HUD |
|
||||
| HUD | Native | InitOverlay ASC delegates | Observed Implementation | Partially Implemented | RIRHUD.cpp | InitOverlay | WBP_PlayerHUD | — | — | WBP_Overlay | 03,11 | High | Widget bindings |
|
||||
| HUD | Class | WBP_PlayerHUD parent RIRHUD (AHUD) | Observed Implementation | Technical Debt (naming) | get_asset_tags | ParentClass | WBP_PlayerHUD | — | — | — | 03,11,13 | High | — |
|
||||
| Framework | GM | HUDClass=WBP_PlayerHUD; PC=PC_Character; PS=BP_PlayerState | Observed Implementation | Intended Behavior | ObjectTools CDO | HUDClass | GM_Dungeoneer | — | — | — | 03,11 | High | — |
|
||||
| Framework | PC | IMC_PlayerDefault + IA_Movement | Observed Implementation | Intended Behavior | ObjectTools CDO | PlayerMappingContext | PC_Character | — | — | IMC_PlayerDefault | 03,08 | High | Ability IMC add |
|
||||
| Character | Death | PlayerDeath→IsDead→respawn destroy→PlayerRespawn | Observed Implementation | Partially Implemented | get_connected_subgraph | Server_RespawnPlayer | BP_PlayerCharacterBase | EventGraph | PlayerDeath | — | 05 | High | Other callers |
|
||||
| Enemy | BP structure | Base+Skeleton Tick/Overlap only; BPI GetEnemyREF | Observed Implementation | — | list_events | ReceiveTick | BP_Enemy_* | EventGraph | — | — | 09 | Medium | Pass 9 graphs |
|
||||
| Interface | BPI set | Four BPIs: PlayerCharacter, EnemyCharacter, PlayerController, GameMode | Observed Implementation | — | find_assets | BPI_ | Interfaces/ | — | — | — | 03 | High | — |
|
||||
| Continuity | Editor | PIE=false; level Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | Batch 3 close |
|
||||
| Repo | Git | Archaeology Markdown only dirty after Batch 3 | Observed Implementation | — | git status | — | — | — | — | — | 15 | High | — |
|
||||
| Anim | Caller | UseAbility001 called by AN_Ability_001 | Observed Implementation | Intended Behavior | read_graph_dsl | UseAbility001 | AN_Ability_001 | Received_Notify | Received_Notify | .../PlayerCharacterRelated/AN_Ability_001 | 10,05 | High | Notify times |
|
||||
| Anim | Caller | UseAbility004 called by AN_Ability_004 | Observed Implementation | Intended Behavior | deps + notify body | UseAbility004 | AN_Ability_004 | Received_Notify | — | .../AN_Ability_004 | 10 | High | Times |
|
||||
| Anim | Cleanup | AN_AttackComplete → SetIsAttacking clears CurrentlyAttacking | Observed Implementation | Intended Behavior | read_graph_dsl | SetIsAttacking | AN_AttackComplete | Received_Notify | — | .../AN_AttackComplete | 10,05 | High | Interrupt PIE |
|
||||
| Anim | Paladin ABP | Locomotion Idle/WalkRun/Charge/Block/Death; reads IsBlocking/IsCharging/IsDead | Observed Implementation | Intended Behavior | list_graphs + EventGraph | IsBlocking | ABP_Paladin | EventGraph / Locomotion | BlueprintUpdateAnimation | .../Paladin/ABP_Paladin | 10,08 | High | — |
|
||||
| Anim | Amazon ABP | Locomotion Idle/WalkRun/Death only | Observed Implementation | — | list_graphs | — | ABP_Amazon | Locomotion | — | .../Amazon/ABP_Amazon | 10 | High | — |
|
||||
| Anim | Cleric ABP | Divine Circle state; DivineCircleActive? from Cleric | Observed Implementation | Intended Behavior | list_graphs + EventGraph DSL | DivineCircleActive? | ABP_Cleric | EventGraph | BlueprintUpdateAnimation | .../Cleric/ABP_Cleric | 10 | High | — |
|
||||
| Anim | Wizard ABP | Locomotion only; no class montages | Observed Implementation | Stub context | find_assets + deps | — | ABP_Wizard | Locomotion | — | .../Wizard/ABP_Wizard | 10 | High | — |
|
||||
| Anim | Gunslinger | No AnimBP dependency | Observed Implementation | Existing Baseline Defect | get_dependencies | IsDataOnly | Player_Gunslinger | — | — | — | 10,08 | High | — |
|
||||
| Anim | Cleric 001 | AN_Ability_001 present; UseAbility001 unimplemented | Observed Implementation | Existing Baseline Defect | list_events + deps | UseAbility001 | Player_Cleric | — | AN_Ability_001 | Cleric_PrimaryAttack_* | 10,05 | High | — |
|
||||
| Anim | Cleric 003 | AN_Ability_003 vestigial; damage in ConcentrateHandle | Observed Implementation | Technical Debt | Pass 6+8 | UseAbility003 | Player_Cleric | EventGraph | ConcentrateHandle | Cleric_Ability003_Montage | 10,05 | High | — |
|
||||
| Anim | Unconnected | Cleric_Hu_M_Spell_Staff_Up_Impact_Montage 0 referencers | Observed Implementation | Present but Unconnected | get_referencers | — | — | — | — | .../Cleric_Hu_M_Spell_Staff_Up_Impact_Montage | 10 | High | — |
|
||||
| Anim | Tool limit | Montage Notifies array unreadable; AnimNotifyList empty for BP notifies | Unknown — Tool Limitation | — | ObjectTools | Notifies | AnimMontage | — | — | — | 10,13 | High | Manual Editor |
|
||||
| Ability | Multicast risk | Hit windows depend on server montage notify evaluation | Inferred | Technical Debt | architecture | Multicast_PlayMontage | BP_PlayerCharacterBase | EventGraph | Multicast_PlayMontage | — | 10,13 | Medium | PIE |
|
||||
| Ability | Paladin 001 | Pass 6 Implemented; Pass 8 no status change (qualified) | Observed Implementation | Implemented | — | AN_Ability_001 | Player_Paladin | — | — | Attack_*_Fast_Montage | 05,10 | High | — |
|
||||
| GAS | Default GE | BP_PlayerState DefaultAttributes=None | Observed Implementation | Partially Implemented | ObjectTools CDO | defaultAttributesGameplayEffect | BP_PlayerState | — | — | — | 06 | High | Pass 7 |
|
||||
| Continuity | Editor | PIE=false; Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | — |
|
||||
| Repo | Git | Clean at Batch 4A start; Archaeology md only after | Observed Implementation | — | git status | — | — | — | — | — | 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 3 (Pass 6)
|
||||
- **Next authorized work:** Wait for user — recommend **Batch 4** (Pass 4 sessions / Pass 7 GAS / Pass 8 animation — only as authorized)
|
||||
- **Last completed pass / batch:** Batch 4A (Pass 8)
|
||||
- **Next authorized work:** Wait for user — recommend **Pass 7** (GAS) or remaining Batch 4 passes as separately authorized
|
||||
|
||||
## Phase completed
|
||||
|
||||
| Item | Value |
|
||||
|------|--------|
|
||||
| Phase | Phase 1 — Static Architecture (in progress) |
|
||||
| Batch completed | Batch 3 — Per-character ability archaeology |
|
||||
| Passes completed | Pass 6 (Paladin → Amazonian → Cleric → Wizard → Gunslinger) |
|
||||
| Batch completed | Batch 4A — Animation dependencies and ability callbacks |
|
||||
| Passes completed | Pass 8 |
|
||||
| Date completed | 2026-07-16 |
|
||||
| Model identifier | Cursor Grok 4.5 |
|
||||
|
||||
@@ -22,150 +22,114 @@
|
||||
|
||||
## Repository integrity
|
||||
|
||||
### Starting state (Batch 3)
|
||||
### Starting state (Batch 4A)
|
||||
|
||||
- **Git:** Dirty with expected Batch 2 Archaeology Markdown only (not unexpected):
|
||||
- Modified: `03`, `06`, `08`, `09`, `11`, `13`, `14`, `15`
|
||||
- Untracked: `05-LegacyAbilityArchitecture.md`
|
||||
- **Baseline commit:** `ff5640a0` Establish UE 5.8 known-good baseline with Batch 1 archaeology docs.
|
||||
- **Git:** Clean (`git status --short` empty; diffs empty).
|
||||
- **Baseline commits:** `ff5640a0` Batch 1; `0d045d14` Batch 2–3 archaeology.
|
||||
- **Authorization:** Batch 1–3 docs committed; `01-Phase-1-Plan.md` resolved as `00A-Phase-1-Execution-Plan.md` (committed).
|
||||
- **Editor:** `IsPIERunning=false`; level `/Game/_Main/Levels/Testing/Test01`; selected actor `BP_Enemy_Skeleton_C_1`.
|
||||
|
||||
### Ending state (Batch 3 close)
|
||||
### Ending state (Batch 4A close)
|
||||
|
||||
- Modified/created files: Markdown only under `Documentation/Archaeology/` (listed below).
|
||||
- **Unexpected untracked file reported (not reverted):** `Documentation/Archaeology/01-Phase-1-Plan.md` — present at close; not created by Pass 6 doc writes; contents not inspected this closeout.
|
||||
- Modified files: Markdown only under `Documentation/Archaeology/` (listed below).
|
||||
- No source, config, plugin, map, or Unreal asset writes.
|
||||
- PIE not started; level and selection not changed intentionally.
|
||||
- Ending Git check: only Archaeology Markdown dirty (confirm at close).
|
||||
- PIE not started; level and selection unchanged.
|
||||
- Ending Git: only authorized Archaeology Markdown dirty.
|
||||
|
||||
---
|
||||
|
||||
## Areas fully inspected (Batch 3 tools)
|
||||
## Areas fully inspected (Batch 4A)
|
||||
|
||||
- Player_Paladin: Ability 001–004 Begin/End/UseAbility/Charge/ChargeBox connected paths
|
||||
- Player_Amazonian: Ability 001 + UseAbility001 + ReceiveAnyDamage; 002–004 absence
|
||||
- Player_Cleric: Ability 001–004 + ConcentrateHandle/EndConcentrate + UseAbility002/004
|
||||
- Player_Wizard: EventGraph walk; alternate UseAbility/input/spell search; unwired assets
|
||||
- Player_Gunslinger: IsDataOnly confirmation; Parent-only EventGraph; inherited stubs
|
||||
- ABP_Paladin / ABP_Amazon / ABP_Cleric / ABP_Wizard structure and EventGraph ability-related reads
|
||||
- Paladin / Amazonian / Cleric ability Montages via dependency → AnimNotify BP chains
|
||||
- `AN_Ability_001–004`, `AN_AttackComplete` Received_Notify bodies
|
||||
- Wizard animation folder (ABP only; no montages)
|
||||
- Gunslinger deps (no AnimBP)
|
||||
- Pass 6 status qualification / reclassification table
|
||||
|
||||
## Areas partially inspected
|
||||
|
||||
- FCanUseMana function body (call sites only)
|
||||
- Client_Charge / ChargeTimeline numeric curve details
|
||||
- PlayerHitCheck graphs (existence known; full absorb logic → later)
|
||||
- Montage notify tracks (seeded in doc 10 → Pass 8)
|
||||
- Montage section names, blend, root motion, notify times (tool limits)
|
||||
- AnimGraph transition rule DSL (Paladin reconstructed via VariableGet; others partial)
|
||||
- `Cleric_Ability003` non-montage asset referencing AN_AttackComplete (identity only)
|
||||
|
||||
## Areas not yet inspected
|
||||
|
||||
- Frontend/session flows (Batch 4 Pass 4)
|
||||
- GE/cue systemwide inventory (Batch 4 Pass 7)
|
||||
- Animation deep dive / AnimNotify → UseAbility (Batch 4 Pass 8)
|
||||
- Enemy BP AI deep dive (Batch 4 Pass 9)
|
||||
- Full UI trees / pickups (Batch 4)
|
||||
- Cross-character migration matrix doc 07 (Pass 11)
|
||||
- Pass 7 GE/cue/tag inventory
|
||||
- Pass 4 frontend/sessions
|
||||
- Pass 9 enemy BP AI
|
||||
- Pass 10 pickups/UI trees
|
||||
- Pass 11 migration matrix
|
||||
- PIE / runtime
|
||||
|
||||
---
|
||||
|
||||
## Blueprints inspected
|
||||
## Animation assets inspected
|
||||
|
||||
| Asset | Depth |
|
||||
|-------|--------|
|
||||
| BP_PlayerCharacterBase | Correlation only (Batch 2 deep dive stands) |
|
||||
| Player_Paladin | Pass 6 full ability path reconstruction |
|
||||
| Player_Amazonian | Pass 6 full ability path reconstruction |
|
||||
| Player_Cleric | Pass 6 full ability path reconstruction |
|
||||
| Player_Wizard | Pass 6 ability + alternate path search |
|
||||
| Player_Gunslinger | Pass 6 data-only / inherited stub confirmation |
|
||||
|
||||
Referenced when required for ability identity: montage paths, MagicSpell_01_Cue, BP_PlayerProjectile (unwired), GE_* DefaultAttributes (orphans), NS_Wizard_Ability001 (unwired).
|
||||
|
||||
## C++ classes inspected
|
||||
|
||||
None new this batch (Batch 1 inventory stands).
|
||||
|
||||
## Assets / configs inspected
|
||||
|
||||
Unreal content via MCP read-only only. No config file writes.
|
||||
| ABP_Paladin, ABP_Amazon, ABP_Cleric, ABP_Wizard | Graphs, variables, EventGraph DSL where available |
|
||||
| Attack_*_Fast_Montage (Paladin); Paladin_Ability004_Montage | Deps → notifies |
|
||||
| A_Hu_F_Combat_2H_Attack* (Amazon) | Deps → notifies |
|
||||
| Cleric_PrimaryAttack_*; Cleric_Ability002/003/004_Montage | Deps → notifies |
|
||||
| AN_Ability_001–004, AN_AttackComplete | Received_Notify DSL / bodies |
|
||||
| Cleric_Hu_M_Spell_Staff_Up_Impact_Montage | Referencers = [] |
|
||||
|
||||
## Files created
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/10-AnimationDependencies.md | Draft |
|
||||
None new (updated existing `10`).
|
||||
|
||||
## Files updated
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft (major Pass 6 rewrite) |
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/10-AnimationDependencies.md | Draft (Pass 8 rewrite) |
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/08-CharacterSystems.md | Draft |
|
||||
| Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md | Draft |
|
||||
| Documentation/Archaeology/14-EvidenceIndex.md | Draft |
|
||||
| Documentation/Archaeology/15-HandoffStatus.md | Draft |
|
||||
|
||||
**03-ClassHierarchy.md not modified** (no Batch 2 structural correction required).
|
||||
**00-MCP-Capability-Calibration.md not modified.**
|
||||
**07-AbilityMigrationMatrix.md not created** (Pass 11).
|
||||
**06 not modified** (no new connected GAS interactions).
|
||||
**07 not created.**
|
||||
|
||||
## Toolsets used
|
||||
|
||||
EditorAppToolset (IsPIERunning, GetSelectedActors); SceneTools (get_current_level); AssetTools (class/tags/deps/refs); BlueprintTools (graphs/events/functions/variables/find_nodes/get_node_infos/get_connected_subgraph/read_graph_dsl); ObjectTools (get_properties).
|
||||
EditorAppToolset; SceneTools; AssetTools; BlueprintTools; ObjectTools (limited). Subagents for Paladin/Amazonian/Cleric deep walks.
|
||||
|
||||
## Tool limitations / failed queries
|
||||
|
||||
- CustomEvent Reliable/Unreliable flags: **Unknown — MCP property visibility limitation**
|
||||
- `find_nodes(title="Comment")` returned [] — comment-box regions Unknown
|
||||
- SemanticSearch unavailable
|
||||
- Some CallMcpTool invocations initially failed when `server`/`toolName` wrapper omitted; retried successfully
|
||||
- Blocked read-only continuity queries (if any): recorded as tool limitation, not mutation
|
||||
- Montage `Notifies` property unreadable
|
||||
- Asset-registry `AnimNotifyList` empty for BP notify classes
|
||||
- `read_graph_dsl` empty on AnimGraph/state/transition graphs
|
||||
- `AssetTools.get_class` Unknown tool (used tags)
|
||||
- Some CallMcpTool batches failed schema intermittently; retried
|
||||
- Notify trigger times: Unknown — Tool Limitation
|
||||
|
||||
## Contradictory evidence
|
||||
## Key Pass 8 outcomes
|
||||
|
||||
1. Dual HUD: native ASC Overlay vs DEPRECATED float UpdatePlayerHUD — both active statically.
|
||||
2. DefaultAttributes: GE assets exist (incl. character orphans); BP_PlayerState=None; C++ never applies.
|
||||
3. Enemy ASC ownership vs GetASC PlayerState path — unchanged from Batch 1.
|
||||
4. Cleric Ability 004: FCanUseMana executed but Branch uses literal true — structural defect.
|
||||
|
||||
## Unresolved naming ambiguities
|
||||
|
||||
- Amazon vs Amazonian GE folder naming (Pass 7)
|
||||
- WBP_PlayerHUD naming — resolved class-wise; name still misleading
|
||||
|
||||
## Requires Manual Editor Inspection
|
||||
|
||||
- CustomEvent Reliable/Unreliable flags
|
||||
- DEPRECATED comment-box visual boundaries
|
||||
- Montage notify tracks → UseAbility*
|
||||
|
||||
## Requires Runtime Inspection / PIE
|
||||
|
||||
- Dual HUD behavior
|
||||
- Default attribute spawn values
|
||||
- Enemy GetASC impact
|
||||
- Cleric Ability 004 / Wizard BeginPlay Parent skip
|
||||
- Ability networking feel / reliability
|
||||
1. **UseAbility* callers resolved** — AnimNotify BPs, not AnimBP graphs.
|
||||
2. **Cleanup** for notify-driven attacks — `AN_AttackComplete` → `SetIsAttacking`.
|
||||
3. **Cleric 001/003 notifies dead** — interface unimplemented.
|
||||
4. **Pass 6 primary statuses unchanged**; qualifications recorded in `10` reclassification table.
|
||||
5. **Static networking risk** — Multicast montage notify evaluation required for hit windows.
|
||||
|
||||
## Suggested next bounded task
|
||||
|
||||
**Authorize Batch 4 only** (choose one or more Passes explicitly):
|
||||
**Authorize explicitly one of:**
|
||||
|
||||
1. Pass 7 — GAS GE/cue/tag inventory
|
||||
2. Pass 8 — Animation / AnimNotify → UseAbility wiring
|
||||
3. Pass 4 — Frontend / session flows
|
||||
4. Pass 9 — Enemy BP AI
|
||||
2. Pass 9 — Enemy BP AI
|
||||
3. Pass 4 — Frontend / sessions
|
||||
|
||||
**Do not begin** Pass 11 migration matrix or PIE until authorized.
|
||||
**Do not begin** Pass 11 or PIE until authorized.
|
||||
|
||||
**Exact starting files for next model:**
|
||||
|
||||
- Read: `00`, `05`, `06`, `08`, `10`, `13`, `14`, `15`
|
||||
- For Pass 7: start GE assets under `/Game/_Main/` + ASC defaults
|
||||
- For Pass 8: start montages listed in `10-AnimationDependencies.md`
|
||||
**Starting files:** `00`, `05`, `06`, `08`, `10`, `13`, `14`, `15`.
|
||||
|
||||
## Confirmation
|
||||
|
||||
- No Unreal assets modified
|
||||
- No source/config/map/plugin modified
|
||||
- No editor state intentionally modified (PIE not started; level/selection unchanged)
|
||||
- No work beyond Pass 6 performed
|
||||
- Waiting for explicit authorization before Batch 4
|
||||
- No editor state intentionally modified
|
||||
- No work beyond Pass 8 performed
|
||||
- Waiting for explicit authorization before Pass 7 or other Batch 4 passes
|
||||
|
||||
Reference in New Issue
Block a user