MissionControl icon indicating copy to clipboard operation
MissionControl copied to clipboard

Rumbling For Wii Remotes Is Incredibly High

Open NeilAgar opened this issue 4 years ago • 3 comments

Firmware 11.0.1 CFW Atmosphere 19.3

When playing with a Wii Remote, any tiny little motion rumble makes the remote rumble a lot more intensely, and for a much longer time than it should. Not sure if I caused this, or if it is just a bug.

This same issue seems to have happened to other people as mentioned with the DualSense Controller here: https://github.com/ndeadly/MissionControl/issues/259

NeilAgar avatar Jun 21 '21 22:06 NeilAgar

Yeah, this is known. I don't think I went into specifics in the release notes but this is one of the reasons I noted that rumble is a work in progress. It's more of a feature than a bug, as this was an intentional choice between either no rumble at all, or this.

Basically, the issue is that Wii controllers only have the concept of motor on/off with no intensity control. Currently any non-zero rumble command from the switch activates the motor at full intensity, so as long as there are packets being received you're going to get rumble at full intensity. The Wiimote motor is also quite intense. Wii U controllers also suffer from the problem, but their motor seems to be less strong and has a bit more of a spin-up delay so it's less noticeable and feels a bit like it's vibrating at different speeds. There's also an issue where these controllers can get stuck in a state with rumble on because the neutral packet that stops the motors isn't received for some reason because there's not timeout on the rumble like other controllers.

Intensity levels can be simulated by pulsing the motors on and off for different durations. The problem is that in order to do this I would need to run a thread that's constantly sending on/off rumble commands at even higher rates than the switch already sends, while somehow co-ordinating with the real rumble packets being sent, and do this across potentially multiple controllers. It's not impossible, but it may be complicated to get right and I'm concerned it may result in much higher resource usage that could ultimately lead to noticeable input delays. Other systems that support these controllers were either designed with this in mind (like the wii itself) or have full control over the drivers and plenty of system resources to spare (which we do not).

I will look into it at some point, but it's not really a priority right now as I imagine it will be painful to try and implement well. This is why I added the feature to disable rumble :p

This same issue seems to have happened to other people as mentioned with the DualSense Controller here: https://github.com/ndeadly/MissionControl/issues/259

I'm pretty sure this is just a case of the rumble motors of the DualSense being quite powerful and needing to be scaled down. It's not the same thing.

ndeadly avatar Jun 22 '21 00:06 ndeadly

After doing some testing on the wiimotes and the wii, I think it's likely that the rumble needs to be stopped after it's started, otherwise it will just continue. I would also assume the Wii has different midi files for different patterns of vibration.

Sending a packet containing '10 00' should stop the rumble, from what I've learned at this website: https://wiibrew.org/wiki/Wiimote There's probably more to it than that since there's different levels of rumble, even for counterfeit controllers.

weirdal3333 avatar Jul 12 '21 19:07 weirdal3333

Yeah, Wii controller rumble will continue indefinitely until a command is sent to disable it. The switch usually sends a "neutral" packet to disable the HD rumble motors, which I'm translating to the off command. It could be that some games don't actually send this and instead rely on the fact that Switch rumble packets operate over 10 or 15ms bursts, afterwards the motors stop by themselves.

It may be necessary to explicitly send an off packet after a certain amount of time has passed. This and pulsing the motors on and off to achieve different intensities are getting into the realm of things that are inconvenient to do from the point of view of something like mission control, which essentially just translates packets from one format to another as they come in. I'll look into it eventually at some point in time, but I think it will be something that's non-trivial to implement well.

ndeadly avatar Jul 12 '21 20:07 ndeadly