Files
realms-in-ruin-dev/Documentation/Archaeology/06-PartialGASArchitecture.md
T
tedwardsandCursor 0d045d142f Document Batch 2–3 Phase 1 archaeology: shared player-base architecture and per-character ability inventories.
Captures Blueprint hierarchy, legacy ability/RPC paths, animation dependency seeds, and handoff state without modifying Unreal assets.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-16 20:29:10 -07:00

5.6 KiB
Raw Blame History

06 — Partial GAS Architecture

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.
  • 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)

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 56 / doc 05)
  • Pass 6: No ASC activate/grant/GameplayEffect apply in any connected ability path on five playables

Pending sections

  • Default attribute GE CDO modifiers per character (Pass 7)
  • Gameplay Cue inventory
  • Tag referencers
  • Runtime ASC state (PIE-gated)

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)

Distinctions

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

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.

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 InitAbilityActorInfoARIRHUD::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
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_RecoverPlayerHealthnot GE Observed Implementation

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.