Skip to content

ALS Refactored Structure

This page is a high-level map of the ALS-Refactored plugin. It keeps the source and asset references from the more technical version, but it also tries to explain how the pieces relate to each other while you are still learning the plugin.

The goal is to make the plugin feel less like one huge black box. By the end, you should know which systems exist, where the important assets live, and how input becomes movement, camera behavior, animation, overlay state, and replication.

FieldValue
PluginALS-Refactored
Plugin version4.17
Engine version in ALS.uplugin5.7.0
Plugin source rootPlugins/ALS-Refactored/Source/...
Plugin asset mount point/ALS/...
Plugin descriptorPlugins/ALS-Refactored/ALS.uplugin
ALS plugin content in Content Drawer
ALS plugin content in Content Drawer

The Unreal asset paths use the plugin mount point. For example:

/ALS/ALS/Character/B_Als_Character
/ALS/ALSExtras/Core/B_Als_GameMode

On disk, those assets live inside the plugin’s Content folder, but in Unreal references they appear under /ALS/....

ALS-Refactored is easiest to read as four layers:

LayerMain responsibility
ALS moduleCore character, movement, gameplay tags, animation support, mantling, rolling, ragdolling, replication
ALSCamera moduleCustom ALS camera component and camera debug tools
ALSExtras moduleExample character wrapper, player controller, game mode, UI, sample levels, input assets
ALSEditor moduleEditor-only animation tools and editor graph nodes

The playable example flow is:

  1. A map uses B_Als_GameMode.
  2. B_Als_GameMode selects B_Als_Character as the default pawn.
  3. B_Als_PlayerController creates the sample HUD and overlay menu widgets.
  4. AAlsCharacterExample binds Enhanced Input actions for movement and character actions.
  5. AAlsCharacter updates movement state, rotation, view, mantling, rolling, ragdolling, and network state.
  6. UAlsCameraComponent calculates the final camera view.
  7. AB_Als and its linked animation Blueprints read ALS state and blend the final pose.
ALS sample gameplay flow diagram
ALS sample gameplay flow diagram

The plugin declares four modules in Plugins/ALS-Refactored/ALS.uplugin.

ModuleTypePurpose
ALSRuntimeAAlsCharacter, UAlsCharacterMovementComponent, settings assets, gameplay tags, animation instance code, animation nodes, mantling, rolling, ragdolling
ALSCameraRuntimeUAlsCameraComponent, camera animation instance, camera settings, camera debug helpers
ALSExtrasRuntimeExample character class, player controller, game mode, UI widgets, demo levels, AI example, Enhanced Input assets
ALSEditorUncookedOnlyEditor-only animation modifiers, skeleton utilities, custom animation graph editor nodes

The plugin also enables these dependencies from ALS.uplugin:

PluginWhy ALS uses it
ACLPluginAnimation compression support
AnimationModifierLibraryEditor animation modifier support
ControlRigIK and pose adjustment support
EngineCamerasCamera-related engine features
EnhancedInputInput actions and mapping contexts
GameplayTagsEditorGameplay tag editing support
MetasoundAudio support used by plugin content
NiagaraEffects support used by plugin content
PropertyAccessNodeAnimation Blueprint property access support

The plugin content is split into two main asset groups:

Asset rootPurpose
/ALS/ALS/...Core ALS character content: character Blueprint, animation Blueprints, input actions, settings assets, overlay objects
/ALS/ALSExtras/...Example/demo content: game mode, player controller, UI widgets, sample maps, AI example

That split is worth learning early because it keeps you from wandering through the plugin blindly.

  • /ALS/ALS/... is where the core playable character systems live
  • /ALS/ALSExtras/... is where the example layer lives around those systems

If you are trying to understand how ALS itself works, you will spend most of your time in /ALS/ALS/.... If you are trying to understand how the sample setup presents ALS to the player, you will keep crossing into /ALS/ALSExtras/....

Useful starting assets:

AssetPath
Main playable character Blueprint/ALS/ALS/Character/B_Als_Character
Main character animation Blueprint/ALS/ALS/Character/AB_Als
Example game mode/ALS/ALSExtras/Core/B_Als_GameMode
Example player controller/ALS/ALSExtras/Core/B_Als_PlayerController
Example HUD widget/ALS/ALSExtras/UI/W_Als_Hud
Overlay mode menu widget/ALS/ALSExtras/UI/W_Als_OverlayModeMenu
Default input mapping context/ALS/ALS/Data/Input/IMC_Als_Default
UI input mapping context/ALS/ALSExtras/Data/Input/IMC_Als_UI

