# Quick Start Guide

APStatusFX Suite | Version 1.0
Engine: Unreal Engine 5.7+
Support: https://discord.gg/n5HxmrkpC4


# 1. Installation

  1. Copy the APStatusFX/ folder into your project's Plugins/ directory.
  2. Regenerate Visual Studio project files (right-click your .uproject → Generate Visual Studio project files).
  3. Build the project (Ctrl+B).
  4. Open the editor — confirm the plugin is enabled under Edit → Plugins → AfterPrime.

# 2. Add the Component

The StatusFX Suite is a single component you add to any replicated actor.

  1. Open your Character or Pawn Blueprint.
  2. Click Add Component → search for "AP StatusFX Suite" → add it.
  3. The component handles all replication automatically — no additional setup required.

That's it. Your actor can now receive, track, and replicate status effects.


# 3. Implement the Interface (Optional but Recommended)

The IAP_StatusFXSuiteTarget interface lets other systems find the component on your actor without hard references.

  1. Open your actor Blueprint → Class Settings.
  2. Under Interfaces → Add → search for "StatusFX Suite Target".
  3. Compile the Blueprint.
  4. In My Blueprint → Interfaces, double-click GetStatusEffectComponent.
  5. Drag your AP_StatusFXSuite component from the Components panel → connect it to the Return Value pin.
  6. Compile.

Now any system can call GetStatusEffectComponent() on your actor to find the component.


# 4. Create an Effect Definition

Status effects are defined as Data Assets — no code required.

  1. In the Content Browser: Right-click → Miscellaneous → Data Asset.
  2. Select AP_StatusEffectDefinition as the class.
  3. Name it with the SFX_Def_ prefix (e.g., SFX_Def_Poison).

# Configure the Definition

Property Description
Effect Tag A Gameplay Tag identifying this effect (e.g., Effect.Debuff.Poison). Must be unique per effect type.
Display Name Human-readable name for UI display.
Duration Type Timed (expires after duration), Infinite (lasts until removed), or Instant (fires once).
Base Duration How long the effect lasts in seconds (Timed only).
Tick Interval How often OnEffectTick fires in seconds. Set to 0 for no ticking.
Stacking Policy How reapplication is handled (see Section 8).
Max Stacks Maximum stack count for stackable policies. 0 = unlimited.

# Example: A Simple Poison DoT

Property Value
Effect Tag Effect.Debuff.Poison
Display Name Poison
Duration Type Timed
Base Duration 10.0
Tick Interval 1.0
Stacking Policy Stack Intensity
Max Stacks 5

# 5. Apply an Effect

# Method A: Using the Blueprint Library (Recommended)

In any Blueprint graph, search for "Apply Effect to Actor" (under AP > StatusFX > Helpers):

  • Target Actor: The actor to apply the effect to (defaults to Self).
  • Definition: Your StatusEffectDefinition asset (e.g., SFX_Def_Poison).
  • Instigator: The actor that caused the effect (optional, for tracking).
  • Duration Override: Set to -1.0 to use the definition's default duration.

# Method B: Using the Component Directly

If you have a direct reference to the component:

  1. Get the AP_StatusFXSuite component reference.
  2. Call Apply Effect.
  3. Pass the Definition, Instigator, Duration Override, and Initial Stacks.

Important: All mutation methods (Apply, Remove, Refresh) are server-authoritative. Call them on the server or use Server RPCs from clients.


# 6. Listen for Events

The component provides 6 delegates you can bind in Blueprint:

Delegate Fires When Parameters
OnEffectApplied A new effect is applied EffectTag, Snapshot
OnEffectRemoved An effect is removed (any reason) EffectTag, RemovalReason
OnEffectRefreshed An effect's duration is refreshed EffectTag
OnEffectStackChanged An effect's stack count changes EffectTag
OnEffectTick A ticking effect fires a tick EffectTag, Snapshot
OnEffectExpired A timed effect reaches zero duration EffectTag

# Binding in Blueprint

  1. Get your AP_StatusFXSuite component reference.
  2. Drag off it → type "Assign On Effect Applied".
  3. This creates a bound event node — add your logic (Print String, UI update, gameplay response, etc.).

# The Snapshot

Most delegates provide an FAP_StatusEffectSnapshot containing:

  • EffectTag — The Gameplay Tag identifying the effect.
  • InstanceId — Unique ID for this effect instance.
  • DefinitionPath — Soft path to the definition asset.
  • StackCount — Current number of stacks.
  • RemainingDuration — Seconds remaining (-1.0 for infinite).
  • TotalDuration — Original duration from the definition.
  • ServerTimeApplied — Server timestamp of application.
  • Instigator — The actor that applied the effect.
  • bIsTimed — Whether this effect has a duration.
  • bIsTicking — Whether this effect has periodic ticks.

