The animation graph of a character skin: every clip the character can play, and the
tracks, masks, sync groups and blend rules that the clips use. A skin links its graph
from SkinAnimationProperties.animationGraphData.
Playing a clip. The game plays an animation by name, for example Idle1, Run,
Attack1 or Spell1. The name is hashed (FNV-1a 32 of the lowercased name) and looked
up in mClipDataMap. A unit can carry run-time overrides that replace one name with
another before the lookup. A name that is not in the map plays nothing: the graph has no
fallback to another clip. The name none is always accepted and plays nothing.
What the game asks for. A unit asks for Run while it moves and Idle1 while it
stands, on every update, not only when a clip ends. A clip that already plays is not
started again. While an attack or spell animation plays on the track of Run or
Idle1, the unit does not ask, so that clip plays to its end and then cross-fades into
Run or Idle1. The game plays
Turn by itself only for graphs that use a turn updater, see
TurnAngleParametricUpdater.
Playing a clip again. A logic clip that is played while it already plays is not
restarted in place. The client starts a new run of it next to the old one. The old run
ends when the new run's clips replace its clips on their tracks.
Clips. A clip is one of several kinds. Two kinds produce a
pose and play on a track: AtomicClipData, which plays one
.anm file, and ParametricClipData, which blends
several of them. The other kinds produce no pose. They decide which clips to start: in
sequence, at the same time, at random, or from a condition.
Tracks. A clip that produces a pose plays on the track it
names. Each track holds one clip at a time and cross-fades from the old clip to the new
one (mBlendDataTable). The client then combines the active tracks into the final pose,
in priority order and limited by each clip's mask.
Events. A clip can carry events that fire at given frames:
particle effects, sounds, submesh visibility, joint overrides and more.
State graphs. A graph with entries in AnimStateGraphEntryClips works differently:
it runs as a state machine, and a request to play a name becomes a signal to that
machine.