Sandris
Blocks fall, then shatter into sand. Bridge one colour from the left wall to the right to clear it — chain for combos. Pick a speed (slow / normal / fast / 2×) above the board. After speed tops out, difficulty keeps escalating: wind → colours mix in (harder to clear, worth more) → pentominoes → a 3-colour finale.
RECORDS / LEADERBOARD
Each version × speed × size × colours combo has its own board — switch with the dropdowns. OLD = scores from before this relaunch.
loading…
HOW IT WORKS
Each tetromino falls from the top as a single-colour rigid body. The moment it can't descend any further — floor or existing sand — it shatters in place into a mass of independent same-colour grains.
The grains then obey a cellular automaton: each cell falls straight down if it can, else slides diagonally, else rests. The pass scans bottom-up with an alternating per-row direction, so a grain moves at most one cell per frame and piles settle into natural slopes.
Every frame the board changes, a flood-fill (4-connected BFS) runs per colour: the instant a colour forms a connected path from the leftmost column to the rightmost, the whole bridge lights up and clears (no need to wait for the sand to fully settle — so late game never stalls). Sand above then collapses and can chain — combos multiply the score. Colour count, block size and speed are all adjustable (fewer colours is easier).
Difficulty escalates by level (level rises with clears), with milestones relative to each speed tier's cap: wind first (variable-strength gusts), then colours mix in gradually (a rising probability, not a hard switch), then pentominoes, then a 3-colour finale. Multi-colour pieces draw from a fixed small palette so same-colour clusters are still clearable — this also breaks the single-colour-pyramid idle exploit; the harder multi-colour clears score more. Turbo (2×) is a separate challenge tier with its own leaderboard.
The whole field lives in a single Uint8Array written straight to canvas ImageData (1px per grain, nearest-neighbour upscaled for hard pixels); React only owns the score and overlays.
※ This game collects anonymous per-run stats (speed / colours / level / clears — no personal info) to help balance difficulty.
CHANGELOG
Pick a release from the dropdown.
- New daily challenge: one board for the whole site each UTC day (seed + config derived from the date), a single shared leaderboard (/apps/sand-tetris/daily).
- Server-side replay verification: leaderboard-worthy scores (and all daily runs) are re-simulated from their recorded inputs and rejected if the score doesn't reproduce.
- New spectate lobby: public sessions are listed live; watch by room code or from the list. Spectators need no login; boards are driven live by the relayed input stream (/apps/sand-tetris/watch).
- Solo runs can GO LIVE (manual toggle): broadcasting yields a watch link for live spectators; versus results gained a REMATCH button to replay in the same room on a fresh seed.
- Removed emoji from the UI (monochrome geometric marks ◇/× instead) to match the constructivist HUD style.