Controller config - no longer working
-
Pi Model or other hardware: 3B+
Power Supply used: 2.5v 5a official Raspberry supply
RetroPie Version Used (eg 3.6, 3.8.1, 4.1 - do not write latest): 4.4
Built From: Download from Retropie website
USB Devices connected: Keyboard, 1x Mega Drive/Genesis clone 6 button controller, 2x iNNEXT SNES clone controllers
Controller used: As above
Error messages received: None
Emulator: Defaults for SNES, Mega Drive, PSX, N64I've posted a few times over the last week of so since I broke my original Pi after snapping the SD card so thank you to everyone that has helped me so far. I've just about finished rebuilding my system, but I have some final nagging problems to resolve and I can't work out what to do. Previously this all worked fine, and I have rebuilt the system exactly as before, and run all update scripts to make sure I am the latest versions of everything.
Firstly, Sega Mega Drive/Genesis and Nintendo SNES clone controllers
The Mega Drive controller is a RetroFlag one, supplied with the Mega Pi Case. The SNES ones are manufactured by iNNEXT
With both of these I cannot get the hot key combinations to work on any system. Start + Select for quitting doesn't work, nor the load or save game combos. I can't get into the green screen menu (Select + Y I think!) either. They do work to control the games (e.g. I can move Sonic and Mario around the screen) but nothing else.
Secondly, Dual Shock 4 having odd problems
My two DS4 controllers previously worked flawlessly. Now, although I can connect both to my Pi at the same time, and use them both to control the menus in Emulation Station, I can't get them to work together in a game. Mario Kart 64 for example, only Player 1 can select a character and start the game. Player 2's DS4 just doesn't do anything, but head back to the Emulation Station home screen and suddenly it works. Previously I could play 2 player games with this set up easily.
For PSX games, the DS4 no longer does anything. The games just won't respond to any button presses at all. I can't quit the game, can't press Start to begin the game. Nothing works where it previously did.
I have set up all controllers using the Config Input menu in ES, and all buttons are mapped correctly and the same as previously. I always leave Hot Key as undefined and say Yes to the prompt about the system defining it.
What can I do to reset all controller configs?
Is there anything else I can try to get these all working as they were previously?Thanks
-
@MisterMints said in Controller config - no longer working:
What can I do to reset all controller configs?
Use the RetroPie script and select the Emulationstation package, then you'll have a 'reset controller' option - https://retropie.org.uk/docs/EmulationStation/#controller-configs.
For the controller problems
- you probably didn't map the
Hotkey
for the SNES controllers, that's why anySelect+ <key>
combinations (exit, save state, load state, open RGUI) don't work. Re-map their input, then skip theHotkey
selection and you'll be asked if you want to useSelect
as hotkey - choose yes. - the DS4 (and DS3) are detected as 2 controllers in the new Raspbian Stretch - a normal controller and a set of motion sensors. See this topic for an explanation and a fix there.
- you probably didn't map the
-
@mitu said in Controller config - no longer working:
@MisterMints said in Controller config - no longer working:
What can I do to reset all controller configs?
Use the RetroPie script and select the Emulationstation package, then you'll have a 'reset controller' option - https://retropie.org.uk/docs/EmulationStation/#controller-configs.
For the controller problems
- you probably didn't map the
Hotkey
for the SNES controllers, that's why anySelect+ <key>
combinations (exit, save state, load state, open RGUI) don't work. Re-map their input, then skip theHotkey
selection and you'll be asked if you want to useSelect
as hotkey - choose yes. - the DS4 (and DS3) are detected as 2 controllers in the new Raspbian Stretch - a normal controller and a set of motion sensors. See this topic for an explanation and a fix there.
Thanks @mitu
I had left the
HotKey
undefined, and then pressed Yes to the prompt to go with the default setting, but for whatever reason that didn't work. I will give clearing the complete config a go and start again.Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?
You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!
Thanks
- you probably didn't map the
-
@MisterMints said in Controller config - no longer working:
Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?
It's registering as an Xbox 360 pad because that's what the device reports - probably just to be compatible with Windows/XBox. I wouldn't worry too much, as long as it's detected and configured properly.
You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!
The post I mentioned shows you which file you have to create from the command line (after you exit Emulationstation) and the contents. So exit ES and execute
sudo nano /etc/udev/rules.d/51-disable-DS3-and-DS4-motion-controls.rules
this will open the text editor and you can insert the lines below
SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
after that save the file (
Ctrl+O
), then exit the editor (Ctrl+X
) and reboot your system (sudo reboot
). -
@mitu said in Controller config - no longer working:
@MisterMints said in Controller config - no longer working:
Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?
It's registering as an Xbox 360 pad because that's what the device reports - probably just to be compatible with Windows/XBox. I wouldn't worry too much, as long as it's detected and configured properly.
You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!
The post I mentioned shows you which file you have to create from the command line (after you exit Emulationstation) and the contents. So exit ES and execute
sudo nano /etc/udev/rules.d/51-disable-DS3-and-DS4-motion-controls.rules
this will open the text editor and you can insert the lines below
SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
after that save the file (
Ctrl+O
), then exit the editor (Ctrl+X
) and reboot your system (sudo reboot
).Thanks @mitu
Does it matter where I stick that
SUBSYSTEM
line in the file? Or just write it anywhere?Thanks
-
@MisterMints said in Controller config - no longer working:
Does it matter where I stick that SUBSYSTEMline in the file? Or just write it anywhere?
I don't understand. Since this is a new file, there isn't anything there, just add everything on one line, exactly as it appears.
-
@mitu said in Controller config - no longer working:
@MisterMints said in Controller config - no longer working:
Does it matter where I stick that SUBSYSTEMline in the file? Or just write it anywhere?
I don't understand. Since this is a new file, there isn't anything there, just add everything on one line, exactly as it appears.
Sorry, misunderstanding on my part - because you said "insert the lines below" I thought that meant the file already existed and I had to insert that line. Rather it creating a new file and then just typing that in.
Anyway, done now, but it hasn't changed anything.
Mario Kart 64 - player 2 still can't control anything so can't select a character and the Hotkey combinations don't do anything (other than
Select + Start
exiting the game). I have just remapped the DS4s and absolutely made sure not to define a Hotkey and select Yes to the system prompt to enable default set up. -
@MisterMints What emulator are you using ? I think Mupen64plus (the default N64 emulator) might need some adjustments to the input configuration when using multiple controllers.
-
@mitu said in Controller config - no longer working:
@MisterMints What emulator are you using ? I think Mupen64plus (the default N64 emulator) might need some adjustments to the input configuration when using multiple controllers.
mupen64plus-gles2n64
Its the only one I could get to work consistently without too much stutter, messed up graphics or crashes on the N64 games I tend to play. Super Mario 64 for example is just unplayable on anything else.
What adjustments would I need to make @mitu ?
-
I've found this thread on Reddit which suggests I need to amend the start and select buttons in the config file.
Mine currently read as:
input_start_btn = "9" input_exit_emulator_btn = "9"
but the Reddit thread suggests these should be two different numbers. I'm not really sure what to do with this information, or what to try next to get this all working like it used to.
-
@MisterMints The format of the button configuration for Mupen64plus is described in the docs - check if the generated configuration file has settings for both your controllers.
-
@mitu said in Controller config - no longer working:
@MisterMints The format of the button configuration for Mupen64plus is described in the docs - check if the generated configuration file has settings for both your controllers.
@mitu I assume that
Wireless Controller
is the one I should be looking for (since the DS4s are wireless and that's what shows up when trying to configure them through the GUI).This is what shows up in the config file at
/opt/retropie/configs/n64/mupen64plus.cfg
:[Input-SDL-Control2] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 1 # SDL joystick name (or Keyboard) name = "Wireless Controller" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak plugin = "2" # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "hat(0 Right)" DPad L = "hat(0 Left)" DPad D = "hat(0 Down)" DPad U = "hat(0 Up)" Start = "button(9)" Z Trig = "button(6)" B Button = "button(3)" A Button = "button(0)" C Button R = "axis(3+)" C Button L = "axis(3-)" C Button D = "button(1) axis(4+)" C Button U = "button(2) axis(4-)" R Trig = "button(5)" L Trig = "button(4)" Mempak switch = "button(11)" Rumblepak switch = "button(12)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)" [Input-SDL-Control3] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 2 # SDL joystick name (or Keyboard) name = "Wireless Controller" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak plugin = "2" # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "hat(0 Right)" DPad L = "hat(0 Left)" DPad D = "hat(0 Down)" DPad U = "hat(0 Up)" Start = "button(9)" Z Trig = "button(6)" B Button = "button(3)" A Button = "button(0)" C Button R = "axis(3+)" C Button L = "axis(3-)" C Button D = "button(1) axis(4+)" C Button U = "button(2) axis(4-)" R Trig = "button(5)" L Trig = "button(4)" Mempak switch = "button(11)" Rumblepak switch = "button(12)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)" [Input-SDL-Control4] # Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number. version = 2 # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic mode = 2 # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number device = 3 # SDL joystick name (or Keyboard) name = "Wireless Controller Motion Sensors" # Specifies whether this controller is 'plugged in' to the simulated N64 plugged = True # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak plugin = "2" # If True, then mouse buttons may be used with this controller mouse = False # Scaling factor for mouse movements. For X, Y axes. MouseSensitivity = "2.00,2.00" # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes. AnalogDeadzone = "4096,4096" # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value AnalogPeak = "32768,32768" # Digital button configuration mappings DPad R = "hat(0 Right)" DPad L = "hat(0 Left)" DPad D = "hat(0 Down)" DPad U = "hat(0 Up)" Start = "button(9)" Z Trig = "button(6)" B Button = "button(3)" A Button = "button(0)" C Button R = "axis(3+)" C Button L = "axis(3-)" C Button D = "button(1) axis(4+)" C Button U = "button(2) axis(4-)" R Trig = "button(5)" L Trig = "button(4)" Mempak switch = "button(11)" Rumblepak switch = "button(12)" # Analog axis configuration mappings X Axis = "axis(0-,0+)" Y Axis = "axis(1-,1+)"
-
One other thing to mention...
The "press A to configure" option while the game starts doesn't work on the N64 with DS4 either.
I'm out of my depth here @mitu. I don't understand what I should be checking for and editing with that N64 document page and config files
-
It looks like the settings for ignoring the 'Motion Sensors' did not work. I'll test it myself with a DS4.
In your configuration file, there's a missing entry for the 1st controller ([Input-SDL-Control1]
), you either didn't paste it or it's not present. When you're trying out the 2nd player in Mupen64plus, do you also have the other controllers (SNES Innext) plugged in ? Did you try with just the BT controllers connected to see if the 2nd player appears ? -
@mitu said in Controller config - no longer working:
It looks like the settings for ignoring the 'Motion Sensors' did not work. I'll test it myself with a DS4.
In your configuration file, there's a missing entry for the 1st controller ([Input-SDL-Control1]
), you either didn't paste it or it's not present.[Input-SDL-Control1]
is in the mupen64plus.cfg file, I must have just not copied it across.When you're trying out the 2nd player in Mupen64plus, do you also have the other controllers (SNES Innext) plugged in ? Did you try with just the BT controllers connected to see if the 2nd player appears ?
I have done it with the USB controls connected and unconnected. No difference.
-
OK, so I connected a DS4 and - as expected - the systems sees both the Motion Sensors and the Wireless Controller as gamepads. After adding the
.rules
file and rebooting, the Motion Sensors are gone and they don't appear as an extra gamepad/joystick. When you configure your DS4 in Emulationstation, how many gamepads it reports as detected ? Before the.rules
file was added, mine reported 2, after it reported only 1.Take a look at the N64
.cfg
file you pasted and pay attention in each of the[Input-SDL-ControlX]
sections, to thedevice = <X>
line. Each section assigns a player to gamepad. Thedevice = <X>
instructs the emulator to look for the device numbered<X>
(numbering starts from 0).
In your file, I see that Wireless Controller Motion Sensors appears in the list, but it shouldn't, since it's not a real gamepad, so the configuration file has been generated when the motion sensors where available.
I'd suggest to rename this.cfg
file, then re-install the Mupen64-plus emulator (so thecfg
file gets generated again) and then re-configure your DS4 controller. Check the file and see if the controller is correctly registered - i.e. without the Motion Sensors - and how many controllers are registered - i.e. how many[Input-SDL-ControlX]
sections are saved.Try a N64 game and see if both controllers work. Unfortunately I don't have 2 DS4, just one, so I can't test it myself.
-
@mitu said in Controller config - no longer working:
OK, so I connected a DS4 and - as expected - the systems sees both the Motion Sensors and the Wireless Controller as gamepads. After adding the
.rules
file and rebooting, the Motion Sensors are gone and they don't appear as an extra gamepad/joystick. When you configure your DS4 in Emulationstation, how many gamepads it reports as detected ? Before the.rules
file was added, mine reported 2, after it reported only 1.Take a look at the N64
.cfg
file you pasted and pay attention in each of the[Input-SDL-ControlX]
sections, to thedevice = <X>
line. Each section assigns a player to gamepad. Thedevice = <X>
instructs the emulator to look for the device numbered<X>
(numbering starts from 0).
In your file, I see that Wireless Controller Motion Sensors appears in the list, but it shouldn't, since it's not a real gamepad, so the configuration file has been generated when the motion sensors where available.
I'd suggest to rename this.cfg
file, then re-install the Mupen64-plus emulator (so thecfg
file gets generated again) and then re-configure your DS4 controller. Check the file and see if the controller is correctly registered - i.e. without the Motion Sensors - and how many controllers are registered - i.e. how many[Input-SDL-ControlX]
sections are saved.Try a N64 game and see if both controllers work. Unfortunately I don't have 2 DS4, just one, so I can't test it myself.
I have a theory then....
I'm sure when I configured the first DS4 it said there were 3 pads connected. 1 being the SNES I used to navigate the menus and the other being my MegaPi case.
I may need to clear all the config files and reinstall the emulator as you've said, but take the Pi out of the case (or at least disconnect the USBs) and start again.
Will try later and report back
-
Hi @mitu
I think its (almost) solved now!! Thank you for help!
I disconnected everything, except my keyboard, uninstalled mupen64, disconnected and deleted all Bluetooth devices and controller configs and then started again.
I though I should also redo the ignore DS3/DS4 rule, so followed the steps to complete that, and this is where I noticed a (probable) major flaw. My file contained the following:
SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+=="/bin/rm %E{DEVNAME}"
When it actually should've contained this:
SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
Notice the extra
=
afterRUN+
? Looks like that could be what made it not work.Anyway, removed the extra
=
and saved the file, rebooted and remapped my DS4s, configured them and fired up Mario Kart 64 and it worked.Couple of issues remain though! mupen64 still does not respond to any
HotKey+
combinations other thanSelect+Start
but I can probably live with that.When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.
All inconveniences rather than show stoppers, but if there is any way to prevent the config dialog opening each start up then I'm happy to hear all about it!
Thanks again
-
@MisterMints said in Controller config - no longer working:
When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.
That's the default behavior. I remember seeing somewhere a workaround - configuring a keyboard as a gamepad in the system once, then when ES boots it doesn't ask for a controller to be selected.
Glad you got it working out. You can probably make
Start + Select
working again - how are you 'skipping' the Hotkey selection in the input configuration dialog ? Are you using the D-pad to skip over, or long-press another button ? -
@mitu said in Controller config - no longer working:
@MisterMints said in Controller config - no longer working:
When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.
That's the default behavior. I remember seeing somewhere a workaround - configuring a keyboard as a gamepad in the system once, then when ES boots it doesn't ask for a controller to be selected.
Glad you got it working out. You can probably make
Start + Select
working again - how are you 'skipping' the Hotkey selection in the input configuration dialog ? Are you using the D-pad to skip over, or long-press another button ?@mitu Long pressing down on the D-pad, it then says not defined, I hit OK, then a pop up comes up about No Hotkey enabled - set up the default (or whatever the wording is) and I hit Yes/OK again
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.