======================================================================== Readme for DXTweak ======================================================================== Synopsis -------- DXTweak allows you change calibration information and deadzone settings of a DirectInput game controller and test the effect of the changes directly. It can easily render your game controller behaviour totally weird. You have been warned. Limitations ----------- DXTweak only works correctly under Windows 95, Windows 98, Windows 98SE, and Windows Me (untested). Additonally, most newer devices (especially devices connected via USB) will have different default calibration values than DWTeak will default to (other than 0 to 655). To find out the correct ranges for a specific device, inspect the values reported with PosWDM (available in the "Gadgets" section at http://www.wingmanteam.com) after selecting the "Use Calibration Mode" checkbox. The most common ranges would be 0 to 255, 0 to 511, 0 to 655, or 0 to 1023. Why do I need to tweak the calibration/deadzone settings? --------------------------------------------------------- You want to have an oversensitive wheel while driving in a racing game. You want to brake your car only a little, but step fully on the brake pedal. You want to fly a helicopter and your joystick is too sensitive. In short: By reducing the overall range of motion of your controller (undercalibration) you can achieve higher sensitivity. By extending the range accepted by DirectInput (overcalibration) you can achieve higher precision. Usage ----- 1. Launch DXTweak. 2. Verify that the controller you wish to tweak is displayed in the box 'Polled device'. If it isn't, click on 'Next' until you see it. If it never appears, you got a problem with your installation: go and setup your device in the 'Game Controllers' control panel correctly. 3. Use your mouse/keyboard to change the values in the edit boxes and to checkmark the different options. Any change you make is written to the registry and DirectInput is notified about the change as soon as you leave the edit box (TAB). 4. Move your game controller to see the values it generates and how DirectInput/joyGetPos() modifies them. 5. Once you're happy with a configuration, you should exit DXTweak and start playing your game. Running DXTweak really imposes a heavy load on your system, don't run it while playing. If you want to change the values during the play: be aware that the game could loose the game controller object... How does the calibration tweaking work? (IMPORTANT) --------------------------------------------------- 1. DirectInput A game controller driver usually*1* reports axis position information as integer values between 0 and 655 to DirectInput. DirectInput linearly scales these values up to 0 to 65535. If calibration values are present for an axis (checkbox is checked), DirectInput assumes that the range of the values received from the driver are 'Min' to 'Max'. Additionally it expects the center of a given axis to be at driver value 'Cen'. The driver doesn't know anything about that. It is just reporting 0 to 655 all the time. Any value reported that is lower than 'Min' is treated as 'Min'. Any value reported higher than 'Max' is treated as 'Max'. *1*: Some analog devices and some drivers report a totally different range...don't be surprised. In general: devices which require calibration (like analog devices / external rudder/pedals) will have different ranges. I think it's time for some illustrations: No calibration data present: Driver DirectInput 655 -------------- 65535 | | | 328 -------------- 32768 | | | 0 ----------------- 0 (full movement on game controller equals full movement in game) Calibration data present: (Min = 100, Max = 555, Cen = 328) Driver DirectInput 655 /-- 65535 | /----/ 555 ----/ | 328 -------------- 32768 | 100 ----\ | \----\ 0 \---- 0 (partial movement on game controller equals full movement in game) Calibration data present: (Min = 0, Max = 1000, Cen = 328) Driver DirectInput 655---\ 65535 | \-----\ | \--- 47868 | 328 -------------- 32768 | 100 | 0 ----------------- 0 (lower part of movement on game controller equals linear lower movement in game, but higher part of movement never reaches maximum value in game) As you will notice, to achieve the overcalibration effect on the lower end of an axis, you should enter a negative number as 'Min'. 2. joyGetPos() and joyGetPosEx() (Win32 Multimedia API) -> not completely figured out how these functions perform calibration. If you have a clue, mail it to 'suggestions@wingmanteam.com'. How does deadzone work? ----------------------- In contrast to the calibration, the deadzone applies *all* the time to the values and is also the same for *all* game controllers. The value is a percentage which is applied against half the range of the axis. A deadzone of 100% means: report center position unless a 'Min' or 'Max' is seen. A deadzone of 50% means: report center unless the the position enters the first/last quarter of the range. I tweaked my controller, but the game seems not to see it! ---------------------------------------------------------- 1. The game could use joyGetPos() vs. DirectInput resulting in different behaviour and different settings to be applied. 2. The game could rewrite the calibration information by itself and/or use some internal calibration. Limits of the values -------------------- Deadzone values can be adjusted between 0 and 100. Calibration values can be adjusted between -1000 and 1655. Feedback -------- Please send any feedback to: suggestions@wingmanteam.com Trademarks ---------- All names mentioned here and in the program are trademark of their respective owners. // end of Readme for DXTweak ///////////////////////////////////////////