aboutsummaryrefslogtreecommitdiff
path: root/src/hid_core/frontend/emulated_controller.cpp
diff options
context:
space:
mode:
authorMaranBr <maranbr@outlook.com>2025-10-17 22:24:38 +0200
committercrueter <crueter@eden-emu.dev>2025-10-17 22:24:38 +0200
commit9c7ed0f59dd41ec0bbbfbc81678209ae60a36016 (patch)
tree61c74b7fd9422b5c3cb9058ba77ce0869661ec38 /src/hid_core/frontend/emulated_controller.cpp
parentde46b8e81753ecb491265b18c55cf883f749b4d3 (diff)
[hid_core] Fix a specific case where all controllers get disconnected by certain games (#2759)
There's a bug in some games where all controllers get disconnected. This fixes those specific cases where controllers set to Handheld or Player 1 need to remain connected. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2759 Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: MaranBr <maranbr@outlook.com> Co-committed-by: MaranBr <maranbr@outlook.com>
Diffstat (limited to 'src/hid_core/frontend/emulated_controller.cpp')
-rw-r--r--src/hid_core/frontend/emulated_controller.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/hid_core/frontend/emulated_controller.cpp b/src/hid_core/frontend/emulated_controller.cpp
index 37a892c37f..604414c470 100644
--- a/src/hid_core/frontend/emulated_controller.cpp
+++ b/src/hid_core/frontend/emulated_controller.cpp
@@ -924,10 +924,20 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
lock.unlock();
- if (!is_connected && !controller_connected[player_index]) {
- if (player.connected) {
- Connect();
- controller_connected[player_index] = true;
+ if (!is_connected) {
+ if (npad_type == NpadStyleIndex::Handheld) {
+ if (npad_id_type == NpadIdType::Handheld) {
+ Connect();
+ controller_connected[player_index] = true;
+ }
+ } else if (npad_type != NpadStyleIndex::Handheld) {
+ if (npad_id_type == NpadIdType::Player1) {
+ Connect();
+ controller_connected[player_index] = true;
+ } else if (player.connected && !controller_connected[player_index]) {
+ Connect();
+ controller_connected[player_index] = true;
+ }
}
}