Whimsy Chess

A chess study board that lives in Vim.

Sixteen real games, each one narrated move by move by a cast of characters who follow their pieces by identity — so the fox that started on a2 is still the fox forty moves later, wherever it ended up. Step through with l and h. No plugin manager, no dependencies, no leaving the terminal.

Run it

~/whimsy-chess $
# one line, no install
vim -c 'source chess_emoji.vim' -c 'ChessEmoji crawlnamed'

# or use the launcher
./chess-emoji queendab

# prove all sixteen games still parse
vim -u NONE -N -es -c 'source chess_emoji.vim' \
    -c 'for l in g:ChessEmojiSelfTest() | echo l | endfor' -c 'qa!'
l space next move
h previous move
< jump to start
> jump to the end
t emoji ⇄ classic figurines
q quit

Emoji width varies by terminal, so the board locks its grid with setcellwidths() and draws with no cell separators. Any modern terminal with an emoji-capable monospace font renders it square. Press t for plain figurines if the full emoji board is too loud to read.

The sixteen games

keygameyouresultends
queendabThe Queen Dab — vs +482 EloWhite1–0Qxb7#
kadasKádas Stampede — 1.h4, queen out on move 6White1–0Qg7#
roundupThe Kádas RoundupWhite1–0Qxe7#
houdiniThe Kádas HoudiniWhite1–0Qxg7#
crawlnamedThe Creepy Crawly, Named — Lichess christened the formationWhite1–0Qa8#
crabThe Crab — both rook pawns as clawsWhite1–0Nh6#
deadmove2Dead on Move 2 — mated-in-2 on move two, won on move twentyBlack0–1Qh1#
carrThe Carr Crash — 1…h6Black0–1Rxh2#
crabblackThe Crab, as BlackBlack0–1R6d2#
goldsmithGoldsmith DefenseBlack0–1Bf3#
fathersdayFather's Day SurpriseBlack0–1Nf3#
horseyHorsey Surprise — White resignsBlack0–1Qxf4
schroflagSchrödinger's Flag — 1…h5Black0–1Qxg1
scandiThe One That Got Away — up a piece twice, lostBlack1–0Qb4#
stalemategambitThe Stalemate Gambit — down twelve pawns, saved on the last moveWhite½–½stalemate
daisiesWe're No Daisies — 135 plies, mates missed by both sidesBlack½–½stalemate

Adding a game is one object: white, black, hero colour, opening, result, movetext, and a special map of ply → narration for the turning points. Register it in the self-test loop and it is checked forever after — ply count, final move, and which piece delivered it.

The same engine, in the browser

Chess Maestro replaying the Kádas game: the board renders as terrain, with water pooling on contested squares.
Chess Maestro replaying the Kádas Stampede — terrain grown from the influence field.
flagship

♫ Chess Maestro

Roles, terrain, and music. The time signature is inferred from the moves — a quiet maneuvering game breathes in 3/4, a tactical scramble lurches into 7/8. Exports MIDI, WAV, and a world file. Installs to a phone home screen.

3-d voxels

♜ Maestro in 3-D

The board as a voxel landscape — held squares rise as elevation, the contested seam floods pond→ocean by area. Minecraft and Roblox exporters from one core.js.

the cast

🎭 Woodland vs Misfit

Every piece rebuilt as a voxel standee from its real emoji glyph, tracked from its home square, with cast-voiced narration.

neon

🕶️ Cyberpunk 2045, ATL

The grid has you. ATL Underground against the Gridlock Authority, narrated in falling green code, cyan towers against magenta.

one export, two worlds

🧱 WorldKit

A chess-world v1 export becomes a Minecraft datapack and a Roblox builder. Zero dependencies — including its own store-only zip writer. Runs in the browser and in Node.

the engine

✦ The HRL Lab

What is actually doing the labeling: relaxation labeling, sparse factors, arbitrary constraint order, a noise label for pieces doing nothing.

Why any of this

Every piece on the board is an object; every tactical job — attacker, defender, controller, outpost, runner, tactic — is a label. Nothing is classified alone: the labels settle by mutual consistency, the way relaxation labeling settles anything. Pieces that end up doing nothing get the noise label, and that turns out to be the most honest thing the board can tell you about your position.

Once every piece has a role, the rest follows. Roles become colours. The influence field becomes terrain — water pools where control is contested. Coherence becomes harmony. And the narration knows who did what, because it has been tracking them by identity the whole time.

House voice, since it comes up: creativity and daring over memorizing the engine's preferred move. The games in here are rated-club chess with all the blunders left in — including a mate missed by both sides for seventy moves, and one game where the author was theoretically dead on move two and won anyway.