Skip to content

v0.3.0 — Platform Consistency, Audio Fix, In-game settings, Periodic-stutter fixes, Weapon scope preview

Choose a tag to compare

@github-actions github-actions released this 18 Aug 06:56
· 30 commits to main since this release

Lots of changes in this release! The biggest two: platform consistency and fixing head un-leashing.

Survives game updates, and hopefully other stores

The mod used to depend on an address measured from one specific build of the game — correct right up until that build changed, then silently wrong for everyone at once. It now finds what it needs by pattern rather than by position, and switches aim writing off with a clear log line if it ever can't.

Steam patched the game during development and this release kept working untouched. 0.2 is probably broken in some ways now due to the update. Game Pass probably ships a different build: that is untested — nobody here has it — but nothing in the mod stands in the way any more. Reports welcome either way.

It may take slightly longer now for your reticle to stabilize when entering a mission for the first time in a session. I have to look into ways of speeding this up.

Head un-leashing — for anyone who feels the 6DoF is missing

By default your viewpoint is pinned to the game's camera, so physically leaning or stepping doesn't move where you're looking from. A few people have said this makes the game feel like it has no 6DoF, and that's a fair description of what it is. Setting hmdleash=0 in halo_vr_user.cfg genuinely unleashes your head and gives you real positional tracking.

There used to be more issues with this, like shots being way off from the reticle, and the arms not moving with you when you move away from your legs. A good amount has improved for it, but this is still an intermediate measure rather than a finished feature, and the handling around it isn't complete.

Expect issues:

  • You can walk away from your own legs. The game's player doesn't move when you do, so your view can end up somewhere your character isn't.
  • Your shots still come from where your character is standing. They can be occluded by cover you have physically leaned past — you'll see a clear line to a target and the round will hit the wall your legs are still behind. The further you stray from your body, the more this bites, so try not to.
  • Expect to reset your play area semi-regularly to bring everything back into alignment.
  • The scope does not hold up in this configuration. The reticle does not stay centred in the lens once your eye and the shot origin have separated.

Leave hmdleash=1 if none of that appeals — it stays the default for a reason.


What else is new?

Weapon scope — a preview, not a finished feature

It's kinda usable, but has one big issue: various fx do not show through it. Shields not showing in particular are a big problem, and I need to hunt that down. It also does the same thing for every weapon. That means we don't have a separate zoom setting for snipers, and it's mainly been positioned to work with the magnum.
Left trigger raises a magnified lens on the gun, aimed down the ray the weapon actually points along. It is on by default because what it replaces is nothing: left trigger previously did essentially nothing on foot. scope=0 turns it off and gives the trigger back to the game.

In-game settings menus

Open the UEVR overlay (Insert, or both thumbsticks) and find them under Script UI:

  • Halo VR User Settings — every player setting, grouped, with its documentation as tooltips and overridden values marked. Saves to halo_vr_user.cfg and applies live in about two seconds. I do not know what happens if you edit the cfg directly and then mess with it in UEVR menu.
  • Halo VR Calibration — both calibration gestures as buttons. Though the keyboard way is still much easier honestly. I just wanted to try this out and might improve it in the future.
  • Halo VR DEV Settings — research knobs, behind a warning. Honestly, don't touch this unless you really know what you're doing.

Fixed broken controls and visible t-posed arms at the start of the game!

It used to seem like the mod wasn't working at the beginning of a game until you got the magnum. Now the proper controls are applied, and the hands are properly hidden in the beginning.

Objective and waypoint markers are now accurate

They were positioned against the game's flat view, which the mod steers with your hand, so they drifted with your aim. They are now drawn in world space. Nicest one to me is having a way to track co-op partners through walls again.
They are just icons for now though. They don't contain distance info. Using live widgets had some challenges, so I figured I'd do the next best thing. I may need to add a transparency parameter for them though. I think the objective waypoints can get in the way a little currently.

Sound follows your head

