Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
DualSenseHaptics
DualSense rumble, adaptive triggers, lightbar and gyro aim without Steam Input, driven by game events: damage, fear heartbeat, walkie, explosions, jetpack, Cruiser. Rumble on any other pad. Client-side.
| Last updated | an hour ago |
| Total downloads | 4 |
| Total rating | 0 |
| Categories | Tweaks & Quality Of Life Client-side Tools AI Generated |
| Dependency string | thatumi-DualSenseHaptics-0.2.3 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
DualSenseHaptics
Controller feedback for Lethal Company, driven by what happens in game, plus gyro aim for the DualSense:
- Rumble on any gamepad: camera shakes (mines, shotgun blasts, Old Birds, the worm, ship travel...), damage scaled by the hit, a heavy thud for fall damage (and for being flung into something), a long pulse when you die, hard landings, ship landing / take-off, shovel and knife hits, shotgun recoil, jetpack thrust and the Cruiser (engine, ignition, gear shifts, turbo, destruction).
- One heartbeat, never two at once: in step with the game's own fear heartbeat sound when something scares you (also when drunk or poisoned, which play the same sound), the steady beat while critically injured, and a faint slow beat when you have been alone inside the facility long enough to go insane. Scared while critically injured beats 20 % harder. When the ghost girl stares at you, her heartbeat music drives it. The fear beat is on by default; the insanity beat is off by default.
- Immersion: a sharp jolt when your fear jumps (a scare; off by default), walkie-talkie crackle when someone keys up, faint static while you hear them and a squelch when they stop, a click on your own push-to-talk, and a high buzz that fades with your ringing ears after a stun grenade or a shotgun blast.
- Adaptive triggers on a DualSense (PS5 pad, also DualSense Edge): a "click" on the use trigger while holding a shovel or knife, a thrust buzz with the jetpack, and in the Cruiser a gas pedal whose resistance rises with RPM (and buzzes at idle) plus a brake that firms up from mid travel, where the brake engages, and shudders when you brake hard at speed.
- Lightbar on a DualSense: your health (green to red, red pulse when critically injured, fades out when you die), the Cruiser's health, the held jetpack's battery, or a static colour. The mic LED lights while you talk into a walkie.
- Gyro aim on a DualSense (off by default): turn the controller to aim, in real degrees, without Steam Input. See below.
Client-side only: nobody else in the lobby needs it. No hard dependencies.
Requirements for triggers and lightbar: turn Steam Input off
With Steam Input on (the Steam default for PlayStation pads) the game gets Steam's virtual Xbox pad. On Linux / Proton that is all it sees: you still get rumble, but not adaptive triggers or the lightbar. On Windows the real DualSense may be visible next to it; the mod then drives the DualSense directly, but Steam keeps writing to the pad too (lightbar, rumble). Either way, for the full feature set:
Steam > Lethal Company > Properties > Controller > Disable Steam Input.
The mod shows this tip once in game when it detects Steam Input (Steam's virtual pad, or a DualSense that also shows up
as an Xbox pad; a plain Xbox controller gets no tip), and logs which path it uses: backend=HID-USB, backend=HID-BT or
backend=XInput-fallback.
Linux / Proton: works through Proton's hidraw passthrough for the DualSense (on by default). Do not use the Proton
sdlinput compatibility option or PROTON_DISABLE_HIDRAW for this game.
Gyro aim ([Gyro] Mode, off by default)
Steam's gyro-to-mouse needs Steam Input on, and Steam Input on means no adaptive triggers or lightbar. This mod reads the DualSense's motion sensor itself (the same raw reports it already uses for the haptics, which is why gyro lives in a haptics mod) and turns it into camera motion:
- Modes:
Always,HoldToEnable(gyro while you hold the Gyro button),HoldToDisable(gyro on; hold the button to reposition the controller, a "ratchet"),Toggle(press to switch; a short tick confirms). - Binds: "Gyro" (default: touchpad click) and "Calibrate gyro" (unbound). With InputUtils installed, rebind them in
its keybind menu; without it, set
Button path without InputUtils/Calibrate button path without InputUtils. - Sensitivity 1.0 = turning the controller 1 degree turns the camera 1 degree (default 1.5), independent of the
game's look sensitivity and frame rate.
Vertical scale,Invert yaw,Invert pitch(the game's own Invert Y is compensated),Tightening threshold(steadies tiny motions),Max degrees per frame. - Drift: the mod calibrates automatically whenever the controller lies still for a second (the first time right after connecting: put it down on the table once). "Calibrate gyro" asks for it explicitly.
- Indicator: the middle player LED under the touchpad is on while gyro is active.
- Paused in menus, the terminal, chat and while inspecting an item, and nothing piles up meanwhile (no camera snap afterwards). Works with LethalControls' stick aim at the same time.
- USB works from the start. Over Bluetooth the controller only sends motion data after the first haptics report, so
keep
[Bluetooth] Enabled = true. Not available with Steam Input on, DS4Windows or DSX (no DualSense visible to the game): use Steam's own gyro there. The log saysgyro: transport=USB imu=ok rate≈250Hz ...when it works.
Cruiser triggers
This mod never changes how the Cruiser is driven (CruiserImproved and BetterVehicleControls own that). Vanilla has no
trigger driving (L2 is Sprint), and trigger resistance only makes sense if you drive with the triggers, so the Cruiser
profile is meant for BetterVehicleControls, which binds Gas to R2 and Brake to L2 by default. With
Cruiser triggers = Auto (default) the profile is on when BetterVehicleControls is loaded and its Gas or Brake is on a
trigger, following your rebinds in the InputUtils keybind menu; without it, the Cruiser still rumbles. On forces the
profile, Off disables it.
Config (BepInEx/config/dev.thatumi.DualSenseHaptics.cfg; changes apply while the game runs)
| Section | Setting | Default |
|---|---|---|
| General | Enabled, Backend (Auto / FallbackOnly / Off), Rumble intensity, Debug log, Config version (internal) | on, Auto, 0.8, off, 2 |
| Rumble | per event group: Camera shake, Damage, Death, Heartbeat, Landing, Ship, Items, Jetpack, Cruiser, Footsteps | all on, Footsteps off |
| Rumble | Fear, Fear jolt, Insanity, Walkie, Walkie static, Ears ringing, Ghost girl heartbeat | Fear, Walkie, Walkie static, Ears ringing, Ghost girl heartbeat on; Insanity, Fear jolt off |
| Rumble | Walkie static strength, Static follows voice | 0.5, off |
| Rumble | Rumble report flags (Classic / V2) | Classic (try V2 only if HID rumble does nothing) |
| Adaptive triggers | Enabled, Strength, Cruiser triggers (Auto / On / Off), Jetpack, Melee | on, 1.0, Auto, on, on |
| Lightbar | Mode (Off / Health / CruiserHp / Static), Static colour, Brightness, Critical pulse, Jetpack battery | Health, #0050FF, 1.0, on, on |
| Lightbar | Mic LED on walkie transmit | on |
| Gyro | Mode (Off / Always / HoldToEnable / HoldToDisable / Toggle), Sensitivity, Vertical scale, Invert yaw, Invert pitch | Off, 1.5, 1.0, off, off |
| Gyro | Tightening threshold, Auto calibrate, Max degrees per frame, LED indicator, Toggle rumble tick | 0, on, 30, on, on |
| Gyro | PatchLookInput (restart), Button path / Calibrate button path without InputUtils | on, touchpad click, unbound |
| Bluetooth | Enabled, Keepalive seconds, Report layout (Kernel / Compact) | on, 1.0, Kernel |
| Hints | Show Steam Input hint | on (turns itself off after showing) |
Stuck triggers after a crash
The controller keeps the last trigger effect until it gets a new one. The mod always releases the triggers on death, menus, alt-tab, leaving the Cruiser, disconnect and quit, but if the game crashes they can stay stiff: replug the controller, or start and quit the game once.
Known limits
-
Gyro axis directions are not verified on hardware yet: if turning the controller right turns left (or up looks down), flip
Invert yaw/Invert pitch. -
Bluetooth uses the mod's own report format (Unity's built-in one does not work over Bluetooth). It is implemented but not yet verified on hardware; if nothing happens over Bluetooth, try
Report layout = Compact, or use USB. -
DS4Windows / DSX users get rumble only (they present an Xbox pad to the game), unless the game also sees the real DualSense: then the mod drives it directly.
-
A DualSense on the rumble-only path (
Backend = FallbackOnly, Bluetooth with[Bluetooth] Enabled = false, or a report layout the mod does not recognise) can lose its lightbar: Unity's rumble command also sets the lightbar colour, black when nothing set one. -
With
Backend = Auto, a connected DualSense is preferred over an Xbox pad (Steam Input and DS4Windows mirror the DualSense as one). If you play with an Xbox pad while a DualSense is connected, setBackend = FallbackOnly. -
Other programs that write to the pad (Steam client, the Linux driver) may change the lightbar; the mod re-sends its full state when the game regains focus, its lightbar and rumble every 2 seconds over USB, and everything every second over Bluetooth.
Bug report/requests:
thatumi on Discord