Skip to content

Emulate a strength adjustable small motor by using the Big motor #51

@Kanuan

Description

@Kanuan

The Issue

Basically, XInput and DS4 devices have 2 motors (big and small) and their rumbling strength is adjustable. Although the DS3 also has 2 motors, the small motor has only one fixed strength.

As DsHidMini is now, every small motor rumble request gets its strength setting ignored by the driver. The problem with this approach is that some games use the small motor for subtle effects almost constantly. Because the DS3 small motor has only one strength, the result can be a strong, constant and annoying rumble instead of a subtle effect (e.g.: racing games having the controller rumbling constantly to emulate the car vibration).

Reproducing

Any modern game that uses XInput and has rumble can be used as a example at some part, but one that's guaranteed to make the user want to turn off rumble is Need For Speed: Most Wanted 2012 and its constant vibration.

Idea for solution

Make small motor commands below a threshold of strength (e.g.: 50%) be converted to Big Motor Commands (as long as there isn't an actual Big Motor command with a greater strength). Above the threshold then just activate the Small motor as the difference on what is intended by the game and the real effect is probably smaller.

To-do

Lots of tests, from pratical tests with games regarding if converting small motor commands to big motor feels odd to finding the best threshold where the small motor should actually be turned on

Metadata

Metadata

Assignees

No one assigned

    Labels

    CoreCore/Common Driver TopicenhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions