WARNING: THESE CHANGES ARE PERMANENT! YOU WILL NOT BE ABLE TO USE THE PEDALS AGAIN IN A RACING GAME!

NOTE: It looks like the Linux versions of the Quake engines do not support Advanced Joystick features. This means that foot pedals (even with these mods) will not work with the Linux versions.



Authors
Pre-configured pedals can be purchased from



Last Updated



Tools you will need



Parts you will need

V3 racing wheel's pedals or similar
(it is better to get pedals that have both footrests the same)
OR Sega Saturn Pedals
$40

$15
momentary push button switch$1
cheap joystick to rip apart
OR 15-pin male D-shell connector
$10
$5
misc. pack of resistors$1
small amount of (insulated) wire$2



Time



Theory

The pedals are actually one axis (the wheel is the other), and because of the way that potentiometers are configured, when the right pedal is depressed, a potentiometer's resistance changes, causing the total resistance to increase. When the left pedal is depressed, it reduces the resistance. In this configuration, the right pedal acts as the accelerator, and the left acts as the gas.

Here's a diagram of what happens:
(resistance is the vertical axis)

  |           | ___           |
  |           | |X|           |
  |           | |X|           | ___
  |           | |X|           | |X|
  |           | |X|           | |X|
  |           | |X|           | |X|
  |           | |X|           | |X|
  +------     +------         +------

  at rest     press           press brake
              accelerator     also

The way the advanced joystick settings works for Quake-style games, we need to have the "at rest" resistance set at a middle value, and when the left pedal is depressed, reduce the resistance, and when the right pedal is depressed, increase the resistance (this is how "normal" joysticks operate). We don't care what happens when the left and the right are pressed simultaneously, because it does not make sense when strafeing.

Here's a diagram of what we'd like to happen:
(resistance is the vertical axis)

  |           | ___           |
  |           | |X|           |
  | ___       | |X|           |
  | |X|       | |X|           |
  | |X|       | |X|           |
  | |X|       | |X|           | ___
  | |X|       | |X|           | |X|
  +------     +------         +------

  at rest     press           press brake
              accelerator




Procedure

If you have Sega Saturn pedals, then you are in luck! The modifications are much less invasive (we will create an adapter instead of hacking the internal wiring), because the axis return independent values! Please go to this page for modifying the Sega Saturn pedals. People with PC-pedals, read on...

Open the casing of the pedals (the V3 has six screws, two of them are under pads). You should see only a few wires coming in. One is ground, one is +5 Volts, the other is the return value.

Each potentiometer has three connecting points, one for "in", one for "center tap out", and one for "out". Reconfigure the wires on these potentiometers to reflect the configuration mentioned in the Theory section (above). In my V3 pedals, the wires are reconfigured as follows:
Like this (when pedals are viewed upside-down):

   red wire  -------------------------+
                                      |
   white wire ---+                    |
                 |                    |   +-------------------+
                 |                    |   |                   |
                 |       [*********]  |   |      [*********]  |
                 |   +---[  R P    ]  |   +--+---[  L P    ]  |
                 |       [  I E P  ]  |          [  E E P  ]  |
   +-100K-Ohm----+---+---[  G D O  ]  +------+---[  F D O  ]  |
   |                     [  H A T  ]             [  T A T  ]  |
   +-----------------+---[  T L    ]         +---[    L    ]  |
                     |   [*********]             [*********]  |
                     |                                        |
                     +----------------------------------------+


PINS ON A GAME PORT DB-15
PIN                                 SIGNAL
 1 -------------------------------- +5V DC
 2 -------------------------------- Button 4 (A_PB1)
 3 -------------------------------- Pos'n 0  (A_X)
 4 -------------------------------- GND
 5 -------------------------------- GND
 6 -------------------------------- Pos'n 1  (A_Y)
 7 -------------------------------- Button 5 (A_PB2)
 8 -------------------------------- +5V DC
 9 -------------------------------- +5V DC
10 -------------------------------- Button 6 (B_PB1)
11 -------------------------------- Pos'n 2  (B_X)
12 -------------------------------- GND
13 -------------------------------- Pos'n 3  (B_Y)
14 -------------------------------- Button 7 (B_PB2)
15 -------------------------------- +5V DC