ALS-Refactored ships sample levels inside the plugin:

MapPath
Playground map/ALS/ALSExtras/Levels/L_Als_Playground
Grid test map/ALS/ALSExtras/Levels/L_Als_Grid

The example game mode is:

/ALS/ALSExtras/Core/B_Als_GameMode
ALS game mode asset in Content Drawer
ALS game mode asset in Content Drawer

Verified class defaults on B_Als_GameMode:

RoleClass or asset
Parent classGameModeBase
Default pawn/ALS/ALS/Character/B_Als_Character
Player controller/ALS/ALSExtras/Core/B_Als_PlayerController
HUD classEngine default AHUD

The sample HUD is not assigned through HUDClass. It is created by B_Als_PlayerController during BeginPlay, which is useful to know when you want to customize the UI.

The playable ALS character is built in layers:

ACharacter
-> AAlsCharacter
-> AAlsCharacterExample
-> B_Als_Character
LayerLocationPurpose
ACharacterUnreal Engine classBase character movement and pawn behavior
AAlsCharacterPlugins/ALS-Refactored/Source/ALS/Public/AlsCharacter.hCore ALS runtime state, movement decisions, replication, mantling, rolling, ragdolling
AAlsCharacterExamplePlugins/ALS-Refactored/Source/ALSExtras/Public/AlsCharacterExample.hExample wrapper that adds camera and Enhanced Input bindings
B_Als_Character/ALS/ALS/Character/B_Als_CharacterBlueprint asset that assigns mesh, animation, settings, input actions, and overlay data
ALS character folder content
ALS character folder content
B_Als_Character component outline
B_Als_Character component outline

This is a good place to pause and orient yourself. If you open B_Als_Character, these are the components that matter most when you are trying to understand what you are looking at.

B_Als_Character inherits these important native components:

ComponentClassSource or owner
CollisionCylinderCapsuleComponentInherited from ACharacter
CharacterMesh0SkeletalMeshComponentInherited from ACharacter
CharMoveCompAlsCharacterMovementComponentSet by AAlsCharacter constructor
CameraAlsCameraComponentCreated by AAlsCharacterExample

B_Als_Character also adds overlay components:

ComponentClassPurpose
OverlaySkeletalMeshSkeletalMeshComponentDisplays skeletal overlay objects such as rifle, pistol, bow
OverlayStaticMeshStaticMeshComponentDisplays static overlay objects such as box, barrel, torch

If the core character looks confusing in the Blueprint editor, this table helps narrow your attention:

  • CharacterMesh0 is the main body
  • Camera is the ALS camera system
  • CharMoveComp is the custom movement component
  • the Overlay* components are the extra presentation layer for held objects and overlay poses

B_Als_Character starts with these desired-state defaults:

StateDefault value
Desired stanceAls.Stance.Standing
Desired gaitAls.Gait.Running
Desired rotation modeAls.RotationMode.ViewDirection
Desired aimingfalse
View modeAls.ViewMode.ThirdPerson
Overlay modeAls.OverlayMode.Default

Important assigned data assets:

AssetPathPurpose
CS_Als_Default/ALS/ALS/Data/Character/CS_Als_DefaultMain character settings such as rotation, view, mantling, ragdolling, and thresholds
MS_Als_Normal/ALS/ALS/Data/Character/Movement/MS_Als_NormalMovement tuning for gait speeds and movement behavior
IMC_Als_Default/ALS/ALS/Data/Input/IMC_Als_DefaultMain gameplay input mapping context
IMC_Als_UI/ALS/ALSExtras/Data/Input/IMC_Als_UIUI/sample input mapping context used by the player controller

This is one of the big architectural patterns in ALS:

  • C++ classes define the systems and rules
  • data assets and Blueprints decide which settings, meshes, animations, and inputs are actually used

That is why learning the plugin means reading both code and assets together, not choosing one or the other.

Input is split between C++ character input and Blueprint controller input.

AAlsCharacterExample handles the normal gameplay actions in C++.

