libretro / mupen64plus-libretro-nx

Improved mupen64plus libretro core reimplementation
GNU General Public License v2.0
228 stars 114 forks source link

Controller Pak and Rumble Pak switching #59

Closed PlagueWizard closed 3 years ago

PlagueWizard commented 5 years ago

The rumble pak had a large number of supported games, and the controller pak likewise had an extensive list of support, with not insignificant crossover.

Many of the games that supported both allowed you to switch them out as needed, such as San Francisco Rush 2049 and Beetle Adventure Racing, so that you could save your progress but also have rumble enabled during a game.

Mupen standalone has the ability to switch them out via button press, and every game I have tested with it so far works like I remember it working on real hardware.

I understand that exposing core options to be toggleable via a button in RetroArch isn't feasible currently, but it would be nice if, upon a game requesting you to insert a controller/rumble pak, that changing the core option would be recognized by the game consistently, especially since the standalone emulator can do so. Currently it isn't.

As a specific example, Beetle Adventure Racing checks for a controller pak after loading, and allows you to insert one both on real hardware and on standalone Mupen, upon doing so it reads the memory and proceeds as normal. Then, before starting a race, the game has a prompt to insert a rumble pak, and if you do then on real hardware and Mupen standalone you will have rumble in game.

This currently does not work in the RetroArch core or NEXT. I am unsure of how difficult this would be to implement, but I do know that, for comparison's sake the PCE Fast core and Beetle PSX both allow you to change controller settings from the core options menu (enabling turbo for PCE and analog for PSX), and in both cases it immediately works.

AaronBPaden commented 4 years ago

So I've just so happen to have run into this issue for Beetle Adventure Racing on the parallel core. At least in that core, it actually works fine. But you need to switch to none first, unpause the emulator and wait a couple of seconds, and then switch back to memory (or rumble depending on the situation). Unless next does something differently, I think what's happening is the core instantly switches between the two, but obviously this isn't what happens on a real console.

m4xw commented 4 years ago

Would make sense, good comment. (Fwiw i dont reload the option rn, so it wont work as is)

Papermanzero commented 3 years ago

Just out of curiosity : would it be possible to enhance the emulator to support both at the same time? It is not accurate with the real hardware, but in theory the emulator could support “endless” controller interfaces in parallel. The game calls certain request to access either the memory pak or the rumble pak. So building a listener to those request and activate the dedicated pak would be a solution to support both at the same time.

m4xw commented 3 years ago

Fixed locally

m4xw commented 3 years ago

Funnily enough this was already supported but it was just never updated in mupen core

m4xw commented 3 years ago

Just out of curiosity : would it be possible to enhance the emulator to support both at the same time? It is not accurate with the real hardware, but in theory the emulator could support “endless” controller interfaces in parallel. The game calls certain request to access either the memory pak or the rumble pak. So building a listener to those request and activate the dedicated pak would be a solution to support both at the same time.

Maybe with some game patches and lots of hackery

Jj0YzL5nvJ commented 3 years ago

TremorPak?

Not all the games support "hot plugging"... Perfect Dark does, Castlevania no.

m4xw commented 3 years ago

Closing since it will be merged in 2.2 (experimental branch), Scheduled later for today.