Establish UE 5.8 known-good baseline with Batch 1 archaeology docs.

Initialize Git with LFS for binary assets and add standard Unreal Engine .gitignore/.gitattributes.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-16 19:40:19 -07:00
co-authored by Cursor
commit ff5640a020
17216 changed files with 62362 additions and 0 deletions
@@ -0,0 +1,188 @@
---
name: MCP Calibration Report
overview: Read-only Unreal MCP capability-calibration results for Realms in Ruin. No editor/project state was modified; PIE was not started. SemanticSearch failed (missing embedding API key); AssetTools and other inspect APIs succeeded.
todos:
- id: archaeology-prep
content: Use this calibration report as the gate checklist before the full archaeology pass (read-only tool whitelist + PIE-gated queries)
status: pending
- id: semantic-search-key
content: "Optional: configure SemanticSearch embedding API key so Search/FindSimilar can be used in later passes"
status: pending
isProject: false
---
# Unreal MCP Read-Only Capability Calibration Report
**Session constraints honored:** No ProgrammaticToolset, no create/update/set/save/delete/move/rename/compile/execute/activate/load-level/PIE/screenshot/click/type/drag, no Slate UI automation. PIE status checked only (`IsPIERunning` = false). Current level left as `/Game/_Main/Levels/Testing/Test01`.
---
## Successful Read-Only Queries
### 1. Asset location (`AssetTools.find_assets`)
| Query | Result paths |
|-------|----------------|
| Player_Paladin | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin` (+ meshes `SKM_Player_Paladin`, `SM_Player_Paladin`) |
| Player_Amazon | **No exact match.** Closest: `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Amazonian/Player_Amazonian` |
| BP_Enemy_Skeleton | `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton` |
| Test01 | `/Game/_Main/Levels/Testing/Test01` |
| Dev_Island | `/Game/_Main/Levels/Testing/Dev_Island` (+ `Dev_Island_BuiltData`) |
### 2. SemanticSearch (`SemanticSearchToolset.Search`)
**Failed.** Embedding generation returned HTTP 401 (no API key). Index/toolset present but not usable until SemanticSearch embedding credentials are configured.
### 3. Player_Paladin structural inspection
| Field | Value |
|-------|--------|
| Asset path | `/Game/_Main/Blueprints/Characters/PlayerCharacters/PlayerCharacterClasses/Paladin/Player_Paladin` |
| Object ref | `/Game/_Main/Blueprints/.../Player_Paladin.Player_Paladin` |
| Generated class | `Player_Paladin_C``/Game/.../Player_Paladin.Player_Paladin_C` |
| Blueprint parent | `/Game/_Main/Blueprints/Characters/PlayerCharacters/BP_PlayerCharacterBase.BP_PlayerCharacterBase_C` |
| Native parent | `/Script/REALMSINRUIN.RIRPlayerCharacter` |
| Own variables | `Ability001Montages`, `ChargeStartLoc`, `ChargeFinishLoc`, `IsCharging`, `IsBlocking` |
| Inherited DEPRECATED vars (on base) | On `BP_PlayerCharacterBase`: `DEPRECATED_CurrentHealth/MaxHealth`, `DEPRECATED_CurrentMana/MaxMana`, `DEPRECATED_CurrentStamina/MaxStamina`, `DEPRECATED_ManaRegenOverTime`, `DEPRECATED_Ability00{1-4}Damage/ManaCost` |
| Graphs | `UserConstructionScript`, `GetPlayerPaladinREF`, `PlayerHitCheck`, `EventGraph` |
| Implemented functions (local) | `UserConstructionScript`, `GetPlayerPaladinREF`, `PlayerHitCheck` |
| Key implemented events | `Charge`, `Client_Charge`, `Server_Ability_00{1-4}_*`, `UseAbility001/004`, `ReceiveBeginPlay`, `ReceiveTick`, `ReceiveActorBeginOverlap` |
| Components (via CDO `get_components`) | Native: `CollisionCylinder`, `Arrow`, `CharacterMesh0`, `CharMoveComp`, `AbilitySystemComponent`; many skeletal mesh attach comps (`Helmet`, `Sword`, `Shield`, sockets, etc.); inherited `TPSpringArm`, `ThirdPersonCamera`, footstep comps |
| Interfaces on Paladin asset tags | **Not listed** in `get_asset_tags` `ImplementedInterfaces` (empty/absent). Referencers include `/Game/_Main/Blueprints/Interfaces/BPI_PlayerCharacter` |
| DEPRECATED ability section | **Structurally inspectable.** `find_nodes(title="DEPRECATED")` + `get_node_infos` + `get_connected_subgraph` walk EventGraph nodes e.g. `GetDEPRECATED_Ability003ManaCost``FCanUseMana` → Branch → `Charge` / `Client_Charge` chain from `EventServer_Ability_003_Begin` |
### 4. Selected `BP_Enemy_Skeleton` instance
| Field | Value |
|-------|--------|
| Selected actor | `/Game/_Main/Levels/Testing/Test01.Test01:PersistentLevel.BP_Enemy_Skeleton_C_1` |
| Blueprint asset | `/Game/_Main/Blueprints/Characters/Enemies/Skeleton/BP_Enemy_Skeleton` |
| Class | `/Game/.../BP_Enemy_Skeleton.BP_Enemy_Skeleton_C` |
| Blueprint parent | `/Game/_Main/Blueprints/Characters/Enemies/BP_EnemyCharacterBase.BP_EnemyCharacterBase_C` |
| Native parent | `/Script/REALMSINRUIN.RIRBaseEnemyCharacter` |
| Implemented interface | `BPI_EnemyCharacter``/Game/_Main/Blueprints/Interfaces/BPI_EnemyCharacter.BPI_EnemyCharacter_C` (graph `GetEnemyREF`) |
| AI Controller class | `/Script/AIModule.AIController` (stock engine class) |
| AutoPossessAI | `PlacedInWorld` |
| Components | `CollisionCylinder`, `Arrow`, `CharMoveComp`, `CharacterMesh0`, `AbilitySystemComponent` (+ `AttributeSet` property → `...BP_Enemy_Skeleton_C_1.AttributeSet`) |
| ASC editor state | `defaultStartingData=[]`, `activatableAbilities.items=[]` |
| Dependencies | `SKM_Skeleton_Guard_Body`, `BPI_EnemyCharacter`, `BP_EnemyCharacterBase`, `/Script/REALMSINRUIN`, `/Game/_Main/Animations/Enemies/Skeleton/ABP_Skeleton` |
| Perception / BT / Blackboard props on instance | **Not present** as dedicated properties on the actor instance beyond stock pawn AI fields |
### 5. BehaviorTreeTools vs project content
- `AssetTools.find_assets` with `asset_type=/Script/AIModule.BehaviorTree` over `/Game`**[]**
- No `BT_*`, `Blackboard`, `AIC_*`, or `Perception` assets under `/Game/_Main`
- `ObjectTools.search_subclasses(AIController, "RIR")`**[]**
- **Conclusion:** BehaviorTreeTools APIs (`list_nodes`, `get_blackboard`, etc.) are available, but **no Behavior Tree asset is associated with `BP_Enemy_Skeleton` in this project** — nothing to inspect.
### 6. AttributeSetToolset
`FindAttributeSetClasses` returned:
- **`RIRAttributeSet`** (native, empty `assetPath`) — Realms in Ruin set: `Health`, `MaxHealth`, `Mana`, `MaxMana`, `Stamina`, `MaxStamina`
- `AbilitySystemTestAttributeSet` (engine/test)
- `GASToolsetsTestAttributeSet` (toolset test)
### 7. GameplayTagsToolset (read-only `ListTags` / `GetTagInfo`)
- `ListTags(parentTag="")` returned full manager list (project + engine/plugin tags).
- Sample project tags from `DefaultGameplayTags.ini`: `State.Dead`, `Disable.Ability`, plus `Disable.*`, `Effect.*`, `State.*`, etc.
- Also listed engine/plugin tags (`EnhancedInput.*`, `Niagara.*`, `UI.Action.*`, `Tests.*`, …).
- Mutators (`AddTag`/`RemoveTag`/`RenameTag`) **not used**.
### 8. Domain capability probes (read-only)
| Domain | Tooling that worked | Sample / note |
|--------|---------------------|---------------|
| Gameplay Effects | `AssetTools` + `ObjectTools` on CDO | e.g. `/Game/_Main/Blueprints/Game/GameSystems/GAS/GameplayEffects/PlayerCharacters/Paladin/GE_Paladin_DefaultAttributes` — Instant GE, overrides `RIRAttributeSet:Health/Mana` to 100 |
| Gameplay Abilities | Class filter `/Script/GameplayAbilities.GameplayAbility`**[]**; `GA_*` name search → **[]**; `search_subclasses`**[]** | No discrete GA assets found; abilities appear BP-event driven (`Server_Ability_*`, `UseAbility*`) |
| Anim Blueprints | `AssetTools` + `BlueprintTools.list_graphs` | `/Game/_Main/Animations/PlayerCharacters/Human/CharacterClasses/Paladin/ABP_Paladin` — AnimGraph states Idle/WalkRun/Charge/Block/Death |
| Anim Montages | `AssetTools` + `get_asset_tags` | e.g. `Paladin_Ability004_Montage` — Skeleton `SKEL_Hu_M`, length `1.866667` |
| UMG | `AssetTools` + `BlueprintTools` + UMG read helpers | Widgets under `/Game/_Main/UI/Widgets/...`; UMGToolSet has `ListWidgetBlueprints`, `GetWidgets`, `GetWidgetTreeDepth`, etc. (mutating UMG ops exist but were not used) |
| Advanced Sessions | `PluginToolset` + `AssetTools` + `BlueprintTools` | Plugin **enabled**; path `.../Plugins/AdvancedSessions`; example BP `/Game/_Main/Blueprints/Examples/ExampleAdvancedSessionsFunctionsChar` contains many `K2Node_LatentOnlineCall` / Session nodes |
---
## Information Available
- Asset registry search by name/type/folder; deps/refs; asset class; asset registry tags; metadata tags; load soft refs
- Blueprint parent chain (BP + native); graphs; functions; events (incl. `bIsImplemented`); variables (per-Blueprint, not auto-merged inheritance in one call)
- Graph structure: find nodes by title, node infos (pins/connections/positions), connected subgraphs, `read_graph_dsl`
- Actor/instance: selection query, class, components, property list/get (AIControllerClass, ASC, AttributeSet, etc.)
- AttributeSet discovery + attribute names
- Gameplay tag list + per-tag comment/source/children
- Plugin enablement + descriptor/path for Advanced Sessions
- AnimBP graph/state machine listing via BlueprintTools
- GE CDO modifiers/duration via ObjectTools
- Current level path; PIE running flag
---
## Information Not Exposed
- **SemanticSearch** without embedding API key
- **Dedicated GameplayAbility asset inspector** (no GA assets + no GA-specific toolset beyond runtime `AbilitySystemInspectorToolset`)
- **Behavior Trees / Blackboards / custom AIControllers / AI Perception assets** for enemies in this project (tools exist; content absent)
- **ImplementedInterfaces** as a reliable ObjectTools property on BP/CDO (failed property reads); available via **asset registry tags** when populated (worked for Skeleton, not Paladin tags)
- **Inherited Blueprint variables** not returned by child `list_variables` alone (must query each parent BP)
- **Comment-box / graph-section / “DEPRECATED ability section” as a named region** — only discoverable via node title search + subgraph walk
- **Montage notify/timeline deep structure** beyond asset registry tags (`AnimNotifyList` was empty `;` in sample)
- **Runtime ASC state** (granted abilities, active effects, live attribute values) without PIE
- **Online session runtime** (Advanced Sessions latent results) without PIE/network
- Full UMG visual tree layout details without loading widget into UMGToolSet/`GetWidgets` (read APIs exist; not fully exercised for every widget)
---
## Queries Requiring PIE
Mark as **Requires Runtime Inspection**:
- `GASToolsets.AbilitySystemInspectorToolset.*` (`GetGrantedAbilities`, `GetAttributeValues`, `GetActiveTags`, `GetActiveEffects`) — needs live ASC
- Runtime AI possession / Behavior Tree tick / Blackboard values (even if BTs existed)
- Advanced Sessions create/find/join session outcomes
- Montage playback, ability activation success, damage application, death/respawn flows
- `GameplayCueToolset.ExecuteCueOnSelectedActor` (executes cue; docs note PIE/manager for visible results) — also mutating/execute, excluded here
---
## Queries Requiring Manual Editor Inspection
- SemanticSearch captions/similarity until API key configured
- Visual layout of DEPRECATED comment regions / collapsed graph sections in EventGraph
- Confirm whether enemy AI logic lives entirely in native `RIRBaseEnemyCharacter` C++ (no BT assets found)
- Exact BPI_PlayerCharacter implementation chain on Paladin vs base (tags vs interface editor UI)
- AnimMontage notify tracks / section names when registry tags are empty
- Any content outside `/Game` that uses non-standard naming (e.g. undocumented AI assets)
---
## Recommended Toolsets for the Full Archaeology Pass
**Primary (read-only):**
1. `editor_toolset.toolsets.asset.AssetTools` — locate, classify, deps/refs, tags
2. `editor_toolset.toolsets.blueprint.BlueprintTools` — graphs/functions/events/variables/nodes/DSL
3. `editor_toolset.toolsets.object.ObjectTools` — CDO/instance properties, subclass search
4. `editor_toolset.toolsets.actor.ActorTools` — component trees on CDO/instances
5. `EditorToolset.EditorAppToolset` — selection, open assets, PIE status only
6. `editor_toolset.toolsets.scene.SceneTools``get_current_level`, `find_actors` (avoid `load_level`)
7. `GASToolsets.AttributeSetToolset` — attribute inventory
8. `GameplayTagsToolset.GameplayTagsToolset``ListTags` / `GetTagInfo` / `FindReferencersByTag` only
9. `GASToolsets.GameplayCueToolset``ListCues` / `GetCueInfo` / `FindCueNotifyAssets` only
10. `PluginToolset.PluginToolset``ListEnabledPlugins` / `GetPluginInfo` / `IsEnabled`
11. `UMGToolSet.UMGToolSet``ListWidgetBlueprints`, `GetWidgets`, `GetWidgetTreeDepth`, `GetWidgetDescription` only
12. `aimodule_toolset.toolsets.behavior_tree.BehaviorTreeTools` — only if BT assets appear later
**Deferred / gated:**
- `SemanticSearchToolset` — after API key
- `GASToolsets.AbilitySystemInspectorToolset`**Requires Runtime Inspection** (PIE)
- Avoid: ProgrammaticToolset, SlateInspector, mutating Asset/Blueprint/Object/Scene/UMG/GameplayTags ops
**Suggested archaeology order:** AttributeSets + Tags → Character BP hierarchy (native → base → class) → GE CDOs → AnimBP/Montages → UI widgets → Plugin/session examples → level-placed enemy instances → (optional PIE) ASC runtime.
---
## Calibration verdict
Unreal MCP read-only tooling is **sufficient for structural archaeology** of Blueprints, levels, GEs, AnimBPs, montages, tags, AttributeSets, plugins, and UMG widget discovery. Gaps: SemanticSearch credentials, absence of GA/BT project assets, and any live GAS/AI/session behavior (**Requires Runtime Inspection**).
@@ -0,0 +1,194 @@
# 02 — Project Architecture
**Status: Draft**
- **Scope:** Project modules, targets, Build.cs dependencies, plugins (engine + project-local), gameplay-relevant configuration (maps, tags, input, networking, GAS-related settings), engine vs project boundaries.
- **Inspection method:** Read-only inspection of `.uproject`, Target.cs, Build.cs, module startup, plugin descriptors, `Config/*.ini`, and PluginToolset (`ListEnabledPlugins`, `GetPluginInfo`, `IsEnabled`).
- **Evidence classifications used:** Observed Implementation, Documented Intent, Inferred, Unknown.
- **Tool or visibility limitations:** No Git repository at project root (filesystem integrity used). PluginToolset `ListEnabledPlugins` returns the full editor-enabled set (engine + project). No `OnlineSubsystem` / Steam settings found under `Config/`. SemanticSearch not used.
- **Last updated:** 2026-07-16
- **Current phase:** Phase 1 — Static Architecture
- **Last completed pass:** Pass 1 (Batch 1)
- **Next pass expected to contribute:** Batch 4 Pass 10 (map/GameMode relationships); Batch 4 Pass 4 (session usage confirmation)
## Draft tracking
### Completed sections
- Module and target descriptors
- REALMSINRUIN Build.cs public dependencies
- `.uproject` plugin declarations vs project-local plugins
- Advanced Sessions / Advanced Steam Sessions descriptors
- DefaultEngine / DefaultGame / DefaultGameplayTags / DefaultInput highlights
- CoreRedirects (GAS* → RIR* rename evidence)
### Pending sections
- Per-map GameMode assignment (requires map World Settings / asset inspection without loading levels)
- Confirmation of which enabled engine plugins are referenced by live gameplay content
- OnlineSubsystem / Steam runtime configuration location
### Evidence still required
- Map asset tags / World Settings for `MainMenu`, `Test01`, `Dev_Island`, character-select maps
- Whether `NetworkPrediction` / `OnlineFramework` / `AbilitySystemGameFeatureActions` are used by project Blueprints or only enabled
### Tool or visibility limitations
- Cannot load levels; map GameMode must come from asset metadata / config
- Full enabled-plugin list is large; usage confirmation deferred to later batches
### Unknowns requiring later verification
- Where GameInstance class is configured (`GI_Dungeoneer` discovered via subclass search; not set in inspected DefaultEngine.ini)
- GlobalDefaultGameMode absent from DefaultEngine.ini — GameMode likely per-map
- No project OnlineSubsystem INI under `Config/`
---
## 1. Project descriptor
**Observed Implementation** — [`REALMSINRUIN_DEV.uproject`](REALMSINRUIN_DEV.uproject)
| Field | Value |
|-------|--------|
| EngineAssociation | `5.8` |
| Runtime module | `REALMSINRUIN` (Type Runtime, LoadingPhase Default) |
| Module AdditionalDependencies | `Engine`, `GameplayAbilities`, `CoreUObject`, `UMG` |
Enabled plugins declared in `.uproject` (non-exhaustive thematic groups):
- **Gameplay / online:** `GameplayAbilities`, `CommonUI`, `NetworkPrediction`, `OnlineFramework`, `AbilitySystemGameFeatureActions`
- **World / water:** `Landmass`, `Water`, `WaterExtras`, `Buoyancy`
- **Editor modeling:** `ModelingToolsEditorMode`, `SkeletalMeshModelingTools`, `StaticMeshEditorModeling`
- **MCP / toolsets:** `MCPClientToolset`, `ModelContextProtocol`, `AIModuleToolset`, `AllToolsets`, `GASToolsets`, `GameplayTagsToolset`, `GameFeaturesToolset`
- **Disabled in uproject:** `Cargo`, `FlatNodes`, `AutoSizeComments`
**Observed Implementation:** Project-local plugins `AdvancedSessions` and `AdvancedSteamSessions` are **not** listed in the `.uproject` Plugins array, but exist under `Plugins/` and are reported enabled by PluginToolset (see §3).
---
## 2. Modules and build
**Observed Implementation**
| Artifact | Path | Notes |
|----------|------|--------|
| Game target | [`Source/REALMSINRUIN.Target.cs`](Source/REALMSINRUIN.Target.cs) | `TargetType.Game`; `BuildSettingsVersion.V7`; `EngineIncludeOrderVersion.Unreal5_8`; ExtraModule `REALMSINRUIN` |
| Editor target | [`Source/REALMSINRUINEditor.Target.cs`](Source/REALMSINRUINEditor.Target.cs) | Same settings; `TargetType.Editor` |
| Module rules | [`Source/REALMSINRUIN/REALMSINRUIN.Build.cs`](Source/REALMSINRUIN/REALMSINRUIN.Build.cs) | Public deps: Core, CoreUObject, Engine, InputCore, EnhancedInput, GameplayAbilities, GameplayTags, GameplayTasks |
| Module startup | [`Source/REALMSINRUIN/REALMSINRUIN.cpp`](Source/REALMSINRUIN/REALMSINRUIN.cpp) | `IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, REALMSINRUIN, "REALMSINRUIN")` |
| Module header | [`Source/REALMSINRUIN/REALMSINRUIN.h`](Source/REALMSINRUIN/REALMSINRUIN.h) | Defines `CUSTOM_DEPTH_RED 250` (used by enemy highlight) |
**Observed Implementation:** `PrivateDependencyModuleNames` is empty. UMG is listed in `.uproject` AdditionalDependencies but **not** in Build.cs Public/Private dependencies. Native HUD/widget code includes UMG headers regardless.
**Inferred — Technical Debt:** Module may rely on transitive/engine linkage for UMG; Build.cs does not declare UMG or OnlineSubsystem (commented OnlineSubsystem line present).
**Observed Implementation:** There is a **single** project runtime module. No native GameMode, GameInstance, or GameState classes exist under `Source/REALMSINRUIN/`.
---
## 3. Plugins
### 3.1 Project-local plugins
**Observed Implementation** — PluginToolset `GetPluginInfo` / `ListEnabledPlugins`
| Plugin | Enabled | Descriptor | Depends on |
|--------|---------|------------|------------|
| AdvancedSessions | Yes | `Plugins/AdvancedSessions/AdvancedSessions.uplugin` (VersionName 5.8) | OnlineSubsystem, OnlineSubsystemUtils |
| AdvancedSteamSessions | Yes | `Plugins/AdvancedSteamSessions/AdvancedSteamSessions.uplugin` (VersionName 5.8) | AdvancedSessions, OnlineSubsystem, OnlineSubsystemSteam, OnlineSubsystemUtils, SteamShared |
AdvancedSessions Build.cs defines `WITH_ADVANCED_SESSIONS=1` and depends on OnlineSubsystem / Networking / Sockets.
AdvancedSteamSessions Build.cs defines `WITH_ADVANCED_STEAM_SESSIONS=1`; on Win64/Linux/Mac also depends on SteamShared, Steamworks, OnlineSubsystemSteam.
**Classification:** Foundational to multiplayer session UI flow (usage confirmation deferred to Batch 4 Pass 4). Do not recommend removal.
### 3.2 Foundational engine plugins (project-declared)
**Observed Implementation:** `GameplayAbilities` enabled — required by native ASC / AttributeSet / EffectActor / RIRGameplayAbility.
**Observed Implementation:** `EnhancedInput` enabled (also Build.cs dependency) — used by `ARIRPlayerController`.
**Observed Implementation:** `CommonUI` enabled in `.uproject`**usage unconfirmed** in native code (no CommonUI includes under `Source/REALMSINRUIN/`). **Issue:** Requires Manual Editor Inspection / Batch 4 UI pass.
### 3.3 Enabled but usage unconfirmed (sample)
From `.uproject` + ListEnabledPlugins: `NetworkPrediction`, `OnlineFramework`, `AbilitySystemGameFeatureActions`, Water stack, MCP toolset plugins. **Issue:** Defer usage confirmation; do not recommend disable.
---
## 4. Configuration
### 4.1 Maps ([`Config/DefaultEngine.ini`](Config/DefaultEngine.ini) `[/Script/EngineSettings.GameMapsSettings]`)
| Setting | Value | Evidence |
|---------|--------|----------|
| GameDefaultMap | `/Game/_Main/Levels/Maps/MainMenu.MainMenu` | Observed Implementation |
| EditorStartupMap | `/Game/_Main/Levels/Testing/Test01.Test01` | Observed Implementation |
**Unknown:** `GlobalDefaultGameMode` not present in this file.
### 4.2 CoreRedirects (GAS rename history)
**Observed Implementation**`[CoreRedirects]` in DefaultEngine.ini:
- `GASPlayerBase` / `GASBaseCharacter``RIRBaseCharacter`
- `GASBaseEnemy` / `GASEnemyCharacter` / `GASBaseEnemyCharacter``RIRBaseEnemyCharacter`
- `GASPlayerState``RIRPlayerState`
- `GASPlayerController``RIRPlayerController`
- `GASPlayerCharacter``RIRPlayerCharacter`
- `EffectActor``RIREffectActor`
**Documented Intent / Incomplete Refactor:** Class names were renamed from a GAS-* prefix to RIR-*; redirects preserve asset compatibility.
### 4.3 Gameplay Tags ([`Config/DefaultGameplayTags.ini`](Config/DefaultGameplayTags.ini))
Project tags (Observed Implementation, with DevComment Documented Intent):
- State: `State.Dead`, `State.Stunned`, `State.Blocking`, `State.Casting`
- Disable: `Disable.Movement`, `Disable.Input`, `Disable.Attack`, `Disable.Ability`
- Effect: `Effect.Damage`, `Effect.Heal`, `Effect.Buff`, `Effect.Debuff`
FastReplication=False.
### 4.4 Input ([`Config/DefaultInput.ini`](Config/DefaultInput.ini))
**Observed Implementation:**
- `DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput`
- `DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent`
- Legacy ActionMappings: Jump (SpaceBar / Gamepad)
- Legacy AxisMappings: Move Forward/Backward, Move Right/Left, Look, Turn
**Inferred:** Dual input stack (Enhanced Input defaults + legacy mappings). Ability input bindings not present in this INI — likely Blueprint / IMC assets (Batch 2+).
### 4.5 DefaultGame.ini
**Observed Implementation:** ProjectID, CopyrightNotice; empty `[/Script/GameplayAbilitiesEditor.GameplayEffectCreationMenu]` section.
### 4.6 Networking / online
**Unknown:** No `OnlineSubsystem` / Steam / NetDriver sections found under `Config/` via text search. OnlineFramework and OnlineSubsystem* appear enabled via plugins. Location of Steam AppId / OSS config **Requires Manual Editor Inspection** or Engine/default config outside inspected files.
---
## 5. Engine vs project boundaries
| Layer | Responsibility (Batch 1 evidence) |
|-------|-----------------------------------|
| Engine plugins | GAS, Enhanced Input, CommonUI, Water, OnlineSubsystem*, MCP toolsets |
| Project plugins | AdvancedSessions, AdvancedSteamSessions |
| Project module REALMSINRUIN | Character/Player/ASC/AttributeSet/EffectActor/HUD/WidgetController scaffolding |
| Project Blueprints (seeds only) | GI_Dungeoneer, GM_Dungeoneer, GM_MainMenu, player/enemy BPs, widgets, GEs |
---
## 6. Issue classifications (Batch 1)
| Finding | Classification |
|---------|----------------|
| GAS* → RIR* CoreRedirects | Incomplete Refactor |
| AdvancedSessions not listed in `.uproject` but enabled | Intended Behavior (project plugin discovery) — confirm |
| UMG used without Build.cs dependency | Technical Debt |
| No OnlineSubsystem INI in Config/ | Unknown / Requires Manual Editor Inspection |
| CommonUI enabled, unused in native | Requires Manual Editor Inspection |
| GlobalDefaultGameMode absent | Unknown until map inspection |
No findings classified as Runtime Regression (UE 5.8 migration).
@@ -0,0 +1,322 @@
# 03 — Class Hierarchy
**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).
- **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.
- **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)
## 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
### Pending sections
- Blueprint parent chains, variables, graphs, interfaces on children
- GameMode / GameInstance Blueprint internals
- Whether DefaultAttributesGameplayEffect is assigned on BP_PlayerState
### 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)
---
## Hierarchy overview
```mermaid
flowchart TD
ACharacter[ACharacter] --> ARIRBaseCharacter
IASI[IAbilitySystemInterface] --> ARIRBaseCharacter
ARIRBaseCharacter --> ARIRPlayerCharacter
ARIRBaseCharacter --> ARIRBaseEnemyCharacter
ITarget[ITargetInterface] --> ARIRBaseEnemyCharacter
APlayerState --> ARIRPlayerState
IASI --> ARIRPlayerState
APlayerController --> ARIRPlayerController
AHUD --> ARIRHUD
UAbilitySystemComponent --> URIRAbilitySystemComponent
UAttributeSet --> URIRAttributeSet
UGameplayAbility --> URIRGameplayAbility
AActor --> ARIREffectActor
UUserWidget --> URIRUserWidget
UObject --> URIRWidgetController
URIRWidgetController --> UOverlayWidgetController
```
**Observed Implementation:** No native `AGameMode`, `UGameInstance`, or `AGameState` subclasses in the module.
---
## 1. Characters
### 1.1 `ARIRBaseCharacter` (ABSTRACT)
| | |
|--|--|
| 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` |
**Properties (Observed Implementation):**
- `TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent` — VisibleAnywhere, BlueprintReadOnly, Category Abilities
- `TObjectPtr<UAttributeSet> AttributeSet` — same
**Functions:**
- `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"
**Documented Intent:** Comment on class: "Base Character class using GAS for RIR Project."
**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.
**RPCs / replication:** None declared on this class.
**Blueprint children (seed):** See §1.2 / calibration — via `ARIRPlayerCharacter` and `ARIRBaseEnemyCharacter` lineages.
---
### 1.2 `ARIRPlayerCharacter`
| | |
|--|--|
| Header | [`Public/Player/RIRPlayerCharacter.h`](Source/REALMSINRUIN/Public/Player/RIRPlayerCharacter.h) |
| Impl | [`Private/Player/RIRPlayerCharacter.cpp`](Source/REALMSINRUIN/Private/Player/RIRPlayerCharacter.cpp) |
| Parent | `ARIRBaseCharacter` |
**Observed Implementation:**
- 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`
---
### 1.3 `ARIRBaseEnemyCharacter`
| | |
|--|--|
| 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` |
**Observed Implementation — constructor:**
- Mesh Visibility channel → Block
- Creates `URIRAbilitySystemComponent` on self; `SetIsReplicated(true)`; `SetReplicationMode(Minimal)`
- Creates `URIRAttributeSet` on self
**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`.
---
## 2. Player framework
### 2.1 `ARIRPlayerState`
| | |
|--|--|
| 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` |
**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.
---
### 2.2 `ARIRPlayerController`
| | |
|--|--|
| Header | [`Public/Player/RIRPlayerController.h`](Source/REALMSINRUIN/Public/Player/RIRPlayerController.h) |
| Impl | [`Private/Player/RIRPlayerController.cpp`](Source/REALMSINRUIN/Private/Player/RIRPlayerController.cpp) |
| Parent | `APlayerController` |
**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`
---
### 2.3 `ARIRHUD`
| | |
|--|--|
| 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` |
**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.
---
## 3. GAS scaffolding
### 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).
---
## Contradictions
| 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`.
@@ -0,0 +1,90 @@
# 06 — Partial GAS Architecture
**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.
- **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
## Draft tracking
### Completed sections
- ASC ownership split (player PlayerState vs enemy character)
- Replication modes
- Actor-info initialization
- Attribute inventory + constructor defaults
- URIRGameplayAbility empty + no subclasses
- EffectActor ApplyEffectToTarget mechanism
- Project gameplay tags from config
### Pending sections
- Default attribute GE CDO modifiers per character
- 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
---
## Distinctions (Batch 1)
| 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 |
---
## Ownership and init
**Player (Observed Implementation):**
- ASC + AttributeSet created on `ARIRPlayerState`
- ReplicationMode **Mixed**; NetUpdateFrequency 100
- `ARIRPlayerCharacter::InitAbilityActorInfo`: Owner=PlayerState, Avatar=Character; called from PossessedBy and OnRep_PlayerState
**Enemy (Observed Implementation):**
- ASC + AttributeSet created on `ARIRBaseEnemyCharacter`
- ReplicationMode **Minimal**
- BeginPlay: InitAbilityActorInfo(this, this)
**Interface contradiction:** `ARIRBaseCharacter::GetAbilitySystemComponent` always uses PlayerState — enemies may not expose ASC through `IAbilitySystemInterface` / `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent`. **Issue:** Incomplete Refactor; **Requires Runtime Inspection**.
---
## Attributes
`URIRAttributeSet`: Health, MaxHealth, Mana, MaxMana, Stamina, MaxStamina — all replicated with OnRep notify.
Constructor inits Health/MaxHealth/Mana/MaxMana only; Stamina/MaxStamina not Init'd in native.
`DefaultAttributesGameplayEffect` on PlayerState: declared, **not applied in native**.
---
## 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.
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.
---
## Effects
`ARIREffectActor::ApplyEffectToTarget` applies Instant/Duration class via ASC MakeOutgoingSpec + ApplyGameplayEffectSpecToSelf. Overlap/authority logic expected in Blueprint children (Batch 4 Pass 10 / doc 12).
@@ -0,0 +1,50 @@
# 08 — Character Systems
**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.
- **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)
## Draft tracking
### Completed sections
- Native parent chain for players
- InitAbilityActorInfo / HUD overlay hook
- Exact Blueprint subclass paths for five playable classes + base
### Pending sections
- Components, weapons, AnimBP, inputs, abilities per character
- Shared vs duplicated Blueprint behavior
- Interface BPI_PlayerCharacter
### Evidence still required
- Full Blueprint variable/graph inventory (Batch 2+)
---
## Native player chain
`ACharacter``ARIRBaseCharacter``ARIRPlayerCharacter` → (Blueprint) `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.
---
## Playable Blueprint paths (seeds)
| 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` |
**Naming note:** Use `Player_Amazonian`, not `Player_Amazon`. Default-attribute GE folder uses `Amazon` naming (calibration) — naming ambiguity for Batch 4/7.
**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.
@@ -0,0 +1,45 @@
# 09 — Enemy AI Static Analysis
**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.
- **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 9
## Draft tracking
### Completed sections
- Native enemy ASC ownership and highlight interface
- Confirmation: no chase/attack/MoveTo in native C++
- Blueprint child paths
### Pending sections
- BP_EnemyCharacterBase / BP_Enemy_Skeleton graphs (Tick, overlaps, MoveTo, timers)
- AIControllerClass / AutoPossessAI on CDOs
- Reconfirm BT asset absence
### Evidence still required
- Where chase/attack was intended to live (Blueprint vs missing)
- Runtime root cause of nonfunctional chase/attack — Requires Runtime Inspection
---
## Native findings
**Observed Implementation:** `ARIRBaseEnemyCharacter` implements:
- ASC + AttributeSet on self (Minimal replication)
- InitAbilityActorInfo(this, this) in BeginPlay
- ITargetInterface highlight via custom depth
- Visibility collision on mesh
**Observed Implementation:** No AIController subclass, no MoveTo, no perception, no attack timers in native.
**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.
**Blueprint seeds:** `BP_EnemyCharacterBase`, `BP_Enemy_Skeleton`.
@@ -0,0 +1,50 @@
# 11 — UI, HUD, and Sessions
**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.
- **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 Passes 4 + 10
## Draft tracking
### Completed sections
- InitOverlay call chain from player InitAbilityActorInfo
- OverlayWidgetController attribute broadcasts/bindings
- AdvancedSessions / AdvancedSteamSessions enabled + descriptor paths
- Widget subclass path seeds
### Pending sections
- Main menu / browser / character-select widget flow
- Production vs Example Advanced Sessions Blueprints
- WBP_Overlay / progress bar bindings
- CommonUI usage
### Evidence still required
- Whether HUD class defaults assign OverlayWidgetClass / ControllerClass
- Session create/find/join graphs
---
## HUD init (Observed Implementation)
`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.
**Subclass seeds:** `WBP_Overlay`, health/mana progress bars, `BP_OverlayWidgetController`.
**Technical Debt:** Stamina delegates reuse Mana signature types in OverlayWidgetController.h.
---
## Sessions (Observed Implementation)
Project plugins AdvancedSessions + AdvancedSteamSessions enabled (VersionName 5.8). Depend on OnlineSubsystem / Steam stack.
**Unknown:** Live menu usage vs `/Game/_Main/Blueprints/Examples/ExampleAdvancedSessionsFunctionsChar` — Batch 4 Pass 4.
**Unknown:** No OnlineSubsystem INI under project `Config/` — Requires Broader Filesystem/Configuration Inspection.
@@ -0,0 +1,49 @@
# 12 — Pickups and Effects
**Status: Draft**
- **Scope (Batch 1 seed):** Native `ARIREffectActor` mechanism + discovered Blueprint subclass paths. No overlap/authority graph inspection yet.
- **Inspection method:** Native C++ + search_subclasses.
- **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 10
## Draft tracking
### Completed sections
- ApplyEffectToTarget GE application path
- Instant/Duration GE class properties
- Blueprint child paths for potions / orange slice / mana crystal
### Pending sections
- Per-pickup overlap, authority, destroy/respawn, UI notify
- Classification: GE vs direct DEPRECATED var mutation vs hybrid
- Gold / stamina pickups if present
### Evidence still required
- Connected Blueprint graphs on each item BP
- Whether `GetAbilitySystemComponent` succeeds on player vs enemy targets
---
## Native mechanism (Observed Implementation)
`ARIREffectActor::ApplyEffectToTarget`:
1. `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor)`
2. Early-out if null
3. MakeOutgoingSpec(GEClass, 1.f) + ApplyGameplayEffectSpecToSelf
**Inferred:** Intended pickup path is **Gameplay Effect** based for subclasses of this actor. Confirmation requires Blueprint graphs.
**Blueprint subclass seeds:**
| Asset |
|-------|
| `/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` |
Calibration also listed GE assets such as `GE_PotionHeal`, `GE_PotionMana`, `GE_HoT_Small`, `GE_MoT_Small` under `/Game/_Main/Blueprints/Game/GameSystems/GAS/GameplayEffects/`.
@@ -0,0 +1,143 @@
# 13 — Unknowns and Runtime Questions
**Status: Draft**
- **Scope:** Unresolved questions and verification requirements identified during Batch 1 (Passes 02). 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.
- **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.
- **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
## 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
### Pending sections
- Ability, RPC, animation, frontend, session, enemy Blueprint, UI, and pickup unknowns from Batches 24
- Runtime test procedures to be finalized after static Blueprint archaeology
- Priority updates after the ability migration matrix is complete
### Evidence still required
- 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
- 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
---
## 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`.
---
## Requires Blueprint inspection
| 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 |
---
## 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 |
---
## 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.
---
## 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 |
---
## 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. |
---
## 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 |
---
## 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. |
---
## 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.
@@ -0,0 +1,43 @@
# 14 — Evidence Index
**Status: Draft**
- **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)
- **Next pass expected to contribute:** Every batch
## Draft tracking
### Completed sections
- Batch 1 evidence rows (modules, native hierarchy, GAS ownership, plugins, config)
### Pending sections
- Blueprint graph/RPC/ability rows (Batch 2+)
---
| 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 | 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 | — |
@@ -0,0 +1,153 @@
# 15 — Handoff Status
**Status: Draft**
- **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)
## 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 |
| Date completed | 2026-07-16 |
| Model identifier | Cursor Grok 4.5 |
---
## Repository integrity
### Starting state (Pass 0)
- **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).
### 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.
---
## Areas fully inspected (Batch 1 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
## 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)
## 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)
---
## Blueprints inspected
None in depth. **Path seeds only** recorded in 03/08/09/11/12.
## C++ classes inspected
ARIRBaseCharacter, ARIRPlayerCharacter, ARIRBaseEnemyCharacter, ARIRPlayerState, ARIRPlayerController, ARIRHUD, URIRAbilitySystemComponent, URIRAttributeSet, URIRGameplayAbility, ARIREffectActor, URIRUserWidget, URIRWidgetController, UOverlayWidgetController, ITargetInterface / UTargetInterface; module REALMSINRUIN.h/cpp.
## Assets / configs inspected
Listed in §Areas fully inspected. No Unreal assets modified or saved.
## Files created
| File | Status |
|------|--------|
| Documentation/Archaeology/02-ProjectArchitecture.md | Draft |
| Documentation/Archaeology/03-ClassHierarchy.md | Draft |
| 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.**
## Toolsets used
EditorAppToolset (IsPIERunning, GetSelectedActors); SceneTools (get_current_level); PluginToolset (ListEnabledPlugins, GetPluginInfo); ObjectTools (search_subclasses); filesystem reads of Source/Config/Plugins.
## 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
## 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?).
## Unresolved naming ambiguities
- `Player_Amazonian` vs GE `Amazon` folder naming
- `WBP_PlayerHUD` returned as RIRHUD subclass
## Requires Manual Editor Inspection
- OnlineSubsystem/Steam config location
- Confirm WBP_PlayerHUD asset type
- CommonUI content usage
## Requires Runtime Inspection / PIE
- Enemy GetASC / EffectActor apply
- Default attribute values after spawn
- HUD overlay creation success
- Session flows (later)
## Suggested next bounded task
**Authorize Batch 2 only:**
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.
**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.
## 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