Fix incorrect calculation setting the center of the joysticks one value off causing stick drift in games that assume already corrected input values (#2760)

This commit is contained in:
kalaposfos13 2025-04-07 22:58:00 +02:00 committed by GitHub
parent 7fee289b66
commit 08731303d8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 7 deletions

View file

@ -550,18 +550,18 @@ void ControllerOutput::FinalizeUpdate() {
break; break;
case Axis::TriggerLeft: case Axis::TriggerLeft:
ApplyDeadzone(new_param, lefttrigger_deadzone); ApplyDeadzone(new_param, lefttrigger_deadzone);
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param)); controller->Axis(0, c_axis, GetAxis(0x0, 0x7f, *new_param));
controller->CheckButton(0, OrbisPadButtonDataOffset::L2, *new_param > 0x20); controller->CheckButton(0, OrbisPadButtonDataOffset::L2, *new_param > 0x20);
return; return;
case Axis::TriggerRight: case Axis::TriggerRight:
ApplyDeadzone(new_param, righttrigger_deadzone); ApplyDeadzone(new_param, righttrigger_deadzone);
controller->Axis(0, c_axis, GetAxis(0x0, 0x80, *new_param)); controller->Axis(0, c_axis, GetAxis(0x0, 0x7f, *new_param));
controller->CheckButton(0, OrbisPadButtonDataOffset::R2, *new_param > 0x20); controller->CheckButton(0, OrbisPadButtonDataOffset::R2, *new_param > 0x20);
return; return;
default: default:
break; break;
} }
controller->Axis(0, c_axis, GetAxis(-0x80, 0x80, *new_param * multiplier)); controller->Axis(0, c_axis, GetAxis(-0x80, 0x7f, *new_param * multiplier));
} }
} }

View file

@ -61,11 +61,11 @@ Uint32 MousePolling(void* param, Uint32 id, Uint32 interval) {
float a_x = cos(angle) * output_speed, a_y = sin(angle) * output_speed; float a_x = cos(angle) * output_speed, a_y = sin(angle) * output_speed;
if (d_x != 0 && d_y != 0) { if (d_x != 0 && d_y != 0) {
controller->Axis(0, axis_x, GetAxis(-0x80, 0x80, a_x)); controller->Axis(0, axis_x, GetAxis(-0x80, 0x7f, a_x));
controller->Axis(0, axis_y, GetAxis(-0x80, 0x80, a_y)); controller->Axis(0, axis_y, GetAxis(-0x80, 0x7f, a_y));
} else { } else {
controller->Axis(0, axis_x, GetAxis(-0x80, 0x80, 0)); controller->Axis(0, axis_x, GetAxis(-0x80, 0x7f, 0));
controller->Axis(0, axis_y, GetAxis(-0x80, 0x80, 0)); controller->Axis(0, axis_y, GetAxis(-0x80, 0x7f, 0));
} }
return interval; return interval;