-
Notifications
You must be signed in to change notification settings - Fork 584
Inconsistent button mapping of 6 button controllers across different emulators #4414
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Fundamentally the issue is from how RetroArch has assigned the default controls for Sega Megadrive/Genesis. Since they use the Retropad (which is similar to a PS2 controller) they have prioritised that form-factor, and thus have the three "main" action buttons of the Sega controller on the three face buttons of the Retropad (West, South and East). There is also another problem in that 6-button arcade games by default don't use the layout you're suggesting, instead going in the order of South, East, West, North, L then R (meaning, weak punch on South, weak kick on North, strong punch on West, etc.) The issue you've encountered runs much deeper than just remapping a controller, it's fundamentally an issue with Retropad and how it's missing buttons for 6-button systems. Also, needless to say, if the default remapping configuration for the Retropad is changed for just the Sega/6-button games and systems, they will no longer make sense on regular X-input controllers like Xbox/PlayStation pads. I've written this guide on how to remap controls for particular emulators without interfering with other systems: https://wiki.batocera.org/remapping_controls_per_emulator but obviously this isn't the optimal solution. |
Not sure why this was closed, nothing was done to address the issue afaik. Granted, it's not really an issue but just a request to change the default mappings. |
|
so remapping the button doesn't solve this @tomillr |
@dmanlfc Well yeah, that's the point. The Sega Saturn and the Sega Mega Drive does, despite having the same controller, use different layouts by default. So if you play one Mega Drive game, you have one layout, and if you then play a Saturn game, you have a different layout. A part of Batocera is to not have to force the user to manually configure their emulators to have them work correctly, I believe this falls under that. And in regards to Github etiquette, a reason for closing an issue should be provided before actually closing it. The closing of unresolved issues should also be done trepidately, as you are disregarding your most valuable resource here (the bazaar philosophy). |
@dmanlfc I'm not talking about the button mapping you can do inside the ES interface. Rather the SEGA core inside of Retroarch currently all use different button layouts. You'd have to manually edit the button layouts for each SEGA core individually to get a consistent experience. I'm suggesting that the SEGA retroarch cores that are used by Batocera should all be set to command button layout. Let's say you map the
@Hew-ux is right. You'd be asking Batocera users to a. know how to change button mappings for individual cores and b. figure out the proper button mapping for each of the individual Sega cores. In my view that's to much to ask for the average user and goes against the "ease of use" Batocera is going for. EDIT: Just to provide some additional user feedback, I'd like to quote a user comment from the Batocera forum: |
@dmanlfc Let me try to explain the issue a bit more clearly by using a concrete example: 1. The beauty of the Genesis and Saturn 6-button-controllers is how perfectly the button layout matches to fighting games. When a Batocera user picks up a dedicated 6-button-controller from 8bitdo or Retrobit to use with any of the provided Sega emulators, there's the expectation that the button layout on the controller works just like it did on the original hardware. For Street Fighter 2, the controller layout is expected to be like this diagram taken from the official manual of the game: The lower button row A, B, C is for the different kicks in order of light, medium to hard. The upper row X, Y, Z corresponds to the punches in similar fashion. That's how the buttons should work for every Sega emulator in Batocera - except it doesn't! 2. When a user connects a 6-button-controller to Batocera, one can use the option in the Emulation Station interface to map the physical buttons to the virtual RetroPad of the libretro API. For best compatibility with different systems, one would properly use a diamond-shaped button mapping similar to this: This is all pretty straightforward. 3.1 However, the different SEGA libretro cores themselves all use different button layout internally. For example, if one sets up the button mapping in Batocera like shown in 2. above and tries to run Street Fighter using the genesisplusgx or PicoDrive core, the button layout in the game is actually going to be like this: See how the orange buttons all don't match up to the expected target shown in 1.? Punches and kicks are no longer separated across the two button rows and the light, medium and hard versions are all scrambled up. 3.2 Switch over to a Sega Saturn core like Beetle or Kronos, and we get yet a different mapping: The orange buttons are different from the target in 1. and additionally the blue buttons are different from the mappings in 3.1 4. This basically means, to get 6-button-controllers to work consistently across Genesis and Saturn emulators in Batocera, users have to dig deep into the RetroArch interface and manually remap the controller mappings for each individual core. If you just change the button mappings in the ES menu to, say, match the mappings expected by PicoDrive/genesisplusgx (shown as orange in 3.1), this in turn breaks the proper button mapping for Saturn games because of the different button mappings those cores use (the blue changes shown in 3.2). I know this is hard to wrap your head around, but I still hope this post can help to clear things up a bit. If you want to try it yourself, just grab a 6-button-controller and try to play Street Fighter II both in a Genesis and Saturn version. |
custom button mapping for a pad between a system or a game is one feature i have in head |
telling user to make custom mapping is just a workaround to the fundamental problem. Although that would be nice to have, please don't consider that as a solution to the problem. |
telling the user is one way. |
Wouldn't it be possible to just ship those core specific remapping with Baterocera in the first place? Basically provide the custom mapping from the start so that the user doesn't have to do it? EDIT: Also, should this ticket be re-opend as the issue hasn't really been fixed? |
I’ve got an OEM Sega 6-button controller for my Genesis that I’ve modded to be wireless (8BitDo M30 Modkit) I agree with others, the reason I love Batocera is it abstracts so many details behind RetroArch - it leaves it to the developers to figure out the most elegant solution to a problem by working under the hood and limiting what the user needs to see. I look forward to the day I can boot Street Fighter II’: Special Champion Edition and the buttons are just mapped correctly and just play! This is the magic of Batocera and the magic we should be preserving 🪄 I, too, was wondering why remap files aren’t included but I’m guessing it’s a challenging problem given the number of controllers out there ( That said, perhaps this a community effort - a utility is provided for those who have 6 button controllers and Batocera 6-button cfg files are crowdsourced and included as part of the release. I’m happy to be the first to add my M30 Modkit! or maybe it just takes some ingenuity to auto-create the remap files just like we automate the generation of emulator config files. or perhaps it’s an opportunity to collaborate more closely w the RetroArch crew and create something more streamlined. I dunno - just tossing ideas out there! I’m in @tomillr’s boat - I feel this issue should be reopened even if it needs to be shelved farther down the line. Thanks @Hew-ux for creating a guide - I’ll dive into it and see if I can create a remap file that persists for the megadrive! |
I was able to successfully create game-specific remaps for both the SNES and megadrive versions of SFII (yeay!). It was a bit of a mental exercise but I got it to work. Because I am pairing two different kinds of controllers: an 8BitDo Lite and Sega 6 button controller (M30 Modkit), I noticed that retroarch makes no reference to what type of controller you are using for p1 and/or p2 in its remap files. Therefore, it was necessary for me to create two remap files depending on whether I am in “Sega” mode with my 6-button controller on p1 or in just regular ole “RetroArch” mode which is more native to my 8BitDo 4-button controller on p1. Having to swap these .rmp files in Because Batocera (via ES) is aware of what type of controllers are connected to p1 and p2, it is able to auto-generate the correct remap file for a given game. For this reason, I vote to reopen this issue and work towards implementing this. I would like to hear from the developers what the other challenges are. I feel like if this were the first milestone (to handle swapping a pair of 4 and 6-button controllers on p1 and p2), this is a good start. and just for the record, I did try to create remaps for fbneo for the arcade version of SFII and happened to stumble into a possible controller mapping bug in v39 that is reproducible in a fresh install. |
I agree this is still a problem, and this controller layout (including all Megadrive/Saturn type layouts) is one of the best for fighting games ever. In the MAME core, this is done well. There is support for the megadrive layout for Killer Instrinct, Capcom fighters, and Mortal Kombat games. This type of functionality needs to be supported in retroarch/libretro cores too via the emulationstation advanced game/system option. Maybe a new layout type is needed in retroarch itself as well. One issue I have is when I look at the controller button labels in the retroarch UI, they're all messed up. |
Button mapping for 6 button controllers for Sega Mega Drive and Sega Saturn emulation is not handles properly in Batocera. It does not observe the basic diamond shape (north/south/east/west) button layout assumed by EmulationStation. To assure maximum compatibility across different emulators, the default buttons mapping assumed by Batocera should look like this:
Background explanation:
There currently is no right way to assign the buttons of a 6 button controller like the 8BitDo M30 or Retrobit Genesis and Saturn controller so that they work across different Sega emulator:
Once you've assigned the buttons through the EmulationStation interface to properly work with the default Sega Saturn emulator, it no longer properly works with the default SEGA Mega Drive emulator.
If you go and change the button mapping to work with the Sega Genesis emulator, it in turn no longer works with the Saturn emulator. Not to mention, completely breaking support for a Super Nintendo emulator.
The default Genesis emulator (genesisplusgx) currently required the following button mapping:
As you can see, this layout doesn't respect the usual north/south/east/west button alignment assumed by EmulationStation.
Which makes the controller pretty much useless for any other emulator. Imagine to try and play the Super Nintendo version of Street Fighter 2 with that mapping. It would look like this:
With the button layout proposed above, the 6 button controller would work better across different emulator.
The text was updated successfully, but these errors were encountered: