# 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 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.