AI tools: Characters and animation
Rigs, poses, clips, Motion AI, faces, clothes, holding and weapons. 80 tools. You see every step your AI takes and can undo any of them.
active_body
Euphoria-style active bodies while playing: make a character physical (a ragdoll that follows its animation through muscles and pins) and push it, hit a limb, or make it drunk; then read every active body's phase (reacting: swaying and stepping to keep its balance; falling: balance lost, muscles bracing; down), its pins and muscles, how far its weight drifted, the stagger steps it took and what happened. Bullets on live characters already use this.
| Argument | Type | What it does |
|---|---|---|
blast | list of number | An explosion at this point (no target needed): every character in its radius is thrown up and out. |
corpses | settle / simulate | Dead bodies at rest turn static so nothing slides them (settle, the default), or stay simulated (as before 11-01, for comparing). The report lists each corpse's pelvis drift over the last 10 s. |
limb | string | Strike this limb instead of pushing the chest (head, chest, belly, pelvis, upperarm.L, forearm.R, thigh.L, shin.R ...). |
mode | steady / drunk | drunk: weak pins and a sway that keeps him stumbling. |
power | number | The blast's push at its centre, newton-seconds (default 600). |
push | list of number | An impulse in newton-seconds (world x, y, z): 60 is a shove, 150 a hard push, 300 knocks a man down. |
radius | number | The blast's reach, metres (default 6). |
release | boolean | Hand the target back to plain animation now. |
target | string | The character (by name). |
throw | boolean | Throw a 0.5 kg ball at the target's head from 6 m in front at 12 m/s (the flinch station). |
anim_graph core
A character's animation state machine (3D): states (a clip, "auto" for the locomotion blend by speed, layer=upper over the legs, move=<move_hitbox move> for a combat attack with its hit windows, blend= for a blend space by any param: blend=speed:Idle@0,Walk@1.4,Run@4 or 2D blend=right,forward:Clip@x/y,... for strafing), transitions (on a press, if a param, done, after seconds; blend=SECONDS its cross-fade), combos (a state's cancel window lets the next press chain), input buffering. preset: locomotion, melee_combo (from the character's move_hitbox moves), upper_actions (emotes or reloads over walking), traversal (a ladder state on on_ladder); or states/transitions/start/params/buffer by hand. Always checks it (every clip and move really there, every state reachable). presses [{t, fire} | {t, set: {param: value}}] with seconds: plays it in a private copy and returns the timeline of states (the proof a combo chains). In Play: the live state, params and history. Scripts: self.anim.fire("attack"), .set, .play, onMessage('state'). kit_playbook animation teaches the whole system. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
buffer | number | |
clear | boolean | Remove the state machine (the animator plays its clip again). |
combo | list of string | melee_combo: the moves the attack press chains, in order (default: every move except separate ones). |
entity required | string | The character (name or #id): it needs an animator. |
params | list of string | |
preset | locomotion / melee_combo / upper_actions / traversal | |
presses | list of object | [{"t": 0.3, "fire": "attack"}, {"t": 1, "set": {"speed": 0}}]: played in a private copy. |
seconds | number | |
separate | object | melee_combo: moves on their own press, {move: event}: {"heavy": "heavy"} fires on self.anim.fire("heavy"), from standing or after the combo's last hit. A move named heavy… is separate by default. |
start | string | |
states | list of string | |
transitions | list of string | |
upper | list of string | upper_actions: the clips to play over the legs (each becomes a state fired by its own name). |
anim_view
Animation lab view while playing: draws every nearby character's skeleton (white bones), the hit capsules bullets really test (head red, torso orange, limbs yellow, hands/feet green), the centre of mass with a plumb line to the floor (balance), and the last 24 shots' flights (white at the muzzle to red) with a dot at every impact (red on a limb). Reports the same as numbers: each body's limbs (radius, length), how far its weight sits outside its feet, and each shot's impacts with what it hit and the speed in and out. Session only.
| Argument | Type | What it does |
|---|---|---|
balance | boolean | |
bullets | boolean | |
detail | boolean | List every limb of the nearest body (default false). |
fit | boolean | Check the hit capsules against the nearest body's own skin as drawn now: per limb, the share of skin a bullet finds a hitbox under, the skin's reach from the bone against the capsule's radius, and the worst gap. |
hitboxes | boolean | |
locomotion | boolean | The movement as computed: each third-person player's velocity (cyan), steer (yellow) and path ahead (purple), and every held foot's pin with a line to where the pose wants it (green, yellow, red as it nears a forced step). |
muscles | boolean | Bodies keep muscle tone as they go down (Euphoria-style: knees give first, arms last); false: limp at once (for comparing). |
on | boolean | Draw the lab view (default: leave as it is). |
reach | number | Characters within this many metres of the camera (default 30). |
skeleton | boolean | |
steps | boolean | The step meter: a stride timeline over the player (blue left foot down, orange right, a tick at each landing: green soft, yellow firm, red a stomp) and a ring where each foot lands; the report lists each step's plant time, landing speed, heel or flat first, roll to flat and length, with the cadence and averages. |
steps_reset | boolean | Start the step meter's count again. |
target | string | The body for detail/fit (default: the nearest). |
body_measure
Measure a rigged character's body against real adults, in its bind pose: stature; skin girths (upper arm, forearm, wrist, thigh, calf, neck) as a tape would read them, with what's worn over them; segment lengths and joint heights as fractions of stature (Winter's anthropometric ratios), so a bone in the wrong place shows; where each joint sits in its limb's cross-section (a knee or elbow off-centre or outside the flesh); hands and fingers (hand and foot length, each finger's three segments to the skin tip, index:ring ratio, the curl at rest). sex picks the reference ranges (default: both shown). HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
sex | male / female | Whose reference ranges to score against. |
character_look
Read or set the look (the character creator's person: body and face sliders 0...1 with 0.5 the kit's own, skin tone, hair style and colour, eye colour) an object wears, in Play when Play runs, else in the scene. action get (default) returns the look as JSON; set wears `look` (a whole look) and/or `set` (sliders to change, e.g. {"height": 0.8, "jaw": 0.3}, plus skin_tone, hair, hair_color, eye_color); random wears a random person (seed); preset wears one (ranger, scholar, brawler, elder, runner). Built from the look's creator kit (forge_creator_kit; default Characters/TTR_CreatorKit.glb) the first time, then shared by everyone with that look. In Play the player's look rides the run (every scene, every save slot).
| Argument | Type | What it does |
|---|---|---|
action | get / set / random / preset | |
entity required | string | Who (name or #id). |
look | object | A whole look ({ body: {...}, face: {...}, skin_tone, hair, hair_color, eye_color, kit }). |
preset | string | |
seed | integer | |
set | object | Changes over the current look: slider ids (sex, age, height, fat, muscle, shoulders, hips, legs, arms, neck, head_size, face_width, jaw, chin, cheekbones, brow, eye_size, eye_spacing, nose_size, nose_width, lips, ears) to 0...1; skin_tone 0...1; hair; hair_color / eye_color [r, g, b] linear 0...1. |
clip_blend
A new clip that mixes two (Beta 2 fix tools): `name` = clip `a` with clip `b` mixed in at `weight` (0 all a … 1 all b), b sampled at the same share of its length (a walk with a limp, a tired run, an attack halfway to another). Same as clip_edit with blend_with; kept in the clips file beside the model.
| Argument | Type | What it does |
|---|---|---|
a required | string | |
b required | string | |
name required | string | |
play | boolean | |
target | string | The character's object name (default: the player, else the only character). |
weight | number |
clip_edit
Edit an animation clip without touching its file (Beta 2 fix tools; any rigged character, imported or made here): makes `name` from clip `from` (its own or its animator library's), with any of: start/end (trim, seconds), speed (retime: 2 twice as fast), loop (made seamless: the end eases into the start over loop_blend s), mirror (left/right swapped), root_motion "in_place" (the hips' travel across the floor taken out) or "keep", blend_with + blend (another clip mixed in, 0-1), events, feet (floor_offset m, toe_angle degrees, plant: foot-down/up events where each foot is down). Kept in the clips file beside the model (X.glb.clips.json), made at every load; plays by name anywhere (animator.clip, sequencer, brains). Same name as `from` replaces it in play (the file is never changed). play: true plays it on the character now. list: true lists the clips and edits; remove: true deletes the edit `name`.
| Argument | Type | What it does |
|---|---|---|
blend | number | |
blend_with | string | |
end | number | |
events | list of object | |
feet | object | |
from | string | The clip it's made from (default: an existing edit's source, else name). |
list | boolean | |
loop | boolean | |
loop_blend | number | |
mirror | boolean | |
name | string | The edited clip's name (new, or the same as from to change it in place). |
play | boolean | |
remove | boolean | |
root_motion | keep / in_place | |
speed | number | |
start | number | |
target | string | The character's object name (default: the player, else the only character). |
clip_events
Events on an animation clip (Beta 2 fix tools): list them, add, remove, or place them for you. Names that do something in play: footstep.L / footstep.R (the footstep sound, and the foot held planted), sound:<name> (that sound at the character), windows with an end: hit or hit:hand.R (damage lands), combo (the next attack may chain), cancel (a dodge or block may cut in); any other name reaches scripts (onAnimEvent). footsteps: true places left_foot_down/up and right_foot_down/up where each foot is down (play holds it flat between, and sounds each landing). from_hitboxes: true copies each move_hitbox naming this clip's active frames as its hit window (so combat and the clip agree). The clip itself isn't changed: the events go on an edit of the same name (clips file beside the model).
| Argument | Type | What it does |
|---|---|---|
add | list of object | |
clip | string | |
footsteps | boolean | |
from_hitboxes | boolean | |
remove | list of string | Event names to take off (a window's end goes with it). |
target | string | The character's object name (default: the player, else the only character). |
clip_feet
A clip's feet, fixed in the engine (Beta 2 fix tools; any rigged character, a retargeted clip too): floor_offset raises (+) or lowers (−) the whole body in metres (feet through the floor, or floating), toe_angle bends the toes (degrees, + up), plant: true places foot-down / foot-up events where each foot is down (play holds each foot flat between, and sounds each landing). Kept as an edit of the same clip (clips file beside the model). The retarget solver itself isn't changed (🤖 Motion Core's): these sit on top, per clip.
| Argument | Type | What it does |
|---|---|---|
clip | string | |
floor_offset | number | |
plant | boolean | |
target | string | The character's object name (default: the player, else the only character). |
toe_angle | number |
clip_preview
Play a clip on a character and see its timeline (Beta 2 fix tools): sets its animator to the clip (loop as asked) and replies with the clip's length and every event in order (windows as spans), then, after `seconds` of play, which events actually fired and when. Turn on anim_view {steps: true} alongside to see the foot plants drawn.
| Argument | Type | What it does |
|---|---|---|
clip required | string | |
loop | boolean | |
seconds | number | Watch this long (in Play) and report the events fired (default 0). |
target | string | The character's object name (default: the player, else the only character). |
cloth
Real cloth in the world (Beta 2): flags on poles, curtains, banners between posts, tarps on frames, sheets on a line, capes. It hangs from its pins, blows in the scene's wind (gusts ripple across it) and never passes through the colliders and characters near it (poles, walls, crates, the player walking into it): the `cloth` component, simulated in Play on the engine's cloth solver; the editor shows it at rest unless view on. action make puts one up: shape (flag, curtain, banner, tarp, sheet, cape) with its own sensible settings, at [x, y, z] (default on the ground in front of the camera), facing (degrees), width/height, color; pole true (a flag's pole, the default for a flag; a banner gets two posts, a tarp four corner posts) so it hangs from something real. pin sets what holds it (pins top/left/right/corners/top_corners/none, points [[u, v], ...]); unpin lets go (loose top_left, top_right, bottom_left, bottom_right, left, right, top, bottom or all: torn loose, pulled down). retune changes any cloth field (stiffness, stretch, weight, damping, wind_response, wind, thickness, collide, width, height, resolution...) as one undoable change, and live in the game while it plays. view on runs the cloth in the editor (off: back at rest). report: per cloth its particles, what it met (boxes, capsules, characters), ms per frame, the wind on it and the worst penetration (0 mm: nothing clips).
| Argument | Type | What it does |
|---|---|---|
action | make / pin / unpin / retune / view / report | What to do (default report). |
at | list of number | make: where it stands, world metres (a flag: its pole's foot; a curtain: its hem's middle; a tarp: its frame's corner). Default: on the ground in front of the camera. |
color | list of number | make: its colour, 0...1 each. |
facing | number | make: which way it faces, compass degrees (default 0). |
fields | object | retune: cloth fields to set, e.g. {"stiffness": 0.5, "weight": 0.4, "wind": [0, 0, 3]}. Fields: shape, width, height, resolution, gather, pins, points, loose, stiffness, stretch, weight, damping, wind_response, wind, collide, thickness, outline, picture |
height | number | |
height_above | number | make: how high its top hangs (metres above `at`): a flag's pole height (default 4), a banner's posts (2.6), a tarp's frame (2.2). |
loose | list of top_left / top_right / bottom_left / bottom_right / left / right / top / bottom … | unpin: what lets go (default all). |
name | string | make: its name (default the shape's, e.g. "Flag"). |
on | boolean | view: run the cloth in the editor (true) or show it at rest (false). |
outline | rectangle / triangle / triangle_right | make: rectangle, or triangle / triangle_right (a triangular sail). |
picture | string | make: a picture in Assets printed on it (a signal flag's design from its Nano Banana sheet: "Cloth/Flags/kilo.png"), its left edge at the hoist. |
pins | top / left / right / corners / top_corners / none | make, pin: which edge or corners hang fixed. |
points | list of list of number | pin: more pins at [u, v] points (0...1, u across from the left, v up from the bottom). |
pole | boolean | make: put up what it hangs from (a flag's pole, a banner's two posts, a tarp's four corner posts; default true for those). |
shape | flag / curtain / banner / tarp / sheet / cape / sail | make: what it is (default flag). |
stiffness | number | |
target | string | The cloth object's name (pin, unpin, retune; report: default every cloth). |
weight | number | |
width | number | |
wind_response | number |
cloth_tune
Live overrides for the cloth characters wear, in Play or not, no rebuild: friction (against the body, its capsules and the layers under the cloth), damping (swing lost per second), bend (× how easily it folds), ease (× the room for the stride below the hips), stand_off (× loose cloth's kept gap off the body), floors (loose cloth keeps in front of the layers under it) and floor_gap (metres off them). Each value given replaces the one in force; reset: true first puts all back to the fabric's. Applies to every character's cloth from the next frame; replies with what's in force.
| Argument | Type | What it does |
|---|---|---|
bend | number | |
damping | number | |
ease | number | |
floor_gap | number | |
floors | boolean | |
friction | number | |
hands | boolean | Loose cloth below the hips (coat tails, skirts) meets the hands and forearms, slipping off them without friction (default true); false: passes through them. |
leg_budget | integer | |
leg_cloth | auto / all / off | Trousers as cloth on default-cloth characters: the nearest leg_budget (auto), all, or none (off, the default until simulated trousers clip no more than skinned ones). Reload the character after switching (its clothes are fitted for it at load). |
legs | boolean | Fitted leg cloth (trouser legs) meets the other leg (default true). |
reset | boolean | Back to the fabric's settings before the values given. |
stand_off | number |
clothes_fit
Looser or tighter clothes, per garment or the whole outfit (Beta 2 fix tools; any outfit and body, forged or imported): looser_mm moves the garment out from the body (tighter_mm in), the full amount over the cloth and fading to nothing at its cuffs, hems and collar, so it gets roomier without its openings moving. Also hide_skin (skin fully under the clothes is removed at load: true, the default) and cover_cm (how far out clothing still hides the skin under it). Saved in the model's fit file (X.glb.fit.json) and applied now (the character reloads). garment: a name from clothes_check's list ("shirt" or its material "Human.shirt") or "all". reset: true clears this character's fit (clothes_fix's fixes too).
| Argument | Type | What it does |
|---|---|---|
cover_cm | number | |
garment | string | Which garment (clothes_check lists them), or "all" (default). |
hide_skin | boolean | |
looser_mm | number | Move it out this much more than now (negative: tighter). |
reset | boolean | |
set_mm | number | Its looseness exactly this (0: as made). |
target | string | The character's object name (default: the player, else the only character). |
tighter_mm | number |
clothes_fix
Fix a character's clothing clipping in one step (Beta 2 fix tools; any outfit and body, forged or imported): watches it (seconds, in Play while it moves; 0 one frame), then at every place a layer shows through the one over it: skin showing through is pulled in under the cloth, an inner garment showing through is tucked under the outer one (each by its depth + 2 mm, spread smoothly over a few cm). Cloth measured inside a limb is reported, not moved (that measure reads limbs as round tubes: check the picture, and clothes_fit the garment looser where it shows). Saves the fixes in the model's fit file (X.glb.fit.json, replayed at every load), reloads the character and checks again: replies before and after per clip. dry_run: true only says what it would change. undo: true takes this tool's fixes back out (clothes_fit's looser/tighter stay). Worn gear (boots, armour attached to bones) isn't changed: it says to move it.
| Argument | Type | What it does |
|---|---|---|
dry_run | boolean | |
extra_mm | number | Clearance past the clip's depth (default 2 mm). |
fps | number | |
seconds | number | Watch this long first (default 0: one frame). Drive it meanwhile (play_input wait false) so the fixes cover the motion. |
spread_cm | number | How far each fix spreads over the piece (default 3 cm). |
target | string | The character's object name (default: the player, else the only character). |
undo | boolean | Remove every clothes_fix fix from this character's fit file. |
compact_character
Make a person already in Assets/Characters the shipping size, in place: every map at most texture_size (default 2048, eyes 1024) as JPEG where opaque, a map shared by pieces written once, lean body shapes (no shape normals). The settings forge_creator_kit ships with; a 40-50 MB villager comes out several times smaller. Check the face at 1 m after (screenshot or inspect). Its recipe stays. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
model required | string | The person, e.g. Characters/Villager_1.glb. |
texture_size | integer | The largest map in pixels (default 2048). |
equip_item
Put an item on a character: worn cloth (its item's equip.wear) is drawn fitted to the character's body, hiding the skin under it; helmets, packs and weapons (equip.model) ride their bone as a child "<name>/<slot>". What the slot held comes off, and so does what the item blocks (equip.blocks: a two-handed sword the off hand). While the game plays, it changes the running game (scripts hear 'equipped'/'unequipped'); otherwise the scene, one undoable step. Items: Assets/Items/<id>.item.json with {"equip": {"slot": "chest", "wear": [garments]}} or {"equip": {"slot": "main_hand", "model": "Weapons/sword.glb", "offset": [x,y,z], "rotation": [x,y,z]}}. Worn cloth needs a fit for the body first: equip_prepare.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character: name (e.g. "Rowan") or id (e.g. "#7"). |
item required | string | The item id (its file name: "leather_jacket"). |
slot | string | The slot (default: the item's own). |
equip_prepare
Fit worn items to the bodies that wear them: the tailor drafts each item's garments for each body's measurements, drapes them, bakes their folds and paints their fabric, and writes Equipment/<item>/<body>.glb (only the garments, skinned to that body's skeleton). Run it after making or changing a worn item, or before shipping (games load these files on every platform; only a Mac can make them). Bodies: the characters given, else every character in the scene with an equip component (their bare model). Items: those given, else every worn item those characters have on. Slow: about a minute per item and body. "refit" makes them again. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
entities | list of string | Characters by name (default: every one with equipment). |
items | list of string | Item ids (default: what the characters wear). |
refit | boolean | Make fits that exist again (default false). |
texture_size | integer | Fabric maps' size (256-2048, default 2048). |
face_capture
Face performance capture from a video (a phone clip of someone talking or pulling faces): Apple Vision tracks the face every frame and the frames are solved for the 52 face shapes of the person who will play it (their own shapes explain the motion), with eyes from the pupils and the head's turn. Writes Assets/Captures/<name>.json; play it with face_perform {capture}. iPhone ARKit / Live Link Face CSVs play directly, no solve needed. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
fps | number | At most this many frames per second (default 30). |
mesh required | string | The person who will play it, e.g. "Characters/Hero.glb". |
name required | string | The capture's name (Assets/Captures/<name>.json). |
video required | string | The clip (absolute path, or under Assets). |
face_critic
Score a character's face the way a close-up reads: renders a front close-up of the face in the scene's light and measures the eyes (the whites' lightness, spread and corner shading, the pink inner corner), the lashes (strokes above the upper lid: width, coverage, darkness), the cheek skin (pores, fine lines, blotches, colour blotch, sheen) and the nose (alar crease, nostrils, nasolabial fold), with the floors a real face clears. reference: a target picture of the same framing (a Nano Banana repaint of this close-up), measured the same way for ratios. save: keep the close-up (a .png path).
| Argument | Type | What it does |
|---|---|---|
distance | number | Camera distance in front of the face, m (default 0.42). |
entity required | string | The character (name or #id). |
pixels | integer | The close-up's side in pixels (default 2048). |
reference | string | A target picture of the same framing to measure the same way. |
save | string | Where to keep the close-up (.png). |
face_decay
Turn a Face Forger person into a zombie, keeping their face: stage fresh (bloodless grey-yellow pallor, dark veins surfacing, bruised sunken sockets, milky corneas, purple dry lips, dried blood run from the mouth and a bite), rotted (grey-green marbling, black veins, slipped skin, a torn lip opened into the mouth with a real wound wall, bite craters in the mesh, opaque eyes, stained teeth) or burned (charred, blistered and cracked skin, raw burns, waxy patches, eyes boiled white). amount 0...1 scales it; seed varies wounds and blood runs. The 52 face shapes, rig, groom and wrinkles stay. Writes Characters/<name>.glb. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
amount | number | 0...1 (default 1). |
mesh required | string | The person, e.g. "Characters/Survivor_A.glb". |
name required | string | The zombie's file name (Characters/<name>.glb). |
seed | integer | |
stage required | fresh / rotted / burned | |
torn_lip | boolean | Tear the lip open (default: rotted yes, others no). |
wounds | integer | Bite wounds, 0...3 (default 1). |
face_detail
Give a Face Forger person (forge_person output) expression wrinkles and the blood and veins under the skin: forehead lines, crow's feet, bunny lines, the 11s, nasolabial folds, lip and chin lines, neck bands, measured from the person's own 52 face shapes (lines form only where their skin really squeezes) and deepened with age; the face flushes with effort and anger. New forge_person faces have them already; this upgrades older ones (also adds the skin profile if missing). Writes the model in place (or as `name`). HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
age | number | Years (line depth and the lines already there at rest). Default: the recipe's, else 35. |
mesh required | string | The person, e.g. "Characters/Hero.glb". |
name | string | Save as Characters/<name>.glb instead of overwriting. |
face_lids
Give a toon character with painted eyes (a face drawn from a face_sheet: the eyes are on the skin, no eyeballs) lids that close: an upper and a lower lid of its own skin over each painted eye, folded away while open, shut by the face shapes eyeBlinkLeft / eyeBlinkRight. Then it blinks, and a cutscene or script holds its eyes shut with the expression "eyes_closed" (or "asleep"), easing them open with animator.expression_intensity. New face_sheet creatures get lids when forged; this adds them to older ones. Writes the model in place (or as `name`). HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
mesh required | string | The character, e.g. "Characters/Rowan_v2u.glb". |
name | string | Save as Characters/<name>.glb instead of overwriting. |
face_perform
Direct a character's face (characters with face shapes): an expression or a blend (angry, contempt, determined, disgusted, effort, eyes_closed, flirty, happy, laugh, neutral, pain, sad, scared, shout, smirk, surprised, thinking, tired, worried; or "happy:0.6, surprised:0.4"), or any of the 52 ARKit face shapes by name for subtle faces ("browInnerUp:0.3, mouthPressLeft:0.2, eyeSquintRight:0.15", mixable with emotions), eased in and out; a spoken line with lip sync (text, and optionally a recorded WAV in Sounds the lips follow); where it looks (an object, [x, y, z] or "ahead"); a short cue ("effort" while firing or reloading, "pain" a flinch, or any emotion as a flash). Eyes, blinks, breathing and glances are automatic.
| Argument | Type | What it does |
|---|---|---|
audio | string | A recorded line (WAV in Sounds, or absolute path) for say. |
capture | string | Play a captured performance: an iPhone ARKit / Live Link Face CSV or a face capture JSON (face_capture makes one from a video). Path under Assets or absolute; "" stops. |
cue | string | effort, pain, or an emotion name: a short event. |
cue_intensity | number | |
cue_seconds | number | How long the cue is held. |
entity required | string | The character (name or #id). |
expression | string | An emotion name or blend; "neutral" relaxes. |
intensity | number | 0...1, default 1. |
look_at | any | An object name, [x, y, z], or "ahead". |
say | string | A line to speak (lip-synced, with a subtitle). |
subtitle | boolean | Show "Name: line" (default true). |
fp_hands
The running game's first-person hands, live (Play mode; no rebuild, nothing saved): `view` takes what game.weaponView takes: hip / down / sprint / reload holds ({position: [right, up, ahead] m from the eye, turn: [up, right, roll] degrees}; down is the hold looking down, fully in at down_pitch degrees below level), sway, bob, lag, view_fov, view_scale, elbow [down, out], one_handed. `offhand` holds the free hand up where asked ({at: [right, up, ahead] m, fingers: [x,y,z], palm: [x,y,z], grip: a grip_presets name, grip_amount 0...1, ease s}) to try a grip or a hold by eye; let_down true lets it down. Put what works in the scripts (kits/torch_hands.js params, game.offhand in a kit) to keep it.
| Argument | Type | What it does |
|---|---|---|
let_down | boolean | true: the free hand let down. |
offhand | object | As game.offhand takes it. |
view | object | As game.weaponView takes it. |
gait_from_video
Read a four-legged animal's real gait from a video: a wolf's trot, a horse's walk, a boar's gallop (side on, the camera following the animal, a plain grey backdrop reads best: make one with Veo 3.1 Fast in Google Flow). Apple Vision finds the legs, paws, spine, head and tail on every frame; out come the gait's numbers in leg lengths, so any creature takes them: period (seconds a stride), duty (share of it a paw is down), the gait (walk, trot or gallop, from when the hind and fore paws land), each paw's lift-off phase, stride length, paw lift, body and head bob, speed. Writes Assets/Motion/Gaits/<name>.gait.json, <name>_footfalls.png (each paw's stances over time) and <name>_skeleton.jpg (what Vision saw on 12 frames, to check it). macOS editor only. HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
fps | number | Frames read a second (default 30, 10...60). |
name required | string | The gait's name (letters, digits, _): e.g. wolf_trot. |
video required | string | The video: an absolute path or ~/..., or a path in the project or its Assets. |
grip_in_hand
Seat a prop in a character's hand by its grip: the prop's grip point (prop_grips) goes on the palm's centre, the palm facing the way the grip says and the fingers wrapping it, and the prop is attached to the hand bone (attach { to, bone, offset, rotation }) so it rides every animation. Swords, axes, torches, tools, guns. flip turns it end for end round the palm (the blade out of the other side of the fist); turn adds degrees round the grip's axis.
| Argument | Type | What it does |
|---|---|---|
flip | boolean | |
hand | right / left | Default right. |
holder required | string | The character holding it. |
prop required | string | The prop object (name or #id). |
socket | string | A grip socket's name from prop_grips (default: the one for that hand). |
turn | number | Degrees round the grip's axis. |
grip_presets
The finger presets a hand can take (GripLibrary): for make_pickup's grip, game.offhand({grip}) in a script, a pose's grip, a hold socket's grip. Each with what it's for.
No arguments.
groom
Grow real strand hair or fur on a rigged character (Characters/<name>.glb): writes Characters/<name>.groom beside it, which the engine draws as thousands of strands up close (clumped, curled, self-shadowed, lit as fibers) and as the model's own hair cards far away. Presets: lion (mane, short coat, face fur, whiskers, tail tuft), tiger, wolf (guard-hair coat, ruff, bushy tail; on a forge_creature body "wolf"), fur (an even coat on any creature), or a human style grown on the scalp with brows: straight, long, wavy, curly (ringlets), coily (4C), afro, fade, short, crop, buzz, waves (360), messy, slick. Re-run to regrow (deterministic for a seed). HTTP calls return a job_id immediately; read progress and the final result with tool_job instead of repeating the tool.
| Argument | Type | What it does |
|---|---|---|
beard | none / stubble / short / full | |
brows | boolean | |
color | list of number | Hair colour, linear RGB 0...1 (human styles; default from the style's melanin). |
length | number | Hair length in meters (human styles), or the coat length for fur. |
mesh required | string | The character, e.g. "Characters/Lion.glb". |
preset required | lion / tiger / wolf / fur / afro / buzz / coily / crop … | |
quality | number | Strand density (1 a hero close-up; 0.5 crowds). |
seed | integer | |
simulate | boolean | Simulate hair (guides swing with motion, gravity and wind, collide with the body). SESSION-GLOBAL: it switches simulation for every groomed character in this editor until changed or restarted, and is not saved with the character. |
wind | list of number | Wind for simulated hair, m/s world space. SESSION-GLOBAL like simulate: it blows on every groomed character in this editor. |
gun_move_status
Weapon locomotion of a character (gun_move component): its class, the speeds it walks, runs, sprints and walks aiming at (with the class defaults filled in), its ADS raise/lower and sprint-out times, posture, bob and sway, and the measured gaits its animation library has (natural speed of each loop), so speeds can be set where the clips look right.
| Argument | Type | What it does |
|---|---|---|
entity | string | The character (default: the first with a gun_move or a character component). |
hair_detail
Strand hair's distance detail, live (no rebuild; session-wide, every groom): how many strands are drawn as a groom gets smaller on screen and how much wider each is drawn to make up for the rest. fraction: the share of strands drawn whatever the distance (testing: 1 draws every strand); automatic: true goes back to choosing it by distance. pixel_coverage: how much of a pixel a drawn strand covers at least before strands are thinned out (0.5 default; lower keeps more strands, finer and slower). width_exponent: thinned strands are drawn share^-exponent wider (0.85 default; 1 keeps the total cover exactly, lower lets far hair go see-through). With no arguments, reports the settings.
| Argument | Type | What it does |
|---|---|---|
automatic | boolean | true: the share by distance again |
fraction | number | 0.01...1 |
pixel_coverage | number | 0.05...2 |
width_exponent | number | 0.5...1.2 |
hold
Put a hand on an object by intent: the arm reaches, the wrist turns to the hold point, the elbow goes where the forearm runs on with the hand (wrist straight) and under the object, and the fingers close joint by joint until they touch it, the thumb opposing. point: a hold point (hold_points); slide 0...1 along it (a handguard, rear to front); grip: power, pinch, c_clamp, cup, hook, flat, trigger (a firing hand on a pistol grip, the index on the trigger; on_trigger false lays it along the frame); finger_angle: degrees the fingers turn toward the object's front. object defaults to the gun in the character's hands. On a weapon hold being edited it goes into the hold at every aim pitch. Returns a readout of each hand (contact, finger gaps and faces, wrist bend, penetration, elbow) and a picture.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
finger_angle | number | |
grip | c_clamp / cup / flat / fore_grip / handguard / hook / pinch / power … | |
hand required | left / right / both | |
object | string | |
on_trigger | boolean | |
point required | string | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
slide | number | |
still | boolean | Return a picture of the viewport with the rig (default true). |
straight_wrist | boolean |
hold_adjust
Change a hold by intent, from where it is: forward_cm (toward the object's front, e.g. slide the left hand 4 cm forward), up_cm, across_cm (to the object's right), finger_angle (degrees more toward the front), slide (a new place along the range), grip, close_fingers (true: close again until contact). Re-solved and written like hold.
| Argument | Type | What it does |
|---|---|---|
across_cm | number | |
close_fingers | boolean | |
entity required | string | The character (name or #id). |
finger_angle | number | |
forward_cm | number | |
grip | string | |
hand required | left / right | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
slide | number | |
still | boolean | Return a picture of the viewport with the rig (default true). |
up_cm | number |
hold_finger
Put one finger of a holding hand where it goes, by intent: on "trigger" (the pad on its face), "far_side" (round the back strap onto the grip's other side: a firing thumb), "back_strap", "front_strap", "top" (the grip's top under the frame), any point the object names (hold_points, its sockets), or to [x, y, z] in the object's own frame (metres; x the object's left, y up, z its front); offset_mm nudges that in the object's frame. The finger is solved in a hand's joint ranges against the object's real surface (never through it), the rest of the hand kept; on a weapon hold it goes into the hold. Returns where every finger now is on the object.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
finger required | thumb / index / middle / ring / pinky | |
hand required | left / right | |
offset_mm | list of number | |
on | string | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
still | boolean | Return a picture of the viewport with the rig (default true). |
to | list of number |
hold_points
The hold points of an object (a gun's grip, handguard, fore grip; a handle): where the palm goes, which grip suits it, and the range a hand can slide along. Found from the object's parts, or declared in <model>.sockets.json.
| Argument | Type | What it does |
|---|---|---|
object required | string |
keyposes_to_motion
Turn a sheet of key poses (one move drawn as figures side by side: the same person from the same angle, a three-quarter view reads best, the same floor line; make it with Nano Banana in Google Flow) into an animation clip for our characters: the figures are found on the sheet, each one's 3D body pose is read (Apple Vision) and checked against the picture, the joints carried through the keys on smooth curves at the times given (moving through a pose that passes, easing into a pose that turns back), the move kept in place, then retargeted and cleaned up like video_to_motion (floor, planted feet, limits). For moves a video can't give cleanly: a claw swipe, a lunge, tearing a board off, a grab. Saved as Motion/Video/<name>.videomotion.json, played as clip Video/<name>; returns the panels over the character at each key.
| Argument | Type | What it does |
|---|---|---|
character | string | The character to fit it to and render (default Characters/Mannequin.glb). |
image required | string | The sheet: a path in the project or its Assets folder (e.g. References/zombies-1030/swipe_keyposes_b.jpg). |
loop | boolean | A cycle (a walk, a shamble): the last key carries on into the first one mean gap later (default false: eased from and into rest). |
name required | string | The clip's name: lowercase letters, digits and _. |
panels required | integer | How many figures side by side (found in the picture; they needn't be equal widths). |
rows | integer | 2: the sheet has two rows, each pose seen from the side (top row, facing right) and from the front (bottom row), read together for true depth (the best read). Default 1. |
skip | list of integer | Panels to leave out (0-based), with their times. |
smoothing | number | Smoothing in frames (default 1.5). |
times required | list of number | Seconds each key lands at, first 0, rising (one per panel). |
locomotion_drive
Drives the third-person player through the real controls on a movement course while the system measures every held foot: reversals (back and forth, sideways, diagonals), slalom (quick zig-zags), camera_swing (walking while the view swings), sprint_turns (hard 90° turns at a sprint), stops (walk/sprint then stop), or all of them. The camera follows as in play, so the person watches; tune with locomotion_tune and anim_view {locomotion: true} between runs. Starts and returns at once; call again with report true for the numbers (frames a held foot stretched past the moving drift and near the forced step, the worst stretch and when) and to hand the controls back.
| Argument | Type | What it does |
|---|---|---|
course | reversals / slalom / camera_swing / sprint_turns / stops / flicks / all | |
legs | list of list of number | A course of your own instead: [seconds, stick right, stick forward, view turn deg/s, sprint 0/1] per leg. |
report | boolean | Report the last drive and give the controls back. |
locomotion_tune
Live tuning for character movement, no rebuild: lists every movement value (the third-person velocity curve, the body's turn, the foot locks' step, pivot and split guards, and the everyday walk's whole shape: walk.* steps, heel landing, push-off, toe-out, bob, pelvis, chest, lean, arms) with what it does and its value now; `set` changes any of them for the very next frame (walk.* regenerates every loaded character's walk in place; until the editor quits; `reset` puts them back as built). `posture` changes a character's posture in the live game (lean, head, shoulders, slouch, elbows, toe_out, pelvis_tilt, step_width, arms_out, stride, arm_swing, sway, bounce: its gait component). `matching` turns motion matching on or off for a character in the live game. `save_preset` keeps every value (and the player's posture) in Assets/Motion/Tuning/<name>.locomotion.json, `load_preset` puts a saved one back live (walk, run, turn, anything), `presets` lists them. `pause`, `step` (frames while paused) and `slowmo` (0.05...1) freeze, advance or slow the game to look at one step. Watch with anim_view {locomotion: true, steps: true}.
| Argument | Type | What it does |
|---|---|---|
load_preset | string | Put a saved preset back, live (the walk regenerates). |
matching | boolean | Motion matching on or off for `target` (default the player) in the live game. |
pause | boolean | Freeze the game (true) or let it run (false). |
posture | object | For `target` (default the player) in the live game: lean, head, shoulders, slouch, elbows, toe_out, pelvis_tilt (degrees added), step_width, arms_out, stride, arm_swing, sway, bounce, variability, fatigue → value. |
presets | boolean | List the saved presets. |
reset | boolean | Every value back as built. |
save_preset | string | Keep every value now (and the player's posture, if playing) under this name. |
set | object | name → value, e.g. {"motor.third_person_sharpness": 5} or {"walk.period": 0.92}. |
slowmo | number | Game speed while playing (1 real time). |
step | integer | While paused: advance this many frames (60 a second). |
target | string |
make_brain core
Create or update an editable native brain using exactly one preset or description. Description is a deterministic keyword match to a named preset, not invented code; ambiguous descriptions are refused. Advanced presets: tactical, stealth_guard, slasher, pedestrian, traffic, boss, zombie (wanders, hears gunshots through real geometry, groans to draw the horde, chases, searches, follows trails). Uses the same undoable protected-scene path as add_brain. Existing components are preserved.
| Argument | Type | What it does |
|---|---|---|
debug | boolean | |
definition | object | Complete validated arcwright.brain.v1 recipe including optional utility and advanced data. |
description | string | |
enabled | boolean | |
entity required | string | Entity name (e.g. "Tower_B") or id (e.g. "#7"). |
params | object | Merge numeric overrides into the editable brain recipe. Omitted overrides are preserved; unknown names, booleans and non-finite values are refused. |
preset | patrol / hunter / chaser / shooter / pack / stalker / guard / tactical … | |
role | auto / leader / flanker / suppressor | |
squad | string | |
waypoints | list of any | Patrol waypoints, in order. Empty holds position. Movement is physical, not teleportation. |
motion_ai
The motion AI in Play (motion_ai components: NVIDIA MotionBricks run inside the engine, the body moved by it instead of its clips while it walks): the network's state and, per character, generations, frames drawn, generations that came back late, frames the body check (PoseAnatomy) failed and the last finding, its share of the drawn pose and its speed. entity + on: turn it on or off on a character in the running game (A/B against the clip walk; on gives it a motion_ai component with the defaults if it has none); keys: its key-pose file (a ttr.jointworld in Assets); start: a ttr.jointworld that begins standing still (motion_learn of a stand-walk-stop video), so starts from standing are the motion AI's own ("" for none). reload: make every character's driver again.
| Argument | Type | What it does |
|---|---|---|
entity | string | |
keys | string | |
on | boolean | |
reload | boolean | |
start | string |
motion_critic
Referee for character motion: characters walking side by side (default), the Quality Lab course, embedded looping clips or capture takes keep their separate baseline checks. An authored clip Poses/<name> is measured directly from its baked poses and saved 3D root travel, including exact key times: centimetres per complete step, partial contact slide, sole penetration against a stated flat ground, body jerk, joint frame deltas, saved goal misses and root endpoint error when expected_root_delta is supplied. Authored results are raw measurements with explicit nulls for unexercised metrics, not an overall pass; one-shot clips are never repeated to invent steps. Watch the motion too.
| Argument | Type | What it does |
|---|---|---|
characters | list of string | Animated characters that walk straight ahead side by side on a copy of the scene, their drawn poses scored (several: also told apart). Default: the player, or the first animated character. |
clip | string | An embedded looping clip of model, or Poses/<name> for an authored Assets/Motion/Poses/<name>.poseclip.json. Authored clips are sampled once at their baked rate; seconds only truncates that pass. |
course | boolean | Run the Quality Lab course with the player instead (starts, sprints, strafes, stops) and score that. |
expected_root_delta | list of number | Authored clips only: expected actor-root travel [x,y,z] in asset-space metres. Without both this and a saved root track, root drift is unmeasured. |
ground_height | number | Authored clips only: flat reference ground height in asset-space metres (default 0). This does not inspect scene obstacle or finger/skin collisions. |
model | string | The rigged model for clip (authored: the clip's saved rig; otherwise Characters/Mannequin.glb). |
seconds | number | How long they walk (default 24; variety needs about 20). |
speed | number | Walking speed, m/s (default 1.3). |
take | string | Score a motion capture take aimed at the Mannequin: its name as folder/file, e.g. "Locomotion/CMU_104_06". |
motion_export
A character's motion written onto another skeleton, as each joint's world turn and place per frame (JSON): the motion AI's key poses come from it. video: a video_to_motion performance (Motion/Video/<name>.videomotion.json, or a path); or clip: a pose clip of the character (default the one playing). to: a BVH file whose skeleton receives it (NVIDIA SOMA is retargeted from its T-pose). root_motion (default true) keeps the travel. out: the .json written (rate, joints, frames: per joint 9 rotation numbers row by row then x y z in metres). Reports the body check (PoseAnatomy) on both skeletons, frame by frame. straighten: take a treadmill or tracking-camera take's slow drift in facing out (it goes straight by nature).
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character the motion plays on. |
out required | string | |
root_motion | boolean | |
straighten | boolean | A take that goes straight by nature (a treadmill, a camera tracking the walker): take its slow turning (the tracker's drift) out, keeping the pelvis' swing within each stride, so the motion AI has long straight stretches to steer by. |
to required | string | |
unit | string | The `to` file's units (default centimeters). |
video | string |
motion_generate
NVIDIA MotionBricks makes a motion on a character: from where it is in a clip (clip, time) to a target ahead of it (forward metres along its facing, default 1.5; turn degrees, default 0; gap: how far into the clip the target's poses come from, default 36 frames), generated on the SOMA skeleton and retargeted onto the character. Saves it as a clip (save_as, default <clip>_generated) with the model's foot contacts as its foot events, and plays it. The network runs on ONNX Runtime: the model (mmm_v6_soma_fp16.onnx) from the project's Assets/MotionAI, the app, or TTR_MOTIONBRICKS_MODEL. replay: a recorded network output instead (tests).
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip | string | |
entity required | string | |
filmstrip | integer | |
forward | number | |
gap | integer | |
look | list of number | |
replay | string | |
save_as | string | |
time | number | |
turn | number |
motion_import
A BVH motion file moved onto a character as a clip (any skeleton: a mocap take, MotionBricks output, another tool's export): bones matched by role, the hips scaled by leg length, planted feet cleaned of skating, played in place (the travel is taken out). file: a path in the project or an absolute one; unit: automatic (default), meters, centimeters, inches; turn: degrees about up that bring the performer's rest facing to +Z. Saves it as a clip for the character (default the file's name) and plays it.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
entity required | string | The character to put the motion on. |
file required | string | |
filmstrip | integer | |
look | list of number | |
loop | boolean | Keep it playing on a loop (for watching in the editor). |
reference | string | auto (default): a standing reference (SOMA's T-pose for NVIDIA files); rest: the skeleton's bare rest, to compare. |
root_motion | boolean | Lay the take's travel and turning back on (a preview that walks and turns); off: in place, as the game plays it. |
save_as | string | |
settle | boolean | Settle the body on the floor (default true: locomotion; false for jumps and vaults, whose feet leave the ground). |
turn | number | |
unit | string |
motion_learn
Teach a character's motion AI (NVIDIA MotionBricks, run by the engine) a way of moving from one reference video: a person walking, jogging, running or sneaking across the frame, side on, whole body in view (make one in Google Flow: Veo with a locked-off camera, or first and last frames from Nano Banana so the camera can't move). One call: reads the video, tries it as a still camera and as a treadmill (a following camera), straightens it, writes it onto SOMA as Motion/AI/<name>.jointworld.json, grades each reading (its pace, the longest straight stretch the AI can steer by, the knee through the stance, how far a planted foot slides), keeps the best and adds it to the character's motion_ai keys (a motion_ai component is added if it has none). mode: auto (default), still or treadmill. keys: add (default), replace or none. through: soma (default: the video is read straight onto the model's own human skeleton, right for any character, a toon with a simple rig included) or character (through the character's own rig). A video that begins with the person standing still (a stand-walk-stop take) also becomes the character's motion_ai start, so the motion AI makes its starts from standing too. Then play: the character walks on it at speeds near its pace.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character to teach (it must have a rigged model and an animator). |
from | number | Seconds into the video to start (default 0). |
keys | add / replace / none | |
mode | auto / still / treadmill | |
name required | string | The key set's name: lowercase letters, digits and _ ("walk_relaxed"). |
through | soma / character | |
to | number | Seconds into the video to end (default its end). |
video required | string | The reference video: a path in the project, its Assets, or absolute. |
motion_match_debug
Inspect a character's classic motion matcher: requested library, actual owner-scoped pose source and approved-default carriage policy, borrowed compatibility library, indexed clips, feature sample count and feature-array bytes, selected clip/time, search and switch counters, latest match cost, desired and actual velocity, and inertialization state. mode authoring (default) reads the authoring/rehearsal world; mode live requires this editor's running Play session. A missing database or unsampled animator is explicit. May build this model's pending feature cache; never moves the character or invents a play run. Use motion_critic for contact measurements and play_test for input-driven footage.
| Argument | Type | What it does |
|---|---|---|
entity required | string | Character name or #id in the requested world. |
mode | authoring / live | authoring reads the editable world; live reads this engine's current Play session, never a substitute simulation. |
onion_skin
Onion skin for a pose clip at a time: ghost poses before (blue) and after (orange) every `step` frames, faded with distance, plus the hands', feet's and head's arcs, as data for the editor's timeline (bone segments and points, world space) and one composite picture.
| Argument | Type | What it does |
|---|---|---|
after | integer | |
before | integer | |
camera | list of number | |
clip | string | |
entity required | string | |
look | list of number | |
step | integer | |
still | boolean | |
time | number |
performance_capture
Private-editor performance evidence: start returns a capture session, stop with that session returns exact unsmoothed per-frame interval/CPU/draw counts, indexed mesh triangle submissions, independent GPU samples, resolution and texture allocation. Idle costs no extra render pass. Never treat missing samples as a passing 60fps result; Scripts/performance-gate.py evaluates the strict 16.7ms p95 gate.
| Argument | Type | What it does |
|---|---|---|
action required | status / start / stop | |
session | string | Exact session returned by start; required for stop. |
pick_up
A keyed pick-up: the hand reaches to the object's hold point with the fingers open (approach), closes on it (grasp), and lifts it lift_cm (default 15) with the feet planted; the object follows the hand from the grasp on. Saved as a clip (Assets/Motion/Poses/<clip>.poseclip.json, default <entity>_pick_up, with its keys and the object's track) and played. seconds: the whole action (default 1.4).
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character (name or #id). |
grip | string | |
hand required | left / right | |
lift_cm | number | |
object required | string | |
point | string | |
seconds | number |
pose_character
Pose any rigged character (humans, creatures) by contacts and goals, not bone angles: hands on a sill, a foot on a wall, a knee up, looking at something, hips lowered, a prop held with fingers wrapped round its grip points. A full-body IK solve (limbs never stretch past their length, joints stay in their limits, the body leans toward goals out of reach, feet stay planted) saves the pose as a clip (Assets/Motion/Poses/<name>.poseclip.json), plays it on the character and returns a picture plus how close each goal came.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
entity required | string | The character (name or #id). |
fingers | object | Hand → grip preset for hands without a prop: {"left_hand": "fist"}. |
goals | object | Effector name → goal. Effectors: left_hand, right_hand, left_foot, right_foot, left_knee, right_knee, left_elbow, right_elbow, head, chest, left_wing_tip, right_wing_tip, tail_tip, or any bone name (wing.L.2, tail.2, index_03_r). A goal: {"on": object, "at": [x,y,z] world or a phrase ("top near edge, 0.3 m left of centre", "near face", "top far edge", "top centre"), "height": m above the object's base (a foot on a wall), "position": [x,y,z] world, "grip": "Prop.socket" (a hand on a prop's grip point: "Rifle.fore_grip") or a grip preset (sill, flat_palm, ledge_hang, door_handle, fist, relaxed, point, wrap), "palm": [x,y,z] or down/up/forward/back/left/right/toward/away (the way the palm or sole faces), "along": the same for the way the fingers or toes point, "pole": [x,y,z] where the elbow or knee points, "chain": bones that move (default 2), "weight": 0...1}. Directions are seen from the character facing the object. |
hips | object | Move the hips from standing: {lower: m, raise: m, forward: m, back: m, left: m, right: m, offset: [x,y,z] world, position: [x,y,z] world}. The body still moves them further when goals need it, unless hips_lock is true. |
hips_lock | boolean | Pin the hips exactly where hips puts them (or where they stand): a seated driver or rider stays in the seat and goals out of reach are reported as missed. Without it the hips slide toward goals, and the reply warns when they move more than 5 cm. |
hold | object | Hold a prop: {prop: object name, stance: shouldered|low_ready|extended|carry, aim_at: object or [x,y,z], attach: true (the prop follows the right hand), two_handed: true, sight_line: false (draw the line from the eye along the barrel, to check it runs through the sights)}. Rifles find their grip, fore_grip/handguard, butt and muzzle by themselves. |
look | list of number | |
look_at | any | An object name or a world point [x,y,z] the head turns to. |
name | string | The pose clip's name (default <entity>_pose). |
plant_feet | boolean | Feet without goals stay where they stand (default true). |
still | boolean | Return a picture (default true). |
pose_constraint
Constraints over a clip. kind "aim": a bone's axis points at an object or point (bone, axis [x,y,z] in the bone's frame, chain, weight); "look_at": the head and neck follow a target; "parent": a prop follows a bone between switches ([{time, to: right_hand | a bone | world, blend, fall: true drops it to the floor}]), keeping where it was at each switch (no pop). Aim and look_at re-bake the clip; parent saves the prop's track beside it (<clip>.<prop>.track.json, for the Sequencer) and returns a filmstrip.
| Argument | Type | What it does |
|---|---|---|
axis | list of number | |
bone | string | |
camera | list of number | |
chain | integer | |
clip required | string | |
entity required | string | |
filmstrip | integer | |
kind required | aim / look_at / parent | |
look | list of number | |
prop | string | |
save_as | string | |
switches | list of object | |
target | any | aim/look_at: an object name or [x,y,z] world. |
weight | number |
pose_explain
Describe the character's pose (or a keyed clip) in plain words and numbers, to check posing without guessing from pictures: the trunk's lean, where the head faces, each arm and leg's direction and bend, what is on the ground, whether the centre of mass is over the feet (by how much), joints past their range; for a clip also each key, the hips' path, the fastest hand and foot, and feet sliding while planted.
| Argument | Type | What it does |
|---|---|---|
clip | string | A keyed clip (default: the pose now). |
entity required | string | The character (name or #id). |
pose_ik_fk
IK/FK per limb over a clip: each limb's IK weight over time ([[time, weight], ...] or one number), its IK goal (a goal like pose_character's, or pin_at: a time whose FK hand/foot position is held from then on: a hand planted on a wall while the body moves). Switching uses FK's own hand as the IK start, so nothing pops. Saves the result as a new clip and plays it.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip required | string | |
entity required | string | |
limbs required | object | Effector → {ik: weight or [[t, w], ...], goal: {...} (as pose_character) or pin_at: seconds}. |
look | list of number | |
save_as | string |
pose_key
Keyframe a pose clip by goals: add (or replace) the key at `time` with goals like pose_character's (anchored to the objects they name, so the clip can later be re-fitted with warp_pose_clip), or remove one. Every edit re-solves all keys on this character, solves every frame between them (hands and feet whose goal is the same in two keys stay exactly planted; others glide with the key's easing: linear, ease_in, ease_out, ease_in_out, hold), bakes it at 30 fps into Assets/Motion/Poses/<clip>.poseclip.json and plays it. root_motion:true saves the hips' horizontal travel as an actor-root path with in-place frames for gameplay. Optional hips_rotation keys the pelvis' absolute world orientation while the body-part goals are solved. Returns a still per key.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip required | string | |
ease | linear / ease_in / ease_out / ease_in_out / hold | |
entity required | string | |
events | list of object | Notifies on the timeline, saved with the clip: [{name: footstep.L | grab | release | land | any, time: s, end: s (a window, e.g. contact.hands)}]. Gameplay sends them to the character's scripts as 'pose_event'. |
filmstrip | integer | Instead of a still per key, this many stills evenly through the clip (2...12). |
goals | object | Effector name → goal. Effectors: left_hand, right_hand, left_foot, right_foot, left_knee, right_knee, left_elbow, right_elbow, head, chest, left_wing_tip, right_wing_tip, tail_tip, or any bone name (wing.L.2, tail.2, index_03_r). A goal: {"on": object, "at": [x,y,z] world or a phrase ("top near edge, 0.3 m left of centre", "near face", "top far edge", "top centre"), "height": m above the object's base (a foot on a wall), "position": [x,y,z] world, "grip": "Prop.socket" (a hand on a prop's grip point: "Rifle.fore_grip") or a grip preset (sill, flat_palm, ledge_hang, door_handle, fist, relaxed, point, wrap), "palm": [x,y,z] or down/up/forward/back/left/right/toward/away (the way the palm or sole faces), "along": the same for the way the fingers or toes point, "pole": [x,y,z] where the elbow or knee points, "chain": bones that move (default 2), "weight": 0...1}. Directions are seen from the character facing the object. |
hips | object | Move the hips from standing: {lower: m, raise: m, forward: m, back: m, left: m, right: m, offset: [x,y,z] world, position: [x,y,z] world}. The body still moves them further when goals need it, unless hips_lock is true. |
hips_lock | boolean | Pin the hips exactly where hips puts them (or where they stand): a seated driver or rider stays in the seat and goals out of reach are reported as missed. Without it the hips slide toward goals, and the reply warns when they move more than 5 cm. |
hips_rotation | list of number | Absolute pelvis orientation in world axes as quaternion [x,y,z,w]. Must be finite and nonzero; normalized and saved in the character's asset axes. Omit to preserve the base orientation. |
look | list of number | |
look_at | any | An object name or a world point [x,y,z] the head turns to. |
loop | boolean | Play the clip looping (default false: hold the last frame); saved with the clip for gameplay (an emote loops, a vault plays once). |
plant_feet | boolean | Feet without goals stay planted at this key (default true; false lets them leave the ground: mid-vault). |
remove | boolean | Remove the key at `time` instead. |
root_motion | boolean | Gameplay carries the character by the clip's hips travel (a vault, a climb). |
stills | boolean | Return a still per key (default true). |
time | number |
pose_layers
Animation layers: a base pose clip with layers over it, each another clip, override (replaces the masked bones by its weight) or additive (adds its change from its own first frame, or from rest), masked to body parts (aim with the upper body over a walk; a breathing layer over anything). Layer clips loop over the base's length. Saves the result as a new clip and plays it.
| Argument | Type | What it does |
|---|---|---|
base required | string | |
camera | list of number | |
entity required | string | |
layers required | list of object | [{clip, mode: override|additive, weight: 0...1, mask: [parts], reference: first_frame|rest}] |
look | list of number | |
save_as | string |
pose_library
The pose library (Assets/Motion/Poses/library.poses.json): save a frame of a pose clip under a name, apply a saved pose to any body (bones by name, else by role; optionally masked to body parts, weighted, mirrored) as a new clip, list or delete poses.
| Argument | Type | What it does |
|---|---|---|
action required | save / apply / list / delete | |
camera | list of number | |
clip | string | save: the clip to take the pose from (default: the one playing). |
entity | string | |
look | list of number | |
mask | list of string | Body parts: upper_body, lower_body, spine, head, left_arm, right_arm, left_hand, right_hand, left_leg, right_leg, left_wing, right_wing, wings, tail, hair, or a bone name (it and everything under it); "-part" removes one (["upper_body", "-left_arm"]). |
mirror | boolean | |
name | string | |
note | string | |
save_as | string | |
time | number | save: which moment of the clip (default its start). |
weight | number |
pose_mirror
Mirror a pose clip left ↔ right (any rig with a symmetric rest pose: bones pair by .L/.R, _l/_r, Left/Right). Saves it as a new clip (default <clip>_mirrored) and plays it.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip | string | Pose clip (default: the one playing). |
entity required | string | |
look | list of number | |
save_as | string |
prop_grips
A prop's grip points (sockets: where each hand goes, which way the palm faces, which grip closes the fingers), named points (butt, muzzle, trigger, sight) and a gun's trigger guard opening, found from its parts (derived when a gun has no trigger or guard part) or declared in <model>.sockets.json beside it ("trigger_guard": {"center", "half"}).
| Argument | Type | What it does |
|---|---|---|
entity required | string | The prop (name or #id). |
put_down
A keyed put-down of what a hand holds: lowered to `to` [x, y, z] world (its hold point there; default straight down onto what's under it), the fingers opened, the hand drawn back; the object stays where it was put from the release on. Saved as a clip with the object's track and played.
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character (name or #id). |
hand required | left / right | |
object required | string | |
seconds | number | |
to required | list of number |
retarget_clip
Move a pose clip from one character to another with a different skeleton (bones by role; the hips scaled by leg length; keep_feet re-plants the feet where the source planted them). Saves it as a clip for the target (default <clip>_<target>) and plays it there.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip required | string | |
entity required | string | The character the clip was made on. |
keep_feet | boolean | |
look | list of number | |
save_as | string | |
to required | string | The character to move it to. |
rig_aim_hand
Turn a hand so its fingers point toward a place (fingers_toward [x, y, z] world) or along a direction (fingers_dir), and its palm faces a place (palm_toward) or direction (palm_dir); either alone keeps the other as near as it can. The wrist stays where it is. On a weapon hold being edited it goes into the hold. Undoable.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
fingers_dir | list of number | |
fingers_toward | list of number | |
hand required | left / right | |
palm_dir | list of number | |
palm_toward | list of number | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_edit_weapon_hold
Edit a weapon hold on the character in the scene: loads Assets/Motion/Poses/<preset>.weaponaim.json onto it (the gun in its hands, as in play) and shows its hand rig. Then turn and move joints with rig_rotate, rig_move and rig_finger: each change goes into the hold relative to the gun (a hand's place on the gun, a finger's curl), the same at every aim pitch, and plays live, in first person too. stance: ready or aim (the stance edited outside Play; in Play, the one shown). Save with rig_save_weapon_hold.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
frame | boolean | Move the camera onto the hands (default true; through Follow AI). |
pitch | number | Aim pitch to show outside Play, degrees (default 0). |
preset required | string | The weapon set's name (the .weaponaim.json file without its extension). |
prop | string | The gun object, attached to the right hand if it isn't held yet. |
stance | ready / aim | |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_effector
Move a hand, foot, the head, chest or hips (not a joint) with the whole body following: full-body IK keeps lengths and joint limits, leans for what's out of reach, and keeps the feet planted where they stand (pin_feet, default true). to [x, y, z] world or offset [x, y, z]; look_at turns the head. Seen moving over seconds; undoable.
| Argument | Type | What it does |
|---|---|---|
effector required | left_hand / right_hand / left_foot / right_foot / head / chest / hips | |
entity required | string | The character (name or #id). |
look_at | list of number | |
offset | list of number | |
pin_feet | boolean | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
still | boolean | Return a picture of the viewport with the rig (default true). |
to | list of number |
rig_finger
Curl and spread a finger in one go (all its joints), seen moving. curl: degrees each joint bends toward the palm (0 straight, about 90 a fist); spread: degrees away from the middle finger. relative adds to the finger's current pose instead of setting it from rest. finger "all" does every finger. Undoable.
| Argument | Type | What it does |
|---|---|---|
curl | number | |
entity required | string | The character (name or #id). |
finger required | thumb / index / middle / ring / pinky / all | |
hand required | L / R | |
relative | boolean | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
spread | number | |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_key
Key the character's current pose into a clip at `time` (seconds), with easing to the next key. The clip is saved as Assets/Motion/Poses/<clip>.poseclip.json (plays anywhere, animator clip "Poses/<clip>") with its keys beside it (<clip>.studio.json), and a key strip shows at the bottom of the viewport. remove: true deletes the key at `time`. Key by intent with goals (as pose_character's: "left_foot": {"on": "Wall", "at": "top near edge"}, "right_hand": {"position": [x, y, z]}): they're solved over the pose now (feet planted unless plant_feet false) and kept with the key. bpm sets the clip's beat grid; snap puts the key on it (bar, beat, half, quarter).
| Argument | Type | What it does |
|---|---|---|
bpm | number | Beats per minute for this clip's beat grid (dances). |
clip required | string | |
ease | ease_in_out / linear / ease_in / ease_out / hold | |
entity required | string | The character (name or #id). |
goals | object | Effector name → goal. Effectors: left_hand, right_hand, left_foot, right_foot, left_knee, right_knee, left_elbow, right_elbow, head, chest, left_wing_tip, right_wing_tip, tail_tip, or any bone name (wing.L.2, tail.2, index_03_r). A goal: {"on": object, "at": [x,y,z] world or a phrase ("top near edge, 0.3 m left of centre", "near face", "top far edge", "top centre"), "height": m above the object's base (a foot on a wall), "position": [x,y,z] world, "grip": "Prop.socket" (a hand on a prop's grip point: "Rifle.fore_grip") or a grip preset (sill, flat_palm, ledge_hang, door_handle, fist, relaxed, point, wrap), "palm": [x,y,z] or down/up/forward/back/left/right/toward/away (the way the palm or sole faces), "along": the same for the way the fingers or toes point, "pole": [x,y,z] where the elbow or knee points, "chain": bones that move (default 2), "weight": 0...1}. Directions are seen from the character facing the object. |
loop | boolean | |
plant_feet | boolean | |
remove | boolean | |
snap | off / bar / beat / half / quarter | Put the key on the beat grid. |
still | boolean | Return a picture of the viewport with the rig (default true). |
time required | number |
rig_move
Move a hand, foot or fingertip to a point (IK), seen moving over `seconds`: to [x, y, z] world, or offset [x, y, z] meters from where it is (world axes). chain is how many joints above it turn (default 2: shoulder and elbow for a hand, hip and knee for a foot, all three finger joints for a fingertip). Lengths never change: a point out of reach stops short. Undoable.
| Argument | Type | What it does |
|---|---|---|
chain | integer | Joints that turn (1...6). |
effector required | string | A joint as people say it ("L index 2", "R forearm", "head", "spine 2") or its bone name ("index_02_l"). |
entity required | string | The character (name or #id). |
offset | list of number | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
still | boolean | Return a picture of the viewport with the rig (default true). |
to | list of number |
rig_physics
Hand a stretch of a keyed clip to physics: from start to end (seconds) the body is a ragdoll (capsules, human joint ranges) carried by how it was moving, pushed by impulses ([{at: effector (head, chest, hips, left_hand...) or [x, y, z] world, impulse: [x, y, z] newton-seconds world}]: a car's hit is a few hundred), falling onto the floor; blend_in (default 0.1 s) eases into it, blend_out (0.4 s) back into the keys after. The clip is baked and played; keys still edit it. remove: true takes the range at start out.
| Argument | Type | What it does |
|---|---|---|
blend_in | number | |
blend_out | number | |
clip required | string | |
end | number | |
entity required | string | The character (name or #id). |
impulses | list of object | |
remove | boolean | |
start required | number | |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_play
Play a keyed clip on the character in the editor from the playhead (on: false stops it there). loop sets whether it repeats.
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character (name or #id). |
loop | boolean | |
on | boolean |
rig_pose_get
Read the pose: for each joint its turn from rest (degrees about its own axes, as rig_rotate's absolute mode takes it), its rotation and its world position. Also the picked joint, the joint the person last clicked, the clip and the weapon hold being edited.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
joints | list of string | Only these joints (default every joint). |
rig_release
Give the character back to its animation (drops the pose Pose Studio holds; the rig view stays) and end editing a weapon hold (refused while it has unsaved edits, unless discard: true). Undoable.
| Argument | Type | What it does |
|---|---|---|
discard | boolean | Drop a weapon hold's unsaved edits. |
entity required | string | The character (name or #id). |
rig_rotate
Turn one joint, seen moving over `seconds`. euler [x, y, z] degrees about the joint's own axes (the coloured rings: x red, y green, z blue), or axis [x, y, z] (the joint's own frame) with degrees. mode relative (default) turns from where it is; absolute sets its turn from the rest pose. Lengths never change. On a weapon hold being edited the change goes into the hold. Undoable.
| Argument | Type | What it does |
|---|---|---|
axis | list of number | |
axis_space | local / world | axis in the joint's own frame (local, default) or world axes. |
degrees | number | |
entity required | string | The character (name or #id). |
euler | list of number | |
joint required | string | A joint as people say it ("L index 2", "R forearm", "head", "spine 2") or its bone name ("index_02_l"). |
mode | relative / absolute | |
seconds | number | How long the move takes, so it can be seen (default 0.6; 0 at once). |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_save_weapon_hold
Write the weapon hold being edited back into its .weaponaim.json (every pitch sample), or into a new set with save_as. Reloads it and checks it matches.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character (name or #id). |
save_as | string |
rig_scrub
Show a keyed clip's pose at `time` (the playhead moves on the key strip). clip defaults to the one being keyed.
| Argument | Type | What it does |
|---|---|---|
clip | string | |
entity required | string | The character (name or #id). |
still | boolean | Return a picture of the viewport with the rig (default true). |
time required | number |
rig_select
Pick a joint: it is drawn large with its axes and rotation rings, so the person sees which one you mean. frame: true moves the camera in close on it (through Follow AI). Without a joint, returns the joint the person last clicked.
| Argument | Type | What it does |
|---|---|---|
distance | number | How far the camera sits from it when framing, meters (default 0.45 for a hand or finger, 1.4 otherwise). |
entity required | string | The character (name or #id). |
frame | boolean | Move the camera close on the joint (default false). |
joint | string | A joint as people say it ("L index 2", "R forearm", "head", "spine 2") or its bone name ("index_02_l"). |
still | boolean | Return a picture of the viewport with the rig (default true). |
rig_view
Show or hide a character's rig in the viewport: every joint as a dot (left side blue, right side orange, middle grey) and the bones as lines, drawn over the body, with short names. labels: all, hands (hands and fingers), limbs (no fingers) or selected (only the picked joint). xray false fades joints behind the body. Also says which joint the person last clicked.
| Argument | Type | What it does |
|---|---|---|
balance | boolean | Show the centre of mass over the feet's support (green balanced, red not). |
entity required | string | The character (name or #id). |
labels | all / hands / limbs / selected | |
on | boolean | Show (default true) or hide. |
still | boolean | Return a picture of the viewport with the rig (default true). |
xray | boolean |
secondary_motion
Overlap baked into a clip: tails, wings, hair and cloth flaps lag, swing and settle behind the body's motion (damped springs on each bone, held at its length, within joint limits). parts picks the chains; stiffness (default 120), damping (9), gravity (0.1: a droop). The character's travel counts when travel is true (the clip's root motion). Saves the result and plays it.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip required | string | |
damping | number | |
entity required | string | |
gravity | number | |
look | list of number | |
parts required | list of string | Body parts: upper_body, lower_body, spine, head, left_arm, right_arm, left_hand, right_hand, left_leg, right_leg, left_wing, right_wing, wings, tail, hair, or a bone name (it and everything under it); "-part" removes one (["upper_body", "-left_arm"]). |
save_as | string | |
stiffness | number |
set_move_hitbox core
Create or update a fighter's saved bone-attached attack capsule. A sphere has offset==tip. Exact bones, semantic hand.R/foot.L roles and explicit @root are supported. active_start <= hit frame < active_end at fps; frames includes recovery. Several named boxes may share a move, but each victim is hit once per activation. The clip and real bone path must connect; no missing-bone fallback or added reach. Undoable, protected objects respected.
| Argument | Type | What it does |
|---|---|---|
active_end | integer | |
active_start | integer | |
bone required | string | |
clip | string | |
clip_start | number | |
damage | number | |
end_bone | string | |
entity required | string | Existing entity name or #id. |
fps | number | |
frames | integer | |
hit_stop | integer | |
impulse | number | |
move required | string | |
name | string | Optional hitbox entity name; use distinct names for several boxes on one move. |
offset | list of number | |
radius | number | |
reaction | auto / flinch / stagger / knockdown | |
tip | list of number |
unequip_item
Take off what a character has in a slot (head, chest, legs, feet, hands, back, main_hand, off_hand or a game's own): its cloth comes off the body, its rider is removed. The running game while it plays, else the scene.
| Argument | Type | What it does |
|---|---|---|
entity required | string | The character: name (e.g. "Rowan") or id (e.g. "#7"). |
slot required | string | The slot to empty. |
video_to_motion
Turn a video of a person moving (a dance, a vault, a push; one person, whole body in view, a still camera) into an animation clip for our characters: Apple Vision reads the body's 3D pose on every frame, it is retargeted onto the character's skeleton, smoothed, the floor found and levelled, planted feet and hands held still (no skate), spine and neck kept within human limits, and the travel taken out as root motion with contact events (foot_down.l, hand_up.r...). Saved as Motion/Video/<name>.videomotion.json and played as clip "Video/<name>" (animator.clip, add_clip in sequences). variations: N also makes N natural variations (timing, amplitude, arm swing, stride, takeoff/landing, style noise), each re-solved and kept only if it keeps its contacts, doesn't skate or over-stretch and isn't jerkier: saved as <name>_v1... Returns the metrics, a side-by-side sheet (video frame over the character, same moments) and a sheet of the variations.
| Argument | Type | What it does |
|---|---|---|
character | string | The character to fit it to and render (default Characters/Mannequin.glb). |
film | any | Also film it, to judge frame by frame: true (30 frames a second) or a rate 2...30. Every moment shows the video, the character from the video's camera, and the character from its side and front (the cameras keep pace with it; the floor grid shows any slide). Saved as Renders/video2motion/<name>/film.mp4. |
from | number | Seconds into the video to start (default 0). |
image_fit | boolean | Line the 3D pose's trunk and limbs up with the 2D joints seen in the picture, keeping its depth (default true; the 3D estimate alone exaggerates stoops and knee bends). |
name required | string | The clip's name: lowercase letters, digits and _ ("dance_01"). |
pictures | boolean | Render the sheets (default true). |
seed | integer | |
smoothing | number | Smoothing in frames (default 1.5; 0 off). |
strength | number | How far variations may go, 0...1 (default 0.8). |
to | number | Seconds into the video to end (default: its end). |
treadmill | boolean | The video is of someone on a treadmill: the belt's speed (read off the foot standing on it) is given back to the whole body, so the feet plant and the walk travels as on the ground (default false). |
variations | integer | How many natural variations to make (0...8, default 4). |
video required | string | The video: a path in the project, its Assets folder, or the repository (Lab/...). |
warp_pose_clip
Motion warping: re-fit a keyed pose clip to other objects (a higher wall, a wider window). Each goal anchored to an object moves to the same spot on the new object's box (rename maps old object names to new ones; the same names re-fit to their current size), the keys are re-solved on the character, the clip re-baked, saved (as save_as) and played.
| Argument | Type | What it does |
|---|---|---|
camera | list of number | |
clip required | string | |
entity required | string | |
filmstrip | integer | |
look | list of number | |
rename | object | Old object name → new one. |
save_as | string |
weapon_tune
While playing (play_mode): tune the player's gun live, no script edit. `shot` options win over what the gun's kit passes, from the next shot: damage, headshot, speed (m/s), spread (°), range (m), drag, gravity, mass (kg), recoil (° of view kick), kick {back, up, side}, tracer, shell, flash, flash_size (×, 1.6), flash_light (lm), loudness. `remove` names options to stop tuning; `clear` drops them all first. `view` is first-person weapon data laid on the player's weapon: pattern [[up°, right°], ...] per shot of a burst, hip_recoil / ads_recoil {view, back, up, side, roll}, recovery, recovery_delay, ads_in, ads_out, ads_zoom, view_fov, ads_view_fov, zero, sight. `debug_view` true draws the last 4 s of shots: their flight (yellow), a red box on a body hit, orange where a round went on through, white where one met a surface. `save` "carbine" writes what is tuned into the project's Weapons/carbine.weapon.json ({ params, shot, view }), which the gun kit lays over its params as it starts and when the gun is equipped. Returns what is tuned now.
| Argument | Type | What it does |
|---|---|---|
clear | boolean | Drop every tuned shot option first. |
debug_view | boolean | Draw recent shots' flights and hits in the world. |
remove | list of string | Shot options to stop tuning. |
save | string | Write what is tuned now into the project's Weapons/<name>.weapon.json (merged over it); the gun kit loads it as it starts and when equipped (carbine, pistol...). |
shot | object | Shot options to tune (damage, speed, spread, kick {back, up, side}, recoil ...). |
view | object | First-person weapon data (pattern, hip_recoil, ads_recoil, recovery ...). |