# 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. ```{image} ../_static/screenshots/shot-control-panel-picker-mockup.svg :alt: control panel picker (placeholder mockup) :width: 100% ``` Save the real screenshot as: `shot-control-panel-picker.png` ```{image} ../_static/screenshots/shot-control-panel-picker.png :alt: control panel picker (real screenshot) :width: 100% ``` ## 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 {doc}`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 {doc}`tag-grammar`.