This is a script I wrote that will allow any USB gamepad such as a Playstation controller to work with any PC game regardless of driver support in the game.
I just bought FF7 again (Steam version) since I hadn't played it for years. I noticed that my x360 Controller Emulator software wouldn't work with it.
After some searching online I noticed there's other people who had the same problem. I'm not sure if a similar script/tool has been posted here but here is my solution.
1) Install AutoHotKey
2) Run my AHK script which should map your controller controls to the correct keyboard controls. I'm using a PS2 controller and it worked for me. You may need to replace '2Joy' with 'Joy' or '3Joy' in the script depending what your controller number is. If the script is working you can optionally compile it and run it as an executable if you don't want to keep AutoHotKey installed and it should still work fine.
3) (optional) To help you find your controller number or make other changes to my script you can debug using this great tool which runs as an AHK script.
https://autohotkey.com/docs/scripts/JoystickTest.ahkHere is the script. Just copy paste into notepad and save it with the ahk extension e.g. 'FF7joy2key.ahk'. The key mappings are currently set to work with FF7 but can be modified for any game. This also allows you to move using the analogue stick on a dual shock controller.
#Persistent ; Keep this script running until the user explicitly exits it.
SetTimer, WatchAxis, 5
return
WatchAxis:
GetKeyState, 2JoyX, 2JoyX ; Get position of X axis.
GetKeyState, 2JoyY, 2JoyY ; Get position of Y axis.
KeyToHoldDownPrev = %KeyToHoldDown% ; Prev now holds the key that was down before (if any).
if 2JoyX > 70
KeyToHoldDown = Right
else if 2JoyX < 30
KeyToHoldDown = Left
else if 2JoyY > 70
KeyToHoldDown = Down
else if 2JoyY < 30
KeyToHoldDown = Up
else
KeyToHoldDown =
if KeyToHoldDown = %KeyToHoldDownPrev% ; The correct key is already down (or no key is needed).
return ; Do nothing.
; Otherwise, release the previous key and press down the new key:
SetKeyDelay -1 ; Avoid delays between keystrokes.
if KeyToHoldDownPrev ; There is a previous key to release.
Send, {%KeyToHoldDownPrev% up} ; Release it.
if KeyToHoldDown ; There is a key to press down.
Send, {%KeyToHoldDown% down} ; Press it down.
return
2Joy3::
Send {NUMPADENTER down}
KeyWait 2Joy3
Send {NUMPADENTER up}
return
2Joy2::
Send {NUMPADINS down}
KeyWait 2Joy2
Send {NUMPADINS up}
return
2Joy1::
Send {NUMPADADD down}
KeyWait 2Joy1
Send {NUMPADADD up}
return
2Joy4::
Send {NUMPADDEL down}
KeyWait 2Joy1
Send {NUMPADDEL up}
return
2Joy9::
Send {NUMPADSUB down}
KeyWait 2Joy9
Send {NUMPADSUB up}
return
2Joy10::
Send {NUMPAD5 down}
KeyWait 2Joy10
Send {NUMPAD5 up}
return
2Joy6::
Send {NUMPAD1 down}
KeyWait 2Joy6
Send {NUMPAD1 up}
return
2Joy5::
Send {NUMPAD7 down}
KeyWait 2Joy5
Send {NUMPAD7 up}
return
2Joy7::
Send {NUMPAD9 down}
KeyWait 2Joy7
Send {NUMPAD9 up}
return
2Joy8::
Send {NUMPAD3 down}
KeyWait 2Joy8
Send {NUMPAD3 up}
return