Input actionAsset pathFunctionSource
IA_Als_LookMouse/ALS/ALS/Data/Input/IA_Als_LookMouseInput_OnLookMouse()AlsCharacterExample.cpp:91
IA_Als_Look/ALS/ALS/Data/Input/IA_Als_LookInput_OnLook()AlsCharacterExample.cpp:99
IA_Als_Move/ALS/ALS/Data/Input/IA_Als_MoveInput_OnMove()AlsCharacterExample.cpp:107
IA_Als_Sprint/ALS/ALS/Data/Input/IA_Als_SprintInput_OnSprint()AlsCharacterExample.cpp:127
IA_Als_Walk/ALS/ALS/Data/Input/IA_Als_WalkInput_OnWalk()AlsCharacterExample.cpp:132
IA_Als_Crouch/ALS/ALS/Data/Input/IA_Als_CrouchInput_OnCrouch()AlsCharacterExample.cpp:144
IA_Als_Jump/ALS/ALS/Data/Input/IA_Als_JumpInput_OnJump()AlsCharacterExample.cpp:156
IA_Als_Aim/ALS/ALS/Data/Input/IA_Als_AimInput_OnAim()AlsCharacterExample.cpp:184
IA_Als_Ragdoll/ALS/ALS/Data/Input/IA_Als_RagdollInput_OnRagdoll()AlsCharacterExample.cpp:189
IA_Als_Roll/ALS/ALS/Data/Input/IA_Als_RollInput_OnRoll()AlsCharacterExample.cpp:197
IA_Als_RotationMode/ALS/ALS/Data/Input/IA_Als_RotationModeInput_OnRotationMode()AlsCharacterExample.cpp:204
IA_Als_ViewMode/ALS/ALS/Data/Input/IA_Als_ViewModeInput_OnViewMode()AlsCharacterExample.cpp:211
IA_Als_SwitchShoulder/ALS/ALS/Data/Input/IA_Als_SwitchShoulderInput_OnSwitchShoulder()AlsCharacterExample.cpp:217

The input setup happens in two steps:

  1. NotifyControllerChanged() adds /ALS/ALS/Data/Input/IMC_Als_Default to the local player’s Enhanced Input subsystem.
  2. SetupPlayerInputComponent() binds each input action to the matching C++ handler.

The handlers then call ALS state or action functions such as SetDesiredGait(), SetDesiredStance(), SetDesiredAiming(), StartRollingGrounded(), StartRagdolling(), StopRagdolling(), and SetViewMode().

If you are tracing “why did my key press change the character,” this is one of the clearest routes through the plugin:

Input action -> AAlsCharacterExample handler -> AAlsCharacter state/action function
ALS player controller asset
ALS player controller asset

B_Als_PlayerController handles the sample UI and overlay menu input.

ALS input action assets
ALS input action assets
Input actionAsset pathBehavior
IA_Als_OverlayModeMenu/ALS/ALSExtras/Data/Input/IA_Als_OverlayModeMenuOpens/closes the overlay mode menu
IA_Als_NextOverlayMode/ALS/ALSExtras/Data/Input/IA_Als_NextOverlayModeSelects the next overlay option
IA_Als_PreviousOverlayMode/ALS/ALSExtras/Data/Input/IA_Als_PreviousOverlayModeSelects the previous overlay option
IA_Als_ToggleUI/ALS/ALSExtras/Data/Input/IA_Als_ToggleUIToggles sample HUD visibility state
IA_Als_Slomo/ALS/ALSExtras/Data/Input/IA_Als_SlomoToggles sample slow motion behavior

Related Blueprint:

/ALS/ALSExtras/Core/B_Als_PlayerController

Related widgets:

WidgetPath
HUD widget/ALS/ALSExtras/UI/W_Als_Hud
Overlay menu widget/ALS/ALSExtras/UI/W_Als_OverlayModeMenu
Overlay option widget/ALS/ALSExtras/UI/W_Als_OverlayModeOption
B_Als_Player_Controller EventGraph

On BeginPlay, the Blueprint:

  1. checks that it is local
  2. sets input mode to game only
  3. adds the UI input mapping context IMC_Als_UI
  4. creates W_Als_Hud and adds it to the viewport
  5. creates W_Als_OverlayModeMenu and stores it for later

