COB-exact: timeline 1:1 from armlab.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 / 780.00 s
COB timeline (ARMLAB.COB)
- 0.00–0.40 s — Closed rest pose (3DO zero point)
- 0.40–1.40 s — activatescr stage 1: door4A z-move 0.00 elmo→-9.60 elmo, door3A z-move 0.00 elmo→-9.50 elmo, door2A z-move 0.00 elmo→10.00 elmo, door1A z-move 0.00 elmo→9.90 elmo …
- 1.40–2.45 s — activatescr stage 2: door1 x-move 0.00 elmo→7.50 elmo, door2 x-move 0.00 elmo→-7.50 elmo, door3 x-move 0.00 elmo→7.50 elmo, door4 x-move 0.00 elmo→-7.50 elmo
- 3.65–4.65 s — deactivatescr stage 1: door1 x-move 7.50 elmo→0.00 elmo, door2 x-move -7.50 elmo→0.00 elmo, door3 x-move 7.50 elmo→0.00 elmo, door4 x-move -7.50 elmo→0.00 elmo
- 4.65–5.71 s — deactivatescr stage 2: door4A z-move -9.60 elmo→0.00 elmo, door3A z-move -9.50 elmo→0.00 elmo, door2A z-move 10.00 elmo→0.00 elmo, door1A z-move 9.90 elmo→0.00 elmo …
- 5.71–6.31 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).