Records empty enemy EventGraphs, stock AIController possession, orphan attack montage, and separates GetASC defect from chase/attack failure. Co-authored-by: Cursor <cursoragent@cursor.com>
11 KiB
03 — Class Hierarchy
Status: Draft
- 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: 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 9 (Batch 4C) — enemy hierarchy/control expanded
- Next pass expected to contribute: Pass 4 / Pass 10 when authorized
Draft tracking
Completed sections
- 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
- Pass 9: Enemy EventGraphs empty; stock AIController; BPI partial; no BT/BB
Pending sections
- Frontend/session graphs (Pass 4)
Evidence still required
- Exact CustomEvent reliable flags
- PIE possession of placed skeletons
- CommonUI content usage
Hierarchy overview
flowchart TD
ACharacter[ACharacter] --> ARIRBaseCharacter
IASI[IAbilitySystemInterface] --> ARIRBaseCharacter
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
ARIRPlayerState --> BP_PlayerState
APlayerController --> ARIRPlayerController
ARIRPlayerController --> PC_Character
AHUD --> ARIRHUD
ARIRHUD --> WBP_PlayerHUD
AGameModeBase --> GM_Dungeoneer
AGameModeBase --> GM_MainMenu
UGameInstance --> GI_Dungeoneer
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++.
2. Player Blueprint hierarchy (Pass 3)
2.1 BP_PlayerCharacterBase
| 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 |
Graphs: UserConstructionScript, EventGraph, GetPlayerPaladinREF, GetPlayerREF, GetPlayerWizardREF, GetPlayerAmazonREF, GetPlayerClericREF
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
Replication samples: CurrentlyAttacking, IsDead, DEPRECATED_CurrentHealth/Mana = Replicated; PlayerController, CharacterClass = None
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
Input Action refs (deps): IA_Ability_001–004, IA_CameraPan, IA_CameraPanTrigger, IA_CameraZoom
Deep dive: See 05-LegacyAbilityArchitecture.md and 08-CharacterSystems.md.
2.2 Playable children (structural)
| 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.
3. Enemy Blueprint hierarchy (Pass 3 + Pass 9)
| Asset | Parent | Interface | Graphs | Vars | Implemented events | Pass 9 body |
|---|---|---|---|---|---|---|
/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase |
RIRBaseEnemyCharacter | — | UCS, EventGraph | [] | BeginPlay, Tick, ActorBeginOverlap | Empty (unconnected) |
/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton |
BP_EnemyCharacterBase_C | BPI_EnemyCharacter (GetEnemyREF only) | UCS, EventGraph, GetEnemyREF | [] | BeginPlay, Tick, ActorBeginOverlap | Empty; GetEnemyREF→self |
Control (CDO + C_1 instance): AIControllerClass=/Script/AIModule.AIController; AutoPossessAI=PlacedInWorld.
Deps (Skeleton): SKM_Skeleton_Guard_Body, BPI_EnemyCharacter, BP_EnemyCharacterBase, ABP_Skeleton, REALMSINRUIN.
Pass 9: No BehaviorTree/Blackboard/custom AIController in project. Chase/attack Implementation Missing. Full analysis: 09-EnemyAI-StaticAnalysis.md.
4. Player framework Blueprints
4.1 PC_Character
| 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 |
4.2 BP_PlayerState
| Field | Value |
|---|---|
| Path | /Game/_Main/Blueprints/Player/BP_PlayerState |
| Parent | RIRPlayerState |
| IsDataOnly | True |
| Variables | [] |
| Implemented events | BeginPlay, Tick |
| DefaultAttributesGameplayEffect | None (Observed Implementation on CDO) |
5. Game framework Blueprints
| 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 |
GM_Dungeoneer CDO (Observed Implementation):
- HUDClass =
WBP_PlayerHUD_C - PlayerControllerClass =
PC_Character_C - PlayerStateClass =
BP_PlayerState_C - DefaultPawnClass = None (spawn via PC flow)
6. Interfaces discovered
| Interface | Path | Key graphs |
|---|---|---|
| BPI_PlayerCharacter | /Game/_Main/Blueprints/Interfaces/BPI_PlayerCharacter |
UseAbility001–004, SetIsAttacking, InitializeHUD, GetPlayerREF, 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) |
No separate ability/damage/targeting/session BPI assets under /Game/_Main/Blueprints/Interfaces beyond the four above.
7. WBP_PlayerHUD resolution
| 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 |
Resolves Batch 1 subclass-search anomaly: ObjectTools returned this asset under RIRHUD search because it is an RIRHUD child.
8. Native RPCs
Observed Implementation: Still no native Server/Client/Multicast UFUNCTIONs in Source/REALMSINRUIN. All ability networking is Blueprint-only (05).
Contradictions
| Topic | Evidence A | Evidence B | Better supported |
|---|---|---|---|
| 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 |