Repository navigation
Releases: ObeseCatLord/l4d2vr
Release list
L4D2VR 2.0.8 - reliable gun bash on any swing
OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements. Updating from 1.2.2: read the 2.0.0–2.0.7 notes for the full list of changes.
Fixes in 2.0.8
- Gun bash (shove) is reliable: any fast swing of the gun shoves — forehand, backhand, chop, butt stroke, diagonal or a forward push — measured at the hand and the muzzle. The barrel no longer has to point along the swing, and wrist rotation no longer cancels it. 0.7 s cooldown like the native shove.
- You can bash while reloading (magazine out); only holding the bolt/slide/pump with the off hand blocks it.
- Missed swings are logged with the reason, to help tune it.
From 2.0.7
- Arms come from the correct shoulders after you turn around in your room.
- Crowbar and fire axe are held at the handle end.
L4D2VR 2.0.7 - arms on the right shoulders, crowbar/axe held at the handle, Pavlov toggle grip, no hand switching
Includes everything from the 2.0.x test builds (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements). Updating from 1.2.2: read the 2.0.0–2.0.6 notes for the full list of changes.
Fixes in 2.0.7
- The arms no longer come from the wrong shoulders after you turn around in your room: the arm IK's shoulders now follow the direction you face (with the same comfort cone as the first-person body), not only the stick-turn direction.
- The crowbar and fire axe are held at the handle end instead of the middle of the bar/shaft; the Ancient Dungeon-style swing lag still pivots at your hand.
From 2.0.6
- Magazine well, bolt/pump, foregrip, flashlight, muzzle and scope follow the drawn gun (reloads seat at the visible well again).
- Right hand sits on your real hand by default.
- No hand switching of held items; Pavlov toggle grip (squeeze to take, squeeze again at the holster to put away, elsewhere to drop).
GripToggle=falserestores hold-to-grip.
L4D2VR 2.0.6 - reloads/flashlight follow the drawn gun, hands on your hands, AD melee, no hand switching, Pavlov toggle grip (test build)
Test build on top of 2.0.5 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements). Fixes from headset session 7.
Reloads, flashlight, scope
- The magazine well, bolt/slide/pump and foregrip grab points, the shotgun flashlight, the muzzle and the scope now move with the drawn gun. In 2.0.5 only the picture of the gun moved, so a magazine brought to the visible SMG well did not go in.
Hands
- The right hand sits on your real hand: its default offset mirrors the left (
NativeViewmodelRightHandPoseOffsetMeters=0,-0.08,0.1). Configs still on the old 0,0,0 are updated once. - Melee is held like Ancient Dungeon again: the hand stays on the controller and the weapon trails in it, pivoting at the hand.
No hand switching + Pavlov toggle grip
- A held gun or item never moves to your other hand. The other hand's grip on a held gun is only the foregrip.
- Either hand can still draw from a holster or the chest sling (the sling is unchanged).
- Toggle grip (switched on once for existing configs): squeeze to take; squeeze the same hand's grip again to let go. At its holster it is put away, near your body a long gun hangs on the sling, anywhere else it drops at your hand. Releasing the grip never drops anything. A squeeze mid-swing throws a melee weapon.
GripToggle=falserestores hold-to-grip.
Known issues
- Melee grip can drift ~1 cm from the hand in fast swings.
- The pump shotgun's hand can be off on its very first draw (fine afterwards).
L4D2VR 2.0.5 - Forefront holsters, empty hands, real left hand, hands on the controller, VR Options menu, Opus voice chat (test build)
Test build on top of 2.0.4 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements). Server operators: update the plugin (features 0x3FFF, adds Opus voice).
Hands
- Every gun's hand now sits on your controller (
GunHandOnController). Before, it came from each gun's idle animation: the Desert Eagle was 9 cm off, the Uzi/MAC-10 13 cm and the military sniper 17 cm. - An item in your left hand is held by the survivor's real left arm and hand (
ItemHandLeftArmModel). - The aim laser starts at your controller like in the original mod, and still ends where the bullet goes.
- Updating fixes stale hand defaults from older builds. Only old shipped values are changed; values you tuned are kept.
Holsters and empty hands
- Holsters follow Forefront's layout:
- Rifle on a chest sling.
- Pistol or melee on the dominant hip.
- Grenade on the upper chest.
- Pills on the other hip.
- Magazines on the off-hand upper chest.
- Medkit/defib on the back.
- They turn with your head instantly.
- Empty hands (
HolsterEmptyHands): put an item away and that hand is empty; with both hands empty you hold nothing.
VR Options menu
- Hold the pause button for 0.8 s, use the VR Options button by the main/pause menu, or press F8.
- Sections: Comfort, Hands & Body, Weapons, Grenades (including the new physics throw assistance), HUD, Audio, Controls and Advanced.
- Reset a single page, or reset all VR options (backed up, game settings untouched).
Opus voice chat
- Much clearer voice between mod players on servers running the updated plugin: 48 kHz Opus with error correction, positional playback and automatic loudness levelling.
- Push-to-talk uses the game's voice key, plus a new controller button (left menu on Quest, right trackpad press on Index).
- Players without the mod still hear you through the normal game voice.
L4D2VR 2.0.4 - Pavlov-style session-6 fixes: scopes, arc grenades, chest sling, mirrored left hand, wrist HUDs (test build)
Test build on top of 2.0.3 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements).
Guns and items
- Shotgun pump:
- Pump and Chrome shotguns fire shell after shell. Pump once after running dry (
ManualPumpEveryShot=truebrings back a pump after every shot). - The pump only moves while the trigger of the hand holding it is held.
- The support hand stays on the foregrip through shots.
- Pump and Chrome shotguns fire shell after shell. Pump once after running dry (
- Scopes work again on the hunting rifle, military sniper, AWP, Scout and SG552. They had been switched off and never captured the lens. The eyebox is now 15°.
- Grenades throw like the original L4D2VR mod (
GrenadeThrowMode=arc): an arc and landing ring from your hand, and the trigger throws along it.physicsmode is still available. - SCAR burst recoil now uses Pavlov's M16 values.
- Reloads are closer to Pavlov: slides and bolts lock open when empty, some magazines seat easily, and magazine seat depth and the longest bolt pull now use Pavlov's numbers.
- Chest pockets (grenade, pills) moved into view.
Hands and body
- A gun in your left hand is held by a mirrored left hand on every hand setting.
- Chest sling (
ChestSlingEnabled): let go of a long gun near your body and it hangs on your chest. Grab it with either hand to take it. - The foregrip catch is larger, closer to Pavlov's 11.5 cm grab radius.
- Wrist HUDs are back and on by default.
- Magazine and bolt debug boxes are off by default.
- Full first-person body is off by default. When it's on, the arms reach the VR hands and the torso follows your head.
Known open
- The magnum, Uzi/MAC-10 and military sniper hands sit a few cm off.
- Zoey's jacket stretches with the arm straight out (full body only).
L4D2VR 2.0.3 - off hand no longer bent inwards (test build)
Test build on top of 2.0.2 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements).
- Off hand no longer bent inwards on new installs (any controller; it showed on Quest via WiVRn).
- The shipped default rotation for the free off hand was wrong: it bent the hand 90° toward the body. With LeftHanded, the right hand bent the same way.
- New defaults:
NativeViewmodelLeftHandPoseRotationOffsetDeg=-90,90,0,NativeViewmodelLeftHandPoseOffsetMeters=0,-0.08,0.1. - Existing configs that still have the old
0,0,0are migrated once. Tuned values are kept. - On 2.0.2, set those two lines in
vr/config.txtby hand.
L4D2VR 2.0.2 - easier shotgun pump, stance and movement recoil (test build)
Test build on top of 2.0.1 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements). Untested in game.
- Easier shotgun pump (pump and Chrome):
- A pull counts at 7 cm (70% of the travel), based on the furthest point reached, so fast racks are never missed between frames.
- The round chambers back within 3.5 cm of the front.
- The free hand catches the pump from 15 cm and keeps it through drift or tracking blips.
- A hand already on the foregrip racks with the grip alone, as in Pavlov.
- Keys:
ManualPumpTravelMeters,ManualPumpCockFraction,ManualPumpChamberFraction,ManualPumpGrabPaddingMeters,ManualPumpForegripRacks.
- Stance and movement recoil, simulating vanilla L4D2's spread changes. Factors come from each gun's own spread values:
- Less recoil crouched (0.6-0.88x).
- Much more in the air (1.6-2.9x).
- Rising smoothly with speed (up to 1.4-1.75x at a full run).
- Changes ease in smoothly. Two-handed reduction still applies. Desktop players are unchanged.
- Keys:
RecoilStanceEnabled,RecoilStanceCrouchScale,RecoilStanceAirScale,RecoilStanceMovementScale.
L4D2VR 2.0.1 - mirrored left hand, trigger-release throws, one-hand aim on short guns (test build)
Test build on top of 2.0.0 (OpenXR-only; see the 2.0.0 notes for the Proton/launch requirements). Untested in game; please report how it feels.
- Left hand mirrored: a gun, melee weapon or item in your left hand is now held by a mirrored left hand. The arms come from the correct shoulders and the sights stay on the aim line (
ItemHandMirror). - Throwing:
- Hold the trigger of the hand with the grenade, swing, and let go. Every release throws immediately. A slow release lobs or drops it.
- Velocity is your hand's release velocity x1.5.
- The held grenade is rolled upright (
ThrowableHoldAngleOffsetDeg, default 0,0,20).
- Short guns (pistol, magnum, Uzi, silenced SMG, MP5) aim from the trigger hand only. The support hand still helps with recoil (
VrHandsTwoHandedAimShortGunsRearHandOnly). Rifles and shotguns stay two-handed. - Installer 1.1.1: finds the system certificate bundle on any Linux distribution, and creates the Monado route's Proton prefix folder.
L4D2VR 2.0.0 - OpenXR, Pavlov recoil, ambidextrous hands, dual-pistol reload (test build)
OpenXR-only. The mod now talks to the headset through OpenXR (no SteamVR/OpenVR files).
- Windows: needs a 32-bit OpenXR runtime: SteamVR 2.17+, Virtual Desktop (VDXR) or Meta Quest Link.
- Linux: needs Proton Hotfix (2026-10-07+) or Experimental (11.0-20261014+) and the launch options
WINEDLLOVERRIDES="d3d9=n,b" PROTON_USE_WOW64=1 %command% -dx9. With Steam closed,l4d2vr-installer-linux proton applyandlaunch-options applyset both.
New in 2.0.0
- Pavlov VR recoil per gun, using the values of Pavlov's equivalent guns. Holding the foregrip tames heavy recoil. The gun no longer sways or plays L4D2's firing animation in your hand.
- No bullet spread for VR players, and iron sights aligned on every gun. The crosshair is off by default. Desktop players keep vanilla spread and crosshair.
- Shotguns fire a fixed, evenly spread pellet pattern at L4D2's own pattern size (servers running the mod).
- Ambidextrous items. Grips grab; triggers work magazines, slides and pumps. Right stick click toggles the flashlight. No draw animation.
- Physical magazine slap, physics hand-thrown grenades, items drop at the hand, and a more reliable motion bash.
- Physical dual-pistol reload: stack the pistols, grab the double magazine, then rack each slide.
- Ancient Dungeon VR style melee swings.
- Pavlov-based survivor hand poses. The SteamVR glove models are retired.
- Dedicated server plugin with feature mask 0x1FFF, including the dual-pistol reload transaction.
Test status: this is a test build. The automated headless sets passed on the OpenXR builds:
- reload 71/71
- throw 29/29
- hands 67/67
- overlays 46/46
- iron sights 64/64
Still being verified:
- the newest recoil recovery check
- melee lag on the drawn weapon
- the dual-pistol reload end-to-end
- the hand poses
None of it has been tried in a real headset yet.
L4D2VR 1.2.2 - Pavlov holsters, toggle grips, full reload process
Fixes from the first headset sessions: Pavlov VR-style holsters, toggle grips, and a reload that takes the full process. Full guide: docs/physical-overhaul.md.
Downloads
| File | What it is |
|---|---|
l4d2vr-installer-windows.exe / l4d2vr-installer-linux |
Standalone installer. Finds Left 4 Dead 2, backs it up, and installs or updates the mod from the latest GitHub release. On Linux it also sets up Proton and the VR runtime. uninstall restores the game folder. Unchanged from 1.2.1. |
l4d2vr-1.2.2-full.zip |
Full release: the mod, both installers, the Linux server plugin and the guide. The installer falls back to the bundled mod when GitHub can't be reached. |
l4d2vr-1.2.2-source.tar.gz |
Source code for this release. |
l4d2vr.zip |
The mod by itself, for extracting into the game folder manually. |
l4d2vr-server-linux.zip |
Dedicated server plugin; extract into the server folder. It replaces l4d2vr_pose_server. Update it: the reload changes need this version on the server. |
*.sha256 |
Checksums. |
New in 1.2.2
- Holsters, Pavlov VR layout:
- Hips, chest pockets and back, measured from Pavlov VR. They follow your head and stay put when you look down, so you can see what's on your chest and hips.
- The holstered items are now drawn, and a haptic tick plays when your hand reaches one.
- Either hand can grip at any holster: the item there comes to your hand, and what you held goes back to its own holster.
- The spare magazine or shell pouch is on the off-hand hip.
- Toggle grips (
GripToggle, on by default): a firm squeeze takes an item, the next squeeze holsters, swaps or drops it. On the Index the grip needs a real squeeze, so resting your hand doesn't count. - Reloading, tuned to Pavlov VR per gun:
- A reload takes the full process: a fresh magazine in, then the slide, bolt or pump. Racking alone never loads a round.
- The release button drops one magazine; its rounds go back to your reserve.
- Spare magazines and shells come out of the pouch the way they sit in the gun, lined up with the well in a natural reload pose.
- Magazine slap on the AK-47, SG552 and military sniper: take a fresh magazine with the old one still in, and strike the old one out (
MagazineSlapEnabled). - Whatever the next step needs glows with a soft, steady tint: the empty magazine, the spare, then the slide or pump.
- A shot the server never fired (for example right after drawing) no longer asks for a rack or pump. Before, racking after a dropped last shot seemed to load a round from nowhere.
- The two-handed grip lets go when your support hand moves 20 cm from the foregrip, so the same hand can fetch a shotgun shell.
- Melee: motion only. Guns never play the swing or bash animation; the sound and hit still happen.
- Wrist HUD: uses the game's own health bars and font with full teammate names, including long ones. Your own bar is the large one.
- Controls: right stick forward jumps, right stick down toggles crouch (
StickJumpCrouch,StickCrouchToggle); the grips are only for gripping. Point at menus with either controller and click with the trigger. - Fixes: a first aid kit drawn from the back no longer floats in front of you; picking up items by touch works again; the glow is no longer a flickering pink.
- Config: a few magazine settings are reset to the new defaults on first start (pouch reach 20 cm, magazine well 10 cm and 45°, holster haptics). Your per-gun calibrations are kept.
Tested
Online on a dedicated Linux server with the plugin, with a simulated headset and the built-in -l4d2vrselftest, using hand-driven reloads and screenshots that were reviewed:
- Full reloads on the M16, AK-47, pistol, pump and auto shotgun: running dry, dropping the magazine, inserting a fresh one, racking. Racking alone doesn't reload, and an empty gun never reloads by itself. The reload set passed 53 of 53 checks in three runs in a row.
- The AK-47 slap, and letting go of a spare with the old magazine still in.
- Held-magazine alignment on 12 guns (5° from the well).
- Holster draws, swaps and drops with either hand; grips; touch pickups; no swing or bash animation; the wrist HUD (32 of 32 checks).
- 68 C++ unit test suites pass on MSVC.
Not yet tested
- In a real headset: how the holster positions, glow, wrist HUD placement and bash threshold feel.
- The SG552 and MP5, and left-handed mode.