# 7. Query Active Effects

All query methods work on both server and client (they read replicated state).

Method Returns Use Case
HasEffect(Tag) bool Check if an effect is active
GetStackCount(Tag) int32 Read current stacks
GetRemainingDuration(Tag) float Countdown display
GetEffectSnapshot(Tag) Snapshot Full effect state for UI
GetAllActiveEffectSnapshots() Array of Snapshots Buff bar population
GetActiveEffectTags() Tag Container Batch queries
IsImmuneToEffect(Tag) bool Pre-check before applying

# 8. Stacking Policies

Each definition specifies how reapplication behaves:

Policy Behavior Example Use
None (Refresh) Reapplication resets the duration timer. Stack count stays at 1. Speed boost, shield buff
Stack Duration Each application adds its duration to the remaining time. HoT that extends with recast
Stack Intensity Adds a stack (up to MaxStacks). Duration is shared. Poison (more stacks = more damage)
Independent Instances Each application creates a separate tracked instance. Multiple shield layers
Custom Resolver Delegates stacking logic to a user-defined UAP_StackingResolver subclass. Complex custom rules

# 9. Interaction Rules

Effects can interact with each other in two ways:

# Per-Definition (on the Data Asset)

  • Removes Effects with Tags: When this effect is applied, remove any active effects matching these tags.
    Example: Applying Frozen removes Burning.

  • Blocked by Effects with Tags: This effect cannot be applied while any of these effects are active.
    Example: Fortify is blocked while ShieldBreak is active.

# DataTable Rules (Project Settings)

For complex interactions with immunity grants:

  1. Create a DataTable using FAP_EffectInteractionRule as the row struct.
  2. Each row defines: SourceTag, TargetTagsToRemove, bGrantImmunityToRemoved, ImmunityDuration.
  3. Assign the DataTable in Project Settings → Plugins → AP StatusFX Suite → Interaction Rules DataTable.

# 10. Immunity System

Effects can grant temporary immunity:

  • On the Definition: Check bGrantImmunityOnExpire and set ImmunityDuration. When the effect expires naturally, the target becomes immune to that effect tag for the specified duration.
  • Via Interaction Rules: DataTable rules can grant immunity to the removed effect tag (e.g., after Burning is removed by Frozen, immune to Burning for 3 seconds).
  • Manual: Call GrantImmunity(Tag, Duration) on the component for custom immunity logic.

# 11. Project Settings

Project Settings → Plugins → AP StatusFX Suite

Setting Default Description
Interaction Rules DataTable None Optional DataTable for complex interaction rules with immunity.
Global Max Independent Stacks 50 Safety cap for Independent stacking across all effect types. 0 = use per-definition only.
Enable Replication Logging false Verbose logging of client replication events. Development builds only.

# 12. Multiplayer Notes

  • All mutation methods (Apply, Remove, Refresh, GrantImmunity) are server-authoritative.
  • The active effects array replicates to clients via FastArray delta serialization (bandwidth-efficient).
  • Clients receive full effect state on late-join — no missed effects.
  • Client query methods (HasEffect, GetRemainingDuration, etc.) read replicated state and are always up to date.
  • For client-initiated effects, use Server RPCs to request application on the server.

# 13. Demo Content

The plugin ships with a complete demo in Content/Demo/:

  • 31 Effect Definitions covering buffs, debuffs, DoTs, CCs, cleanses, and interactions.
  • 3 Demo Blueprints: DemoCharacter (keyboard input + buff bar), EffectTrigger (overlap volumes), EffectDispenser (interactable shrines).
  • 2 UI Widgets: BuffBar and EffectIcon with countdown timers and icon support.
  • 1 Demo Map: Interactive showcase of all features with labeled zones.
  • DataTable: Example interaction rules (Frozen/Burning mutual cancellation with immunity).

To test: Open MAP_StatusFX_Demo, set the number of players to 2 (Listen Server), and press Play. Use keys 1–6 to apply effects, 0 to remove all.

All demo content uses the SFX_ prefix and lives in the Demo/ subfolder for easy deletion after evaluation.


# Next Steps

  • Read the API Reference for the complete list of methods, delegates, and types.
  • Explore the demo definitions to understand how interactions, stacking, and immunity work together.
  • Check the CHANGELOG for version history and planned features.

AfterPrime Systems — Building the Gameplay Foundation