Skip to content

trivia_biped_ship

Jan Boon edited this page Jul 6, 2026 · 3 revisions

title: Trivia — The Karavan Ship Is a Biped description: The ship_tank_karavan vehicle is rigged on a full Character Studio biped; its hover-wobble is literally a walk cycle, and its hover height comes from the biped balance solver published: true date: 2026-07-06T00:00:00.000Z tags: editor: markdown dateCreated: 2026-07-06T00:00:00.000Z

ship_tank_karavan_wobble.png

The karavan tank ship (ship_tank_karavan, in stuff/caravan/agents/actors/ship/) has no vehicle rig, no path controller, no procedural hover setup. It is rigged on a Character Studio biped — open the .max and there is a regular little biped standing inside the hull, with the ship's boxes skinned onto its bones and the "head" section riding the head end of the rig:

ship_tank_karavan_biped_max.png

The biped is configured down to the CS minimum — no arms, one spine link, legs with a toe each, neck and head — and the exported hull binds to the shared ship skeleton (ca_spaceship_skel, one skeleton for the whole karavan ship family: ca_ship skins to Head+Pelvis+Spine, ca_spaceship2 to Pelvis+Spine, and the tank hull rigidly to Bip01 Spine alone).

Why would anyone do that? Because it is a genuinely clever hack:

  • The wobble is a walk cycle. The ship's characteristic tilt-and-bob while moving is literally the biped walking. The animators keyed ship motion the exact same way they keyed every character in the game — same tools, same exporter path (ship_tank_karavan_marche.anim, _course.anim, _demitour_* and so on are ordinary biped animations), and the runtime treats the ship as just another skeletal character.
  • The hover height is the balance solver. Even better: on some of the ship animations (e.g. ship_tank_karavan_mort_idle) the biped's vertical channel has no keys at all. Character Studio then computes the COM height itself through its balance/dynamics solve — the ship's resting hover height on those animations is not stored anywhere in the file; it is an output of the biped runtime, computed at export time. (Discovered the hard way while validating the headless .max → .anim exporter: the reference exporter's COM height for that file appears nowhere in the source data — see Pipeline Max Design §10d.)

The render above is the WebGL build (emscripten, GLES3 driver) playing the ship animations through the headless pipeline's own exports — the .skel from pipeline_max_export_skel and the .anim from pipeline_max_export_anim, no 3ds Max involved: the biped keytracks are decoded straight out of the .max scene storage and oversampled exactly like the original exporter did. One seamless loop of the hover-idle (fixed-timestep frames captured through the NeL driver, H.265):

ship_tank_karavan_idle_wobble.mp4

How the animations were authored (read straight from the keytracks): pure pose-to-pose minimalism. marche is two poses on pelvis/spine (frames 0 and 30) plus a three-key vertical bob; course is the same thing compressed to 26 frames; the idle is four turn keys and a three-key bob over 100 frames. Every key in the whole ship family sits on default TCB (25/25/25), no IK, no pivots, no footsteps — the one hand-animated piece is mort, 26 dense trajectory keys shaping the crash, and mort_idle is a trimmed save-as of mort (both carry a retiming artifact at frame 83.333) whose vertical track lost all its keys in the trim, which is how the wreck's hover height ended up as a balance-solver output.

So if the karavan ship's flight has always felt slightly... organic, that is because it is. It walks.

Clone this wiki locally