SYNTHETICTEACHING FICTION Not a Split Fiction level. Not affiliated with Hazelight or EA.
Mio yaw: A/D or ,/. · Zoe yaw: ←/→ or [/]
Orange wall with N is north (ahead at yaw 0).
T switch shooter · F/Enter shoot nearest threat in shooter's FOV · Num 0 Zoe shoots (denied blip if none) · respawn after 5 s

Set default saves the controls in this browser. Reset restores the built-in values and forgets that save.
Mouse (optional): drag to orbit, wheel to zoom, double-click to reset. No pointer lock.

Dual-listener 7.1 routing demo

PlayCanvas engine (github.com/playcanvas/engine) + Web Audio. Routing is a demo simplification, not a claim that Hazelight ships 7.1 this way.
Audio not started. Browsers need a click before sound can play.
8 output channels W3C order, indices 0–7, measured on the 8-ch bus before the destination. Noise plays pink noise on that one channel only.
Off is Web Audio order. On swaps Ls↔Lsr and Rs↔Rsr on the speaker output, including gameplay and the noise buttons. Saved with Set default.
7.1 speaker map (top view) Logical bus positions (ITU angles). Glow = peak level per channel, pre-swap, same taps as the meters.
Mio only = sources whose direction Mio owns (his half + his share of the C/rear seam) and his shots. Shared music and pink noise show only in Both.
Mixer Mute always silences that layer. If any Solo is on, only soloed layers play.
Walk-in footsteps play only while they are moving in. At the stop radius they stand still and only the attack roar/bite plays. Idle walk does not play once they have stopped. Death and respawn stay on their own row. All of them use each zombie's 7.1 gains, scaled by that listener's distance first.
Scene Even zombies walk in on Mio, odd ones on Zoe. At the stop radius they freeze and only attack. Grid is 1 m, bold every 5.
Count 8 0–16
Gap 12.0 apart
Spawn 24.0 m
Speed 3.0 m/s
Stop 4.0 m
Near 4.0 m
Far 32.0 m
Rolloff 1.0 demo curve
Demo curve, not a published Hazelight formula. Full volume inside Near, quiet at Far. Rolloff 1 is linear; higher drops faster. Level uses the closest listener once. Attenuation circles draw the falloff between Near and Far: brighter rings are louder.
Attack 3.5 s
Roar gap 0.6 s
Mio yaw 0°
Zoe yaw 0°
Shooter Mio
Kills Mio 0 · Zoe 0
Threats az = local azimuth (0 ahead, + right). ◉ in FOV (110°). Level is whoever is closer. Direction is whoever looks at it most (smaller |az|), panned only inside that listener's half: their left/right = inner seam vs outer edge, front/side/rear = that half's front, side, rear speaker. "dir · lvl" only when those are different people.
Mio half: L·Ls·Lsr | seam: C / Lsr+Rsr | Zoe half: R·Rs·Rsr
Mio azZoe azlookowner L R C F Ls Rs Lsr Rsr
Applied ruleFinal output = level from the listener closest to the source + direction from the listener most looking at it (smallest |az|). One 7.1 instance, panned only inside that listener's half: Mio = L/Ls/Lsr + C seam, Zoe = R/Rs/Rsr + C seam. Ownership over width. Music stays shared and centred.
Demo simplificationSplit-phantom pan: the owner's left/right is inner seam vs outer edge of their half, front/side/rear is that half's front, side, rear speaker. The seam is a phantom: C at the front, an equal Lsr+Rsr pair at the rear, so dead ahead of Zoe sits between C and R. Width traded for ownership. The near/far/rolloff curve is not a published formula. Side↔rear swap is only an output-order correction. Meshes, timbres, freeze-at-stop, roar gap, and shots are invented.