Turn/twist/free-aim sign family: negate ONCE at the key bridge (user-verified)

User live-tested: 'if i push the left arrow the mech turns right' --
correct, and it invalidated my earlier screenshot-forensics 'D=right
verified' claim (the yaw telemetry actually agreed with the user all
along: D gave POSITIVE yaw = CCW = LEFT; the sim uses math convention,
positive = counter-clockwise, for turn AND twist).

On the pod the RIO Ranger owned the hardware sign; the desktop bridge
now negates in ONE place per channel family:
- key_turn = -gBTDrive.turn (forced/BT_GOTO harness demands stay
  sim-frame, un-negated)
- stickPosition.x = -gBTTwistAxis (Standard/Veteran torso stick)
- SetFreeAimSlew call-site negations REMOVED (the bridge negation now
  flows through; double-flip removed)

Matches the manual (p8): 'pulling your joystick to the right torso
twists your Mech to the right.'  User verified live: arrows steer
correctly (Blackhawk, basic mode) and MadCat torso twist is correct
in middle mode.

LESSON (recorded): large-rotation screenshot comparisons are AMBIGUOUS
(both directions put 'new scenery at an edge'); trust tracked
landmarks, numeric telemetry with an established convention, or the
user's live observation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-18 17:20:19 -05:00
co-authored by Claude Fable 5
parent 02d5543c7f
commit cb82d8c1d0
+19 -9
View File
@@ -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
{