Now you must install a button on the joystick, because Window's setup requires you to press the joystick's button several times during calibration. If you are not using Windows, then you don't need to install a button: go to step 2.
  1. Connect the 15-pin D shell connector's pin 2 to pin 4 via the momentary switch. To do this on the V3's pedals, you will have to cut the cable that goes between the pedals and the computer and splice on a new cable, because the V3's cable does NOT contain the wires for the button! Take a cheap-o joystick and cut off its cable, about six inches from the 15-pin D shell end. Find the wires for pins 2 and 4 on the new cable (using an Ohm-meter), and solder the momentary pushbutton between the two wires.
  2. Find pin 3 on the D-shell connector and connect the pedal's white wire (the wire that goes to the right pedal's pot) to it. This is the axis's return value.
  3. Find pins 1 and 6 on the D-shell connector. Connect the pedal's red wire (the wire that goes to the left pedal's pot) directly to pin 1, and also to pin 6 through a 3.3 K-Ohm (orange-orange-red) resistor. This resistor is necessary because Windows will not recognize a joystick with a "floating" axis, so we must fix its position using a resistor.
    Like this:
    
      V3's white wire -----------------------------> pin 3
    
      V3's red wire --+----------------------------> pin 1
                      |
                      +--> 3.3 K-Ohm resistor -----> pin 6
    
  4. Connect the pedal's grounding wire to the new connector.
  5. Wrap all of these connections in electrical tape, to insulate the wires from eachother.

Windows users
Unix users
The crosshair should move left-right [reversed], not up-down. If they move up-down, then swap joy_advaxisy and joy_advaxisx in the config file. No big deal.



Quake II

Edit your quake2/baseq2/autoexec.cfg file and add the following lines:
  echo Setting up Pedals
  // we have a joystick:
  set in_joystick 1
  // it is advanced:
  set joy_advanced 1

  // pedal's axis (0=not used, 1=forward/backward, 2=pitch, 3=strafe, 4=yaw)
  // Y axis unused:
  set joy_advaxisy 0
  // X axis used for strafe:
  set joy_advaxisx 3

  //set joy_sidethreshold 0.15
  //set joy_sidesensitivity -1

  // name does not matter, just has to have one:
  set joy_name "PedalsXY"

  // strafe speed:
  //set cl_sidespeed 300

  joy_advancedupdate
  echo Done setting up Pedals
Start Quake II, load a map, and start strafeing with the pedals!

If you mess with the joy_* variables in the console window, you must use the joy_advancedupdate command for the new joy_* values to be recognized. You may want to play with the joy_side{sensitivity,threshold}, to get the strafe direction and threshold correct. Also, you may want to mess with the cl_sidespeed variable to set the rate of your strafeing.

For more on the Quake II console commands, visit:
http://www.planetquake.com/console/commands/quake_2.html



Half-Life

Edit your half-life/valve/autoexec.cfg and add the following lines:
(also in your mod directories, like tfc)
  echo Setting up Pedals
  // we have a joystick:
  set joystick 1
  // it is advanced:
  set joyadvanced 1

  // pedal's axis (0=not used, 1=forward/backward, 2=pitch, 3=strafe, 4=yaw)
  // Y axis unused:
  set joyadvaxisy 0
  // X axis used for strafe:
  set joyadvaxisx 3

  //set joysidethreshold 0.15
  //set joysidesensitivity -1

  // name does not matter, just has to have one:
  set joyname "PedalsXY"

  // strafe speed:
  //set cl_sidespeed 300

  joyadvancedupdate
  echo Done setting up Pedals
Start Half-Life, load a map, and start strafeing with the pedals!

If you mess with the joy* variables in the console window, you must use the joyadvancedupdate command for the new joy* values to be recognized. You may want to play with the joyside{sensitivity,threshold}, to get the strafe direction and threshold correct.
Also, you may want to mess with the cl_sidespeed variable to set the rate of your strafeing.

For more on the Half-Life console commands, visit:
http://www.pcgame.com/randy/console/input.htm