Initialize Git with LFS for binary assets and add standard Unreal Engine .gitignore/.gitattributes. Co-authored-by: Cursor <cursoragent@cursor.com>
3.6 KiB
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
URIRGameplayAbilityor 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).