CrimsonMotionWarpingComing to FabPersonal $9.99 · Professional $19.99
Join the Discord for updates

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.

Video coming soon

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.

Video coming soon

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.

Video coming soon

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.

Video coming soon

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.

Video coming soon

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?
No — it wraps it. Your existing montages and Motion Warping notify states keep working exactly as they are; the plugin computes a better warp target and hands it to the engine's own Skew Warp. Setup is a notify state, a profile data asset, a component, and one node before you play the montage.
Do I need C++ to use it?
No. The component, the Blueprint library, the Crimson Warp To Target ability task and every profile property are Blueprint-accessible, and the target provider interface is Blueprint-implementable. You can even add a property to a Blueprint subclass of UCrimsonWarpProfile and tag it ExposeOnWarp to get a new override pin — no C++ at all.
Does it work on any pawn?
No — 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?
Yes, and the authority split is the design rather than a caveat: the owning client decides who and the server decides how far. Use 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?
The plugin never picks targets itself. It asks the avatar for an 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?
No. Automatic targeting runs entirely through 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.

Personal$9.99For individuals & teams under $100K revenueComing to Fab — join the Discord
Professional$19.99For companies over $100K revenueComing to Fab — join the Discord