diff --git a/src/g_game.c b/src/g_game.c
index 4db55329e1f5c71f082fd82e02bf950f0eb08faf..2cddaf8b81a45b8d9c9a4854c41e2abe916569bc 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1045,14 +1045,19 @@ static INT32 G_BasicDeadZoneCalculation(INT32 magnitude, fixed_t deadZone)
 	const INT32 jdeadzone = (JOYAXISRANGE * deadZone) / FRACUNIT;
 	INT32 deadzoneAppliedValue = 0;
 
-	if (jdeadzone > 0 && magnitude > jdeadzone && deadZone < FRACUNIT)
+	if (jdeadzone > 0 && magnitude > jdeadzone)
 	{
-		INT32 adjustedMagnitude = abs(magnitude);
-		adjustedMagnitude = min(adjustedMagnitude, JOYAXISRANGE);
+		if (deadZone >= FRACUNIT) // If the deadzone value is at 100%...
+			return JOYAXISRANGE; // ...return 100% input directly, to avoid dividing by 0
+		else
+		{
+			INT32 adjustedMagnitude = abs(magnitude);
+			adjustedMagnitude = min(adjustedMagnitude, JOYAXISRANGE);
 
-		adjustedMagnitude -= jdeadzone;
+			adjustedMagnitude -= jdeadzone;
 
-		deadzoneAppliedValue = (adjustedMagnitude * JOYAXISRANGE) / (JOYAXISRANGE - jdeadzone);
+			deadzoneAppliedValue = (adjustedMagnitude * JOYAXISRANGE) / (JOYAXISRANGE - jdeadzone);
+		}
 	}
 
 	return deadzoneAppliedValue;