Skip to content
ArdaDDemir edited this page Jul 16, 2026 · 1 revision

FAQ

The canvas is blank / black.

Almost always a hidden tab. The scene runs on requestAnimationFrame, which browsers pause for backgrounded, minimised or headless tabs — no frames, no picture. Bring the tab to the front.

If it's visible and still blank, check chrome://gpu for a blocklisted or software renderer, and look in the console for shader errors.

The fish are black silhouettes.

A known trap, and it's in the code as a comment so nobody re-introduces it: the fish GLBs ship no COLOR_0 vertex attribute. Enabling vertexColors on their material makes the unbound colour attribute read (0, 0, 0) — black fish. Per-instance tinting comes from instanceColor, which is independent of it.

If you're seeing this on unmodified main, that's a real bug — please report it.

I drew a line from the fish to the Heart and nothing happened.

A rescue is earned by travel, not by geometry. The fish has to actually swim about two-thirds of your path and arrive at the Heart. A line connecting the two points instantly is not a rescue — it's a drawing.

Also check the stroke started near the fish and mostly moved toward the Heart. A stroke that doubles back, jumps, or scribbles gets rejected. See How to Play.

Only one fish follows my current. Is that a bug?

No — at most one fish answers each stroke, by design. Draw another.

It runs badly.

The scene starts in a cheap "lite" mode and only turns on shadows and bloom once it has watched your device hold stable frames; if it can't, it stays lite and pins itself there. So "it's heavy" usually means the lite tier is heavy, which is worth knowing about — please open an issue with your GPU (the "Unmasked Renderer" line from chrome://gpu).

You can measure it yourself with npm run perf. See Performance.

Where is my progress stored? Can I move it?

localStorage, key luminareef, on your own machine. No account, no server, nothing leaves your browser. To move a save, copy that key's value into the same key on the other browser.

Clearing site data resets the reef. Tide marks, best run and completed runs are the parts designed to survive a reset — but not a wipe of storage.

Can I reset the reef but keep my trophies?

That's exactly what the in-game reset does. Achievements, bestRunMs and runsCompleted are the meta-progression layer and are deliberately kept.

Is there sound? I don't hear anything.

Yes — all of it synthesized at runtime with the Web Audio API, no audio files. Browsers block audio until you interact with the page, so click first.

Does it work on a phone?

Yes. One finger draws a current, two fingers orbit and zoom. The HUD reflows for narrow screens.

Can I add my own fish / rename the gardens / change the colours?

Yes, and most of it is data, not code. See Customizing.

Why is it finite? Why no endless mode?

Because that's the point. Twelve rescues, five gardens, one finale — then it ends and lets you leave. An endless loop would make it a different game, and there are already a lot of those. See CONTRIBUTING.

Clone this wiki locally