An MMO character team cannot hand-author a graph per character. MotionTerminal drives a spectrum of rigs and detects when changes break one.

The architecture

MotionTerminal architecture: one Template AnimBP drives a rig roster; authoring is composed from existing MCP tools while the shipped plugin holds the verification and introspection layer, gated per commit and per milestone.

The motion

Grounded locomotion. One Template handles idle, locomotion and airborne states. Ground-adaptive foot IK plants contact and settles weight across slopes and stairs, then gates off in the air.

Layered actions. Upper-body montages blend from the spine up while locomotion weights remain steady, with per-rig tests.

One anim set, N rigs. The same clips drive every roster member. Compatible rigs need zero retargeting. A 198-bone character uses the IK Retargeter to carry the motion onto a different skeleton.

I worked the same problem on The Lion, the Witch and the Wardrobe, doing motion editing and procedural retargeting for the autonomous crowd agents, moving authored motion onto bodies it was not captured for. The tooling has changed since, but the constraints have not: proportions differ, contact has to survive, and the result has to hold without someone fixing each instance by hand.

The contract

Clips are instance-editable variables rather than hard-wired assets, keeping the Template as the single source of truth. Characters override data, not structure. Per-character variation uses an Animation Layer Interface seam. The animator-to-engineer interface has three variables: Speed, IsFalling, UpperBodyState.

Verified per rig, per commit

Every rig's graph serializes to canonical JSON and is diffed against a reviewed baseline. Regeneration requires code review, and the gate identifies graph changes. The topology tier runs headless in under two minutes on every commit. Play-In-Editor assertions run against a real rendering hardware interface per milestone to check states, weights and IK gating. Every roster clip passes a motion-varies check that rejects frozen bakes.

Live per-node introspection

Existing MCP tooling defers per-node weights because no single public getter exists. Four mechanisms expose them through engine-API C++ without patching the engine. On hardware, MCP returns the full live weight tree: root through Control Rig, slot, nested state machines, cached pose and sequence player. Every weighted node is GUID-keyed to the authored graph.

Authoring composes monolith (MIT) and Epic's first-party toolsets. It ran agentically over MCP with committed transcripts that rebuild the project.

Ken Faiman · Character systems, simulation & applied AI · faiman.com