UI: Controller Type Requires Re-Selection to Apply
Platform / OS / Hardware: DC / Linux arm32 / Rockchip RK3328 SBC
Flycast version: v2.5 Standalone
Description of the Issue
After setting controller to Lightgun and exiting Flycast, when re-entering Flycast the crosshair has no response. I need to open the menu, re-select the controller type as Lightgun, even though it is already showing Lightgun as the current type. After that it behaves as expected.
I'm using a regular USB mouse, and the SDL driver (showing as SDL Default Mouse). Tried on House of The Dead 2 DC version.
I can't reproduce this issue using the same game. Are you loading a savestate?
Ahh yes I was loading a savestate.
To clarify, when I said "crosshair has no response", it was not entirely true:
The crosshair (drawn by Flycast) did move. But the in-game crosshair did not move.
Just tested again. Without loading a savestate, it works correctly.
So the bug appears to be when after loading a savestate, UI shows Lightgun but it was not actually in effect, until being manually re-selected.
The reason is that the Dreamcast controllers configuration is included in save states, but the UI doesn't show the current configuration after loading it. If you manually change the configuration at this point, then the game is notified and the UI and game are in sync.
This is done so that the controller configuration stays the same regardless of loaded states, even though it can be confusing as in this case.
Thanks. That makes perfect sense now.
This still feels like a bug though.
Ideally the savestate should only contain game state and not the emulator state. But I understand there might be technical reasons why that is hard to do.
In that case, I think the UI should reflect the current actual controller setting. As even the configuration stays the same, I still need to reapply it, so it doesn't really save any effort from the user. And it causes so much confusion. I was going back and forth for two days trying to figure out why the SDL driver doesn't work for the mouse.
Or perhaps, the code could go through each configuration and compare with the current in-memory configuration, and sync them automatically?