0
0
Fork 0
mirror of https://git.do.srb2.org/STJr/SRB2.git synced 2025-03-20 18:01:16 +00:00

Merge branch 'deadzone-sigfpe-fix' into 'master'

Fix division-by-0 crash from 100% gamepad deadzones, and lack of input from 0% deadzones

See merge request 
This commit is contained in:
SteelT 2020-03-18 15:39:04 -04:00
commit e3a5164ddf

View file

@ -1044,18 +1044,17 @@ static INT32 G_BasicDeadZoneCalculation(INT32 magnitude, fixed_t deadZone)
{ {
const INT32 jdeadzone = (JOYAXISRANGE * deadZone) / FRACUNIT; const INT32 jdeadzone = (JOYAXISRANGE * deadZone) / FRACUNIT;
INT32 deadzoneAppliedValue = 0; INT32 deadzoneAppliedValue = 0;
INT32 adjustedMagnitude = abs(magnitude);
if (jdeadzone > 0) if (jdeadzone >= JOYAXISRANGE && adjustedMagnitude >= JOYAXISRANGE) // If the deadzone and magnitude are both 100%...
return JOYAXISRANGE; // ...return 100% input directly, to avoid dividing by 0
else if (adjustedMagnitude > jdeadzone) // Otherwise, calculate how much the magnitude exceeds the deadzone
{ {
if (magnitude > jdeadzone) adjustedMagnitude = min(adjustedMagnitude, JOYAXISRANGE);
{
INT32 adjustedMagnitude = abs(magnitude);
adjustedMagnitude = min(adjustedMagnitude, JOYAXISRANGE);
adjustedMagnitude -= jdeadzone; adjustedMagnitude -= jdeadzone;
deadzoneAppliedValue = (adjustedMagnitude * JOYAXISRANGE) / (JOYAXISRANGE - jdeadzone); deadzoneAppliedValue = (adjustedMagnitude * JOYAXISRANGE) / (JOYAXISRANGE - jdeadzone);
}
} }
return deadzoneAppliedValue; return deadzoneAppliedValue;