The one move you have
Tetris gives you rotation. Columns gives you something stranger and, once it clicks, better: the piece is always a vertical column of three, and the only thing you can change is which gem is on top. Cycling shifts all three round.
That constraint is what makes the game. You are not fitting shapes together, you are choosing which of three jewels to leave at the bottom of a column — and the other two are going to land on top of it whether they help or not.
Chains are where the points are
Clearing three jewels is worth very little. What is worth something is clearing three so that what falls into the gap makes another three, and that makes another. Each link multiplies the whole score, so a four-link cascade is worth far more than four separate clears.
It changes how you play almost immediately. The greedy move — take the match in front of you — is usually the wrong one. You end up deliberately stacking near-misses and waiting for the jewel that collapses the lot.
Telling the jewels apart
Each of the six gems has its own cut as well as its own colour: an octahedron for the ruby, an emerald cut for the topaz, a trillion for the citrine, a brilliant for the emerald, a cushion for the sapphire, a hexagon for the amethyst.
That is not only decoration. A matching puzzle that signals only in colour is unplayable for a good number of people, and roughly one man in twelve has some form of colour blindness. Distinct silhouettes mean the board can be read by shape alone — and it reads faster for everyone else too.
Controls
| Key | Action |
|---|---|
| ← → | Move the falling column |
| ↑ or Space | Cycle the three jewels |
| ↓ | Drop faster |
| Enter | Drop all the way |
| P / M | Pause / sound |
There is an on-screen pad as well, so it plays on a phone.
Where Columns came from
Columns was written in 1989 by Jay Geertsen, an engineer at Hewlett-Packard, and released for the Macintosh. Sega licensed it, put it in arcades in 1990, and then shipped it on the Mega Drive, Master System and Game Gear — where, as the Game Gear's pack-in title, it reached far more people than the original ever did.
The flashing magic jewel, which takes every gem of whatever colour it lands on, came with Sega's version rather than the original. It is in this one because a game this tight benefits from one piece that can rescue a bad board.
How it's put together
src/board.js— the rules: matching, gravity, chains, scoring. Deliberately contains no three.js at all, which means it can be tested on its own.src/gems.js— the six cuts and their materialssrc/audio.js— every sound, synthesised through WebAudiosrc/main.js— the well, the falling piece, clear animations, input and HUD
Keeping the rules separate from the rendering is the only structural decision here that really mattered. Match detection across four directions, with runs that overlap and cascades that have to settle before the next check, is the part that is easy to get subtly wrong — and it is far easier to be sure about when it is a grid of small integers you can test at a command line, with no browser anywhere near it.
Running it yourself
ES modules need to be served over HTTP rather than opened from disk:
python3 -m http.server 8137
Then open http://localhost:8137.