Mazing is "carry your light through the maze": the player is an ember in an endless labyrinth whose flame burns down with every step. Sparks rekindle it, a red Ariadne's thread traces every corridor already dared, purple wisps patrol from the third level and devour the flame on contact, and an echo pulse — earned every three sparks — sends a wavefront down the corridors to reveal the way out. Two modes: Descent, an infinite progression of larger and more intricate mazes, and a Daily Maze that is the same for everyone and shareable.
The engine is entirely hand-rolled and self-contained, with no game dependencies at all — maze generation, lighting, rendering, audio and persistence are each written from scratch.
What I built
- Architected a self-contained canvas engine — game, rendering, maze generation, audio, visibility and persistence each their own module — driving the full simulation and render loop by hand, with no external game dependencies.
- Built a per-frame 2D visibility polygon from scratch, so the player's light stops at a wall rather than passing through it — the mechanic the whole game is built around.
- Implemented three maze-generation algorithms (recursive backtracker, Prim's, Kruskal's) plus a braiding pass to remove dead ends, with seeded determinism so the Daily Maze renders identically for every player.
- Wrote WebAudio oscillator synthesis for the game's audio from scratch, with no external sound assets.
- Designed the flame-as-health-bar core loop — sparks, wisps, the echo pulse and the Ariadne's thread — as mechanics that emerge from one resource (light) rather than a separate health system.

