Spy Hunter
-
This is my number 2 favorite game of all time within the realm of arcade games so I am really interested in figuring this one out.
I'm a big fan of the game myself. Unfortunately, 'Spy Hunter' is one of fifteen Midway MCR system games that won't run on lr-mame2003. Even when working correctly, the game really needs some sort of analog input for the gas pedal to control well. I have the game working in AdvanceMAME 3.5 with the left thumbstick of my controller mapped to analog input for up and down gas, while left and right of the same thumbstick is mapped to digital for the steering. This allows it to play very close to what you'd find on a 'Midway Classics Collection' for a modern console.
The learning curve for mapping a game like 'Spy Hunter' to play well is somewhat steep and I've even seen it on website and magazine lists of games that are "impossible" to emulate due to this. I would suggest first getting more comfortable with your RetroPie system with as many other arcade games as possible and then choose an emulator you like that will simply run the game. I believe that lr-mame2010 will also run the game, but last time I tried it, it seems like it wouldn't save a remap, couldn't recall it, or something similar. This may have changed since I last looked. You might also try the later libretro MAME cores as well.
After you get it running, see if the digital control scheme is playable to you. If so, you're done. If not, I put together a guide for advanced mapping that can be found here. It covers how to map mouse movement to a controller's thumbstick that can be used for finer analog control. I'll post my own mapping for the game below as a reference for the future if this is something you ever choose to explore.
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 (xboxdrv)" \ --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
-
@mediamogul much appreciated thank you!
-
According to the mame2003
catver.ini
, Spy Hunter should work. I'm sure there are still some mistakes in the catver but generally it's a good guide as to what should be playable in lr-mame2003.https://github.com/libretro/mame2003-libretro/blob/master/metadata/catver.ini
-
@markwkidd said in Spy Hunter:
According to the mame2003 catver.ini, Spy Hunter should work.
Unless something has changed recently with all the backporting of drivers, MAME UI menu elements will spawn over the games and won't accept any input. The bug is/was limited to the fifteen Midway MCR system titles.
-
@mediamogul said in Spy Hunter:
@markwkidd said in Spy Hunter:
According to the mame2003 catver.ini, Spy Hunter should work.
Unless something has changed recently with all the backporting of drivers, MAME UI menu elements will spawn over the games and won't accept any input. The bug is/was limited to the fifteen Midway MCR system titles.
Oh crackers -- I didn't focus in on 'Bally MC3' when you mentioned it earlier. Spy Hunter is one of those MC3 games that works fine in MAME 0.78 but has some kind of input regression due to the libretro port. It's very likely fixable but no one has taken a go yet: https://github.com/libretro/mame2003-libretro/issues/121
-
@markwkidd said in Spy Hunter:
Spy Hunter is one of those MC3 games that works fine in MAME 0.78 but has some kind of input regression due to the libretro port.
The MCR-2 games are affected as well. I remember 'Journey' had the same issues. Also, the infamous 'Separate Ways (Worlds Apart)' tape sample isn't emulated in lr-mame2003 which is downright criminal.
-
@mediamogul Thanks for mentioning MCR-2, I've updated the github issue. If you have any more details than you see over in that issue please feel free to post on github. One day sooner or later this one will get fixed. Some bugfixes are slow burns.
-
@mediamogul said in Spy Hunter:
Also, the infamous 'Separate Ways (Worlds Apart)' tape sample isn't emulated
Great. Now that song is stuck in my head all day, but at least in my head it sounds fantastic, not a bad sample of a bad tape.
-
One day sooner or later this one will get fixed.
That'll be a real shot in the arm for Mame2003. 'Spy Hunter', 'Tapper' and the Tron games alone will be worth the effort.
Great. Now that song is stuck in my head all day, but at least in my head it sounds fantastic, not a bad sample of a bad tape.
Ha! I love that song. I got to see Journey live sometime last year. It's a personal nitpick of mine that MAME uses a very clean sample that likely comes from a CD. I like these things to be as authentic as possible and it just sounds too perfect. Also the real machine would play the tape to the end and rewind when finished.
If the player died somewhere in the middle of the song, the next player to beat the game would hear the song pick up where it left off. Under Mame emulation, the song always starts at the beginning. The task of keeping fans from getting backstage is a real challenge too, so I doubt too many people made it through the whole track during game play.
Also, it's the first game to use digitized likenesses that would later become popular in games like 'Pit Fighter' and 'Mortal Kombat'. The tech was originally tested in arcades as a means to photograph a person's face to put next to their initials and high score. They scrapped the idea when they saw that teenagers were flashing the camera.
-
@mediamogul That's some nice trivia to accompany what is usually a novelty title in my gamelist. Now I will have a few more things to say about this one. Thanks!
As for the sample quality, can we simply bust it open and throw some processing at it to make it sound more authentic?
-
@caver01 said in Spy Hunter:
That's some nice trivia to accompany what is usually a novelty title in my gamelist.
I'll be perfectly honest; I personally don't think it's that great a game, but it's considered to be an arcade classic none the less.
As for the sample quality, can we simply bust it open and throw some processing at it to make it sound more authentic?
Yes sir we can. As a wild coincidence, I'm processing audio for a soundtrack to get a similar effect this very minute. I might as well go ahead and alter the file while I'm here.
Edit: I hope it doesn't run a hash check on the sample file though. I guess it wouldn't work if that were the case.
-
@mediamogul said in Spy Hunter:
I hope it doesn't run a hash check on the sample file though. I guess it wouldn't work if that were the case.
I am going to venture a guess that it doesn't. IIR there are some entertaining examples of replacement sample files out there. For example, I think there is a Star Trek set that has alternate bleeps, theme song and computer voiceover. I got that to work in Advmame.
-
@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 &
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.