Brian Duffy

Work

Memoreum

Released

A sci-fi action horror campaign for standalone VR. I joined as a contractor, was quickly promoted to lead developer, and wrote 77% of the code in the shipped game.

Close quarters with an enemy in a dark corridor

Summary

Memoreum is a sci-fi action horror campaign that Patient 8 Games released on Meta Quest in October 2025, after four years in development. It has since been patched to version 1.16. By standalone VR standards it is a large game, with 119 scenes across 17 connected areas, fifteen enemy types and a branching save system.

I joined as a contractor and was quickly promoted to lead developer. Until the final year of production I was the only programmer on the project apart from audio. Measured line by line, 77% of the code in the shipped game is mine: about 59,000 of its 76,000 first-party lines, across 26 systems.

Launch trailer. Plays from YouTube.

The problem

Standalone VR is one of the hardest targets in games. The headset is a mobile chip worn on the face, it has to hold its frame rate or players feel physically unwell, and it has a fraction of the memory a PC game can assume. Almost every technical decision on this project followed from that.

The game also had to be big. A short, contained VR experience can sidestep most of these problems, but a seventeen-area facility with a branching save system cannot.

What I built

I wrote most of the game’s code outside art, writing and audio: the save and serialisation system, level streaming and the addressable content architecture, the weapon framework, VR player movement and interaction, animation programming, the enemy AI foundation and squad coordination, the progression and unlock systems, the in-game tools and puzzles, and about six thousand lines of custom editor tooling for problems the production kept running into.

Four of those are worth describing in more detail.

Failure that is survivable. In a long single-player game, a corrupted save can cost a player twenty hours. So the save system validates and repairs rather than trusting: damaged or out-of-date files are recovered where possible, and where they are not, the player is told so honestly instead of the game crashing on load or quietly wiping a run. The save format is version-tolerant by design, so shipping a patch does not invalidate saves written by the previous build.

The hardest part was restoring weapons. Guns in this game are physical objects you handle: magazines you push in, chambers that hold individual shells, break actions you swing open. Restoring a save means re-spawning each weapon and then driving its physical state back to what it was, waiting for the VR physics to settle before each step. It takes a lot of machinery to make loading a game look like nothing happened.

Streaming a large world onto a mobile headset. The 119 scenes load as addressable references, with content split into 37 area-scoped bundles so that memory stays bounded to the part of the facility the player is in. A transition fades the world out, streams the next area behind a progress bar, waits until the graphics are genuinely ready rather than merely loaded, and then hands control back. Getting that readiness check right is the difference between a clean transition and a lurch.

Holding frame rate. Enemies switch themselves off at distance, coordinated centrally on a slow tick rather than each agent thinking every frame, and doors act as occlusion boundaries so the headset never renders rooms the player cannot see.

Accessibility. The game has a complete left-handed play mode, with every weapon, tool, holster and grab point mirrored and switchable from a setting rather than a separate build. It also has colour-blind filters, seated and standing modes, snap and smooth turning, teleport and stick locomotion, subtitle controls, and automatic height recalibration when the play space drifts. Most VR titles skip left-handed support because it touches nearly every interactive object in the game. This one has it.

Technical detail

The project is Unity 2022.3 LTS on URP, targeting Android ARM64 for Quest, with separate renderer assets for each device tier and around forty post-process profiles, one per area.

The VR layer is built on Hurricane VR, a commercial physics interaction framework, and extends it rather than replacing it. The teleporter, for example, keeps its own overlap sets so that it can raise the trigger exit events Unity does not generate when a player teleports out of a volume. Procedural arms run a FABRIK solver with an explicit elbow-constraint plane and target smoothing on reacquisition. Enemy locomotion synchronises navigation agent velocity with animator parameters through OnAnimatorMove, so that nothing skates.

The AI is a shared behaviour base under fifteen archetypes driving 25 behaviour trees, with a central coordinator handling awareness, sound propagation and distance-based disabling on a configurable tick. Cover positions are claimed through a static registry with distance-keyed reservation and explicit release, so that enemies do not contend for the same doorway.

The save layer gathers and re-applies state across roughly fifteen subsystem managers through a version-tolerant binary format. A pure static validate-and-repair pass raises a corruption event to the UI rather than throwing, and a migration path handles saves written before versioning existed.

The editor tooling exists because a 37-group addressables setup is fragile: bundles break, assets silently duplicate across groups, and references go missing after merges. Backing up, validating and restoring the whole addressables configuration turns a build-breaking accident into a five-minute fix.

Credit where it is due

Nine people committed code to this project. Other members of the team wrote the audio integration, the boss AI, the graphics settings layer, two render features and the shader prewarm system, and all of the art, animation and writing was theirs. Every creature was custom-modelled by the team’s 3D modeller, and by the end most of the environment and prop models were custom too, alongside some licensed packs. The VR interaction framework under my player systems is Hurricane VR.