API Reference

Component

MemberKindPurpose
FindWarpComponent(Actor)Static, pureThe Crimson warping component on an actor, or null
ResolveAndApply(Profile, Montage, Request, OutResult)CallableResolve and plant in one call; returns a handle
ApplyResolved(Result, Montage, Scope, bForceDebugDraw)CallablePlant an already-resolved point
PreviewResolve(Profile, Montage, Request, OutResult)CallableResolve without planting or touching the world
Release(Handle)CallableRelease one planted target; idempotent and safe to call late
ReleaseAll()CallableRelease everything this component planted
GetActiveLeaseCount()PureHow many targets are currently leased
GetEngineWarpingComponent()PureThe engine UMotionWarpingComponent, creating it if absent
GetLastResult()PureThe last result resolved, for debug tooling

Blueprint library

FunctionKindPurpose
CrimsonResolveWarp(Avatar, Profile, Montage, Request, OutResult)CallableThe whole decision, without planting anything
GetCrimsonWarpRadius(Actor)PureThe horizontal collision radius used for standoff math
WasCrimsonWarpPlanted(Result)PureWhether that outcome actually planted a target
DescribeCrimsonWarpResult(Result)PureOne line explaining what happened and why

Ability task

MemberKindPurpose
CrimsonWarpToTarget(OwningAbility, Profile, Montage, Request)FactoryCreates the task. This is the Crimson Warp To Target node
OnResolvedDelegateA target was planted. Carries the full result
OnFailedDelegateNothing was planted. Carries the result and its outcome
GetMutableWarpProfile()Pure, internalThis activation's profile copy. Used by the node's override pins

Profile settings

PropertyDefaultPurpose
WarpTargetNameAttackTargetMust match the montage notify's warp target name exactly
TargetSourceProviderWhere to look for a target
TargetPurposeTagNonePassed to the provider so one implementation can answer differently
bRequireCommittedTargetfalseIgnore soft targets and warp only toward a deliberate lock
ScaleBand(0.30, 1.30)Usable reach as a multiplier of authored travel. Only the upper bound clamps
bUseExplicitReachOverridefalseReplace the band with absolute centimetres
MinReach / MaxReach0 / 500The absolute band, when the override is on
TooFarPolicyClampToMaxReachWhat to do when the target is out of reach
ContactOffset0Added on top of both capsule radii
bUseTargetCapsuleRadiustrueInclude the target's own radius in the standoff
ArrivalTolerance5A gap below this counts as already arrived
bClampToGeometrytrueSweep the path and stop at blocking geometry
GeometryObjectTypesWorldStaticWhat counts as blocking
GeometrySkin2Clearance kept from a blocking hit
bFaceTargettrueFace the aim point as the warp runs
MaxTurnSeconds0Cap on how long the turn may take. Zero uses the notify's own settings
ScopeUntilTaskEndsHow long a planted target lives
bAlwaysDrawDebugfalseDraw this profile's resolves regardless of the console variable

Result

FieldMeaning
OutcomeWhy the warp came out this way
WarpTargetNameThe name this resolved for
TargetActorWhat it resolved toward
WarpPoint / WarpRotationExactly what was handed to the engine
PredictedStartWhere the character is predicted to be when the window opens
DistanceToTargetHorizontal distance from the predicted start to the target
StopDistanceBoth capsule radii plus the contact offset
GapToCloseDistance actually needing travel, floored at zero
NaturalTravelWhat the window travels unassisted
AppliedTravelWhat the character will actually travel
RequiredScalePre-clamp ratio - what stock Motion Warping would have applied
AppliedScalePost-clamp ratio. 1.0 means the animation plays as authored
MinUsableReach / MaxUsableReachThe reach band in centimetres
MaxTurnSecondsThe turn cap in force for this activation
WindowStartTime / WindowEndTimeThe warp window's span
WindowCountHow many windows share this name
FirstWindowScaleThe scale the first window alone will apply. Diagnostic
bGeometryClampedWhether geometry shortened the path
bServerCorrectedWhether the server overruled a client's point

