This is a full Guide to the DirectX Override Functions included in PGP. It will not only explain the purpose of these DX Overrides, but also explain in depth how to use them. Before Reading This I advise you read my guide on Xinput and DirectInput unless you are already familiar with these Terms.

The Purpose Of The DirectX Overrides:
The Purpose of These Overrides is to be able to Manipulate The In Game Controller Support of a Game. The DirectX Overrides are Only to modify Controller Support, They do not change the way a game responds to Keyboard and Mouse or the Keyboard and mouse through Pinnacle. In many Cases when using the overrides Keyboard and Mouse Mappings will not be required at all. By Manipulate I mean let you change almost anything. You Can Change the position of Buttons, Combine Buttons With Keyboard Commands, Change Deadzones of Joysticks, Convert between Input Types, and much more. This Allows the User to tweak the In Game Support of any Game to Their Liking. A Note The Overrides will have no effect in a Game Without Controller Support.

Limitations of The Overrides:
Although Compatibility is High With Xinput Games, Compatibility is still fairly low with DirectInput Games. Compatibility List's for games can be found here. But Just because a Game isn't on the Compatibility list that doesn't mean it won't work. These Features are still in Beta Stages so we encourage people to test and report their findings in the DX Override Beta Testing Forum.

The "Hook" Files:
No DirectX Override will work without The Hook Files Installed. These Files can be Installed by going to GAME PROFILES>EDIT>ADVANCED and Then Pressing Install Hook as shown in picture below.

These "Hook" Files are a Collection of Modified System Files Installed to The Game Directory. They should Have no effect on the Game whatsoever unless being used in conjunction with PGP. In The rare event they do effect the Game (e.g. cause it to crash) Then Please Report this in the DX Override Beta Testing Forum.

The Overrides and Their Purpose:
When In The "Edit Configuration Window" In PGP you will notice a Sub Menu Called "Set DirectX Override" When Assigning Commands. This Sub Menu is Very Powerful and is where most of the Overrides will be assigned. This Sub Menu Should look like this (Some Overrides may not be available for certain Buttons/Sticks).

Now I will Go Into Each Subcategory in Depth and explain what each of them does.

Dinput Button
A DirectInput (Dinput) Button sends a DirectInput Signal to the Game, to tell it a Specific DirectInput Button has been Pressed. This can be assigned to any Button on Your Controller, It can be used to Change the Position of a Button or to emulate a Trigger as a Button, So Older games can use it. There are 24 DirectInput Buttons That can be Mapped in Pinnacle. Most Games Set Up for DirectInput use the following layout in terms of a Class Alpha Pad.
Code:
DI Button 1 = X/[]
DI Button 2 = A/X
DI Button 3 = B/O
DI Button 4 = Y//\
DI Button 5 = LB/L1
DI Button 6 = RB/R1
DI Button 7 = LT/L2
DI Button 8 = RT/R2
DI Button 9 = Back/Select
DI Button 10 = Start
DI Button 11 = LSBTN/L3
DI Button 12 = RSBTN/R3
This is the Basic Layout You would want to Use if trying to play a DirectInput game using the overrides. However another point of the Overrides is the ability to change round buttons. So just take this layout above as a DirectInput template. Note This Override will have no effect in an Xinput game.

Dinput Dpad
A Dinput Dpad like a Dinput Button will also send a DirectInput Signal to your Game. But This time it will tell the game the selected Dpad Direction has been pressed instead of a Button. These Overrides are Typically assigned to the Dpad of your Controller however can in Theory be assigned to any Button on your Controller allowing you to change The Position of Controls Around, as you can with a Dinput Button. Please Note the 8 Way Dpad is only required if the game makes direct use of it. Note This Override will have no effect in an Xinput game.

Dinput Axis
A Dinput Axis sends the signal that a DirectInput Axis has been moved to your Game. These are Most Commonly Assigned to Sticks However can also sometimes be Assigned to Trigger and/or Motion Sensitive Movements. Most DirectInput Games expect the Following Axis Mappings.
Code:
Left Stick (Horizontal) = X Axis
Left Stick (Vertical) = Y Axis
Right Stick (Horizontal) = Z Rotation
Right Stick (Vertical) = Z Axis
These Axis Mappings can also be useful even if your Controller's Stick Mapping is already set up like this. Because with a DirectX Override you are able to modify the Sensitivity/Deadzone/Range Using the "Setup Joystick" Button next to The Command. Of course as always the above mappings are merely a guide for what most games expect. Please feel free to experiment with these mappings. Note This Override will have no effect in an Xinput game.

Dinput Axis (Inverted)
This is exactly the Same as a Dinput Axis except it reverses the Axis. This can be handy for sticks if People are used to an Invert function. Or Maybe even for Triggers if you want to swap round The Position of Them.

Xinput Button
An Xinput Button will send an Xinput Signal to Your Game, Telling the Game a Specific Xinput Button has been Pressed. It is much more obvious which button is which with an Xinput Button, as there is only one possible layout. Therefore each Xinput Button Tells you in Brackets After the override what Button it is. Pinnacle now Comes with a built In Xbox 360 Controller Emulator allowing you to set up any Class Alpha pad like a 360 Controller, and play Xinput Games using the Overrides. To See how to set this up look here. Of Course it is also Possible to Change the Positions of Buttons again to customize Controls as it is with DirectInput. Note This Override will have no effect in a DirectInput Game.

Xinput Dpad
An Xinput Dpad is essentially the same as a Dinput Dpad except an Xinput Signal is Sent Instead of a DirectInput Signal. For This Reason This override will have no effect on a DirectInput Game.

Xinput Axis
An Xinput Axis is similar to a Dinput Axis except when using Xinput Triggers also act as Axes. Again as with an Xinput Button you are told next to the override what each Axis Does, So I will not Bother going Through this. Instead I will explain when to use each type of Trigger. The L Trigger (-Z Axis) and R Trigger (+ Z Axis) Should be used when you are assigning them to Triggers on Separate Individual Axes. If A Controller has One Single Axis for Left and Right Trigger then Triggers (L+R Z Axis) should be used. In All Other Cases (Where LT and RT are not being assigned to an Axis) Then XI Button 11 (LT) and XI Button 12 (RT) should be used. Again This Override will have no effect in a DirectInput Game.

Xinput Axis (Inverted)
This is identical to an Xinput Axis except it reverses the Axis. You Can See Why this is useful by referring to the Dinput Axis (Inverted) Section.

Game Read
The Game Read Determines whether the Game can see this Button or Not. If This is set to Blocked the game will not be able to read this Button or Stick in its current state. If an Override is applied the original Button is automatically Blocked to avoid confliction. Allow Means the Opposite of Block, and a Game is able to see the original button. Blocking a Key can also be handy when creating a profile using keyboard and Mouse Commands so it doesn't conflict with In game Controller Support.

Command Steps Overrides:
Many people have noticed that most of the DX Overrides are also available as Command Steps. This has caused some confusion as many people thought that Assigning an Override from the DX Menu is like assigning a quick assignment, and Commands should be used where possible. This is not Tue for DirectX overrides, The Only Reason's you would want to use an Override as part of a command are if you were creating a complex Macro Command involving a DirectX Override, You were wanting to use the Override in a Double or Cycle Command, or you need a way of identifying what button does what (more for Dinput than Xinput). A Command from the DirectX Menu is just as good as using a Command Step and there is no real need to use a Command for Overrides most of the time.

Complex Macro Commands:
It is Possible to Use The Overrides in Conjunction with other Commands like Keystrokes or Behavior modifiers, Or even Combine Overrides. This is one of the few times where a command would be more appropriate than an Assignment. For Instance say you wanted to create a Double Command with two overrides you would create a command for each and then put them into the Double Command. Or say you wanted to make an Override a Toggle you would use the Sticky Function. If You Wanted to make a command that pressed an override key and a keyboard key with another function, then you would simply put them both in the same command. What I am basically Trying to say is you can do almost everything with Override Buttons that you can with keystrokes allowing a user to Optimize In game Controller Support far beyond what is natively given by the game with any Controller.

I Hope my Guide has been beneficial in helping people Understand the overrides purpose and how to use them. And I am Happy to answer any Question's people may have about the overrides below.