GMS 1.5 Release Notes

This section documents the updates in the General Movement System (GMS) 1.5 version, including new features, improvements, companion project adjustments, engine version support, and migration guides.

Cover.GMS
罗传月武(YueWu)

Author

罗传月武(YueWu)

专注游戏开发和Web技术。

Created: Jul 31, 2025Updated: Sep 15, 2026

Table of contents

GMS1.5 Version

This section documents the updates in the General Movement System (GMS) 1.5 version, including new features, improvements, companion project adjustments, engine version support, and migration guides.

Upgrade Warning

This update involves a certain degree of refactoring, with some systems changing their data configuration formats. Although GMS provides migration methods, always back up your project before upgrading. The automated migration results are not 100% guaranteed to be accurate, so please review the final animation effects after migration.

For C++ Users

To avoid data loss, deprecated fields have not been removed. When compiling and packaging the project, warnings may appear, but they will not affect packaging. Deprecated fields will be completely removed in version 1.6.

Minimum Engine Support

My own project has been upgraded to Unreal Engine 5.6, so the minimum supported version for GMS is now 5.6. While you can compile GMS in older versions, the GMS companion project has been saved in Unreal Engine 5.6, so backward compatibility cannot be provided.

Animation Overlay System

Origin

I've always believed that the Layering system in ALS could be more flexible and versatile. To that end, I attempted to improve the usage of ALS's Layering system in GMS, renaming it the Pose-Based Layering System. Additionally, I introduced a new Stack-Based Animation Layering System.

However, these two systems still have their respective strengths and weaknesses:

However, these two systems still have their respective strengths and weaknesses:

  • Pose Layering: While it can achieve effects similar to ALS's Layering with good results, by default, I only provided simple poses for moving and non-moving scenarios (customization is still required in the project) and dynamically selected overlay poses via Tags. It cannot apply a specific overlay pose only when certain animation states are active. It also cannot blend multiple poses simultaneously—e.g., applying some poses to the left hand and others to the right hand. Since ALS uses single-frame blending, the curves for single-frame Poses only change when the overlay pose changes, but constantly sampling curve values for each body part via curves is inefficient.
  • Stack Poses: Stack poses can blend multiple animations in parallel on different body parts when certain animation states are active. However, due to traditional upper/lower body blending, the effect is not as good as single-frame Pose blending by curve weights on body parts.

Clearly, GMS should combine the advantages of both to provide a better solution.

Pose Stack Animation Overlay System

PoseBasedOverlay has been renamed to PoseStack and refactored, with ParallelPoseStack newly added.

For more details, see Pose Stack Overlay System.

Migration

Right-click on your Movement Definition→ ScriptedAssetActions → GMS|Migration → MigratePoseBasedOverlayToPoseStack.

This will convert the original configuration format to the new one and clear the original field data.

Sequence Stack Animation Overlay System

StackBasedOverlay has been renamed to ParallelSequenceStack, with new SequenceStack added.

For more details, see Sequence Stack Overlay System

Migration

If you don't need to play different animation sequences in parallel on multiple body parts, it's recommended to convert ParallelSequenceStack to SequenceStack.

Right-click on your Movement Definition→ ScriptedAssetActions → GMS|Migration → ConvertParallelSequenceStackToSequenceStack.

Control Settings Changes

In the MovementControlSetting, the rotation system's configuration has been improved by introducing polymorphic ViewDirectionSetting and VelocityDirectionSetting. Rotation-related parameters in MovementState have been migrated to DirectionSetting.

Polymorphic InstancedStructs are now used to represent different rotation control methods, instead of a massive struct + enum for differentiation. This change makes the rotation code more modular and facilitates adding more types of control logic in the future.

Migration

To avoid data loss, the original fields have been hidden and made non-editable. When the new rotation settings fields are empty, re-saving the MovementControlSetting will migrate the old format to the new rotation settings.

API Changes

The MovementDefinitions array on the MovementSystemComponent has been removed, as it introduced unnecessary complexity.

As a user, you only need to focus on how to set the component's current definition (via SetMovementDefinition) without worrying about whether the component's definition list contains that definition.

