Files
realms-in-ruin-dev/Documentation/Archaeology/03-ClassHierarchy.md
T
tedwardsandCursor aa0058a018 Document Pass 11 Phase 1 synthesis and close static archaeology.
Add executive summary and ability migration matrix; finalize evidence index, runtime validation plan, and Phase 1 handoff.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 23:40:52 -07:00

12 KiB
Raw Blame History

03 — Class Hierarchy

Status: Complete

  • 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 (complete)
  • Last completed pass: Pass 11 (Batch 5) — status close
  • Next pass expected to contribute: Phase 2 when authorized

Completion notes

Static hierarchy archaeology for Phase 1 is complete. CommonUI usage, CustomEvent Reliability, and PIE possession remain Requires Runtime Inspection / Manual Editor (13).

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
  • Pass 4/10: Frontend PC/GM/GI roles; BPI_PlayerController UpdatePlayerHUD/AddGold unimplemented on PC_Character; EffectActor vs BP_BasePickUp hierarchies

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_Ability001004 Damage/ManaCost

Replication samples: CurrentlyAttacking, IsDead, DEPRECATED_CurrentHealth/Mana = Replicated; PlayerController, CharacterClass = None

Implemented custom events (selection): Server_Ability_001004 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_001004, 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_001004 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
Variables CharacterSelectHUD
Implemented events ServerSpawnCharacter, ReceiveBeginPlay, PlayerFirstSpawn, PlayerSelectScreenChoice, PlayerRespawn
Not implemented (bIsImplemented=false) UpdatePlayerHUD, AddGold, SetPlayerCanMove, AddKill_PlayerController
Native C++ RIRPlayerController has no UpdatePlayerHUD / AddGold symbols
CDO IMC /Game/_Main/Blueprints/Player/Inputs/IMC_PlayerDefault
CDO MovementInput /Game/_Main/Blueprints/Player/Inputs/Movement/IA_Movement

Pass 4: BeginPlay creates char-select only on Authority∧IsServer. Spawn path: select → ServerSpawnCharacter → GM GetSelectedClass → PlayerFirstSpawn → SpawnActor+Possess.

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 Empty EventGraph; 0 referencers; not in GameInstanceClass INI — Present but Unconnected
/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
/Game/_Main/Blueprints/Player/PC_MainMenu PlayerController HostGame CreateAdvancedSession; JoinGame JoinSession; creates WBP_MainMenu

GM_Dungeoneer CDO (Observed Implementation):

  • HUDClass = WBP_PlayerHUD_C
  • PlayerControllerClass = PC_Character_C
  • PlayerStateClass = BP_PlayerState_C
  • DefaultPawnClass = None (spawn via PC char-select flow)

6. Interfaces discovered

Interface Path Key graphs
BPI_PlayerCharacter /Game/_Main/Blueprints/Interfaces/BPI_PlayerCharacter UseAbility001004, 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.

Pass 10: Callers of UpdatePlayerHUD / AddGold exist; PC_Character does not implement them → Present but Unconnected.


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
CDO (Pass 10) overlayWidgetClass=WBP_Overlay_C; overlayWidgetControllerClass=BP_OverlayWidgetController_C

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 → UpdatePlayerHUD Overlay Connected; UpdatePlayerHUD unimplemented on PC (Pass 10)
Gameplay Abilities URIRGameplayAbility Documented Intent No GA assets; legacy Server_Ability_* Legacy BP abilities active
Gold BP_BasePickUp calls AddGold AddGold unimplemented on PC_Character Mutation Present but Unconnected
GameInstance GI_Dungeoneer asset exists Not in GameInstanceClass; 0 refs Present but Unconnected