Controllers will not work in-game
I have been enjoying emulation for the past 15 years, however have recently started my first Retropie Project, which is nothing short of a dumpster fire at a Red Lobster in the middle of July... Nothing seems to work and the settings do not seem to lock in. I am running an R3 board with the image provided from this website for a Sandisk 32GB SD Card. I am utilizing (well, trying) two original NES and SNES controllers which work perfectly while in Emulation Station, yet go completely hay-wire while in game. I have been able to get my NES to work, first time go, by simply configuring the inputs of the controllers in Retropie which immediately translates over to the game/emulator itself. SNES however continues to mess up. Player 1 controller can barely get into games and whenever I try to utilize Player 2 controller all the buttons have been re-mapped to things I do not understand. Somehow I came to a screen that let me choose emulators for the SNES of which it is now stuck on 1.6.7 Snes9X 2002 7.2.0. In Snes 9x menu (accessible only through player two controller), the inputs have magically switched themselves in the emulator (player 1 is now player 2 and vice versa). While I can accept this without any issue as back in the day we (as kids) simply swapped controllers, yet after mapping both controller buttons, player 2 still reverts back to its unusual state entirely. Any/all help would be greatly appreciated. The time I spent looking for similar issues only came up with results of wireless controllers, or controllers/emulators that I am not myself using.
After bouncing around between the configuration options of manually telling Retroarch which controller to use for which emulated system, rebooting the system entirely (because, reasons), re-re-re-remapping buttons in both Emulation Station as well as Retroarch I have now lost the ability to use my SNES gamepads entirely inside of the Snes emulator entirely. Before this point I was still unable to get player 1 SNES gamepad to recognize inside of the SNES emulator perfectly (A button and start did not register), and player 2 SNES gamepad was still acting janky with its own button mapping where "B," was a reset, and the shoulder buttons were save/load state. Now I cannot even re-remap the buttons within the Snes emulator. Normally I would simply uninstall/reinstall the emulator entirely or use another one, however that is beyond my Linux/Retropie capabilities. I dare say that if I have to wipe this brick of a board back to 13 hours ago of it's drawing board I will probably just go to bed and put on an alarm to wake up when there is a reputable Android or Windows-based computing board on the market... Does anyone know how to get back to the window where I was able to dictate which of the three emulators I wanted to use for SNES emulation? I figure that is a better start than starting completely from scratch.
Does anyone know how to get back to the window where I was able to dictate which of the three emulators I wanted to use for SNES emulation? I figure that is a better start than starting completely from scratch.
Yes, just press a key when trying to launch a rom. It's all in the documentation:
I have not experienced the issues which you speak of. When you boot first, you can configure your controller then you can go ahead and add a second controller without issue. Again, all in the docs provided. Your problem may be with the use of original controllers. How are you connecting them? Have you tried usb ones? What does your retroarch.cfg look like for player 2? Have you followed this: https://github.com/retropie/retropie-setup/wiki/RetroArch-Configuration?
I had very little experience of Linux coming into this but you should know that is the reason I started. The Pi is a learning tool but the docs do spell it out well. In fact, I Iearned that I didn't need linux as the Pi can be accessed from windows anyway through SSH using Winscp or network shares. I can tell you are frustrated but the Pi is far from a brick. This project offers infinite customisation possibilities. You may even find that you spend more time customising than playing! Anyway, you might find that Recal Box is more suited to your needs?
@sfc_k Also, you do know that Emulation station has a different configuration file than Retroarch? When you describe that you have a loss of everything, it might be to do with this. Have a look at:
/home/pi/.emulationstation/es_input.cfgto see how your Emulation station controls are configured and then take a look at
/opt/retropie/configs/all/retroarch.cfgto see how you have configured Player 2, if you don't see Player 2, add them in according to the docs. Look at this below and look how the Joystick index changes:
input_player1_joypad_index = 0 input_player1_b_btn = 2 input_player1_a_btn = 1 input_player1_y_btn = 3 input_player1_x_btn = 0 input_player1_l_btn = 4 input_player1_r_btn = 5 input_player1_start_btn = 9 input_player1_select_btn = 8 input_player2_joypad_index = 1 input_player2_b_btn = 2 input_player2_a_btn = 1 input_player2_y_btn = 3 input_player2_x_btn = 0 input_player2_l_btn = 4 input_player2_r_btn = 5 input_player2_start_btn = 9 input_player2_select_btn = 8
You can use jstest to determine the correct numbers for your controllers.
At the command prompt (Press F4 to quit Emulationstation) type:
Also, via windows if you cannot be doing with that you could try Both work equally well for me and the good thing about the second method is that all the main folders with the relevant configs are there for your convenience.
Sudo jstest /dev/input/js0and the numbers for each direction can be obtained. They will be identical for Player 2 but the index will be different. If you need a tutorial on how to edit these files, you could watch
simonster last edited by
You say you are using original NES / SNES controllers? How are you connecting them to the Pi?
Also what power supply are you using?
I believe the issue is narrowed down to something amiss with RetroArch. In the emulation station GUI, I navigate from either the SNES or NES until I reach Retropie (only need to emulate those two systems). From there I scroll downward until I reach "retroarch." I try to make appopriate changes/mapping, ensuring that the "Save configuration on exit," is turned on, then try re-loading any ROM in SNES. Complete failure, the buttons are now ridiculously re-mapped to something that makes no sense. I exit emulation station and from the command line I get to JSTEST. I ensure that the device is registering all buttons, which it is. I further went and recorded each button on a note pad for future use, where the A button on the SNES gamepad is registered as Button 0, and so on. I cannot access the runcommand anymore, which is super awesome. Neither input from the gamepad or keyboard seems to bring up the runcommand. I am going to try and attempt to manually force the configs, line by line.
Yes, I am using original NES/SNES controllers, connected by way of USB adapters both made by Tomee. I am using the canakit 2.5a power supply. Again however, the SNES controllers work fine while in ES, as soon as retroarch gets ahold of them, it all goes to shit.
sfc_K last edited by sfc_K
@rbaker While accessing the Pi through my PC over local network, I am able to view four folders for bios, configs, roms, and splashscreens. I go down the rabbit hole from the configs folder, to the all folder, to the retroarch folder, and finally stopping once I get inside of the autoconfig folder. I see two sets of .cfg files, one for NES PC Game Pad, and another for SNES PC Game Pad, each of the two .cfg files has a supplementary .BAK file which I believe is a backup file. I open up the offending controller (SNES) .cfg file and copy/paste that stuff into word for easier viewing. Now I am starting to see some of the problem, alot of my buttons are dual-mapped. For instance, one of the lines reads input_b_btn = "0" however on the line immediately below that one, it reads input_reset_btn = "0" After recording what each controller button is being registered as in JSTEST, I now know that whenever I hit the B button on the controller (button 0 in JSTEST) it is doing both commands, yay... The new question is now, what do I do from here? I have found the offending command lines of sort that are causing issues. In doing further research I can input some button combinations to do a decent portion of what I simply want such as:
input_enable_hotkey_btn = 7 (my select button on the controller)
input_exit_emulator_btn = 6 (my start button)
Those two command lines should allow me to exit the emulator with a button combo pressing of both the start/select buttons. Would it crash the system if I simply road-housed the command lines I do not want? For instance, I have these two conflicting command lines:
input_r_btn = "5"
input_save_state_btn = "5"
If I press the R button on the SNES controller it does both input the button command of R, and also saves the states for future loading of the game or what have you. (small rant start) My play style/time allotted to play has greatly changed since I was a kid. Gone are the days when I could simply vegatate in front of an old CRT screen, no farther than 2 feet from my face, probably getting radiated more then Bruce Banner did from sun up to sun down. At best, I could muster a few hours, in some nostalgia driven one night stand sort of gaming style, so I have no need or concern to save/load states within any game (small rant end). Should I simply erase the command line for the save state entirely, or make it some kind of button command I would probably never initiate unless I was having a seizure? Second to that seizure inducing button combination if I cannot simply erase the aforementioned command lines, can I emplace:
input_save_state_btn = "4+5+6+7" (or)
input_save_state_btn = "4567"
Lastly, in viewing the config file for the gamepad, I see somethings that do not match up with JSTEST, here is what I see through JSTEST:
Up on the gamepad: -32767
However in the config file I see this:
input_up_axis = "-1"
input_down_axis = "+1"
input_right_axis = "+0"
input_left_axis = "-0"
The config file command lines are confusing me, is the config file simply calling "-1" as Up on the gamepad the same as -32767 does in JSTEST, or are the command lines saying that button 1 is capable of input for up direction, down direction, and A?
I figured I would throw caution to the wind because at this point, why not? I deleted all command lines I felt were not conducive to my play style, leaving only button inputs, input device, input driver, hotkey, and menu toggle. I saved the config file, then restarted the board. Back into ES, I scroll over to Retropie again and then stop off on Retroarch. I was still having issues with the buttons not mapping once I got inside of the rom/game. back out of rom and back into retropie again. Save configuration still keeps reverting back to off, no idea... change that once more then back to input, scroll down to input user 1 binds, again I remap buttons through user 1 bind all, then scroll upwards and select user 1 save autoconfig (pure guess, as the config file I modified was the autoconfig one), then back out and quit retroarch once more. Back in retropie menu of ES, I go to configuration editor, then configure basic libretro emulator options, then down until I find the SNES emulator, then option 7 for choose joypad order (which keeps changing...) and remove any listing of any other controller (for some reason it wanted to use a NES controller on an SNES emulator) and ensure that player 1 is using the appropriate SNES controller. Back out again to ES, then head on over into the SNES emulator and pick a random game I would never play sober (Shaq-Fu!). Magically the controls work, try changing games, controls still work. Not sure what is wrong but want to try a few things out such as shutting down the board, changing between NES emulator and SNES emulator and see if the settings will stick.
rbaker last edited by
@sfc_k Wow, I am struggling to follow what you have done. You should format your posts to aid readability. You cannot assign multiple values to things in these configs. Do you have an alternative controller that is usb to test? I am wondering what the usb adaptor is doing. I don't really know what else to suggest. Now that you have managed to see the configs, I would start again with a fresh image and do all the editing in these configs one step at a time and not through the retroarch gui.
@rbaker still having issues, retroarch now likes my SNES controller but does not want to take inputs from the NES controller now. I think I am completely spent at this point. In response to your latest reply, I think I will have to simply bite the bullet and do a complete reimage. I am curious however, upon starting up the board on this first go around, I was initially stopped to do an input of gamepads in ES. My memory sucks, is it possible for me to simply negate that during the initial startup and simply play with the config files?
simonster last edited by
Is it a single adapter that will accept a NES or SNES pad, or is it separate adapter? It almost sounds like it is wired differently but being detected as the same type of pad.
retroarch now likes my SNES controller but does not want to take inputs from the NES controller now. I think I am completely spent at this point. In response to your latest reply, I think I will have to simply bite the bullet and do a complete reimage. I am curious however, upon starting up the board on this first go around, I was initially stopped to do an input of gamepads in ES. My memory sucks, is it possible for me to simply negate that during the initial startup and simply play with the config files?
Seems like both controllers are being recognised as one pad somehow like @simonster said. On first boot, I would configure the SNES controller only and see what happens. When it is configured correctly, I would remove it and configure the NES one. I would do the autodetect process on both and see what happens then inspect the configs. Also, take a look at this thread. Don't have them both connected at the same time during the config. This video is also worth a look even though it is old.