It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
high rated
Mortal Kombat 4, like many games of its time, only uses the X and Y axis of the joystick/gamepad connected for control of your character, ignoring that the player may want to use the POV/Dpad of the controller. I found a workaround for this that may be somewhat complicated, but I like it more than using AntiMicro or JoyToKey, because for the game you still are using a joystick instead of the keyboard, even if its not a real joystick...

1.- Download and install vJoy

http://vjoystick.sourceforge.net/site/index.php/download-a-install/download

vJoy is a virtual device driver to emulate a joystick; note that, on its own, doesn't do anything else, so you will end up with a "dead" device after installing; we'll fix that later.
Make sure to download the correct driver for your version of Windows. You'll need administrator rights to install it.

2.- Configure vJoy device

Once installed, vJoy leaves an option in the Start Menu for "Configure vJoy", vJoyConf.exe. Open it.
In this window you can configure the features of your virtual joystick. In "Axes", check only X and Y (the only needed axes for MK4), in "POVs" leave a 0 (zero) and in "Force Feedback" uncheck "Enable Effects".
For the number of buttons, type either the actual number of buttons of your real controller (recommended if you are going to use it in other games), or 9, which are the buttons you will use in MK4 (note that the game needs at least 7 buttons: 6 actions + Start).
Click on "Apply" and let it finish applying changes. When done, just close this window.

3.- Download and install UCR

https://github.com/Snoothy/UCR/releases/latest

Universal Control Remapper is the app that will allow us to remap the inputs of our real controller as outputs of the virtual joystick we just configured. It's a long and bothersome task, but will be worth it.
Unzip wherever you want, on its own folder. Needs .NET so make sure you are updated if you get into trouble with it.

4.- Configure UCR profile to use D-Pad as Axes X and Y

Open UCR.exe and a window inviting you to create a new profile will open. Do it.
Name this profile as you wish (mine is just "DPad to Axes"). In "Input Devices" check your controller, and in "Output Devices", check "vJoy Stick 1" or whatever the name of the virtual joystick is. Click "Create". A new window will open, which will allow us to customize the outputs of our "joystick", which unfortunately you'll have to do one by one.

Under Plugins->Axis, click the "+" next to "Button to Axis". For its name, lets just type "Right". This will create a section named "Right" where you can map the Dpad "right" input as the X axis' "right" of your virtual joystick. Next to "Input" should be the name of your controller and a button "Click to bind". Click it and press your D-Pad to the right; the tool should have captured the input as "POV#1, Right" or equivalent.

Still under our "Right" mapping, next to "Output" should appear the name of the virtual joystick, and another "Click to bind" button. Click it, and click "Axis->X". Again, the tool should have renamed the button as "Axis, X". Then, "Axis on release" should be "0" and "Axis when pressed" should be "100". This is it... for one direction.

Add another "Button to Axis" mapping by clicking on the "+" sign, but this time name it "Left". Again, in the "Click to bind" in the "Input" press left on your physical controller's D-Pad, and "Axes->X" on the "Output", but the "Axis when pressed" should be "-100" this time, because you're going on the opposite direction. With this knowledge, add other two "Button to Axis" mappings for "Up" and "Down", knowing that they have to be on the "Y" Axis, and the value for "Up" is "-100" and for "Down" is "100".

Having the four directions mapped, you'll have to map the buttons, again, individually. Under "Plugins->Button" click on the "+" sign next to "Button to Button" and name it as you wish (as how the button appear in your controller is a good name). In "Click to bind" next to "Input" press your controller button; if your controller is DirectInput, it should be recognized as a number. In "Click to bind" next to "Output" press "Buttons" and the button number of your choice; again, if your controller is DirectInput, having the one that appeared in your controller is a good choice. Repeat this mapping for all your buttons, or at least for the 9 or 7 you want to use in the game.

Press the "Save" icon on top of the Edit window and close it, and press the Play icon, "Activate profile". Leave the UCR window minimized but running at all times when you are using the virtual controller.

5.- Testing the virtual controller

