Fixed-torso free-aim left/right was reversed (tester report confirmed)

Field report: 'left/right is reversed'.  Investigation with screenshot
+ numeric verification found it channel-specific:

- A/D leg steering: CORRECT (D tap -> scenery slides left = turns
  right; verified via cockpit screenshots)
- Torso TWIST (turning-torso mechs, e.g. MadCat): CORRECT all along
  (E -> currentTwist +0.27 = right -- consistent with weeks of
  validated play; an interim blanket negation that broke this is
  reverted)
- Fixed-torso FREE-AIM slew (Blackhawk & friends): REVERSED -- E/right
  panned the view LEFT.  The slew consumer pans opposite the twist
  convention; on the pod the RIO layer owned the hardware sign.  Fix:
  negate stick_x ONLY at the two SetFreeAimSlew call sites
  (Standard + Veteran branches).

Verified after fix: MadCat E -> currentTwist +0.270 (right); Blackhawk
E -> view pans right.  New BT_INPUT_LOG diags: [input] twist
in/currentTwist (Standard branch) + mechYaw in the Basic elev line.

Note for testers: the tester was almost certainly flying a fixed-torso
mech -- 'reversed' reports should always record WHICH mech.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-18 16:59:09 -05:00
co-authored by Claude Fable 5
parent 1271d3bc76
commit af80e62070
+19 -3
View File
@@ -834,10 +834,13 @@ void
if (getenv("BT_INPUT_LOG"))
{
static float s_eacc2 = 0.0f; s_eacc2 += time_slice;
if (s_eacc2 >= 1.0f) { s_eacc2 = 0.0f;
if (s_eacc2 >= 0.5f) { s_eacc2 = 0.0f;
YawPitchRoll ypr;
ypr = mech->localOrigin.angularPosition;
DEBUG_STREAM << "[input] mppr elev in=" << stick_y
<< " torsoElev=" << torso->CurrentElevation()
<< " vel=" << torso->ElevationVelocity()
<< " mechYaw=" << (Scalar)ypr.yaw
<< "\n" << std::flush; }
}
}
@@ -864,13 +867,26 @@ void
//
if (torso == 0 || !torso->GetHorizontalEnabled()) // raw torso+0x250 == 0
{
if (cockpit) cockpit->SetFreeAimSlew(stick_x); // raw cockpit+0x28c
// 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
}
else
{
torso->SetAnalogTwistAxis(stick_x); // raw torso+0x1f0
}
if (torso) torso->SetAnalogElevationAxis(stick_y); // raw torso+0x1f4
if (torso && getenv("BT_INPUT_LOG"))
{
static float s_tacc = 0.0f; s_tacc += time_slice;
if (s_tacc >= 0.5f) { s_tacc = 0.0f;
DEBUG_STREAM << "[input] twist in=" << stick_x
<< " currentTwist=" << torso->CurrentTwist()
<< "\n" << std::flush; }
}
turnDemand = (pedal_3 == 0.0f) ? 0.0f : pedal_3;
@@ -891,7 +907,7 @@ void
//
if (torso == 0 || !torso->GetHorizontalEnabled())
{
if (cockpit) cockpit->SetFreeAimSlew(stick_x);
if (cockpit) cockpit->SetFreeAimSlew(-stick_x); // PORT SIGN (see Standard)
}
else
{