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):

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.

The full animation set

All 23 ship animations, rendered the same way (headless pipeline exports, fixed-timestep driver capture, H.265). The death crash mort is the one hand-animated piece — 26 trajectory keys:

mort

demitour_d

coup_1

stun_init

The rest: coup_2 · course · course_coup · demitour_g · esquive · idle · idle2 · impact · marche · marche_arriere · marche_arriere_coup · marche_coup · mort_idle · straf_droit · straf_gauche · stun_end · stun_loop · tourne_d · tourne_g

Clone this wiki locally