So if you want to change:

  • overlay menu behavior
  • sample UI creation
  • extra debug input
  • slow motion toggle behavior

this Blueprint is one of the main places to inspect.

The split between character input and controller input is intentional:

  • character input changes locomotion state
  • controller input changes the sample presentation layer around the character

The core update loop lives in:

Plugins/ALS-Refactored/Source/ALS/Private/AlsCharacter.cpp:266
AlsCharacter.cpp Tick()

Adding function names and source lines is useful here because this section doubles as a reference. The plain-language description explains what the step means; the function/source column gives you a place to verify behavior later.

OrderFunction call in AAlsCharacter::Tick()Function definitionWhat it updates
1RefreshMovementBase()AlsCharacter.cpp:404Tracks the floor/platform/moving base the character is standing on
2RefreshMeshProperties()AlsCharacter.cpp:327Updates mesh ticking and visibility-related behavior, especially for networking
3RefreshInput(DeltaTime)AlsCharacter.cpp:1115Converts movement input into input direction and input yaw data
4RefreshLocomotionEarly()AlsCharacter.cpp:1335Prepares early locomotion values before the main movement refresh
5RefreshView(DeltaTime)AlsCharacter.cpp:1222Updates view rotation, view yaw speed, and network smoothing
6RefreshLocomotion()AlsCharacter.cpp:1372Calculates velocity, speed, moving state, and velocity yaw data
7RefreshGait()AlsCharacter.cpp:942Resolves desired gait into actual gait based on movement state
8RefreshRotationMode()AlsCharacter.cpp:675Resolves desired rotation mode into actual rotation mode
9RefreshGroundedRotation(DeltaTime)AlsCharacter.cpp:1514Updates character rotation while grounded
10RefreshInAirRotation(DeltaTime)AlsCharacter.cpp:1820Updates character rotation while falling or in air
11AutoStartMantling()AlsCharacter_Actions.cpp:156Optionally starts mantling automatically while in air
12RefreshMantling()AlsCharacter_Actions.cpp:644Updates active mantling movement and state
13RefreshRagdolling(DeltaTime)AlsCharacter_Actions.cpp:866Updates active ragdoll state and target location
14RefreshRolling(DeltaTime)AlsCharacter_Actions.cpp:103Updates active rolling state
15RefreshLocomotionLate()AlsCharacter.cpp:1439Final locomotion cleanup after Super::Tick()

If you are debugging something that “looks wrong,” this table is often where the investigation starts. Many visible problems show up in animation or camera, but their cause actually starts earlier in the tick flow.

ALS uses Unreal’s Gameplay Tags to name character states in a consistent, data-friendly way.

A gameplay tag is a hierarchical name such as:

Als.Gait.Running
Als.RotationMode.ViewDirection
Als.OverlayMode.Rifle

In C++, these are still values, not loose strings. ALS defines them in:

Plugins/ALS-Refactored/Source/ALS/Private/Utility/AlsGameplayTags.cpp

and declares them in:

Plugins/ALS-Refactored/Source/ALS/Public/Utility/AlsGameplayTags.h

Gameplay tags work well for ALS because the same state value needs to be understood by several systems:

SystemExample use
Character C++Stores current and desired state, such as DesiredGait or OverlayMode
Animation BlueprintsChooses locomotion, stance, overlay, or action animation layers
Blueprint assetsExposes readable state values in defaults and maps
ReplicationSends selected state values over the network

For example, DesiredGait is a FGameplayTag. When sprint input is pressed, AAlsCharacterExample::Input_OnSprint() sets the desired gait to Als.Gait.Sprinting. Later, AAlsCharacter::RefreshGait() decides whether sprinting is actually allowed and updates the final Gait state.

ALS often separates desired state from actual state.

Desired stateActual stateMeaning
DesiredGaitGaitThe player may request sprinting, but ALS decides whether the character can actually sprint
DesiredStanceStanceThe player may request crouching, but ALS applies it when movement state allows
DesiredRotationModeRotationModeThe player may request a mode, while aiming or first person can affect the final mode

This distinction is important when debugging. If input seems correct but animation is different, check both the desired value and the final resolved value.