Enums

EnumValues
ECrimsonWarpOutcomeNotResolved, InRange, CompressedTooClose, ClampedTooFar, ClampedByGeometry, AlreadyInPlace, NoTarget, NoWarpWindow, NoRootMotion, NotRootMotionMontage, Blocked
ECrimsonWarpTooFarPolicyClampToMaxReach, PlayUnwarped, BlockActivation, ReportOnly
ECrimsonWarpTargetSourceProvider, Explicit, ProviderThenExplicit, ExplicitThenProvider
ECrimsonWarpScopeUntilTaskEnds, UntilMontageEnds, Manual

Request

FieldPurpose
ExplicitTargetWarp toward this actor instead of asking the provider
ExplicitLocationWarp toward this world location, when no explicit actor is set
bHasExplicitLocationEnables the location above
MontagePositionAtResolveMontage position when resolving. Zero when resolving before playback
Per-activation tuning is not on the request
Values such as the turn cap and the reach band are overridden with the node's own pins, which write onto a per-activation copy of the profile. See How-To: Override Values Per Attack.

Target provider (CrimsonCommon)

These types live in CrimsonCommon, not in this plugin, so a targeting system can answer without depending on motion warping.

MemberPurpose
ICrimsonWarpTargetProviderThe interface to implement. Blueprint-implementable
GetCrimsonWarpTarget(Query, OutResult)Return the current target, or false when there is none
GetCrimsonWarpTargetPriority()Higher wins when an actor carries several providers
FindBestWarpTargetProvider(Actor)Static. The highest-priority provider on an actor
FindWarpTarget(Actor, Query, OutResult)Static. Find the best provider and query it in one call
FCrimsonWarpTargetQueryPurposeTag, InstigatorActor, MaxSearchDistance
FCrimsonWarpTargetResultTargetActor, AimComponent, AimSocketName, AimWorldLocation, bIsCommitted

Project settings

SettingDefaultPurpose
bWarnOnMissingWarpTargettrueWarn when a warp window goes live with nothing planted
MissingWarpTargetWarnInterval5Seconds between repeats of that warning
ServerAcceptTolerance100How far a client's point may sit from the server's before it is clamped
LeaseSlackSeconds1Extra time on the target expiry watchdog
bAllowDebugDrawingtrueProject-wide gate for this plugin's debug drawing
DebugDrawDuration2How long debug drawing persists

Console

CommandPurpose
Crimson.MotionWarping.Debug 1Draw the reach rings, the path taken, and the standoff ring
Crimson.MotionWarping.DevToolsOpen the live Play In Editor inspector

Editor tooling

Create a profile from the Content Browser: right-click -> Crimson Plugins -> Motion Warping -> Warp Profile.

The plugin also ships an MCP toolset, so an AI assistant can inspect warping directly. It appears only when Crimson MCP is enabled in Project Settings -> Crimson -> Crimson MCP; see CrimsonCommon -> How-To: Manage MCP Toolsets.

ToolNeeds PIEPurpose
CheckWarpMontageNoRun the montage authoring checks against an asset, optionally against an expected warp target name
ListWarpActorsYesEvery actor with a warping component, its lease count and its last outcome
DescribeLastWarpYesThe full derivation behind one actor's last warp
ListWarpTargetsYesPlanted targets and live modifier states, flagging any window running with no target
SetWarpDebugDrawNoToggle the in-world reach rings

Gameplay tags

Shipped for the profile's TargetPurposeTag, so one provider can answer differently depending on what is asking. Providers may ignore them.

TagFor
CrimsonMotionWarping.Purpose.MeleeClose-range attack looking for what it is about to strike
CrimsonMotionWarping.Purpose.RangedRepositioning for a ranged attack
CrimsonMotionWarping.Purpose.DashMovement closing or opening a gap
CrimsonMotionWarping.Purpose.FinisherExecution that must line up with one specific victim
CrimsonMotionWarping.Purpose.TraversalVault or mantle, where the target comes from geometry