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:
2026-07-16 21:46:08 -07:00
co-authored by Cursor
parent e50c8032ef
commit 53315574a4
8 changed files with 354 additions and 216 deletions
+13 -12
View File
@@ -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_001004`, `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 13, Batch 4A Pass 8, and Batch 4B Pass 7.
- **Inspection method:** Consolidation of static archaeology through Pass 7.
- **Scope:** Unresolved questions after Batches 13, Batch 4A4C (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 13 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 13 / 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 9enemy Blueprint AI
2. Pass 4sessions / frontend
3. Pass 10 — pickup deep dive
4. Controlled PIE — dual HUD, spawn attrs, EffectActor on player/enemy, potion vs DEPRECATED health
1. Pass 4sessions / frontend
2. Pass 10pickup deep dive
3. Controlled PIE — enemy idle/possession, player hit feedback, dual HUD, potions
4. Pass 11 — migration matrix (after Batch 4 complete)
+15 -28
View File
@@ -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 13 evidence rows
- Batch 4A Pass 8 AnimBP / Montage / AnimNotify rows
- Batch 4B Pass 7 GAS / GE / tag / cue / grant rows
- Batch 13; 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 57 | — | — | — | — | — | 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 | — |
+45 -58
View File
@@ -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 4BPartial GAS architecture |
| Passes completed | Pass 7 |
| Batch completed | Batch 4CEnemy 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 9Enemy BP AI
2. Pass 4Frontend / sessions
3. Pass 10 — Pickup deep dive
1. Pass 4Frontend / sessions
2. Pass 10Pickup 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