Spy Hunter
-
@mediamogul so I have been reading up on your xboxdrv tutorial. Quite a lot to go over but I think I am wrapping my head around it. I have a runcommand-onstart.sh and runcommand-onend.sh in the specified folder and have chmod +x'd them so they have the x attribute.
What I am not 100% on is if there is some other step I am to do in order for retropie to run those shell commands on the start and end of every game.
I setup a config for pacman.zip,mspacman.zip, and frogger.zip with a basic360 controller setup and the $fourway option but I am not sure that did anything.
I also tried a similar mapping for spyhunt.zip as yours but the normal 360 absmap and keymap entries. Again it seems like the input is working exactly as it had before. Basically it seems like the .sh files are not being executed at all.
My runcommand-onstart.sh for illustration
#!/bin/sh ## Uncomment one or all of the following if you need to find some information about the emulator or roms ## Name of the emulator #echo $1 >> /dev/shm/runcommand.log ## Name of the software used for running the emulation #echo $2 >> /dev/shm/runcommand.log ## Name of the rom #echo $3 >> /dev/shm/runcommand.log ##Executed command line #echo $4 >> /dev/shm/runcommand.log ### The FUN begins #Get ROM name striping full path rom="${3##*/}" ### Set variables for your joypad and emulator ### Basic Configuraions - Standard controller mappings basic360="sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv >/dev/null \ --evdev /dev/input/event0 \ --silent \ --detach-kernel-driver \ --force-feedback \ --mimic-xpad \ --dpad-as-button \ --trigger-as-button \ --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RY=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \ --evdev-keymap BTN_SOUTH=a,BTN_EAST=b,BTN_NORTH=x,BTN_WEST=y,BTN_THUMBL=tl,BTN_THUMBR=tr,BTN_TL=lb,BTN_TR=rb,BTN_TL2=lt,BTN_TR2=rt,BTN_SELECT=back,BTN_START=start,BTN_MODE=guide \ --calibration x1=-32767:0:32767,y1=-32767:0:32767,x2=-32767:0:32767,y2=-32767:0:32767" basicPS3="sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv >/dev/null \ --evdev /dev/input/event2 \ --silent \ --detach-kernel-driver \ --force-feedback \ --mimic-xpad \ --dpad-as-button \ --trigger-as-button \ --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_Z=x2,ABS_RX=y2 \ --evdev-keymap KEY_#302=a,KEY_#301=b,BTN_DEAD=x,KEY_#300=y,BTN_THUMB=tl,BTN_THUMB2=tr,BTN_BASE5=lb,BTN_BASE6=rb,BTN_BASE3=lt,BTN_BASE4=rt,BTN_TRIGGER=back,BTN_TOP=start,BTN_SOUTH=guide,BTN_TOP2=du,BTN_PINKIE=dr,BTN_BASE=dd,BTN_BASE2=dl \ --calibration x1=-32767:0:32767,y1=-32767:0:32767,x2=-32767:0:32767,y2=-32767:0:32767" spyhuntEXAMPLE="sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.2:1.0-event-joystick \ --detach-kernel-driver \ --force-feedback \ --dpad-as-button \ --trigger-as-button \ --deadzone-trigger 15% \ --deadzone 4000 \ --device-name Logitech_Rumblepad_2 \ --silent \ --four-way-restrictor \ --axismap -Y1=Y1,-Y2=Y2 \ --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_Z=x2,ABS_RZ=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \ --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_TOP=x,BTN_TRIGGER=y,BTN_BASE3=back,BTN_BASE4=start,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE5=tl,BTN_BASE6=tr,BTN_BASE=lt,BTN_BASE2=rt \ --ui-axismap x1=KEY_LEFT:KEY_RIGHT,y1=REL_Y:15,X2=KEY_1:KEY_2,Y2=KEY_3:KEY_4 \ --ui-buttonmap a=KEY_A,b=KEY_B,x=KEY_X,y=KEY_Y,lb=KEY_L,rb=KEY_R,lt=KEY_D,rt=KEY_F,tl=KEY_C,tr=KEY_V,du=KEY_UP,dd=KEY_DOWN,dl=KEY_LEFT,dr=KEY_RIGHT,start=KEY_T,back=KEY_E \ --ui-buttonmap guide=void" spyhunt360="sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/event0 \ --detach-kernel-driver \ --force-feedback \ --dpad-as-button \ --trigger-as-button \ --deadzone-trigger 15% \ --deadzone 4000 \ --silent \ --four-way-restrictor \ --axismap -Y1=Y1,-Y2=Y2 \ --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RY=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \ --evdev-keymap BTN_SOUTH=a,BTN_EAST=b,BTN_NORTH=x,BTN_WEST=y,BTN_THUMBL=tl,BTN_THUMBR=tr,BTN_TL=lb,BTN_TR=rb,BTN_TL2=lt,BTN_TR2=rt,BTN_SELECT=back,BTN_START=start,BTN_MODE=guide \ --ui-axismap x1=KEY_LEFT:KEY_RIGHT,y1=REL_Y:15,X2=KEY_1:KEY_2,Y2=KEY_3:KEY_4 \ --ui-buttonmap a=KEY_A,b=KEY_B,x=KEY_X,y=KEY_Y,lb=KEY_L,rb=KEY_R,lt=KEY_D,rt=KEY_F,tl=KEY_C,tr=KEY_V,du=KEY_UP,dd=KEY_DOWN,dl=KEY_LEFT,dr=KEY_RIGHT,start=KEY_T,back=KEY_E \ --ui-buttonmap guide=void" ### Extended Configurations ### Specific emulator configuration or any other parameters you will need only for some emulators scummVM="--axismap -Y1=Y1,-Y2=Y2 \ --ui-axismap x1=REL_X:10,y1=REL_Y:10 \ --ui-buttonmap a=BTN_LEFT,b=BTN_RIGHT,start=KEY_F5,back=KEY_ESC \ --ui-buttonmap guide=void,x=void,y=void,lb=void,rb=void,tl=void,tr=void,lt=void,rt=void,back=void \ --ui-axismap x2=void" amiga="--axismap -Y1=Y1,-Y2=Y2 \ --ui-axismap x2=REL_X:1,y2=REL_Y:1 \ --ui-axismap x1=KEY_LEFT:KEY_RIGHT,y1=KEY_DOWN:KEY_UP \ --ui-buttonmap du=KEY_UP,dd=KEY_DOWN,dl=KEY_LEFT,dr=KEY_RIGHT \ --ui-buttonmap lt=BTN_LEFT,rt=BTN_RIGHT,start=KEY_ESC,back=KEY_LEFTCTRL,y=KEY_SPACE,a=KEY_LEFTCTRL,b=KEY_LEFTALT,x=KEY_LEFTSHIFT \ --ui-buttonmap guide=void,tl=void,lt=void,rt=void,back=void \ --ui-axismap x2=void" fourway="--four-way-restrictor" invert="--ui-buttonmap du=KEY_DOWN,dd=KEY_UP" ### Kill Command xboxkill="sudo killall >/dev/null xboxdrv" ### Execute the driver with the configuration you need # $1 is the name of the emulation, not the name of the software used # it is intellivision not jzintv case $1 in mame-libretro) ;; arcade) case $rom in "spyhunt.zip") # Spy Hunter $xboxkill joycommand="$spyhunt360 &" eval $joycommand ;; "pacman.zip"|"mspacman.zip"|"frogger.zip") # Pac-Man Like (4 way) $xboxkill joycommand="$basic360 $fourway &" eval $joycommand ;; *) # Configuration for every other ROMs on this emulator $xboxkill joycommand="$basic360 &" eval $joycommand ;; esac ;; daphne) ;; scummvm) $xboxkill joycommand="$basicPS3 $scummVM &" eval $joycommand ;; amiga) $xboxkill joycommand="$basicPS3 $amiga &" eval $joycommand ;; intellivision) ;; esac
-
Actually it appears I may be running into issues with text file carraige returns. Even though I have FileZilla set to transfer anything with .sh and .log extensions as ASCII it appears to not be properly correcting the carraige return styles between linux and windows.
Seeing a bunch of stuff like this in the log
/opt/retropie/configs/all/runcommand-onstart.sh: line 5: $'\r': command not found /opt/retropie/configs/all/runcommand-onstart.sh: line 107: syntax error near unexpected token `$'in\r''
-
@alturis said in Spy Hunter:
Basically it seems like the .sh files are not being executed at all.
One pretty effective way to troubleshoot is to take the xboxdrv launch command and run it by itself from the command line. The software will bark some pretty specific errors that'll let you know what's going on.
Actually it appears I may be running into issues with text file carraige returns. Even though I have FileZilla set to transfer anything with .sh and .log extensions as ASCII it appears to not be properly correcting the carraige return styles between linux and windows.
This is a pretty common issue when moving text files around from Windows to Linux. Try using Notepad++ or another text application that supports utf-8 text encoding. That should solve those carriage returns.
-
@mediamogul Well I was able to get around the CR/LF issue by using WinSCP instead of FileZilla for now.
Thus far I have gotten as far as it appearing to have executed the shell script without any errors other than the killall xboxdrv logging a complaint about there being no processes running.
The end result is that I get no input response at all, however, when trying the basic test case of pacman.zip. So going to have to do some more experimentation to figure out how I have the setup working wrong and/or re-read your tutorial.
To clarify, I am using an Xbox 360 Controller via wireless bluetooth. So I am not looking to change absmap or keymap just game button mappings. Following your tutorial, though, I am trying to essentially map the Xbox 360 buttons as their default ones and then adjust the mappings differently per game.
-
other than the killall xboxdrv logging a complaint about there being no processes running.
Well, that says it was never running, but it's unusual that xboxdrv wasn't throwing any errors. When you tried launching it directly from the command line, did you have
> /dev/null 2>&1
in the command? If so, make sure you remove it for troubleshooting purposes. -
@alturis I've got code a little bit similar to your's, but I'm not sure you can have 3 options eg spyhunter, then pacman then *. I'd simplify it first with 2 options, test it and, once that's working, then try 3 eg try:
arcade) case $rom in "spyhunt.zip") # Spy Hunter $xboxkill joycommand="$spyhunt360 &" eval $joycommand ;; *) # Configuration for every other ROMs on this emulator $xboxkill joycommand="$basic360 &" eval $joycommand ;; esac
The code above is very similar to what I have and it works well.
-
@spud11 Hmm... Thanks for the suggestion. I am no unix shell expert in any sense of the word but I am thinking that is not likely the issue. It does appear to actually execute the xboxdrv driver as I end up with no input. So I think my problem is in the actual options for the command. I am working on adding some more logging to wipe more of the dirt off the window and see whats going on so to speak.
Yeah. Confirmed by adding info to the log
echo "joycommand:" >> /dev/shm/runcommand.log echo $joycommand >> /dev/shm/runcommand.log
Outputs this when running mspacman.zip:
joycommand: sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.4:1.0-event-joystick --silent --detach-kernel-driver --force-feedback --mimic-xpad --dpad-as-button --trigger-as-button --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RY=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --evdev-keymap BTN_SOUTH=a,BTN_EAST=b,BTN_NORTH=x,BTN_WEST=y,BTN_THUMBL=tl,BTN_THUMBR=tr,BTN_TL=lb,BTN_TR=rb,BTN_TL2=lt,BTN_TR2=rt,BTN_SELECT=back,BTN_START=start,BTN_MODE=guide --calibration x1=-32767:0:32767,y1=-32767:0:32767,x2=-32767:0:32767,y2=-32767:0:32767 --four-way-restrictor &
-
Ok. So I think it is actually working. But because it is registering it as a new controller rather than stomping my existing controller it ends up that RetroArch is still listening to my original controller setup which has now been redirected as a new one (event3) and ends up getting no input at all.
xboxdrv 0.8.8 - http://pingus.seul.org/~grumbel/xboxdrv/ Copyright © 2008-2011 Ingo Ruhnke <grumbel@gmail.com> Licensed under GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; see the file COPYING for details. Your Xbox/Xbox360 controller should now be available as: /dev/input/js1 /dev/input/event3 Press Ctrl-C to quit RT=start,BTN_MODE=guide --calibration x1=-32767:0:32767,y1=-32767:0:32767,x2=-32767:0:32767,y2=-32767:0:32767 --four-way-restrictor &
-
@mediamogul I tried to solve that by following the tutorial on swapping player joypad assignments. I created a retroarch.cfg_default and retroarch.cfg_xboxdrv and added lines to the shell script to rm retroarch.cfg and cp one or the other in its place selectively based on the same logic.
But I think I am still missing some piece to this puzzle.
My 360 controller is normally event0 but after running the xboxdrv it still shows its registering it as event3Your Xbox/Xbox360 controller should now be available as: /dev/input/js1 /dev/input/event3
I am thinking the missing piece is getting retroarch to listen to event3 at all.
retroarch.cfg_default
# Settings made here will only override settings in the global retroarch.cfg if placed above the #include line input_remapping_directory = "/opt/retropie/configs/arcade/" #include "/opt/retropie/configs/all/retroarch.cfg"
retroarch.cfg_xboxdrv
# Settings made here will only override settings in the global retroarch.cfg if placed above the #include line input_remapping_directory = "/opt/retropie/configs/arcade/" input_player1_joypad_index = "1" input_player2_joypad_index = "0" #input_player2_analog_dpad_mode = 1 #include "/opt/retropie/configs/all/retroarch.cfg"
-
-
@meleu / @mediamogul I am all ears!
I was referring to all the info on how to setup xboxdrv here:
https://github.com/RetroPie/RetroPie-Setup/wiki/Universal-Controller-Calibration-&-Mapping-Using-xboxdrvActually I looked up what you are referring to and I think that would be a bit over the top for what I am looking to do.
https://github.com/meleu/RetroPie-joystick-selectionOne of the things that is important to me with this setup is that when you select a game it would "just work" without popping up any dialogs or showing the retropie "dos" looking dialogs etc.
So ultimately any solution I have on it I would want it to just detect that a certain game is running and setup the controls in a way that makes the best sense for that title and not require the player to see any of this going on.
-
@spud11 said in Spy Hunter:
The code above is very similar to what I have and it works well.
Would you mind posting the exact syntax of your xboxdrv parameters?
-
@alturis I have 4 DragonRise usb joysticks. I've just copied Player 1's input below for Advance Mame (but I have similar setups for FBA and Mame 2003). Each button I have corresponds to a key on the keyboard. In Mame, I pressed TAB and allocated keys to up/down/left/right etc. Those keys correspond to the keys allocated in xboxdrv:
### To exit AdvMame automatically, I've created a macro in /opt/retropie/configs/all and mapped back+rt to back+rt=macro:/opt/configs/all/advmame_exit.macro . I've made this file executable. ### The contents of this file are: ### send KEY_ESC 1 ### wait 50 ### send KEY_DOWN 1 ### wait 50 ### send KEY_ENTER 1 Player1_AdvMame_Sim="sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv > /dev/null 2>&1 \ --silent \ --detach-kernel-driver \ --deadzone=4000 \ --deadzone-trigger 15% \ --force-feedback \ --mimic-xpad \ --trigger-as-button \ --ui-buttonmap tl=void,tr=void,guide=void \ --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.3.3:1.0-event-joystick \ --device-name "Player_1" \ --evdev-absmap ABS_X=y1,ABS_Y=x1 \ --evdev-keymap BTN_THUMB2=a,BTN_PINKIE=b,BTN_TRIGGER=x,BTN_THUMB=y,BTN_TOP2=lb,BTN_TOP=rb,BTN_BASE3=back,BTN_BASE6=start,BTN_BASE2=lt,BTN_BASE5=rt \ --ui-axismap X1=KEY_LEFT:KEY_RIGHT,Y1=KEY_UP:KEY_DOWN \ --ui-buttonmap a=KEY_LEFTCTRL,b=KEY_LEFTALT,x=KEY_SPACE,y=KEY_LEFTSHIFT,lb=KEY_C,rb=KEY_V,back=KEY_UNKNOWN,start=KEY_UNKNOWN,lt=KEY_5+KEY_1,rt=KEY_6+KEY_2 \ --ui-buttonmap start+back=KEY_LEFTSHIFT+KEY_F7+KEY_A,back+start=KEY_F7+KEY_A \ --ui-buttonmap back+rt=macro:/opt/retropie/configs/all/advmame_exit.macro"
I also have a file called
99-xboxdrv.rules
which has the following content:SUBSYSTEM=="input", ATTRS{name}=="Player_1", GROUP="users", MODE="0666", ENV{ID_INPUT_KEYBOARD}="1" SUBSYSTEM=="input", ATTRS{name}=="Player_2", GROUP="users", MODE="0666", ENV{ID_INPUT_KEYBOARD}="1" SUBSYSTEM=="input", ATTRS{name}=="Player_3", GROUP="users", MODE="0666", ENV{ID_INPUT_KEYBOARD}="1" SUBSYSTEM=="input", ATTRS{name}=="Player_4", GROUP="users", MODE="0666", ENV{ID_INPUT_KEYBOARD}="1"
My runcommand-onstart file is about 100Kb in size because it covers most emulators, so it's too big to insert here in its entirety.
-
@spud11 All good info thank you. Ultimately I am going to be putting this pi into a bartop (https://gameroomsolutions.com/shop/bartop-arcade-kit-deluxe) so I think I am going to come back around and revisit this once I have that setup so that I can analyze the input of those joysticks and buttons.
But I should probably continue getting this 360 controller to work with it so that I buildup the knowledge I will need about where I am going wrong right now.
-
“GUTS” Mega Pack
Save your time making sure you got everything! Includes everything except the monitor you will need.
Raspberry Pi3 computer; RPI certified power supply; 200gb microsd – Pre-flashed with attract mode/retropie; pre-configured for our control kits; leThese people are greedy wankers it's a pity people support them financially.
-
@herb_fargus Have a look at the "Plug & Play Pack" - $1,219.98!
-
@herb_fargus Well I have heard great things about the quality of their cabinets themselves and ease of setup. As I already have my pi I am just getting a "mini-guts" package with just speakers and other hardware like a marquee light. Very reasonable price on all that I thought.
-
Ultimately without a steering wheel and gas pedal control for this game, I think it ends up in the category of a nostalgia entry in my games list.
But I discovered some much easier ways to bring it to the playable category but weakly at that. One thing that hung me up for a long while was figuring out where the mame2010 per-game input mappings are kept. I had experimented with changing the button assignments in the in-game emulator menu and left it in bad state. I finally discovered that the per game input maps are stored in /home/pi/cfg - which is completely different than any other emulator location I have found.
Once I figured out how to start from scratch on that and that I needed a keyboard hooked up to work the mame2010 emulator options menu I was able to very easily configure a basic input setup that would at least work and be "playable."
For the game to be fun it requires that the steering and gas pedal are both analog. So will continue to pursue utilizing xboxdrv to that end.
-
@alturis they could be made of pure gold for all I care. Fact is they are profiting on things that are free, taking others work and selling it as their own. There are more reputable arcade parts sellers out there.
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.