NamespaceValues
LocomotionModeGrounded, InAir
RotationModeVelocityDirection, ViewDirection, Aiming
StanceStanding, Crouching
GaitWalking, Running, Sprinting
OverlayModeDefault, Masculine, Feminine, Injured, HandsTied, Rifle, PistolOneHanded, PistolTwoHanded, Bow, Torch, Binoculars, Box, Barrel
LocomotionActionRolling, Mantling, Ragdolling, GettingUp
ViewModeFirstPerson, ThirdPerson
GroundedEntryModeFromRoll

The sample character does not use AB_Als_Locomotion as the top-level animation Blueprint. The top-level animation Blueprint is:

/ALS/ALS/Character/AB_Als

AB_Als acts as the main animation hub. It links into smaller animation Blueprints that focus on specific parts of the pose.

AB_Als Animation Graph
AB_Als Animation Graph

This is one of the places where ALS can feel intimidating at first. The good news is that the structure is actually pretty readable once you stop expecting one single “master locomotion blueprint” to contain everything.

Animation instance assets:

Animation BlueprintAsset pathPurpose
AB_Als/ALS/ALS/Character/AB_AlsMain animation Blueprint assigned to the character
AB_Als_Locomotion/ALS/ALS/Character/AnimationInstances/AB_Als_LocomotionMain locomotion blending, including grounded and in-air routing
AB_Als_Grounded/ALS/ALS/Character/AnimationInstances/AB_Als_GroundedGrounded movement such as walk, run, sprint, starts, stops, and pivots
AB_Als_View/ALS/ALS/Character/AnimationInstances/AB_Als_ViewView-dependent animation layer; this asset is present as an object redirector in the checked plugin
AB_Als_Head/ALS/ALS/Character/AnimationInstances/AB_Als_HeadHead look and view/aim related pose contribution
AB_Als_Layering/ALS/ALS/Character/AnimationInstances/AB_Als_LayeringUpper/lower body layering and overlay pose blending
AB_Als_Ragdolling/ALS/ALS/Character/AnimationInstances/AB_Als_RagdollingRagdoll and get-up animation support
AB_Als_Monolithic/ALS/ALS/Character/AB_Als_MonolithicAll-in-one reference or alternative animation Blueprint

Overlay animation Blueprints live under:

/ALS/ALS/Character/AnimationInstances/Overlays/

Examples include:

Overlay animation BlueprintAsset path
AB_Als_Default/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Default
AB_Als_Rifle/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Rifle
AB_Als_PistolOneHanded/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_PistolOneHanded
AB_Als_PistolTwoHanded/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_PistolTwoHanded
AB_Als_Bow/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Bow
AB_Als_Torch/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Torch

The animation Blueprint is backed by UAlsAnimationInstance.

FunctionSourcePurpose
NativeUpdateAnimation()Plugins/ALS-Refactored/Source/ALS/Private/AlsAnimationInstance.cpp:98Reads character state on the game thread
NativeThreadSafeUpdateAnimation()AlsAnimationInstance.cpp:170Refreshes animation-side data that can run thread-safely
RefreshLayering()AlsAnimationInstance.cpp:287Reads animation curves that control body-part layering
RefreshPose()AlsAnimationInstance.cpp:336Reads pose curves such as grounded, in-air, stance, and gait amounts
RefreshView()AlsAnimationInstance.cpp:386Updates view yaw/pitch data used by head, spine, and aim layers
RefreshFeet()AlsAnimationInstance.cpp:1298Updates foot placement and foot lock data
RefreshTransitions()AlsAnimationInstance.cpp:1676Handles dynamic transition availability
RefreshRotateInPlace()AlsAnimationInstance.cpp:1828Determines rotate-in-place behavior
RefreshTurnInPlace()AlsAnimationInstance.cpp:1904Determines turn-in-place behavior

At a high level, the animation side is reading whatever AAlsCharacter has already resolved, then turning that into pose decisions. So if the animation looks wrong, it is often worth checking whether the problem is really animation, or whether the character state feeding it is already wrong.

The ALS camera is not a typical Unreal spring-arm camera stack.

The core class is:

UAlsCameraComponent

Source references:

TopicSource
Class declarationPlugins/ALS-Refactored/Source/ALSCamera/Public/AlsCameraComponent.h
Component tickPlugins/ALS-Refactored/Source/ALSCamera/Private/AlsCameraComponent.cpp:77
GetViewInfo()AlsCameraComponent.cpp:140
Main camera updateAlsCameraComponent.cpp:154
Character CalcCamera() delegationPlugins/ALS-Refactored/Source/ALSExtras/Private/AlsCharacterExample.cpp:51

