Friday, January 01, 2010

New Toys, New Challenges

It never fails.  Buy a new gadget and discover to your dismay that the practical implementation of the software that comes with said new toy, is not as good as the marketing people would have you believe.

In this case, we’re talking about the Logitech G940 H.O.T.A.S. joystick system.  (HOTAS is Hands on Throttle and Stick, and in this case also includes rudder pedals).

So, I open up my new christmas present and discover that it works, but only partially.  When trying to us the setup with a few older games, the rudder pedals didn’t work, instead, the Trim control for the rudder axis was being used instead.  To make a potentially very long blog post short, here is the solution to that problem, at least in the case of Search and Rescue 4 and Vietnam MedEvac, and without having tested, bets are this will make Battlefield 1942 and several other games work as intended as well.  The great irony is, that this can only be done by NOT using the provide Logitech device drivers for the G940, you have to use the generic HID game device drivers in order for this to work, because the Logitech drivers split the controllers into 3 separate devices, and that just makes this problem even worse.

After flipping through the Microsoft HID/joystick specs, and I found a way to reorder the inputs so that Vietnam MedEvac will work!

This is a registry hack, so, beware of the possible consequences.  Never the less, windows allows you to override what control is assigned to a given input when used with DirectInput.

Steps for Windows 7 x64 (I haven't tried on XP, and I probably won't.

1.) Assign the generic HID/USB gameport device drivers to the G940.  This makes it such that the G940 shows up as one device.

2.) open regedit.

3.) Search for G940

4.) you'll eventually come to the hive for HKEY_USERS\S-1-5-21-####-####\ System\CurrentControlSet\Control\ MediaProperties\PrivateProperties\Joystick\OEM\VID_046D&PDI_C287\

5.) Add a new key -> Axes

6.) Add new keys 0 through 6 (the key name is only a number 0,1,2,3,4,5,6)

7.) Add a binary value "Attributes" for each of the keys 0 thru 6

8.)   Assign the value 01 81 00 00 01 00 30 00 the the attribute for 0

9.)   Assign the value 01 81 00 00 01 00 31 00 the the attribute for 1

10.) Assign the value 01 81 00 00 01 00 32 00 the the attribute for 2

11.) Assign the value 01 81 00 00 01 00 33 00 the the attribute for 3

12.) Assign the value 01 81 00 00 01 00 34 00 the the attribute for 4

13.) Assign the value 01 81 00 00 01 00 35 00 the the attribute for 5

14.) Assign the value 01 81 00 00 01 00 36 00 the the attribute for 6

Now, this just keeps things as they are.  So to swap the Z rotation axis, and the Z axis, we just need to swap the attribute assignment.

10.) Assign the value 01 81 00 00 01 00 35 00 the the attribute for 2

10.) Assign the value 01 81 00 00 01 00 32 00 the the attribute for 5

See what we did?  Unplug the G940, wait a few seconds and plug it back in.

Go look at the properites in Game devices control panel now and see that Axis Z and Z rotation are swapped.

Similarly you could use this method for any of the axes that you want to change out.

Unfortunately, this only works when you don't use the Logitech drivers.  But this also tells me that Logitech could easily fix this problem if they wanted to, all I had to do was take 30 minutes and read the WHDC documentation from Microsoft to move the axis assignments around.

Keep in mind however, that making this change could cause another game program to be mixed up on which axis goes where, but as I said, I have a suspicion that this will also fix the rudder pedals problem that I have with Battlefield 1942 as well.