gimped turn-in-place (#78 field find): arm the trn step in the gimp leg driver

Field test: a gimped mech pivoted as a rotating statue.  The binary's
turn dispatcher (FUN_004a9b5c, master perf) runs OUTSIDE the driver
selection so it arms trn for gimped mechs too -- 71f4's case 4 exists to
advance it.  The port relocated that dispatcher into the NORMAL leg
driver's Standing case, which stops running when the gimp driver takes
over.  Mirror the arming (same gates + lockstep body arm) into
AdvanceLegAnimationGimp's Standing case.  No gimp-turn clip exists in the
RES -- a limping mech step-turns with the normal trn clip, authentic.

Field-verified: stepping pivots both directions while gimped, heading
sweeping, clean re-entry into the wgr/ggl limp on throttle-up.  [T2]

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-07-29 16:44:13 -05:00
co-authored by Claude Fable 5
parent 3db1062eb6
commit 95cf49d1b6
+22
View File
@@ -1652,6 +1652,28 @@ Scalar
}
if (motionSource->commandedSpeed <= standSpeed) // +0x128 <= 0x530
{
// TURN-IN-PLACE while GIMPED (#78 field find, 2026-07-29: "rotating
// statue"). The binary's trn dispatcher (FUN_004a9b5c, master perf)
// runs OUTSIDE the driver selection, so it arms the turn step for
// gimped mechs too -- 71f4's case 4 exists to advance it. The port
// relocated that dispatcher into the NORMAL driver's Standing case,
// which stops running the moment this driver takes over. Mirror it
// (same gates + lockstep body arm; no reverse entry here -- the gimp
// machines refuse reverse).
const int trnIsRepl2 = (GetInstance() == ReplicantInstance);
const Scalar trnEntryMax2 = trnIsRepl2 ? standSpeed * 0.25f : standSpeed;
if (turnCapable != 0 && gimpMppr != 0
&& motionSource->commandedSpeed >= ZeroSpeed
&& motionSource->commandedSpeed <= trnEntryMax2
&& (gimpMppr->turnDemand > 0.05f
|| gimpMppr->turnDemand < -0.05f)
&& (trnIsRepl2 || bodyAnimationState == StandingAnimation))
{
SetLegAnimation(4); // trn, channel A
if (!trnIsRepl2)
SetBodyAnimation(4); // lockstep, masters
goto advance_normally;
}
distance = 0.0f;
break;
}