Document Batch 2–3 Phase 1 archaeology: shared player-base architecture and per-character ability inventories.
Captures Blueprint hierarchy, legacy ability/RPC paths, animation dependency seeds, and handoff state without modifying Unreal assets. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
---
|
||||
name: Phase 1 Archaeology
|
||||
overview: Execute Phase 1 archaeology in user-authorized batches (Batch 1–5). Create docs only with substantive evidence; mark Draft/Complete correctly; run repository integrity before/after; never auto-continue to the next batch.
|
||||
todos:
|
||||
- id: batch1-foundation
|
||||
content: "Batch 1 (authorized): Passes 0–2 — continuity, modules/config, native C++ → 02+03+14+15 (+seeds)"
|
||||
status: completed
|
||||
- id: batch2-bp-foundation
|
||||
content: "Batch 2 (completed): Passes 3+5 — BP hierarchy + BP_PlayerCharacterBase deep dive → 03/05/08 (+seeds)"
|
||||
status: completed
|
||||
- id: batch3-abilities
|
||||
content: "Batch 3 (completed): Pass 6 — per-character ability/RPC/anim inventory → 05/08/10 (+seeds)"
|
||||
status: completed
|
||||
- id: batch4-supporting
|
||||
content: "Batch 4 (when authorized): Passes 4+7+8+9+10 — frontend, GAS, anim, enemy, UI/pickups/maps"
|
||||
status: pending
|
||||
- id: batch5-synthesis
|
||||
content: "Batch 5 (when authorized): Pass 11 — matrix, unknowns, summary, final handoff"
|
||||
status: pending
|
||||
isProject: false
|
||||
---
|
||||
|
||||
# Phase 1 Static Archaeology Execution Plan
|
||||
|
||||
## Execution control (mandatory)
|
||||
|
||||
Do **not** execute Phase 1 in one uninterrupted agent run.
|
||||
|
||||
Execute **only** the batch explicitly authorized by the user. Do **not** auto-continue to the next batch.
|
||||
|
||||
### Phase 1 execution batches
|
||||
|
||||
| Batch | Passes | Focus |
|
||||
|-------|--------|-------|
|
||||
| **Batch 1 — Foundation** | 0, 1, 2 | Continuity gate; modules/plugins/config; native C++ hierarchy |
|
||||
| **Batch 2 — Blueprint foundation** | 3, 5 | Blueprint hierarchy; `BP_PlayerCharacterBase` deep dive |
|
||||
| **Batch 3 — Character abilities** | 6 | Per-character ability, RPC, networking, animation inventory |
|
||||
| **Batch 4 — Supporting systems** | 4, 7, 8, 9, 10 | Frontend/sessions; partial GAS; animation; enemy AI; UI/HUD/pickups/maps |
|
||||
| **Batch 5 — Synthesis** | 11 (+ final 13/14/01/15) | Migration matrix; unknowns; evidence index; executive summary; final handoff |
|
||||
|
||||
Do not begin Batch 5 until Batches 1–4 are complete and their documents have been reviewed for sufficient evidence.
|
||||
|
||||
### End of every authorized batch
|
||||
|
||||
1. Stop all further investigation.
|
||||
2. Update `14-EvidenceIndex.md`.
|
||||
3. Update `15-HandoffStatus.md` with exact current state.
|
||||
4. Mark every touched archaeology document Draft or Complete.
|
||||
5. List all files created or modified.
|
||||
6. Report failed MCP calls and incomplete inspections.
|
||||
7. Report tool, visibility, or context limitations.
|
||||
8. Record exact recommended starting points for the next batch.
|
||||
9. Confirm no unauthorized project content or editor state was modified (repository integrity gate).
|
||||
10. Wait for explicit user authorization before beginning another batch.
|
||||
|
||||
## Document creation and status (mandatory)
|
||||
|
||||
- Do **not** create empty Markdown shells for every planned archaeology document.
|
||||
- Create a document only when its first **substantive evidence** is recorded.
|
||||
- Near the top of every archaeology document: `Status: Draft` or `Status: Complete`.
|
||||
- Mark **Complete** only when all investigation areas assigned to that document for Phase 1 have been inspected as far as approved tools allow.
|
||||
- Do **not** mark Complete merely because the current batch ended.
|
||||
- Every **Draft** document must clearly include: Completed sections; Pending sections; Evidence still required; Tool/visibility limitations; Unknowns requiring later verification; Last completed pass; Next pass expected to contribute.
|
||||
- Do not leave blank, placeholder-only, or minimally populated shells that could be mistaken for completed archaeology.
|
||||
- Do **not** modify `00-MCP-Capability-Calibration.md`.
|
||||
|
||||
## Repository integrity gate (mandatory)
|
||||
|
||||
**Before** beginning an authorized batch:
|
||||
|
||||
1. Record repository status (`git status --short`, `git diff --name-only`, `git diff --cached --name-only` if Git available).
|
||||
2. Record pre-existing modified/untracked files.
|
||||
3. Do not alter, stage, commit, revert, delete, or clean pre-existing changes.
|
||||
|
||||
**After** completing the batch:
|
||||
|
||||
1. Re-run read-only status checks; compare to start snapshot.
|
||||
2. Confirm every newly created/modified file is Markdown under `Documentation/Archaeology/`.
|
||||
3. If any other file changed: stop immediately; report exact path(s); do not revert/repair without user authorization.
|
||||
4. Record integrity result in `15-HandoffStatus.md` and the batch completion report.
|
||||
|
||||
## Current baseline (do not contradict without evidence)
|
||||
|
||||
- Only [Documentation/Archaeology/00-MCP-Capability-Calibration.md](Documentation/Archaeology/00-MCP-Capability-Calibration.md) existed before Batch 1.
|
||||
- Calibration: no project BT/Blackboard/custom AIController; no discrete GA assets found; `Player_Amazonian` (not `Player_Amazon`); stock `AIController` on skeleton; DEPRECATED Paladin graphs inspectable.
|
||||
- Native GAS ownership split: player ASC on `ARIRPlayerState`; enemy ASC on `ARIRBaseEnemyCharacter`; empty `URIRGameplayAbility` scaffolding.
|
||||
- Playable BPs: Paladin, Amazonian, Cleric, Wizard, Gunslinger.
|
||||
- Framework BPs: `GI_Dungeoneer`, `GM_Dungeoneer`, `GM_MainMenu`; default-attribute GEs for Paladin/Amazon/Cleric/Wizard (Gunslinger GE absence unconfirmed until inspected).
|
||||
|
||||
## Hard constraints (session-wide)
|
||||
|
||||
- **Writes:** only Markdown under `Documentation/Archaeology/`.
|
||||
- **MCP:** approved read-only toolsets only; never PIE, load_level, compile, save, mutate, SemanticSearch, ProgrammaticToolset, Slate automation.
|
||||
- Evidence labels: Observed Implementation / Documented Intent / Observed Runtime Behavior / Inferred / Unknown.
|
||||
- Issue labels as specified; baseline defects ≠ migration regressions.
|
||||
- Exact names; no implementation recommendations during investigation batches.
|
||||
- Batch 1 may record Blueprint child paths as seeds only — no deep BP graph/ability/UI/anim/enemy BP analysis.
|
||||
|
||||
## Batch status
|
||||
|
||||
| Batch | Status |
|
||||
|-------|--------|
|
||||
| Batch 1 — Foundation (Passes 0–2) | **Completed** |
|
||||
| Batch 2 — Blueprint foundation (Passes 3 + 5) | **Completed** |
|
||||
| Batch 3 — Character abilities (Pass 6) | **Completed** |
|
||||
| Batch 4 — Supporting systems | Waiting for authorization |
|
||||
| Batch 5 — Synthesis | Waiting for authorization |
|
||||
|
||||
## Batch 1 — Foundation (COMPLETED)
|
||||
|
||||
### Pass 0 — Continuity gate
|
||||
- Read all existing Archaeology Markdown; confirm PIE off, level/selection unchanged via read-only EditorApp/Scene tools.
|
||||
- Repository integrity pre-snapshot.
|
||||
- Do not mutate editor or repo.
|
||||
|
||||
### Pass 1 — Modules, plugins, configuration → `02-ProjectArchitecture.md`
|
||||
- Inspect `.uproject`, Build.cs, Targets, module startup, AdvancedSessions/AdvancedSteamSessions descriptors, DefaultEngine/Game/GameplayTags/Input.ini, PluginToolset read-only.
|
||||
- Seed `13`/`14`/`15` as warranted.
|
||||
|
||||
### Pass 2 — Native C++ hierarchy → `03-ClassHierarchy.md`
|
||||
- Inspect every file under `Source/REALMSINRUIN/`.
|
||||
- Document all native classes listed in the brief; record Blueprint subclass paths as Batch 2 seeds only.
|
||||
- Seed `02`, `06`, `08`, `09`, `11`, `12`, `13`, `14`, `15` only when substantive evidence exists.
|
||||
|
||||
## Batch 2 — Blueprint foundation (COMPLETED)
|
||||
|
||||
### Pass 3 — Blueprint hierarchy
|
||||
- Structural inventory of player/enemy/framework/interface Blueprints; resolve `WBP_PlayerHUD` as AHUD (`RIRHUD` child).
|
||||
- Primary writes: `03`/`08`/`09`/`11`; seeds into `06`/`13`/`14`/`15`.
|
||||
|
||||
### Pass 5 — `BP_PlayerCharacterBase` deep dive
|
||||
- Connected path tracing of shared input/RPC/death/HUD/multicast architecture.
|
||||
- Created `05-LegacyAbilityArchitecture.md`; updated `03`/`06`/`08`.
|
||||
|
||||
**Batch 2 outcomes (do not contradict without evidence):** abilities are legacy `IA_Ability_*` → `Server_Ability_*` (not GAS GAs); `BP_PlayerState.DefaultAttributesGameplayEffect=None`; dual HUD (ASC Overlay + DEPRECATED floats); Gunslinger data-only / Wizard no ability events.
|
||||
|
||||
## Batch 3 — Character abilities (COMPLETED)
|
||||
|
||||
### Pass 6 — Per-character ability archaeology
|
||||
- Connected-path reconstruction for Paladin → Amazonian → Cleric → Wizard → Gunslinger.
|
||||
- Ability 001–004 Begin/End, UseAbility*, resources, damage, RPCs, parent-call inventory, Montage seeds.
|
||||
- Primary writes: `05`/`08`/`10`; seeds into `06`/`13`/`14`/`15`.
|
||||
- Did **not** create `07-AbilityMigrationMatrix.md` (Pass 11).
|
||||
|
||||
**Batch 3 outcomes (do not contradict without evidence):** Paladin 001/003/004 and Amazonian 001 Implemented; Cleric 003 Implemented / 004 broken; Wizard + Gunslinger inherit PrintString stubs; no GA activate/grant in ability graphs; most Ends missing; Reliability flags Unknown (MCP).
|
||||
|
||||
## Later batches (not authorized yet)
|
||||
|
||||
### Batch 4 — Passes 4, 7, 8, 9, 10
|
||||
Frontend/sessions; partial GAS; animation; enemy AI; UI/HUD/pickups/maps → `04`/`06`/`09`/`10`/`11`/`12`.
|
||||
|
||||
### Batch 5 — Pass 11 + synthesis
|
||||
Migration matrix; unknowns; evidence index; executive summary; final handoff → `01`/`07`/`13`/`14`/`15`.
|
||||
|
||||
## Contradiction protocol
|
||||
|
||||
If new evidence conflicts with calibration or an earlier doc: cite both, state which is better supported, update analysis, log in `15-HandoffStatus.md`.
|
||||
|
||||
## Completion gate
|
||||
|
||||
Phase 1 complete only when all required docs exist with sufficient evidence, Batch 5 synthesis is done, and no non-Markdown project content was modified.
|
||||
@@ -2,37 +2,33 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Native C++ class hierarchy under `Source/REALMSINRUIN/`, including parents, components, properties, replication, RPCs, GAS hooks, Blueprint extension points, and discovered Blueprint subclass paths (seeds only).
|
||||
- **Inspection method:** Full read of every `.h`/`.cpp` under `Source/REALMSINRUIN/`; MCP `ObjectTools.search_subclasses` for child discovery (paths only — no Blueprint graph inspection).
|
||||
- **Scope:** Native C++ hierarchy under `Source/REALMSINRUIN/` plus Blueprint parent chains, interfaces, and framework Blueprints inspected in Batch 2 Pass 3.
|
||||
- **Inspection method:** Batch 1 native reads; Batch 2 read-only AssetTools tags/deps + BlueprintTools graphs/events/variables; ObjectTools CDO properties.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Batch 1 forbids deep Blueprint graph analysis. Inherited Blueprint variables not inspected. No native RPCs found to verify runtime.
|
||||
- **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 2 (Batch 1)
|
||||
- **Next pass expected to contribute:** Batch 2 Passes 3 + 5 (Blueprint hierarchy and BP_PlayerCharacterBase)
|
||||
- **Last completed pass:** Pass 5 (Batch 2)
|
||||
- **Next pass expected to contribute:** Batch 3 Pass 6 (per-character ability graphs)
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Full native class inventory for characters, player framework, GAS, UI, interfaces
|
||||
- ASC ownership split (player vs enemy)
|
||||
- AttributeSet replication and constructor defaults
|
||||
- EffectActor GE application path
|
||||
- HUD / OverlayWidgetController attribute delegate wiring
|
||||
- Blueprint subclass path seeds
|
||||
- Full native class inventory (Batch 1)
|
||||
- Blueprint parent chains for players, enemies, PC/PS, GI/GM
|
||||
- Interface inventory under `/Game/_Main/Blueprints/Interfaces`
|
||||
- WBP_PlayerHUD asset-class resolution (AHUD, not UserWidget)
|
||||
- BP_PlayerState DefaultAttributesGameplayEffect = None
|
||||
|
||||
### Pending sections
|
||||
- Blueprint parent chains, variables, graphs, interfaces on children
|
||||
- GameMode / GameInstance Blueprint internals
|
||||
- Whether DefaultAttributesGameplayEffect is assigned on BP_PlayerState
|
||||
- Deep child ability graphs (Pass 6)
|
||||
- Enemy AI graph deep dive (Pass 9)
|
||||
- Frontend/session graphs (Pass 4)
|
||||
|
||||
### Evidence still required
|
||||
- Connected ability/RPC graphs on BP_PlayerCharacterBase and Player_* classes
|
||||
- Whether enemy BP overrides GetAbilitySystemComponent behavior (native override is PlayerState-based)
|
||||
|
||||
### Unknowns requiring later verification
|
||||
- Runtime behavior of `IAbilitySystemInterface` on enemies given base `GetAbilitySystemComponent` implementation
|
||||
- Application of `DefaultAttributesGameplayEffect` (declared, never called in native)
|
||||
- Exact CustomEvent reliable flags
|
||||
- Who invokes `PlayerDeath` from damage
|
||||
- CommonUI content usage
|
||||
|
||||
---
|
||||
|
||||
@@ -45,269 +41,164 @@ flowchart TD
|
||||
ARIRBaseCharacter --> ARIRPlayerCharacter
|
||||
ARIRBaseCharacter --> ARIRBaseEnemyCharacter
|
||||
ITarget[ITargetInterface] --> ARIRBaseEnemyCharacter
|
||||
ARIRPlayerCharacter --> BP_PlayerCharacterBase
|
||||
BP_PlayerCharacterBase --> Player_Paladin
|
||||
BP_PlayerCharacterBase --> Player_Amazonian
|
||||
BP_PlayerCharacterBase --> Player_Cleric
|
||||
BP_PlayerCharacterBase --> Player_Wizard
|
||||
BP_PlayerCharacterBase --> Player_Gunslinger
|
||||
ARIRBaseEnemyCharacter --> BP_EnemyCharacterBase
|
||||
BP_EnemyCharacterBase --> BP_Enemy_Skeleton
|
||||
APlayerState --> ARIRPlayerState
|
||||
IASI --> ARIRPlayerState
|
||||
ARIRPlayerState --> BP_PlayerState
|
||||
APlayerController --> ARIRPlayerController
|
||||
ARIRPlayerController --> PC_Character
|
||||
AHUD --> ARIRHUD
|
||||
UAbilitySystemComponent --> URIRAbilitySystemComponent
|
||||
UAttributeSet --> URIRAttributeSet
|
||||
UGameplayAbility --> URIRGameplayAbility
|
||||
AActor --> ARIREffectActor
|
||||
UUserWidget --> URIRUserWidget
|
||||
UObject --> URIRWidgetController
|
||||
URIRWidgetController --> UOverlayWidgetController
|
||||
ARIRHUD --> WBP_PlayerHUD
|
||||
AGameModeBase --> GM_Dungeoneer
|
||||
AGameModeBase --> GM_MainMenu
|
||||
UGameInstance --> GI_Dungeoneer
|
||||
```
|
||||
|
||||
**Observed Implementation:** No native `AGameMode`, `UGameInstance`, or `AGameState` subclasses in the module.
|
||||
---
|
||||
|
||||
## 1. Characters (native — Batch 1 summary)
|
||||
|
||||
See Batch 1 sections for `ARIRBaseCharacter`, `ARIRPlayerCharacter`, `ARIRBaseEnemyCharacter` native details. Key contradictions unchanged: enemy ASC on self vs base `GetAbilitySystemComponent` from PlayerState; `DefaultAttributesGameplayEffect` unused in C++.
|
||||
|
||||
---
|
||||
|
||||
## 1. Characters
|
||||
## 2. Player Blueprint hierarchy (Pass 3)
|
||||
|
||||
### 1.1 `ARIRBaseCharacter` (ABSTRACT)
|
||||
### 2.1 `BP_PlayerCharacterBase`
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/Characters/RIRBaseCharacter.h`](Source/REALMSINRUIN/Public/Characters/RIRBaseCharacter.h) |
|
||||
| Impl | [`Private/Characters/RIRBaseCharacter.cpp`](Source/REALMSINRUIN/Private/Characters/RIRBaseCharacter.cpp) |
|
||||
| Parent | `ACharacter` |
|
||||
| Interfaces | `IAbilitySystemInterface` |
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Asset path | `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase` |
|
||||
| Asset class | `BP_PlayerCharacterBase_C` |
|
||||
| Parent | `/Script/REALMSINRUIN.RIRPlayerCharacter` |
|
||||
| Native parent | `RIRPlayerCharacter` |
|
||||
| Interfaces | `BPI_PlayerCharacter` (graphs: GetPlayer*REF, GetPlayerREF) |
|
||||
| NumReplicatedProperties (tag) | 18 |
|
||||
| Components | Native: CollisionCylinder, Arrow, CharacterMesh0, CharMoveComp; BP: ThirdPersonCamera, CameraPositionRef, TPSpringArm, BP_FootstepComponent_Left/Right |
|
||||
|
||||
**Properties (Observed Implementation):**
|
||||
**Graphs:** UserConstructionScript, EventGraph, GetPlayerPaladinREF, GetPlayerREF, GetPlayerWizardREF, GetPlayerAmazonREF, GetPlayerClericREF
|
||||
|
||||
- `TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent` — VisibleAnywhere, BlueprintReadOnly, Category Abilities
|
||||
- `TObjectPtr<UAttributeSet> AttributeSet` — same
|
||||
**Variables (local):** PlayerController, PlayerPawn, CurrentlyAttacking, CharacterClass, ManaRegenTimer, CameraPanTriggerDown, CameraTurnRate, IsDead, InitialSpawnLocation, plus DEPRECATED_Current/Max Health/Mana/Stamina, DEPRECATED_ManaRegenOverTime, DEPRECATED_Ability001–004 Damage/ManaCost
|
||||
|
||||
**Functions:**
|
||||
**Replication samples:** CurrentlyAttacking, IsDead, DEPRECATED_CurrentHealth/Mana = Replicated; PlayerController, CharacterClass = None
|
||||
|
||||
- `GetAbilitySystemComponent()` override — **returns `GetPlayerState<ARIRPlayerState>()->GetAbilitySystemComponent()`**, else nullptr. Does **not** return the local `AbilitySystemComponent` member.
|
||||
- `GetAttributeSet()` — returns local `AttributeSet` member
|
||||
- Constructor empty; `BeginPlay` comment: "GAS Initialization moved to PossessedBy / OnRep_PlayerState"
|
||||
**Implemented custom events (selection):** Server_Ability_001–004 Begin/End, Server_UpdateHUD, PlayerDeath, Client_PlayerDeath, Server_RespawnPlayer, RotateCamera, Multicast_PlayMontage, Multicast_PlaySFX, Multi_SpawnParticle, HandleDeath; plus Possessed, BeginPlay, SetIsAttacking, InitializeHUD, AddKill_PlayerCharacter
|
||||
|
||||
**Documented Intent:** Comment on class: "Base Character class using GAS for RIR Project."
|
||||
**Input Action refs (deps):** IA_Ability_001–004, IA_CameraPan, IA_CameraPanTrigger, IA_CameraZoom
|
||||
|
||||
**Contradiction (Observed Implementation vs Documented Intent):** Header comment claims GAS-based character; `GetAbilitySystemComponent` assumes a player PlayerState. Enemies inherit this override but own ASC on the character — see §1.3 and §Contradictions.
|
||||
**Deep dive:** See `05-LegacyAbilityArchitecture.md` and `08-CharacterSystems.md`.
|
||||
|
||||
**RPCs / replication:** None declared on this class.
|
||||
### 2.2 Playable children (structural)
|
||||
|
||||
**Blueprint children (seed):** See §1.2 / calibration — via `ARIRPlayerCharacter` and `ARIRBaseEnemyCharacter` lineages.
|
||||
| Character | Path | Parent | IsDataOnly | Local vars | Ability-related implemented events |
|
||||
|-----------|------|--------|------------|------------|-------------------------------------|
|
||||
| Paladin | `.../Paladin/Player_Paladin` | BP_PlayerCharacterBase_C | False | Ability001Montages, ChargeStartLoc, ChargeFinishLoc, IsCharging, IsBlocking | Server_001 Begin; 002 Begin+End; 003 Begin; 004 Begin; UseAbility001/004; Charge; Client_Charge |
|
||||
| Amazonian | `.../Amazonian/Player_Amazonian` | BP_PlayerCharacterBase_C | False | DynamicMaterials, Ability001Montage, PerformingWhirlwind | Server_001 Begin; UseAbility001; ReceiveAnyDamage |
|
||||
| Cleric | `.../Cleric/Player_Cleric` | BP_PlayerCharacterBase_C | False | Ability001Montages, DivineCircle*, IsBlocking, EnemyFound, ClosestEnemy | Server_001–004 Begin; Server_003 End; UseAbility002/004; Concentrate* |
|
||||
| Wizard | `.../Wizard/Player_Wizard` | BP_PlayerCharacterBase_C | False | EnemyFound, IsBlocking, ClosestEnemy | ReceiveBeginPlay/Tick/ActorBeginOverlap only |
|
||||
| Gunslinger | `.../Gunslinger/Player_Gunslinger` | BP_PlayerCharacterBase_C | **True** | [] | ReceiveBeginPlay/Tick/ActorBeginOverlap; **deps only base** |
|
||||
|
||||
**AnimBP (Paladin sample):** Mesh AnimClass = `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/ABP_Paladin`
|
||||
|
||||
**Naming:** Use `Player_Amazonian` (not Amazon). BPI_PlayerCharacter deps list Amazonian/Cleric/Paladin/Wizard — **not Gunslinger**.
|
||||
|
||||
---
|
||||
|
||||
### 1.2 `ARIRPlayerCharacter`
|
||||
## 3. Enemy Blueprint hierarchy (Pass 3 seed)
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/Player/RIRPlayerCharacter.h`](Source/REALMSINRUIN/Public/Player/RIRPlayerCharacter.h) |
|
||||
| Impl | [`Private/Player/RIRPlayerCharacter.cpp`](Source/REALMSINRUIN/Private/Player/RIRPlayerCharacter.cpp) |
|
||||
| Parent | `ARIRBaseCharacter` |
|
||||
| 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 |
|
||||
|
||||
**Observed Implementation:**
|
||||
**Deps (Skeleton):** SKM_Skeleton_Guard_Body, BPI_EnemyCharacter, BP_EnemyCharacterBase, ABP_Skeleton, REALMSINRUIN
|
||||
|
||||
- Constructor comment: "Removed GAS component creation — now handled by PlayerState"
|
||||
- `PossessedBy` → `InitAbilityActorInfo()` (server)
|
||||
- `OnRep_PlayerState` → `InitAbilityActorInfo()` (client)
|
||||
- `InitAbilityActorInfo()`:
|
||||
1. `check(GetPlayerState<ARIRPlayerState>())`
|
||||
2. `ASC->InitAbilityActorInfo(PlayerState, this)` — Owner = PlayerState, Avatar = Character
|
||||
3. Copies ASC and AttributeSet pointers from PlayerState onto character members
|
||||
4. If controller is `ARIRPlayerController` and HUD is `ARIRHUD`, calls `RIRHUD->InitOverlay(...)`
|
||||
|
||||
**No RPCs. No ability granting. No DefaultAttributes application.**
|
||||
|
||||
**Known Blueprint subclasses (seed — Observed Implementation via search_subclasses):**
|
||||
|
||||
- `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase`
|
||||
- `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian`
|
||||
- `.../Cleric/Player_Cleric`
|
||||
- `.../Paladin/Player_Paladin`
|
||||
- `.../Wizard/Player_Wizard`
|
||||
- `.../Gunslinger/Player_Gunslinger`
|
||||
Deep AI graph analysis deferred to Pass 9.
|
||||
|
||||
---
|
||||
|
||||
### 1.3 `ARIRBaseEnemyCharacter`
|
||||
## 4. Player framework Blueprints
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/Characters/RIRBaseEnemyCharacter.h`](Source/REALMSINRUIN/Public/Characters/RIRBaseEnemyCharacter.h) |
|
||||
| Impl | [`Private/Characters/RIRBaseEnemyCharacter.cpp`](Source/REALMSINRUIN/Private/Characters/RIRBaseEnemyCharacter.cpp) |
|
||||
| Parent | `ARIRBaseCharacter` |
|
||||
| Interfaces | `ITargetInterface` |
|
||||
### 4.1 `PC_Character`
|
||||
|
||||
**Observed Implementation — constructor:**
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/Blueprints/Player/PC_Character` |
|
||||
| Parent | RIRPlayerController |
|
||||
| Interface | BPI_PlayerController (GetPC_DungeoneerReference) |
|
||||
| Variables | CharacterSelectHUD |
|
||||
| Implemented events | ServerSpawnCharacter, ReceiveBeginPlay, PlayerFirstSpawn, PlayerSelectScreenChoice, PlayerRespawn |
|
||||
| CDO IMC | `/Game/_Main/Blueprints/Player/Inputs/IMC_PlayerDefault` |
|
||||
| CDO MovementInput | `/Game/_Main/Blueprints/Player/Inputs/Movement/IA_Movement` |
|
||||
|
||||
- Mesh Visibility channel → Block
|
||||
- Creates `URIRAbilitySystemComponent` on self; `SetIsReplicated(true)`; `SetReplicationMode(Minimal)`
|
||||
- Creates `URIRAttributeSet` on self
|
||||
### 4.2 `BP_PlayerState`
|
||||
|
||||
**BeginPlay:** `AbilitySystemComponent->InitAbilityActorInfo(this, this)` — Owner and Avatar both the enemy.
|
||||
|
||||
**ITargetInterface:** `HighlightActor` / `UnHighlightActor` toggle custom depth stencil `CUSTOM_DEPTH_RED` (250).
|
||||
|
||||
**No AI movement, targeting, attack, Behavior Tree, or Perception code in native.**
|
||||
|
||||
**Known Blueprint subclasses (seed):**
|
||||
|
||||
- `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase`
|
||||
- `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton`
|
||||
|
||||
**Issue classification:** Incomplete Refactor / Partially Implemented (ASC on enemy vs base GetASC from PlayerState). **Requires Runtime Inspection** for GE application to enemies via `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent`.
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/Blueprints/Player/BP_PlayerState` |
|
||||
| Parent | RIRPlayerState |
|
||||
| IsDataOnly | True |
|
||||
| Variables | [] |
|
||||
| Implemented events | BeginPlay, Tick |
|
||||
| **DefaultAttributesGameplayEffect** | **None** (Observed Implementation on CDO) |
|
||||
|
||||
---
|
||||
|
||||
## 2. Player framework
|
||||
## 5. Game framework Blueprints
|
||||
|
||||
### 2.1 `ARIRPlayerState`
|
||||
| Asset | Parent | Notes |
|
||||
|-------|--------|-------|
|
||||
| `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` | GameInstance | IsDataOnly; no implemented events; empty deps |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` | GameModeBase | BPI_GameMode; vars PlayerStartLocations, ConnectedPlayers, Player Stats; events PostLogin/Logout/BeginPlay/GetSelectedClass |
|
||||
| `/Game/_Main/Blueprints/Game/GameMode/GM_MainMenu` | GameModeBase | IsDataOnly; deps PC_MainMenu, BP_MainMenuPawn |
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/Player/RIRPlayerState.h`](Source/REALMSINRUIN/Public/Player/RIRPlayerState.h) |
|
||||
| Impl | [`Private/Player/RIRPlayerState.cpp`](Source/REALMSINRUIN/Private/Player/RIRPlayerState.cpp) |
|
||||
| Parent | `APlayerState` |
|
||||
| Interfaces | `IAbilitySystemInterface` |
|
||||
**GM_Dungeoneer CDO (Observed Implementation):**
|
||||
|
||||
**Observed Implementation:**
|
||||
|
||||
- Owns `URIRAbilitySystemComponent` — replicated, `EGameplayEffectReplicationMode::Mixed`
|
||||
- Owns `URIRAttributeSet`
|
||||
- `NetUpdateFrequency = 100.f`
|
||||
- `TSubclassOf<UGameplayEffect> DefaultAttributesGameplayEffect` (EditDefaultsOnly) — **never referenced in .cpp**
|
||||
|
||||
**Blueprint subclass seed:** `/Game/_Main/Blueprints/Player/BP_PlayerState`
|
||||
|
||||
**Issue:** Partially Implemented — default attributes GE property without native apply path.
|
||||
- HUDClass = `WBP_PlayerHUD_C`
|
||||
- PlayerControllerClass = `PC_Character_C`
|
||||
- PlayerStateClass = `BP_PlayerState_C`
|
||||
- DefaultPawnClass = None (spawn via PC flow)
|
||||
|
||||
---
|
||||
|
||||
### 2.2 `ARIRPlayerController`
|
||||
## 6. Interfaces discovered
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/Player/RIRPlayerController.h`](Source/REALMSINRUIN/Public/Player/RIRPlayerController.h) |
|
||||
| Impl | [`Private/Player/RIRPlayerController.cpp`](Source/REALMSINRUIN/Private/Player/RIRPlayerController.cpp) |
|
||||
| Parent | `APlayerController` |
|
||||
| Interface | Path | Key graphs |
|
||||
|-----------|------|------------|
|
||||
| BPI_PlayerCharacter | `/Game/_Main/Blueprints/Interfaces/BPI_PlayerCharacter` | UseAbility001–004, SetIsAttacking, InitializeHUD, GetPlayer*REF, DEPRECATED_Recover*, AddKill_PlayerCharacter |
|
||||
| BPI_EnemyCharacter | `.../BPI_EnemyCharacter` | GetEnemyREF, AddPlayerTarget, EnemyMeleeAttack |
|
||||
| BPI_PlayerController | `.../BPI_PlayerController` | SetPlayerCanMove, UpdatePlayerHUD, PlayerRespawn, PlayerSelectScreenChoice, PlayerFirstSpawn, AddGold, GetPC_DungeoneerReference, AddKill_PlayerController |
|
||||
| BPI_GameMode | `.../BPI_GameMode` | GetPlayerStats (on GM_Dungeoneer) |
|
||||
|
||||
**Observed Implementation:**
|
||||
|
||||
- `bReplicates = true`
|
||||
- Enhanced Input: `PlayerMappingContext`, `MovementInput` (EditAnywhere — must be assigned in editor/BP)
|
||||
- `BeginPlay`: `check(PlayerMappingContext)`; add IMC; show mouse; GameAndUI input mode
|
||||
- `SetupInputComponent`: bind MovementInput → `HandleMovementInput`
|
||||
- `PlayerTick` → `CursorTrace` for `ITargetInterface` highlight
|
||||
- `BindCallbacksToDependencies()` empty stub
|
||||
- TODO comment: controller-compatible cursor / Gauntlet-style targeting
|
||||
|
||||
**No ability input bindings in native. No RPCs.**
|
||||
|
||||
**Blueprint subclass seed:** `/Game/_Main/Blueprints/Player/PC_Character`
|
||||
No separate ability/damage/targeting/session BPI assets under `/Game/_Main/Blueprints/Interfaces` beyond the four above.
|
||||
|
||||
---
|
||||
|
||||
### 2.3 `ARIRHUD`
|
||||
## 7. WBP_PlayerHUD resolution
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Header | [`Public/UI/HUD/RIRHUD.h`](Source/REALMSINRUIN/Public/UI/HUD/RIRHUD.h) |
|
||||
| Impl | [`Private/UI/HUD/RIRHUD.cpp`](Source/REALMSINRUIN/Private/UI/HUD/RIRHUD.cpp) |
|
||||
| Parent | `AHUD` |
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD` |
|
||||
| Asset class | `WBP_PlayerHUD_C` |
|
||||
| Parent | `/Script/REALMSINRUIN.RIRHUD` (**AHUD**) |
|
||||
| IsDataOnly | True |
|
||||
| Verdict | **AHUD Blueprint**, not a Widget Blueprint. `WBP_` prefix is misleading. |
|
||||
| Referencers | `GM_Dungeoneer` |
|
||||
| Dependencies | REALMSINRUIN, `WBP_Overlay`, `BP_OverlayWidgetController` |
|
||||
|
||||
**Observed Implementation:**
|
||||
|
||||
- `OverlayWidgetClass`, `OverlayWidgetControllerClass` (EditAnywhere — editor/BP assigned)
|
||||
- `InitOverlay`: checkf messages reference filling `WBP_PlayerHUD`; creates widget; builds `FWidgetControllerParams`; `BroadcastInitialInitialValues`; `AddToViewport`
|
||||
- `GetOverlayWidgetController`: creates controller, `SetWidgetControllerParams`, `BindCallbacksToDependencies`
|
||||
|
||||
**Subclass search seed:** returned `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD` — **Requires Manual Editor Inspection** to confirm whether this asset is a HUD Blueprint or mis-tagged; name suggests Widget Blueprint.
|
||||
Resolves Batch 1 subclass-search anomaly: ObjectTools returned this asset under RIRHUD search because it **is** an RIRHUD child.
|
||||
|
||||
---
|
||||
|
||||
## 3. GAS scaffolding
|
||||
## 8. Native RPCs
|
||||
|
||||
### 3.1 `URIRAbilitySystemComponent`
|
||||
|
||||
Thin subclass of `UAbilitySystemComponent`. Empty constructor. No custom granting, input binding, or tag logic.
|
||||
|
||||
Header: [`Public/Abilities/RIRAbilitySystemComponent.h`](Source/REALMSINRUIN/Public/Abilities/RIRAbilitySystemComponent.h)
|
||||
|
||||
### 3.2 `URIRAttributeSet`
|
||||
|
||||
| Attributes | Replication |
|
||||
|------------|-------------|
|
||||
| Health, MaxHealth, Mana, MaxMana, Stamina, MaxStamina | `DOREPLIFETIME_CONDITION_NOTIFY` + OnRep_* → `GAMEPLAYATTRIBUTE_REPNOTIFY` |
|
||||
|
||||
Constructor inits: Health=75, MaxHealth=100, Mana=25, MaxMana=50. **Does not call InitStamina / InitMaxStamina** (remain default 0.f unless set by GE).
|
||||
|
||||
No `PostGameplayEffectExecute` / clamping logic in .cpp.
|
||||
|
||||
### 3.3 `URIRGameplayAbility`
|
||||
|
||||
**Documented Intent:** "Base class for all Gameplay Abilities in RIR Project"
|
||||
|
||||
**Observed Implementation:** Sets `InstancingPolicy = InstancedPerActor` only. No ActivateAbility, tags, costs, or cooldowns.
|
||||
|
||||
**search_subclasses:** **only** `/Script/REALMSINRUIN.RIRGameplayAbility` — **no derived project ability classes**.
|
||||
|
||||
**Classification:** GAS infrastructure only / Partially Implemented. Do **not** conclude abilities migrated to GAS.
|
||||
|
||||
### 3.4 `ARIREffectActor`
|
||||
|
||||
- Root: `USceneComponent`
|
||||
- `ApplyEffectToTarget` (BlueprintCallable): gets ASC via `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent`; MakeOutgoingSpec level 1; ApplyGameplayEffectSpecToSelf
|
||||
- Properties: `InstantGameplayEffectClass`, `DurationGameplayEffectClass` (not auto-applied in native BeginPlay)
|
||||
|
||||
**Blueprint subclass seeds:**
|
||||
|
||||
- `/Game/_Main/Blueprints/Items/Food/BP_OrangeSlice`
|
||||
- `/Game/_Main/Blueprints/Items/Potion/BP_HealthPotion`
|
||||
- `/Game/_Main/Blueprints/Items/Potion/BP_ManaPotion`
|
||||
- `/Game/_Main/Blueprints/Items/Potion/BP_ManaCrystal`
|
||||
|
||||
---
|
||||
|
||||
## 4. UI
|
||||
|
||||
### 4.1 `URIRUserWidget`
|
||||
|
||||
- `SetWidgetController` BlueprintCallable → fires `WidgetControllerSet` BlueprintImplementableEvent
|
||||
|
||||
**Subclasses seed:** `WBP_ProgressBarBase`, `WBP_ManaProgressBar`, `WBP_HealthProgressBar`, `WBP_Overlay`
|
||||
|
||||
### 4.2 `URIRWidgetController` / `FWidgetControllerParams`
|
||||
|
||||
Holds PC, PS, ASC, AS. Base `BroadcastInitialInitialValues` / `BindCallbacksToDependencies` empty.
|
||||
|
||||
### 4.3 `UOverlayWidgetController`
|
||||
|
||||
**Observed Implementation:** Broadcasts and binds Health/MaxHealth/Mana/MaxMana/Stamina/MaxStamina via ASC attribute change delegates.
|
||||
|
||||
**Observed Implementation quirk:** `OnStaminaChanged` typed as `FOnManaChangedSignature`; `OnMaxStaminaChanged` typed as `FOnMaxManaChangedSignature` — likely copy-paste. **Technical Debt** (delegate type names wrong; broadcast still float).
|
||||
|
||||
**Subclass seed:** `/Game/_Main/UI/Widgets/WidgetController/BP_OverlayWidgetController`
|
||||
|
||||
---
|
||||
|
||||
## 5. Interfaces
|
||||
|
||||
### `ITargetInterface`
|
||||
|
||||
Pure virtual `HighlightActor` / `UnHighlightActor`. Implemented by `ARIRBaseEnemyCharacter`. Used by `ARIRPlayerController::CursorTrace`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Framework Blueprints discovered (seeds — no native parents in module)
|
||||
|
||||
| Class | Path |
|
||||
|-------|------|
|
||||
| GameInstance | `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` |
|
||||
| GameMode | `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` |
|
||||
| GameMode | `/Game/_Main/Blueprints/Game/GameMode/GM_MainMenu` |
|
||||
|
||||
---
|
||||
|
||||
## 7. Native RPCs
|
||||
|
||||
**Observed Implementation:** Grep of `Source/REALMSINRUIN` found **no** `Server_`, `Client_`, or `Multicast_` UFUNCTIONs. Ability networking, if present, is Blueprint-only (Batch 2/3).
|
||||
**Observed Implementation:** Still no native Server/Client/Multicast UFUNCTIONs in `Source/REALMSINRUIN`. All ability networking is Blueprint-only (`05`).
|
||||
|
||||
---
|
||||
|
||||
@@ -315,8 +206,8 @@ Pure virtual `HighlightActor` / `UnHighlightActor`. Implemented by `ARIRBaseEnem
|
||||
|
||||
| Topic | Evidence A | Evidence B | Better supported |
|
||||
|-------|------------|------------|------------------|
|
||||
| Enemy ASC access | Enemy creates ASC on self; InitAbilityActorInfo(this,this) | Base `GetAbilitySystemComponent` reads PlayerState only | Both Observed Implementation; interface path likely broken for enemies |
|
||||
| Default attributes | `DefaultAttributesGameplayEffect` on PlayerState; GE assets exist (calibration) | Never applied in native .cpp | Property is scaffolding; apply path Unknown (Blueprint?) |
|
||||
| Gameplay Abilities | `URIRGameplayAbility` + Documented Intent "all abilities" | No subclasses; calibration found no GA assets | Infrastructure only — abilities not GAS-converted |
|
||||
|
||||
Log also in `15-HandoffStatus.md`.
|
||||
| Enemy ASC access | Enemy ASC on self | Base GetASC from PlayerState | Both Observed; interface path likely broken for enemies |
|
||||
| Default attributes | GE assets exist; property on PS | BP_PlayerState CDO = None; never applied in C++ | Property unused; apply path still Unknown / missing |
|
||||
| HUD naming | `WBP_PlayerHUD` name suggests widget | Parent is RIRHUD (AHUD) | AHUD — name is Documented Intent mismatch |
|
||||
| Dual HUD systems | Native InitOverlay → WBP_Overlay + ASC | BP Server_UpdateHUD → DEPRECATED floats → UpdatePlayerHUD | Both Observed Implementation; incomplete GAS migration |
|
||||
| Gameplay Abilities | URIRGameplayAbility Documented Intent | No GA assets; legacy Server_Ability_* | Legacy BP abilities active |
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
# 05 — Legacy Ability Architecture
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Shared `BP_PlayerCharacterBase` ability architecture (Batch 2) plus per-character Ability 001–004 connected-path reconstruction (Batch 3 Pass 6).
|
||||
- **Inspection method:** Read-only BlueprintTools `find_nodes` / `get_node_infos` / `get_connected_subgraph` / `read_graph_dsl`; AssetTools deps; ObjectTools CDO samples.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** CustomEvent Reliable/Unreliable flags not exposed; comment-box regions not found via `find_nodes(title=Comment)`; Montage notify tracks not deep-inspected (Pass 8).
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 (GAS systemwide) / Pass 8 (AnimBP/Montage notifies)
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Shared input → Server RPC routing on base
|
||||
- Base Server_Ability_* stubs
|
||||
- Multicast FX helpers
|
||||
- Death / respawn / HUD (DEPRECATED floats)
|
||||
- **Per-character Ability 001–004 connected paths for all five playables**
|
||||
- Parent-call inventory
|
||||
- Resource / damage / projectile inventories
|
||||
- Montage dependency seeds
|
||||
|
||||
### Pending sections
|
||||
- Cross-character migration matrix (Pass 11 → doc 07)
|
||||
- Montage notify → UseAbility exact wiring (Pass 8)
|
||||
- Runtime verification of CDO damage/mana values (PIE)
|
||||
|
||||
### Evidence still required
|
||||
- Who fires UseAbility* (anim notifies vs other) — Requires Manual Editor Inspection / Pass 8
|
||||
- FCanUseMana implementation body (function on base — not re-walked this batch beyond call sites)
|
||||
- Client_Charge timeline details beyond ChargeTimeline / LineTrace / SetActorLocation
|
||||
|
||||
---
|
||||
|
||||
## Shared architecture (Batch 2 baseline — verified)
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
IA[IA_Ability_001to004] -->|Started| SBegin[Server_Ability_N_Begin]
|
||||
IA -->|Completed_or_Canceled| SEnd[Server_Ability_N_End]
|
||||
SBegin -->|base| Print[PrintString Override]
|
||||
SBegin -->|child override| Child[Character body]
|
||||
Child --> MC[Multicast_PlayMontage]
|
||||
Child --> Use[UseAbilityN Authority]
|
||||
Use --> Dmg[ApplyDamage or RecoverHealth]
|
||||
```
|
||||
|
||||
**Observed Implementation:** No `UGameplayAbility` activation. Reliability: **Unknown — MCP property visibility limitation**.
|
||||
|
||||
| Base event | Body |
|
||||
|---|---|
|
||||
| Server_Ability_*_Begin | PrintString `"Override Ability N"` |
|
||||
| Server_Ability_*_End | then unconnected |
|
||||
| Multicast_PlayMontage / PlaySFX / Multi_SpawnParticle | Active helpers |
|
||||
|
||||
---
|
||||
|
||||
## Parent-call inventory (Pass 6)
|
||||
|
||||
| Character | Ability overrides call Parent? | Other Parent calls |
|
||||
|---|---|---|
|
||||
| Paladin | **No** on Ability Begin/UseAbility | Tick/Overlap call Parent; BeginPlay does **not** (leader-pose style local) |
|
||||
| Amazonian | **No** | — |
|
||||
| Cleric | **No** on any ability override | BeginPlay no Parent (leader pose) |
|
||||
| Wizard | N/A (no ability overrides) | BeginPlay **no Parent**; Tick/Overlap **call Parent** |
|
||||
| Gunslinger | N/A | BeginPlay/Tick/Overlap **call Parent** |
|
||||
|
||||
---
|
||||
|
||||
## Player_Paladin
|
||||
|
||||
**Path:** `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin`
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate !attacking && !dead → CurrentlyAttacking → SetPlayerCanMove(true) → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate only | None | UseAbility001 Authority: BoxOverlap(90,50,100) forward×150 → ApplyDamage(DEPRECATED_Ability001Damage) | Attack_A/B/C/D_Fast_Montage | Server_Ability_001_End not implemented locally | **Implemented** (End Partial) | get_connected_subgraph |
|
||||
| Ability 002 | Server_Ability_002_Begin; Server_Ability_002_End | No | Begin: gate → CurrentlyAttacking → CanMove false → IsBlocking true | None in Begin | Gate | None | Block state only (no ApplyDamage in Begin) | None in Begin (IsBlocking likely AnimBP) | End: CurrentlyAttacking=false → CanMove true → IsBlocking false | **Partial** (block state; no hit absorb path traced) | subgraph Event_5 / Event_7 |
|
||||
| Ability 003 | Server_Ability_003_Begin; Charge; Client_Charge; ChargeBox overlap | No | Gate → FCanUseMana(DEPRECATED_Ability003ManaCost) → CurrentlyAttacking → CanMove false → ChargeBox QueryOnly → Charge + Client_Charge | Client_Charge | Gate + mana | DEPRECATED_Ability003ManaCost via FCanUseMana | ChargeBox Authority: NOT tag Player → ApplyDamage(DEPRECATED_Ability003Damage) | ChargeTimeline + LineTrace + SetActorLocation lerp | Ends not locally implemented for 003 | **Implemented** (charge + overlap damage) | subgraph Event_6 / Charge / ChargeBox |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana(DEPRECATED_Ability004ManaCost) → CurrentlyAttacking → CanMove false → Multicast_PlayMontage(Paladin_Ability004_Montage) | Multicast_PlayMontage; UseAbility004: Multi_SpawnParticle (EmitterTemplate empty) + Multicast_PlaySFX(MagicSpell_01_Cue) | Gate + mana | DEPRECATED_Ability004ManaCost | UseAbility004 Authority: SphereOverlap radius 300 → ApplyDamage(DEPRECATED_Ability004Damage) | Paladin_Ability004_Montage | End not local | **Implemented** (FX particle template empty) | subgraph Event_8 / Event_11 |
|
||||
| Basic attack | Same as Ability 001 | No | Same | Same | Same | Same | Same | Attack_* montages | Same | **Implemented** (=001) | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death | Inherited PlayerDeath | — | Base | Base | — | DEPRECATED health (if damaged via AnyDamage — Paladin has no local AnyDamage) | Base | Base | Base | **Inherited** | list_events |
|
||||
| Legacy HUD | Inherited Server_UpdateHUD | — | Base DEPRECATED floats | — | — | Reads DEPRECATED health/mana | — | — | — | **Inherited** | Batch 2 |
|
||||
|
||||
**Paladin montages:**
|
||||
`/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Attack_{A,B,C,D}_Fast_Montage`
|
||||
`/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Abilities/Paladin_Ability004_Montage`
|
||||
|
||||
---
|
||||
|
||||
## Player_Amazonian
|
||||
|
||||
**Path:** `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian`
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin; UseAbility001 | No | Gate → CurrentlyAttacking → CanMove true → Multicast_PlayMontage(random Ability001Montage) | Multicast_PlayMontage | Gate | None | UseAbility001 Authority: BoxOverlap → ApplyDamage(DEPRECATED_Ability001Damage) | A_Hu_F_Combat_2H_Attack* montages | End not local; CurrentlyAttacking cleared via base SetIsAttacking (Inferred) | **Implemented** | subgraph |
|
||||
| Ability 002–004 | Inherited only | N/A | Base PrintString | — | — | — | — | — | Base empty End | **Stub** (inherited) | list_events |
|
||||
| Basic attack | Ability 001 | No | Same | Same | Same | Same | Same | Attack montages | Same | **Implemented** (=001); **Observed Runtime Behavior:** known working melee | parity brief + subgraph |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Whirlwind | PerformingWhirlwind Get only | — | — | — | Gates AnyDamage | — | — | — | Never Set | **Partial / Present but Unconnected setter** | find_nodes |
|
||||
| Death | ReceiveAnyDamage → PlayerDeath | — | Local health subtract DEPRECATED_CurrentHealth → Server_UpdateHUD → PlayerDeath if ≤0 | Base death | PlayerHitCheck when whirlwind | Writes DEPRECATED_CurrentHealth | ApplyDamage inbound | — | Base | **Partial** (legacy health) | subgraph |
|
||||
| Legacy HUD | Server_UpdateHUD after damage | — | Base | — | — | DEPRECATED health | — | — | — | **Active** | subgraph |
|
||||
|
||||
**Amazonian montages:**
|
||||
`/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Amazon/AnimMontages/A_Hu_F_Combat_2H_Attack01_Montage` (+ Attack02, Attack_Base, Attack)
|
||||
|
||||
---
|
||||
|
||||
## Player_Cleric
|
||||
|
||||
**Path:** `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Cleric/Player_Cleric`
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001 | Server_Ability_001_Begin | No | Gate → CurrentlyAttacking → CanMove false → Multicast_PlayMontage(random Ability001Montages) | Multicast_PlayMontage | Gate | None | **No UseAbility001** — no hit path | Cleric_PrimaryAttack_* | End not local | **Partial** (montage only) | subgraph |
|
||||
| Ability 002 | Server_Ability_002_Begin; UseAbility002 | No | Gate → FCanUseMana(Ability002ManaCost) → CurrentlyAttacking → CanMove true → Multicast_PlayMontage(Cleric_Ability002_Montage) | Multi_SpawnParticle (EmitterTemplate **empty**); UseAbility002 Authority heal | Gate + mana | DEPRECATED_Ability002ManaCost | SphereOverlap 400 tag Player → DEPRECATED_RecoverPlayerHealth(Ability002Damage); self heal | Cleric_Ability002_Montage | End not local | **Partial** (heal works; particle empty) | subgraph |
|
||||
| Ability 003 | Server_Ability_003_Begin; Server_Ability_003_End; ConcentrateHandle; EndConcentrate | No | Mana≥cost → DivineCircleActive + SetTimer 0.25 ConcentrateHandle | ConcentrateHandle: Multicast_PlayMontage(Cleric_Ability003) + ApplyDamage(Ability003Damage) on non-Player | Gate + mana | DEPRECATED_Ability003ManaCost | ApplyDamage DoT | Cleric_Ability003_Montage (in timer) | End → EndConcentrate clears timer/state | **Implemented** | subgraph + DSL |
|
||||
| Ability 004 | Server_Ability_004_Begin; UseAbility004 | No | Gate → FCanUseMana called but Branch Condition=**literal true** (CanUse unwired) → montage | UseAbility004: find ClosestEnemy tag Enemy → SpawnActor **Class empty** | Gate; mana bypassed | DEPRECATED_Ability004ManaCost (unused result) | Spawn params Damage=20 HealPerHit=10 (unwired class) | Cleric_Ability004_Montage | End not local | **Partial / Existing Baseline Defect** | subgraph |
|
||||
| Basic attack | Ability 001 montage | No | Same | Same | Same | — | Missing hit | PrimaryAttack montages | — | **Partial** | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death / HUD | Inherited | — | Base | Base | — | — | — | — | — | **Inherited** | — |
|
||||
|
||||
**Cleric GE** `GE_Cleric_DefaultAttributes` exists but **0 referencers**; not in ability graphs.
|
||||
|
||||
---
|
||||
|
||||
## Player_Wizard
|
||||
|
||||
**Path:** `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Wizard/Player_Wizard`
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001–004 | Inherited Server_Ability_* only | N/A | Base PrintString | — | — | — | — | — | Base empty End | **Stub** (inherited PrintString) | list_events + EventGraph walk |
|
||||
| Basic attack | Same | N/A | Stub | — | — | — | — | — | — | **Stub** | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death / HUD | Inherited | Tick/Overlap Parent yes; BeginPlay **no Parent** | Base | Base | — | — | — | — | — | **Inherited** | subgraph |
|
||||
| Alternate paths | UseAbility* false; no Input/Montage/spell nodes | — | — | — | — | — | — | — | — | **Missing** | find_nodes |
|
||||
| Unwired assets | NS_Wizard_Ability001; GE_Wizard_DefaultAttributes; BP_PlayerProjectile | — | — | — | — | — | — | — | — | **Present but Unconnected** | deps/referencers |
|
||||
|
||||
Local vars `EnemyFound`, `IsBlocking`, `ClosestEnemy`: **declared, zero EventGraph uses**.
|
||||
|
||||
---
|
||||
|
||||
## Player_Gunslinger
|
||||
|
||||
**Path:** `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Gunslinger/Player_Gunslinger`
|
||||
|
||||
| Slot/System | Entry point | Parent called | Server path | Multicast/client path | Validation | Resource | Damage/effect | Animation | End/cleanup | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Ability 001–004 | Inherited only | N/A | Base PrintString | — | — | — | — | — | Base empty End | **Stub** (inherited) | IsDataOnly + deps |
|
||||
| Basic attack | Inherited stub | N/A | Stub | — | — | — | — | — | — | **Stub** | — |
|
||||
| Passive | — | — | — | — | — | — | — | — | — | **Missing** | — |
|
||||
| Death / HUD | Inherited; BeginPlay Parent | Yes | Base | Base | — | — | — | — | — | **Inherited** | subgraph |
|
||||
| Weapon/projectile | None | — | — | — | — | — | — | — | — | **Missing** | deps only base |
|
||||
|
||||
**IsDataOnly=True.** No GE_Gunslinger. Referencers registry [].
|
||||
|
||||
---
|
||||
|
||||
## Cross-character RPC inventory (ability-related)
|
||||
|
||||
| Event | Paladin | Amazonian | Cleric | Wizard | Gunslinger |
|
||||
|---|---|---|---|---|---|
|
||||
| Server_Ability_001_Begin | Local override | Local | Local | Inherit stub | Inherit stub |
|
||||
| Server_Ability_001_End | Inherit empty | Inherit empty | Inherit empty | Inherit | Inherit |
|
||||
| Server_Ability_002_Begin | Local (block) | Inherit stub | Local | Inherit | Inherit |
|
||||
| Server_Ability_002_End | Local | Inherit | Inherit empty | Inherit | Inherit |
|
||||
| Server_Ability_003_Begin | Local (charge) | Inherit | Local (DivineCircle) | Inherit | Inherit |
|
||||
| Server_Ability_003_End | Inherit | Inherit | Local → EndConcentrate | Inherit | Inherit |
|
||||
| Server_Ability_004_Begin | Local | Inherit | Local (mana bypass) | Inherit | Inherit |
|
||||
| Server_Ability_004_End | Inherit | Inherit | Inherit | Inherit | Inherit |
|
||||
| UseAbility001 | Local Authority damage | Local Authority damage | Missing | Missing | Missing |
|
||||
| UseAbility002 | Missing | Missing | Local Authority heal | Missing | Missing |
|
||||
| UseAbility004 | Local Authority AoE | Missing | Local Authority spawn broken | Missing | Missing |
|
||||
| Charge / Client_Charge | Local | — | — | — | — |
|
||||
| ConcentrateHandle / EndConcentrate | — | — | Local | — | — |
|
||||
|
||||
Reliability: **Unknown — MCP property visibility limitation** for all CustomEvents.
|
||||
|
||||
---
|
||||
|
||||
## Resource and legacy-state inventory
|
||||
|
||||
| Symbol | Readers/Writers | Notes |
|
||||
|---|---|---|
|
||||
| DEPRECATED_Ability001Damage | Paladin UseAbility001; Amazonian UseAbility001 | ApplyDamage BaseDamage |
|
||||
| DEPRECATED_Ability003Damage | Paladin ChargeBox | ApplyDamage |
|
||||
| DEPRECATED_Ability004Damage | Paladin UseAbility004 | ApplyDamage |
|
||||
| DEPRECATED_Ability002Damage | Cleric UseAbility002 | Heal amount via RecoverPlayerHealth |
|
||||
| DEPRECATED_Ability00{2,3,4}ManaCost | Paladin 003/004; Cleric 002/003/004 | FCanUseMana / compare |
|
||||
| DEPRECATED_CurrentHealth | Amazonian AnyDamage | Subtract + death check |
|
||||
| DEPRECATED_RecoverPlayerHealth | Cleric UseAbility002 | Interface message |
|
||||
| CurrentlyAttacking / IsDead | All ability gates | Replicated on base |
|
||||
| IsBlocking | Paladin 002 Begin/End | Local; AnimBP dependency Unknown |
|
||||
| PerformingWhirlwind | Amazonian AnyDamage | Get only — never Set |
|
||||
| DivineCircleActive / TimerHandle | Cleric 003 | Timer loop |
|
||||
|
||||
**No ASC attribute reads/writes in ability graphs.** No GameplayAbility grant/activate.
|
||||
|
||||
---
|
||||
|
||||
## Authority / networking findings (flags, no fixes)
|
||||
|
||||
- Client IA → Server Begin: Observed Implementation
|
||||
- Damage on UseAbility* / ChargeBox: Authority SwitchHasAuthority — Observed Implementation
|
||||
- Multicast used for montage/SFX/particle presentation — Observed Implementation
|
||||
- Cleric Ability 004: mana CanUse **unwired** (literal true) — Existing Baseline Defect
|
||||
- Cleric Ability 004: SpawnActor Class empty — Existing Baseline Defect
|
||||
- Multi_SpawnParticle EmitterTemplate empty (Paladin 004, Cleric 002) — Partially Implemented
|
||||
- End events missing for most slots — Incomplete Refactor
|
||||
- Amazonian/Paladin Ability 001: no mana cost — Observed Implementation
|
||||
- Dual HUD still uses DEPRECATED floats on Server_UpdateHUD — Incomplete Refactor (Batch 2)
|
||||
|
||||
---
|
||||
|
||||
## Status rollup
|
||||
|
||||
| Classification | Characters / slots |
|
||||
|---|---|
|
||||
| **Implemented** | Paladin 001, 003, 004 (with noted FX holes); Amazonian 001; Cleric 003 |
|
||||
| **Partial** | Paladin 002; Cleric 001, 002, 004; Amazonian End/whirlwind |
|
||||
| **Stub** | Wizard 001–004; Gunslinger 001–004 (inherited PrintString) |
|
||||
| **Missing** | Wizard/Gunslinger combat bodies; most Ends; UseAbility on Wizard/Gunslinger |
|
||||
| **Present but Unconnected** | NS_Wizard_Ability001; GE_* DefaultAttributes orphans; BP_PlayerProjectile; PerformingWhirlwind setter |
|
||||
| **Deprecated connected** | All DEPRECATED_* damage/mana/health in active paths |
|
||||
|
||||
---
|
||||
|
||||
## Migration relevance (inventory only)
|
||||
|
||||
Replacement targets: IA→Server custom events; ApplyDamage/RecoverPlayerHealth; FCanUseMana + DEPRECATED costs; Multicast_PlayMontage; Charge timeline; DivineCircle timer; dual HUD floats.
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope (Batch 1 seed):** Native GAS scaffolding — ASC ownership, AttributeSet, empty GameplayAbility base, EffectActor GE application, default-attribute property, tags from config. Full GE CDO / cue / grant-path inventory deferred.
|
||||
- **Inspection method:** Native C++ read; AttributeSetToolset not re-run this batch (calibration prior); GameplayTags from DefaultGameplayTags.ini; subclass search for URIRGameplayAbility.
|
||||
- **Scope:** Native GAS scaffolding (Batch 1) plus Batch 2 Blueprint seeds: BP_PlayerState defaults, legacy ability confirmation, dual HUD attribute paths.
|
||||
- **Inspection method:** Native C++ read; Batch 2 ObjectTools on `BP_PlayerState` CDO; BlueprintTools on `BP_PlayerCharacterBase` for ASC/GA absence in ability graphs.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 (GE/cue inventory)
|
||||
|
||||
## Draft tracking
|
||||
|
||||
@@ -19,28 +19,31 @@
|
||||
- URIRGameplayAbility empty + no subclasses
|
||||
- EffectActor ApplyEffectToTarget mechanism
|
||||
- Project gameplay tags from config
|
||||
- **BP_PlayerState `DefaultAttributesGameplayEffect` = None** (Pass 3)
|
||||
- Confirmation: abilities remain legacy BP `Server_Ability_*` (Pass 5–6 / doc 05)
|
||||
- **Pass 6:** No ASC activate/grant/GameplayEffect apply in any connected ability path on five playables
|
||||
|
||||
### Pending sections
|
||||
- Default attribute GE CDO modifiers per character
|
||||
- Default attribute GE CDO modifiers per character (Pass 7)
|
||||
- Gameplay Cue inventory
|
||||
- Ability granting paths in Blueprints
|
||||
- Tag referencers
|
||||
- Runtime ASC state (PIE-gated)
|
||||
|
||||
### Evidence still required
|
||||
- Whether BP_PlayerState assigns/applies `DefaultAttributesGameplayEffect`
|
||||
- Whether any Blueprint grants `URIRGameplayAbility` or engine GA classes
|
||||
- Whether any other actor/BP applies default-attribute GEs at spawn
|
||||
- Whether OverlayWidgetController path and DEPRECATED HUD path both run in PIE
|
||||
- Full GE asset inventory and referencer map (Pass 7)
|
||||
|
||||
---
|
||||
|
||||
## Distinctions (Batch 1)
|
||||
## Distinctions
|
||||
|
||||
| Layer | Status | Evidence |
|
||||
|-------|--------|----------|
|
||||
| GAS infrastructure | Present | ASC, AttributeSet, IAbilitySystemInterface, EffectActor |
|
||||
| GAS data | Partially present | Tags in INI; GE assets exist (calibration); DefaultAttributes property |
|
||||
| GAS runtime abilities | Not observed | No URIRGameplayAbility subclasses; calibration: no GA assets |
|
||||
| Legacy BP abilities | Not inspected this batch | Calibration: Server_Ability_*, UseAbility* on Paladin |
|
||||
| GAS runtime abilities | Not observed | No URIRGameplayAbility subclasses; no GA assets; base EventGraph has no ASC activate |
|
||||
| Legacy BP abilities | **Documented (Batch 2)** | `05-LegacyAbilityArchitecture.md`: IA → Server_Ability_* → Multicast montage |
|
||||
|
||||
---
|
||||
|
||||
@@ -70,21 +73,45 @@ Constructor inits Health/MaxHealth/Mana/MaxMana only; Stamina/MaxStamina not Ini
|
||||
|
||||
`DefaultAttributesGameplayEffect` on PlayerState: declared, **not applied in native**.
|
||||
|
||||
**Batch 2 Observed Implementation:** `/Game/_Main/Blueprints/Player/BP_PlayerState` CDO property `defaultAttributesGameplayEffect` = **None**. Assignment/application path remains missing at both C++ and this BP.
|
||||
|
||||
---
|
||||
|
||||
## Abilities
|
||||
|
||||
`URIRGameplayAbility`: InstancedPerActor only. **No project subclasses** (search_subclasses).
|
||||
|
||||
**Conclusion (Observed Implementation):** No project-defined UGameplayAbility subclasses, Gameplay Ability assets, or
|
||||
static ability-granting paths have been observed so far.
|
||||
**Conclusion (Observed Implementation):** No project-defined UGameplayAbility subclasses, Gameplay Ability assets, or static ability-granting paths observed. Playable abilities are legacy Blueprint custom events (`Server_Ability_*`) with Enhanced Input on `BP_PlayerCharacterBase` — see `05-LegacyAbilityArchitecture.md`.
|
||||
|
||||
Current evidence supports that the playable abilities have not yet been
|
||||
converted into discrete Gameplay Ability implementations. This must be
|
||||
reconfirmed during the dedicated GAS and Blueprint passes.
|
||||
---
|
||||
|
||||
## Dual attribute UI paths (Batch 2)
|
||||
|
||||
| Path | Source | Consumer |
|
||||
|------|--------|----------|
|
||||
| Native GAS | `InitAbilityActorInfo` → `ARIRHUD::InitOverlay` → OverlayWidgetController ASC delegates | `WBP_Overlay` via `WBP_PlayerHUD` (AHUD) deps |
|
||||
| Legacy BP | `Server_UpdateHUD` / `InitializeHUD` using `DEPRECATED_Current/Max Health/Mana` | `BPI_PlayerController.UpdatePlayerHUD` |
|
||||
|
||||
Both are Observed Implementation. Incomplete Refactor — legacy path still active.
|
||||
|
||||
---
|
||||
|
||||
## Effects
|
||||
|
||||
`ARIREffectActor::ApplyEffectToTarget` applies Instant/Duration class via ASC MakeOutgoingSpec + ApplyGameplayEffectSpecToSelf. Overlap/authority logic expected in Blueprint children (Batch 4 Pass 10 / doc 12).
|
||||
|
||||
---
|
||||
|
||||
## Pass 6 — GAS interactions encountered on playables
|
||||
|
||||
| Asset / interaction | Character | Status | Classification |
|
||||
|---|---|---|---|
|
||||
| ASC ActivateAbility / GrantAbility | All five | Not found in ability graphs | Observed Implementation (absence) |
|
||||
| ApplyGameplayEffect / GE Spec | All five ability paths | Not found | Observed Implementation (absence) |
|
||||
| `GE_Cleric_DefaultAttributes` | Cleric | Asset exists; 0 referencers; not in ability graphs | Present but Unconnected |
|
||||
| `GE_Wizard_DefaultAttributes` | Wizard | Asset exists; unwired | Present but Unconnected |
|
||||
| `GE_Gunslinger_*` | Gunslinger | Not found | Missing |
|
||||
| `NS_Wizard_Ability001` | Wizard | Niagara present; unwired | Present but Unconnected |
|
||||
| Damage / heal | Paladin / Amazonian / Cleric | `ApplyDamage` / `DEPRECATED_RecoverPlayerHealth` — **not** GE | Observed Implementation |
|
||||
|
||||
**Conclusion (Observed Implementation):** Pass 6 reconfirms playable combat is legacy Blueprint. Character-named DefaultAttributes GE assets are orphaned relative to ability graphs and `BP_PlayerState.DefaultAttributesGameplayEffect=None`. Systemwide GE/cue archaeology remains Pass 7.
|
||||
|
||||
@@ -2,49 +2,175 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope (Batch 1 seed):** Native player character lineage and discovered Blueprint child paths only. No per-character ability inventory yet.
|
||||
- **Inspection method:** Native C++ + `search_subclasses` path listing.
|
||||
- **Scope:** Player character Blueprint hierarchy (Pass 3), shared base architecture (Pass 5), and per-character Ability 001–004 connected-path reconstruction (Pass 6).
|
||||
- **Inspection method:** Read-only AssetTools + BlueprintTools + ObjectTools; connected subgraphs on all five playables + base correlation.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Next pass expected to contribute:** Batch 2 Pass 3 (hierarchy), Pass 5 (base deep dive); Batch 3 Pass 6 (per-character)
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 / Pass 8
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Native parent chain for players
|
||||
- InitAbilityActorInfo / HUD overlay hook
|
||||
- Exact Blueprint subclass paths for five playable classes + base
|
||||
- Native player chain + ASC ownership (Batch 1)
|
||||
- Blueprint parent chains and structural sheets for five playables + base
|
||||
- Shared input / RPC / death / HUD / multicast architecture
|
||||
- Interface BPI_PlayerCharacter surface
|
||||
- Override matrix (which Server_Ability events children implement)
|
||||
- **Pass 6:** Full Ability 001–004 path reconstruction per character — see `05-LegacyAbilityArchitecture.md`
|
||||
- Charge / DivineCircle / Whirlwind / UseAbility hit paths inventoried
|
||||
- Montage dependency seeds — see `10-AnimationDependencies.md`
|
||||
|
||||
### Pending sections
|
||||
- Components, weapons, AnimBP, inputs, abilities per character
|
||||
- Shared vs duplicated Blueprint behavior
|
||||
- Interface BPI_PlayerCharacter
|
||||
- AnimNotify → UseAbility wiring (Pass 8)
|
||||
- Weapon component deep dive if separate assets exist beyond overlaps
|
||||
- Gunslinger intended design (no static implementation)
|
||||
|
||||
### Evidence still required
|
||||
- Full Blueprint variable/graph inventory (Batch 2+)
|
||||
- Exact who calls UseAbility* (likely AnimNotify — Pass 8)
|
||||
- PlayerDeath callers beyond Amazonian ReceiveAnyDamage
|
||||
|
||||
---
|
||||
|
||||
## Native player chain
|
||||
|
||||
`ACharacter` → `ARIRBaseCharacter` → `ARIRPlayerCharacter` → (Blueprint) `BP_PlayerCharacterBase` → `Player_*`
|
||||
`ACharacter` → `ARIRBaseCharacter` → `ARIRPlayerCharacter` → `BP_PlayerCharacterBase` → `Player_*`
|
||||
|
||||
**Observed Implementation:** Players do not create ASC on the pawn; ASC lives on `ARIRPlayerState`. Character caches ASC/AttributeSet pointers after possession / PlayerState replication.
|
||||
**Observed Implementation:** ASC on `ARIRPlayerState`; character caches pointers in `InitAbilityActorInfo`. Native also calls `ARIRHUD::InitOverlay` (GAS attribute UI path).
|
||||
|
||||
---
|
||||
|
||||
## Playable Blueprint paths (seeds)
|
||||
## Playable Blueprint paths
|
||||
|
||||
| Character | Asset path |
|
||||
|-----------|------------|
|
||||
| Base | `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase` |
|
||||
| Paladin | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin` |
|
||||
| Amazonian | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian` |
|
||||
| Cleric | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Cleric/Player_Cleric` |
|
||||
| Wizard | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Wizard/Player_Wizard` |
|
||||
| Gunslinger | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Gunslinger/Player_Gunslinger` |
|
||||
| Paladin | `.../PlayerCharacterClasses/Paladin/Player_Paladin` |
|
||||
| Amazonian | `.../Amazonian/Player_Amazonian` |
|
||||
| Cleric | `.../Cleric/Player_Cleric` |
|
||||
| Wizard | `.../Wizard/Player_Wizard` |
|
||||
| Gunslinger | `.../Gunslinger/Player_Gunslinger` |
|
||||
|
||||
**Naming note:** Use `Player_Amazonian`, not `Player_Amazon`. Default-attribute GE folder uses `Amazon` naming (calibration) — naming ambiguity for Batch 4/7.
|
||||
**Observed Runtime Behavior (project brief, not re-tested):** Amazonian melee works; most abilities inactive; Gunslinger incomplete — Existing Baseline Defects.
|
||||
|
||||
**Known runtime baseline (Observed Runtime Behavior from project brief, not re-tested):** Amazonian melee works; most abilities inactive; Gunslinger incomplete — Existing Baseline Defects, not migration regressions.
|
||||
---
|
||||
|
||||
## BP_PlayerCharacterBase — shared architecture
|
||||
|
||||
Full ability/RPC inventory: [`05-LegacyAbilityArchitecture.md`](05-LegacyAbilityArchitecture.md).
|
||||
|
||||
### Components (Observed Implementation)
|
||||
|
||||
- Camera: TPSpringArm, ThirdPersonCamera, CameraPositionRef
|
||||
- Footsteps: BP_FootstepComponent_Left / Right (EasyFootstepSystem)
|
||||
- Native mesh / capsule / movement / arrow
|
||||
|
||||
### Shared vs child-owned behavior
|
||||
|
||||
| Concern | Shared on base | Child-specific |
|
||||
|---------|----------------|----------------|
|
||||
| Ability input IA_001–004 | Yes — calls Server_Ability_* | Bodies overridden |
|
||||
| Camera zoom/pan | Yes | — |
|
||||
| Multicast montage/SFX/VFX | Yes helpers | Children supply montage assets |
|
||||
| Death / respawn | Yes | — |
|
||||
| HUD via DEPRECATED floats | Yes | — |
|
||||
| Charge / DivineCircle / Whirlwind | — | Paladin / Cleric / Amazonian |
|
||||
| Hit checks | — | PlayerHitCheck on Paladin/Amazonian/Cleric |
|
||||
|
||||
### BeginPlay / Possessed (Observed Implementation)
|
||||
|
||||
- BeginPlay: Set `InitialSpawnLocation` = GetActorLocation only
|
||||
- Possessed: Set `PlayerController` → Delay 0.4 → `Server_UpdateHUD`
|
||||
|
||||
### Ability flow (shared)
|
||||
|
||||
```
|
||||
IA_Ability_N Started → Server_Ability_N_Begin
|
||||
IA_Ability_N Completed/Canceled → Server_Ability_N_End
|
||||
```
|
||||
|
||||
Base Begin stubs PrintString `"Override Ability N"`. Base End stubs empty.
|
||||
|
||||
**Paladin Ability 001 override (Observed Implementation):** Does **not** call parent. Gate `NOT CurrentlyAttacking AND NOT IsDead` → set CurrentlyAttacking → SetPlayerCanMove(true) → Multicast_PlayMontage(random Ability001Montages). **Pass 6:** UseAbility001 Authority BoxOverlap → ApplyDamage(`DEPRECATED_Ability001Damage`). Full tables → `05-LegacyAbilityArchitecture.md`.
|
||||
|
||||
---
|
||||
|
||||
## Per-character structural sheets
|
||||
|
||||
### Paladin
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerPaladinREF, PlayerHitCheck |
|
||||
| Local vars | Ability001Montages, ChargeStartLoc, ChargeFinishLoc, IsCharging, IsBlocking |
|
||||
| AnimBP | ABP_Paladin |
|
||||
| Ability events implemented | Server_001 Begin; 002 Begin+End; 003 Begin; 004 Begin; UseAbility001/004; Charge; Client_Charge |
|
||||
| Parent Call on Ability overrides | **No** |
|
||||
| Pass 6 status | 001 Implemented; 002 Partial (block); 003 Implemented (charge+damage); 004 Implemented (empty particle template) |
|
||||
|
||||
### Amazonian
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerAmazonREF, PlayerHitCheck |
|
||||
| Local vars | DynamicMaterials, Ability001Montage, PerformingWhirlwind |
|
||||
| AnimBP (deps) | ABP_Amazon |
|
||||
| Ability events | Server_001 Begin; UseAbility001; ReceiveAnyDamage |
|
||||
| Pass 6 status | 001 Implemented (= known working melee); 002–004 inherited stubs; PerformingWhirlwind never Set |
|
||||
|
||||
### Cleric
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerClericREF, PlayerHitCheck |
|
||||
| Local vars | Ability001Montages, DivineCircleActive, DivineCircleTimerHandle, IsBlocking, EnemyFound, ClosestEnemy |
|
||||
| Ability events | Server_001–004 Begin; Server_003 End; UseAbility002/004; ConcentrateHandle; EndConcentrate |
|
||||
| Parent Call on Ability overrides | **No** |
|
||||
| Pass 6 status | 001 Partial (montage only); 002 Partial heal (empty particle); 003 Implemented DivineCircle; 004 Broken spawn + mana bypass |
|
||||
|
||||
### Wizard
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Graphs | UCS, EventGraph, GetPlayerWizardREF |
|
||||
| Local vars | EnemyFound, IsBlocking, ClosestEnemy (unused in EventGraph) |
|
||||
| Ability events | **None** implemented (BeginPlay/Tick/Overlap only) |
|
||||
| BeginPlay Parent | **No** (skips base InitialSpawnLocation set) |
|
||||
| Pass 6 status | 001–004 inherited PrintString stubs; NS_Wizard_Ability001 / GE_Wizard_DefaultAttributes / BP_PlayerProjectile unwired |
|
||||
|
||||
### Gunslinger
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| IsDataOnly | True |
|
||||
| Graphs | UCS, EventGraph |
|
||||
| Local vars | [] |
|
||||
| Dependencies | Only BP_PlayerCharacterBase |
|
||||
| BeginPlay/Tick/Overlap | Call Parent |
|
||||
| Pass 6 status | 001–004 inherited PrintString stubs; no weapon/projectile/AnimBP/GE |
|
||||
|
||||
---
|
||||
|
||||
## Interfaces
|
||||
|
||||
`BP_PlayerCharacterBase` implements `BPI_PlayerCharacter`. Class REF getters on base return self-cast nulls for wrong class; children override own REF.
|
||||
|
||||
`BPI_PlayerController` used heavily for SetPlayerCanMove, UpdatePlayerHUD, PlayerRespawn, AddKill.
|
||||
|
||||
---
|
||||
|
||||
## GAS interaction findings (character side)
|
||||
|
||||
| Finding | Classification |
|
||||
|---------|----------------|
|
||||
| No GA grant/activate on base or child ability EventGraphs | Observed Implementation |
|
||||
| Server_UpdateHUD uses DEPRECATED floats, not ASC | Observed Implementation |
|
||||
| Native InitOverlay still runs from C++ possession | Observed Implementation (Batch 1) |
|
||||
| Dual UI attribute paths | Incomplete Refactor |
|
||||
| Character DefaultAttributes GE assets orphaned | Present but Unconnected (Pass 6) |
|
||||
|
||||
---
|
||||
|
||||
## Networking summary
|
||||
|
||||
See `05` RPC inventory. Replicated: IsDead, CurrentlyAttacking, DEPRECATED resource floats. Ability activation: client Enhanced Input → Server custom events → optional Multicast FX. Reliability: Unknown — MCP property visibility limitation.
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope (Batch 1 seed):** Native enemy class only + Blueprint child path seeds. No Behavior Tree assumption. No deep enemy Blueprint graph walk yet.
|
||||
- **Inspection method:** Read `ARIRBaseEnemyCharacter`; calibration prior (no BT/BB/custom AIController assets); subclass path search.
|
||||
- **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.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Last completed pass:** Pass 3 (Batch 2) — structural only
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 9
|
||||
|
||||
## Draft tracking
|
||||
@@ -14,12 +14,13 @@
|
||||
### Completed sections
|
||||
- Native enemy ASC ownership and highlight interface
|
||||
- Confirmation: no chase/attack/MoveTo in native C++
|
||||
- Blueprint child paths
|
||||
- Blueprint child paths + Pass 3 structural sheets
|
||||
- BPI_EnemyCharacter API surface
|
||||
|
||||
### Pending sections
|
||||
- BP_EnemyCharacterBase / BP_Enemy_Skeleton graphs (Tick, overlaps, MoveTo, timers)
|
||||
- AIControllerClass / AutoPossessAI on CDOs
|
||||
- Reconfirm BT asset absence
|
||||
- Connected Tick / overlap / timer / MoveTo graphs on enemy BPs
|
||||
- AIControllerClass / AutoPossessAI on CDOs (reconfirm)
|
||||
- Consumers of GetASC on enemies
|
||||
|
||||
### Evidence still required
|
||||
- Where chase/attack was intended to live (Blueprint vs missing)
|
||||
@@ -40,6 +41,36 @@
|
||||
|
||||
**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). Static native code alone cannot confirm root cause.
|
||||
**Issue:** Existing Baseline Defect (enemy chase/attack nonfunctional per project brief).
|
||||
|
||||
**Blueprint seeds:** `BP_EnemyCharacterBase`, `BP_Enemy_Skeleton`.
|
||||
---
|
||||
|
||||
## Pass 3 Blueprint structure (not Pass 9 deep dive)
|
||||
|
||||
### `BP_EnemyCharacterBase`
|
||||
|
||||
| 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 |
|
||||
|
||||
### `BP_Enemy_Skeleton`
|
||||
|
||||
| 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 |
|
||||
|
||||
### `BPI_EnemyCharacter`
|
||||
|
||||
Graphs: `GetEnemyREF`, `AddPlayerTarget`, `EnemyMeleeAttack` — **Documented Intent** surface for targeting/melee; connected implementations on Skeleton/base **not traced in Batch 2** (Pass 9).
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
# 10 — Animation Dependencies
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Montage and AnimInstance seeds discovered during Pass 6 ability-path reconstruction. Not a full AnimBP / notify archaeology pass.
|
||||
- **Inspection method:** Connected subgraphs on character ability events; AssetTools dependency paths when visible on Multicast_PlayMontage pins.
|
||||
- **Evidence classifications used:** Observed Implementation, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** Montage section names, play rate, start position, and AnimNotify tracks not deep-inspected — Defer Pass 8. Root-motion requirements Unknown without Montage asset inspection.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 8
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Per-character Montage asset paths tied to Ability 001–004 Begin paths
|
||||
- AnimBP class references from character deps (structural)
|
||||
- Notes on UseAbility* vs Montage timing (inferred notify dependency)
|
||||
|
||||
### Pending sections
|
||||
- AnimNotify → UseAbility* wiring
|
||||
- Montage section / blend / root-motion details
|
||||
- ABP state machines reacting to IsBlocking / CurrentlyAttacking
|
||||
|
||||
### Evidence still required
|
||||
- Exact notify names that call UseAbility001 / UseAbility002 / UseAbility004
|
||||
- Whether End events stop montages (most Ends missing)
|
||||
|
||||
---
|
||||
|
||||
## Shared helper
|
||||
|
||||
| Helper | Owning BP | Behavior |
|
||||
|---|---|---|
|
||||
| Multicast_PlayMontage | BP_PlayerCharacterBase | Multicast → PlayMontage on mesh AnimInstance |
|
||||
|
||||
Gameplay effects (ApplyDamage / heal / spawn) observed **after** Montage Begin in separate UseAbility* or timer/overlap events — typically **during** Montage if notify-driven. Exact notify wiring: **Unknown — Requires Manual Editor Inspection / Pass 8**.
|
||||
|
||||
---
|
||||
|
||||
## Player_Paladin
|
||||
|
||||
| Ability | Montage path(s) | AnimInstance | Gameplay vs Montage | End stops Montage? |
|
||||
|---|---|---|---|---|
|
||||
| 001 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Attack_A_Fast_Montage` (+ B, C, D_Fast) via `Ability001Montages` array random | ABP_Paladin | UseAbility001 ApplyDamage separate Authority path | Unknown (no local End) |
|
||||
| 002 | None in Begin subgraph | ABP_Paladin | IsBlocking state only — AnimBP reaction Inferred | End clears IsBlocking; Montage stop Unknown |
|
||||
| 003 | ChargeTimeline (not Montage) | ABP_Paladin | ChargeBox ApplyDamage during charge | No local 003 End |
|
||||
| 004 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/AnimMontages/Abilities/Paladin_Ability004_Montage` | ABP_Paladin | UseAbility004 AoE + SFX separate | Unknown |
|
||||
|
||||
SFX: `MagicSpell_01_Cue` via Multicast_PlaySFX on Ability 004 UseAbility path.
|
||||
|
||||
---
|
||||
|
||||
## Player_Amazonian
|
||||
|
||||
| Ability | Montage path(s) | AnimInstance | Gameplay vs Montage | End stops Montage? |
|
||||
|---|---|---|---|---|
|
||||
| 001 | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Amazon/AnimMontages/A_Hu_F_Combat_2H_Attack01_Montage` (+ Attack02, Attack_Base, Attack) via `Ability001Montage` array | ABP_Amazon | UseAbility001 Authority damage separate | Unknown (no local End) |
|
||||
| 002–004 | None (inherited stubs) | — | — | — |
|
||||
|
||||
**Observed Runtime Behavior:** Amazonian melee (Ability 001 path) is the known working combat baseline.
|
||||
|
||||
---
|
||||
|
||||
## Player_Cleric
|
||||
|
||||
| Ability | Montage path(s) | Notes |
|
||||
|---|---|---|
|
||||
| 001 | Cleric_PrimaryAttack_* via Ability001Montages | Montage only — no UseAbility001 |
|
||||
| 002 | Cleric_Ability002_Montage | Heal in UseAbility002 |
|
||||
| 003 | Cleric_Ability003_Montage | Played inside ConcentrateHandle timer loop |
|
||||
| 004 | Cleric_Ability004_Montage | Spawn broken; montage still plays |
|
||||
|
||||
Exact `/Game/...` Cleric montage folder paths: recorded as class-named montages under Cleric AnimMontages in deps — full absolute paths Require Manual Editor Confirmation if not pinned in subgraph (Observed Implementation of PlayMontage call; path strings from character asset deps).
|
||||
|
||||
---
|
||||
|
||||
## Player_Wizard / Player_Gunslinger
|
||||
|
||||
No ability Montage invocations. No character-local Multicast_PlayMontage callers for abilities.
|
||||
|
||||
---
|
||||
|
||||
## Cleanup / End dependency summary
|
||||
|
||||
| Character | Ability End stops Montage? |
|
||||
|---|---|
|
||||
| Most slots | **Unknown / Missing End** — Server_Ability_*_End not overridden; base End empty |
|
||||
| Paladin 002 | Clears IsBlocking / CurrentlyAttacking / CanMove — Montage stop not observed |
|
||||
| Cleric 003 | EndConcentrate clears timer / DivineCircleActive — Montage stop not observed |
|
||||
|
||||
Root motion required: **Unknown — Defer Pass 8**.
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope (Batch 1 seed):** Native HUD / widget-controller / attribute-delegate path; Advanced Sessions plugin presence. No widget tree or session Blueprint flow yet.
|
||||
- **Inspection method:** Native C++ read; PluginToolset; subclass seeds.
|
||||
- **Scope:** Native HUD / widget-controller path (Batch 1); Pass 3 resolution of `WBP_PlayerHUD` and GM/PC framework ties. Full frontend/session graphs deferred to Batch 4.
|
||||
- **Inspection method:** Native C++ read; Batch 2 AssetTools class/tags/deps/refs; ObjectTools GM_Dungeoneer CDO; BlueprintTools PC_Character.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Last completed pass:** Pass 3 (Batch 2)
|
||||
- **Next pass expected to contribute:** Batch 4 Passes 4 + 10
|
||||
|
||||
## Draft tracking
|
||||
@@ -16,35 +16,69 @@
|
||||
- OverlayWidgetController attribute broadcasts/bindings
|
||||
- AdvancedSessions / AdvancedSteamSessions enabled + descriptor paths
|
||||
- Widget subclass path seeds
|
||||
- **WBP_PlayerHUD resolved as AHUD (`RIRHUD` child)**
|
||||
- GM_Dungeoneer assigns HUDClass / PC / PS
|
||||
|
||||
### Pending sections
|
||||
- Main menu / browser / character-select widget flow
|
||||
- Production vs Example Advanced Sessions Blueprints
|
||||
- WBP_Overlay / progress bar bindings
|
||||
- WBP_Overlay / progress bar bindings deep dive
|
||||
- CommonUI usage
|
||||
- BPI_PlayerController.UpdatePlayerHUD widget targets
|
||||
|
||||
### Evidence still required
|
||||
- Whether HUD class defaults assign OverlayWidgetClass / ControllerClass
|
||||
- Whether both Overlay ASC HUD and DEPRECATED UpdatePlayerHUD run in PIE
|
||||
- Session create/find/join graphs
|
||||
|
||||
---
|
||||
|
||||
## WBP_PlayerHUD resolution (Pass 3)
|
||||
|
||||
| Field | Value |
|
||||
|-------|--------|
|
||||
| Path | `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD` |
|
||||
| Asset class | `WBP_PlayerHUD_C` |
|
||||
| Generated parent | `/Script/REALMSINRUIN.RIRHUD` |
|
||||
| Type | **AHUD Blueprint** (not `UserWidget`) |
|
||||
| IsDataOnly | True |
|
||||
| Referencers | `/Game/_Main/Blueprints/Game/GameMode/GM_Dungeoneer` |
|
||||
| Dependencies | REALMSINRUIN, `/Game/_Main/UI/Widgets/WBP_Overlay`, `/Game/_Main/UI/Widgets/WidgetController/BP_OverlayWidgetController` |
|
||||
|
||||
**Observed Implementation:** Naming `WBP_` is misleading Documented Intent; asset is the game HUD class assigned on `GM_Dungeoneer`. Relationship to `ARIRHUD`: direct Blueprint child that supplies OverlayWidgetClass / OverlayWidgetControllerClass via deps to `WBP_Overlay` + `BP_OverlayWidgetController`.
|
||||
|
||||
---
|
||||
|
||||
## HUD init (Observed Implementation)
|
||||
|
||||
### Native GAS path
|
||||
|
||||
`ARIRPlayerCharacter::InitAbilityActorInfo` → `ARIRHUD::InitOverlay(PC, PS, ASC, AS)` → create `OverlayWidgetClass` → `UOverlayWidgetController` binds ASC attribute delegates → `BroadcastInitialInitialValues` → `AddToViewport`.
|
||||
|
||||
checkf text references `WBP_PlayerHUD` for class assignment.
|
||||
### Legacy BP path (still connected)
|
||||
|
||||
**Subclass seeds:** `WBP_Overlay`, health/mana progress bars, `BP_OverlayWidgetController`.
|
||||
`BP_PlayerCharacterBase` EventPossessed → Delay 0.4 → `Server_UpdateHUD` → compute DEPRECATED health/mana percentages → `BPI_PlayerController.UpdatePlayerHUD`.
|
||||
|
||||
**Technical Debt:** Stamina delegates reuse Mana signature types in OverlayWidgetController.h.
|
||||
**Technical Debt:** Dual attribute UI; Stamina delegates reuse Mana signature types in OverlayWidgetController.h.
|
||||
|
||||
---
|
||||
|
||||
## Framework assignments (GM_Dungeoneer CDO)
|
||||
|
||||
| Property | Value |
|
||||
|----------|--------|
|
||||
| HUDClass | `WBP_PlayerHUD_C` |
|
||||
| PlayerControllerClass | `PC_Character_C` |
|
||||
| PlayerStateClass | `BP_PlayerState_C` |
|
||||
| DefaultPawnClass | None |
|
||||
|
||||
`PC_Character` implements `BPI_PlayerController`; holds `CharacterSelectHUD`; Enhanced Input IMC `IMC_PlayerDefault` + `IA_Movement`.
|
||||
|
||||
---
|
||||
|
||||
## Sessions (Observed Implementation)
|
||||
|
||||
Project plugins AdvancedSessions + AdvancedSteamSessions enabled (VersionName 5.8). Depend on OnlineSubsystem / Steam stack.
|
||||
Project plugins AdvancedSessions + AdvancedSteamSessions enabled (VersionName 5.8). `GM_Dungeoneer` deps include AdvancedSessions.
|
||||
|
||||
**Unknown:** Live menu usage vs `/Game/_Main/Blueprints/Examples/ExampleAdvancedSessionsFunctionsChar` — Batch 4 Pass 4.
|
||||
**Unknown:** Live menu usage vs Example Advanced Sessions Blueprints — Batch 4 Pass 4.
|
||||
|
||||
**Unknown:** No OnlineSubsystem INI under project `Config/` — Requires Broader Filesystem/Configuration Inspection.
|
||||
**Unknown:** OnlineSubsystem INI location — Requires Broader Filesystem/Configuration Inspection.
|
||||
|
||||
@@ -2,142 +2,152 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Unresolved questions and verification requirements identified during Batch 1 (Passes 0–2). This document separates confirmed static findings from questions that require Blueprint, runtime, editor, network, or broader configuration inspection.
|
||||
- **Inspection method:** Consolidation of Batch 1 native C++, configuration, plugin, subclass-discovery, and MCP calibration findings. No new Unreal inspection was performed for this refactor.
|
||||
- **Scope:** Unresolved questions after Batches 1–3. Separates confirmed static findings from questions needing further Blueprint, runtime, or config inspection.
|
||||
- **Inspection method:** Consolidation of Batches 1–3; Batch 3 resolved per-character ability path unknowns.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** No Git repository is available at the inspected project root. Semantic Search is not configured. Blueprint graphs, live ASC state, Montage notify timing, session behavior, and runtime consequences were outside Batch 1 scope.
|
||||
- **Tool or visibility limitations:** Semantic Search unavailable; CustomEvent FunctionFlags not readable; comment-box membership limited; no PIE this batch.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Next pass expected to contribute:** Every subsequent batch
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 (Pass 4 / 7 / 8 / 9 — only when authorized)
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
|
||||
- Batch 1 unknowns grouped by required verification method
|
||||
- Confirmed enemy ASC accessor defect separated from its runtime-impact questions
|
||||
- OnlineSubsystem and Steam configuration investigation separated from manual editor inspection
|
||||
- Tool and environment limitations recorded
|
||||
- Naming ambiguities and conflicting evidence recorded
|
||||
- Batch 1 unknowns grouped by verification method
|
||||
- Batch 2 resolutions: WBP_PlayerHUD class; BP_PlayerState DefaultAttributes=None; legacy ability routing documented
|
||||
- Batch 3 resolutions: per-character Ability 001–004 connected paths; Wizard/Gunslinger stub confirmation; UseAbility* presence matrix
|
||||
- Enemy ASC accessor defect still confirmed static
|
||||
|
||||
### Pending sections
|
||||
|
||||
- Ability, RPC, animation, frontend, session, enemy Blueprint, UI, and pickup unknowns from Batches 2–4
|
||||
- Runtime test procedures to be finalized after static Blueprint archaeology
|
||||
- Priority updates after the ability migration matrix is complete
|
||||
- Frontend/session/enemy AI/animation unknowns (Batch 4)
|
||||
- Runtime test procedures after static ability archaeology
|
||||
|
||||
### Evidence still required
|
||||
- AnimNotify → UseAbility* wiring (Pass 8)
|
||||
- Live ASC vs DEPRECATED HUD coexistence in PIE
|
||||
- Enemy BP AI connected graphs (Pass 9)
|
||||
- GE/cue referencer map (Pass 7)
|
||||
|
||||
- Connected Blueprint graphs for player state, player base, playable characters, enemies, widgets, and pickups
|
||||
- Exact Blueprint class and generated-parent verification for `WBP_PlayerHUD`
|
||||
- Live ASC, attribute, Gameplay Effect, HUD, and session state through controlled PIE or network testing
|
||||
- Broader project/plugin/Saved configuration search for OnlineSubsystem and Steam settings
|
||||
---
|
||||
|
||||
### Unknowns requiring later verification
|
||||
## Resolved in Batch 2 (no longer Unknown)
|
||||
|
||||
- Blueprint ownership of default attribute application
|
||||
- Blueprint-only ability RPC and resource-routing architecture
|
||||
- Runtime consequences of the confirmed enemy ASC accessor mismatch
|
||||
- Exact source of enemy chase and attack behavior
|
||||
- Session configuration and production widget flow
|
||||
- Montage notify and visual Blueprint comment-region details
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Is `WBP_PlayerHUD` a Widget or AHUD? | Parent is `RIRHUD`; AHUD Blueprint; `WBP_` name misleading | Observed Implementation | 03, 11 |
|
||||
| Does `BP_PlayerState` assign DefaultAttributes GE? | CDO `defaultAttributesGameplayEffect` = **None** | Observed Implementation | 03, 06 |
|
||||
| How are abilities routed/networked on base? | IA_Ability_* → Server_Ability_* stubs/overrides; Multicast FX helpers | Observed Implementation | 05, 08 |
|
||||
|
||||
---
|
||||
|
||||
## Resolved in Batch 3 (Pass 6)
|
||||
|
||||
| Question | Resolution | Classification | Doc |
|
||||
|---|---|---|---|
|
||||
| Full Ability 001–004 paths per playable | Documented per character in tables | Observed Implementation | 05, 08 |
|
||||
| Does Wizard implement Server_Ability_*? | No local implementations; inherit PrintString stubs | Observed Implementation | 05, 08 |
|
||||
| Is Gunslinger data-only? | IsDataOnly=True; deps only base; inherited stubs | Observed Implementation | 05, 08 |
|
||||
| Amazonian working melee path | Ability 001 Begin → Multicast montage → UseAbility001 Authority BoxOverlap ApplyDamage | Observed Implementation + Observed Runtime Behavior | 05 |
|
||||
| Are UseAbility* still invoked? | Present and connected on Paladin 001/004, Amazonian 001, Cleric 002/004; caller of UseAbility* itself Unknown (likely AnimNotify) | Observed Implementation / Unknown caller | 05, 10 |
|
||||
| Who calls PlayerDeath from Amazonian? | ReceiveAnyDamage → DEPRECATED_CurrentHealth ≤0 → PlayerDeath | Observed Implementation | 05, 08 |
|
||||
| Parent calls on ability overrides? | Paladin/Amazonian/Cleric: **No** | Observed Implementation | 05 |
|
||||
|
||||
---
|
||||
|
||||
## Confirmed static defects with runtime questions
|
||||
|
||||
The following item is **not Unknown** at the static implementation level.
|
||||
|
||||
| Confirmed finding | Evidence classification | Issue classification | Exact evidence | Runtime question |
|
||||
|---|---|---|---|---|
|
||||
| `ARIRBaseEnemyCharacter` owns and initializes an ASC on itself, while inherited `ARIRBaseCharacter::GetAbilitySystemComponent()` attempts to retrieve the ASC from `ARIRPlayerState`. No native enemy override was found. | Observed Implementation | Incomplete Refactor / Existing Baseline Defect | `Source/REALMSINRUIN/Private/Characters/RIRBaseEnemyCharacter.cpp`; `Source/REALMSINRUIN/Private/Characters/RIRBaseCharacter.cpp`; `ARIRBaseEnemyCharacter::BeginPlay`; `ARIRBaseCharacter::GetAbilitySystemComponent` | Which runtime systems fail or degrade because interface-based ASC lookup can return null for enemies? |
|
||||
|
||||
The mismatch itself is statically confirmed. PIE is required only to determine its downstream impact on Gameplay Effects, attribute access, damage, death handling, Blueprint ability-system calls, and other consumers of `IAbilitySystemInterface`.
|
||||
| Enemy ASC on self vs GetASC from PlayerState | Observed Implementation | Incomplete Refactor | RIRBaseEnemyCharacter.cpp; RIRBaseCharacter.cpp | Which systems fail when interface ASC lookup is null for enemies? |
|
||||
| Dual HUD attribute paths (ASC Overlay vs DEPRECATED floats) | Observed Implementation | Incomplete Refactor | RIRHUD InitOverlay; BP Server_UpdateHUD | Do both run? Which drives visible bars in PIE? |
|
||||
| DefaultAttributesGameplayEffect unused (C++ and BP_PlayerState=None) | Observed Implementation | Partially Implemented | RIRPlayerState.h; BP_PlayerState CDO | What sets initial Health/Mana at spawn? |
|
||||
| Cleric Ability 004 SpawnActor Class empty + mana CanUse unwired | Observed Implementation | Existing Baseline Defect | Player_Cleric UseAbility004 / Begin | Does 004 appear to fire but do nothing in PIE? |
|
||||
| Multi_SpawnParticle empty EmitterTemplate (Paladin 004, Cleric 002) | Observed Implementation | Partially Implemented | UseAbility graphs | Visible missing VFX only? |
|
||||
|
||||
---
|
||||
|
||||
## Requires Blueprint inspection
|
||||
## Requires Blueprint / animation inspection (remaining)
|
||||
|
||||
| Question | Why static native inspection is insufficient | Relevant paths | Recommended safe verification method | Mutates project state? | Priority | Dependency |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Does `BP_PlayerState` assign or apply `DefaultAttributesGameplayEffect`? | The property is declared on `ARIRPlayerState` but is never applied in native C++. | `/Game/_Main/Blueprints/Player/BP_PlayerState`; `Source/REALMSINRUIN/Public/Player/RIRPlayerState.h` | Read-only BlueprintTools inspection of class defaults, graphs, functions, and connected subgraphs | No | High | Native finding that `DefaultAttributesGameplayEffect` has no C++ apply path |
|
||||
| How are playable-character abilities routed and networked? | No native ability RPCs or native ability input bindings were found. | `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase`; `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin`; `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian`; `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Cleric/Player_Cleric`; `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Wizard/Player_Wizard`; `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Gunslinger/Player_Gunslinger` | Read-only graph inventory and connected path tracing of input events, `UseAbility*`, server/client/multicast events, validation, costs, damage, animation, and cleanup | No | High | Batch 2 player-base hierarchy and Batch 3 per-character reconstruction |
|
||||
| Where was enemy chase and attack behavior intended to live? | Native enemy code contains no targeting, movement, perception, MoveTo, or attack implementation. | `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase`; `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton`; `/Game/_Main/Blueprints/Characters/Interfaces/BPI_EnemyCharacter` if present at that path | Read-only Blueprint graph, component, property, event, timer, navigation, and interface inspection | No | High | Native enemy inventory and calibration finding that no project BT/BB/custom AIController assets were found |
|
||||
| Is `WBP_PlayerHUD` a Widget Blueprint, an `ARIRHUD` child, or a subclass-search anomaly? | The name and native `checkf` text suggest a widget, while subclass search returned it in an `ARIRHUD` query. | `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD`; `Source/REALMSINRUIN/Private/UI/HUD/RIRHUD.cpp` | Read-only asset-class, generated-class parent, asset-tag, dependency, and referencer inspection | No | Medium | ObjectTools subclass-search anomaly recorded in Batch 1 |
|
||||
| Is CommonUI used by live project content? | CommonUI is enabled, but no native CommonUI references were found. | `/Game/_Main/UI`; `REALMSINRUIN_DEV.uproject` | Read-only widget parent-class, asset dependency, and referencer inspection | No | Low | Plugin enabled-state finding from `02-ProjectArchitecture.md` |
|
||||
| Do each of the `ARIREffectActor` Blueprint children invoke `ApplyEffectToTarget`? | Inheritance provides the native mechanism but does not prove that each child calls it. | `/Game/_Main/Blueprints/Items/Food/BP_OrangeSlice`; `/Game/_Main/Blueprints/Items/Potion/BP_HealthPotion`; `/Game/_Main/Blueprints/Items/Potion/BP_ManaPotion`; `/Game/_Main/Blueprints/Items/Potion/BP_ManaCrystal` | Read-only connected graph inspection for overlaps, authority checks, effect calls, destruction, and respawn | No | Medium | Native `ARIREffectActor::ApplyEffectToTarget` implementation |
|
||||
| Question | Why insufficient | Paths | Method | Priority | Dependency |
|
||||
|---|---|---|---|---|---|
|
||||
| Who calls UseAbility*? | Events connected; callers not in EventGraph | Character AnimMontages / AnimBP | Pass 8 notify walk | High | Pass 6 bodies done |
|
||||
| Enemy chase/attack Blueprint logic | Structural only in Pass 3 | BP_EnemyCharacterBase, BP_Enemy_Skeleton, BPI_EnemyCharacter | Pass 9 connected graphs | High | Pass 3 structure |
|
||||
| Do EffectActor children call ApplyEffectToTarget? | Native mechanism only | BP_HealthPotion etc. | Pass 10 | Medium | Batch 1 |
|
||||
| Is CommonUI used by live content? | Plugin enabled; no native refs | /Game/_Main/UI | Widget parent inspection | Low | Batch 1 |
|
||||
| Paladin Ability 002 block absorb | IsBlocking set; no damage absorb path traced | ABP_Paladin / PlayerHitCheck | Pass 8 + hit graphs | Medium | Pass 6 |
|
||||
| Amazonian PerformingWhirlwind | Get without Set | Player_Amazonian | Search all graphs / macros | Low | Pass 6 |
|
||||
|
||||
---
|
||||
|
||||
## Requires runtime inspection / PIE
|
||||
|
||||
| Question | Why static inspection is insufficient | Relevant paths or systems | Recommended safe verification method | Mutates project state? | Priority | Dependency |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Which runtime systems are affected by the confirmed enemy ASC accessor mismatch? | Static analysis proves the mismatch but cannot show every consumer or symptom. | `ARIRBaseCharacter::GetAbilitySystemComponent`; `ARIRBaseEnemyCharacter`; `ARIREffectActor`; enemy damage/death/effect flows | Controlled PIE using AbilitySystemInspector and targeted read-only observation of enemy ASC, attributes, applied effects, damage, and death state | PIE changes the transient world; no asset save required | High | Confirmed static defect documented above; enemy Blueprint inspection should occur first |
|
||||
| Are default attributes applied when a player spawns? | No native application path was found, and Blueprint assignment/application is not yet known. | `/Game/_Main/Blueprints/Player/BP_PlayerState`; character default-attribute Gameplay Effects; player ASC | Controlled PIE inspection of granted effects and Health/Mana/Stamina values immediately after possession | PIE changes the transient world; no asset save required | High | Blueprint inspection of `BP_PlayerState` and default attribute GE CDOs |
|
||||
| Does HUD overlay creation complete successfully for every playable character? | Native call flow exists, but class assignments and widget bindings are Blueprint/editor data. | `ARIRPlayerCharacter::InitAbilityActorInfo`; `ARIRHUD::InitOverlay`; `/Game/_Main/UI/Widgets/HUD/WBP_PlayerHUD`; `/Game/_Main/UI/Widgets/WBP_Overlay` if confirmed | Controlled PIE observation of HUD creation, widget-controller assignment, and initial attribute broadcasts | PIE changes the transient world; no asset save required | Medium | Exact HUD/widget asset-class verification and Blueprint defaults |
|
||||
| Do production session create, find, join, and travel flows succeed? | Advanced Sessions operations are latent and depend on runtime online-subsystem configuration. | Production main-menu and multiplayer-browser widgets; AdvancedSessions; AdvancedSteamSessions | Controlled standalone or multi-client network test after static frontend/session graph reconstruction | Network and transient session state | Medium | Broader configuration inspection and frontend/session Blueprint pass |
|
||||
| Question | Why | Method | Priority |
|
||||
|---|---|---|---|
|
||||
| Enemy ASC accessor impact | Static mismatch; need consumers | PIE + AbilitySystemInspector | High |
|
||||
| Default attribute values after spawn | No apply path found | PIE attribute values after possess | High |
|
||||
| Dual HUD coexistence | Two static paths | Observe both overlay and UpdatePlayerHUD | Medium |
|
||||
| Session create/find/join | Latent online ops | Network test after Pass 4 | Medium |
|
||||
| Ability Server RPC reliability / prediction feel | Flags unread | Multi-client ability press | Medium |
|
||||
| Wizard BeginPlay skipping Parent | May leave InitialSpawnLocation unset | Spawn Wizard → death/respawn location | Medium |
|
||||
|
||||
---
|
||||
|
||||
## Requires broader filesystem/configuration inspection
|
||||
|
||||
| Question | Why current inspection is insufficient | Search scope and likely terms | Recommended safe verification method | Mutates project state? | Priority | Dependency |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Where are OnlineSubsystem and Steam runtime settings defined, if they exist? | No relevant sections were found in the initially inspected project `Config/` files. That does not establish project-wide absence. | `Config/**/*.ini`; `Plugins/**/Config/**/*.ini`; `Saved/Config/**/*.ini`; search terms: `DefaultPlatformService`, `OnlineSubsystem`, `OnlineSubsystemSteam`, `SteamDevAppId`, `SteamAppId`, `NetDriverDefinitions`, `GameServerQueryPort` | Read-only filesystem search followed by inspection of project-owned configuration. Keep engine defaults separate from project-owned settings. | No | Medium | AdvancedSessions and AdvancedSteamSessions are enabled; production usage remains unverified |
|
||||
| Is the GameInstance class configured outside the inspected `DefaultEngine.ini` section? | `GI_Dungeoneer` was discovered, but no assignment was found in the inspected configuration. | Project and plugin INI files; map/world settings metadata; references to `/Game/_Main/Blueprints/Game/GameInstance/GI_Dungeoneer` | Read-only project-wide text search plus asset metadata and referencer inspection | No | Medium | Blueprint framework hierarchy pass and map metadata pass |
|
||||
|
||||
Do not treat absence from the initial `Config/` sample as proof that settings do not exist elsewhere.
|
||||
| Question | Search | Priority |
|
||||
|---|---|---|
|
||||
| OnlineSubsystem / Steam settings location | Config/**, Plugins/**/Config, Saved/Config | Medium |
|
||||
| GameInstance class assignment outside DefaultEngine sample | INI + referencers of GI_Dungeoneer | Medium |
|
||||
|
||||
---
|
||||
|
||||
## Requires manual editor inspection
|
||||
|
||||
| Question | Why MCP/static metadata may be insufficient | Relevant paths | Recommended safe verification method | Mutates project state? | Priority | Dependency |
|
||||
|---|---|---|---|---|---|---|
|
||||
| What Montage sections, notifies, notify states, and exact timings drive abilities? | Calibration reported limited or empty notify metadata, and deep Montage structure may not be exposed through the approved tools. | Character Montage assets discovered during the animation and ability passes | Manually inspect Montage sections and notify tracks without saving assets | No, provided no asset is saved | Medium | Batch 3 ability inventory and Batch 4 animation pass |
|
||||
| Which nodes visually belong to DEPRECATED comment regions? | MCP can trace executable connectivity but may not reliably expose visual comment-box membership and boundaries. | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin`; relevant ability graphs | Manually inspect Blueprint visual layout after connected paths have been documented | No, provided no asset is saved | Medium | Batch 2 player-base inspection and Batch 3 Paladin ability analysis |
|
||||
| Question | Why | Paths |
|
||||
|---|---|---|
|
||||
| Montage notify timings | Registry tags limited | Character montages |
|
||||
| DEPRECATED comment-box visual regions | find_nodes Comment returned [] | BP_PlayerCharacterBase / children EventGraphs |
|
||||
| CustomEvent Reliable vs Unreliable | ObjectTools on node failed | Server_/Multicast_ events |
|
||||
|
||||
---
|
||||
|
||||
## Tool and environment limitations
|
||||
|
||||
| Item | Detail | Impact | Mitigation |
|
||||
|---|---|---|---|
|
||||
| Git repository unavailable | The inspected project root returned `fatal: not a git repository`. | A complete repository diff and reliable unrelated-file change detection were unavailable. | Use filesystem listings and hashes for the current phase; establish a Git/LFS baseline before additional reconstruction work. |
|
||||
| Semantic Search unavailable | Calibration returned HTTP 401 because no embedding API key was configured. | No semantic asset/code discovery through that tool. | Use deterministic asset registry, subclass, dependency, referencer, node, and filesystem searches. |
|
||||
| Parallel MCP calls unreliable | Some batched calls failed with schema errors such as missing `server` or `toolName`. | Parallel query results may be incomplete when a batch fails. | Retry important read-only calls individually and record failures. |
|
||||
| Blueprint comment-box membership limited | Tooling may expose comment text or nearby nodes without reliable visual containment. | Documented Intent can be captured, but exact visual grouping may remain uncertain. | Use connected subgraph evidence and defer visual boundaries to manual editor inspection. |
|
||||
| Live ASC and session state unavailable statically | Runtime grants, active effects, replicated attributes, and latent session outcomes do not exist in a static editor snapshot. | Static conclusions cannot establish runtime success. | Defer to controlled PIE or network tests after static reconstruction. |
|
||||
| Item | Detail | Impact |
|
||||
|---|---|---|
|
||||
| Semantic Search | HTTP 401 / no API key | No semantic discovery |
|
||||
| CustomEvent FunctionFlags | list_properties failed on event nodes | RPC reliability Unknown |
|
||||
| Comment boxes | find_nodes(title=Comment) empty | Visual DEPRECATED regions Unknown |
|
||||
| Git | Available (baseline commit exists) | Dirty-tree gate works |
|
||||
| No PIE in Batch 3 | Constraint honored | Runtime questions deferred |
|
||||
|
||||
---
|
||||
|
||||
## Naming ambiguities
|
||||
|
||||
| Item | Current evidence | Required resolution | Dependency |
|
||||
|---|---|---|---|
|
||||
| Amazon vs Amazonian | Playable character asset is `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian`; default-attribute content uses `Amazon` naming in calibration results. | Confirm exact GE asset names, assignments, and referencers during the dedicated GAS pass. | Gameplay Effect inventory and `BP_PlayerState`/character defaults |
|
||||
| `WBP_PlayerHUD` | Name and native error text suggest a widget; subclass search under `ARIRHUD` returned it. | Verify asset class, generated class, native parent, and referencers. | Batch 2 Blueprint hierarchy and UI asset inspection |
|
||||
| Item | Status |
|
||||
|---|---|
|
||||
| Amazon vs Amazonian | Still open for GE folder naming (Pass 7) |
|
||||
| WBP_PlayerHUD | **Resolved** — AHUD named like a widget |
|
||||
|
||||
---
|
||||
|
||||
## Conflicting evidence
|
||||
|
||||
| Conflict | Evidence A | Evidence B | Current resolution | Remaining verification |
|
||||
|---|---|---|---|---|
|
||||
| Enemy ASC ownership and accessor | `ARIRBaseEnemyCharacter` creates and initializes an ASC on itself. | Inherited `ARIRBaseCharacter::GetAbilitySystemComponent()` retrieves from `ARIRPlayerState`. | Both are Observed Implementation. The mismatch is a confirmed static defect. | Determine affected runtime systems through Blueprint inspection followed by controlled PIE. |
|
||||
| Default attribute architecture | `ARIRPlayerState` declares `DefaultAttributesGameplayEffect`; default-attribute GE assets are known to exist. | No native C++ application path was found. | Property and assets are present, but the apply path is Unknown. | Inspect `BP_PlayerState`, playable-character defaults, and GE referencers. |
|
||||
| Gameplay Ability migration | `URIRGameplayAbility` exists and is documented as a base for project abilities. | No project-derived GA class, GA asset, or static granting path has been observed so far. | Current evidence supports GAS scaffolding without completed discrete Gameplay Ability migration. | Reconfirm through Blueprint and dedicated GAS passes. |
|
||||
| Conflict | Current resolution | Remaining |
|
||||
|---|---|---|
|
||||
| Enemy ASC ownership vs accessor | Confirmed static defect | PIE impact |
|
||||
| Default attributes present vs unused | BP_PlayerState=None; C++ unused; character GEs orphaned | Who applies GEs if anyone |
|
||||
| URIRGameplayAbility "all abilities" vs legacy BP | Legacy active; GA scaffolding only | Pass 7 reconfirm |
|
||||
| Dual HUD systems | Both connected | PIE which is authoritative for bars |
|
||||
|
||||
---
|
||||
|
||||
## Priority order for later verification
|
||||
|
||||
1. Inspect `BP_PlayerState` default-attribute assignment/application.
|
||||
2. Reconstruct `BP_PlayerCharacterBase` input, RPC, resource, and legacy ability routing.
|
||||
3. Verify the exact class of `WBP_PlayerHUD`.
|
||||
4. Inspect enemy Blueprint logic and identify consumers of the confirmed ASC accessor defect.
|
||||
5. Inspect per-character abilities and their animation dependencies.
|
||||
6. Perform broader OnlineSubsystem and Steam configuration search.
|
||||
7. Run controlled PIE only after the relevant static paths are fully documented.
|
||||
1. Batch 4 Pass 7 — GE/cue/tag inventory
|
||||
2. Pass 8 — AnimNotify → UseAbility wiring
|
||||
3. Pass 9 — enemy Blueprint AI
|
||||
4. Pass 4 — sessions / frontend
|
||||
5. Controlled PIE for ASC, attributes, dual HUD, enemy GetASC, Cleric 004 / Wizard spawn
|
||||
|
||||
@@ -5,39 +5,56 @@
|
||||
- **Scope:** Compact cross-model index of material findings. Full analysis lives in linked docs.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 2 (Batch 1)
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Every batch
|
||||
|
||||
## Draft tracking
|
||||
|
||||
### Completed sections
|
||||
- Batch 1 evidence rows (modules, native hierarchy, GAS ownership, plugins, config)
|
||||
- Batch 2 evidence rows (BP hierarchy, legacy abilities, WBP_PlayerHUD, BP_PlayerState)
|
||||
- Batch 3 evidence rows (per-character Ability 001–004 paths, RPCs, resources, montages)
|
||||
|
||||
### Pending sections
|
||||
- Blueprint graph/RPC/ability rows (Batch 2+)
|
||||
- GE/cue referencer rows (Pass 7)
|
||||
- AnimNotify → UseAbility rows (Pass 8)
|
||||
|
||||
---
|
||||
|
||||
| System | Subsystem | Finding | Evidence type | Classification | Exact source | Exact symbol | Blueprint path | Graph | Node/event | Asset/config | Doc | Confidence | Remaining verification |
|
||||
|--------|-----------|---------|---------------|----------------|--------------|--------------|----------------|-------|------------|--------------|-----|------------|------------------------|
|
||||
| Module | Descriptor | Single runtime module REALMSINRUIN; Engine 5.8 | Observed Implementation | Intended Behavior | REALMSINRUIN_DEV.uproject | Modules[REALMSINRUIN] | — | — | — | REALMSINRUIN_DEV.uproject | 02 | High | — |
|
||||
| Module | Build | Public deps include GAS + EnhancedInput; no UMG | Observed Implementation | Technical Debt | REALMSINRUIN.Build.cs | PublicDependencyModuleNames | — | — | — | — | 02 | High | Confirm link |
|
||||
| Plugins | Project | AdvancedSessions enabled under Plugins/ | Observed Implementation | Intended Behavior | AdvancedSessions.uplugin | AdvancedSessions module | — | — | — | Plugins/AdvancedSessions | 02,11 | High | Live BP usage Batch 4 |
|
||||
| Plugins | Project | AdvancedSteamSessions enabled | Observed Implementation | Intended Behavior | AdvancedSteamSessions.uplugin | — | — | — | — | Plugins/AdvancedSteamSessions | 02,11 | High | Steam config location |
|
||||
| Config | Maps | GameDefaultMap=MainMenu; EditorStartupMap=Test01 | Observed Implementation | Intended Behavior | DefaultEngine.ini | GameMapsSettings | — | — | — | Config/DefaultEngine.ini | 02 | High | Per-map GameMode |
|
||||
| Config | Redirects | GAS* classes redirected to RIR* | Observed Implementation | Incomplete Refactor | DefaultEngine.ini | CoreRedirects | — | — | — | Config/DefaultEngine.ini | 02,03 | High | — |
|
||||
| Config | Tags | State/Disable/Effect project tags | Observed Implementation | Partially Implemented | DefaultGameplayTags.ini | GameplayTagList | — | — | — | Config/DefaultGameplayTags.ini | 02,06 | High | Referencers Pass 7 |
|
||||
| Config | Input | Enhanced Input defaults + legacy Jump/Move axes | Observed Implementation | Partially Implemented | DefaultInput.ini | DefaultPlayerInputClass | — | — | — | Config/DefaultInput.ini | 02 | High | Ability IMCs |
|
||||
| Character | Player ASC | ASC owned by PlayerState; Mixed replication | Observed Implementation | Intended Behavior | RIRPlayerState.cpp | CreateDefaultSubobject ASC | BP_PlayerState (seed) | — | — | — | 03,06,08 | High | Default GE apply |
|
||||
| Character | Player init | InitAbilityActorInfo on PossessedBy/OnRep | Observed Implementation | Intended Behavior | RIRPlayerCharacter.cpp | InitAbilityActorInfo | — | — | — | — | 03,06 | High | Runtime HUD init |
|
||||
| Character | Enemy ASC | ASC on enemy; Minimal replication | Observed Implementation | Intended Behavior | RIRBaseEnemyCharacter.cpp | CreateDefaultSubobject ASC | BP_Enemy_* (seed) | — | — | — | 03,06,09 | High | Interface GetASC |
|
||||
| Character | Player ASC | ASC owned by PlayerState; Mixed replication | Observed Implementation | Intended Behavior | RIRPlayerState.cpp | CreateDefaultSubobject ASC | BP_PlayerState | — | — | — | 03,06,08 | High | Runtime values |
|
||||
| Character | GetASC | Base GetASC reads PlayerState only | Observed Implementation | Incomplete Refactor | RIRBaseCharacter.cpp | GetAbilitySystemComponent | — | — | — | — | 03,06,13 | High | PIE on enemy |
|
||||
| GAS | Ability class | URIRGameplayAbility empty; no subclasses | Observed Implementation | Partially Implemented | RIRGameplayAbility.* | InstancingPolicy | — | — | — | — | 03,06 | High | Reconfirm GA assets Pass 7 |
|
||||
| GAS | Attributes | Health/Mana/Stamina set; ctor inits H/M only | Observed Implementation | Partially Implemented | RIRAttributeSet.* | InitHealth etc. | — | — | — | — | 03,06 | High | GE overrides |
|
||||
| GAS | Default GE prop | DefaultAttributesGameplayEffect unused in cpp | Observed Implementation | Partially Implemented | RIRPlayerState.h | DefaultAttributesGameplayEffect | BP_PlayerState | — | — | — | 03,06,13 | High | BP apply path |
|
||||
| Effects | Apply | EffectActor applies GE via ASC library | Observed Implementation | Partially Implemented | RIREffectActor.cpp | ApplyEffectToTarget | BP_HealthPotion etc. | — | — | — | 03,12 | High | Overlap graphs |
|
||||
| UI | HUD | InitOverlay from player init; attribute delegates | Observed Implementation | Partially Implemented | RIRHUD.cpp, OverlayWidgetController.cpp | InitOverlay, BindCallbacks | WBP_Overlay (seed) | — | — | — | 03,11 | High | Widget bindings |
|
||||
| UI | Delegates | Stamina delegates use Mana signature types | Observed Implementation | Technical Debt | OverlayWidgetController.h | OnStaminaChanged | — | — | — | — | 03,11 | High | — |
|
||||
| Enemy | AI native | No MoveTo/chase/attack in native | Observed Implementation | Existing Baseline Defect | RIRBaseEnemyCharacter.* | — | BP_Enemy_* | — | — | — | 09 | High | BP Pass 9 |
|
||||
| Framework | Seeds | GI_Dungeoneer, GM_Dungeoneer, GM_MainMenu | Observed Implementation | — | search_subclasses | — | those paths | — | — | — | 02,03 | High | BP internals |
|
||||
| Continuity | Editor | PIE=false; level Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | — |
|
||||
| GAS | Ability class | URIRGameplayAbility empty; no subclasses | Observed Implementation | Partially Implemented | RIRGameplayAbility.* | InstancingPolicy | — | — | — | — | 03,06 | High | Pass 7 |
|
||||
| GAS | Default GE | BP_PlayerState DefaultAttributesGameplayEffect=None | Observed Implementation | Partially Implemented | ObjectTools CDO | defaultAttributesGameplayEffect | BP_PlayerState | — | — | — | 03,06,13 | High | Other apply sites |
|
||||
| GAS | Orphan GE | GE_Cleric/Wizard_DefaultAttributes unwired; 0 referencers | Observed Implementation | Present but Unconnected | AssetTools refs | — | Player_Cleric / Wizard | — | — | GE_*_DefaultAttributes | 06 | High | Pass 7 |
|
||||
| Ability | Input | IA_Ability_001–004 Started→Server_Ability_*_Begin | Observed Implementation | Intended Behavior | BlueprintTools | EnhancedInputAction | BP_PlayerCharacterBase | EventGraph | IA_Ability_* | IA_Ability_* | 05,08 | High | — |
|
||||
| Ability | Base stub | Server_Ability_*_Begin PrintString Override | Observed Implementation | Partially Implemented | get_connected_subgraph | PrintString | BP_PlayerCharacterBase | EventGraph | Server_Ability_001_Begin | — | 05 | High | — |
|
||||
| Ability | Paladin 001 | Begin montage + UseAbility001 Authority BoxOverlap ApplyDamage | Observed Implementation | Implemented | get_connected_subgraph | ApplyDamage | Player_Paladin | EventGraph | UseAbility001 | Ability001Montages | 05,08 | High | Notify caller Pass 8 |
|
||||
| Ability | Paladin 002 | Block state Begin/End; no ApplyDamage in Begin | Observed Implementation | Partial | get_connected_subgraph | IsBlocking | Player_Paladin | EventGraph | Server_Ability_002_* | — | 05 | High | Hit absorb Pass 8 |
|
||||
| Ability | Paladin 003 | Mana + ChargeTimeline + ChargeBox ApplyDamage | Observed Implementation | Implemented | get_connected_subgraph | ChargeBox | Player_Paladin | EventGraph | Charge / Client_Charge | — | 05 | High | — |
|
||||
| Ability | Paladin 004 | Mana + montage + SphereOverlap ApplyDamage; empty particle | Observed Implementation | Implemented / Partial FX | get_connected_subgraph | UseAbility004 | Player_Paladin | EventGraph | UseAbility004 | Paladin_Ability004_Montage | 05,10 | High | — |
|
||||
| Ability | Amazonian 001 | Same pattern as Paladin melee; known working runtime | Observed Implementation + Observed Runtime Behavior | Implemented | get_connected_subgraph | UseAbility001 | Player_Amazonian | EventGraph | Server_Ability_001_Begin | Amazon Attack montages | 05,08 | High | — |
|
||||
| Ability | Amazonian 002–004 | Inherited PrintString only | Observed Implementation | Stub | list_events | bIsImplemented | Player_Amazonian | — | — | — | 05 | High | — |
|
||||
| Ability | Amazonian death | AnyDamage → DEPRECATED_CurrentHealth → PlayerDeath | Observed Implementation | Partial (legacy health) | get_connected_subgraph | ReceiveAnyDamage | Player_Amazonian | EventGraph | ReceiveAnyDamage | — | 05 | High | — |
|
||||
| Ability | Cleric 001 | Montage only; no UseAbility001 | Observed Implementation | Partial | get_connected_subgraph | Multicast_PlayMontage | Player_Cleric | EventGraph | Server_Ability_001_Begin | — | 05 | High | — |
|
||||
| Ability | Cleric 002 | Heal Players via RecoverPlayerHealth; empty particle | Observed Implementation | Partial | get_connected_subgraph | UseAbility002 | Player_Cleric | EventGraph | UseAbility002 | — | 05 | High | — |
|
||||
| Ability | Cleric 003 | DivineCircle timer ConcentrateHandle ApplyDamage; End cleans | Observed Implementation | Implemented | get_connected_subgraph | ConcentrateHandle | Player_Cleric | EventGraph | Server_Ability_003_* | — | 05 | High | — |
|
||||
| Ability | Cleric 004 | Mana CanUse unwired; SpawnActor Class empty | Observed Implementation | Existing Baseline Defect | get_connected_subgraph | SpawnActor | Player_Cleric | EventGraph | UseAbility004 | BP_PlayerProjectile unwired | 05,13 | High | PIE |
|
||||
| Ability | Wizard | No Server_Ability_* / UseAbility*; inherit stubs | Observed Implementation | Stub | list_events + EventGraph | — | Player_Wizard | EventGraph | — | NS_Wizard_Ability001 unwired | 05,08 | High | — |
|
||||
| Ability | Gunslinger | IsDataOnly; only base deps; inherit stubs | Observed Implementation | Stub / Existing Baseline Defect | get_asset_tags | IsDataOnly | Player_Gunslinger | — | — | — | 05,08 | High | — |
|
||||
| Ability | Parent call | Paladin/Amazonian/Cleric ability overrides skip Parent | Observed Implementation | Incomplete Refactor | get_connected_subgraph | Parent call absent | Player_* | EventGraph | Server_Ability_*_Begin | — | 05 | High | — |
|
||||
| Ability | Multicast | Multicast_PlayMontage→PlayMontage | Observed Implementation | Intended Behavior | get_connected_subgraph | PlayMontage | BP_PlayerCharacterBase | EventGraph | Multicast_PlayMontage | — | 05 | High | — |
|
||||
| Ability | End stubs | Most child Ends missing; base End empty | Observed Implementation | Partially Implemented | list_events | Server_Ability_*_End | children | EventGraph | — | — | 05 | High | Pass 8 cleanup |
|
||||
| Anim | Montages | Per-class Attack/Ability montages seeded | Observed Implementation | — | Multicast pins / deps | Ability001Montages | Player_* | EventGraph | Multicast_PlayMontage | /Game/.../AnimMontages/... | 10 | High | Pass 8 notifies |
|
||||
| HUD | Legacy | Server_UpdateHUD uses DEPRECATED health/mana % | Observed Implementation | Incomplete Refactor | get_connected_subgraph | UpdatePlayerHUD | BP_PlayerCharacterBase | EventGraph | Server_UpdateHUD | DEPRECATED_* | 05,06,11 | High | PIE dual HUD |
|
||||
| HUD | Native | InitOverlay ASC delegates | Observed Implementation | Partially Implemented | RIRHUD.cpp | InitOverlay | WBP_PlayerHUD | — | — | WBP_Overlay | 03,11 | High | Widget bindings |
|
||||
| HUD | Class | WBP_PlayerHUD parent RIRHUD (AHUD) | Observed Implementation | Technical Debt (naming) | get_asset_tags | ParentClass | WBP_PlayerHUD | — | — | — | 03,11,13 | High | — |
|
||||
| Framework | GM | HUDClass=WBP_PlayerHUD; PC=PC_Character; PS=BP_PlayerState | Observed Implementation | Intended Behavior | ObjectTools CDO | HUDClass | GM_Dungeoneer | — | — | — | 03,11 | High | — |
|
||||
| Framework | PC | IMC_PlayerDefault + IA_Movement | Observed Implementation | Intended Behavior | ObjectTools CDO | PlayerMappingContext | PC_Character | — | — | IMC_PlayerDefault | 03,08 | High | Ability IMC add |
|
||||
| Character | Death | PlayerDeath→IsDead→respawn destroy→PlayerRespawn | Observed Implementation | Partially Implemented | get_connected_subgraph | Server_RespawnPlayer | BP_PlayerCharacterBase | EventGraph | PlayerDeath | — | 05 | High | Other callers |
|
||||
| Enemy | BP structure | Base+Skeleton Tick/Overlap only; BPI GetEnemyREF | Observed Implementation | — | list_events | ReceiveTick | BP_Enemy_* | EventGraph | — | — | 09 | Medium | Pass 9 graphs |
|
||||
| Interface | BPI set | Four BPIs: PlayerCharacter, EnemyCharacter, PlayerController, GameMode | Observed Implementation | — | find_assets | BPI_ | Interfaces/ | — | — | — | 03 | High | — |
|
||||
| Continuity | Editor | PIE=false; level Test01; sel Skeleton_C_1 | Observed Implementation | — | EditorApp/SceneTools | IsPIERunning | — | — | — | Test01 | 15 | High | Batch 3 close |
|
||||
| Repo | Git | Archaeology Markdown only dirty after Batch 3 | Observed Implementation | — | git status | — | — | — | — | — | 15 | High | — |
|
||||
|
||||
@@ -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 1 (Passes 0, 1, 2)
|
||||
- **Next authorized work:** Wait for user — recommend **Batch 2** (Passes 3 + 5)
|
||||
- **Last completed pass / batch:** Batch 3 (Pass 6)
|
||||
- **Next authorized work:** Wait for user — recommend **Batch 4** (Pass 4 sessions / Pass 7 GAS / Pass 8 animation — only as authorized)
|
||||
|
||||
## Phase completed
|
||||
|
||||
| Item | Value |
|
||||
|------|--------|
|
||||
| Phase | Phase 1 — Static Architecture (in progress) |
|
||||
| Batch completed | Batch 1 — Foundation |
|
||||
| Passes completed | Pass 0 Continuity gate; Pass 1 Modules/plugins/config; Pass 2 Native C++ hierarchy |
|
||||
| Batch completed | Batch 3 — Per-character ability archaeology |
|
||||
| Passes completed | Pass 6 (Paladin → Amazonian → Cleric → Wizard → Gunslinger) |
|
||||
| Date completed | 2026-07-16 |
|
||||
| Model identifier | Cursor Grok 4.5 |
|
||||
|
||||
@@ -22,132 +22,150 @@
|
||||
|
||||
## Repository integrity
|
||||
|
||||
### Starting state (Pass 0)
|
||||
### Starting state (Batch 3)
|
||||
|
||||
- **Git:** Not a git repository (`fatal: not a git repository`). Read-only git commands unavailable for dirty-file tracking.
|
||||
- **Filesystem Archaeology baseline:** Only `Documentation/Archaeology/00-MCP-Capability-Calibration.md` present (SHA256 `91CDDBC1BD2880FA892CCC3753BA0C5B582D95916E62151251AC35C131134AA5`).
|
||||
- **Pre-existing modified/untracked (git):** N/A — no git. No attempt to clean or alter other project files.
|
||||
- **Editor:** `IsPIERunning=false`; current level `/Game/_Main/Levels/Testing/Test01`; selected actor `BP_Enemy_Skeleton_C_1` (matches calibration).
|
||||
- **Git:** Dirty with expected Batch 2 Archaeology Markdown only (not unexpected):
|
||||
- Modified: `03`, `06`, `08`, `09`, `11`, `13`, `14`, `15`
|
||||
- Untracked: `05-LegacyAbilityArchitecture.md`
|
||||
- **Baseline commit:** `ff5640a0` Establish UE 5.8 known-good baseline with Batch 1 archaeology docs.
|
||||
- **Editor:** `IsPIERunning=false`; level `/Game/_Main/Levels/Testing/Test01`; selected actor `BP_Enemy_Skeleton_C_1`.
|
||||
|
||||
### Ending state (Batch 1 close)
|
||||
|
||||
- New/modified files: Markdown only under `Documentation/Archaeology/` (listed below).
|
||||
- `00-MCP-Capability-Calibration.md` hash unchanged (must verify at close).
|
||||
- No source, config, plugin, map, or Unreal asset writes performed.
|
||||
### Ending state (Batch 3 close)
|
||||
|
||||
- Modified/created files: Markdown only under `Documentation/Archaeology/` (listed below).
|
||||
- **Unexpected untracked file reported (not reverted):** `Documentation/Archaeology/01-Phase-1-Plan.md` — present at close; not created by Pass 6 doc writes; contents not inspected this closeout.
|
||||
- No source, config, plugin, map, or Unreal asset writes.
|
||||
- PIE not started; level and selection not changed intentionally.
|
||||
- Ending Git check: only Archaeology Markdown dirty (confirm at close).
|
||||
---
|
||||
|
||||
## Areas fully inspected (Batch 1 tools)
|
||||
## Areas fully inspected (Batch 3 tools)
|
||||
|
||||
- All `.h`/`.cpp` under `Source/REALMSINRUIN/`
|
||||
- `REALMSINRUIN_DEV.uproject`, Targets, Build.cs, module startup
|
||||
- `Plugins/AdvancedSessions` + `AdvancedSteamSessions` descriptors and Build.cs
|
||||
- `Config/DefaultEngine.ini`, `DefaultGame.ini`, `DefaultGameplayTags.ini`, `DefaultInput.ini` (input file partially — defaults + Jump/Move mappings)
|
||||
- PluginToolset ListEnabledPlugins; GetPluginInfo AdvancedSessions/AdvancedSteamSessions
|
||||
- Editor continuity: PIE, level, selection
|
||||
- search_subclasses seeds for player/enemy/effect/HUD/PC/PS/GA/widget/GameMode/GameInstance
|
||||
- Player_Paladin: Ability 001–004 Begin/End/UseAbility/Charge/ChargeBox connected paths
|
||||
- Player_Amazonian: Ability 001 + UseAbility001 + ReceiveAnyDamage; 002–004 absence
|
||||
- Player_Cleric: Ability 001–004 + ConcentrateHandle/EndConcentrate + UseAbility002/004
|
||||
- Player_Wizard: EventGraph walk; alternate UseAbility/input/spell search; unwired assets
|
||||
- Player_Gunslinger: IsDataOnly confirmation; Parent-only EventGraph; inherited stubs
|
||||
|
||||
## Areas partially inspected
|
||||
|
||||
- DefaultInput.ini beyond movement/look mappings (full VR axis noise present; ability actions absent)
|
||||
- Enabled engine plugin usage (listed; not usage-verified)
|
||||
- GAS GE assets (known from calibration; CDOs not re-inspected this batch)
|
||||
- FCanUseMana function body (call sites only)
|
||||
- Client_Charge / ChargeTimeline numeric curve details
|
||||
- PlayerHitCheck graphs (existence known; full absorb logic → later)
|
||||
- Montage notify tracks (seeded in doc 10 → Pass 8)
|
||||
|
||||
## Areas not yet inspected
|
||||
|
||||
- All Blueprint graph/variable deep dives (Batch 2+)
|
||||
- Frontend/session flows (Batch 4)
|
||||
- Per-character abilities (Batch 3)
|
||||
- Animation (Batch 4 Pass 8)
|
||||
- Enemy BP AI (Batch 4 Pass 9)
|
||||
- Full UI trees / pickups graphs (Batch 4)
|
||||
- Synthesis docs 01, 05, 07, 10 (not created — no substantive Batch 1 content for 05/07/10/01)
|
||||
- Frontend/session flows (Batch 4 Pass 4)
|
||||
- GE/cue systemwide inventory (Batch 4 Pass 7)
|
||||
- Animation deep dive / AnimNotify → UseAbility (Batch 4 Pass 8)
|
||||
- Enemy BP AI deep dive (Batch 4 Pass 9)
|
||||
- Full UI trees / pickups (Batch 4)
|
||||
- Cross-character migration matrix doc 07 (Pass 11)
|
||||
|
||||
---
|
||||
|
||||
## Blueprints inspected
|
||||
|
||||
None in depth. **Path seeds only** recorded in 03/08/09/11/12.
|
||||
| Asset | Depth |
|
||||
|-------|--------|
|
||||
| BP_PlayerCharacterBase | Correlation only (Batch 2 deep dive stands) |
|
||||
| Player_Paladin | Pass 6 full ability path reconstruction |
|
||||
| Player_Amazonian | Pass 6 full ability path reconstruction |
|
||||
| Player_Cleric | Pass 6 full ability path reconstruction |
|
||||
| Player_Wizard | Pass 6 ability + alternate path search |
|
||||
| Player_Gunslinger | Pass 6 data-only / inherited stub confirmation |
|
||||
|
||||
Referenced when required for ability identity: montage paths, MagicSpell_01_Cue, BP_PlayerProjectile (unwired), GE_* DefaultAttributes (orphans), NS_Wizard_Ability001 (unwired).
|
||||
|
||||
## C++ classes inspected
|
||||
|
||||
ARIRBaseCharacter, ARIRPlayerCharacter, ARIRBaseEnemyCharacter, ARIRPlayerState, ARIRPlayerController, ARIRHUD, URIRAbilitySystemComponent, URIRAttributeSet, URIRGameplayAbility, ARIREffectActor, URIRUserWidget, URIRWidgetController, UOverlayWidgetController, ITargetInterface / UTargetInterface; module REALMSINRUIN.h/cpp.
|
||||
None new this batch (Batch 1 inventory stands).
|
||||
|
||||
## Assets / configs inspected
|
||||
|
||||
Listed in §Areas fully inspected. No Unreal assets modified or saved.
|
||||
Unreal content via MCP read-only only. No config file writes.
|
||||
|
||||
## Files created
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/02-ProjectArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/03-ClassHierarchy.md | Draft |
|
||||
| Documentation/Archaeology/10-AnimationDependencies.md | Draft |
|
||||
|
||||
## Files updated
|
||||
|
||||
| File | Status |
|
||||
|------|--------|
|
||||
| Documentation/Archaeology/05-LegacyAbilityArchitecture.md | Draft (major Pass 6 rewrite) |
|
||||
| Documentation/Archaeology/06-PartialGASArchitecture.md | Draft |
|
||||
| Documentation/Archaeology/08-CharacterSystems.md | Draft |
|
||||
| Documentation/Archaeology/09-EnemyAI-StaticAnalysis.md | Draft |
|
||||
| Documentation/Archaeology/11-UI-HUD-And-Sessions.md | Draft |
|
||||
| Documentation/Archaeology/12-Pickups-And-Effects.md | Draft |
|
||||
| Documentation/Archaeology/13-Unknowns-And-RuntimeQuestions.md | Draft |
|
||||
| Documentation/Archaeology/14-EvidenceIndex.md | Draft |
|
||||
| Documentation/Archaeology/15-HandoffStatus.md | Draft |
|
||||
|
||||
## Files updated
|
||||
|
||||
None pre-existing except this handoff/index created new. **00-MCP-Capability-Calibration.md not modified.**
|
||||
**03-ClassHierarchy.md not modified** (no Batch 2 structural correction required).
|
||||
**00-MCP-Capability-Calibration.md not modified.**
|
||||
**07-AbilityMigrationMatrix.md not created** (Pass 11).
|
||||
|
||||
## Toolsets used
|
||||
|
||||
EditorAppToolset (IsPIERunning, GetSelectedActors); SceneTools (get_current_level); PluginToolset (ListEnabledPlugins, GetPluginInfo); ObjectTools (search_subclasses); filesystem reads of Source/Config/Plugins.
|
||||
EditorAppToolset (IsPIERunning, GetSelectedActors); SceneTools (get_current_level); AssetTools (class/tags/deps/refs); BlueprintTools (graphs/events/functions/variables/find_nodes/get_node_infos/get_connected_subgraph/read_graph_dsl); ObjectTools (get_properties).
|
||||
|
||||
## Tool limitations / failed queries
|
||||
|
||||
- Git unavailable (not a repository)
|
||||
- Some parallel CallMcpTool batches failed with schema errors; succeeded when retried singly
|
||||
- SemanticSearch not used (not configured)
|
||||
- GetPluginInfo for GameplayAbilities/CommonUI/IsEnabled calls failed in parallel batch (AdvancedSessions info succeeded on retry); ListEnabledPlugins already confirmed AdvancedSessions/Steam/CommonUI/GameplayAbilities enabled
|
||||
- CustomEvent Reliable/Unreliable flags: **Unknown — MCP property visibility limitation**
|
||||
- `find_nodes(title="Comment")` returned [] — comment-box regions Unknown
|
||||
- SemanticSearch unavailable
|
||||
- Some CallMcpTool invocations initially failed when `server`/`toolName` wrapper omitted; retried successfully
|
||||
- Blocked read-only continuity queries (if any): recorded as tool limitation, not mutation
|
||||
|
||||
## Contradictory evidence
|
||||
|
||||
1. **Enemy ASC ownership vs GetAbilitySystemComponent:** Enemy creates ASC on self; base character GetASC uses PlayerState only. Both Observed Implementation. Better supported: both true — interface path likely wrong for enemies. Logged for Batch 4 / runtime.
|
||||
2. **Documented Intent URIRGameplayAbility “all abilities” vs no subclasses / no GA assets:** Infrastructure only. Better supported: not migrated.
|
||||
3. **DefaultAttributesGameplayEffect declared vs never applied in native:** Scaffolding; apply path Unknown (Blueprint?).
|
||||
1. Dual HUD: native ASC Overlay vs DEPRECATED float UpdatePlayerHUD — both active statically.
|
||||
2. DefaultAttributes: GE assets exist (incl. character orphans); BP_PlayerState=None; C++ never applies.
|
||||
3. Enemy ASC ownership vs GetASC PlayerState path — unchanged from Batch 1.
|
||||
4. Cleric Ability 004: FCanUseMana executed but Branch uses literal true — structural defect.
|
||||
|
||||
## Unresolved naming ambiguities
|
||||
|
||||
- `Player_Amazonian` vs GE `Amazon` folder naming
|
||||
- `WBP_PlayerHUD` returned as RIRHUD subclass
|
||||
- Amazon vs Amazonian GE folder naming (Pass 7)
|
||||
- WBP_PlayerHUD naming — resolved class-wise; name still misleading
|
||||
|
||||
## Requires Manual Editor Inspection
|
||||
|
||||
- OnlineSubsystem/Steam config location
|
||||
- Confirm WBP_PlayerHUD asset type
|
||||
- CommonUI content usage
|
||||
- CustomEvent Reliable/Unreliable flags
|
||||
- DEPRECATED comment-box visual boundaries
|
||||
- Montage notify tracks → UseAbility*
|
||||
|
||||
## Requires Runtime Inspection / PIE
|
||||
|
||||
- Enemy GetASC / EffectActor apply
|
||||
- Default attribute values after spawn
|
||||
- HUD overlay creation success
|
||||
- Session flows (later)
|
||||
- Dual HUD behavior
|
||||
- Default attribute spawn values
|
||||
- Enemy GetASC impact
|
||||
- Cleric Ability 004 / Wizard BeginPlay Parent skip
|
||||
- Ability networking feel / reliability
|
||||
|
||||
## Suggested next bounded task
|
||||
|
||||
**Authorize Batch 2 only:**
|
||||
**Authorize Batch 4 only** (choose one or more Passes explicitly):
|
||||
|
||||
1. Pass 3 — Blueprint hierarchy for `BP_PlayerCharacterBase`, five `Player_*`, `BP_EnemyCharacterBase`, `BP_Enemy_Skeleton`, `BPI_*`, `GI_Dungeoneer`, `GM_*`, `PC_Character`, `BP_PlayerState` (structure: parents, vars, graphs list, events — not full ability path walk yet where Pass 5 owns deep dive).
|
||||
2. Pass 5 — Deep dive `BP_PlayerCharacterBase` ability/RPC/DEPRECATED/GAS/comments.
|
||||
1. Pass 7 — GAS GE/cue/tag inventory
|
||||
2. Pass 8 — Animation / AnimNotify → UseAbility wiring
|
||||
3. Pass 4 — Frontend / session flows
|
||||
4. Pass 9 — Enemy BP AI
|
||||
|
||||
**Do not begin** Pass 11 migration matrix or PIE until authorized.
|
||||
|
||||
**Exact starting files for next model:**
|
||||
|
||||
- Read: `00-MCP-Capability-Calibration.md`, `15-HandoffStatus.md`, `14-EvidenceIndex.md`, `03-ClassHierarchy.md`, `08-CharacterSystems.md`
|
||||
- Inspect first: `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase`
|
||||
|
||||
**Subsystem continuity:** Keep player-base ability reconstruction with one model through Batch 2 Pass 5 before switching mid-graph.
|
||||
- Read: `00`, `05`, `06`, `08`, `10`, `13`, `14`, `15`
|
||||
- For Pass 7: start GE assets under `/Game/_Main/` + ASC defaults
|
||||
- For Pass 8: start montages listed in `10-AnimationDependencies.md`
|
||||
|
||||
## Confirmation
|
||||
|
||||
- No Unreal assets modified
|
||||
- No source/config/map/plugin modified
|
||||
- No editor state intentionally modified (PIE not started; level/selection/camera not changed)
|
||||
- No work beyond Pass 2 performed
|
||||
- No editor state intentionally modified (PIE not started; level/selection unchanged)
|
||||
- No work beyond Pass 6 performed
|
||||
- Waiting for explicit authorization before Batch 4
|
||||
|
||||
Reference in New Issue
Block a user