github Dinir/mini-padder 5.0.0
Attempt to Fix Default MegaPad Layout

latest releases: 5.4.3, 5.4.2, 5.4.1...
2 years ago

This update brings a change to MegaPad skin after I actually learned about the terrible present that is all the differences between two modern sega gamepads: Retro-Bit ones and 8BitDo's M30. It was so exhausting to realize the truth so I am gonna share what I could find in the journey below. I'll put changelog right below because the journey was quite long.


  • replaced MegaPad skin variations 6990b59 95b4e3a
    removed button label variations, and added mapping variations
    This may render any custom mappings of the mentioned gamepads on XInput not working properly on MegaPad skins,
    so if you have one you need to remap them on Mini Padder.
  • removed some skins from the default skin list residing inside GamepadRenderer a73f3c5
    Disc D-pad, MegaPad, HBox
  • update message now can show bold texts and links f820252

Realization

The existing MegaPad skin didn't really match the mapping of either of the two gamepads, so I think anyone who's using the gamepad had to remap before using this skin. It was weird, the skin's layout was based on M30's DInput mapping, at least it should've worked on M30.

I was wrong. Even the M30's mapping was different if it's connected on XInput.

No Info Available

Retro-Bit

Retro-Bit manuals can be found on their support site. There are total of 14 manuals for each of the available models, divided by the region, the connection method, the existence of the shoulder buttons. That's after excluding 'Wireless Receiver' ones.

rb-instruction-manuals

Aside that their manuals are not even in the same format, it was frustrating to find out parts of the available information there seemingly related were actually all irrelevant, to this case where I am trying to find mapping for the gamepad API of Javascript. The 'numbers' for each buttons for DInput are not the numbers the browser will show, and even that was not available on all of the manuals. XInput mapping was all shown as Xbox controller button labels, which was really unhelpful because there are so many controllers that support XInput while having completely different mapping from the standard mapping. Mainly 8BitDo ones, but that's on later.

rb-genesis-manual-tables

None of the numbers you can see above are relevant to my case, and none of the non-numbers are useful for the obvious reason. What you can grab is button indexes.

8BitDo

This looked easy to find the working mapping at first because the "information" was available right there on their FAQ page for M30.

8bitdo-support-page

Such a simple explanation, very easy to consume. But gamepads often support at least two methods: XInput and DInput, 8BitDo's cases usually much more than that. How can they end up writing such simple info on the FAQ page? I should've doubted this obvious thing when I saw it first.

It turned out their manual shows yet different mapping.

8bitdo-manual

Even worse, the good feature of their products that is firmware update support, apparently sometimes updates the mapping of the gamepads as well. Terribly, they don't list that on their changelog, and the latest issue I can find on the internet was this 2-year-old archived reddit post.

m30-firmware-log

8BitDo always had rather erratic layout when it comes to XInput mapping of their gamepads. I had the most gamepads of this manufacturers, but I know this little more of experiences will not earn me any useful general knowledge as I can't be sure about anything on their gamepads they released and will in the future.

General

As all their official materials are not helpful for Mini Padder which uses the gamepad API on Javascript, the only way I have left is googling. But it's 2021, websites have to prepare a message to ask their visitors to enable Javascript when they find their browser is blocking it. Googling was impossible for various reasons. Even if you get few search results, most of them are suspicious pages that redirect you to somewhere only to immediately close themselves.

I have put a star on the repository that collects all the found gamepad mapping for SDL2 Game Controller. It's obviously something else, and I really wish such thing also exists for Javascript Gamepad API. This is a bit unrelated, but the website I often ask any users to use to see the mapping decided to put their dataset on sale some times ago. The dataset is not the perfect one that has everything I need, but it was the only one of the kind I could easily find on the internet.

Anyway, I decided that it's impossible to gather any necessary info on the gamepads. Unless I find someone who's willing to help me. This definitely happens really scarcely, though.

The Mappings (I Guess)

Based on one friend I could bother asking (thank you CaptainGordon again), I could find out how Retro-Bit's sega pad is mapped. For it's Saturn USB varient. When I asked him to find the mappings, he told me that this gamepad doesn't work properly on DInput. Shoulder buttons and button combinations were not detected. So based on the only information I can acquire, I decided to forget about making mappings for sega pads and instead make copies of MegaPad skins that maps each button sprites differently, on their expected default mapping on XInput.

This is the mapping of the original MegaPad, if used on a standard XInput controller. Which is deprecated as of now.

megapad-standard-xinput-x2

This is the mapping of Retro-Bit Saturn pads and Megadrive pads, USB ones. Look how they manage to differ completely while all being made by the same manufacturers. I can't stop wondering if the Triggers and Bumpers difference was really necessary.

megapad-rbsaturn-xinput-x2 megapad-rbmegadrive-xinput-x2

This is 8BitDo M30's mapping, "according" to their manual. One user I recently found told me how they were mapped, and that was again different to the manual. I decided to give up and follow the manual blindly. The mapping is also really different if connected as DInput, but it will take another ages for me to find someone who uses M30 on DInput.

megapad-m30-xinput-x2

Since DInput support looks impossible, and there's no way to tell different controllers if they're connected on XInput, I decided to just remove the MegaPad variations that has XInput and DInput button labels. If you want it back, you have to download it from past versions of the repository and manually arrange buttons.


This was exhausting. Especially because I am something of a Sega fanboy, only to find out the most popular choices of sega gamepad products had to be this different on things like button mappings.

Dividing MegaPad skin into layout variations was my best attempt to make this easier to deal with, but that will definitely look confusing to new users as they are all visually identical. This was exhausting.

Don't miss a new mini-padder release

NewReleases is sending notifications on new releases.