diff --git a/game/reconstructed/mech2.cpp b/game/reconstructed/mech2.cpp index 5f1f890..59032e8 100644 --- a/game/reconstructed/mech2.cpp +++ b/game/reconstructed/mech2.cpp @@ -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; }