# SEQCTL.HPP / .CPP — reconstruction notes **Status: struct + ctor/dtor + Init RECONSTRUCTED (compile-verified); the per-frame playback methods (SelectSequence / Advance / Reset) staged. Helper 2/3 of the Mech embedded helpers ([[MECH-LAYOUT]] step 1).** `SequenceController` — the BT keyframe-animation player embedded in the Mech as `legAnimation` (@0x65c) and `bodyAnimation` (@0x6bc). Plays a gait clip: walks keyframes, interpolates each animated joint's rotation, writes it through the joint subsystem, returns the root-translation distance advanced. Absent from the 4.10 archive and the RP engine; reconstructed from the shipped binary + BT411's seqctl.cpp decomp. ## What's real vs staged - **Real (ctor-time):** default ctor (zeroes all fields) and `Init(Mech*)` — the Mech ctor calls `legAnimation.Init(this)` / `bodyAnimation.Init(this)` (binary; BT411 mech.cpp:685-686), so Init must run at construction. Init binds `owner` and caches `jointSubsystem = owner->GetJointSubsystem()` (JMOVER.HPP:104, returns `JointSubsystem*`), `clipResource = NULL`. - **Staged (per-frame, after boot):** `SelectSequence` (@004277a8, clip parse + resource lock), `Advance` (@0042790c, keyframe interpolation + joint writes — the gait engine, ~145 lines in the decomp), `Reset` (@004283b8). These fire only once the mech is ticking, well past the current ctor frontier, so they Fail loudly until reconstructed. ## Field layout Field set + order from BT411's binary-offset map (keyframeCount +0x14 … callbackArg3 +0x50). Byte-exact offsets are not required for the functional build (only wire/update-record layout needs that, and SequenceController is not serialised) — the members are declared as named fields and BC4.52 lays them out; the Mech's legAnimation/bodyAnimation slots size to `sizeof(SequenceController)` self-consistently. ## Placement 1995 filename unknown (decomp-only; BT411 used seqctl.cpp). Filed as BT/SEQCTL.HPP + SEQCTL.CPP. Not in the authentic BT.MAK member list, so the build appends seqctl.obj to bt.lib via the extra-objs fallback (order is immaterial — no static init).