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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user