libretro / parallel-n64

Optimized/rewritten Nintendo 64 emulator made specifically for Libretro. Originally based on Mupen64 Plus.
327 stars 128 forks source link

Input mapping issue- cannot map individual buttons to C buttons #299

Closed mitchellcairns closed 7 years ago

mitchellcairns commented 8 years ago

As is, there are two options for mapping C buttons.

  1. C buttons are mapped to analog
  2. C buttons are mapped to face buttons, but require a toggle button to be held to become functional.

This is poor design choice as it assumes that the user only has a controller with two face buttons aside from a D-Pad. For example, I own an N64 USB pad replica... I cannot map the C buttons to be C buttons because of the current method of configuration.

An example configuration is to map the Retropad A and X buttons to C up and C down respectively... this is especially useful for games like Super Smash Bros which requires the jump button to be next to the other two buttons- this is how it would naturally be on the real gamepad and games are designed in this fashion. Simultaneously, I have the C left and C right mapped to the right joystick of my controller. There shouldn't be any issue in this.

Please, developers, allow for individual mapping of the C buttons, it will make the input less of a headache for everyone. It would be beneficial to include the toggle method for users with the less-than-optimal number of buttons, but for most people we will probably want to be able to map individual C buttons to other areas of the controller for maximum compatibility with more games.

Thank you for your work in making a wonderful N64 emulator and I hope this can improve it!

superjamie commented 8 years ago

This is working fine for me. My N64-to-USB adaptor maps the C directions to numbered input buttons. I can assign the buttons to the C directions in RetroArch. I'm using RetroArch 1.3.0 from the official Ubuntu PPA.

M3TALHEAD commented 8 years ago

I agree that the Mupen64Plus core button mapping is not functional for PS3 / PS4 style game pads. Every N64 emulator I have used lets you map the C buttons as a button, and shouldn't be bound to an axis only such as the right stick.

Please let us bind the C buttons for N64 cores to a physical button!

Also, the names for the binds are incorrect as "A" and "C-Left" display as the same button in the core input configuration menu, when in fact they should be separate buttons. Other emulators separate these buttons correctly but there is no option currently with RetroArch 1.3.3 and Mupen64Plus 2.0 rc2

superjamie commented 8 years ago

I think I understand what the problem is here.

The RetroArch menu has Input configuration for a SNES-style controller with Analog sticks, meaning it asks you what ABXY are in SNES layout, and what analog sticks are in PlayStation layout.

Once you have a controller configured, RetroArch maps those PS3-style configurations to the weirdo N64 controller layout. The best example I can find is this image:

Source: https://github.com/retropie/retropie-setup/wiki/Nintendo-64

So you can see whatever is configured as the "Right Analog" stick in RetroArch becomes the C-buttons when using the libretro-mupen64plus core.

However, here is the key point: You don't need to configure an analog axis as the "Right Analog Stick" in the RetroArch menu. You can configure buttons!

This is working fine for me with an N64-to-USB adaptor. I configure the C-buttons as the Right Analog Stick in the RetroArch menu. When I get into a game, the C-buttons on my controller behave just like the C-buttons do with the cartridge in the console.

If this isn't working for you, then it might be helpful to the devs if you explain exactly what controller you're using, what you're doing to configure it, what result you expect, and what result you actually get.

M3TALHEAD commented 8 years ago

Sounds great but unbinding my retropads thumb would ruin other cores and games. I want the right analog to be mapped in my retro pad as the right analog stick with other games like shooters. (007 and perfect dark for n64) I want to be able to enable buttons on my ps4 controller to cbuttons as game specific in the Mupen64Plus core NOT RetroArchs RetroPad. This is happening on Mupen64Plus for all of my controllers, PS3, PS4 and Logitech f310 which are all standard pads. I would love to pass this along to the dev team to allow input options for the Mupen64Plus core cbuttons to be bindable to buttons and not the right thumb stick X or Y axis.

Here are a few suggestions to the dev team that would clear up tons of requests from the forums on this topic:

  1. Mupen64Plus input options should NOT combine C buttons with A B X or Y buttons, right now A and B are combined in the core input options.
  2. Mupen64Plus input options should allow mapping of C-up, C-down, C-right and C-left to any retropad button (specifically X and A) along with a Cbutton axis. Cbuttons are not axis always buttons, they are used for many other things across N64 games.

​AS you can see, B and A are combined with C-Down and C-Right, they should not be. Binding any button to C-Up is not working on any of my gamepads or arcade sticks when right thumb stick is bound to anything.

Thank you for hearing me out, let me know if I can help out any further. I LOVE RetroArch and want my favorite core for N64 working.

On Mon, Apr 25, 2016 at 9:50 PM, Jamie Bainbridge notifications@github.com wrote:

I think I understand what the problem is here.

The RetroArch menu has Input configuration for a SNES-style controller with Analog sticks, meaning it asks you what ABXY are in SNES layout, and what analog sticks are in PlayStation layout.

Once you have a controller configured, RetroArch maps those PS3-style configurations to the weirdo N64 controller layout. The best example I can find is this image:

https://cloud.githubusercontent.com/assets/10035308/7334793/6b406d8c-eb5b-11e4-8474-56a340521e71.png

Source: https://github.com/retropie/retropie-setup/wiki/Nintendo-64

So you can see whatever is configured as the "Right Analog" stick in RetroArch becomes the C-buttons when using the libretro-mupen64plus core.

However, here is the key point: You don't need to configure an analog axis as the "Right Analog Stick" in the RetroArch menu. You can configure buttons!

This is working fine for me with an N64-to-USB adaptor. I configure the C-buttons as the Right Analog Stick in the RetroArch menu. When I get into a game, the C-buttons on my controller behave just like the C-buttons do with the cartridge in the console.

If this isn't working for you, then it might be helpful to the devs if you explain exactly what controller you're using, what you're doing to configure it, what result you expect, and what result you actually get.

— You are receiving this because you commented. Reply to this email directly or view it on GitHub https://github.com/libretro/mupen64plus-libretro/issues/299#issuecomment-214615677

Tony Yengo yengoman@hotmail.com

mitchellcairns commented 8 years ago

I thoroughly agree with @M3TALHEAD

In some games (Namely Super Smash Bros) I'd like to map buttons separate from the right analog stick to either of the C buttons. We shouldn't be required to map buttons to the right axis outside of the Mupen core... that defeats the purpose of having core-controller configurations on a per-game basis. The goal is to allow the Retropad configuration to remain the same, let the user set up the controls on a per-emulator basis so they don't have to keep going back and forth to change the button bindings.

Allowing us to map the C buttons individually of the A/B buttons AND the analog will give the user more satisfaction. This is basically a must-have for N64 emulation with a non-N64 pad.

Basically the issue lies in the fact that most gamepads are NOT N64 pads. They won't have a dedicated set of C-Buttons that also double as an axis, therefore they can't be bound to the C buttons individually.

