Skip to content

GAS Quick Reference

A condensed reference for the Gameplay Ability System concepts used by Motion. For in-depth explanations, see the full GAS Primer.

The 5 Core Concepts

ConceptWhat It IsMotion's Use
ASCAbilitySystemComponent - manages everythingLives on PlayerState, discovered via IAbilitySystemInterface
AttributesNumeric values (speed, stamina)WalkSpeed, Stamina, MaxStamina, JumpVelocity
EffectsChange attributes & grant tagsSprint speed boost, stamina drain/regen
TagsHierarchical state labelsMotion.State.Sprinting, Motion.State.Crouching
AbilitiesActions triggered by inputMotion uses components, not traditional abilities

Quick Setup Checklist

1. PlayerState implements IAbilitySystemInterface
2. PlayerState owns AbilitySystemComponent
3. PlayerState owns AttributeSet (or Motion discovers attributes by name)
4. GameMode uses your PlayerState class
5. Motion components auto-discover ASC

Motion's Gameplay Tags

State Tags

TagComponentPurpose
Motion.State.WantsToSprintSprintInput intent
Motion.State.SprintingSprintActive sprinting
Motion.State.WantsToCrouchCrouchInput intent
Motion.State.CrouchingCrouchActive crouching
Motion.State.WantsToJumpJumpInput intent
Motion.State.JumpingJumpIn air from jump
Motion.State.StaminaDepletedSprintExhausted
Motion.State.StaminaRegenBlockedSprintRegen on cooldown
Motion.State.WalkingWalkHas velocity > 0
Motion.State.MovementHalted-Movement completely halted
Motion.State.StaminaRegeneratingSprintActively regenerating

Ability Tags

TagPurpose
Motion.Ability.CanJumpCharacter can perform jump actions
Motion.Ability.CanCrouchCharacter can perform crouch actions
Motion.Ability.CanSprintCharacter can perform sprint actions

Camera Tags

TagPurpose
Motion.Camera.BreathingActiveCamera breathing effect is active
Motion.Camera.DisableShakeCamera shake effects temporarily disabled

Attribute Tags

TagAttribute
Attribute.Movement.WalkSpeedWalk speed
Attribute.Movement.SprintSpeedSprint speed modifier
Attribute.Movement.JumpVelocityJump velocity
Attribute.Stamina.CurrentCurrent stamina
Attribute.Stamina.MaxMaximum stamina
Attribute.Stamina.RegenRateStamina regen rate

SetByCaller Magnitude Tags (Advanced)

TagPurpose
SetByCaller.Magnitude.WalkSpeedWalk speed modification
SetByCaller.Magnitude.CrouchSpeedCrouch speed modification
SetByCaller.Magnitude.SprintSpeedSprint speed modification
SetByCaller.Magnitude.JumpVelocityJump velocity modification
SetByCaller.Magnitude.StaminaCostStamina cost amount
SetByCaller.Magnitude.StaminaDrainStamina drain rate
SetByCaller.Magnitude.StaminaRegenStamina regen rate

Motion's Gameplay Effects

Movement Effects

EffectTypePurpose
GE_Motion_SprintSpeedInfinite+300 walk speed
GE_Motion_CrouchSpeedInfinite-200 walk speed

Stamina Effects

EffectTypePurpose
GE_Motion_SprintStaminaDrainInfiniteDrain while sprinting
GE_Motion_SprintStaminaRegenInfiniteRegenerate when not sprinting
GE_Motion_SprintStaminaRegenDelayDurationBlock regen after exhaustion

Tag Effects

EffectGrants Tag
GE_Motion_WantsToSprintMotion.State.WantsToSprint
GE_Motion_SprintingMotion.State.Sprinting
GE_Motion_WantsToCrouchMotion.State.WantsToCrouch
GE_Motion_CrouchingMotion.State.Crouching
GE_Motion_WantsToJumpMotion.State.WantsToJump
GE_Motion_JumpingMotion.State.Jumping

Motion's Attributes

AttributeDefaultDescription
WalkSpeed600Base walking speed
Stamina5.0Current stamina
MaxStamina5.0Maximum stamina
StaminaDrainRate1.0Drain per second
StaminaRegenRate1.0Regen per second
JumpVelocity420Base jump velocity

Effect Duration Types

TypeBehaviorExample
InstantPermanent changeDamage
DurationTemporary with timer10s speed buff
InfiniteUntil manually removedSprint speed while sprinting

Common Patterns

Checking Tags (Blueprint)

Has Gameplay Tag (Actor, Tag) -> Boolean

Checking Tags (C++)

cpp
UMotionAbilitySystemHelper::ActorHasGameplayTag(Actor, Tag)

Applying Effects (Server Only)

cpp
FGameplayEffectContextHandle Context = ASC->MakeEffectContext();
FGameplayEffectSpecHandle Spec = ASC->MakeOutgoingSpec(EffectClass, 1.0f, Context);
ASC->ApplyGameplayEffectSpecToSelf(*Spec.Data.Get());

Removing Effects

cpp
ASC->RemoveActiveGameplayEffect(EffectHandle);

Debugging Commands

bash
# View GAS state
showdebug abilitysystem

# Log GAS activity
log LogAbilitySystem Verbose
log LogGameplayTags Verbose
log LogMotionAbilitySystem Verbose

Common Issues

ProblemLikely CauseSolution
Tags not replicatingUsing loose tags instead of effectsUse GameplayEffect to grant tags
Attributes not syncingEffect not applied on serverApply effects only with HasAuthority()
ASC not foundPlayerState missing interfaceImplement IAbilitySystemInterface
Effect not applyingMissing AttributeSetAdd AttributeSet to ASC

See Also

Motion - Advanced First Person Character Controller