Now, run (Windows key + R) "joy.cpl" and your Windows' Game Devices should appear. You should be able to see both your virtual and physical game devices. Click on your virtual one and press "Properties"; the axes and buttons should respond to the inputs of your physical device (D-Pad and buttons). If any of the axes or the buttons don't, get back to the UCR window, press the Stop icon ("Stop active profile") and edit the profile, checking the missing axis or buttons. Once finished, Save it again and press Play. Check again until you are happy with the result.

6.- Configuring the joystick inside Mortal Kombat 4

Run the game, and when in the main menu press F2; the Options menu should appear (F1 = Help by the way). If everything is right, you should be able to navigate this menu with the D-Pad and buttons. Get in the Joystick option, and for Player 1, the Controller should be "Joy X, Y buts" where "Y" should be the number of buttons you configured for the virtual joystick, and "X" should hopefully be "1". Configure the actions for the buttons, and if they don't respond, "X" was the other joystick :) , so you'll have to change it with left/right. Bind all buttons, or at least all but "Step in" and "Step out", and press "Go back" and "Exit options".

Start playing the game with the D-Pad!

If you want to add another joystick for the second player, you'll have to go back to step 2, vJoyConf.exe, and add a second vJoy device by changing to the "2" upper tab and click on "Add Device"; you'll have to repeat the whole step 2 for the second joystick.
Then, in UCR, under your profile, check the "+" sign next to "Input devices". In the window that appears, check your physical second controller and press "Add". Then, click the "+" sign next to "Output devices" and in this window, check "vJoy Stick 2" or whatever the name of the virtual joystick is, and click "Add".
Edit your profile, adding all "Button to Axis" and "Button to Button" mappings again, but for the new "Input" and "Output" devices. Finally, configure it in-game for player 2.

I hope this guide will be useful not only for MK4 but for other games as well. Please comment if something is not clear enough.
Thanks for your post. Very helpful and well explained.

I'd like to add that there is another alternative. Using JoyToKey allows you to emulate the keyboard with your controller. Make sure you set the keyboard as the default control input for player 1 in the options menu of MK4 before mapping the buttons and it'll be fine. Don't know if it would also work for a second player though.

I'm using a DS4 controller and works perfectly.
avatar
Protocultor: 4.- Configure UCR profile to use D-Pad as Axes X and Y

Under Plugins->Axis, click the "+" next to "Button to Axis". For its name, lets just type "Right". This will create a section named "Right" where you can map the Dpad "right" input as the X axis' "right" of your virtual joystick. Next to "Input" should be the name of your controller and a button "Click to bind". Click it and press your D-Pad to the right; the tool should have captured the input as "POV#1, Right" or equivalent.
Hello. Unfortunately I couldn't get past this step: after I clicked on the "Click to bind" button, I pressed on my D-Pad to the right, but nothing happened (I don't understand why: my ps4 controller was connected to my PC). Do you have a solution for this issue?

If not, I will try steven_marduk's method.
avatar
Protocultor: 4.- Configure UCR profile to use D-Pad as Axes X and Y

Under Plugins->Axis, click the "+" next to "Button to Axis". For its name, lets just type "Right". This will create a section named "Right" where you can map the Dpad "right" input as the X axis' "right" of your virtual joystick. Next to "Input" should be the name of your controller and a button "Click to bind". Click it and press your D-Pad to the right; the tool should have captured the input as "POV#1, Right" or equivalent.
avatar
ghst84: Hello. Unfortunately I couldn't get past this step: after I clicked on the "Click to bind" button, I pressed on my D-Pad to the right, but nothing happened (I don't understand why: my ps4 controller was connected to my PC). Do you have a solution for this issue?

If not, I will try steven_marduk's method.
Welp, I managed to get a DS4 to troubleshoot this and... you're right, it doesn't work with it. Somehow, UCR disables the gamepad entirely; try to use "joy.cpl" and test the "Wireless Controller", it won't answer, as if it's disconnected. I had to remove the DS4 and add it again to reconnect.

I suppose that's why UCR is still in 'alpha' state. To write the guide, I used a Switch Pro Controller, and it didn't give any trouble.

It's a shame but yeah, JoyToKey or AntiMicro should be a nice replacement.