CrimsonMotionWarping

Character owners only
This plugin drives Unreal's Motion Warping, which only builds a warping adapter for ACharacter. A non-character pawn logs an error and the component stays inert. The character adapter is also the only one that reconstructs correctly during client prediction replay, so there is no supported non-character path.

CrimsonMotionWarping makes lunges, dashes and gap-closers land correctly: one ability node picks the target, keeps the warp within the distance the animation was authored for, stops the character at striking distance instead of inside the enemy, and turns Motion Warping's silent setup mistakes into visible errors. Motion Warping distorts real authored root motion to land a character on a target, which keeps weight shift and foot planting intact 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 divided by remaining-animation-distance with no clamp of any kind, so a lunge authored to travel 200cm will stretch to 2000cm and slingshot the player across the arena.

This plugin wraps the engine's warping rather than replacing it. Your existing montages and Motion Warping notifies keep working unchanged; the plugin simply computes a better warp target, so the engine's own skew math never receives one outside the animation's authored intent.

What it fixes

SituationStock Motion WarpingWith this plugin
Target beyond the animation's reachStretches without limitClamped to an authored band, reported as ClampedTooFar
Warp target name typoModifier disables itself, plays unwarped, Verbose log only, never re-enablesBlueprint compile error, asset validation error, and a runtime warning
Where the character stopsOn the target's originAt a standoff derived from both capsule radii
Warp path crosses a wallWarps through itShortened to the blocking hit, reported as ClampedByGeometry
Warp target left over from a previous montageSilently warps to the old targetWarned, and released by three independent nets
Turn speedSpread across the whole warp windowBounded by Max Turn Seconds

What's included

SystemKey typesPurpose
Warping componentUCrimsonMotionWarpingComponentResolves and plants warps, owns the target leases and the missing-target warning
Profile assetUCrimsonWarpProfileThe per-attack-family policy a designer authors
Ability nodeUCrimsonAbilityTask_WarpToTarget, UCrimsonWarpTaskFactoryThe single Blueprint node, Crimson Warp To Target
ResultFCrimsonWarpResolveResult, ECrimsonWarpOutcomeThe full derivation behind a warp, not just its answer
Target contractICrimsonWarpTargetProviderImplement to supply targets without depending on this plugin
Blueprint libraryUCrimsonMotionWarpingLibraryPreview a warp without planting anything
ValidationAsset validator plus compile-time node checksTurns Motion Warping's silent failures into errors
DiagnosticsCrimson.MotionWarping.Debug, Crimson.MotionWarping.DevToolsIn-world range rings and a live PIE inspector

Plugin dependencies

GroupDependencyNeeded for
Crimson pluginsNoneFully standalone
Engine modulesMotionWarpingUMotionWarpingComponent, UMotionWarpingUtilities
Engine modulesGameplayAbilitiesUAbilityTask, FGameplayAbilityTargetData
Engine modulesGameplayTasksUGameplayTask, the ability task's base
Engine modulesGameplayTagsThe profile's target purpose tag
Engine modulesDeveloperSettingsProject settings
Engine modulesNetCore (private)FVector_NetQuantize100 on the wire
Engine modulesProjects (private)Gameplay tag ini registration
Engine modulesDataValidation (editor)The montage validator
No dependency on a targeting system
Automatic targeting runs entirely through ICrimsonWarpTargetProvider, an interface this plugin owns. Whatever picks targets in your project - a lock-on component, an AI targeting component, a Blueprint actor component - implements that interface, and this plugin never references it directly. (CrimsonCore - requires all Crimson plugins) ships UCrimsonCoreLockOnWarpTargetProvider, which answers with the camera lock-on target.

Where to go next

Using with other Crimson plugins
CrimsonMotionWarping works alone. When you own other Crimson plugins, CrimsonCore contains the full-suite wiring for it in Source/CrimsonCore/{Public,Private}/Integration/MotionWarping/: UCrimsonCoreLockOnWarpTargetProvider answers ICrimsonWarpTargetProvider with the camera lock-on target, and UCrimsonCoreLockOnWarpTargetSubsystem adds it to receiver pawns. To wire it yourself, see CrimsonCommon -> Concept: Connecting Crimson Plugins; for what CrimsonCore installs, see CrimsonCore -> Concept: The Integration Layer.
Which path do I choose?
Setting this up for the first time: Quick Start.
Already running and tuning how it feels: How-To: Tune Reach and Standoff and How-To: Control Turn Speed.
One attack needs different numbers: How-To: Override Values Per Attack.
Something is not warping and you want to know why: How-To: Diagnose a Warp.
You want the model rather than the recipe: Concept: How Reach Is Derived.