diff --git a/game/reconstructed/mechmppr.cpp b/game/reconstructed/mechmppr.cpp index 3b82771..0ce5acc 100644 --- a/game/reconstructed/mechmppr.cpp +++ b/game/reconstructed/mechmppr.cpp @@ -600,7 +600,13 @@ void { float key_throttle = gBTDrive.forced ? gBTDrive.forcedThrottle : gBTDrive.throttle; - float key_turn = gBTDrive.forced ? 0.0f : gBTDrive.turn; + // PORT SIGN (user live-verified 2026-07-18: left arrow turned the + // mech RIGHT): the sim's positive turnDemand is CCW (LEFT) -- math + // convention, same as the torso twist. On the pod the RIO Ranger + // owned the hardware sign; the desktop bridge must negate so that + // input-right (positive) = turn RIGHT. Forced/BT_GOTO harness + // demands are sim-frame already and stay un-negated. + float key_turn = gBTDrive.forced ? 0.0f : -gBTDrive.turn; // Headless harness (forced mode only): BT_FORCE_TURN holds a steering // demand; BT_FORCE_SECONDS releases the forced throttle after n // sim-seconds while KEEPING the turn (the turn-in-place repro). @@ -734,7 +740,14 @@ void } else { - stickPosition.x = gBTTwistAxis; // the torso axis + // PORT SIGN: positive twist is CCW (left) like the turn; + // negate so stick/E-key right = torso right (manual p8: + // "pulling your joystick to the right torso twists your + // 'Mech to the right"). The earlier "MadCat twist was + // correct" call was based on the same misread screenshot + // forensics as the turn -- the user's live left-arrow + // test invalidated both. + stickPosition.x = -gBTTwistAxis; // the torso axis pedalsPosition = key_turn; // A/D = the pedals // 'X' recenter pulse (2026-07-13): one-frame centerCommand // -> the sim arms recenterActive and Recenter (@004b6918) @@ -867,12 +880,9 @@ void // if (torso == 0 || !torso->GetHorizontalEnabled()) // raw torso+0x250 == 0 { - // PORT SIGN (field report 2026-07-18, 'left/right reversed' on - // FIXED-TORSO mechs): the free-aim slew consumer pans the view - // opposite the torso-twist convention (E/right panned LEFT on - // the Blackhawk; the MadCat's real twist was CORRECT). Negate - // only this channel so stick-right = aim-right on both. - if (cockpit) cockpit->SetFreeAimSlew(-stick_x); // raw cockpit+0x28c + // (sign handled ONCE at the key bridge: positive sim twist/slew + // = CCW/left; the bridge negates so input-right = right) + if (cockpit) cockpit->SetFreeAimSlew(stick_x); // raw cockpit+0x28c } else { @@ -907,7 +917,7 @@ void // if (torso == 0 || !torso->GetHorizontalEnabled()) { - if (cockpit) cockpit->SetFreeAimSlew(-stick_x); // PORT SIGN (see Standard) + if (cockpit) cockpit->SetFreeAimSlew(stick_x); // (sign at the bridge) } else {