Document Batch 4B Pass 7 partial GAS archaeology: effects, tags, and legacy boundaries.
Inventories Gameplay Effects, orphan default attributes, missing abilities/cues, and consumable EffectActor wiring without modifying Unreal assets. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,116 +2,256 @@
|
||||
|
||||
**Status: Draft**
|
||||
|
||||
- **Scope:** Native GAS scaffolding (Batch 1) plus Batch 2 Blueprint seeds: BP_PlayerState defaults, legacy ability confirmation, dual HUD attribute paths.
|
||||
- **Inspection method:** Native C++ read; Batch 2 ObjectTools on `BP_PlayerState` CDO; BlueprintTools on `BP_PlayerCharacterBase` for ASC/GA absence in ability graphs.
|
||||
- **Scope:** Complete static archaeology of partial GAS: ASC ownership, AttributeSet, Gameplay Effects, tags, cues, grant/activation absence, EffectActor boundary, legacy/GAS resource conflict, enemy ASC accessor defect.
|
||||
- **Inspection method:** Native C++ read of all GAS-related Source/REALMSINRUIN files; AssetTools find/deps/refs; ObjectTools CDO properties / search_subclasses; BlueprintTools EventGraph DSL on consumable BPs; GameplayTagsToolset (read-only); prior Pass 5–8 ability/anim negative GAS results.
|
||||
- **Evidence classifications used:** Observed Implementation, Documented Intent, Observed Runtime Behavior, Inferred, Unknown.
|
||||
- **Tool or visibility limitations:** `GameplayEffectComponents` array unreadable via ObjectTools (cues/component tags Unknown on GE CDOs); BlueprintGeneratedClass CDO sometimes rejects duration/modifier property names depending on load path — modifiers recovered via successful GE CDO queries on Default__ / generated class where available; no PIE.
|
||||
- **Last updated:** 2026-07-16
|
||||
- **Current phase:** Phase 1 — Static Architecture
|
||||
- **Last completed pass:** Pass 6 (Batch 3)
|
||||
- **Next pass expected to contribute:** Batch 4 Pass 7 (GE/cue inventory)
|
||||
- **Last completed pass:** Pass 7 (Batch 4B)
|
||||
- **Next pass expected to contribute:** Pass 9 (enemy) / Pass 10 (pickup graphs deep) / Pass 4 when authorized — not auto-started
|
||||
|
||||
## 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
|
||||
- **BP_PlayerState `DefaultAttributesGameplayEffect` = None** (Pass 3)
|
||||
- Confirmation: abilities remain legacy BP `Server_Ability_*` (Pass 5–6 / doc 05)
|
||||
- **Pass 6:** No ASC activate/grant/GameplayEffect apply in any connected ability path on five playables
|
||||
- ASC ownership + replication + InitAbilityActorInfo
|
||||
- AttributeSet inventory, replication, constructor defaults, absence of PostGameplayEffectExecute
|
||||
- Full project GE inventory (8 assets) with modifiers / duration / referencers
|
||||
- Default-attribute GE matrix + orphan status
|
||||
- Tag inventory from DefaultGameplayTags.ini + referencer status
|
||||
- Gameplay Ability / grant / activation negative searches
|
||||
- Gameplay Cue negative inventory
|
||||
- EffectActor + consumable BP wiring
|
||||
- Dual HUD path + stamina delegate type debt
|
||||
- Legacy vs GAS boundary table
|
||||
- Enemy ASC compatibility table
|
||||
- Subsystem status matrix
|
||||
|
||||
### Pending sections
|
||||
- Default attribute GE CDO modifiers per character (Pass 7)
|
||||
- Gameplay Cue inventory
|
||||
- Tag referencers
|
||||
- Runtime ASC state (PIE-gated)
|
||||
- Runtime ASC attribute values after spawn (PIE)
|
||||
- Whether potion ApplyEffect succeeds on listen-server/client authority variants
|
||||
- Full WBP_Overlay bar binding node walk (beyond native controller)
|
||||
|
||||
### Evidence still required
|
||||
- Whether any other actor/BP applies default-attribute GEs at spawn
|
||||
- Whether OverlayWidgetController path and DEPRECATED HUD path both run in PIE
|
||||
- Full GE asset inventory and referencer map (Pass 7)
|
||||
- PIE: dual HUD coexistence; spawn Health/Mana vs native Init values
|
||||
- PIE: EffectActor vs enemy GetASC null early-out impact
|
||||
- Manual Editor: GE GameplayEffectComponents / cue slots if any
|
||||
|
||||
---
|
||||
|
||||
## Distinctions
|
||||
## 1. GAS subsystem status matrix
|
||||
|
||||
| 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; no GA assets; base EventGraph has no ASC activate |
|
||||
| Legacy BP abilities | **Documented (Batch 2)** | `05-LegacyAbilityArchitecture.md`: IA → Server_Ability_* → Multicast montage |
|
||||
| Subsystem | Status | Exact implementation | Active reference path | Conflict or gap | Evidence |
|
||||
|---|---|---|---|---|---|
|
||||
| Player ASC ownership | **Active** | `ARIRPlayerState` creates `URIRAbilitySystemComponent`; Mixed replication | Character caches ASC from PlayerState in `InitAbilityActorInfo` | None for players | RIRPlayerState.cpp |
|
||||
| Enemy ASC ownership | **Active** (component) | `ARIRBaseEnemyCharacter` creates ASC + AttributeSet; Minimal replication; `InitAbilityActorInfo(this,this)` in BeginPlay | Direct component on enemy | Conflicts with interface GetASC | RIRBaseEnemyCharacter.cpp |
|
||||
| Actor-info initialization | **Active** | Player: PossessedBy + OnRep_PlayerState; Enemy: BeginPlay | Observed Implementation | — | RIRPlayerCharacter.cpp; RIRBaseEnemyCharacter.cpp |
|
||||
| AttributeSet replication | **Active** | All six attrs DOREPLIFETIME + OnRep | Overlay binds change delegates | Stamina/MaxStamina not Init'd in ctor | RIRAttributeSet.cpp |
|
||||
| Default attribute initialization | **Scaffolding Only / Present but Unreferenced** | Property `DefaultAttributesGameplayEffect` on PlayerState; four character GE assets | **None** — BP_PlayerState = None; GE_*_DefaultAttributes referencers [] | Spawn uses native InitHealth/Mana only | ObjectTools; get_referencers |
|
||||
| Runtime attribute modification | **Partially Integrated** | Consumable GEs via EffectActor ApplyGameplayEffectSpecToSelf | Potion/food overlap → ApplyEffectToTarget | Abilities use ApplyDamage / DEPRECATED floats, not GE | BP_HealthPotion DSL; Pass 5–6 |
|
||||
| Gameplay Ability classes | **Scaffolding Only** | `URIRGameplayAbility` InstancedPerActor only | No project subclass beyond engine jump/montage | No discrete GA assets (`GA_` find = []) | search_subclasses; find_assets |
|
||||
| Ability granting | **Missing** | No GiveAbility / StartupAbilities / AbilitySet | None observed | — | Source grep; find_assets; BP find_nodes |
|
||||
| Ability activation | **Missing** | No TryActivateAbility in native or playable ability graphs | Legacy `Server_Ability_*` instead | — | Pass 5–6; Pass 7 searches |
|
||||
| Ability costs / cooldowns | **Missing** | No GA cost/cooldown classes | Mana cost is DEPRECATED float + FCanUseMana | — | Pass 6 |
|
||||
| Gameplay Effects | **Partially Integrated** | 8 GE BPs under GAS/GameplayEffects | 4 consumable GEs assigned + applied; 4 default GEs orphaned | No Max* on default GEs; no Gunslinger GE | Pass 7 inventory |
|
||||
| Gameplay Tags | **Present but Unreferenced** | 12 tags in DefaultGameplayTags.ini | Zero native string refs; zero asset referencers observed | Tags unused by GEs (legacy containers empty) | Config; Source grep; tag tool |
|
||||
| Gameplay Cues | **Missing** | No project cue notify assets; no GC_ assets; no GameplayCue.* project tags beyond Test orphan | None observed | SoundCue `*_Cue` assets are audio, not GAS | find_assets; search_subclasses |
|
||||
| Attribute-driven UI | **Active but Unverified** | InitOverlay → OverlayWidgetController broadcasts + binds | WBP_Overlay via WBP_PlayerHUD | Dual path with DEPRECATED HUD; stamina delegates wrong type alias | RIRHUD.cpp; OverlayWidgetController.h |
|
||||
| Legacy-resource synchronization | **Missing** | No mirror code between ASC attrs and DEPRECATED_* | Both UI paths independent | Static divergence possible | Pass 5–7 |
|
||||
| Enemy effect compatibility | **Partially Integrated / Existing Baseline Defect** | Enemy owns ASC; EffectActor uses `GetAbilitySystemComponent` via interface | Interface GetASC → PlayerState → **nullptr on enemies** | Pickups/effects may skip enemies | RIRBaseCharacter.cpp; RIREffectActor.cpp |
|
||||
|
||||
---
|
||||
|
||||
## Ownership and init
|
||||
## 2. Gameplay Effect inventory
|
||||
|
||||
All under `/Game/_Main/Blueprints/Game/GameSystems/GAS/GameplayEffects/`. Attribute owner: `URIRAttributeSet`. Magnitude type: ScalableFloat. StackingType: None / StackLimitCount 0 where read. Cues: **Unknown — GameplayEffectComponents unreadable**; no GC_ assets exist. Granted INI tags: not observed on readable legacy tag containers (empty).
|
||||
|
||||
| Effect | Duration | Modifiers | Tags | Cues | Referencers | Application path | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| `GE_PotionHeal` | Instant | Health AddBase **25** | Empty (legacy containers) | Unknown — Tool Limitation | `BP_HealthPotion` | Overlap → ApplyEffectToTarget(Instant) → DestroyActor | **Active** (static path) | CDO + DSL |
|
||||
| `GE_PotionMana` | Instant | Mana AddBase **30** | Empty | Unknown | `BP_ManaPotion` | Same Instant pattern | **Active** (static path) | CDO + refs |
|
||||
| `GE_HoT_Small` | HasDuration **1s**, Period **0.1** | Health AddBase **0.5**/tick | Empty | Unknown | `BP_OrangeSlice` | Overlap → ApplyEffectToTarget(Duration) → Destroy | **Active** (static path) | CDO + refs |
|
||||
| `GE_MoT_Small` | HasDuration **1s**, Period **0.1** | Mana AddBase **0.25**/tick | Empty | Unknown | `BP_ManaCrystal` | Same Duration pattern | **Active** (static path) | CDO + refs |
|
||||
| `GE_Paladin_DefaultAttributes` | Instant | Health Override **100**; Mana Override **100** | Empty | Unknown | **[]** | None | **Present but Unreferenced** | get_referencers |
|
||||
| `GE_Amazon_DefaultAttributes` | Instant | Health Override **100**; Stamina Override **100** | Empty | Unknown | **[]** | None | **Present but Unreferenced** | get_referencers |
|
||||
| `GE_Cleric_DefaultAttributes` | Instant | Health Override **50**; Mana Override **200** | Empty | Unknown | **[]** | None | **Present but Unreferenced** | get_referencers |
|
||||
| `GE_Wizard_DefaultAttributes` | Instant | Health Override **100**; Mana Override **150** | Empty | Unknown | **[]** | None | **Present but Unreferenced** | get_referencers |
|
||||
|
||||
**None observed:** GE_Gunslinger_*; SetByCaller; MMC; ExecutionCalculation project subclasses (engine base only); overflow/expiration GE chains (not read / not present in modifiers).
|
||||
|
||||
**Folder inventory:** `find_assets` recursive on `/Game/_Main/Blueprints/Game/GameSystems/GAS` returned exactly these 8 assets — Observed Implementation (complete folder set).
|
||||
|
||||
---
|
||||
|
||||
## 3. Default attribute matrix
|
||||
|
||||
| Character | Effect | Health | MaxHealth | Mana | MaxMana | Stamina | MaxStamina | Assigned at | Applied at | Reachability |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| Paladin | `.../Paladin/GE_Paladin_DefaultAttributes` | Override 100 | Not modified | Override 100 | Not modified | Not modified | Not modified | **None** | **None** | Unreachable |
|
||||
| Amazonian | `.../Amazon/GE_Amazon_DefaultAttributes` (folder **Amazon**, not Amazonian) | Override 100 | Not modified | Not modified | Not modified | Override 100 | Not modified | **None** | **None** | Unreachable |
|
||||
| Cleric | `.../Cleric/GE_Cleric_DefaultAttributes` | Override 50 | Not modified | Override 200 | Not modified | Not modified | Not modified | **None** | **None** | Unreachable |
|
||||
| Wizard | `.../Wizard/GE_Wizard_DefaultAttributes` | Override 100 | Not modified | Override 150 | Not modified | Not modified | Not modified | **None** | **None** | Unreachable |
|
||||
| Gunslinger | **None observed** | — | — | — | — | — | — | — | — | Missing |
|
||||
| All (PlayerState) | Property only | — | — | — | — | — | — | `BP_PlayerState.defaultAttributesGameplayEffect` = **None** | Native never applies | Unreachable |
|
||||
|
||||
**Native spawn fallback (Observed Implementation):** `URIRAttributeSet` ctor `InitHealth(75)`, `InitMaxHealth(100)`, `InitMana(25)`, `InitMaxMana(50)`; Stamina/MaxStamina **not** Init'd.
|
||||
|
||||
**Naming inconsistency:** Amazon GE folder/asset uses `Amazon`; playable Blueprint is `Player_Amazonian` — Documented Intent / Technical Debt.
|
||||
|
||||
---
|
||||
|
||||
## 4. Attribute architecture matrix
|
||||
|
||||
| Attribute | Native default | Replication | GE modifiers | UI binding | Blueprint reads/writes | Legacy equivalent | Synchronization | Status |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| Health | Init 75 | Replicated + OnRep | Potion +25; HoT +0.5/0.1s; default Override orphaned | OnHealthChanged | Ability graphs: **none** (use DEPRECATED) | DEPRECATED_CurrentHealth | **None observed** | Dual sources |
|
||||
| MaxHealth | Init 100 | Replicated + OnRep | **None** on any GE | OnMaxHealthChanged | None in abilities | DEPRECATED_MaxHealth | None | Partially Integrated |
|
||||
| Mana | Init 25 | Replicated + OnRep | Potion +30; MoT +0.25/0.1s; default Override orphaned | OnManaChanged | Abilities use DEPRECATED mana | DEPRECATED_Mana / costs | None | Dual sources |
|
||||
| MaxMana | Init 50 | Replicated + OnRep | **None** on any GE | OnMaxManaChanged | None | DEPRECATED_MaxMana | None | Partially Integrated |
|
||||
| Stamina | **Not Init'd** | Replicated + OnRep | Amazon default Override 100 (orphaned) | OnStaminaChanged (**typed as FOnManaChangedSignature**) | None | **None observed** | None | Scaffolding / Technical Debt |
|
||||
| MaxStamina | **Not Init'd** | Replicated + OnRep | **None** | OnMaxStaminaChanged (**typed as FOnMaxManaChangedSignature**) | None | None | None | Scaffolding / Technical Debt |
|
||||
|
||||
**No PostGameplayEffectExecute / PreAttributeChange** on `URIRAttributeSet` — no clamp-to-max or death-from-attribute logic in native AttributeSet — Observed Implementation (absence).
|
||||
|
||||
---
|
||||
|
||||
## 5. Gameplay Tag inventory
|
||||
|
||||
Defined in `Config/DefaultGameplayTags.ini` (ImportTagsFromConfig=True).
|
||||
|
||||
| Tag | Defined at | Native references | Blueprint references | GE/GA references | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|
|
||||
| State.Dead | DefaultGameplayTags.ini L12 | None observed | None observed | None observed | Present but Unreferenced | Source string search; tag referencer search |
|
||||
| State.Stunned | L13 | None | None | None | Present but Unreferenced | same |
|
||||
| State.Blocking | L14 | None | None | None | Present but Unreferenced | same |
|
||||
| State.Casting | L15 | None | None | None | Present but Unreferenced | same |
|
||||
| Disable.Movement | L17 | None | None | None | Present but Unreferenced | same |
|
||||
| Disable.Input | L18 | None | None | None | Present but Unreferenced | same |
|
||||
| Disable.Attack | L19 | None | None | None | Present but Unreferenced | same |
|
||||
| Disable.Ability | L20 | None | None | None | Present but Unreferenced | same |
|
||||
| Effect.Damage | L22 | None | None | None | Present but Unreferenced | same |
|
||||
| Effect.Heal | L23 | None | None | None | Present but Unreferenced | same |
|
||||
| Effect.Buff | L24 | None | None | None | Present but Unreferenced | same |
|
||||
| Effect.Debuff | L25 | None | None | None | Present but Unreferenced | same |
|
||||
|
||||
**Documented Intent** (DevComment strings in INI) describes intended roles; **no Observed Implementation** of add/query/grant usage.
|
||||
|
||||
**GameplayCue.Test:** reported as lone cue tag orphan by GameplayCueToolset — Present but Unreferenced; no project notify.
|
||||
|
||||
---
|
||||
|
||||
## 6. Gameplay Ability and grant inventory
|
||||
|
||||
| Ability or grant mechanism | Asset/symbol | Grant path | Activation path | Cost/cooldown | Reachability | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| URIRGameplayAbility | `Source/.../RIRGameplayAbility.*` | None | None | None | Scaffolding only | Scaffolding Only | InstancedPerActor ctor only |
|
||||
| UGameplayAbility subclasses (project) | search_subclasses → only engine Jump/Montage + URIRGameplayAbility | None | None | — | No project GA BP | Missing | search_subclasses |
|
||||
| GA_* assets | find_assets `/Game` name GA_ | — | — | — | **[]** | Missing | find_assets |
|
||||
| AbilitySet / StartupAbilities | find_assets | — | — | — | **[]** | Missing | find_assets |
|
||||
| GiveAbility / TryActivateAbility | Source + BP_PlayerCharacterBase | — | — | — | None observed | Missing | grep; find_nodes |
|
||||
| DefaultAttributesGameplayEffect apply | ARIRPlayerState property | Never called in native | — | — | BP = None | Scaffolding Only | RIRPlayerState.h; CDO |
|
||||
| Legacy Server_Ability_* | BP events | N/A (not GAS) | Enhanced Input | DEPRECATED mana | Active (legacy) | See doc 05 | Pass 5–6 |
|
||||
|
||||
**Conclusion (Observed Implementation):** No project-defined Gameplay Ability implementation or static grant path was observed within the inspected project scope. This does not prove GAS can never activate at runtime.
|
||||
|
||||
---
|
||||
|
||||
## 7. Gameplay Cue inventory
|
||||
|
||||
| Cue | Type | Trigger | Referencers | Reachability | Status | Evidence |
|
||||
|---|---|---|---|---|---|---|
|
||||
| None observed (project) | — | — | — | — | **Missing** | find_assets GC_/GameplayCue; search_subclasses cue notifies → engine-only |
|
||||
| GameplayCue.Test | Tag only | None | None | Unreachable | Present but Unreferenced | GameplayCueToolset |
|
||||
| `*_Cue` SoundCue assets (e.g. MagicSpell_01_Cue) | USoundCue audio | Multicast_PlaySFX | Ability graphs | Active as **audio**, not GAS cue | Not GAS | Pass 6–8 |
|
||||
|
||||
---
|
||||
|
||||
## 8. Legacy / GAS boundary table
|
||||
|
||||
| System | Legacy path | GAS path | Synchronization | Current source of truth | Conflict | Runtime question |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Health combat damage | ApplyDamage + DEPRECATED_CurrentHealth (Amazonian AnyDamage) | Attribute Health via GE (potions only) | None | **Legacy for combat**; GAS for potions | Dual health pools possible | Does potion heal update combat death? |
|
||||
| Mana ability cost | DEPRECATED_*ManaCost + FCanUseMana | Attribute Mana via GE potions | None | **Legacy for abilities** | Potion mana may not affect ability costs | PIE both meters |
|
||||
| HUD bars | Server_UpdateHUD → UpdatePlayerHUD (DEPRECATED %) | InitOverlay → OverlayWidgetController ASC delegates | None | **Both connected** | Dual UI | Which bars visible? |
|
||||
| Healing | DEPRECATED_RecoverPlayerHealth (Cleric) | GE_PotionHeal / HoT | None | Both | Inconsistent heal systems | — |
|
||||
| Death | PlayerDeath / IsDead bool | State.Dead tag unused; no attr death | None | Legacy | Tag unused | — |
|
||||
| Blocking | IsBlocking bool + ABP | State.Blocking unused | None | Legacy | Tag unused | — |
|
||||
| Default spawn attrs | Native Init* only | Orphan default GEs | N/A | Native Init 75/100/25/50 | Orphan character GEs unused | Spawn values in PIE |
|
||||
|
||||
---
|
||||
|
||||
## 9. Enemy GAS compatibility table
|
||||
|
||||
| Consumer | Lookup method | Expected ASC owner | Static result | Potential impact | Runtime verification |
|
||||
|---|---|---|---|---|---|
|
||||
| `IAbilitySystemInterface` / `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent` | `ARIRBaseCharacter::GetAbilitySystemComponent` → `GetPlayerState<ARIRPlayerState>()` | Enemy self ASC | **nullptr** (no PlayerState ASC) | EffectActor early-out; any BP using library GetASC | Requires Runtime Inspection |
|
||||
| Enemy native code using `AbilitySystemComponent` member | Direct `TObjectPtr` on enemy | Self | Valid if used | Unknown consumers | Pass 9 |
|
||||
| Player EffectActor target | Library GetASC on player character | PlayerState ASC | Valid via character GetASC → PS | Potions work on players (static) | PIE authority |
|
||||
| Blueprint enemy GetASC | Inherited base | — | nullptr | Incomplete Refactor / Existing Baseline Defect | PIE |
|
||||
|
||||
---
|
||||
|
||||
## Ownership and init (detail)
|
||||
|
||||
**Player (Observed Implementation):**
|
||||
|
||||
- ASC + AttributeSet created on `ARIRPlayerState`
|
||||
- ReplicationMode **Mixed**; NetUpdateFrequency 100
|
||||
- `ARIRPlayerCharacter::InitAbilityActorInfo`: Owner=PlayerState, Avatar=Character; called from PossessedBy and OnRep_PlayerState
|
||||
- ASC + AttributeSet on `ARIRPlayerState`
|
||||
- ReplicationMode **Mixed**; NetUpdateFrequency 100 (Batch 1/2)
|
||||
- `ARIRPlayerCharacter::InitAbilityActorInfo`: Owner=PlayerState, Avatar=Character; PossessedBy + OnRep_PlayerState
|
||||
- Then `ARIRHUD::InitOverlay` when local HUD present
|
||||
|
||||
**Enemy (Observed Implementation):**
|
||||
|
||||
- ASC + AttributeSet created on `ARIRBaseEnemyCharacter`
|
||||
- ASC + AttributeSet 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**.
|
||||
- BeginPlay: `InitAbilityActorInfo(this, this)`
|
||||
|
||||
---
|
||||
|
||||
## Attributes
|
||||
## EffectActor boundary (Pass 7; Pass 10 deferred)
|
||||
|
||||
`URIRAttributeSet`: Health, MaxHealth, Mana, MaxMana, Stamina, MaxStamina — all replicated with OnRep notify.
|
||||
`ARIREffectActor::ApplyEffectToTarget`:
|
||||
|
||||
Constructor inits Health/MaxHealth/Mana/MaxMana only; Stamina/MaxStamina not Init'd in native.
|
||||
1. `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor)`
|
||||
2. null → return
|
||||
3. MakeOutgoingSpec(GEClass, 1.f) + ApplyGameplayEffectSpecToSelf
|
||||
|
||||
`DefaultAttributesGameplayEffect` on PlayerState: declared, **not applied in native**.
|
||||
**BlueprintCallable** from children. Properties: `InstantGameplayEffectClass`, `DurationGameplayEffectClass`.
|
||||
|
||||
**Batch 2 Observed Implementation:** `/Game/_Main/Blueprints/Player/BP_PlayerState` CDO property `defaultAttributesGameplayEffect` = **None**. Assignment/application path remains missing at both C++ and this BP.
|
||||
|
||||
---
|
||||
|
||||
## Abilities
|
||||
|
||||
`URIRGameplayAbility`: InstancedPerActor only. **No project subclasses** (search_subclasses).
|
||||
|
||||
**Conclusion (Observed Implementation):** No project-defined UGameplayAbility subclasses, Gameplay Ability assets, or static ability-granting paths observed. Playable abilities are legacy Blueprint custom events (`Server_Ability_*`) with Enhanced Input on `BP_PlayerCharacterBase` — see `05-LegacyAbilityArchitecture.md`.
|
||||
|
||||
---
|
||||
|
||||
## Dual attribute UI paths (Batch 2)
|
||||
|
||||
| Path | Source | Consumer |
|
||||
|------|--------|----------|
|
||||
| Native GAS | `InitAbilityActorInfo` → `ARIRHUD::InitOverlay` → OverlayWidgetController ASC delegates | `WBP_Overlay` via `WBP_PlayerHUD` (AHUD) deps |
|
||||
| Legacy BP | `Server_UpdateHUD` / `InitializeHUD` using `DEPRECATED_Current/Max Health/Mana` | `BPI_PlayerController.UpdatePlayerHUD` |
|
||||
|
||||
Both are Observed Implementation. Incomplete Refactor — legacy path still active.
|
||||
|
||||
---
|
||||
|
||||
## Effects
|
||||
|
||||
`ARIREffectActor::ApplyEffectToTarget` applies Instant/Duration class via ASC MakeOutgoingSpec + ApplyGameplayEffectSpecToSelf. Overlap/authority logic expected in Blueprint children (Batch 4 Pass 10 / doc 12).
|
||||
|
||||
---
|
||||
|
||||
## Pass 6 — GAS interactions encountered on playables
|
||||
|
||||
| Asset / interaction | Character | Status | Classification |
|
||||
| BP | Instant | Duration | Graph |
|
||||
|---|---|---|---|
|
||||
| ASC ActivateAbility / GrantAbility | All five | Not found in ability graphs | Observed Implementation (absence) |
|
||||
| ApplyGameplayEffect / GE Spec | All five ability paths | Not found | Observed Implementation (absence) |
|
||||
| `GE_Cleric_DefaultAttributes` | Cleric | Asset exists; 0 referencers; not in ability graphs | Present but Unconnected |
|
||||
| `GE_Wizard_DefaultAttributes` | Wizard | Asset exists; unwired | Present but Unconnected |
|
||||
| `GE_Gunslinger_*` | Gunslinger | Not found | Missing |
|
||||
| `NS_Wizard_Ability001` | Wizard | Niagara present; unwired | Present but Unconnected |
|
||||
| Damage / heal | Paladin / Amazonian / Cleric | `ApplyDamage` / `DEPRECATED_RecoverPlayerHealth` — **not** GE | Observed Implementation |
|
||||
| `BP_HealthPotion` | GE_PotionHeal | None | Sphere OnComponentBeginOverlap → ApplyEffecttoTarget(Instant) → DestroyActor |
|
||||
| `BP_ManaPotion` | GE_PotionMana | None | Same pattern (agent + refs) |
|
||||
| `BP_ManaCrystal` | None | GE_MoT_Small | Same Duration pattern |
|
||||
| `BP_OrangeSlice` | None | GE_HoT_Small | Same Duration pattern |
|
||||
|
||||
**Conclusion (Observed Implementation):** Pass 6 reconfirms playable combat is legacy Blueprint. Character-named DefaultAttributes GE assets are orphaned relative to ability graphs and `BP_PlayerState.DefaultAttributesGameplayEffect=None`. Systemwide GE/cue archaeology remains Pass 7.
|
||||
Authority on overlap application: **Requires Runtime Inspection** (not traced beyond DSL). Full pickup respawn/UI → Pass 10.
|
||||
|
||||
---
|
||||
|
||||
## Distinctions (updated)
|
||||
|
||||
| Layer | Status | Evidence |
|
||||
|-------|--------|----------|
|
||||
| GAS infrastructure | Present / Active for ASC+attrs+UI binding | Native classes |
|
||||
| GAS data | Partially present | 8 GEs; 12 orphan tags; no cues; no GAs |
|
||||
| GAS runtime abilities | Not observed | No grant/activate |
|
||||
| GAS runtime effects | Partially Integrated | Consumables only |
|
||||
| Legacy BP abilities | Active | doc 05 / 10 |
|
||||
|
||||
---
|
||||
|
||||
## Negative-search evidence log
|
||||
|
||||
| Search | Scope | Result |
|
||||
|---|---|---|
|
||||
| find_assets name `GA_` folder `/Game` | Project content | [] |
|
||||
| find_assets name `GC_` / `GameplayCue` | Project content | [] / no cue assets |
|
||||
| find_assets under GAS folder | Complete | Exactly 8 GE assets |
|
||||
| search_subclasses GameplayAbility | Engine+project | Engine Jump/Montage + URIRGameplayAbility only |
|
||||
| search_subclasses RIRGameplayAbility | Project | No further subclasses |
|
||||
| search_subclasses GameplayCueNotify_* | Engine+project | Engine unit-test/burst/etc only |
|
||||
| search_subclasses GameplayEffectExecutionCalculation / ModMagnitudeCalculation | Engine+project | Engine base only |
|
||||
| Source grep GiveAbility\|TryActivateAbility\|ApplyGameplayEffect | Source/REALMSINRUIN | Only EffectActor Apply + DefaultAttributes property |
|
||||
| Source grep State.Dead / tag strings | Source/REALMSINRUIN | No matches (GameplayTags module linked in Build.cs only) |
|
||||
| get_referencers each DefaultAttributes GE | Asset registry | [] |
|
||||
|
||||
Reference in New Issue
Block a user