From 6d4b812b7cfd316afe537ae74d35c363bea3c582 Mon Sep 17 00:00:00 2001 From: Albert Liu <45282415+ggrtk@users.noreply.github.com> Date: Wed, 4 Nov 2020 22:45:58 -0800 Subject: [PATCH] AnalogController: Implement legacy rumble method Fixes missing vibration in Tobal 2, Bushido Blade, etc. --- src/core/analog_controller.cpp | 9 +++++++++ src/core/analog_controller.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/core/analog_controller.cpp b/src/core/analog_controller.cpp index 8b7ef43c8..c1de2a51c 100644 --- a/src/core/analog_controller.cpp +++ b/src/core/analog_controller.cpp @@ -302,6 +302,10 @@ bool AnalogController::Transfer(const u8 data_in, u8* data_out) { if (m_rumble_unlocked) SetMotorState(1, ((data_in & 0x01) != 0) ? 255 : 0); + else if (data_in >= 0x40 && data_in <= 0x7F) + m_legacy_rumble_unlocked = true; + else + SetMotorState(1, 0); *data_out = Truncate8(m_button_state) & GetExtraButtonMaskLSB(); m_state = State::GetStateButtonsMSB; @@ -313,6 +317,11 @@ bool AnalogController::Transfer(const u8 data_in, u8* data_out) { if (m_rumble_unlocked) SetMotorState(0, data_in); + else if (m_legacy_rumble_unlocked) + { + SetMotorState(1, ((data_in & 0x01) != 0) ? 255 : 0); + m_legacy_rumble_unlocked = false; + } *data_out = Truncate8(m_button_state >> 8); m_state = m_analog_mode ? State::GetStateRightAxisX : State::Idle; diff --git a/src/core/analog_controller.h b/src/core/analog_controller.h index 7b04b1390..eb6fbd6b5 100644 --- a/src/core/analog_controller.h +++ b/src/core/analog_controller.h @@ -142,6 +142,7 @@ private: bool m_analog_mode = false; bool m_analog_locked = false; bool m_rumble_unlocked = false; + bool m_legacy_rumble_unlocked = false; bool m_configuration_mode = false; u8 m_command_param = 0;