Skip to content

Force Feedback

hifihedgehog edited this page May 26, 2026 · 34 revisions

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.

Force feedback settings with motor strength sliders and test button

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.


How rumble works

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.


Rumble signal flow

Games never talk to your physical controller directly.

  1. Game sends rumble to PadForge's virtual controller (Xbox, PlayStation, or Extended).
  2. PadForge reads the left and right motor values.
  3. Your settings apply: gain, per-motor strength, motor swap.
  4. 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.

Multi-slot rumble

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.


Rumble settings

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.

Test Rumble

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.

If several physical devices share a slot, the test pulse only fires on the device you are configuring.


Live motor activity

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.

Haptic fallback

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.

Directional forces

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.


Condition effects

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.


Extended (HID PID) force feedback

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.


Sony pads: dispatcher as sole writer

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 OutputReceived callback 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 Win32 WriteFile against 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.


Audio Bass 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.

Turning it on

  1. Open the Force Feedback tab for the slot.
  2. Check Enable Audio Rumble.
  3. Play audio. Adjust the sliders while you watch the Level meter.

Settings

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.

Practical scenarios

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.

Constant Force

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.

Routing

  • FFB-capable devices (wheels, joysticks) receive a real DICONSTANTFORCE through the existing SetDirectionalHapticForces pipeline. 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 UserEffectsDispatcher per-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.


Reset controls

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.

Tips

  • 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.

Troubleshooting

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.

Related pages

Clone this wiki locally