States: everything one pose can drive

A State is far more than a transform. It is one FMovaIxActionState, carrying a core Transform bundle plus optional groups that fire when a keyframe referencing it is reached.

control panel picker (placeholder mockup)

Save the real screenshot as: shot-control-panel-picker.png

control panel picker (real screenshot)

Transform (always present)

Relative Location, Rotation, Scale, and bVisible. Deltas compose relative to the target's start, its @Zero pose, or an OffsetTarget, per the owning Group's OffsetMode.

Audio

  • Trigger: a one-shot sound (fade, offset, pitch, volume, trim) fired the instant the keyframe is reached.

  • Continuous: a looping sound that plays for as long as the state is active, with its own fade/pitch/volume and optional Attenuation.

Niagara

A System spawned at the keyframe, attached to a resolved Target component with an Offset. OneShot fires a burst and detaches; WhileActive keeps the effect running until the state is left (a torch flame, a force field hum).

Physics

  • Impulse: a one-shot push, applied at the keyframe.

  • ContinuousForce: a per-frame force, with local application points, active while the state holds (a fan's wind zone, a conveyor's drag).

  • Vibration: procedural amplitude/frequency/impulse shaking for rumbling machinery, no baked animation required.

  • Travel-speed clamps: cap a state's segment by cm/s or deg/s and the timing auto-times by distance: the same "go to floor 3" state takes proportionally longer than "go to floor 1" without a separate setup step.

Visuals

LightColor / LightIntensity / LightTemperature when the target is a light component, and per-slot Material overrides for any primitive.

Animation

An AnimSequence or AnimMontage played on a rigged (skeletal) target, with BlendIn, bLooping, PlayRate: usable alongside or instead of the procedural keyframes, so a hand-animated character interaction and a procedurally-moved prop share the same setup surface.

Params

A gameplay payload for your own branching logic: an Action name to run elsewhere, a Number, a Tag, and free Text. Read these from Blueprint on the state-reached event to drive quest flags, counters, or dialogue triggers without adding a new system.

Special states are not written states

@Zero, @Current, @Start, @Loop, @Stop, @StopNow are runtime markers resolved by logic (see The Model), not entries you create in ActionStates, they are always available and the validation chips never mark them unresolved.

When a state is actually recorded

A target's state is written when the animation reaches that keyframe, not when it starts moving. A drawer halfway open is recorded as neither open nor closed.

To keep gates usable mid-move, the runtime also records where a target is heading the moment playback starts, and clears it on arrival. A tag picks which of the two it means:

Written

Reads as

:Open

heading there or already there: the default

:=Open

fully arrived

:~Open

still traveling

It stops two colliding drawers from both opening: the second asks ?@Other:!Open, false while the first is still sliding. See Tag Grammar Reference.