Guide: Advanced Controller Mappings
-
@mediamogul I will give it a shot, as all other methods failed. The closest I got was with Joystick Selection "by name" method: the games work well even when Retroarch shuffled the ports, but Emulationstation crashes when I exit a "port-confused" game.
If I understand the method correctly - I will have to change Controlblock to "MAME" mode = keyboard emulation and then run 2 xboxdrv configured to match the keys generated by my controllers. Correct?
-
@guydot said in Guide: Advanced Controller Mappings:
If I understand the method correctly - I will have to change Controlblock to "MAME" mode = keyboard emulation and then run 2 xboxdrv configured to match the keys generated by my controllers. Correct?
Actually, you would just change your xboxdrv maps to be complete key-mappings of the Controlblock. From there, you'd assign those keys to players one and two in RetroArch.
-
@mediamogul @spud11 I am missing something here.
Right now:
(1) Controlbox is creating 2 joypads: JS0/JS1 and event 2/3
(2) I use 2 xboxdrv commands, each has --evdev-absmap and --evdev-keymap that correspond to a joypad joystick + buttons
(3) In Retroarch.cfg, I tried to use input_player1_joypad_index = "2" and input_player2_joypad_index = "3" to mapIs proposed method to add --ui-buttonmap to map xboxdrv to keyboard keys? I guess I need more steps... Thanks for all your help!
-
@guydot said in Guide: Advanced Controller Mappings:
Is proposed method to add --ui-buttonmap to map xboxdrv to keyboard keys?
It is, yes. As an example, below is an excerpt from my
retroarch.cfg
file where I've mapped my desired keyboard inputs for player one. Below that is a 4-way strict xboxdrv map that corresponds to those keys.retroarch.cfg excerpt:
# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, # rather than relying on a default. input_player1_a = "a" input_player1_b = "b" input_player1_y = "y" input_player1_x = "x" input_player1_start = "t" input_player1_select = "e" input_player1_l = "l" input_player1_r = "r" input_player1_left = "left" input_player1_right = "right" input_player1_up = "up" input_player1_down = "down" input_player1_l2 = "d" input_player1_r2 = "f" input_player1_l3 = "c" input_player1_r3 = "v"
4-way strict xboxdrv command:
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 \ --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=KEY_UP:KEY_DOWN,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 I think I had my aha! moment :-) I am away but will test in a week or so and report back. Thanks!!!
-
Not a problem. Let us know how it works out.
-
@mediamogul - Post 534...action...wow long thread! ;) I was wondering if I could get your help with setting up XBOX 360 controllers if possible, please, when/if you have time. I am in no hurry but not quite sure what to do next once I get the controllers setup.
I have four XBOX 360 controllers using a wireless dongle. I use the Arcade folder running mame2003, FBA and Advmame for about 300 games. Basically I just want to break down the games for 4/8-way restriction. Good 4-way games are lost to simple mistakes of not hitting that ladder squarely in Donkey Kong, etc. using controllers.
I am running RP 4.3 on a Pi 3 updated to the latest RetroPie script as of yesterday. My cores are recent from source and Advmame is on 3.8.
I went through the tutorial and here's what I ended up with but I had a few questions. For calibration axis name. Do I use the output from
evtest /dev/input/event[event1]
and add it 3 times as shown below?evtest output for 360 controller:
A = BTN_SOUTH = 304 B = BTN_EAST = 305 X = BTN_NORTH = 307 Y = BTN_WEST = 308 LB = BTN_TL = 310 RB = BTN_TR = 311 LT = BTN_TL2 = 312 RT = BTN_TR2 = 313 BACK = BTN_SELECT = 314 START = BTN_START = 315 GUIDE = BTN_MODE = 316 TL = BTN_THUMBL = 317 TR = BTN_THUMBR = 318 X1/Y1 = ABS_X (UP/DOWN) | ABS_Y (LEFT/RIGHT) X2/Y2 = ABS_RX (UP/DOWN) | ABS_RY (LEFT/RIGHT) DPAD_Y/DPAD_X = ABS_HAT0Y (UP/DOWN) | ABS_HAT0X (LEFT/RIGHT)
Also with a 360 controller I didn't get output for rt/lt or at least I assigned them to buttons TL2 & TR2 as they aren't an axis? So I have two fields below still using asterisks.
Lastly should I use the option to make the triggers into buttons on a 360 controller. I added the option below.
Lastly, lastly do I need to use the rename parameter for each controller as I have 4 but they are all the same. Well they are 2 different models among the 4 but they are all detected as the same. Do I need to define 4 controllers in the rc.local file?
If I get this first step implemented correctly is there a guide restricting games to 4/8 way? Disclosure I didn't read all 533 posts so if there's a relevant section I can read through or a link to what steps I should think about next. Thanks Media for all this information, it's pretty incredible stuff. I wish 4/8 restriction was a controller feature as it's kind of relevant-ish to good gaming.
sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/by-id/[usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-event-joystick] \ --silent \ --detach-kernel-driver \ --force-feedback \ --deadzone-trigger 15% \ --deadzone 4000 \ --calibration X=-32767:0:32767,Y=-32767:0:32767 \ --calibration RX=-32767:0:32767,RY=-32767:0:32767 \ --calibration HAT0Y=-32767:0:32767,HAT0X=-32767:0:32767 \ --trigger-as-button \ --mimic-xpad \ --evdev-absmap ABS_[X]=x1,ABS_[Y]=y1,ABS_[RX]=x2,ABS_[RY]=y2,ABS_[•]=lt,ABS_[•]=rt,ABS_[HAT0Y]=dpad_x,ABS_[HAT0X]=dpad_y \ --evdev-keymap BTN_[SOUTH]=a,BTN_[EAST]=b,BTN_[NORTH]=x,BTN_[WEST]=y,BTN_[TL]=lb,BTN_[TR]=rb,BTN_[TL2]=tl,BTN_[TR2]=tr,BTN_[MODE]=guide,BTN_[SELECT]=back,BTN_[START]=start \ &
-
Also something odd is it seems the X/Y axis is "inverted" on the d-pad vs. the left/right stick on a 360 controller using
evtest /dev/input/event[event1]
so in the script above I have HAT0Y as X and HAT0X as Y. -
Good 4-way games are lost to simple mistakes of not hitting that ladder squarely in Donkey Kong, etc. using controllers.
I hear you. Correcting that issue is probably my favorite use of all this stuff.
Do I use the output from evtest /dev/input/event[event1] and add it 3 times as shown below?
Seeing as how you have two different models, I'd at least confirm that they're all identifying the same way. When mapped, xboxdrv will delineate them from the
--evdev
location you enter. I assume that there are four unique entries at/dev/input/by-id/
?Also with a 360 controller I didn't get output for rt/lt or at least I assigned them to buttons TL2 & TR2 as they aren't an axis?
Based on your listing, they appear to be buttons, as
BTN_
denotes buttons andABS_
denotes an axis.Lastly should I use the option to make the triggers into buttons on a 360 controller. I added the option below.
That's what I do and mine are definitely buttons already. If I'm remembering correctly, it adds a bit of flexibility for using them as hotkeys if need be.
Lastly, lastly do I need to use the rename parameter for each controller as I have 4 but they are all the same.
I would, yes. It helps certain software delineate the controllers and it really helps visually when you're trying to identify them yourself.
Also something odd is it seems the X/Y axis is "inverted" on the d-pad vs. the left/right stick
This seems to be normal behavior with all controllers for some reason. Our approaches may differ, but below, you'll see I used
--axismap -Y1=Y1,-Y2=Y2
to correct the issue on mine. The example is a base command I use for 4-way restriction with no other fancy additions, so it should also answer your question about the restriction method itself. All that ever needs to be added to any command is--four-way-restrictor
to make it happen. However, you can also restrict the DPad with--modifier dpad-restrictor=fourway
. It's arguably unnecessary due to most DPads being restricted by design, but I usually add it anyway for good measure.Below that I'll post a listing of all the arcade ROMs that I currently 4-way restrict. Over time, I've actually started doing this for similar games on most older console platforms as well. It really pays off more often than you'd think.
sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.2.1:1.0-event-joystick \ --detach-kernel-driver \ --force-feedback \ --trigger-as-button \ --deadzone-trigger 15% \ --deadzone 4000 \ --device-name "Logitech Rumblepad 2 (xboxdrv)" \ --silent \ --axis-sensitivity X1=-0.00,Y1=-0.00,X2=-0.00,Y2=-0.00 \ --four-way-restrictor \ --modifier dpad-restrictor=fourway \ --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-buttonmap guide=void \ &
ncv2.zip mspacmnf.zip alibaba.zip amidar.zip armwrest.zip astinvad.zip atetris.zip anteater.zip armorcar.zip astrob.zip astrof.zip bagman.zip ballbomb.zip barrier.zip blkhole.zip blasto.zip blockade.zip btime.zip carjmbre.zip carnival.zip cavelon.zip chameleo.zip checkman.zip chinhero.zip circusc.zip ckong.zip commando.zip dazzler.zip devilfsh.zip digdug.zip digdug2.zip digger.zip disco.zip dkong.zip dkong3.zip dkongjr.zip docastle.zip dommy.zip dorodon.zip frogger.zip galaga.zip galaxian.zip galxwars.zip guzzler.zip invrvnge.zip invinco.zip jjack.zip joust2.zip jrpacman.zip jumpcoas.zip jungler.zip kchamp.zip kchampvs.zip kicker.zip kingball.zip ladybug.zip lasso.zip levers.zip lnc.zip locomotn.zip logger.zip lrescue.zip lupin3.zip mappy.zip marvins.zip mikie.zip mmonkey.zip monsterb.zip moonal2.zip moonqsr.zip mrdo.zip mrflea.zip mrjong.zip mrtnt.zip mspacman.zip mystston.zip naughtyb.zip netwars.zip olibochu.zip ozmawars.zip pacnpal.zip pacplus.zip pengo.zip perestro.zip pickin.zip pignewt.zip pisces.zip pleiads.zip pooyan.zip popflame.zip puckman.zip pacman.zip pulsar.zip qix.zip radarscp.zip retofinv.zip rocnrope.zip route16.zip samurai.zip tsamurai.zip scregg.zip sindbadm.zip solarfox.zip sonofphx.zip invadpt2.zip panic.zip shollow.zip spclaser.zip streakng.zip sbagman.zip superpac.zip superqix.zip ssi.zip swat.zip tactcian.zip tankbatt.zip taxidrvr.zip elecyoyo.zip theend.zip timelimt.zip tomahawk.zip todruaga.zip tranqgun.zip triplep.zip tutankhm.zip vanvan.zip volfied.zip vsgongf.zip wiping.zip warpwarp.zip zigzag.zip zzyzzyxx.zip alphaho.zip pacnchmp.zip comotion.zip copsnrob.zip cosmicg.zip cosmos.zip crash.zip crush.zip redufo.zip diamond.zip dorunrun.zip dominos.zip drmicro.zip drgnbstr.zip dremshpr.zip elvactr.zip eyes.zip firetrap.zip 40love.zip galpanic.zip gundealr.zip hardhat.zip headon.zip headon2.zip heiankyo.zip hexa.zip hustle.zip intrepid.zip ironhors.zip karianx.zip kungfum.zip lvgirl94.zip logicpro.zip logicpr2.zip msjiken.zip kikcubic.zip mineswpr.zip mtrap.zip dowild.zip mrgoemon.zip natodef.zip rallyx.zip nrallyx.zip pepper2.zip pettanp.zip popeye.zip punchout.zip raiders5.zip rampage.zip reikaids.zip robby.zip rthunder.zip sidetrac.zip schaser.zip spaceinv.zip spacezap.zip spectar.zip springer.zip stratvox.zip sia2650.zip spnchout.zip tapper.zip rbtapper.zip targ.zip telmahjn.zip theglob.zip thief.zip timber.zip toypop.zip wwjgtin.zip wndrmomo.zip yamyam.zip zerozone.zip zookeep.zip pairs.zip higemaru.zip elecyoy2.zip
-
Ah, I almost forgot to give an example of how you would handle this ROM-specifically from the runcommand-onstart. There are quite a few ways actually, but this is probably the easiest to illustrate and it uses the xboxdrv launch command I posted above. You'll notice I only used three games, but you can add as many as you want accordingly.
ROMNAME="${3##*/}" if [ "$ROMNAME" = "pacman.zip" ] || [ "$ROMNAME" = "mspacman.zip" ] || [ "$ROMNAME" = "jrpacman.zip" ] && [ "$2" = "advmame" ]; then sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/by-path/platform-3f980000.usb-usb-0:1.2.1:1.0-event-joystick \ --detach-kernel-driver \ --force-feedback \ --trigger-as-button \ --deadzone-trigger 15% \ --deadzone 4000 \ --device-name "Logitech Rumblepad 2 (xboxdrv)" \ --silent \ --axis-sensitivity X1=-0.00,Y1=-0.00,X2=-0.00,Y2=-0.00 \ --four-way-restrictor \ --modifier dpad-restrictor=fourway \ --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-buttonmap guide=void \ fi &
-
@mediamogul - Thank you for the help and information. I am going to give it a shot and will let you know how it turns out. I have a few more questions but you've given me plenty here to get started, thank you good sir and have a great weekend.
On a side note, are from the Carolina's? I have no idea why I keep thinking you are from that area and I was thinking of you during the weekend of that devastating hurricane. If I remember you were doing yard work in like April with some nice weather and we got hammered here for one of the biggest snows on record that month. I almost posted a pic for you to check it out. ;)
-
@mediamogul - Just to clarify one thing below. I've been following your guide and in the example you'll see
tl
andtr
in the keymap line shown below from the guide examples but on the controller mapping diagram it shows aslt
andrt
is that a typo in the line?--evdev-absmap ABS_[X]=x1,ABS_[Y]=y1,ABS_[RX]=x2,ABS_[RY]=y2,ABS_[•]=lt,ABS_[•]=rt,ABS_[HAT0Y]=dpad_x,ABS_[HAT0X]=dpad_y \ --evdev-keymap BTN_[SOUTH]=a,BTN_[EAST]=b,BTN_[NORTH]=x,BTN_[WEST]=y,BTN_[TL]=lb,BTN_[TR]=rb,BTN_[TL2]=tl,BTN_[TR2]=tr,BTN_[MODE]=guide,BTN_[SELECT]=back,BTN_[START]=start \
Also since my triggers register as buttons do I just delete these two entries from absmap line and only use the keymap entries ?
ABS_[•]=lt,ABS_[•]=rt
-
@riverstorm said in Guide: Advanced Controller Mappings:
On a side note, are from the Carolina's? I have no idea why I keep thinking you are from that area and I was thinking of you during the weekend of that devastating hurricane.
I am indeed sir. Born and bred in the briar patch of beautiful South Carolina. We got really lucky in my area. Of course, I'll still be spending most of the weekend and probably next on cleanup. However, no trees came down, which is always a good thing.
I almost posted a pic for you to check it out.
Hey, never hesitate. I love seeing that stuff. Nature, with all of its crazy ups and downs, is the main reason I enjoy living here so much.
I've been following your guide and in the example you'll see tl and tr in the keymap line shown below from the guide examples but on the controller mapping diagram it shows as lt and rt is that a typo in the line?
Actually, they're a separate entry. The 'tl/tr' listings are the xboxdrv equivalent to what's more commonly referred to as 'l3/r3', which are the buttons activated by pressing down the two thumbsticks.
Also since my triggers register as buttons do I just delete these two entries from absmap line and only use the keymap entries ?
I believe you would, yes.
-
@mediamogul said in Guide: Advanced Controller Mappings:
I am indeed sir. Born and bred in the briar patch of beautiful South Carolina. We got really lucky in my area. Of course, I'll still be spending most of the weekend and probably next on cleanup. However, no trees came down, which is always a good thing.
In the briar patch eh, love it! ;) That's great to hear! Mother nature can be a nasty girl for sure. I'll be spending about half my weekend outdoors too just "winterizing". It's getting pretty cold at night. I think the 30s this evening (frost advisories) and 50s during the days.
I replaced the soffit and fascia on the shed that needs painting, replace an outdoor water faucet, seal my garage floor (the chemicals on the streets they use to melt snow eats concrete pretty good), drain hoses, pack-up summer deck chairs, tables, umbrella, bikes, etc.
You can delete this pic as not to to go off topic with pics of snow and controllers but here's a pic of what's happening on the west side of the state, here, today. Way to early for this stuff but the good is we won't see it here on the east side of the state, today at least but it's coming soon. ;)
I'll get you a pic of that storm this past spring. It was pretty neat to see it that deep so late in the season, my youngest daughter had a ball in it!
-
@riverstorm said in Guide: Advanced Controller Mappings:
here's a pic of what's happening on the west side of the state, here, today.
Wow, that was yesterday? With enough distance you can't help but see it as a work of art, but I'm sure you guys feel a fair amount dread along with it. Exactly where do you hail from again?
-
@mediamogul said in Guide: Advanced Controller Mappings:
Exactly where do you hail from again?
Yeah that was this past weekend even though it's a bit early for snow. To be honest I actually love the snow and cold. It's the cold and wind combined that I don't care for so much.
I am in South Dakota. So we here can appreciate that north/south distinction like you but some just don't care and lump as one in their mind. ;)
The Missouri river divides the state almost down the middle and that's where the time zone changes from Mountain to Central. People in Mountain time are referred to as West River and those in Central are East River. West has the scenic Black Hills, Badlands, Mt. Rushmore, Sylvan Lake (it was in the movie National Treasure but it's not behind Mt. Rushmore). The area is surprisingly great for really decompressing and taking all that scenic nature in if you can break yourself away from the tech you remember how nice it can really be outdoors. The East is much flatter more about agriculture and livestock. It's more metropolitan but still good hunting, camping, fishing, etc.
I love camping and fishing but not so much hunting but we will drive out in the country to shoot guns at whatever. Hunting is huge here and brings in a lot of tourists in the fall. Our population density is real low so if you like wide open spaces or a quiet acreage you got it within 10 minutes in any direction. We did make the top 5 places to live this year but the one demographic that is highly held as negative is the weather, people just don't like snow and cold. They just need to get in touch with their inner child and build a snowman again! ;)
-
@mediamogul - An actual post related question. ;) Yeah I was confused when I saw rt/tr. I thought it was a typo as they are just inverse but both are different mappings. I see now what you were saying.
Also you're correct it does list all 4 joysticks in by-id. I use two different Microsoft wireless dongles and the 'by-id' name seems to change based on which Microsoft wireless dongle is in use. The E0C number part of the name listed below is what's changing but the rest of the name is consistent. Is this possible to include?
usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-if02-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-if04-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-if06-event-joystick
usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0CA52D0-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0CA52D0-if02-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0CA52D0-if04-event-joystick usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0CA52D0-if06-event-joystick
The other thing is the D-Pad. I see it's has both an ABS and BTN value such as
BTN_TRIGGER_HAPPY1
andABS_HAT0X
should I add them both, one each to the absmap and keymap lines? Does it distinguish between the two somehow? -
@riverstorm said in Guide: Advanced Controller Mappings:
Sylvan Lake (it was in the movie National Treasure but it's not behind Mt. Rushmore)
Ha! I like those movies well enough myself, but I've talked with so many history and geography buffs that go off on them for those inaccuracies. It's a bit understandable too. I mean, each outing they spend half the movie trying to wow the audience with little known facts about America and then proceed to misrepresent just as many for the sake of convenience. Nonetheless, SD sounds like my kind of country for sure. Rumor has it, you guys are hiding a West Dakota from the tourists and keeping it's ultimate splendor to yourselves. If I ever happen to make it out that way maybe you could get me past the bouncer.
The E0C number part of the name listed below is what's changing but the rest of the name is consistent. Is this possible to include?
If you use the by-id location for the
--evdev
argument, it'll assure that the controllers are delineated properly.The other thing is the D-Pad. I see it's has both an ABS and BTN value such as BTN_TRIGGER_HAPPY1 and ABS_HAT0X
Each controller should either have one or the other. You said that you have two controller types, so is it that the DPad differs between the two? Keep in mind that the controllers are not mapped all together. Each instance of xboxdrv maps a separate controller, so if it is that the inputs differ between types, they can be mapped accordingly in their own instance.
-
@mediamogul said in Guide: Advanced Controller Mappings:
I mean, each outing they spend half the movie trying to wow the audience with little known facts about America and then proceed to misrepresent just as many for the sake of convenience.
To true! I think that's how rumors get started by mixing fiction/non-fiction. "Duh, haven't you seen National Treasure? Everyone knows there's a lake behind Mt. Rushmore!"
The wife cleared me so if you're ever in this area ping me in a post and we'll take you out for dinner. Her only condition was she wants to tag along on the trip to West Dakota, it'll be her first trip there too! :) After West Dakota I am thinking East Dakota could be fun too!
Ok well to be honest here I am swimming in information and kind of getting lost. The first part of the guide I followed like a champ and have all the information documented in a file but I am lost on putting it altogether. It's a bit overwhelming to understand what all needs to be done.
Breaking it down the first step is to get the right number of instances loaded in the rc.local, second create the runcommand-start and also I think I'll need a runcommand-exit?
Just to verify if I wanted to cover both wireless dongles I would need to load 8 instances in the rc.local file since each dongle shows a different by-id for the 4 controllers?
Also would I add all 8 controllers to the code runcommand-start? In the example below it loads one? Would I need to repeat the --evdev command and controller parameter lines below 8 times between the if/fi? Or would I need to get into something like section 3B - Expanding Launch Capabilities? I am not sure if that makes sense.
Lastly is there a list someplace already to match all 4-way games in mame2003?
ROMNAME="${3##*/}" if [ "$ROMNAME" = "pacman.zip" ] || [ "$ROMNAME" = "mspacman.zip" ] || [ "$ROMNAME" = "jrpacman.zip" ] && [ "$2" = "advmame" ]; then sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv \ --evdev /dev/input/by-id/[usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E0C26450-event-joystick] \ --device-name "XBOX 360 Controller 1" \ --silent \ --detach-kernel-driver \ --force-feedback \ --deadzone-trigger 15% \ --deadzone 4000 \ --calibration X1=-32767:0:32767,Y1=-32767:0:32767 \ --calibration X2=-32767:0:32767,Y2=-32767:0:32767 \ --calibration DPAD_Y=-32767:0:32767,DPAD_X=-32767:0:32767 \ --axis-map -HAT0X=HAT0X --axis-sensitivity X1=-0.00,Y1=-0.00,X2=-0.00,Y2=-0.00,HAT0Y=-0.00,HAT0X=-0.00 \ --trigger-as-button \ --four-way-restrictor \ --modifier dpad-restrictor=fourway \ --evdev-absmap ABS_[X]=x1,ABS_[Y]=y1,ABS_[RX]=x2,ABS_[RY]=y2,ABS_[HAT0Y]=dpad_x,ABS_[HAT0X]=dpad_y \ --evdev-keymap BTN_[SOUTH]=a,BTN_[EAST]=b,BTN_[NORTH]=x,BTN_[WEST]=y,BTN_[TL]=lb,BTN_[TR]=rb,BTN_[TL2]=lt,BTN_[TR2]=rt,BTN_[THUMBL]=tl,BTN_[THUMBR]=tr,BTN_[MODE]=guide,BTN_[SELECT]=back,BTN_[START]=start \ fi &
I did shut off all controllers except one for testing and it does look like the XBOX 360 d-pad has both a BTN_ and ABS_ value. Both models output the same exact values for all buttons and axis'. In the output below I pressed left and then right once. You'll see the values defined on the top portion when the command loads and also the properties right below it when pressing the d-pad. It seems to output two values for each press.
Input driver version is 1.0.1 Input device ID: bus 0x3 vendor 0x45e product 0x2a1 version 0x100 Input device name: "Xbox 360 Wireless Receiver" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 304 (BTN_SOUTH) Event code 305 (BTN_EAST) Event code 307 (BTN_NORTH) Event code 308 (BTN_WEST) Event code 310 (BTN_TL) Event code 311 (BTN_TR) Event code 312 (BTN_TL2) Event code 313 (BTN_TR2) Event code 314 (BTN_SELECT) Event code 315 (BTN_START) Event code 316 (BTN_MODE) Event code 317 (BTN_THUMBL) Event code 318 (BTN_THUMBR) Event code 704 (BTN_TRIGGER_HAPPY1) Event code 705 (BTN_TRIGGER_HAPPY2) Event code 706 (BTN_TRIGGER_HAPPY3) Event code 707 (BTN_TRIGGER_HAPPY4) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value -2155 Min -32768 Max 32767 Fuzz 16 Flat 128 Event code 1 (ABS_Y) Value 1652 Min -32768 Max 32767 Fuzz 16 Flat 128 Event code 3 (ABS_RX) Value -3768 Min -32768 Max 32767 Fuzz 16 Flat 128 Event code 4 (ABS_RY) Value -3389 Min -32768 Max 32767 Fuzz 16 Flat 128 Event code 16 (ABS_HAT0X) Value 0 Min -1 Max 1 Event code 17 (ABS_HAT0Y) Value 0 Min -1 Max 1 Event type 21 (EV_FF) Event code 80 (FF_RUMBLE) Event code 81 (FF_PERIODIC) Event code 88 (FF_SQUARE) Event code 89 (FF_TRIANGLE) Event code 90 (FF_SINE) Event code 96 (FF_GAIN) Properties: Testing ... (interrupt to exit) Event: time 1538437117.040101, type 1 (EV_KEY), code 704 (BTN_TRIGGER_HAPPY1), value 1 Event: time 1538437117.040101, type 3 (EV_ABS), code 16 (ABS_HAT0X), value -1 Event: time 1538437117.040101, -------------- EV_SYN ------------ Event: time 1538437117.328099, type 1 (EV_KEY), code 704 (BTN_TRIGGER_HAPPY1), value 0 Event: time 1538437117.328099, type 3 (EV_ABS), code 16 (ABS_HAT0X), value 0 Event: time 1538437117.328099, -------------- EV_SYN ------------
-
@riverstorm said in Guide: Advanced Controller Mappings:
Breaking it down the first step is to get the right number of instances loaded in the rc.local, second create the runcommand-start and also I think I'll need a runcommand-exit?
If you just want to 4-way restrict in certain software, with certain ROMs, you can ignore doing anything to
rc.local
. For example, I use my plain vanilla controller to play most games, but I use the onstart/onend scripts to launch mappings only for the games I wish.if I wanted to cover both wireless dongles I would need to load 8 instances in the rc.local file since each dongle shows a different by-id for the 4 controllers?
I'm a little uncertain as to why your controllers are producing two events each. Are you using a driver such as xpad? It could be that there's the original event and then another created by xpad. That's actually how xboxdrv does things, so it would make sense.
Also would I add all 8 controllers to the code runcommand-start? In the example below it loads one? Would I need to repeat the --evdev command and controller parameter lines below 8 times between the if/fi? Or would I need to get into something like section 3B - Expanding Launch Capabilities? I am not sure if that makes sense.
You can use either. I just use if/fi. There, the basic logic is that if the criteria is met, then commands are performed. In this case, one instance of xboxdrv is a command. For four controllers, you would say that if the criteria is met, four xboxdrv commands are performed. Those commands begin with
sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv
and end with the final--
argument, at which point you would either list another xboxdrv command below it, or end the if/fi withfi &
.Lastly is there a list someplace already to match all 4-way games in mame2003?
The list I posted above is as close as you're likely to find. From what I remember when looking myself, the available lists tend to only note parent ROMs. Mine is based off those findings, but I've added the clones that I find important, like
pacman.zip
for example.
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.