The thing with the normal _AXIS() function is that with an XInput device, such as a PC's USB gamepad, or an Xbox 360 controller, the third axis corresponds to the L/R trigger. The problem is that L is on the positive axis and R is on the negative. If both triggers are pulled together, it nulls out to it's neutral state, and it's as if neither trigger had ever been pulled.
Here are some data that I calculated:
XInput Axis 3:
Neutral=-.0000152587890625
L Trigger Max=.996124267578125
L Trigger States=255
L trigger
Step=.00390625 +-.000000005R Trigger Max=-.9960936903953552
R Trigger States=255
R Trigger
Step=-.00390625 +-.000000005
As you can see, for every step that you pull both triggers together the axis cancels itself out. This is normally not a problem as it's easy to tell if both triggers are being pulled part way, as a human could never perfectly half pull two triggers with the exact same force at the exact same moment. The problem arises when both triggers are pulled all the way, they cancel back out to the axis' neutral state, which tells the program the triggers aren't even being pulled. I was thinking if I could poll the gamepad directly, I may be able to sort the two apart.
I mean, I could build my games around not using both triggers simultaneously, but... If I can't solve such a tedious problem, how can I be a game developer? ;D LOL
[EDIT:] Random thought, but can we use &H3DA to only update our screens between vertical retraces? _DISPLAY and hardware images only gets rid of so much screen tearing.