How to manually map button on PS3 gamepad to match with a fightstick?

I build a PC base arcade cabinet. I use Launchbox front-end and run emulation via Retroarch. The PC is connected to two 7-buttons/player fightsticks via zero delay arcade USB encoders and a PS3 gamepad using SCPtool to clone XInput of XBOX360 controller. Retroarch detects my fightstick as “Retrolink_N64” and PS3 gamepad as “Xinput controller”

I run into a problem that both controllers have the mismatch in auto-assigned input mapping. The auto assigned button numbers are totally different. This is a headache because I have to remap the key binding everytime when changing platforms (arcade to consoles).

For instance, the fightstick button layout from left to right goes button# 0, 1, 2 on the top row and 6, 5, 4, 3 on the bottom row. I use button#7 for Coin/Select and button#8 for Start. The layout look like this below; 7 8 0 1 2 6 5 4 3

I configure buttons as following; B=button#5 A=button#4 X=button#1 Y=button#0 L1=button#2 R1=button#3 Select=button#7 Start=button#8

PS3 gamepad auto-assign buttons as;

B=button#0 A=button#1 X=button#3 Y=button#2 L1=button#4 R1=button#5 L2=button#+4 R2=button#+5 Select=button#7 Start=button#6 L3=button#8 R3=button#9

Because of different in assigned button#, I can’t use my fightstick input mapping on PS3 gamepad at all. I tried to manually change input mapping on both XInput_Controller_User_1.cfg and SNES USB Gamepad.cfg located under RetroArch\autoconfig\xinput\ to match with fightstick buttons#. Unfortunately, nothing works. I run out of an idea now. I would be appreciate if anyone could help me out.

  1. Could you advise me how to remap the xInput controller of my PS3 gamepad to match with the button# I use on the fightstick?

  2. How can I tell Retroarch to automatically use a specific type of controller when the game is loaded on different platform ? (I like to use a fightstick on all Arcade/Neo-geo/CPS but a PS3 gamepad on consoles. I need to pause the game and manually change the input index.)

There are a few things to keep in mind when deciding what to do here:

  1. The Retrolink_N64 is clearly a false-positive match
  2. You need autoconfiguration because you’re wanting to swap between 2 devices on the fly

If only 1 were true, I’d suggest just turning off autoconfiguration. If only 2 were true, you’d be fine as-is. However, SCPtool is making a bit of an issue by claiming your pad is a generic xinput pad when it really isn’t.

My suggestion is: take your autoconfig directory and move its contents somewhere else (or just delete them; you can always re-fetch the profiles from the online updater) so you have an empty directory. Then, go to settings > input > port 1 binds and make your own autoconfigs for all of your input devices set up how you like them (that process is: default all, bind all, save autoconfig, default all, quit retroarch, re-open it and see if your device is recognized and configured properly).

Once your devices are recognized and autoconfigured as you like them, you can leave settings > input and hopefully never return. From that point on, you will only really need to go to quick menu > controls to move the cores’ functions around on your gamepads.

Thank you very much, Hunterk, for all suggestion.

I followed your instruction to delete all the contents in autoconfig folder and manual configure my autoconfig, but the result was the same. Once I finished mapping Generic USB Joystick(#1) on the fightstick and changed a Device Index to XInput Controller (User1) to configure PS3 gamepad. Any button I put on the PS3 overwrote the button# previously configured on the fightstick. I am not quite sure I missed the steps or not. Here were the steps I did;

1.Delete all contents in “autoconfig” folder. 2.Setting > Input > Port 1 Binds > Device Index > Generic USB Joystick (#1) 3.Bind All, then configured all buttons used on the fightstick 4.Save Autoconfig 5…> Device Index > XInput Controller (User1) 6.Once I mapped the buttons on the PS3 gamepad, the previous button# on fightstick got overwritten.

For instance, I mapped the fightstick buttons as;

button#0 = Y button#1 = X button#2 = L1 button#3 = R1 button#4 = A button#5 = B I intentionally skipped button#6. button#7 = Select button#8 = Start

When I key the PS3 gamepad, it overwrote the buttons as following;

button#0 = B button#1 = A button#2 = Y button#3 = X button#4 = L1 button#5 = R1 button#6 = Start button#7 = Select

Is there a way to tell Retroarch to map the PS3 gamepad to match the button# on the fightstick (like #5-B, #4-A, #1-X, #0-Y, #2-L1, #3-R1, #7-Select, #8-Start)? or another way around by making the fightstick matched the button# on the PS3 gamepad instead?

The only way I can think of is to physically change the wire hardnesses on the button slots of zero delay arcade USB encoders to match with what button# used on the PS3. I really not want to go this route because I might end up switching the wrong slot on both fightsticks.

Please suggest.

When making the autoconfig profiles, make sure only the device you’re trying to map is connected while you’re doing the process.

You can always just move the connections at the buttons.

I unplugged the USB cord to a PS3 gamepad, binded the fightstick, saved autoconfig, quited Retroarch, and reopened the program. The autoconfig on fightstick applied correctly. Then, I closed Retroarch, plugged the USB cord to the PS3 gamepad. When I move to …> Device Index > XInput Controller (User1), Retroarch already auto assigned the PS3 gamepad button# on its own way like what I mentioned on the previous post. I attached the screenshot as reference.

There was nothing inside the ‘autoconfig’ directory, except ‘Generic USB Joystick.cfg’ that I manually mapped the config on fightstick. I don’t know why it autoassigned the PS3 like this or maybe it is because I used SCPtool to clone Xbox360. If I use a generic XInput, I might have an option to map it like the fightstick?

Hmm, yeah, try some other settings in SCPtool. If you don’t have any autoconfig profiles, I don’t know why it would be applying one…

Thanks again. Perhaps, SCPTool causes a conflict and messes up the autoconfig on Retroarch. I saw a Logitech Gamepad F310 on Amazon. Sound like it is designed for XInput/DirectInput. I will give it a try. If it has no conflict between the fightstick and gamepad, this would solve my headache problem.

By the way, one more question if you not mind. I like to use a fightstick on arcade and a gamepad on consoles. Look like it requires to pause to a quick menu and need to manually change the device index to make other type of controller work. I don’t know if it can switch automatically without going to the quick menu.

Can Retroarch switch the type of controllers (device indexes) on the fly when loading arcade or console platform?

Not that I know of, but someone else may have a funky workaround that works for them. If so, hopefully they’ll chime in.