From 2ee48fc880f93b49c1213c9e93310a510c8f347d Mon Sep 17 00:00:00 2001 From: patchzyy <64382339+patchzyy@users.noreply.github.com> Date: Sun, 18 Oct 2026 15:05:43 +0200 Subject: [PATCH] Implement controller sumble on wiimote (#304) --- runtime/src/hle/input/pad.cpp | 5 +++++ runtime/src/hle/input/wpad.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/runtime/src/hle/input/pad.cpp b/runtime/src/hle/input/pad.cpp index 23ff800..c0bbfdb 100644 --- a/runtime/src/hle/input/pad.cpp +++ b/runtime/src/hle/input/pad.cpp @@ -89,6 +89,11 @@ void WritePadStatus(uint32_t base, const PADStatus& status) { } // namespace +extern "C" bool PAD_HLE_RumbleEnabled() +{ + return g_rumbleEnabled.load(std::memory_order_relaxed); +} + extern "C" void PAD_HLE_SetRumbleEnabled(bool enabled) { g_rumbleEnabled.store(enabled, std::memory_order_relaxed); diff --git a/runtime/src/hle/input/wpad.cpp b/runtime/src/hle/input/wpad.cpp index b3985ff..21c2e46 100644 --- a/runtime/src/hle/input/wpad.cpp +++ b/runtime/src/hle/input/wpad.cpp @@ -5,6 +5,9 @@ #include +#include + +extern "C" bool PAD_HLE_RumbleEnabled(); void NandQueueIosCallback(uint32_t callbackPtr, int32_t result, uint32_t callbackArg); namespace { @@ -143,8 +146,8 @@ PPC_NATIVE_OVERRIDE(801C0990, WPADProbe_HLE, int32_t, (uint32_t chan, uint32_t t extern "C" void WPADControlMotor_HLE(uint32_t chan, uint32_t command) { - (void)chan; - (void)command; + const bool on = command != 0 && PAD_HLE_RumbleEnabled(); + PADControlMotor(chan, on ? PAD_MOTOR_RUMBLE : PAD_MOTOR_STOP_HARD); } PPC_NATIVE_OVERRIDE(801C0EC4, WPADControlMotor_HLE, void, (uint32_t chan, uint32_t command), (chan, command));