A 15-second loop. Nine lives. One way out.

▶ Play it right now — no install: game.opxz.dev Desktop browser, sound on — every note you'll hear is synthesized live. Move ← → / A D · jump ↑ / W / Space · R rewinds the loop · Esc pause · M mute.

Title screen — THE NINTH ECHO

Inspiration

Cats have nine lives — and time-loop games make you spend lives anyway. We fused the two: what if dying or rewinding didn't just reset the room, but left behind a ghost of you that replays your exact run, input for input — and every puzzle demanded cooperation with your own past lives? The glowing dark borrows from Hollow Knight; the narrator telling your story in past tense owes a debt to Prince of Persia; the ending you must choose, to Infamous 2.

What it does

You are a cat trapped in the Loom, a machine that broke time. Each chamber runs a 15-second loop. Press R and the world rewinds — but a life stays behind: an echo that repeats your last run exactly. Echoes hold pressure plates, shove crates, and stand in spike pits so the current you can walk through doors they keep open. Nine lives per chamber. Spend them wisely.

An echo holds the floor plate while you climb

Thirteen levels descend through five biomes — ten puzzle chambers, each teaching the loop a new trick (holding, chaining, weighing, sacrificing, ascending, marching, and one genuine paradox), plus three traversal-only passages — THE DROP, THE SEAM, THE VEIN — with no puzzle, no timer, and no life count, so each change of colour lands on a held breath.

The atlas — thirteen levels descending through five biomes

Wrapped around the puzzles is one continuous folktale told in two voices: THE LOOM taunts you in gold uppercase, while a lowercase narrator tells your tale in past tense — and at Canto IX reveals itself as the First Cat, grieving the machine humans built to steal its gift. Thirteen petrified husks speak their epitaphs when you stand close. Before the finale, a vigil: every life you spent stands up out of the floor and walks in beside you.

A canto card — the Loom's gold voice against the narrator's

Then the boss — the First Cat — fought entirely with the loop itself. Three seals must be held at once, and two sit directly under its sweeping gaze, so the echoes you park there burn off unless you time each drop against the sweep. The exit only holds open in the gap between strikes.

The First Cat mid-sweep, beams crossing two held seals

Three endings — break the Loom, stay inside it, or a hidden third locked behind assembling the Claw of the First Cat from three shards hidden across the descent.

And you are never alone. Clear a chamber and your winning run uploads — three arcade letters and all. Other players then watch your golden echo cat solve the room beside them, live, and race your time on the per-chamber leaderboard. A whole run is a few hundred bytes, because…

How we built it

…the simulation is deterministic, and determinism is the game. The core is a fixed-timestep 60 Hz simulation in dependency-free vanilla JavaScript: input is recorded per tick as a bitmask, and a ghost is just that byte array replayed through identical physics in an identical tick order (boxes → ghosts oldest-first → player → plates/doors). No randomness, no wall-clock, no physics library. That one property pays for everything: local echoes, the rewind cinematic (your actual history played backwards), online echoes that replay byte-exact on a stranger's machine, and automated playtesting.

On top sits a three.js WebGL presentation layer — bloom, dynamic point lights, depth-extruded chambers, particles, a camera that leans toward the cat — which only reads sim state, so the visuals can never desync a replay. The cat itself is pure code: bezier tail, squash-and-stretch, blinking, drawn to a canvas texture billboarded into the scene. Leave it alone and it sits down.

Every sound is synthesized at runtime with WebAudio — zero audio files. All five biomes play the same motif over the same chord shape, but root, interval colour, timbre, filter, and pacing are re-tuned per biome, so the score darkens as you descend: a rain-blue triangle wave at the top, an ember sawtooth at the heart, and a tritone in the sub for the finale.

Online play is a small Node/Express service behind Caddy on our own Google Cloud VM at game.opxz.dev — systemd-managed with JSON-file persistence and a Firestore mirror, so the demo can't die mid-judging. Remote echoes replay inside a sandboxed shadow world; they can never touch your puzzle.

Challenges we ran into

Determinism is unforgiving. One tick of divergence and an echo misses its plate three runs later. We locked the update order and kept every simulation step free of randomness and wall-clock time.

Level design was the other beast. Several "obviously fine" rooms turned out to be geometrically impossible — one wall was 90 px tall against an 82 px jump. So we built a bot that drives the real physics through full multi-ghost solutions and machine-proves every room solvable:

bun run proof   # 13/13 chambers proven, non-zero exit on regression

That proof then convicted our own boss fight. In the first version every seal sat outside every beam column — three echoes could park and open the exit before the first lethal window ever arrived. The gaze threatened nothing. Rebuilt, two seals now stand inside beam bands: each echo must arrive after that band's second strike and is burned off by its third. The door is only held open between ticks 613 and 740 of the 900-tick loop, and the proven clear squeaks through at tick 717.

Accomplishments we're proud of

The proof ships in the repo and gates the game — including the finale, which the bot must clear through the gaze schedule, not around it. The simulation core is byte-exact enough that a stranger's few-hundred-byte recording replays perfectly on your machine — that is the online feature. And the whole thing — engine, thirteen levels, a folktale in two voices, three endings, a synthesized score, online play — was built in one two-day sprint.

What we learned

Record-and-replay is a superpower: make the simulation deterministic and you get ghosts, rewind cinematics, and automated playtesting nearly for free. And the automated playtest turned out to be a design critic, not just a regression test — it was the bot, not us, that noticed our boss couldn't kill anything.

What's next

More paradox rooms (echo-vs-echo interference is barely explored), a speedrun timer, and touch controls.


Ten chambers. Three passages. Nine lives. One cat. Go down. game.opxz.dev

Built With

Share this project:

Updates