v0.1.6 - Crosshair between map loads and color fixes
What Changed
Halo's crosshair has its color back. The world-space reticule has always hosted the game's own crosshair — that's what keeps the hit marker working — but it rendered as a near-black smudge, which is why the mod shipped a colored ring alongside it just so you had something to aim with.
The cause turned out to have nothing to do with the crosshair. An unlit widget's output is still multiplied by the scene's pre-exposure before tonemapping, and in a bright exterior that's roughly a hundredfold reduction — so Halo's authored cyan arrived on screen as black. Nothing about drawing a color hints that the renderer is about to divide it by a hundred. The mod now multiplies it back up before it's drawn, and the crosshair shows the colors the game intended, hit marker included.
The blue ring stays on. It started as a visibility crutch for exactly this problem, so the obvious move was to retire it now that the crosshair works — but playing with both says otherwise. They read differently at distance, and the ring marks the true aim point unambiguously in a busy firefight, so it earns its place alongside the crosshair rather than standing in for it. Its color, size and distance are tunable as before, and aimmesh=0 turns it off live if you'd rather have only the game's crosshair.
Your crosshair survives a checkpoint reload. Hosting the game's crosshair takes it off the flat HUD, and reloading a checkpoint rebuilds that HUD without restarting the level. The mod kept pointing at the widget that no longer existed, so you'd get a frozen crosshair floating in the world while the live one sat back on the flat HUD behind it. It now notices and re-binds.
Known behaviour
The crosshair's brightness still varies with the scene. The correction is a fixed multiplier while the game's auto-exposure is not fixed, so the crosshair reads brighter in dark areas and dimmer in bright ones. It's legible throughout in testing, but if it's dim for your display or your taste, raise aimwidgetgain in halo_vr.cfg — it's re-read while you play, so you can sit in the spot that bothers you and dial it in until it looks right. Lower it if it blows out.
A proper fix — a material that tracks the exposure per frame instead of guessing — is understood and is being worked on. It isn't in this release because the version tested here crashed the game's renderer, and a crash in VR is worse than a dim crosshair.
Credits
elliotttate identified the pre-exposure mechanism behind the dark crosshair. Naming the cause is the hard part of a bug like this — the fix took an afternoon once it had a name, and this release is a direct result. He's running his own independent Halo: Campaign Evolved VR project, HaloCampaignEvolved-UEVR, in parallel with this one; it's worth a look in its own right.
Install
- Install UEVR nightly-01138 and run
UEVRInjector.exeonce so it creates its folders. Older builds will not render this game. - Download
HaloCampaignEvolved.zipbelow. - In the UEVR frontend, click Import Config and select the zip.
- Launch the game flat and wait at the main menu.
- Select
HaloCampaignEvolvedand click Inject.
Inject at the main menu only — mid-mission injection tends to hang or render badly.
Full instructions, the control layout and the calibration guide are in the
README.
Update
Download HaloCampaignEvolved.zip below and use Import Config in the UEVR frontend, exactly as you would for a fresh install. It merges into your existing profile, so there's nothing to delete or uninstall first.
Your calibration is safe — it lives in its own file that the download doesn't contain, so importing leaves it untouched.
If you've hand-edited halo_vr.cfg — snap turn angle, aim tuning, anything — importing replaces that file, so note what you want to keep and paste it back afterwards. It's re-read while you play, so you don't need to restart to put your settings back.
Requires UEVR nightly-01138. Older builds render this game's scene black.
SHA-256 of HaloCampaignEvolved.zip, computed by CI from the exact file attached above:
988B0F6ABB448C1E3A12D315C475A9EB39D0AFA4DFC9A1F2BA77B405B4E5B72C
A local build will hash differently and that is expected — verify against this value.
Full Changelog: v0.1.5...v0.1.6