District M
- ( VR skating )
- ( Rhythm )
- ( Quest )
A VR skating game. You grind rails and pull tricks in time with a music track, through a stylised festival world. Eight test levels shipped against a planned thirty, released free with an open Discord so we could watch real players before committing to the full build.
The loop
Ride the line, time your grinds and gestures to the beat, chain a combo, then run the level again for a cleaner score.
Comfort under constant forced motion
The genre needs continuous movement, the one thing VR comfort guidelines tell you to avoid, and teleporting is no help when movement is the game. So we handled it structurally. The player stands on a visible board, which gives the inner ear something fixed to hold onto. The track is a rail, so motion is predictable. Roll is locked off. Speed is sold through particles in the periphery, not camera effects. Watching a body move in third person is also easier on the stomach than having your own head dragged through space.
Beat accuracy against variable audio latency
Rhythm games need tight audio and visual alignment, and Quest fights you on it: rendering adds latency, and a player wearing Bluetooth headphones can add a couple of hundred milliseconds without knowing it. We run the beatmap off the audio hardware clock, not frame time, spawn notes early enough that the visual lands on the beat, and grade the hit windows so small drift costs points and never feels broken.
Level geometry is the beatmap
In Beat Saber a note is a cube. Here a note is a rail, a gap, a ramp, so writing the chart means building geometry. Thirty levels of that is a throughput problem, so we built a spline tool. The designer draws the track curve against the waveform and the rail mesh generates on the beat grid. Music data stays separate from geometry, so a level can be retuned without rebuilding it.
Tricks with two controllers and no feet
Without foot tracking, tricks have to live in hand and head motion. That means gesture recognition tuned for fast, sloppy input (direction and velocity thresholds, not shape matching), clear signposting of what to do next, and haptic and audio confirmation so players learn by feel.
Frame budget at 72 Hz
At 72 Hz you have roughly 8 to 11 ms of GPU time per frame, and moving fast means new geometry constantly entering view. The flat, stylised art direction is a performance decision as much as a visual one: cheap shaders, baked lighting, atlased textures and instancing to keep draw calls down, and track segments pooled and streamed ahead of the player.