02 · REVENANTS
Revenants

Asymmetrical co-op AR horror game
The situation
This was a co-op AR game project: two players in the same physical room, one experience, built to be genuinely playable together rather than side-by-side. The concept was an asymmetrical horror escape room — a curse splits the two players' senses, and neither can get through it alone.
Thought process
The interesting problem wasn't the horror theming, it was the coordination problem underneath it: two phones that have never met need to agree, to the centimeter, on where a doll is sitting on a real rug. One phone has LiDAR and can build an accurate model of the room; the other doesn't. Rather than treat that as a limitation, we turned it into the plot — the LiDAR phone becomes the Host and builds the map, the other becomes the Guest and joins that shared coordinate space through ARKit's collaborative session. Once the curse hits, one player goes deaf and gains sight (hidden clues, glowing locks); the other goes blind and gains spatial hearing and haptic guidance. Neither piece of information is useful alone, so the only way through a puzzle is two people standing in the same room, talking out loud.
Engineering decisions
Under the horror skin it's a disciplined VIPER + SwiftUI app on Swift 6 / iOS 18+: Views never talk to ARKit or the network directly, an Interactor owns proximity checks and role logic, and two long-lived services (ARService, NetworkService) sit beneath every screen. Every random decision — frequencies, spawn points, puzzle answers — is computed once on the Host and replicated to the Guest, so two players can never end up seeing two different curses. Transport is a custom wire protocol over Network.framework and Bonjour (deliberately not MultipeerConnectivity): every message carries a 1-byte header saying whether it's a JSON gameplay event or a chunk of binary ARKit collaboration data, with non-critical AR frames dropped once the send queue backs up — a call made specifically so a network hiccup doesn't turn into a broken jump-scare.
My contribution
While building the letter/clue system — a hidden object that the Listener finds by ear before the Seer finds it by sight — I needed spatial audio in RealityKit that respected the actual walls of the room, so a whisper wouldn't just leak cleanly through drywall. There wasn't a simple way to do that. So I built it myself, and open-sourced it as RealityAudio (see below) — that's the piece of this project that exists independently of the game.