diff --git a/Documentation/Archaeology/03-ClassHierarchy.md b/Documentation/Archaeology/03-ClassHierarchy.md index 0af25606..2478d41d 100644 --- a/Documentation/Archaeology/03-ClassHierarchy.md +++ b/Documentation/Archaeology/03-ClassHierarchy.md @@ -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`. --- diff --git a/Documentation/Archaeology/05-LegacyAbilityArchitecture.md b/Documentation/Archaeology/05-LegacyAbilityArchitecture.md index 3c945c23..d5e0bf25 100644 --- a/Documentation/Archaeology/05-LegacyAbilityArchitecture.md +++ b/Documentation/Archaeology/05-LegacyAbilityArchitecture.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. --- diff --git a/Documentation/Archaeology/06-PartialGASArchitecture.md b/Documentation/Archaeology/06-PartialGASArchitecture.md index 0c687861..0d8c79b0 100644 --- a/Documentation/Archaeology/06-PartialGASArchitecture.md +++ b/Documentation/Archaeology/06-PartialGASArchitecture.md @@ -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()` | 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. --- diff --git a/Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md b/Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md index ad2c359e..0de624e8 100644 --- a/Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md +++ b/Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md @@ -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. diff --git a/Documentation/Archaeology/10-AnimationDependencies.md b/Documentation/Archaeology/10-AnimationDependencies.md index 2a755f22..d192799f 100644 --- a/Documentation/Archaeology/10-AnimationDependencies.md +++ b/Documentation/Archaeology/10-AnimationDependencies.md @@ -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`. diff --git a/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md b/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md index cb7ae201..644696be 100644 --- a/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md +++ b/Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.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) diff --git a/Documentation/Archaeology/14-EvidenceIndex.md b/Documentation/Archaeology/14-EvidenceIndex.md index 9dbfde6b..ff44501c 100644 --- a/Documentation/Archaeology/14-EvidenceIndex.md +++ b/Documentation/Archaeology/14-EvidenceIndex.md @@ -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 | — | diff --git a/Documentation/Archaeology/15-HandoffStatus.md b/Documentation/Archaeology/15-HandoffStatus.md index 31ba733f..a598abe0 100644 --- a/Documentation/Archaeology/15-HandoffStatus.md +++ b/Documentation/Archaeology/15-HandoffStatus.md @@ -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