Pose Stack Overlay System

The pose stack overlay system refers to the dynamic blending of single frame Pose with basic locomotion using different poses in different situations.

Cover.GMS
A

Author

Author

Created: Apr 21, 2025Updated: Apr 14, 2026

Table of contents

Overview

The Pose Stack Overlay System dynamically blends single-frame Poses with different postures and base locomotion under various conditions, while controlling animation blend weights through body part weight settings.

If you've used ALS (Advanced Locomotion System), you're likely familiar with this concept. However, GMS has significantly improved this functionality.

Pose Stack

To use the Pose Stack, select PoseStack in the Anim Layer Setting (Overlay) field of the Movement Set settings.

姿势栈.选择

Its basic configuration structure is as follows:

姿势栈.数据结构

In this section, you can configure multiple Overlay Mode Settings. Each overlay mode setting allows you to configure:

  • Mode Identifier: Use GMS.OverlayMode.XXX tags to uniquely identify this overlay mode setting.
  • Base Pose: This pose is subtracted from the base locomotion to create dynamic additive poses.
  • Potential Dynamic Poses: A set of potential dynamic poses (PoseStackEntry) that are selected based on priority from top to bottom.

Single Pose Configuration

Each dynamic pose can be configured with:

  • RelevanceQuery: A query against the relevance tags of the main animation instance. Relevance tags identify whether animation state machine nodes are active. This pose will be considered when tags match this query.
  • TagQuery: A query against the tags owned by the movement system component. This pose will be considered when tags match this query.
  • Pose: The animation sequence for this pose.
  • PoseBlend: Controls the blend weights for each body part. Each blend field has detailed comments in the editor.
  • ExplicitTime: If the sequence contains multiple frames, this value controls which frame to play.
  • AimingSweep Pose: If this pose is used for aiming, you can also specify an aiming sweep pose (horizontal aiming is achieved by rotating the spine bone through the default ViewLayer).
序列栈.Pose设置

技巧

For better blending results, try to use single-frame sequences as much as possible rather than multi-frame sequences with distinguish ExplicitTime.

Switching between multi-frame sequences will use timeline jumping, which doesn't achieve the same quality as alternating between two separate sequences.

Examples

This is an example of the Pose Stack overlay system, taken from the MS_Mannequin_PoseStack_Lyra movement definition in the companion project. This movement definition includes four Movement Set configurations: Default, Aiming, Crouching, and Crouching Aiming, where each Movement Set's states anim layer (base locomotion) uses Lyra's unarmed animation package configuration.

Bow Overlay

In the default Movement Set of this movement definition, OverlayMode.Bow is configured as follows:

序列栈.弓案例.1

Note that there are two poses total. The first pose's relevance query specifies "Idle", meaning the first pose plays during idle state. When the first pose's conditions are not met (i.e., non-idle state), the second pose plays.

You achieve this result using just 2 single-frame animations, without needing an entire animation package!

By Extension

Since different Movement Sets can configure different overlay systems, you can set up different Pose Stacks in other Movement Sets like Aiming, Crouching, etc., to create more diverse behaviors.

Below, I've configured different Pose Stacks in the same "Demo" overlay across different Movement Set configurations, resulting in highly diverse outcomes.

序列栈.混合案例.1

This is the final effect of the Demo overlay (the blended poses are completely different across different states):

Not only that

you can also select different overlay implementation between various Movement Set configurations. For example, the Default Movement Set can use "PoseStack", while the Crouching Movement Set uses "SequenceStack". GMS is truly incredibly flexible!

Conditional Selection

The previous examples only used RelevanceQuery to play poses when different state machine nodes are active. You can also use TagQuery for more complex dynamic pose selection.

The diagram below inserts a highest-priority Injured pose into the previous default Movement Set's PoseStack. This pose only plays when the character has the Injured tag and ensures the left arm pose is not affected by the underlying base locomotion.

序列栈.条件性案例.1

The result is as follows (note that the blue box grants the character a 5-second Injured state. The injured pose naturally blends in when the state is applied and naturally blends out when the state expires):

Parallel Pose Stack

Similar to the Pose Stack, but this implementation allows you to play different Poses simultaneously on different body parts, following the pose override order: Head → Arm → UpperBody → FullBody.

To use the Parallel Pose Stack, select ParallelPoseStack in the Anim Layer Setting (Overlay) field of the Movement Set settings.

并行姿势栈.选择

Its basic configuration structure is as follows:

并行姿势栈.数据结构

Each body part can be configured with a set of potential poses for conditional selection!

Example

The diagram below configures a box-carrying pose on the upper body, but when injured, plays an injured belly-touching pose on the left arm while the rest of the upper body continues the box-carrying pose.

并行姿势栈.案例1

The result is as follows (note that box-carrying only uses upper body layering): You can see that when injured, the right hand is still carrying the box.

Pose Curve Settings

In GMS 1.5 and above, poses no longer require curve configuration. Instead, they are configured in data assets, which improves performance and increases flexibility (the same frame pose can have different blend weights in different Movement Sets and overlay modes).

GMS provides an Animation Modifier: AM_CreateLayeringCurves to help you quickly create animation curves.

Curve Explanation:

GMS动画叠层系统.010

Non-Additive Curves:
Determine the adoption level of the pose for that body part (switch-like, e.g., LayerArmLeft=0 completely ignores the left arm pose, LayerArmLeft=1 fully adopts the left arm pose).

Additive Curves:
Determine the retention level of the current Locomotion after overlays a pose (LayerArmLeftAdditive=0 means the pose completely overrides the left arm motion, LayerArmLeftAdditive=0.5 means Locomotion retains half).

Video Tutorial

You can also watch this video to see how I create new overlay modes from scratch (start at 3:05). The video is outdated but can be used to compare old and new version usage.

Video