Live preview (JavaScript)
The loop is played live in your browser from the validated loop table (the same data the reference render below was made from); the badge on the player is its self-test (seam + motion probes). The pre-rendered reference follows.
COB-exact: timeline 1:1 from tsfcv.cob (activatescr/deactivatescr, disassembled with _cob_dis.py). StateChg staged-deploy family: 2 open stages, then the compiled close order — not a reversed activate. Fire/hit/death/smoke scripts are engine-driven or firing-only and not part of this loop.
Animation

PNG frames

Frame 0 / 470.00 s
COB timeline (TSFCV.COB)
- 0.00–0.40 s — Closed rest pose (3DO zero point)
- 0.40–0.79 s — activatescr stage 1: door1 z-turn 0.0°→71.0°, door2 z-turn 0.0°→-71.0°
- 0.79–1.20 s — activatescr stage 2: arm x-turn 0.0°→90.0°, nano x-turn 0.0°→-66.0°
- 2.40–2.79 s — deactivatescr stage 1: arm x-turn 90.0°→0.0°, nano x-turn -66.0°→0.0°
- 2.79–3.20 s — deactivatescr stage 2: door1 z-turn 71.0°→0.0°, door2 z-turn -71.0°→0.0°
- 3.20–3.80 s — closed again — loop restarts (fire/hit/death scripts are engine-driven, not in this loop)
Every stage duration equals its COB sleep exactly; values are raw COB units (turns: BAM 65536 = 360°, moves: elmo × 163840). Renderer conversions follow the proven family conventions (_cob_anim.py).