-
Notifications
You must be signed in to change notification settings - Fork 6
Force Feedback
Pass game rumble through to your pad, route HID PID 1.0 force feedback to wheels and sticks, and drive extra rumble from your system audio.

The Force Feedback tab is per pad per slot. Every physical pad mapped to the slot keeps its own Overall, Left, Right, Swap, Audio Rumble, and Constant Force values. Pick a different device in the assigned-devices dropdown and the tab rebinds to that device.
See Impulse Triggers for trigger-motor effects.
The tab appears on every slot type, including Keyboard+Mouse and MIDI. Those slot types do not send rumble upstream to games, but Audio Rumble still feeds into the same combined-vibration buffer routed to whichever physical device is mapped. Test Rumble fires haptics on the currently selected device only, so you can verify one pad without buzzing the others.
Most controllers have two vibration motors:
| Motor | Character | Typical use |
|---|---|---|
| Left (low-frequency) | Heavy, deep thump | Explosions, collisions, engine vibration |
| Right (high-frequency) | Light, sharp buzz | Gunfire, road texture, UI feedback |
Games blend both motors for varied effects. A wall hit slams the left motor and gently buzzes the right. A machine gun pulses the right motor rapidly with the left idle.
Games never talk to your physical controller directly.
- Game sends rumble to PadForge's virtual controller (Xbox, PlayStation, or Extended).
- PadForge reads the left and right motor values.
- Your settings apply: gain, per-motor strength, motor swap.
- PadForge forwards the adjusted rumble to your physical controller.
This runs at PadForge's polling rate (hundreds of times per second), so feedback feels instant.
When one physical controller is assigned to several virtual slots, PadForge takes the highest motor value from any active slot. No rumble signals are lost.
| Setting | Range | Default | What it does |
|---|---|---|---|
| Overall Gain | 0–100% | 100% | Master vibration strength. Scales both motors. 0% disables rumble. |
| Left Motor | 0–100% | 100% | Low-frequency motor strength. |
| Right Motor | 0–100% | 100% | High-frequency motor strength. |
| Swap Motors | On/Off | Off | Flips which physical motor receives the left vs. right signal. Use when rumble feels backwards. |
Click Test Rumble to send a short vibration pulse. Confirms the device supports rumble, PadForge is forwarding correctly, and your current settings produce the effect you wanted. The label uses BaseHighBrush so it stays readable in both light and dark themes.
If several physical devices share a slot, the test pulse only fires on the device you are configuring.
Real-time bars show current vibration intensity per motor as games send rumble. Left bar is low-frequency, right bar is high-frequency. Bar backgrounds use ChromeMediumLow in light mode and BaseLow in dark mode.
Use the bars to:
- Watch which motor a game favors and how hard it pushes.
- Tune strength settings while you see the result.
- Confirm audio bass rumble is firing when you expect.
Some devices (racing wheels, arcade sticks, flight sticks) have no rumble motors but support haptic force feedback. PadForge detects them and translates rumble into haptic effects.
| Priority | Strategy | Behavior |
|---|---|---|
| 1st | Left/Right effects | Two independent vibration channels, closest to dual-motor rumble. |
| 2nd | Sine wave effects | Periodic vibration. Slow oscillation for the heavy motor, fast buzz for the light one. |
| 3rd | Constant force effects | Steady force matching the stronger motor. Less nuanced but still usable. |
No setup. If a device supports neither rumble nor haptics, vibration is skipped.
For haptic devices, PadForge preserves force direction instead of collapsing it to one value.
- Joysticks with two or more haptic axes receive true 2D directional forces. A leftward force pushes harder on the left side.
- Racing wheels with one axis receive forces projected onto the steering axis. A rightward force pushes the wheel clockwise.
Directional forces apply to constant, ramp, and all periodic effects (sine, square, triangle, sawtooth up and down). If a device lacks the requested effect, PadForge falls back to scalar rumble.
Position- or velocity-dependent forces used in racing and flight sims. Unlike rumble, they react to how you move the controller or wheel.
| Effect | Feel | Common use |
|---|---|---|
| Spring | Centering force, stronger farther from center | Wheel self-centering, joystick return-to-neutral |
| Damper | Speed-dependent resistance | Hydraulic steering simulation |
| Friction | Constant resistance in any direction | Road surface feel |
| Inertia | Resistance to speed changes | Heavy steering column or flight yoke mass |
Overall Gain scales condition effect strength. Wheels and force feedback sticks feel these best. Standard gamepads receive them as scalar rumble.
When a slot uses Extended output, force feedback flows through the HID PID 1.0 pipeline.
- Games send DirectInput effects (constant force, sine, ramp, sawtooth, condition effects) to the Extended virtual controller via its HID PID descriptor.
- PadForge decodes the effect blocks and translates them into rumble or haptic commands for your physical controller.
- All settings (Overall Gain, per-motor strength, Swap Motors) apply normally.
The Extended virtual controller advertises full PID FFB capability by default. Toggling Force Feedback off on the Extended config bar (with Customize on) rebuilds the HID descriptor without the PID block, so DirectInput games see a non-FFB joystick instead.
When a slot uses PlayStation output (DualShock 4 or DualSense) and the source physical device is itself a DS4 or DualSense, the UserEffectsDispatcher is the sole writer of effect packets to that physical pad. Rumble, lightbar, adaptive triggers, and the mic LED all ride one HID write per dispatcher tick. SDL's SDL_RumbleJoystick is not called on Sony pads (Step 2's ApplyForceFeedback returns early for Sony VID/PID).
- Game writes left/right rumble to the virtual DualShock 4 or DualSense.
- HM's
OutputReceivedcallback hands the effect bytes to the dispatcher. - The dispatcher's per-tick worker assembles the full Sony effect packet (rumble + lightbar + adaptive triggers + mic LED) and writes it to the physical pad through
SonyEffectWriter.Write, which uses a raw Win32WriteFileagainst the device handle.
The companion input direction packs the physical Sony pad's sticks, buttons, gyro, accelerometer, touchpad, and battery into the canonical Sony USB Report 0x01 byte layout and submits it through HM's SubmitRawReport, so games see a complete Sony input report alongside the game-driven rumble.
PadForge can drive controller vibration from any system audio (games, music, video). It captures audio via Windows loopback, isolates bass with a 48 dB/octave low-pass filter, and converts bass energy into motor speed. The result is vibration that pulses with bass-heavy sounds.
Audio bass rumble combines with game rumble. PadForge takes whichever signal is stronger at any moment. Audio fills gaps during cutscenes, menus, or quiet gameplay where the game sends nothing.
PadForge follows your default audio output device. Switch from speakers to headphones and you do not need to reconfigure anything.
- Open the Force Feedback tab for the slot.
- Check Enable Audio Rumble.
- Play audio. Adjust the sliders while you watch the Level meter.
| Setting | Range | Default | What it does |
|---|---|---|---|
| Sensitivity | 1.0–20.0 | 4.0 | Bass intensity multiplier. Higher means stronger rumble from quieter audio. |
| Bass Cutoff | 20–200 Hz | 80 Hz | Low-pass cutoff. Lower keeps deep sub-bass only. Higher widens the bass range. |
| Left Motor | 0–100% | 100% | Audio-driven low-frequency motor scale. |
| Right Motor | 0–100% | 100% | Audio-driven high-frequency motor scale. |
The Level meter shows current bass energy as audio plays.
| Scenario | Sensitivity | Bass Cutoff | Notes |
|---|---|---|---|
| Action games without native rumble | 4.0 | 80 Hz | Raise sensitivity if rumble feels subtle. |
| Music listening | 6–8 | 100–150 Hz | Picks up kicks and bass guitar. Right motor at 50% for deeper feel. |
| Movies and video | 4.0 | 40–60 Hz | Isolates deep cinematic rumble (thunder, explosions, LFE). |
| Racing games with weak rumble | 4.0 | 40–60 Hz | Adds engine rumble and collision impacts from the game's own audio. |
| Horror and atmospheric games | 2–3 | 30–50 Hz | Subtle vibration from ambient bass drones. |
A per-device override that drives a continuous force on the assigned physical device until you turn it off. A toggle plus a 2D grid with signed X / Y sliders. Click or drag in the grid to set the direction and strength of the force vector. The grid origin is centered. The dot's distance from center sets magnitude. Its angle sets direction (0 → +1 vertical is forward, 0 → +1 horizontal is right).
Override-with-resume rule. While the toggle is on, PadForge keeps applying the configured force as long as no game or program is sending non-zero force to that device/slot pair. The moment a game sends any non-zero rumble or PID effect, the game's force takes over. The moment the game returns to silence, the constant force resumes. Macro rumble layers via max() ahead of constant force, so a macro pulse behaves like game force for the resume rule.
-
FFB-capable devices (wheels, joysticks) receive a real
DICONSTANTFORCEthrough the existingSetDirectionalHapticForcespipeline. Single-axis devices (wheels) project the angle onto the steering axis exactly like the DXSDK FFConst sample. -
Rumble-only devices (Xbox-style pads, generic gamepads) get a quadrant motor mapping.
|Y|drives the heavy / low-frequency motor,|X|drives the light / high-frequency motor, with a half-bleed across so diagonals engage both. -
Sony pads (DualShock 4, DualSense, DualSense Edge) route through the
UserEffectsDispatcherper-device rumble pump. The dispatcher remains the sole writer of effect packets to Sony pads.
Persistence. Per-device, per-slot. Stored in PadSetting as ConstantForceEnabled, ConstantForceX, ConstantForceY. Survives PadForge restarts.
Why it's there. Centered originally for issue #29: a real wheel mapped to a virtual Xbox controller for a game that does not speak DirectInput, where the wheel needs a centering pull the game itself cannot send. Set X and Y to point at the wheel's resting position and the wheel returns to center between corrections.
The Motor Activity meter reflects the constant force when it is the active source. What you see on the meter is what the device receives.
Every slider has its own reset button. Reset All restores everything in its section.
- Rumble Reset All: Gain 100%, both motors 100%, Swap Motors off.
- Audio Rumble Reset All: Disabled, sensitivity 4.0, cutoff 80 Hz, both motors 100%.
- Constant Force Reset All: Toggle off, X = 0, Y = 0.
- Start with defaults. 100% gain passes through exactly what the game sends. Only reduce if vibration is too strong.
- Watch the motor activity bars during gameplay to see which motor a game favors, then adjust.
- Lower the right motor for less buzz. 60–80% keeps deep thumps while softening high-frequency buzz.
- Tune during gameplay, not just Test Rumble. Real games use varied patterns the test pulse cannot replicate.
- Audio rumble runs alongside game rumble. It activates when bass exceeds the game's own signal.
- Each device gets its own settings. Tune force feedback per controller on each slot.
- Use Extended output for racing wheels. Condition effects and directional forces are only available through the HID PID pipeline.
| Problem | Try this |
|---|---|
| No vibration at all | Check Overall Gain > 0%. Click Test Rumble to confirm the device supports it. |
| Vibration too weak | Raise Overall Gain and per-motor sliders. |
| Vibration too strong | Lower Overall Gain or per-motor sliders. |
| Rumble feels reversed | Turn on Swap Motors. |
| Rumble stops intermittently | Check no other software (Steam Input, etc.) is competing for the device. |
| Audio rumble not working | Confirm audio plays through your default output. Check the Level meter. Raise sensitivity if it barely moves. |
| Audio rumble too aggressive | Lower sensitivity or drop the bass cutoff. |
| Wheel FFB feels wrong | Use an Extended output slot, not Xbox or PlayStation. |
| Condition effects feel weak | Raise Overall Gain. Condition effects scale with it. |
- Controller Slots: create and configure virtual controllers.
- Button and Axis Mappings: map physical inputs.
- Stick Deadzones: thumbstick deadzone and response curves.
- Trigger Deadzones: pair trigger adjustments with rumble tuning.
- Impulse Triggers: trigger-motor passthrough, audio bass on triggers, constant trigger force.
- Adaptive Triggers: DualSense trigger resistance, weapon, vibration, slope, and multi-position effects.
- Devices: check rumble and haptic capability per device.
- Troubleshooting: wider help with rumble issues.