Another great example is Banjo-Kazooie. My usual gameplay style is like so... (assume I'm using a PS3 controller)...

Cross is A Square is B Circle is C-Down Triangle is C-Up

Right analog stick functions ONLY for C-Left and C-Right. In the craziness that is Banjo-Kazooie platforming, having such a smooth analog stick can cause these buttons to get mixed up when they shouldn't. The C-Up and C-Down buttons are used to perform critical moves while the C-Left and C-Right are only camera controls. You'll be aiming at an enemy and then... CRAP, you moved the camera.

Basically the bindings exist like this right now

A (C button down when toggle is held) B (C button left when toggle is held) Toggle C-buttons (toggling C buttons disables A/B buttons) C button right (Doesn't function unless toggle is pressed) C button up (Doesn't function unless toggle is pressed) C button axis (always functions Analog axis

The issue presented is that this only works for gamepads that are SNES-style and doesn't allow for any other freedom.

I put forward the following solution which would allow for both SNES-style gamepads AND PS3-type gamepads to work

Standard buttons


A Button B Button C-up C-down C-left C-right L R Z Dpadup Dpaddown Dpadleft Dpadright Start C-toggle key

NOTE: C buttons can be bound to the same buttons as the A/B/ANY other button or they can be bound to individual axis directions, how they behave will be defined with the preceding settings.

C-button Toggle Mode


OFF or SWITCH or HOLD

OFF - No C-button toggle behavior is shown SWITCH - pressing the defined toggle trigger acts like a light switch. One press for on, one for off. HOLD - requires the toggle trigger to be held for C buttons to be active.

This section will let users pick which C buttons should become dominant upon pressing the defined 'toggle' trigger (if there is one set). This means that if a C-button with the toggle 'on' in this section will become dominant over any other keybind that co-exists in its place. This can allow for even more options on an SNES pad... You could have the A/B buttons consistently free, and say... swap out C-up and C-down for C-left and C-right with the press of a trigger button. If the switch for a C-button in this section is 'off', it will behave like a normal button.


C-up - Toggle mode on/off C-down - Toggle mode on/off C-left - Toggle mode on/off C-right - Toggle mode on/off

That logic should be pretty sound and adaptable for most controller situations. It works in a way that won't conflict with keybindings in the Retroarch menu. If Retroarch is meant to be a means of playing many retro games with one emulator without having to reconfigure every time you launch, this is probably the best way to go.

dankcushions commented 8 years ago

However, here is the key point: You don't need to configure an analog axis as the "Right Analog Stick" in the RetroArch menu. You can configure buttons!

and then:

Sounds great but unbinding my retropads thumb would ruin other cores and games. I want the right analog to be mapped in my retro pad as the right analog stick with other games like shooters. (007 and perfect dark for n64) I want to be able to enable buttons on my ps4 controller to cbuttons as game specific in the Mupen64Plus core NOT RetroArchs RetroPad.

you can set up individual configs for cores/games. there you go, problem solved!

also, as a general point, can everyone stop posting the same information in various issues, and also new ones? this is a volunteer project and spamming everyone's emails with the same information is not the way to get the 'developers' (who could be you and i as we can ALL participate) to help.

M3TALHEAD commented 8 years ago

We are not trying to be a pain, we are trying to help make an already amazing project even better! The Mupen64Plus input options do not match RetroPad options or the Mupen64 emulator. There seems to be a button mapping conflict between RetroArch and the Mupen64Plus core. Once you load the Mupen64Plus core, a few buttons get moved around because Mupen64 is overriding RetroPad by default. Setting up a "per core" input config in RetroArch still does not work because the Mupen64Plus core bindings force incorrect binding overrides and limits. Trying to fix the incorrect bindings leave a few buttons unusable like RetroPads X (Mupen64Plus C-Up) This issue lies with RetroArch and Mupen64Plus core since the actual Mupen64 emulator does not have this issue and works great. (They use "N-Rage's Direct-Input8 v2 1.82a") Here is exactly what is wrong or needs to be corrected:

RetroPad B gets incorrectly mapped to Mupen64Plus A RetroPad Y gets incorrectly mapped to Mupen64Plus B Mupen64Plus B button is combined with C-Down, they should be separate buttons Mupen64Plus A button is combined with C-Right, they should be* separate* buttons Allow us to unbind buttons in RetroArch and/or the Mupen64Plus core input options (allow nul as an option in the UI) Mupen64Plus should allow binding of any RetroPad button for the right analog stick or C buttons

We cannot use RetroPad A or X buttons at all when we fix these bindings in Mupen or RetroArch. Once we load the Mupen core, RetroPad button X becomes unbindable/unusable, (my guess is it is something to do with combining C buttons) and these button configurations do not match an actual N64 controller. The N64 controller has 6 total buttons for the right thumb. B, A, C-Left, C-Down, C-Up, C-Right. C-Buttons should not be combined with A and B buttons since they are separate on an N64 controller, and that also does not work with RetroPad controller layouts.

Thank you for your time on this and keep up the great work!

On Tue, Apr 26, 2016 at 1:46 AM, dankcushions notifications@github.com wrote:

However, here is the key point: You don't need to configure an analog axis as the "Right Analog Stick" in the RetroArch menu. You can configure buttons!

and then:

Sounds great but unbinding my retropads thumb would ruin other cores and games. I want the right analog to be mapped in my retro pad as the right analog stick with other games like shooters. (007 and perfect dark for n64) I want to be able to enable buttons on my ps4 controller to cbuttons as game specific in the Mupen64Plus core NOT RetroArchs RetroPad.

you can set up individual configs for cores/games. there you go, problem solved!

also, as a general point, can everyone stop posting the same information in various issues, and also new ones? this is a volunteer project and spamming everyone's emails with the same information is not the way to get the 'developers' (who could be you and i as we can ALL participate) to help.

— You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub https://github.com/libretro/mupen64plus-libretro/issues/299#issuecomment-214670822

Tony Yengo yengoman@hotmail.com

intothisworld commented 8 years ago

I second this request! I'm having a similar problem with linked C-buttons in Ocarina of Time & Majora's Mask. Thanks for the great work, guys!

Rikimaru88 commented 7 years ago

Hi,

Sorry to post in an old thread like this, but I am having an issue mapping the B (attack) button to my android controller (same issue occurs with PS4 controller too) when using mupen64plus on my android box playing Zelda Ocarina of Time.

I am struggling to find anyone else that has the same issue so I'm kind of just hoping someone might have an answer here?

I can literally map every other button and they work as intended, but regardless of what controller button I map B too, it just will not work.

Does anyone have any ideas what I could do?

It's driving me crazy!

joshuaseltzer commented 7 years ago

+1 for a controller layout as mentioned by @M3TALHEAD

OmenBoy commented 7 years ago

I hate to bring up an old topic but this really needs to be addressed. The C-Buttons should be individually mapped to whatever button the user wants.

hizzlekizzle commented 7 years ago

I added a core option a while ago called 'digital c-buttons' or something like that, which allows you to use core input remapping (that is, the 'controls' menu) to move any of the regular buttons--including the c-buttons--around.

Can you try that and let me know if it resolves your issues?

joshuaseltzer commented 7 years ago

@hizzlekizzle sorry for my ignorance, but is that a build option, or a configuration option (or something else entirely)? I'd be willing to give it a shot.

hizzlekizzle commented 7 years ago

When you load the core with some content (make sure it's the latest core from the online updater) and go into the quick menu's 'options' submenu, it should be in there. I believe you need to set it and then 'close content' and then reopen it for it to take effect. After that, you should be able to go into the quick menu's "controls" submenu and move them around wherever you want.

intothisworld commented 7 years ago

On a related note, does anyone know any good gaming controllers that have 6 face buttons on the right side? Most controllers only have the basic 4 and it makes emulating Nintendo 64 games (as well as Sega Saturn and others) unintuitive and annoying.

hizzlekizzle commented 7 years ago

That's a question that's better suited to the forums, as these issue trackers should be used for development only, but I've heard good things about this one: https://www.amazon.com/Buffalo-iBuffalo-USB-Gamepad-BSGP1601BK/dp/B0031UCGLW

OmenBoy commented 7 years ago

Thank you @hizzlekizzle I found it. I was using the old MupenPlus core, but I found the option in the Parallel core :)

OmenBoy commented 7 years ago

@hizzlekizzle everything works except mapping anything to the N64 L button. No matter what the L button always changes the control method from default to alternative.

EDIT: It appears N64's L button is bound to the core's layout switch action, when using the "digital c-buttons" option. So any button L is mapped to also toggles the controller from Default and Alternative, even though the C Buttons mode doesn't use the alternative layout. And the L button shows up as "input_player1_select" and so on, in the controller config file.

Bezier89 commented 7 years ago

@OmenBoy, I actually noticed that bug a little bit ago and it's fixed in my pull request at https://github.com/libretro/parallel-n64/pull/452. Still waiting on it to get merged, though.

Anyway, it's a related but separate issue so I went ahead and opened https://github.com/libretro/parallel-n64/issues/453 to track it.

OmenBoy commented 7 years ago

@Bezier89 Thanks man! Hopefully it will get merged soon, this is the biggest issue holding back the Parallel core. And I agree, alternative layouts should be killed entirely, it doesn't make sense to have the option when we have custom configs, and I don't really think it was a very useful feature to begin with.

hizzlekizzle commented 7 years ago

This should be fixed with PR #452 so I'm going to close this issue, but feel free to reopen it if needed.

nyanpasu64 commented 6 years ago

I'm using a 360 controller. I placed in "Mupen64Plus OpenGL.rmp", copied from "retroarch.cfg",

input_player1_r_x_plus_btn = "h0right"
input_player1_r_x_minus_btn = "h0left"
input_player1_r_y_plus_btn = "h0down"
input_player1_r_y_minus_btn = "h0up"

and loaded the config file. However, my d-pad isn't mapping to the analog stick.

Why is Retroarch so unintuitive, and is core override incapable of mapping the physical controller onto Retropad differently? If so, this bug is not fixed.


I opened the global input menu, and mapped Controller (used to be Retropad a few hours ago before I launched Majora, now it isn't) right stick to D-pad only, and unmapped Controller D-pad entirely. The 360 D-pad no longer makes it to Majora's Mask, and the 360 right analog stick still controls C-buttons (despite not being mapped at all). Is this removed in Parallel?

Is Parallel intended to replace Mupen64+, and will Mupen64+ not be updated?

hizzlekizzle commented 6 years ago

There are no plans for updating Mupen64Plus-libretro, AFAIK.

The remaps can't move a digital input to an analog stick or vice versa, which is what the independent c-buttons option was created for in the first place. If you want to get your C-buttons off of the right analog, turn on that option in quick menu > options and then close content and then reopen it. At that point, you should be able to go into quick menu > controls and move the c-buttons onto whatever digital buttons you want.

nyanpasu64 commented 6 years ago

I'm using Parallel downloaded within retroarch, and see no such setting in Quick/Options. It's very hard to find. Does Retroarch not allow placing it in the Controls tab?

Honestly I think graphics options should have its own tab in the quick menu.

hizzlekizzle commented 6 years ago

I think the only way to get it into the controls menu would be to present it as another controller. That's an interesting idea. I'll workshop it around with the rest of the gang and see if that's something we want to do.

deadperspective commented 6 years ago

I am having similar issues trying to get my retro-bit 8bitdo N64 Bluetooth controllers working with Mupen64Plus on Mac. It is the Dpad that will not map, instead of the C keys. Considering how costly these buggers were, I'm pretty sad that I cannot get them to work properly. But they work in sixtyforce just fine.

felipejask commented 6 years ago

I found a way to unbind c-down to A button and c-right to B button and let the c-buttons working only when the toggle button is pressed on Windows 8.1:

  1. Go to RetroAarch root folder
  2. Enter "autoconfig/xinput/" folder
  3. Open the file "Retrolink_N64_USB.cfg" file in a notepad
  4. Find the "input_r_x_minus_btn" option and delete the number inside the quotation marks on the right side of it
  5. Repeat step 4 on "input_r_y_plus_btn" option
  6. Save the file and run RetroArch.

It worked for me. The game only inputs c-down or c-right when I press the toggle c-buttons button on my PS3 controller (R2).

Also, I'm sending my version of Retrolink_N64_USB.cfg in a zip file if you wish to just replace yours.

I hope I've helped.

Retrolink_N64_USB.zip

KnownAsSonicLoverInAmongUs commented 1 year ago

I need an answer to get c up and c right working correctly while playing on the switch!!!

comment coming from someone knows the c buttons with nintendo 64