Document Batch 4C Pass 9 enemy AI archaeology: missing chase and attack implementation.
Records empty enemy EventGraphs, stock AIController possession, orphan attack montage, and separates GetASC defect from chase/attack failure. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,8 +8,8 @@
|
||||
- **Tool or visibility limitations:** Inherited Blueprint variables require querying each parent; CustomEvent FunctionFlags not exposed via ObjectTools; Gunslinger FiB/IsDataOnly anomaly.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 5 (Batch 2)
|
||||
- **Next pass expected to contribute:** Batch 3 Pass 6 (per-character ability graphs)
|
||||
- **Last completed pass:** Pass 9 (Batch 4C) — enemy hierarchy/control expanded
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -19,15 +19,14 @@
|
||||
- Interface inventory under `/Game/_Main/Blueprints/Interfaces`
|
||||
- WBP_PlayerHUD asset-class resolution (AHUD, not UserWidget)
|
||||
- BP_PlayerState DefaultAttributesGameplayEffect = None
|
||||
- **Pass 9:** Enemy EventGraphs empty; stock AIController; BPI partial; no BT/BB
|
||||
|
||||
### Pending sections
|
||||
- Deep child ability graphs (Pass 6)
|
||||
- Enemy AI graph deep dive (Pass 9)
|
||||
- Frontend/session graphs (Pass 4)
|
||||
|
||||
### Evidence still required
|
||||
- Exact CustomEvent reliable flags
|
||||
- Who invokes `PlayerDeath` from damage
|
||||
- PIE possession of placed skeletons
|
||||
- CommonUI content usage
|
||||
|
||||
---
|
||||
@@ -110,16 +109,18 @@ See Batch 1 sections for `ARIRBaseCharacter`, `ARIRPlayerCharacter`, `ARIRBaseEn
|
||||
|
||||
---
|
||||
|
||||
## 3. Enemy Blueprint hierarchy (Pass 3 seed)
|
||||
## 3. Enemy Blueprint hierarchy (Pass 3 + Pass 9)
|
||||
|
||||
| Asset | Parent | Interface | Graphs | Vars | Implemented events |
|
||||
|-------|--------|-----------|--------|------|--------------------|
|
||||
| `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase` | RIRBaseEnemyCharacter | — | UCS, EventGraph | [] | BeginPlay, Tick, ActorBeginOverlap |
|
||||
| `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton` | BP_EnemyCharacterBase_C | BPI_EnemyCharacter (GetEnemyREF) | UCS, EventGraph, GetEnemyREF | [] | BeginPlay, Tick, ActorBeginOverlap |
|
||||
| Asset | Parent | Interface | Graphs | Vars | Implemented events | Pass 9 body |
|
||||
|-------|--------|-----------|--------|------|--------------------|-------------|
|
||||
| `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase` | RIRBaseEnemyCharacter | — | UCS, EventGraph | [] | BeginPlay, Tick, ActorBeginOverlap | **Empty** (unconnected) |
|
||||
| `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton` | BP_EnemyCharacterBase_C | BPI_EnemyCharacter (GetEnemyREF only) | UCS, EventGraph, GetEnemyREF | [] | BeginPlay, Tick, ActorBeginOverlap | **Empty**; GetEnemyREF→self |
|
||||
|
||||
**Deps (Skeleton):** SKM_Skeleton_Guard_Body, BPI_EnemyCharacter, BP_EnemyCharacterBase, ABP_Skeleton, REALMSINRUIN
|
||||
**Control (CDO + C_1 instance):** `AIControllerClass=/Script/AIModule.AIController`; `AutoPossessAI=PlacedInWorld`.
|
||||
|
||||
Deep AI graph analysis deferred to Pass 9.
|
||||
**Deps (Skeleton):** SKM_Skeleton_Guard_Body, BPI_EnemyCharacter, BP_EnemyCharacterBase, ABP_Skeleton, REALMSINRUIN.
|
||||
|
||||
**Pass 9:** No BehaviorTree/Blackboard/custom AIController in project. Chase/attack **Implementation Missing**. Full analysis: `09-EnemyAI-StaticAnalysis.md`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -218,7 +218,11 @@ Reliability: **Unknown — MCP property visibility limitation** for all CustomEv
|
||||
| Default spawn resources | Not from abilities | Orphan `GE_*_DefaultAttributes`; native AttributeSet Init* used | Defaults unreachable via GE |
|
||||
| UI | Server_UpdateHUD DEPRECATED % | OverlayWidgetController ASC | Dual, unsynchronized |
|
||||
|
||||
Full matrices: `06-PartialGASArchitecture.md`. Ability status labels from Pass 6/8 are **unchanged** by Pass 7.
|
||||
### Pass 9 — Player ApplyDamage vs enemy reception
|
||||
|
||||
Playable Paladin/Amazonian/Cleric attacks apply `ApplyDamage` (Pass 6). Enemy Blueprints implement **no** `ReceiveAnyDamage` / health mutation / death. Enemy ASC Health is not bridged from ApplyDamage. **Static implication:** player attack damage paths have **no observed enemy health/death consumer** — Existing Baseline Defect on the enemy side; player attack graph status unchanged.
|
||||
|
||||
Full matrices: `06-PartialGASArchitecture.md`, `09-EnemyAI-StaticAnalysis.md`. Ability status labels from Pass 6/8 are **unchanged** by Pass 7/9.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
- **Tool or visibility limitations:** `GameplayEffectComponents` array unreadable via ObjectTools (cues/component tags Unknown on GE CDOs); BlueprintGeneratedClass CDO sometimes rejects duration/modifier property names depending on load path — modifiers recovered via successful GE CDO queries on Default__ / generated class where available; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 7 (Batch 4B)
|
||||
- **Next pass expected to contribute:** Pass 9 (enemy) / Pass 10 (pickup graphs deep) / Pass 4 when authorized — not auto-started
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -182,12 +182,15 @@ Defined in `Config/DefaultGameplayTags.ini` (ImportTagsFromConfig=True).
|
||||
|
||||
## 9. Enemy GAS compatibility table
|
||||
|
||||
| Consumer | Lookup method | Expected ASC owner | Static result | Potential impact | Runtime verification |
|
||||
|---|---|---|---|---|---|
|
||||
| `IAbilitySystemInterface` / `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent` | `ARIRBaseCharacter::GetAbilitySystemComponent` → `GetPlayerState<ARIRPlayerState>()` | Enemy self ASC | **nullptr** (no PlayerState ASC) | EffectActor early-out; any BP using library GetASC | Requires Runtime Inspection |
|
||||
| Enemy native code using `AbilitySystemComponent` member | Direct `TObjectPtr` on enemy | Self | Valid if used | Unknown consumers | Pass 9 |
|
||||
| Player EffectActor target | Library GetASC on player character | PlayerState ASC | Valid via character GetASC → PS | Potions work on players (static) | PIE authority |
|
||||
| Blueprint enemy GetASC | Inherited base | — | nullptr | Incomplete Refactor / Existing Baseline Defect | PIE |
|
||||
| Consumer | ASC lookup method | Expected owner | Static result | Null behavior | Potential impact | Runtime verification |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `ARIREffectActor::ApplyEffectToTarget` | Library GetASC → base GetASC → PlayerState | Enemy self ASC | **nullptr** | Early return | Potions/effects skip enemies | PIE |
|
||||
| Enemy direct ASC member | Native TObjectPtr | Self | Valid if used | — | No combat consumer in enemy BP (Pass 9) | — |
|
||||
| Enemy BP combat / chase | N/A | — | **No ASC dependency** | — | GetASC defect **does not** cause chase/attack failure | — |
|
||||
| Player ApplyDamage → enemy | Engine TakeDamage (not ASC) | — | No enemy ReceiveAnyDamage / health mutation | Damage event may fire with no health consumer | Combat kill path missing on enemy | PIE |
|
||||
| Enemy AttributeSet Health | Direct | Self | Exists; Init defaults only | — | Scaffolding for combat | PIE |
|
||||
|
||||
**Pass 9 addition:** Enemy EventGraphs contain no ASC reads/writes. Chase/attack failure classification is **Implementation Missing**, independent of the GetASC Incomplete Refactor.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,75 +2,240 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Native enemy class (Batch 1) + Pass 3 structural Blueprint inventory. Deep Tick/overlap/AI graph walk deferred to Pass 9.
|
||||
- **Inspection method:** Native read; Batch 2 AssetTools tags + BlueprintTools list_graphs/events/variables/deps.
|
||||
- **Scope:** Complete static reconstruction of enemy control, targeting, chase, attack, damage, death, animation callbacks, navigation context, and enemy-GAS boundary (Pass 9). Builds on Batch 1 native + Pass 3 structural seeds.
|
||||
- **Inspection method:** Native C++ read of `ARIRBaseEnemyCharacter` / `ARIRBaseCharacter` / `ITargetInterface`; BlueprintTools EventGraph DSL + interface graphs; AssetTools find/deps/refs; ObjectTools CDO + placed-instance properties; SceneTools find_actors in Test01; project-wide AI asset/subclass searches.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** AnimGraph/transition DSL empty (Death transition rule not fully readable); CharacterMovement orient flags partially unreadable; no PIE possession/nav query validation.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 3 (Batch 2) — structural only
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 9
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized — not auto-started
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Native enemy ASC ownership and highlight interface
|
||||
- Confirmation: no chase/attack/MoveTo in native C++
|
||||
- Blueprint child paths + Pass 3 structural sheets
|
||||
- BPI_EnemyCharacter API surface
|
||||
- Native enemy ASC, highlight, no native AI combat
|
||||
- Full BP_EnemyCharacterBase / BP_Enemy_Skeleton structural + EventGraph reconstruction
|
||||
- BPI_EnemyCharacter implementation status
|
||||
- Controller / AutoPossessAI class + instance
|
||||
- AI framework negative inventory
|
||||
- Targeting / chase / attack absence
|
||||
- Attack montage orphan
|
||||
- ABP_Skeleton locomotion + Death + IsDead forced false
|
||||
- Damage/death reception absence at BP layer
|
||||
- Enemy GAS compatibility (Pass 7 + Pass 9)
|
||||
- Test01 navigation context (no NavMeshBoundsVolume / RecastNavMesh)
|
||||
- Root-cause classifications for chase and attack
|
||||
|
||||
### Pending sections
|
||||
- Connected Tick / overlap / timer / MoveTo graphs on enemy BPs
|
||||
- AIControllerClass / AutoPossessAI on CDOs (reconfirm)
|
||||
- Consumers of GetASC on enemies
|
||||
- Runtime possession confirmation under PIE
|
||||
- Whether engine TakeDamage has any other consumer outside enemy BP
|
||||
- ABP Death transition condition exact VariableGet wiring (DSL empty)
|
||||
|
||||
### Evidence still required
|
||||
- Where chase/attack was intended to live (Blueprint vs missing)
|
||||
- Runtime root cause of nonfunctional chase/attack — Requires Runtime Inspection
|
||||
- PIE: does stock AIController possess placed skeletons?
|
||||
- PIE: player ApplyDamage visual/health effect on skeleton
|
||||
- Manual Editor: ABP Death transition rule pins
|
||||
|
||||
---
|
||||
|
||||
## Native findings
|
||||
## Executive summary
|
||||
|
||||
**Observed Implementation:** `ARIRBaseEnemyCharacter` implements:
|
||||
**Observed Runtime Behavior (project brief):** Enemy chase and attack are nonfunctional — Existing Baseline Defect.
|
||||
|
||||
- ASC + AttributeSet on self (Minimal replication)
|
||||
- InitAbilityActorInfo(this, this) in BeginPlay
|
||||
- ITargetInterface highlight via custom depth
|
||||
- Visibility collision on mesh
|
||||
**Pass 9 static conclusion:**
|
||||
|
||||
**Observed Implementation:** No AIController subclass, no MoveTo, no perception, no attack timers in native.
|
||||
| System | Primary classification |
|
||||
|--------|------------------------|
|
||||
| Target acquisition | **Implementation Missing** |
|
||||
| Chase | **Implementation Missing** (secondary: no navmesh in Test01) |
|
||||
| Attack initiation | **Implementation Missing** (interface stub + orphan montage) |
|
||||
| Attack damage | **Implementation Missing** |
|
||||
| Attack cleanup | **Missing** |
|
||||
| Damage reception | **Implementation Missing** (BP); ASC Health unconnected to ApplyDamage |
|
||||
| Death | **Connected but Incomplete** (ABP Death state exists; `IsDead` forced `false` every Update) |
|
||||
| Enemy GE compatibility | **Existing Baseline Defect** (GetASC → nullptr); separate from chase/attack |
|
||||
|
||||
**Calibration (prior Observed Implementation):** Stock `/Script/AIModule.AIController`; AutoPossessAI PlacedInWorld on skeleton instance; no project BehaviorTree assets.
|
||||
|
||||
**Issue:** Existing Baseline Defect (enemy chase/attack nonfunctional per project brief).
|
||||
Chase and attack failures are **not** attributable to the enemy ASC accessor defect. They are attributable to **absence of connected chase/attack implementation** at native and Blueprint layers.
|
||||
|
||||
---
|
||||
|
||||
## Pass 3 Blueprint structure (not Pass 9 deep dive)
|
||||
## 1. Enemy class and control matrix
|
||||
|
||||
### `BP_EnemyCharacterBase`
|
||||
| Asset/class | Parent | Controller class | AutoPossessAI | Movement component | AnimBP | Interfaces | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| `ARIRBaseEnemyCharacter` | `ARIRBaseCharacter` + `ITargetInterface` | None set in native | N/A | Inherited CharacterMovement | N/A | ITargetInterface (Highlight/UnHighlight) | Active (ASC+highlight only) | RIRBaseEnemyCharacter.cpp |
|
||||
| `BP_EnemyCharacterBase` | `RIRBaseEnemyCharacter` | `/Script/AIModule.AIController` | PlacedInWorld | CharMoveComp (inherited) | None on base | None | Scaffolding / empty graphs | CDO + EventGraph DSL |
|
||||
| `BP_Enemy_Skeleton` | `BP_EnemyCharacterBase_C` | `/Script/AIModule.AIController` | PlacedInWorld | CharMoveComp | `ABP_Skeleton` | `BPI_EnemyCharacter` (GetEnemyREF only) | Scaffolding / empty combat graphs | CDO + DSL |
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase` |
|
||||
| Parent | `RIRBaseEnemyCharacter` |
|
||||
| IsDataOnly | True |
|
||||
| Graphs | UserConstructionScript, EventGraph |
|
||||
| Variables | [] |
|
||||
| Implemented events | ReceiveBeginPlay, ReceiveTick, ReceiveActorBeginOverlap |
|
||||
| Deps | `/Script/REALMSINRUIN` only |
|
||||
**Native-only behavior (Observed Implementation):** ASC + AttributeSet on self (Minimal); `InitAbilityActorInfo(this,this)` in BeginPlay; mesh Visibility Block; custom-depth highlight. **No** MoveTo, perception, attack, damage, or health mutation in native.
|
||||
|
||||
### `BP_Enemy_Skeleton`
|
||||
**Blueprint EventGraphs (both base and Skeleton) — Observed Implementation:**
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton` |
|
||||
| Parent | `BP_EnemyCharacterBase_C` |
|
||||
| Interface | `BPI_EnemyCharacter` (`GetEnemyREF`) |
|
||||
| Graphs | UCS, EventGraph, GetEnemyREF |
|
||||
| Variables | [] |
|
||||
| Implemented events | ReceiveBeginPlay, ReceiveTick, ReceiveActorBeginOverlap |
|
||||
| Deps | SKM_Skeleton_Guard_Body, BPI_EnemyCharacter, BP_EnemyCharacterBase, ABP_Skeleton, REALMSINRUIN |
|
||||
```
|
||||
(event EventBeginPlay)
|
||||
(event Collision|EventActorBeginOverlap (OtherActor))
|
||||
(event EventTick (DeltaSeconds))
|
||||
```
|
||||
|
||||
### `BPI_EnemyCharacter`
|
||||
All three entry nodes are **Present but Unconnected** (no wired body). Variables on both BPs: **[]**.
|
||||
|
||||
Graphs: `GetEnemyREF`, `AddPlayerTarget`, `EnemyMeleeAttack` — **Documented Intent** surface for targeting/melee; connected implementations on Skeleton/base **not traced in Batch 2** (Pass 9).
|
||||
**GetEnemyREF (Skeleton only):** returns `self` — Observed Implementation (trivial).
|
||||
|
||||
**BPI members not implemented on Skeleton/base:** `AddPlayerTarget`, `EnemyMeleeAttack` — Documented Intent only on interface asset.
|
||||
|
||||
---
|
||||
|
||||
## 2. Current-level instance matrix
|
||||
|
||||
Level: `/Game/_Main/Levels/Testing/Test01`
|
||||
|
||||
| Instance | Class | Controller override | AutoPossess override | Relevant instance overrides | Navigation context | Evidence |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `BP_Enemy_Skeleton_C_1` | `BP_Enemy_Skeleton_C` | `/Script/AIModule.AIController` (same as CDO) | PlacedInWorld | **None observed** vs CDO | No NavMeshBoundsVolume; no RecastNavMesh; only AbstractNavData fallback | get_properties; find_actors |
|
||||
| `BP_Enemy_Skeleton_C_0` | same | Unknown — not fully property-dumped | Unknown | Unknown | same level | find_actors presence only |
|
||||
|
||||
Selected actor at Pass 9 start/end: `BP_Enemy_Skeleton_C_1` — unchanged.
|
||||
|
||||
**Possession note:** `AutoPossessAI=PlacedInWorld` statically allows placed instances to receive AI possession; **spawned** enemies would not auto-possess under this setting. Runtime possession state: **Unknown** without PIE. Stock `AIController` provides no project behavior tree / blackboard / custom logic.
|
||||
|
||||
---
|
||||
|
||||
## 3. AI framework inventory
|
||||
|
||||
| System | Assets/classes found | Active reference path | Status | Evidence |
|
||||
|---|---|---|---|---|
|
||||
| Behavior Tree | **None** (`find_assets` name BehaviorTree `/Game` → []) | None | Missing | find_assets |
|
||||
| Blackboard | **None** (`find_assets` Blackboard → []) | None | Missing | find_assets |
|
||||
| StateTree | **None** (`find_assets` StateTree → []) | None | Missing | find_assets |
|
||||
| EQS / EnvQuery | **None** (`find_assets` EnvQuery → []) | None | Missing | find_assets |
|
||||
| AIPerception assets | **None** (`find_assets` AIPerception → []) | None | Missing | find_assets |
|
||||
| PawnSensing | None on enemy components | None | Missing | ActorTools component list |
|
||||
| Custom AIController | search_subclasses → only engine `AIController`, `DetourCrowdAIController`, `GridPathAIController` | Assigned as stock AIController on enemy CDOs | Missing (project) | search_subclasses; CDO |
|
||||
| MassAI / SmartObject | Not searched by name beyond above; no enemy component refs | None observed | Missing (Observed absence on enemies) | component inventory |
|
||||
|
||||
---
|
||||
|
||||
## 4. Targeting and chase table
|
||||
|
||||
| Entry point | Target source | Awareness check | Movement request | Update mechanism | Stop condition | Connection status | Root-cause relevance |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| EventTick (base/Skeleton) | None | None | None | Tick enabled natively; body empty | N/A | Present but Unconnected | Primary: no chase logic |
|
||||
| EventActorBeginOverlap | OtherActor pin only | None | None | None | None | Present but Unconnected | No target store |
|
||||
| BPI AddPlayerTarget | Interface signature only | — | — | — | — | Missing implementation | Documented Intent unused |
|
||||
| BeginPlay | None | None | None | None | None | Present but Unconnected | No init chase |
|
||||
| AI MoveTo / SimpleMoveTo / PathFollowing | — | — | **None observed** | — | — | Missing | No movement request exists |
|
||||
| GetPlayerCharacter / GetPlayerPawn nodes | — | — | — | — | — | Missing in enemy graphs | No player acquisition |
|
||||
|
||||
**Primary chase classification: Implementation Missing.**
|
||||
|
||||
**Secondary condition:** Test01 has **no** `NavMeshBoundsVolume` and **no** `RecastNavMesh` (find_actors empty). Navmesh readiness is **secondary** — even with a baked mesh, no movement request exists to consume it.
|
||||
|
||||
---
|
||||
|
||||
## 5. Attack table
|
||||
|
||||
| Entry point | Range gate | State gate | Animation | Hit window | Damage path | Cooldown | Cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| BPI EnemyMeleeAttack | — | — | — | — | — | — | — | **Missing** (unimplemented) | list_graphs / Skeleton events |
|
||||
| EventTick / Overlap | — | — | — | — | — | — | — | No attack body | EventGraph DSL |
|
||||
| `Anim_SkeletonAttackMontage` | — | — | Asset exists | Unknown | None (0 referencers) | — | — | **Present but Unreferenced** | get_referencers [] |
|
||||
| Native C++ | — | — | — | — | None | — | — | Missing | RIRBaseEnemyCharacter.cpp |
|
||||
|
||||
**Primary attack initiation classification: Implementation Missing.**
|
||||
|
||||
**Secondary:** Orphan attack montage `/Game/_Main/Animations/Enemies/Skeleton/Anim_SkeletonAttackMontage` — Present but Unreferenced; not evidence of an attack path.
|
||||
|
||||
---
|
||||
|
||||
## 6. Damage and death table
|
||||
|
||||
| Input mechanism | Health source | Mutation | Death threshold | Death behavior | Cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| Player ApplyDamage (Paladin/Amazonian/Cleric) | Expected engine TakeDamage | **No** enemy BP `ReceiveAnyDamage`; **no** ASC Health bridge | None observed | None in enemy BP | None | Implementation Missing (reception) | Event list; AttributeSet has no PostGEExecute |
|
||||
| ASC Health attribute | `URIRAttributeSet` on enemy | Not written by combat graphs | None | None | — | Scaffolding Only for combat | Pass 7 + Pass 9 |
|
||||
| Gameplay Effect on enemy | EffectActor library GetASC | **nullptr** via base GetASC | N/A | Early-out | — | Existing Baseline Defect | Pass 7 |
|
||||
| Death animation | ABP Death state + `Anim_Monster_Dead_1..4` | `IsDead` set to **literal false** every UpdateAnimation | Unreachable via IsDead | Death state present | Unknown | Connected but Incomplete | ABP EventGraph DSL |
|
||||
| DestroyActor / ragdoll / rewards | — | — | — | None observed on enemy BP | Missing | Missing | EventGraph DSL |
|
||||
|
||||
**Player→enemy ApplyDamage compatibility (static):** Playable attacks **do** call `ApplyDamage` (Pass 6). Enemy Blueprints **do not** implement AnyDamage→health→death. Native AttributeSet does not clamp or kill from ApplyDamage. **Inferred:** player melee may deal engine damage events with **no observed enemy health/death consumer** — Requires Runtime Inspection for visual feedback only.
|
||||
|
||||
---
|
||||
|
||||
## 7. Animation callback table
|
||||
|
||||
| Asset | Notify/callback | Receiver | Gameplay consequence | State reset | Connection status | Evidence |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `ABP_Skeleton` EventGraph | BlueprintInitializeAnimation | GetEnemyREF → Enemy Reference | Cache REF | — | Connected | read_graph_dsl |
|
||||
| `ABP_Skeleton` EventGraph | BlueprintUpdateAnimation | SetSpeed from velocity; **SetIsDead(false)**; DeathIndex DoOnce | Locomotion speed; **blocks death flag** | — | Connected (death flag forced false) | read_graph_dsl |
|
||||
| `ABP_Skeleton` Locomotion | States: Idle/Walk/Run, Death | — | Presentation | — | Death transition Unknown (DSL empty) | list_graphs |
|
||||
| `Anim_SkeletonAttackMontage` | Unknown notifies | No owner plays montage | None | — | Present but Unreferenced | get_referencers [] |
|
||||
| Death sequences `Anim_Monster_Dead_1..4` | Via ABP Death state | ABP_Skeleton | Cosmetic death pose if state entered | — | Referenced by ABP only | get_dependencies |
|
||||
|
||||
**No enemy AnimNotify → damage / UseAbility / ApplyDamage path observed.**
|
||||
|
||||
---
|
||||
|
||||
## 8. Enemy GAS compatibility table
|
||||
|
||||
| Consumer | ASC lookup method | Expected owner | Static result | Null behavior | Potential impact | Runtime verification |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `ARIREffectActor::ApplyEffectToTarget` | `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent` → `ARIRBaseCharacter::GetAbilitySystemComponent` → PlayerState | Enemy self ASC | **nullptr** | Early return; no GE | Potions/effects skip enemies | PIE |
|
||||
| Enemy direct `AbilitySystemComponent` member | Native TObjectPtr on enemy | Self | Valid if used | — | No combat consumer observed | — |
|
||||
| IAbilitySystemInterface on enemy | Same as GetASC base | Self intended | nullptr | Same | Interface consumers fail | PIE |
|
||||
| Enemy AttributeSet Health | Direct member | Self | Exists; unreplicated combat use | — | Spawn Init values only | PIE |
|
||||
| Enemy BP damage/death | N/A | — | No ASC read/write in enemy graphs | — | Combat independent of ASC | — |
|
||||
| Chase / attack graphs | N/A | — | **No dependency on ASC** | — | **GetASC defect does not explain chase/attack failure** | — |
|
||||
|
||||
---
|
||||
|
||||
## 9. Root-cause summary
|
||||
|
||||
| System | Primary classification | Secondary conditions | Exact evidence | Runtime question |
|
||||
|---|---|---|---|---|
|
||||
| Target acquisition | **Implementation Missing** | BPI AddPlayerTarget unimplemented; empty Tick/Overlap | EventGraph DSL; interface | — |
|
||||
| Chase | **Implementation Missing** | No MoveTo; stock AIController; **no navmesh in Test01** | DSL; find_assets; find_actors | Would possession alone idle forever? |
|
||||
| Attack initiation | **Implementation Missing** | EnemyMeleeAttack unimplemented; attack montage 0 refs | Interface; get_referencers | — |
|
||||
| Attack damage | **Implementation Missing** | No ApplyDamage/GE from enemy | Native + BP | — |
|
||||
| Attack cleanup | **Missing** | — | — | — |
|
||||
| Damage reception | **Implementation Missing** | No ReceiveAnyDamage; no ASC bridge from ApplyDamage | Event list | Do player hits show feedback? |
|
||||
| Death | **Connected but Incomplete** | ABP Death + death anims exist; **SetIsDead(false)** every frame | ABP EventGraph DSL | Can Death state ever enter? |
|
||||
| Enemy Gameplay Effect compatibility | **Existing Baseline Defect** / Incomplete Refactor | GetASC → PlayerState | RIRBaseCharacter.cpp | EffectActor on enemy |
|
||||
|
||||
---
|
||||
|
||||
## BPI_EnemyCharacter inventory
|
||||
|
||||
Path: `/Game/_Main/Blueprints/Interfaces/BPI_EnemyCharacter`
|
||||
|
||||
| Member | Implemented on Skeleton | Callers (referencers of interface asset) |
|
||||
|---|---|---|
|
||||
| GetEnemyREF | Yes → return self | `BP_Enemy_Skeleton`, `ABP_Skeleton` |
|
||||
| AddPlayerTarget | **No** | None observed beyond interface declaration |
|
||||
| EnemyMeleeAttack | **No** | None observed |
|
||||
|
||||
---
|
||||
|
||||
## Negative-search evidence log
|
||||
|
||||
| Search | Scope | Result |
|
||||
|---|---|---|
|
||||
| find_assets BehaviorTree `/Game` | Project | [] |
|
||||
| find_assets Blackboard `/Game` | Project | [] |
|
||||
| find_assets StateTree `/Game` | Project | [] |
|
||||
| find_assets EnvQuery `/Game` | Project | [] |
|
||||
| find_assets AIPerception `/Game` | Project | [] |
|
||||
| search_subclasses AIController | Engine+project | Engine-only classes |
|
||||
| Source grep MoveTo/BehaviorTree/Attack AI | Source/REALMSINRUIN | No AI combat (only enemy class highlight/ASC) |
|
||||
| get_referencers Anim_SkeletonAttackMontage | Asset registry | [] |
|
||||
| find_actors NavMeshBoundsVolume / RecastNavMesh | Test01 | [] |
|
||||
| Enemy EventGraph MoveTo/GetPlayer*/ApplyDamage nodes | Both enemy BPs | None (empty DSL) |
|
||||
|
||||
---
|
||||
|
||||
## Migration / defect notes (inventory only)
|
||||
|
||||
- Reconstructing enemy AI requires **new implementation** (or restoring unobserved deleted content) — not a reconnect of an existing connected graph.
|
||||
- Interface `AddPlayerTarget` / `EnemyMeleeAttack` are Documented Intent scaffolds.
|
||||
- Fixing enemy GetASC is a separate Incomplete Refactor; it does not restore chase/attack.
|
||||
- ABP `SetIsDead(false)` is a static death-path defect independent of chase.
|
||||
|
||||
@@ -2,32 +2,27 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **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 8 (Batch 4A)
|
||||
- **Next pass expected to contribute:** Pass 7 (GAS) or Pass 4/9 when authorized — not auto-started
|
||||
- **Scope:** Animation Blueprints, Montages, AnimNotify Blueprints for playable characters (Pass 8) plus enemy AnimBP/montage findings required by Pass 9 combat archaeology.
|
||||
- **Last completed pass:** Pass 9 (Batch 4C) — enemy animation seed
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Per-character AnimBP architecture table
|
||||
- Per-character AnimBP architecture table (playables)
|
||||
- Per-ability Montage + notify tables
|
||||
- AnimNotify/callback inventory (`AN_Ability_001–004`, `AN_AttackComplete`)
|
||||
- Resolved UseAbility* callers (montage notifies → BPI)
|
||||
- Resolved UseAbility* callers
|
||||
- Pass 6 reclassification table
|
||||
- Cleanup via `AN_AttackComplete` → `SetIsAttacking`
|
||||
- Networking/authority static notes for multicast montage + notify gameplay
|
||||
- Networking/authority static notes
|
||||
- Wizard / Gunslinger animation dependency confirmation
|
||||
- **Pass 9:** `ABP_Skeleton` locomotion/Death; `Anim_SkeletonAttackMontage` orphan; `SetIsDead(false)` every Update
|
||||
|
||||
### Pending sections
|
||||
- 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)
|
||||
- Montage section names / blend / root-motion flags
|
||||
- ABP_Skeleton Death transition rule pin details
|
||||
|
||||
### Evidence still required
|
||||
- Manual editor confirmation of notify timing windows
|
||||
@@ -173,3 +168,18 @@ Play rate: Multicast path uses rate **1** (Pass 6 / Amazonian agent). Start posi
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
## Pass 9 — Enemy animation dependencies
|
||||
|
||||
| Character | AnimBP | Skeleton | Relevant state machines | Montage slots | Ability callbacks | Death path | Confidence |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| Skeleton enemy | `/Game/_Main/Animations/Enemies/Skeleton/ABP_Skeleton` | UE4_Mannequin_Skeleton (deps) | Locomotion: Idle/Walk/Run, Death | None used by combat | GetEnemyREF cache only | Death state + `Anim_Monster_Dead_1..4`; **`SetIsDead(false)` every Update** | High |
|
||||
|
||||
| Asset | Notify/callback | Character | Ability | Receiver | Downstream | Connection status |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `Anim_SkeletonAttackMontage` | Unknown (unplayed) | Skeleton | Attack | None | None | **Present but Unreferenced** (0 referencers) |
|
||||
| `ABP_Skeleton` Update | SetIsDead(false) | Skeleton | Death | Self | Blocks death flag | **Connected but Incomplete** |
|
||||
|
||||
No enemy AnimNotify → ApplyDamage path observed. Full enemy AI: `09-EnemyAI-StaticAnalysis.md`.
|
||||
|
||||
@@ -2,48 +2,44 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Unresolved questions after Batches 1–3, Batch 4A Pass 8, and Batch 4B Pass 7.
|
||||
- **Inspection method:** Consolidation of static archaeology through Pass 7.
|
||||
- **Scope:** Unresolved questions after Batches 1–3, Batch 4A–4C (Passes 8, 7, 9).
|
||||
- **Inspection method:** Consolidation through Pass 9.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; CustomEvent FunctionFlags unread; Montage Notifies/times unreadable; GE GameplayEffectComponents unreadable; no PIE.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; AnimGraph transition DSL empty; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 7 (Batch 4B)
|
||||
- **Next pass expected to contribute:** Pass 9 / Pass 4 / Pass 10 when authorized
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Pass 4 / Pass 10 when authorized
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1–3 unknowns and resolutions
|
||||
- Pass 8 animation callback resolutions
|
||||
- **Pass 7 resolutions:** GE inventory; orphan default attrs; tag orphan status; no GAs/cues/grants; consumable GE wiring; dual HUD/stamina debt confirmed
|
||||
- Batch 1–3 / Pass 7 / Pass 8 resolutions
|
||||
- **Pass 9 resolutions:** chase/attack Implementation Missing; empty enemy EventGraphs; stock AIController; no BT/BB/navmesh; orphan attack montage; ABP SetIsDead(false); GetASC not chase cause
|
||||
|
||||
### Pending sections
|
||||
- Frontend/session (Pass 4)
|
||||
- Enemy BP AI (Pass 9)
|
||||
- Pickup deep graphs (Pass 10)
|
||||
- Runtime test procedures
|
||||
|
||||
### Evidence still required
|
||||
- PIE dual HUD / spawn attributes / potion vs combat health
|
||||
- PIE possession / ApplyDamage feedback / Death state reachability
|
||||
- Notify trigger times (Manual Editor)
|
||||
- Interrupt vs AN_AttackComplete (PIE)
|
||||
|
||||
---
|
||||
|
||||
## Resolved in Batch 4B (Pass 7)
|
||||
## Resolved in Batch 4C (Pass 9)
|
||||
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Which GEs exist? | Exactly 8 under GAS/GameplayEffects | Observed Implementation | 06 |
|
||||
| Are default-attribute GEs applied? | No — 0 referencers; BP_PlayerState = None; native never applies | Present but Unreferenced / Scaffolding Only | 06 |
|
||||
| Default GE values? | Paladin H/M 100/100; Amazon H/S 100/100; Cleric H/M 50/200; Wizard H/M 100/150; **no Max*** | Observed Implementation | 06 |
|
||||
| GE_Gunslinger? | None observed | Missing | 06 |
|
||||
| Are INI tags used? | Defined; zero native/BP/GE referencers observed | Present but Unreferenced | 06 |
|
||||
| Project GAs / grants / cues? | None observed (negative searches logged) | Missing / Scaffolding Only (URIRGameplayAbility) | 06 |
|
||||
| What applies GEs at runtime? | Consumable EffectActors only (static path) | Partially Integrated | 06, 12 |
|
||||
| Stamina overlay delegate debt? | OnStamina* properties reuse Mana signature types | Technical Debt | 11, 06 |
|
||||
| Sync DEPRECATED ↔ ASC? | None observed | Missing / Incomplete Refactor | 06, 05 |
|
||||
| Where does chase/attack live? | **Nowhere connected** — native + BP EventGraphs empty; BPI AddPlayerTarget/EnemyMeleeAttack unimplemented | Implementation Missing | 09 |
|
||||
| AIController? | Stock `/Script/AIModule.AIController`; AutoPossessAI PlacedInWorld | Observed Implementation | 09 |
|
||||
| BehaviorTree/Blackboard/Perception? | None in project | Missing | 09 |
|
||||
| Navmesh in Test01? | No NavMeshBoundsVolume / RecastNavMesh | Missing (secondary) | 09 |
|
||||
| Does GetASC defect cause chase failure? | **No** — chase has no ASC dependency | Observed Implementation | 09, 06 |
|
||||
| Enemy attack montage? | Exists; 0 referencers | Present but Unreferenced | 09, 10 |
|
||||
| Enemy death anim? | ABP Death + death anims; IsDead forced false each Update | Connected but Incomplete | 09, 10 |
|
||||
| Enemy receive player damage? | No ReceiveAnyDamage / health mutation on enemy BP | Implementation Missing | 09, 05 |
|
||||
|
||||
---
|
||||
|
||||
@@ -51,14 +47,13 @@
|
||||
|
||||
| Confirmed finding | Issue | Runtime question |
|
||||
|---|---|---|
|
||||
| Enemy ASC vs GetASC PlayerState | Incomplete Refactor / Existing Baseline Defect | Do potions/effects fail on enemies? |
|
||||
| Dual HUD paths | Incomplete Refactor | Which bars drive visible UI? |
|
||||
| DefaultAttributes unused + orphan character GEs | Partially Implemented / Present but Unreferenced | Spawn Health/Mana = native 75/25? |
|
||||
| Combat uses DEPRECATED; potions use ASC | Incomplete Refactor | Potion heal invisible to combat death? |
|
||||
| Stamina/MaxStamina not Init'd | Partially Implemented | Overlay stamina bars at 0? |
|
||||
| Default GEs Override Health/Mana without Max* | Technical Debt (if ever applied) | Current > Max possible? |
|
||||
| Cleric 004 empty SpawnActor + mana bypass | Existing Baseline Defect | PIE behavior |
|
||||
| Multicast montage notify hit windows | Technical Debt | Server eval always? |
|
||||
| Chase/attack Implementation Missing | Existing Baseline Defect | Confirm idle forever when possessed |
|
||||
| No navmesh in Test01 | External Dependency Missing (secondary) | Would MoveTo work after mesh bake alone? |
|
||||
| AutoPossessAI PlacedInWorld | Possession Configuration Conflict for **spawned** enemies | Do spawners create uncontrolled pawns? |
|
||||
| ABP SetIsDead(false) | Connected but Incomplete | Death state ever entered? |
|
||||
| No enemy damage reception | Existing Baseline Defect | Player hits show nothing? |
|
||||
| Enemy GetASC nullptr | Incomplete Refactor | EffectActor on enemy |
|
||||
| Dual HUD / orphan default GEs | Incomplete Refactor | PIE attribute/UI |
|
||||
|
||||
---
|
||||
|
||||
@@ -66,30 +61,16 @@
|
||||
|
||||
| Question | Method | Priority |
|
||||
|---|---|---|
|
||||
| Enemy BP AI chase/attack | Pass 9 | High |
|
||||
| Sessions / frontend | Pass 4 | Medium |
|
||||
| Full pickup authority/respawn | Pass 10 | Medium |
|
||||
| Notify trigger times | Manual Editor | Medium |
|
||||
| Interrupt cleanup | PIE | High |
|
||||
| Dual HUD + spawn attrs + potion/combat health | PIE | High |
|
||||
| GE GameplayEffectComponents / cues | Manual Editor / alternate tool | Low |
|
||||
|
||||
---
|
||||
|
||||
## Tool and environment limitations
|
||||
|
||||
| Item | Impact |
|
||||
|---|---|
|
||||
| GE GameplayEffectComponents unreadable | Per-GE cue/component tags Unknown |
|
||||
| Montage Notifies / AnimGraph DSL | Pass 8 limits stand |
|
||||
| CustomEvent Reliable flags | Unknown |
|
||||
| No PIE in Batch 4B | Runtime deferred |
|
||||
| PIE: possession, ApplyDamage feedback, Death, EffectActor | PIE | High |
|
||||
| ABP Death transition pins | Manual Editor | Low |
|
||||
|
||||
---
|
||||
|
||||
## Priority order for later verification
|
||||
|
||||
1. Pass 9 — enemy Blueprint AI
|
||||
2. Pass 4 — sessions / frontend
|
||||
3. Pass 10 — pickup deep dive
|
||||
4. Controlled PIE — dual HUD, spawn attrs, EffectActor on player/enemy, potion vs DEPRECATED health
|
||||
1. Pass 4 — sessions / frontend
|
||||
2. Pass 10 — pickup deep dive
|
||||
3. Controlled PIE — enemy idle/possession, player hit feedback, dual HUD, potions
|
||||
4. Pass 11 — migration matrix (after Batch 4 complete)
|
||||
|
||||
@@ -2,46 +2,33 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Compact cross-model index of material findings. Full analysis lives in linked docs.
|
||||
- **Scope:** Compact cross-model index of material findings.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 7 (Batch 4B)
|
||||
- **Last completed pass:** Pass 9 (Batch 4C)
|
||||
- **Next pass expected to contribute:** Every batch
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1–3 evidence rows
|
||||
- Batch 4A Pass 8 AnimBP / Montage / AnimNotify rows
|
||||
- Batch 4B Pass 7 GAS / GE / tag / cue / grant rows
|
||||
- Batch 1–3; Pass 7; Pass 8; **Pass 9 enemy AI rows**
|
||||
|
||||
### Pending sections
|
||||
- Enemy AI graph rows (Pass 9)
|
||||
- Session flow rows (Pass 4)
|
||||
|
||||
---
|
||||
|
||||
| System | Subsystem | Finding | Evidence type | Classification | Exact source | Exact symbol | Blueprint path | Graph | Node/event | Asset/config | Doc | Confidence | Remaining verification |
|
||||
|--------|-----------|---------|---------------|----------------|--------------|--------------|----------------|-------|------------|--------------|-----|------------|------------------------|
|
||||
| GAS | Player ASC | ASC on PlayerState; Mixed replication | Observed Implementation | Active | RIRPlayerState.cpp | CreateDefaultSubobject ASC | BP_PlayerState | — | — | — | 06 | High | — |
|
||||
| GAS | Enemy ASC | ASC on enemy; Minimal; Init(this,this) | Observed Implementation | Active | RIRBaseEnemyCharacter.cpp | AbilitySystemComponent | BP_EnemyCharacterBase | — | — | — | 06 | High | — |
|
||||
| GAS | GetASC defect | Base GetASC → PlayerState only | Observed Implementation | Existing Baseline Defect | RIRBaseCharacter.cpp | GetAbilitySystemComponent | — | — | — | — | 06,13 | High | PIE enemy |
|
||||
| GAS | Attr Init | Health75 MaxHealth100 Mana25 MaxMana50; Stamina not Init | Observed Implementation | Partially Implemented | RIRAttributeSet.cpp | InitHealth | — | — | — | — | 06 | High | PIE |
|
||||
| GAS | Default GE prop | BP_PlayerState DefaultAttributes=None | Observed Implementation | Scaffolding Only | ObjectTools CDO | defaultAttributesGameplayEffect | BP_PlayerState | — | — | — | 06 | High | — |
|
||||
| GAS | Default GEs | 4 character GEs orphaned; 0 referencers | Observed Implementation | Present but Unreferenced | get_referencers | GE_*_DefaultAttributes | — | — | — | .../GameplayEffects/PlayerCharacters/... | 06 | High | — |
|
||||
| GAS | Default values | Paladin H/M 100/100; Amazon H/S 100/100; Cleric 50/200; Wizard 100/150; no Max* | Observed Implementation | — | GE CDO Modifiers | Override | GE_*_DefaultAttributes | — | — | — | 06 | High | — |
|
||||
| GAS | Amazon naming | Folder/asset Amazon vs Player_Amazonian | Observed Implementation | Technical Debt | asset path | GE_Amazon_DefaultAttributes | — | — | — | — | 06,08 | High | — |
|
||||
| GAS | Consumable GE | PotionHeal +25 Health Instant; wired to BP_HealthPotion | Observed Implementation | Active | CDO + DSL | ApplyEffecttoTarget | BP_HealthPotion | EventGraph | OnComponentBeginOverlap | GE_PotionHeal | 06,12 | High | Authority PIE |
|
||||
| GAS | Consumable GE | PotionMana +30; HoT 0.5/0.1s; MoT 0.25/0.1s | Observed Implementation | Active | CDO + refs | — | BP_ManaPotion / OrangeSlice / ManaCrystal | — | — | GE_* | 06,12 | High | DSL confirm Pass 10 |
|
||||
| GAS | Ability class | URIRGameplayAbility only; no project GA assets | Observed Implementation | Scaffolding Only / Missing | search_subclasses; find_assets GA_ | — | — | — | — | — | 06 | High | — |
|
||||
| GAS | Grant/activate | No GiveAbility/TryActivateAbility/AbilitySet | Observed Implementation | Missing | Source grep; find_assets | — | — | — | — | — | 06 | High | — |
|
||||
| GAS | Tags | 12 INI tags; zero native/asset referencers | Observed Implementation | Present but Unreferenced | DefaultGameplayTags.ini | State.* Disable.* Effect.* | — | — | — | Config/DefaultGameplayTags.ini | 06 | High | — |
|
||||
| GAS | Cues | No project cue notifies; no GC_ assets | Observed Implementation | Missing | find_assets; search_subclasses | — | — | — | — | — | 06 | High | — |
|
||||
| GAS | MMC/Exec | No project subclasses | Observed Implementation | Missing | search_subclasses | — | — | — | — | — | 06 | High | — |
|
||||
| GAS | AttrSet clamp | No PostGameplayEffectExecute | Observed Implementation | Scaffolding Only | RIRAttributeSet.h/cpp | — | — | — | — | — | 06 | High | — |
|
||||
| UI | Overlay path | WBP_Overlay under Overlay/ folder | Observed Implementation | Intended Behavior | get_dependencies | — | WBP_PlayerHUD | — | — | /Game/_Main/UI/Widgets/Overlay/WBP_Overlay | 11 | High | Binding walk |
|
||||
| UI | Stamina debt | OnStamina* typed as Mana signatures | Observed Implementation | Technical Debt | OverlayWidgetController.h | OnStaminaChanged | — | — | — | — | 11,06 | High | — |
|
||||
| UI | Dual HUD | ASC Overlay + DEPRECATED UpdatePlayerHUD | Observed Implementation | Incomplete Refactor | RIRHUD; BP base | InitOverlay; Server_UpdateHUD | — | — | — | — | 06,11 | High | PIE |
|
||||
| Boundary | Combat vs potion | Abilities ApplyDamage/DEPRECATED; potions ASC GE | Observed Implementation | Incomplete Refactor | Pass 5–7 | — | — | — | — | — | 05,06 | High | PIE |
|
||||
| Continuity | Editor | PIE=false; Test01; Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | — |
|
||||
| Repo | Git | Clean at Batch 4B start | Observed Implementation | — | git status | — | — | — | — | — | 15 | High | — |
|
||||
| Enemy | EventGraph | BeginPlay/Tick/Overlap present; bodies empty | Observed Implementation | Present but Unconnected | read_graph_dsl | EventTick | BP_Enemy_Skeleton | EventGraph | EventTick | — | 09 | High | — |
|
||||
| Enemy | Chase | No MoveTo/GetPlayer/target store | Observed Implementation | Implementation Missing | DSL + searches | — | BP_Enemy* | — | — | — | 09 | High | — |
|
||||
| Enemy | Attack | EnemyMeleeAttack unimplemented; montage 0 refs | Observed Implementation | Implementation Missing / Present but Unreferenced | interface; get_referencers | EnemyMeleeAttack | BPI_EnemyCharacter | — | — | Anim_SkeletonAttackMontage | 09,10 | High | — |
|
||||
| Enemy | Controller | Stock AIController; AutoPossessAI PlacedInWorld | Observed Implementation | Partially Implemented (possession only) | ObjectTools CDO+instance | aIControllerClass | BP_Enemy_Skeleton | — | — | /Script/AIModule.AIController | 09 | High | PIE possess |
|
||||
| Enemy | AI frameworks | No BT/BB/StateTree/EQS/Perception assets | Observed Implementation | Missing | find_assets; search_subclasses | — | — | — | — | — | 09 | High | — |
|
||||
| Enemy | Nav Test01 | No NavMeshBoundsVolume/RecastNavMesh | Observed Implementation | Missing (secondary) | find_actors | — | — | — | — | Test01 | 09 | High | — |
|
||||
| Enemy | Damage in | No ReceiveAnyDamage; no health mutation | Observed Implementation | Implementation Missing | list_events | ReceiveAnyDamage | BP_Enemy* | — | — | — | 09,05 | High | PIE hit |
|
||||
| Enemy | Death ABP | Death state + anims; SetIsDead(false) every Update | Observed Implementation | Connected but Incomplete | read_graph_dsl | SetIsDead | ABP_Skeleton | EventGraph | BlueprintUpdateAnimation | Anim_Monster_Dead_* | 09,10 | High | Transition pins |
|
||||
| Enemy | GetASC | Defect does not explain chase/attack | Observed Implementation | Existing Baseline Defect (separate) | RIRBaseCharacter.cpp | GetAbilitySystemComponent | — | — | — | — | 06,09 | High | — |
|
||||
| Enemy | Highlight | Native custom depth ITargetInterface | Observed Implementation | Active | RIRBaseEnemyCharacter.cpp | HighlightActor | — | — | — | — | 09 | High | — |
|
||||
| Continuity | Editor | PIE=false; Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | — |
|
||||
| Repo | Git | Clean at Batch 4C start | Observed Implementation | — | git status | — | — | — | — | — | 15 | High | — |
|
||||
|
||||
@@ -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 4B (Pass 7)
|
||||
- **Next authorized work:** Wait for user — recommend **Pass 9** (enemy AI) or **Pass 4** (sessions) as separately authorized
|
||||
- **Last completed pass / batch:** Batch 4C (Pass 9)
|
||||
- **Next authorized work:** Wait for user — recommend **Batch 4D** (Pass 4 sessions and/or Pass 10 pickups) as separately authorized
|
||||
|
||||
## Phase completed
|
||||
|
||||
| Item | Value |
|
||||
|------|--------|
|
||||
| Phase | Phase 1 — Static Architecture (in progress) |
|
||||
| Batch completed | Batch 4B — Partial GAS architecture |
|
||||
| Passes completed | Pass 7 |
|
||||
| Batch completed | Batch 4C — Enemy AI static analysis |
|
||||
| Passes completed | Pass 9 |
|
||||
| Date completed | 2026-07-16 |
|
||||
| Model identifier | Cursor Grok 4.5 |
|
||||
|
||||
@@ -22,103 +22,90 @@
|
||||
|
||||
## Repository integrity
|
||||
|
||||
### Starting state (Batch 4B)
|
||||
### Starting state (Batch 4C)
|
||||
|
||||
- **Git:** Clean (`git status --short` empty; diffs empty).
|
||||
- **Baseline commits include:** `4e926d1c` Batch 4A Pass 8 animation archaeology.
|
||||
- **Authorization:** Batch 4A committed before start.
|
||||
- **Baseline includes:** `e50c8032` Batch 4B Pass 7 GAS archaeology.
|
||||
- **Editor:** `IsPIERunning=false`; level `/Game/_Main/Levels/Testing/Test01`; selected actor `BP_Enemy_Skeleton_C_1`.
|
||||
|
||||
### Ending state (Batch 4B close)
|
||||
### Ending state (Batch 4C close)
|
||||
|
||||
- Modified files: Markdown only under `Documentation/Archaeology/` (listed below).
|
||||
- No source, config, plugin, map, or Unreal asset writes.
|
||||
- Modified files: Markdown under `Documentation/Archaeology/` (listed below).
|
||||
- **Unexpected working-tree changes (not caused by Pass 9; not reverted):**
|
||||
- Deleted: `Migration-Notes/UE54-Baseline.md`
|
||||
- Untracked: `Documentation/Migration-Notes/`
|
||||
- No Unreal assets, source, config, plugins, or maps modified by this batch.
|
||||
- PIE not started; level and selection unchanged.
|
||||
- Ending Git: only authorized Archaeology Markdown dirty.
|
||||
- Ending Git: Archaeology Markdown dirty **plus** the unexpected Migration-Notes paths above.
|
||||
|
||||
---
|
||||
|
||||
## Areas fully inspected (Batch 4B)
|
||||
## Areas fully inspected (Batch 4C)
|
||||
|
||||
- Native: RIRPlayerState, RIRPlayerCharacter, RIRBaseCharacter, RIRBaseEnemyCharacter, RIRAttributeSet, RIRGameplayAbility, RIRAbilitySystemComponent, RIREffectActor, RIRHUD, OverlayWidgetController
|
||||
- All 8 GE assets under `/Game/_Main/Blueprints/Game/GameSystems/GAS/GameplayEffects/`
|
||||
- BP_PlayerState DefaultAttributes property
|
||||
- Consumable EffectActor subclasses + HealthPotion apply graph
|
||||
- DefaultGameplayTags.ini + tag/cue/GA negative searches
|
||||
- search_subclasses for GA, cue notifies, MMC, ExecutionCalculation
|
||||
- `ARIRBaseEnemyCharacter` / `ARIRBaseCharacter` GetASC / `ITargetInterface`
|
||||
- `BP_EnemyCharacterBase` + `BP_Enemy_Skeleton` EventGraphs, GetEnemyREF, CDO control
|
||||
- `BPI_EnemyCharacter` (GetEnemyREF / AddPlayerTarget / EnemyMeleeAttack)
|
||||
- Placed `BP_Enemy_Skeleton_C_1` controller/possession props
|
||||
- Project-wide BT/BB/StateTree/EQS/AIPerception/AIController subclass searches
|
||||
- Test01 NavMeshBoundsVolume / RecastNavMesh absence
|
||||
- `ABP_Skeleton` EventGraph + deps; `Anim_SkeletonAttackMontage` referencers
|
||||
|
||||
## Areas partially inspected
|
||||
|
||||
- ManaPotion / ManaCrystal / OrangeSlice EventGraphs (refs + agent; HealthPotion DSL verified)
|
||||
- WBP_Overlay Blueprint bar bindings (native controller only)
|
||||
- GE GameplayEffectComponents (unreadable)
|
||||
- `BP_Enemy_Skeleton_C_0` (presence only)
|
||||
- ABP Death transition pin details (AnimGraph DSL empty)
|
||||
- CharacterMovement orient flags (partially unreadable)
|
||||
|
||||
## Areas not yet inspected
|
||||
|
||||
- Pass 4 frontend/sessions
|
||||
- Pass 9 enemy BP AI
|
||||
- Pass 10 full pickup deep dive
|
||||
- Pass 11 migration matrix
|
||||
- PIE / runtime
|
||||
|
||||
---
|
||||
|
||||
## Files created
|
||||
|
||||
None.
|
||||
|
||||
## Files updated
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft (Pass 7 rewrite) |
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft (boundary note) |
|
||||
| Documentation/Archaeology/08-CharacterSystems.md | Draft |
|
||||
| Documentation/Archaeology/11-UI-HUD-And-Sessions.md | Draft |
|
||||
| Documentation/Archaeology/12-Pickups-And-Effects.md | Draft |
|
||||
| Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md | Draft (Pass 9 rewrite) |
|
||||
| Documentation/Archaeology/03-ClassHierarchy.md | Draft |
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft (enemy ApplyDamage note) |
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/10-AnimationDependencies.md | Draft |
|
||||
| Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md | Draft |
|
||||
| Documentation/Archaeology/14-EvidenceIndex.md | Draft |
|
||||
| Documentation/Archaeology/15-HandoffStatus.md | Draft |
|
||||
|
||||
**10-AnimationDependencies.md not modified** (no new animation↔GAS interaction).
|
||||
**07-AbilityMigrationMatrix.md not created.**
|
||||
**12 not modified** (no new EffectActor evidence beyond Pass 7).
|
||||
**07 not created.**
|
||||
|
||||
## Toolsets used
|
||||
## Key Pass 9 outcomes
|
||||
|
||||
EditorAppToolset; SceneTools; AssetTools; ObjectTools; BlueprintTools; GameplayTagsToolset / GameplayCueToolset (read-only via subagents).
|
||||
|
||||
## Tool limitations / failed queries
|
||||
|
||||
- `GameplayEffectComponents` unreadable on GE CDOs
|
||||
- Some ObjectTools property-name batches on BlueprintGeneratedClass failed until Default__/alternate load path used by subagent
|
||||
- search_subclasses requires `base_class` + `class_name` (not `parent_class`)
|
||||
- No PIE
|
||||
|
||||
## Key Pass 7 outcomes
|
||||
|
||||
1. **Only active GE application path:** consumable EffectActors (potions/food).
|
||||
2. **All four character DefaultAttributes GEs orphaned**; BP_PlayerState = None.
|
||||
3. **No project GAs, grants, cues, MMC, ExecutionCalculations.**
|
||||
4. **All 12 INI gameplay tags unreferenced.**
|
||||
5. **Dual HUD + no DEPRECATED↔ASC sync** confirmed as migration boundary.
|
||||
6. **Enemy GetASC defect** remains static Incomplete Refactor affecting EffectActor on enemies.
|
||||
1. **Chase primary classification: Implementation Missing** (empty Tick/Overlap; no MoveTo; no target acquisition).
|
||||
2. **Attack primary classification: Implementation Missing** (EnemyMeleeAttack unimplemented; orphan montage).
|
||||
3. **Stock AIController + PlacedInWorld** — possession may occur; no behavior.
|
||||
4. **No BT/BB/Perception/navmesh** in project / Test01.
|
||||
5. **GetASC defect is separate** — does not cause chase/attack failure.
|
||||
6. **ABP SetIsDead(false)** every Update — death path incomplete.
|
||||
7. **Player ApplyDamage has no enemy health/death consumer** statically.
|
||||
|
||||
## Suggested next bounded task
|
||||
|
||||
**Authorize explicitly one of:**
|
||||
**Authorize Batch 4D explicitly**, e.g.:
|
||||
|
||||
1. Pass 9 — Enemy BP AI
|
||||
2. Pass 4 — Frontend / sessions
|
||||
3. Pass 10 — Pickup deep dive
|
||||
1. Pass 4 — Frontend / sessions
|
||||
2. Pass 10 — Pickup deep dive
|
||||
|
||||
**Do not begin** Pass 11 or PIE until authorized.
|
||||
|
||||
**Starting files:** `00`, `06`, `08`, `09`, `12`, `13`, `14`, `15`.
|
||||
**Starting files:** `00`, `09`, `11`, `12`, `13`, `14`, `15`.
|
||||
|
||||
## Confirmation
|
||||
|
||||
- No Unreal assets modified
|
||||
- No source/config/map/plugin modified
|
||||
- No editor state intentionally modified
|
||||
- No work beyond Pass 7 performed
|
||||
- Waiting for explicit authorization before Pass 9 or other passes
|
||||
- No work beyond Pass 9 performed
|
||||
- Waiting for explicit authorization before Batch 4D
|
||||
|
||||
Reference in New Issue
Block a user