UAlsCameraComponent:

  • inherits from USkeletalMeshComponent
  • is attached to the character mesh
  • calculates camera view data itself
  • supports first-person and third-person behavior
  • supports shoulder switching
  • handles pivot lag and camera collision tracing
  • can override field of view and post-process weight

Related camera assets:

ALS camera folder content
ALS camera folder content
AssetPath
Camera component Blueprint/ALS/ALSCamera/B_Als_CameraComponent
Camera animation Blueprint/ALS/ALSCamera/AB_Als_Camera

If you come from a standard Unreal character setup, this section is a good reminder that ALS is doing something more custom here. That is why trying to reason about it like a normal spring-arm stack usually gets confusing fast.

Overlay mode controls how the character’s upper body, held object, and overlay animation layer should behave.

Overlay gameplay tags include:

Als.OverlayMode.Default
Als.OverlayMode.Rifle
Als.OverlayMode.PistolOneHanded
Als.OverlayMode.PistolTwoHanded
Als.OverlayMode.Bow
Als.OverlayMode.Torch
Als.OverlayMode.Box
Als.OverlayMode.Barrel

B_Als_Character maps overlay tags to overlay animation Blueprints through OverlayAnimationInstanceClasses.

Example mappings:

Overlay tagAnimation Blueprint path
Als.OverlayMode.Default/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Default
Als.OverlayMode.Rifle/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Rifle
Als.OverlayMode.PistolOneHanded/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_PistolOneHanded
Als.OverlayMode.PistolTwoHanded/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_PistolTwoHanded
Als.OverlayMode.Bow/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Bow
Als.OverlayMode.Torch/ALS/ALS/Character/AnimationInstances/Overlays/AB_Als_Torch

Overlay object assets include:

ObjectPath
Rifle skeletal mesh/ALS/ALS/OverlayObjects/Rifle/SKM_Als_Rifle
Pistol skeletal mesh/ALS/ALS/OverlayObjects/Pistol/SKM_Als_Pistol
Bow skeletal mesh/ALS/ALS/OverlayObjects/Bow/SKM_Als_Bow
Torch static mesh/ALS/ALS/OverlayObjects/Torch/SM_Als_Torch
Box static mesh/ALS/ALS/OverlayObjects/Box/SM_Als_Box
Barrel static mesh/ALS/ALS/OverlayObjects/Barrel/SM_Als_Barrel

The overlay menu UI is controlled by:

/ALS/ALSExtras/Core/B_Als_PlayerController

The actual overlay state belongs to the character and is changed through AAlsCharacter::SetOverlayMode() in:

Plugins/ALS-Refactored/Source/ALS/Private/AlsCharacter.cpp:1029

This is a helpful place to separate two ideas:

  • the overlay selection UI lives in the controller/UI layer
  • the actual overlay state lives in the character/runtime layer

That separation makes the plugin easier to customize later, because you can replace the menu without having to rewrite how overlays work internally.

ALS is network-aware. It replicates selected state so remote clients can animate and simulate the character consistently.

Replication is configured in:

Plugins/ALS-Refactored/Source/ALS/Private/AlsCharacter.cpp:71

Replicated or network-managed values include:

ValuePurpose
DesiredStanceKeeps crouch or stand request synchronized
DesiredGaitKeeps walk, run, or sprint request synchronized
bDesiredAimingKeeps aiming request synchronized
DesiredRotationModeKeeps requested rotation behavior synchronized
ViewModeKeeps first-person or third-person state synchronized
OverlayModeKeeps overlay animation and object state synchronized
ReplicatedViewRotationShares view rotation data for smoothing and animation
InputDirectionShares movement input direction
DesiredVelocityYawAngleHelps short movement starts replicate correctly
RagdollTargetLocationHelps ragdoll state replicate

Useful RPC or state functions:

FunctionSource
SetViewMode()AlsCharacter.cpp:430
SetDesiredAiming()AlsCharacter.cpp:564
SetDesiredStance()AlsCharacter.cpp:760
SetDesiredGait()AlsCharacter.cpp:889
SetOverlayMode()AlsCharacter.cpp:1029
ServerSetDesiredGait()AlsCharacter.cpp:923
ServerSetOverlayMode()AlsCharacter.cpp:1067
ServerStartMantling()AlsCharacter_Actions.cpp:449
ServerStartRagdolling()AlsCharacter_Actions.cpp:743

