Play it: gorgekara.itch.io/the-cooler — runs in
any modern browser, no install.

Tic-tac-toe is a solved game. Two competent players draw, every time, forever. That is
usually where the conversation ends — which is a shame, because the problem isn’t the
board. It’s that we keep asking the board to decide who wins.
The Cooler takes the win condition away from it. The opponent has HP, and the nine
cells are just the machine you use to hurt them.
It shipped as Tick Tac Card, which described the mechanic and nothing else. A cooler
is the house’s answer to a winning streak — the deck that has been seen to, or the man
they sit down across from you when the night has gone your way for too long. There are
thirty-two of them in the building, which turned out to be the game the thing had grown
into.
Every line is a poker hand
A tic-tac-toe line is exactly three cells. A deck is 52 cards. Those two facts fit
together with no seam at all: play cards into the grid, and every completed line gets
scored as a three-card poker hand.
| Hand | Chips | Mult |
|---|
| Straight flush | 80 | ×6 |
| Three of a kind | 60 | ×5 |
| Straight | 45 | ×4 |
| Flush | 40 | ×3 |
| Pair | 25 | ×2 |
| High card | 15 | ×1 |
Damage is (hand chips + the cards' own chip values) × mult. So 7♠ 8♠ 9♠ is
(80 + 24) × 6 — 624 before anything else gets involved.
Note that a straight beats a flush. That’s correct for three-card poker, where
three to a run is rarer than three to a suit, and it is the exact opposite of the
five-card ranking everyone already has memorised. It’s a small thing that quietly pays
out to players who know the difference.
Suits carry their own trigger, so a flush stacks three of the same one:
| ♠ | ♥ | ♦ | ♣ |
|---|
| +1 Mult | Heal 2 | +$1 | Draw 1 |
Every card in your hand now pulls in two directions at once: where it goes, which is
the tic-tac-toe game, and what it makes, which is the poker game. Those two answers
are rarely the same cell, and that tension is the whole design.
The fork is the bridge
Here’s the part that makes the fusion work rather than just co-exist.
Because three-by-three is a draw under perfect play, a decent opponent blocks every
single threat you make. One line at a time gets you nothing. But a fork — one card
completing two lines simultaneously — scores both, applies a global ×2 on top, and is
the one thing a perfect blocker has no answer to.
That’s not a bonus mechanic bolted on. It’s the same double-threat that has always been
the only way to actually beat someone at tic-tac-toe, except now it’s also your biggest
damage spike. The old game’s one real tactic became the new game’s signature combo.
Nothing ever stalls
Completing a line detonates it: the line scores, deals its damage, and those three
cells clear. The board empties as fast as it fills, so it can never lock into the
nine-cell stalemate that makes tic-tac-toe boring — and cells are a renewable resource,
not a countdown.
The opponent, meanwhile, doesn’t score hands at all. Their lines deal flat damage by
tier, scaled by a per-opponent pressure multiplier. You’re a scoring engine; they’re a
clock. Keeping those two on separate scales means their difficulty can be tuned without
touching your power curve.

The board can do the arithmetic for you
Pick up a card and every legal cell can answer three questions at once: what it would
score, where it sets up a fork, and — the red ! — which cell the opponent
completes into next turn and the worst it could cost you.
Those numbers aren’t estimates. They run through the same scoreLine the real hit uses,
charms and enhancements included, so the figure on the cell is the figure the count-up
lands on. In the screenshot above the held 9♠ shows 936 on the bottom-left cell:
(80 straight flush + 7 + 8 + 9 chips) × (6 + 3 for the spades). That’s arithmetic you
could do yourself with everything already face-up, which is exactly the kind worth
handing over.
It is off by default now, which is a reversal. Fully annotated, the board stops being
a thing you read and becomes a thing you compare, and the fork — the one idea the whole
game is built on — arrives as a label rather than as something you spotted. So the
default is a bare table, the setting has three steps (off, the damage figure alone, or
everything including hand names and fork setups), and the tutorial always runs on full
hints, because half of what it teaches is how to read them.
The run
Eight rooms of four fights — 32 in all. Four archetypes hold the difficulty curve and a
cast of ten characters fills the seats, so the Padre who takes your money on the third
floor is the same man, promoted, on the sixth.
The scaling is steep. The first boss has 2,000 HP, hits at ×1.5 pressure and blunders 6%
of the time; the last has 11,644 HP, hits at ×3.11 and blunders 0.4%. Your ceiling
has to climb with theirs, so clearing a room grants +20 max HP and a full heal, charm
and hex slots open on a schedule, and there’s a shop between fights selling charms, card
enhancements and consumable hexes — 40 charms, 17 hexes and a shelf of enhancements now.
The interesting ones carry a real cost: Glass Cannon triples your mult and doubles the
damage you take, and The Cooler itself gives ×2 Mult on every line but scores only the
best half of a fork, which makes it the exact anti-charm to Fork Master. A charm with no
drawback isn’t a decision, it’s just a number going up.
Health used to keep climbing past that — the last boss held nineteen thousand at one
point — and a fight that size is not harder than half of it. The opponent’s play has
already saturated by the fifth room, so the extra ten thousand buys twenty more turns of
a decision you have already made. Long is not hard.
The building is different every time
The ladder used to be a fixed corridor: room three was always scorched earth, so the
fiftieth run walked the same thirty-two fights as the first. A run now draws a seed,
and the seed decides two things.
The boss rules are shuffled. Every room gets one and a run sees each exactly once —
a Fisher–Yates shuffle rather than a per-room hash, because hashing room to rule
independently gives a run that meets scorched earth three times and never sees the short
hand, which reads as the game forgetting its own content rather than as variety. The
eight: sealed corners, a centre that keeps slamming shut, scorched earth, a short hand, a
hot cell worth double, a bleed, a double dealer, and a tax on every line they land.
One regular seat per room is an elite from the third room on — a regular handed one
of the milder boss rules, more health, more pressure and a bigger purse. It breaks the
three-warm-ups-and-a-boss shape every room otherwise had.
On top of the seat, every face carries a quirk of its own: the Docker hits a third
harder and never blocks, the Black Widow bleeds you from every cell she holds, the Padre
takes back a tenth of every line you land on him. The seat keeps the curve; the quirk
belongs to the person, so meeting someone twice teaches you something usable. Two of the
ten are read straight by the AI rather than implemented as events, because “never blocks”
is a search parameter and not a thing that happens.
And beating the building opens the next rung of a five-step stake ladder, one at a
time and only by winning. Every knob a stake turns is a number some other file was
already reading, so no stake asks you to learn a new rule — the appeal of a difficulty
ladder is that you already know the game and it has stopped being enough.
Three build notes
There are no image assets in the project. Not one. Every card, every suit glyph, the
felt, the trapezoid board, the opponents’ portraits, the bar behind them — all drawn
procedurally with Phaser Graphics and Unicode. Sound effects are synthesised too:
oscillators and noise buffers with envelopes, no sample files. A scoring run climbs a
semitone per beat, which is most of why a count-up feels good.
The rules don’t know Phaser exists. Everything in src/game/ — cards, board, hand
evaluation, scoring, charms, hexes, quirks, the AI, fight resolution — imports no engine
code at all. That one boundary buys two things that would otherwise be painful: 240 unit
tests that run in milliseconds with no canvas, and a balance harness that plays whole
runs headlessly through the real Fight and the real AI, off a seeded RNG so the same
seed reproduces the same numbers exactly.
The desktop build is served, not opened. The same bundle is wrapped in Electron for
Mac and Windows, and almost all of the wrapper is one decision: it goes over a custom
app:// scheme rather than off file://. Two things break otherwise and both fail
quietly — fetch refuses file://, so the music never loads, and localStorage is
keyed to an origin that file:// barely has, so a player’s saves can evaporate when the
install path changes. A smoke test launches the packaged app, asks the page whether
storage round-trips and whether the music actually arrived, and exits non-zero on any
console error, because “the packaging config compiles” and “the game runs when packaged”
are unrelated claims.
What the harness caught
The balance harness is the reason I trust the tuning at all. It runs scripted policies —
one that builds forks, one that greedily takes the best line it can see, one that places
blindly — and the gap between the first two is the number that matters. Balance changes
get measured there before they get written into the game.
The important change was measuring whole runs rather than single fights. Per-fight
win rates are read from full health and badly overstate the run: HP carries across all
thirty-two opponents, and a 70% fight played at half health is not a 70% fight. Three
findings only showed up once the harness played the ladder end to end.
The Padre was unkillable. His quirk healed 2% of his own max health per line, which
reads like a small number and is really a flat toll that grows with the room: by the
sixth-room boss he took back 156 whatever you hit him with, so any build landing under
that could not kill him — not slowly, but never. He posted a 0% win rate from the third
room on. Keyed to the damage instead, he always loses nine tenths of every hit and is
beaten in a bounded number of lines. Three tests pin that property now, because it is not
visible by reading the rule.
The purse was shaped backwards. Players walked into the first five rooms holding $4,
$1, $1, $2 and $11, and into the last three holding $59, $136 and $225 — broke through
every room that could still kill them, and rich once their build was settled and the
slots were full. A quarter of all runs ended at the first boss, four fights and about
fifteen dollars in.
The shop is load-bearing, and so is knowing what to buy. Buying nothing clears 0% of
runs. Buying at random clears 0%. Following one fixed shopping list, defence first,
clears 37% — and a policy that never forks clears 0% even buying to the same plan.
Forking isn’t a bonus; it’s the skill the whole ladder is built around.
It started as a joke about the most solved game there is. It turns out that if you stop
asking tic-tac-toe to decide the winner and start asking it to decide the damage, the
nine cells have quite a lot left to say.