The online racing simulator
#1 - zeeaq
FreePIE script for steer center reduction on controllers (gamepads)
The ideal game settings with a gamepad / controller involves turning "Wheel Turn Compensation" all the way down to zero and adjusting steering preferences only using max lock (in setup).

While this is great for consistency, the BIG problem with doing this is that center of the steering becomes very sensitive and unstable. (sadly, steer center reduction is only limited to mouse/kb)

One way to tackle the issue is to select YES for "Remove Deadzone" but doing that creates such a strong steer center reduction effect that you might as well avoid it altogether.

A better way to solve it is by creating a virtual controller using vjoy + freepie

I thought I'd share the freepie script I'm using in case another gamepad user needs to tackle this problem.


if starting:
xbox = xbox360[0]
v = vJoy[0]
a_max = v.axisMax
a_min = -v.axisMax
steering = 0
steering_max = 16382
steering_min = -16382
m_redu = 10 ## steer center reduction, must be greater than or equal to 1. When set to 1, there is no center reduction.
center_redu = 1
cent = 0
if xbox.leftStickX > cent:
center_redu = m_redu ** (1 - (xbox.leftStickX / 1))
steering_angle = (xbox.leftStickX / 1 * steering_max) / center_redu
elif xbox.leftStickX < -cent:
center_redu = m_redu ** (1 - (xbox.leftStickX / -1))
steering_angle = (xbox.leftStickX / 1 * steering_max) / center_redu
else:
steering_angle = 0
if steering_angle > steering_max:
steering_angle = steering_max
elif steering_angle < steering_min:
steering_angle = steering_min
else:
steering = steering_angle
v.x = steering
if xbox.rightTrigger >= 0.5:
v.y = int(round(a_max * 2 * (xbox.rightTrigger - 0.5)))
else:
v.y = int(round(a_min + a_max * 2 * (xbox.rightTrigger)))
if xbox.leftTrigger >= 0.5:
v.z = int(round(a_max * 2 * (xbox.leftTrigger - 0.5)))
else:
v.z = int(round(a_min + a_max * 2 * (xbox.leftTrigger)))


v.setButton(0, xbox.a)
v.setButton(1, xbox.b)
v.setButton(2, xbox.x)
v.setButton(3, xbox.y)
v.setButton(4, xbox.leftShoulder)
v.setButton(5, xbox.rightShoulder)
v.setButton(6, xbox.up)
v.setButton(7, xbox.down)
v.setButton(8, xbox.left)
v.setButton(9, xbox.right)
v.setButton(10, xbox.back)
v.setButton(11, xbox.start)
v.setButton(12, xbox.leftThumb)
v.setButton(13, xbox.rightThumb)


FGED GREDG RDFGDR GSFDG