Captures Blueprint hierarchy, legacy ability/RPC paths, animation dependency seeds, and handoff state without modifying Unreal assets. Co-authored-by: Cursor <cursoragent@cursor.com>
5.6 KiB
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_PlayerStateCDO; BlueprintTools onBP_PlayerCharacterBasefor 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 5–6 / 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 | 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 |
|---|---|---|---|
| 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 |
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.