How-To: Author Motion Presets
Motion presets live in a UCrimsonCombatTextMotionSet asset as ordinary editable rows keyed by gameplay tag. Adding your own needs no C++.
1. Create the asset
Content Browser right-click > Crimson > Combat Text > Motion Set. A new asset arrives pre-seeded with five editable built-in presets, so you are never staring at an empty map:
| Preset tag | Feel |
|---|---|
CrimsonCombatText.Motion.FloatUp | Gentle straight rise with a soft ease-out. The everyday damage number. |
CrimsonCombatText.Motion.ArcOut | Rises then falls away in an arc. Classic ballistic combat text. |
CrimsonCombatText.Motion.Burst | Wide fast scatter, short life. Multi-hit and AoE. |
CrimsonCombatText.Motion.CritPunch | Hard scale punch, minimal drift, long hang time. |
CrimsonCombatText.Motion.Static | No movement. Fades in place. Good for status words. |
Point the registry's MotionSet at this asset, then reference presets from a style's MotionPreset tag.
2. Add your own
Add a gameplay tag under CrimsonCombatText.Motion and a matching row. Tune the amplitudes first, then shape the curves:
| Field | What to reach for it for |
|---|---|
Duration | How long it lives |
RiseDistance | How far it travels up over the full lifetime |
SpreadDistance | Lateral amplitude at full fan deflection |
RiseCurve | The shape of the rise. Empty = linear |
SpreadCurve | The shape of the lateral travel. Empty = linear |
ScaleCurve | Punch and settle. Empty = constant 1 |
OpacityCurve | Fade. Empty = opaque until 80%, then linear to 0 |
Duration restretches the whole motion without redrawing anything.3. Stop hits stacking
bUseSpreadFan deflects concurrent hits on the same target to alternating sides. Slot 0 goes straight up, then -1/N, +1/N, -2/N and so on out to FanWidth. It is deterministic, so the same burst always reads the same way; RandomJitter adds controlled wobble on top if perfect regularity looks mechanical.
SpreadDecayTime in project settings controls how long a burst keeps fanning outward before the next flurry restarts from center.
Overriding motion from a modifier
A modifier's MotionPresetOverride swaps the motion wholesale. Pointing a Crit modifier at CrimsonCombatText.Motion.CritPunch gives every critical hit the punch motion, whatever base style it resolved to - no per-damage-type rows needed.