# 12 — Pickups and Effects **Status: Draft** - **Scope:** Native `ARIREffectActor` mechanism; Pass 7 consumable GE assignments and overlap→apply wiring. Full per-pickup respawn/UI/authority deep dive deferred to Pass 10. - **Inspection method:** Native C++; search_subclasses; AssetTools refs; ObjectTools GE class props; BlueprintTools EventGraph DSL on `BP_HealthPotion`. - **Last updated:** 2026-07-16 - **Current phase:** Phase 1 — Static Architecture - **Last completed pass:** Pass 7 (Batch 4B) — EffectActor + GE wiring seed - **Next pass expected to contribute:** Pass 10 ## Draft tracking ### Completed sections - ApplyEffectToTarget GE application path - Instant/Duration GE class properties - Blueprint child paths for potions / orange slice / mana crystal - **Pass 7:** Exact Instant/Duration GE assignments; HealthPotion overlap→Apply→Destroy; GE modifier magnitudes; enemy GetASC null risk ### Pending sections - Per-pickup authority, destroy/respawn, UI notify (Pass 10) - ManaPotion / ManaCrystal / OrangeSlice graph confirmation beyond refs (HealthPotion DSL verified) - Gold / stamina pickups if present ### Evidence still required - Whether ApplyEffect runs with HasAuthority on overlap - Whether GetAbilitySystemComponent succeeds for player vs fails for enemy in PIE - Stacking / re-pickup behavior --- ## Native mechanism (Observed Implementation) `ARIREffectActor::ApplyEffectToTarget`: 1. `UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(TargetActor)` 2. Early-out if null 3. MakeOutgoingSpec(GEClass, 1.f) + ApplyGameplayEffectSpecToSelf **Enemy ASC defect interaction:** Library GetASC uses `ARIRBaseCharacter::GetAbilitySystemComponent` → PlayerState. Enemies return **nullptr** → ApplyEffect early-out. **Issue:** Existing Baseline Defect / Incomplete Refactor. Classify static consequence separately from runtime chase/attack defects. --- ## Blueprint subclasses (Observed Implementation) | Asset | InstantGameplayEffectClass | DurationGameplayEffectClass | |-------|----------------------------|------------------------------| | `/Game/_Main/Blueprints/Items/Potion/BP_HealthPotion` | `GE_PotionHeal` (+25 Health Instant) | None | | `/Game/_Main/Blueprints/Items/Potion/BP_ManaPotion` | `GE_PotionMana` (+30 Mana Instant) | None | | `/Game/_Main/Blueprints/Items/Potion/BP_ManaCrystal` | None | `GE_MoT_Small` (+0.25 Mana / 0.1s for 1s) | | `/Game/_Main/Blueprints/Items/Food/BP_OrangeSlice` | None | `GE_HoT_Small` (+0.5 Health / 0.1s for 1s) | **BP_HealthPotion EventGraph (Observed Implementation):** `OnComponentBeginOverlap(Sphere)` → `ApplyEffecttoTarget(OtherActor, InstantGameplayEffectClass)` → `DestroyActor`. Same structural pattern reported for other three consumables (referencer graph + agent); Pass 10 should re-confirm each DSL. **Classification:** Pickups are the **only Observed Implementation** of runtime Gameplay Effect application found in Pass 7. Combat abilities remain ApplyDamage / DEPRECATED (doc 05). Full GE inventory: doc 06.