NOTE: While it is still a PC VR mod for Halo CE, it is designed to run within WinlatorXR containers on portable devices, or when receiving 6DOF UDP tracking/sync data on a regular Windows desktop PC. Known bugs are listed below.
Code added or modified from the parent project in this fork/port to WinlatorXR's XrApi is subject to the LGPLv3 license so that others may adapt it for their own C++ PC VR games and mods as well!
Note: This is a Halo CE PC VR mod that makes breaking changes from the parent mod it's based on: HaloCEVR mod by LivingFray, please do not spam that developer with requests or issues related to this conversion!
Thanks to LivingFray for the awesome open source Halo CE VR mod
Additional thanks to these contributors to the LivingFray Halo CE VR mod:
97saundersj, slipperfish, codyherzog, HaMM4R, teddybear082, kyanite-rock, s-ilent, TheKrisSodroski
Thanks to Luboš for his work on WinlatorXR and everyone else who had contributed to portable PC gaming via Winlator
Thanks to GmoLargey for testing!
Thanks to ☆- Tee -☆ from the TeamBeef Discord for the idea of the combined Use + Reload button mode (in the ConfTool)
Thanks to gibst4r from the TeamBeef Discord for the idea of combined 6DOF motion plus a Non-VR mode (in the ConfTool)
- Build the d3d9 DLL
- Copy these DLLs from PC to System32 and SysWow64 directory for their 32/64 bit versions:
- -> vcruntime140.dll
- -> msvcp140.dll
- -> webservices.dll
- -> ws2_32.dll
- -> ws2help.dll
- Install Halo CE on WinlatorXR, make sure it works first without the VR mod
- Copy the VR, fonts, chimera / strings.dll, and d3d9.dll to the Halo install directory on Quest WinlatorXR (don't install the modified large memory EXEs, they don't seem to work)
- Install Wine MONO
- Right-click and make a shortcut to halo.exe (if one does not exist yet)
- Close the container and open the shortcut for Halo CE WXR instead
-> Current ideal settings for the Halo shortcut are 1400x1400, DXVK 1.10.1, Box64 Preset: Performance
-> In-game audio settings set to LOW for both variety and quality
-> If using the dsoal mod (recommended for audio latency issues) you will likely need another MSVC++ runtime but I am unsure which one, you can just install the All-In-One on your container
-> Use this config alsoft.ini with the dsoal mod
-> Use this config chimera.ini with the chimera mod
-> Place this config.txt in the VR folder
We now have two ways to do this
1.) Using the XrAPI UDP Test program:
- Extract it from the ZIP and run it
- Enable sending UDP data to localhost
- Run the project on PC, 6DOF data emulation will stream to it from the UDP Test program
2.) Using a Quest/Pico with a debug version of WinlatorXR:
- Download the WinlatorXR source code and make your own build with the UDP debugging enabled, run it on your device
- Create the udp_debug folder in your Downloads directory on Quest/Pico, and put a file in named after the IP of your dev server
- Run a VR experience like SixDOFinator or create a file named "vr" manually in Z:/tmp/xr/ to enable data sending
- Run the project on PC, 6DOF data will stream to it from the Quest/Pico device
NOTE: If you start this on a PC or other device and it doesn't get past the loading HALO screen, it's not receiving the UDP data expected from WinlatorXR or the UDP Test app!
- Investigate ways to enable audio without massive slowdown (known issue of Halo CE on WinlatorXR right now)
- 6DOF tracking / input string collection from WinlatorXR over UDP background thread
- Display the top-left corner "red pixel" for OpenXR frame reference to WinlatorXR VR mode
- Create the /vr file if the Z drive exists on load
- Try to delete the /vr file on close
- Fit the game render window to the entire display
- Remove the black borders (the red pixel OpenXR needs to be in the correct spot)
- Map the 6DOF data to the game controls
- Fix the /vr file creation so it works before the UDP server listener starts (or find out why its not working as expected)
- Restore the in-game HUD display without losing the red pixel overlay
- Investigate why the pause panel UI keeps toggling on/off in-game on button press (add delay between button detection maybe for this?)
- Fix the sniper pickup / regular weapon zoom (currently broken, crashes on Sniper equip)
- Investigate why the UI flys down-right off screen on the title screen over time
- Fix sniper scope not appearing
- Fix the DLL injection failing on actual WinlatorXR container on Quest/Pic with Release versions of the DLL (Debug working)
- Rumble support with adjustable haptics
- Melee via physical gesture (new implementation based on positional data only, adjustable sensitivity)
- Campaign is 100% playable (tested on device)
- New recentre code that syncs up the player relative to the game itself (not stuck tethered to real device tracking data)
- Support for moving freely without a boundary (virtual body move to catch up to HMD movements), with scalable walking IRL vs movement in-game, disabled by default
- Ability to disable thumbstick move (automatically enables the above boundless mode)
- Ability to disable thumbstick turn entirely
- AER stereo 3D support
- Optional mode to combine Reload and Use buttons
- Optional Seated Non-VR mode (play like a regular game, with added 6DOF motion tracking)
- Restore the mirror window or show that instead of the main game window, and enable SBS with it via creation of the /sbs file (for true 3D depth)
- Support left/right hand flipping for the movement and turn sticks
- HUD UI glitches out temporarily when a cutscene ends and/or getting out of vehicles
-
Left Stick - Move / UI arrows
-
Right Stick - Turn left/right
-
Right Stick Up - Switch Weapon
-
Right Stick Down - Melee Attack
-
Left Grip - Jump
-
Left Trigger - Zoom / Scope or ENTER for UI panels
-
Right Grip - Grenade
-
Right Trigger - Shoot
-
Left Click - Crouch (does not move the camera vertical position)
-
Right Click - NONE (WinlatorXR menu)
-
Left Menu Button - Escape / Menu (hold to recenter currently not implemented)
-
X - Switch Grenades
-
Y - Flashlight
-
B - Reload
-
A - Action
A full VR conversion mod for the original 2003 PC edition of Halo: Combat Evolved.
This mod is not compatible with The Master Chief Collection
- 6DoF Synced Stereo view (i.e. VR camera without any AER/3D screen nonsense)
- Tracked controllers
- 6DoF Weapon aiming
- 6DoF Grenade aiming
- Functional PiP scope for appropriate weapons
- Two handed aiming mode
- Rebindable controls (with left handed preset available)
- Motion controlled melee (uses head-aiming)
- Motion controlled flashlight (tap head)
- Motion controlled crouching
- Shoulder weapon holsters (for switching weapons)
- Swapping weapons between hands
- Detached floating UI layer
- Floating crosshair
- Joystick steered vehicles
- Desktop mirror (recommended to use SteamVR's desktop display instead)
- Game sometimes isn't the focused window on launch and inputs/sounds may break when the game is unfocused
- First stage of the tutorial ("look around") doesn't detect headset movement, wiggle the mouse (physically or via steamvr's desktop view) and you should get past it
- Camera behaves weirdly briefly when entering/exiting vehicles
- Reloading a checkpoint made while in a vehicle can mess with the camera position, get out and in again to fix it
- Melee and interact use head aiming rather than controller aiming
- Crosshair only lights up red when looking at an enemy, not when pointing a gun at one
- On screen button prompts display keyboard bindings rather than VR bindings
- If the game is installed in program files the mod config file (and log file) won't generate unless the game is run as administrator
- Occasional stutters can cause motion smoothing to kick in, which is very jarring in vehicles
- Some people report a minor distortion or warping effect when tilting their head side to side.
- Install Halo: Combat Evolved for PC (not Custom Edition) using an original installation CD + product key. IMPORTANT: Install in a directory OTHER THAN Program Files (example: C:\HaloVRMod\Halo). Installing in Program Files potentailly causes numerous permissions-related issues.
- Install the 1.0.10 patch for PC (not Custom Edition)
- (Optional) Install chimera (fixes a few bugs/issues such as entities moving at 30fps). Grab the RELEASE files from releases. Copy chimera.ini, strings.dll, and the fonts folder from the chimera zip after unzipping and place into your halo game folder in the same location as halo.exe.
- If using chimera: open chimera.ini, locate the "Font Override Settings" section, and change enabled=1 to enabled=0 (failing to do this will break many UI elements in VR)
- Download the latest version of this mod from the releases page
- Extract HaloCEVR.zip and place the files in the same directory as the halo executable (You should see a VR folder, openvr_api.dll and d3d9.dll if done correctly - if you do not see these files your antivirus may be interfering)
- Launch the game once to generate a config.txt file in the VR directory
- If setting LeftHanded=true in the config, consider selecting the left handed controller bindings in the game's SteamVR controller bindings page if you want the sticks to also be swapped
- Go play the MCC version instead
- Delete/rename the d3d9.dll you placed in the same directory as the halo executable (this contains all of the mod code and is only pretending to be d3d9 to trick halo into loading it). For example, you could rename it to d3d9-backup.dll.
Dsoal allows you to turn on hardware acceleration and EAX in Halo without requisite hardware to use environmental sound effects like reverb and HRTF, providing realistic, locatable 3D sound with high accuracy for virtual reality. Highly recommended, and you do not need high-fidelity headphones to enjoy this.
Note: Chimera is required for reverb on first person sounds. First person sounds have no stereo/HRTF/location effects.
- Download and extract from https://github.com/ThreeDeeJay/dsoal/releases/download/0.9.6/DSOAL+HRTF.zip
- Open the DSOAL+HRTF\Win32\ folder.
- Copy & paste all files from Win32\ (alsoft.ini, dsoal-aldrv.dll, dsound.dll) into your Halo\ install folder where halo.exe is located.
- Edit alsoft.ini and copy & paste the settings shown below:
hrtf-mode = fullmay or may not be CPU intensive, remove if you experience new performance issues.- Launch Halo and go to Settings >> Audio Setup. Make sure Hardware Acceleration is set to Yes and Environmental Sound to EAX.
[general]
channels=stereo
frequency=48000
stereo-mode=headphones
cf_level=0
sources=512
sample-type=float32
hrtf=true
period_size=960
hrtf-mode = full
[reverb]
boost=-6
Chimera increases animation framerate, corrects fog, enables anisotropic filtering, enables reverb for first person sounds (requires dsoal), and boosts polygon count, object limit, and draw distance. But is highly recommended for bug fixes and QOL changes alone.
See installation instructions above. If you installed chimera, there is an enhancement not enabled by default. You can execute a console command chimera_model_detail 8 to reduce pop-in and low detail models (lods). There are several ways to do this.
-
You can bring up the in-game console with tilde ~ key, but it helps to disable the VR mod by temporarily by renaming d3d9.dll to something like d3d9aa.dll so you can see the console.
-
Or, executed console commands are saved and read from a text file. You can create this file yourself:
- Navigate to (Your User Folder)\Documents\My Games\Halo\chimera\ and create a text file named preferences.txt
- Edit your preferences.txt and add
chimera_model_detail 8
- Or, If you want this command and other preferences to be portable and travel with your Halo installation:
- Create a new text file named chimera_preferences.txt in the Halo\ folder alongside chimera.ini
- Edit Halo\chimera.ini
- Adding
chimera_model_detail 8into chimera.ini will not work. - chimera.ini disables lines with a semi-colon
; - Find
exec=and remove any semi-colon on that line, such as;exec=. - Set the value to
exec=./chimera_preferences.txt - Add
chimera_model_detail 8into chimera_preferences.txt
A Community project that restores many graphical effects present in the original Xbox version by replacing Halo's map files. Fixes issues such as invisible bumpmapping, missing specular, broken transparency effects, etc. Also provides some high res asset replacements, most notably an HD HUD.
Halo Refined is poorly tested with HaloCEVR but seems to work, recommended for experimental use. Please keep backups of your original .map files before installing. If you are having any issues with HaloCEVR while using Refined's maps, restore the original files and retest before reporting your issue.
Recent versions require chimera. Refined is designed with dgVoodoo2 and CEnshine in mind to fix even more effects, but these are tools and modifications can't be used with HaloCEVR.
- Download and extract the latest distribution for Retail, not Custom Edition
- Backup all files in Halo\maps\ by copying them to a different location
- Replace files in Halo\maps\
- (Optional) Read Halo\maps\info.txt for project information
Download, updated as of the time of writing: https://www.proxeninc.net/Halo/Refined/
Mirror, outdated as of the time of writing: http://vaporeon.io/hosted/halo/refined/
Short answer: skill issue.
Long answer: This mod my first time attempting to reverse engineer and mod a close sourced game engine requiring learning how to decompile, analyse and patch x86 assembly. As you may guess, this is hard. By focusing on an older title I have a simpler project to work with as I do not have an additional 2 decades worth of updates and advances in technology to worry about.
(For example, no dual classic/aniversary graphics, no MCC launcher application separate to the halo1 game code, DirectX9 rather than DirectX11, x64, simpler code layout with few virtual functions to follow (which I struggled to analyse in Ghidra).
No.
This mod is intended to only be used with legitimate copies of Halo: Combat Evolved with the official 1.10 patch. Fortunately the product keys aren't single use, so if you can find a second hand copy (or a friend/person on the internet willing to lend the copy they happened to archive 20 years ago) you can use that without worrying about the key being invalid.
This mod was designed for singleplayer, it is untested in multiplayer and as such some features, such as weapon aiming, may not function or only work for the host.
Also it does not work in Co-op because this version of the game does not have that mode.
Yes, although there is no guarantee that mods/custom content designed for custom edition will be compatible with vr.
No.
More or less.
Maybe, if they do not change the underlying structure of the game in a way that interferes with the VR mod. The focus of this mod is making sure the base game works in VR.
Make sure the game window on your desktop is in focus (switch back to desktop view and click on the window). If that does not work make sure you're actually using a SteamVR runtime.
A very few users have reported reinstalling SteamVR helps. Not sure why. Triple check your anti-virus is not blocking anything. If you still have trouble join the flat2VR discord, find the hvr-join channel, and post about your issue, including as many details as possible about your system and what you have done to install. The community may be able to help you.
Either play through this initial part of the game in flat screen, or walk over to your computer and wiggle the mouse and it should get you past this point.
Which config.txt file do I use to make changes to VR settings? What if I am making changes but don't see changes in game?
The one found in the "VR" folder after install and after you run the game once in VR. If you are not seeing changes you make take effect in game, then chances are you disregarded the instruction not to install in Program Files. You can try running in administrator mode to make the edits but safer to just install Halo and the mod in a new location.
By default tapping your head with an empty hand will toggle the flashlight, you can adjust the radius this triggers at and which hand to use in config.txt. Alternatively there is an optional binding you can configure in SteamVR's controller bindings page to toggle it directly.
By default swinging either controller vertically with enough speed will trigger a melee attack wherever you are looking. If preferred there is a controller binding that is unset by default you can configure instead.
By default, you can switch weapons using the shoulder weapon holsters. To do this, hover your dominant hand over a shoulder and press the Switch Weapon controller binding (can be configured in SteamVR's bindings). If you prefer, you can adjust the settings for the weapon holsters or disable them in config.txt to switch weapons using only the controller binding.
You can swap your weapon into the opposite hand by bringing your hands close together and using the SwapWeaponHand binding (This can be configured in SteamVR's bindings). By default, this is bound to the grip button on your non-dominant hand and changes hands depending on whether the weapon is currently in your left or right hand. Whilst holding a weapon in your left hand the left handed SteamVR Action Set Bindings will be used. The distance required between hands can be configured in the config.txt file or the feature can be disabled.
Go to the VR config.txt file and change SnapTurn = false. You can also adjust turning speed with SmoothTurnAmount.
By default movement is in the direction the player's head is facing. If you would like to use hand-directed movement, open the VR config.txt file, and find these lines:
HandRelativeMovement = 0
//[Float] Hand direction rotational offset in degrees used for hand-relative movement (Default Value: -20)
HandRelativeOffsetRotation = -20
Change HandRelativeMovement to 1 for movement to follow your left hand direction or 2 for movement to follow your right hand direction.
Open the VR config.txt file and change "ShowCrosshair" to false - "ShowCrosshair=false"
Halo internally runs a lower tick rate (I believe it is 30fps) and only interpolates the player camera, this makes things feel jittery when driving vehicles. To fix this install chimera, as they have fixed this issue along with many others. If you still experience intermittent stuttering on vehicles it may be due to the motion smoothing kicking in and locking the frame rate to 45 for a few seconds, you may experience smoother results by disabling it.
No, this mod is exclusively for SteamVR since it is the only runtime to support 32bit applications to my knowledge. This means you need to choose the SteamVR runtime in your VR software if available. For example, with Oculus Link you need to make sure you have SteamVR running, or with WMR you need to use the SteamVR runtime.
Stand up straight (or sit up if playing seated) and hold down the menu button for 3 seconds to recentre the camera to your current physical position.
By default you crouch in real life. If you do not prefer that, change the option in the config.txt file in the VR folder, specifically set CrouchHeight = -1.0 and bind a button to crouch in the SteamVR Input menu.
Use SteamVR input settings to change your bindings to whatever you want. You can also search for other peoples' bindings for your controller in the bindings menu. You can learn how to use SteamVR input by watching this video by HoriZon, who also has bindings available for Quest controllers: https://www.youtube.com/watch?v=rdlCu7IjbGI. It's useful in a bunch of games!
Thank you! See compiling source directions below and submit a Pull Request on Github explaining the changes you have made and impact on other files. Be sure to thoroughly test any changes before submitting them. After others and I test the changes, they may be incorporated into the mod release.
- Clone this repository (
git clone --recurse-submodules https://github.com/LivingFray/HaloCEVR.git) - Run initinstall.bat and enter the Directory and executable name for your halo install (this must be done while visual studio is closed)
- Open HaloCEVR.sln in Visual Studio 2022
- Set the project configuration to "Debug", "Release" or "Emulated-VR" on "x86" (Emulated will create a desktop window showing the VR perspective rather than launching OpenVR, which is very helpful for quick debugging)
- Click "Local Windows Debugger". If done correctly halo should automatically launch with the mod installed and visual studio's debugger attached.
- If this is the first time running the mod you may need to run makerelease.bat after building to generate HaloCEVR.zip. Unzip the contents of this file into halo's directory to install the additional required assets

