Captures Blueprint hierarchy, legacy ability/RPC paths, animation dependency seeds, and handoff state without modifying Unreal assets. Co-authored-by: Cursor <cursoragent@cursor.com>
118 lines
5.6 KiB
Markdown
118 lines
5.6 KiB
Markdown
# 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.
|