Resurrected VRMod
Play Risk of Rain 2 in VR with motion controls on the current game build. Unofficial OpenXR rebuild of DrBibop's VR mod, with Seekers of the Storm, Alloyed Collective and Hallowed Concepts survivor support.Resurrected VRMod — Risk of Rain 2 VR mod, unofficial build by Blowntobytes
Play Risk of Rain 2 in virtual reality with motion controls, on the current Steam version of the game.
This is an unofficial, community-maintained rebuild of DrBibop's RoR2VRMod. The original mod stopped working after the game moved to a newer Unity engine; this build ports it to that engine, switches it to OpenXR, and fixes the things that broke along the way. All credit for the mod itself goes to DrBibop and the original contributors (see Credits). Released under the same MIT license.
Installation
With r2modman / Thunderstore Mod Manager (recommended): install it from Thunderstore with the "Install with Mod Manager" button, then start the game with "Start modded". If you previously imported a pre-release zip of this mod as a local mod (or still have DrBibop's original VRMod installed), uninstall that entry first — two copies of the mod must never be installed together.
[Manual install] Install BepInExPack (which brings RoR2BepInExPack, FixPluginTypesSerialization and BepInEx GUI with it) and HookGenPatcher. Then download the Latest zip — on that page, open Assets and click Blowntobytes-Resurrected_VRMod-<version>.zip. Do not use GitHub's green "Code" button; that gives you the source code, not the mod.
Then in r2modman / Thunderstore Mod Manager: Select Settings → Profile → Import local mod → select the zip in Downloads → Import local mod and start the game with Start modded.
The first launch copies the OpenXR native files into place; if the headset stays black the very first time, simply launch again. Pick up both controllers before the title screen so the runtime wakes them.
- Source code: https://github.com/Blowntobytes/RoR2VRMod
- Original mod: https://github.com/DrBibop/RoR2VRMod
- Found a bug? Open an issue on the GitHub page above and attach your
BepInEx/LogOutput.log.
Multiplayer
Only VR players need the mod. You can play with vanilla (non-VR) players.
Requirements
- Risk of Rain 2 (current Steam build).
- A PC VR headset with an OpenXR runtime: SteamVR (any SteamVR headset, Index, Vive, Pico/Quest via Steam Link, Virtual Desktop, ALVR), the Meta/Oculus PC runtime (Quest Link / Air Link), or Windows Mixed Reality.
- BepInExPack with its own dependencies (RoR2BepInExPack, FixPluginTypesSerialization, BepInEx GUI) and HookGenPatcher. The mod manager installs all of these for you. FixPluginTypesSerialization is required: without it the game starts in flat screen.
Which headsets work, and the one setting that matters
The mod does not care which headset you own — it asks Windows for whatever OpenXR runtime is currently active. So the only thing to get right is that the runtime matching your headset is the active one:
| Headset | Set this as the active OpenXR runtime |
|---|---|
| Quest 2/3/Pro over Virtual Desktop | Virtual Desktop streamer → Streaming → OpenXR runtime VDXR |
| Quest over Link / Air Link, Rift CV1, Rift S | Oculus (Meta) PC app → Settings > General → Set Oculus as active OpenXR runtime |
| Valve Index, HTC Vive, Bigscreen Beyond, other SteamVR headsets(unconfirmed) | SteamVR → Settings > OpenXR → Set SteamVR as OpenXR runtime |
| Windows Mixed Reality, HP Reverb G2 | Mixed Reality Portal / OpenXR Tools for WMR → set WMR as the runtime |
Only one runtime can be active at a time, so switching headsets means flipping this setting. Controller bindings are registered for Oculus Touch, Quest Touch Pro, Valve Index, HTC Vive, HP Reverb G2, WMR and the generic KHR profile, so the button layout below applies on all of them (Index/Beyond knuckles: the "grip" is the squeeze).
Turn off "Use Desktop Game Theatre while SteamVR is active" in the game's Steam properties.
Do not turn on the old "Use Oculus mode" config option — it is a leftover from the pre-OpenXR mod and does nothing in this build.
Controls
These are the default bindings (this build does not use the SteamVR binding editor). Every gameplay action can be moved to another button or combo in the BINDINGS tab of the in-game Settings (see below). Button names follow the Oculus/Quest layout; on Index, Vive and WMR controllers the equivalent buttons are used.
Gameplay (right-handed; turn on "Left dominant hand" in the VR settings to swap the skill buttons)
| Input | Action |
|---|---|
| Left stick | Move |
| Right stick | Turn / look |
| Right trigger | Primary skill |
| Left trigger | Secondary skill |
| Left grip | Utility skill |
| Right grip | Special skill |
| A | Interact |
| B | Jump |
| X | Use equipment |
| Y (tap) | Pause menu |
| Y (hold) | Scoreboard / profile |
| Left stick click | Sprint (or turn on Auto Sprint in the VR settings to sprint automatically) |
| Right stick click | Ping |
Combos with X (key items, equipment sets) — X uses your equipment when tapped on its own; held, it works as a modifier for the combos below. A combo also works if you press both buttons within a fraction of a second, in either order.
| Input | Action |
|---|---|
| X (hold) + B | Use the key item (Hallowed Concepts) |
| X (hold) + right stick left / right | Previous / next element |
| X (hold) + A | Switch equipment set (with an item that gives a second equipment set) |
The wrist panel on your left hand shows the key item you are carrying (and N'tormat's current page) and reminds you of the buttons.
Remote-operated drones (after you die in multiplayer and take over a drone): the left stick flies along where you look (forward/back) and strafes left/right, the right grip climbs, the left grip descends. The grips do not fire drone skills while flying.
HTC Vive / original Windows Mixed Reality wands — these have no A/B/X/Y, so the trackpad clicks and menu buttons stand in (HP Reverb G2 has real A/B buttons and uses the normal layout):
| Wand input | Acts as |
|---|---|
| Right trackpad click, lower half | A (interact / confirm) |
| Right trackpad click, upper half | B (jump / back) |
| Left trackpad click, upper half | X (equipment / ready) |
| Left trackpad click, lower half | Sprint (left stick click) |
| Right menu button | Ping (right stick click) |
| Left menu button | Y (tap = pause menu, hold = scoreboard) |
Steam Frame — mapped like a Quest/Touch controller: right A = A, right Y = B, left D-pad down = X, left D-pad up = Y, left View button = menu; sticks, triggers and grips are the same.
Enforcer — the shotgun is always in your dominant hand and the shield in the other (right-handed: shotgun right, shield left; left-handed: the mirror image). Triggers and grips use the normal layout: the dominant trigger fires the shotgun, and Protect and Serve (raise the shield) is on the grip of the shield hand. Shots come out of the shotgun. The shield, and any items attached to it, are only drawn while it is raised; its transparency is the Enforcer: Shield opacity slider in the VR settings.
Left-handed mode — turn on "Left dominant hand" in the VR settings. The skill buttons swap sides, and the Seekers of the Storm, Alloyed Collective and Hallowed Concepts survivors become an exact mirror image of right-handed mode, aiming with the left hand. Restart the run after switching (switching mid-run can leave weapons see-through or firing from the wrong spot).
Menus — the controllers act as a gamepad, and every on-screen prompt names the button that really does it (A is A, the trigger glyph means the trigger):
| Input | Action |
|---|---|
| Left stick | Move the selection |
| A | Confirm |
| B | Back / cancel |
| X | Ready / alternate confirm |
| Left trigger | Back to the survivor grid (previous page) |
| Right trigger | Forward to the panels on the right — expansions / DLC, artifacts (next page) |
| Left grip / right grip | Previous / next tab in the settings panel. Nothing anywhere else — they cannot trigger anything by accident on the character select screen |
| Y | Open / close the pause menu, skip the intro cutscene (also Y on a gamepad) |
On the character select screen, A picks the highlighted survivor; the Ready button then becomes the highlighted control, so press A again (or move to it with the stick) to ready up. One press never does both. Up/down on the rules panel walks Difficulty → Expansions → Artifacts; A on the Expansions or Artifacts header opens that picker.
Typing (VR keyboard): move the highlight onto any text box (game browser search and filters, host name, password, tags, the password box on a game's info panel) and press A. A keyboard appears below the menu: left stick moves over the keys, A types, X is backspace, Y is space, B closes and keeps the text, and DONE confirms the box the way Enter does. A bright amber frame always shows which menu control is selected.
Chat: click the left stick on the character select screen (or in a run while the game is paused) to open the keyboard on the chat box. B or DONE sends the message; B with nothing typed just closes it. The highlight returns to the menu afterwards.
Rebinding (BINDINGS tab)
In the in-game Settings, the BINDINGS tab (to the right of VR) lists every gameplay action. Select a row and press A, release everything, then press the button you want:
- A single button — just press it.
- A combo — hold the first button (the modifier) and press the second.
- Tap or hold — release within about half a second for a tap binding, keep holding for a hold binding (Y is tap = pause menu, hold = scoreboard by default).
- A flick of a stick (for example "R stick right") can be bound too.
Conflicts are flagged on the row. Reset all bindings restores the defaults. The choices are saved in the [Bindings] section of VRMod.cfg; default means the built-in layout for your controller. The game's own Keyboard + Mouse and Controller binding pages are not used for VR controls.
VR settings
Open the in-game Settings and pick the VR tab (the same options are in BepInEx/config/VRMod.cfg, editable from the mod manager's Config editor). Notable options in this build:
- Auto Sprint — On by default - sprint automatically whenever you push the left stick, and re-engage on its own after anything cancels the sprint (firing a skill, taking a hit). Also works with a regular gamepad.
- A: Jump when nothing to interact with — A interacts as usual and jumps when nothing is in reach.
- Wrist chat always visible — On by default keeps the chat on your left watch readable instead of fading out.
- Highlight chests — Chest, teleporters, shrines will have a yellow glow for easy locating.
- Item hints — On by default When pinging an item or scrolling through items in a command run, item name and info will be included on your left wrist or at the bottom of the item panel.
- Seated mode — On by default Because who wants to stand when playing this game? You can disable it to switch to standing mode but you'll have to restart the game to apply.
- Hidden item displays — items whose 3D model is hidden on your own character in VR (default: Kinetic Dampener). Comma-separated, matched by in-game name; the items still work.
- Menu selection frame / VR keyboard / VR chat (left stick click) — On by default the amber selection frame, the on-screen keyboard and the chat shortcut; each can be switched off.
- Enforcer: Shield opacity — how solid Enforcer's shield looks while shielding (0 = invisible, 100 = solid).
- Runtime hands — the hand, aim and held-weapon positions for the Seekers of the Storm, Alloyed Collective and Hallowed Concepts survivors are built into the mod and are no longer in the config file; there is nothing to tune. Older config files are cleaned up automatically.
Known issues in this build
- Hand models are not shown inside menus (menus are navigated like a gamepad). Hands and weapons work normally in a run.
- The hands for the Seekers of the Storm, Alloyed Collective and Hallowed Concepts survivors are generated from the character model at runtime rather than hand-made, so they are functional rather than pretty. Their positions are fixed in the mod and cannot be adjusted by players.
- The loading screen can sit at 0 % for about 20 seconds before it starts counting. This comes from the FixPluginTypesSerialization dependency on the current game build, not from this mod; it happens with the VR mod disabled too.
- Playing with vanilla players: the October 2026 game build loads extra unused characters in any modded game, which broke multiplayer with unmodded friends (they could not see you, or got stuck in the pod). This mod corrects that, so with the VR mod installed you can play with vanilla players again; without it, any other mod on its own still has the problem.
- Bhaptics / Shockwave haptics suit support is still compiled in but has not been tested with this build.
- Character support from VRAPI (custom survivors with VR hands) is included unchanged and untested.
The mod's internal plugin ID is still com.DrBibop.VRMod, so other mods that depend on the VR mod or VRAPI keep working.
Building from source
The original Visual Studio project files are kept, but this build was produced with a self-contained, offline toolchain that needs only PowerShell 7 — see build-tools/README.md for the reference-assembly setup and the exact build commands. The packaged zip layout (manifest.json, README.md, CHANGELOG.md, icon.png, plugins/, patchers/) is the standard Thunderstore format.
Credits
DrBibop: original mod and patcher programmer, animator
MrPurple6411: patcher programmer
dotflare: 3D artist
Ncognito: 3D artist
eliotttate: original creator, code assist
HutchyBen: code assist
AmadeusMop: code assist
Daerst: fixed the biggest and oldest bug of the original mod
laila, HutchyBen, Skarl1n, Geb, Popzix, Terrorcotta211: controller support for the original mod
Blowntobytes: current-game-version port, OpenXR rebuild and maintenance of this fork
The ParentCamera.projectionMatrix = _childCamera.GetStereoProjectionMatrix(eye) stereo fix came from a community report.