If you are only interested in single-player behavior, this section can feel easy to skip. It is still worth knowing it exists, because some ALS logic makes a lot more sense once you realize the plugin is carefully trying to keep local and remote characters in sync.

ALS includes built-in debug channels that can be enabled from the console.

Character debug displays:

CommandSource constant
ShowDebug Als.CurvesPlugins/ALS-Refactored/Source/ALS/Public/Utility/AlsConstants.h:90
ShowDebug Als.StateAlsConstants.h:91
ShowDebug Als.ShapesAlsConstants.h:92
ShowDebug Als.TracesAlsConstants.h:93
ShowDebug Als.MantlingAlsConstants.h:94

Camera debug displays:

CommandSource
ShowDebug Als.CameraCurvesPlugins/ALS-Refactored/Source/ALSCamera/Private/AlsCameraModule.cpp:36
ShowDebug Als.CameraShapesAlsCameraModule.cpp:41
ShowDebug Als.CameraTracesAlsCameraModule.cpp:46

These are useful when checking:

  • foot placement
  • camera traces
  • mantling traces
  • character state
  • animation curves
  • camera collision

If you are learning the plugin, these debug displays are one of the best ways to turn ALS from “a lot of moving parts” into something you can actually inspect step by step.

This is the full sample flow from map startup to rendered character pose:

[Map starts]
|
v
B_Als_GameMode
Path: /ALS/ALSExtras/Core/B_Als_GameMode
|
|-- DefaultPawnClass
| -> /ALS/ALS/Character/B_Als_Character
|
|-- PlayerControllerClass
-> /ALS/ALSExtras/Core/B_Als_PlayerController
[Player controller BeginPlay]
|
|-- Adds UI mapping context
| -> /ALS/ALSExtras/Data/Input/IMC_Als_UI
|
|-- Creates HUD widget
| -> /ALS/ALSExtras/UI/W_Als_Hud
|
|-- Creates overlay menu widget
-> /ALS/ALSExtras/UI/W_Als_OverlayModeMenu
[Character possession]
|
v
AAlsCharacterExample::NotifyControllerChanged()
Source: Plugins/ALS-Refactored/Source/ALSExtras/Private/AlsCharacterExample.cpp:19
|
|-- Adds default gameplay input mapping context
-> /ALS/ALS/Data/Input/IMC_Als_Default
[Input binding]
|
v
AAlsCharacterExample::SetupPlayerInputComponent()
Source: AlsCharacterExample.cpp:62
|
|-- Binds movement, look, sprint, crouch, jump, aim, roll,
ragdoll, rotation mode, view mode, and shoulder switch actions
[Per-frame character update]
|
v
AAlsCharacter::Tick()
Source: Plugins/ALS-Refactored/Source/ALS/Private/AlsCharacter.cpp:266
|
|-- RefreshMovementBase()
|-- RefreshInput()
|-- RefreshLocomotion()
|-- RefreshGait()
|-- RefreshRotationMode()
|-- RefreshGroundedRotation() / RefreshInAirRotation()
|-- AutoStartMantling() / RefreshMantling()
|-- RefreshRagdolling()
|-- RefreshRolling()
[Camera update]
|
v
AAlsCharacterExample::CalcCamera()
Source: AlsCharacterExample.cpp:51
|
v
UAlsCameraComponent::GetViewInfo()
Source: Plugins/ALS-Refactored/Source/ALSCamera/Private/AlsCameraComponent.cpp:140
[Animation update]
|
v
/ALS/ALS/Character/AB_Als
|
|-- Reads ALS character state through UAlsAnimationInstance
|-- Routes into linked animation Blueprints
|-- Blends locomotion, view, overlay, feet, transitions, turn-in-place,
rotate-in-place, ragdolling, and final pose output
Complete ALS sample play flow diagram
Complete ALS sample play flow diagram

The key idea is that ALS state is produced mostly by AAlsCharacter, then consumed by the camera and animation systems. When debugging behavior, follow that direction: input, character state, camera or animation output.