Positional audio was spatialized against the game's camera rather than your headset, so turning your head left the sound field behind. The listener now rides your head, and stands down in vehicles and cutscenes where the game's camera is what you see.

World objects stop vanishing when you aim away

The game decides what stays loaded partly from where your aim points rather than from where you are looking. With motion controls those are no longer the same thing, so sweeping your hand away from something could make it disappear while it was still right in front of your eyes.

The proper fix is to key those calculations to the headset instead of the aim. That proved genuinely difficult — the engine's own head-based relevancy settings were tried and simply do not govern this — so for now it is solved bluntly: the distance at which things are culled is raised far enough that what you would notice stays loaded.

The default is culldist=40000, which is 400 metres. Add that line to halo_vr_user.cfg to change it: raise it if you still see things pop out, lower it to claw back performance. It is worth knowing this is the one setting here with a real frame-time cost, since nothing inside that radius is distance-culled any more. cullfix=0 turns the override off entirely, and a restart then returns the game to its stock behaviour.

Note that neither key is listed in halo_vr_user_reference.txt — the catalog of player settings — so do not go hunting for them there. Type the line in yourself and it works exactly the same; the mod reads any key from any of its config files. They will be added to the catalog properly next release.

Not fixed by this: creatures and animations that freeze when you aim away from them. That is the same aim-keyed system on a different axis, and it is still being worked on.

Vehicles hand the camera over immediately

On boarding instead of after three quarters of a second of your hand still swinging the view.


Performance

Seven fixes, from two independent passes over the same code. If you felt a regular stutter every couple of seconds, this is that.

Three were found and fixed by @blindcowboy24 — measured rather than guessed, in the first direct outside code contribution this mod has had. The config files were re-read from disk every ~60 ticks forever: normally imperceptible, but 143.9 ms when the disk was busy. Two full-object scans rebuilt a text string for every one of ~296,000 objects, going from 83.9 ms to 29.8 ms and from 78.5 ms to 21.4 ms. Worst plugin stall during play dropped from 84 ms to 27 ms.

Four more came out of reviewing that work. Two further scans could repeat forever if what they looked for was never found — the shape of bug that collapses a frame rate the day a game patch renames something — and now ration themselves and give up with a log line. A diagnostic left running on the render path is gone from release builds, and the reticle's per-frame trace no longer allocates memory every tick.


⚠️ Before you update — your settings move

Save your halo_vr.cfg first if you edited it. Until now that was the file you changed settings in. It now ships with the mod and carries only the weapon calibration, so the update overwrites it and any edits you made there are lost.

Copy the lines you changed out of it before updating, then paste them into halo_vr_user.cfg afterwards. That file is yours: updates never touch it, and deleting it resets everything to the built-in defaults. Every setting name is unchanged, so a copied line works as-is. The full catalog with every default is halo_vr_user_reference.txt next to it — or just use the new in-game menu.

Distance settings are now centimetres, not metres

Matching Unreal's own world unit. If you carried any of these over, multiply by 100:

Key Old (metres) New (centimetres)
hmdleashlat 0.30 30
hmdleashvert 0.25 25
cuthintdist 1.8 180
cuthintdrop 0.75 75
cuthintw 1.1 110

You are unlikely to be bitten even if you forget: a value implausible as centimetres is recognised as an old metres value, scaled, and reported once in the log. Read literally, hmdleashlat=0.30 would mean a 0.3 cm bubble — a harder leash than intended, which would present as "the setting does nothing" rather than as a wrong number.


Install

Unzip into %APPDATA%\UnrealVRMod\HaloCampaignEvolved\, then inject with UEVR at the main menu. Mid-mission injection is unreliable. See the README for the full setup and the known-issues list.


SHA-256 of HaloCampaignEvolved.zip, computed by CI from the exact file attached above:

334CDA58992E8CD2B8664017103700C0A160496983AD495BF3C4E22A8BEEAA31

A local build will hash differently and that is expected — verify against this value.

Full Changelog: v0.2.0...v0.3.0