RPCS3 / rpcs3

PlayStation 3 emulator and debugger
https://rpcs3.net/
GNU General Public License v2.0
15.43k stars 1.92k forks source link

[Feature request] Port and game agnostic gamepad profile system #14577

Open carlmylo opened 1 year ago

carlmylo commented 1 year ago

Quick summary

Hello.

I think allowing the Gamepad Configuration profile system to work on a per port and per game basis would greatly improve the user experience, especially for rhythm games.

Details

Rhythm games such as Rock Band and Guitar Hero support multiple controllers and controller types simultaneously due to their design. This can become hectic when setting up gamepad configurations due to the possibility of different handlers and device classes, such as having an XInput Guitar Hero guitar controller, MMJoystick Rock Band drum controller, and an MMJoystick Rock Band guitar controller, especially if the user is swapping controllers in and out.

As of now, creating and loading a profile only works globally and sets all ports. So, if a user is trying to recall a profile in Port 1 while having something already bound in Ports 2 through 7, it will more than likely wipe the other ports if they saved the profile while mapping it in port 1. Not to mention, this will affect every other game, which can cause problems for users trying to use the profile system globally for instrument controllers, then having to manually correct this for all of the non-rhythm games in their library.

I think a better design would be to have profiles saving only affect the port they're being configured on as opposed to all seven and allowing them to work in the per-game Custom Gamepad Configuration.

Megamouse commented 1 year ago

You can already configure your pads on a per game basis...

The idea behind the profiles was that you create them once, for example one profile for your GH guitars, and then just use that profile for all your Guitar hero games.

It's not supposed to work per port. That's how it was before, and no one liked it...

jnackmclain commented 1 year ago

I must comment to give my two cents that doing ALL ports per profile is very unintuitive and frustrating when juggling different devices and setups.

@Megamouse I do not see any reason for a profile selected in the player 1 tab to apply to players 2+ That is very unintuitive and causes complications when juggling devices, even outside of instruments

I am 100% for this feature request it will benefit different setups greatly, including non GH RB games.

Scenario: Say im playing coop with someone and they decide to switch controllers from DS4 to a 360 controller. I have a profile already setup for a 360 controller. With the current setup I will have to manually go remap the second controller from scratch for player 2 to NOT interfere with my already mapped Player 1 config.

However if profiles were per port, I can simply click player 2, and choose my 360 profile, and everything is fine.

jnackmclain commented 1 year ago

Additionally, while some players may want global profiles to affect all controllers for themselves, making this the forced behaviour for everyone removes any of that flexibility.

I cannot create controller mapping for all the controllers I have in its current setup, where if it is per port, that will simply require those users to select the controller tabs one by one to set the profile, which is MUCH simpler of an ask from the user than "Remap all of your controls since they were wiped while switching profiles"

carlmylo commented 1 year ago

You can already configure your pads on a per game basis...

Oh, sorry. I meant to highlight that one can't use the profile system in the per-game settings as it is greyed out.

The idea behind the profiles was that you create them once, for example one profile for your GH guitars, and then just use that profile for all your Guitar hero games.

This works fine if the user has controllers all of the games support, but I think this can lead to issues if the user has a mixed library of games with differing controllers for each. Albeit it can be remedied by swapping the global profile, I think this isn't as user friendly as one has to either correct all of their non-rhythm games' per-game game configuration or the inverse for rhythm games.

It's not supposed to work per port. That's how it was before, and no one liked it...

This is surprising as I think every other emulator with a gamepad profile system functions the proposed way and users tend to not complain.

jnackmclain commented 1 year ago

Sorry I am re reading the post and response and found one more thing

for example one profile for your GH guitars, and then just use that profile for all your Guitar hero games.

Problem here is the GH and RB games have different instrument and device support. In Rock Band 1 and 2, I cant use keys or pro guitars In Rock Band 3 I can In Guitar Hero games, I cant use keys or pro guitars In Rock Band I would use the Rock Band Pro Drums controller type, but in GH, the GH drums type So i would, in the current system, need a global profile for all controllers per game

However, what if i want to change up the guitar i want to use in player 3 in rock band 3, but everything else is the same or if I want to remove the keys player and sub in a second vocal player on a standard controller or if I want to swap out the gh5 guitar with a rb strat

All of these are completely normal use cases when playing these games and a global profile that affects all ports gets extremely burdensome to try and track in any useable manner

This leaves me with no choice but to bite the bullet and remap the instruments time and time again.

Which is extra frustrating as these instruments are harder to map than standard controllers with their specifics, including even needing to manually edit the config yml in several cases.

The only benefit I see to mapping all ports at once per profile is a small time save for a 4 player game with standard controllers.

Megamouse commented 1 year ago

I think there is a misconception about what a pad profile in rpcs3 actually is. You think a pad profile is some sort of preset for one controller. But pad profiles are in fact just config files that you can toggle. That's why they can't be selected in the custom pad configuration, because you might accidentaly change your global config.

Megamouse commented 1 year ago

If it would help, I could add a button that lets you apply another "profile" to your current one, without overwriting the other.

jnackmclain commented 1 year ago

I understand that a pad profile is a config file that loads the configuration for multiple controllers based on the config file.

My point is that isnt a pad profile at all, considering it affects multiple pads.

A pad profile would handle one pad, one port, which is honestly how it should be and how every other emulator handles pad profiles.

It is odd to me that you have protections in place to stop a user accidentally changing their global config, but dont stop a user from accidentally wiping a configured layout for up to 8 controllers.

jnackmclain commented 1 year ago

@Megamouse I would like to know your thoughts from a user standpoint on my scenarios I listed above

Say I have a 4 player local band session. Player 1 is a 360 xplorer players 2 3 and 4 are guitars and drums, lets just focus on player 1. But keep in mind, this is applicable and reasonable for every player.

Player 1 mid session, decides "hey, I would like to change guitars to the wii Les Paul"

The way I understand, and how you are describing, I have two options.

Have a global config profile that is Xplorer, guitar, drums, guitar and another Wii Les Paul, guitar, drums, guitar.

OR

manually, mid session, remap my player 1 xplorer, to be the wii strat, which will lose my xplorer config.

with the pad profile system affecting all ports at once, my options for switching devices are extremely limited and make things much more of a hassle than it needs to be.

And I do not understand the logic or reasoning of why the multiple pad system must be stuck with considering this pretty simple scenario that can happen in many, many variations.

Megamouse commented 1 year ago

There is no reasoning behind any of this. The old system was garbage and the new system should probably simply be renamed to "Config" instead of "Profile". It's just what I implemented when I had time. And there was never much feedback for any of this.

jnackmclain commented 1 year ago

That's completely fair and apologies if I seem a little hot headed about this. This has been a very big thorn in my, and several other's side for a long time and I think this is the perfect first step to discuss the feedback on the newer system.

I would implore further thought about this and potential solutions because as it stands right now it is a very frustrating challenge when dealing with multiple players over multiple controllers and device types.

LocalH commented 1 year ago

I would suggest having controller mapping be "agnostic" to ports. Let's say you have a regular gamepad, two Xplorers, one PS3 Les Paul, and one Xbox RB Stratocaster. How about being able to map each of them as a "controller". That controller is a self-contained unit and doesn't store any information on which controller slot it goes in. You do this for each of your physical controllers, so you would have two Xplorer "controllers" in this scenario. Then, in the "profile" sections as it's called now, you can either manually map a controller as it is now, or you can choose one of the pre-mapped controllers to connect to the desired slot. By design, nothing you do in this proposed updated profile UI would ever delete or remove an existing controller mapping that's defined and saved as a controller.