Range-aware motion warping — an attack lands at striking distance and never stretches past the distance its animation was authored to travel.
GAS · Combat · Unreal Engine 5
A 200cm lunge should never travel 2000cm.
Motion Warping distorts real root motion to land a character on a target, which keeps weight shift and foot planting in a way an interpolated SetActorLocation never does. What it has no opinion about is how far — the engine scales root motion by distance-to-target over remaining-animation-distance with no clamp of any kind. CrimsonMotionWarping wraps that math rather than replacing it, so the engine's own skew never receives a target outside the animation's authored intent.
Why CrimsonMotionWarping
Your existing montages and Motion Warping notifies keep working unchanged — the plugin simply computes a better warp target, and tells you exactly how it got there.
Reach as a multiplier, not a distance
Scale Band bounds an attack as a multiple of what its own warp window was authored to travel — (0.30, 1.30) by default. Swap a 500cm lunge for a 300cm one and every threshold moves with it, because there is no authored distance left to drift out of sync.
One profile for a rat and a boss
The character stops short by both capsule radii plus a Contact Offset, read at runtime. A 200cm-wide boss is approached from further out automatically, so a single profile asset serves every enemy size with no per-enemy data to author.
The typo that logs nothing, caught three ways
A mistyped warp target name is invisible in stock Motion Warping: the modifier disables itself, the montage plays completely unwarped, nothing is logged above Verbose, and it never re-enables. Here it is a Blueprint compile error, an asset validation error, and a runtime warning.
Client picks who, server picks how far
Target providers are client-side by design — a dedicated server holds no lock-on state for a remote player. The owning client reports its conclusion on the ability's target data channel, keyed to the prediction key; the server validates it against its own reach and keeps the client's direction while imposing its own distance.
Turns that commit, in seconds you set
The engine spreads rotation across the whole warp window, which on a long attack reads as lazy drift — and its own multiplier is a fraction of the window, so one value means two durations on two montages. Max Turn Seconds measures the angle actually left and drives a constant rate. 0.15–0.25 reads as snappy.
Rings you can see, numbers you can read
Crimson.MotionWarping.Debug 1 draws the whole range model in-world — lower bound, unassisted 1.0x travel, upper bound, and the standoff ring around the target. Crimson.MotionWarping.DevTools opens a live PIE inspector with the full derivation and a Server vs Clients agreement tab.
A closer look
Distance-to-target is not distance-to-travel
Take a 500cm lunge and two 40cm capsules. A target at 250cm needs neither the authored 500cm — which sails 250cm past it — nor the raw 250cm, which ends up inside it. It travels the 170cm gap. That single distinction is what stock Motion Warping invites you to get wrong, and it is why the same asset can stop correctly against any target without a per-attack distance to maintain.
Measured from where you will be
The engine captures a modifier's starting transform when its window opens, not when the ability activates. On a montage with a wind-up step, measuring from the character's current position measures from an origin it will never occupy — so the plugin predicts the window-opening position by adding the montage's pre-window root motion, and the asset validator warns when a montage travels more than 50cm before its window opens.
Out of range is a decision, not an accident
Too Far Policy picks what happens when a target sits beyond the band: clamp and fall short readably, play the montage exactly as authored, block activation so a combo selector can choose something else, or report only and warp the whole way like stock. Every activation reports an outcome — ClampedTooFar, CompressedTooClose, ClampedByGeometry, Blocked — so a graph can branch on it instead of guessing.
One attack, one number, no duplicate asset
Crimson Warp To Target grows an Advanced pin for every profile property tagged ExposeOnWarp, seeded from the chosen asset. Touch one and only that value changes for this activation — on a throwaway per-activation copy, so overriding reach in one ability can never re-tune every other attack sharing the profile. Untouched pins are skipped at compile time, so the asset stays the source of truth.
Technical details
- Engine
- UE 5.8
- Platforms
- Windows, Mac, Linux
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- Yes
- Dependencies
- CrimsonCommon, MotionWarping, GameplayAbilities, GameplayTasks, GameplayTags, DeveloperSettings
- Last updated
- August 2026
Frequently asked questions
Does it replace Unreal's Motion Warping?
Do I need C++ to use it?
UCrimsonWarpProfile and tag it ExposeOnWarp to get a new override pin — no C++ at all.Does it work on any pawn?
ACharacter owners only, and that is a hard limit rather than a gap. Unreal only builds a warping adapter for ACharacter, and the character adapter is the only one that reconstructs correctly during client prediction replay. A non-character pawn logs an error and the component stays inert.Does it work in multiplayer?
Local Predicted for anything a player triggers, keep Geometry Object Types on World Static so the collision clamp stays deterministic, and test on a dedicated server — a listen server host is both authority and locally controlled, so it never takes the path that matters.Where do targets come from?
ICrimsonWarpTargetProvider, an interface that lives in CrimsonCommon so any targeting system can answer without depending on this plugin. UCrimsonLockOnComponent from CrimsonCamera already implements it, and you can pass a target explicitly instead by setting Target Source to Explicit.Does it depend on CrimsonCamera?
ICrimsonWarpTargetProvider in CrimsonCommon — lock-on happens to implement it, and so can your own AI targeting component. This plugin includes nothing from CrimsonCamera. The only Crimson dependency is CrimsonCommon, per the suite's Cardinal Rule.Stop slingshotting players across the arena
A montage window, a profile, a component and one node — the Quick Start gets one attack warping onto a target end to end, then hands you range rings and a live inspector for everything after that.
Pricing
CrimsonMotionWarping is sold on Fab under Epic’s two standard licenses — both include the full plugin, source, and updates.
Completes your setup
Built on the free CrimsonCommon foundation, so it pairs cleanly with the rest of the suite:
Data-driven hit detection for melee, area, hitscan and projectiles.
- GAS Target Data
- Interpolated Sweeps
- Composable Filters
- Hit Zones
- Pooled Projectiles
A full Gameplay Ability System layer for UE5.
- Custom ASC & Abilities
- Slot-Based Augments
- Modifiers & Phases
- Graph-Based Combos
Mode-stacked, data-driven camera system with smooth blends.
- Stackable Camera Modes
- Runtime Push/Pop
- Smooth Blends
- Blueprint-Authored