You can also dynamically select which MovementDefinition to use externally via more flexible systems (e.g., Chooser or tag-based).

Base Locomotion Improvements

  • Fixed jump falling animations not playing correctly.
  • Adjusted Start details.
  • Added support for BasedMovement.
  • Start now supports toggling dynamic playback rate adjustments.

SkeletalControl Layer Improvements

The default skeletal control layer now allows dynamically enabling/disabling hand IK based on Tags changes.

For example, in certain Movement Sets, hand IK may not be needed under VelocityDirection, but under ViewDirection, since the ViewLayer might use AO (which could affect hand position), IK needs to be enabled.
You can set it up so that when the character has RotationMode.VelocityDirection, hand IK is disabled.

Companion Project

All content in the companion project, including the levels in the Demo section, has been updated to ensure consistency with the documentation and the latest code.

Therefore, only Movement Definitions you created additionally will require data migration.

Mover Support

Still in the experimental stage. Since MoverComponent lacks Acceleration like CMC, pivot animations won't trigger in base locomotion. I'll iterate further on this in future versions.

Project Migration

The path structure for some files has changed. Some files redirects already added to plugin's config.
When you are migrating new files, try deleted the already renamed files.

cpp
1[CoreRedirects]
2;GMS 1.4 -> 1.5 refactoring.
3+ClassRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimLayer_Overlay_PoseBased",NewName="/Script/GenericMovementSystem.GMS_AnimLayer_Overlay_PoseStack")
4+ClassRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimLayerSetting_Overlay_PoseBased",NewName="/Script/GenericMovementSystem.GMS_AnimLayerSetting_Overlay_PoseStack")
5+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_PoseOverlaySetting",NewName="/Script/GenericMovementSystem.GMS_OverlayModeSetting_PoseStack")
6+ClassRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimLayerSetting_Overlay_Stack",NewName="/Script/GenericMovementSystem.GMS_AnimLayerSetting_Overlay_ParallelSequenceStack")
7+ClassRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimLayer_Overlay_Stack",NewName="/Script/GenericMovementSystem.GMS_AnimLayer_Overlay_ParallelSequenceStack")
8+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_StackedOverlaySetting",NewName="/Script/GenericMovementSystem.GMS_OverlayModeSetting_ParallelSequenceStack")
9+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimData_StackedOverlays",NewName="/Script/GenericMovementSystem.GMS_ParallelSequenceStack")
10+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimData_Overlay",NewName="/Script/GenericMovementSystem.GMS_ParallelSequenceStackEntry")
11+PropertyRedirects = (OldName="/Script/GenericMovementSystem.GMS_OverlayModeSetting_ParallelSequenceStack.StackedOverlays",NewName="/Script/GenericMovementSystem.GMS_OverlayModeSetting_ParallelSequenceStack.Stacks")
12+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_OverlayStackState",NewName="/Script/GenericMovementSystem.GMS_ParallelSequenceStackState")
13+ClassRedirects = (OldName="/Game/GenericGame/MovementSystem/Core/AnimLayers/ABPT_GMS_Layer_Overlay_PoseBased.ABPT_GMS_Layer_Overlay_PoseBased_C",NewName="/Game/GenericGame/MovementSystem/Core/AnimLayers/ABPT_GMS_Layer_Overlay_PoseStack.ABPT_GMS_Layer_Overlay_PoseStack_C")
14+ClassRedirects = (OldName="/Game/GenericGame/MovementSystem/Core/AnimLayers/ABPT_GMS_Layer_Overlay_StackBased.ABPT_GMS_Layer_Overlay_StackBased_C",NewName="/Game/GenericGame/MovementSystem/Core/AnimLayers/ABPT_GMS_Layer_Overlay_ParallelSequenceStack.ABPT_GMS_Layer_Overlay_ParallelSequenceStack_C")
15
16+StructRedirects = (OldName="/Script/GenericMovementSystem.GMS_AnimData_OverlayEntry_Pose",NewName="/Script/GenericMovementSystem.GMS_PoseStackEntry")
17