
Sellsword
Brawn 7 · Nerve 5 · Wits 2
Hired steel. Hits hard and takes a beating. Starts with a shortsword, leather and Heavy Hand.
A descent beneath the frozen city of Vesk.
The fire under the city is failing. They offered you the rope or the Deep, and you chose the Deep. A first-person, turn-based roguelike, drawn in half-blocks in your terminal: one Python file, nothing to install.
Drowned cellars, frozen wells, kilns full of living glass, a mire of stolen fire. Every floor is rolled fresh each run. These pictures come straight from the game's raycaster.









This is the real game, the same emberdeep.py, running on Python compiled to
WebAssembly. Your runs are saved in this browser. It needs a keyboard.
Five callings. Three are open from the start; carve the rest into the Tally Wall with the cinders each run earns. Your face sits under the map, and it has opinions.

Brawn 7 · Nerve 5 · Wits 2
Hired steel. Hits hard and takes a beating. Starts with a shortsword, leather and Heavy Hand.

Brawn 3 · Nerve 4 · Wits 8
Taught to coax fire out of stone. Fragile, but Spark and Mend come cheap. Starts with Kindling.

Brawn 4 · Nerve 8 · Wits 3
Quick hands, quicker feet. More critical hits, more coin, and an eye for traps. Starts with Keen Eye.

Brawn 6 · Nerve 3 · Wits 6
A flagellant of the Undertorch who walked into the Deep by choice. Slow to die. Starts in ringmail with Iron Hide.

Brawn 6 · Nerve 7 · Wits 2
Killed a magistrate's nephew over a point of honour. Starts with a glass rapier and Riposte, and nothing else.








Each descent rolls its own thousand years of Vesk: who lit the fire, who dug each floor, which heroes went down and didn't come back, and what they were carrying. It speaks an old tongue, carves itself into the walls, and keeps writing while you play. Here is one, rolled just now.
A vesk longsword of pale glass, decorated with rings of ember-gold.
Forged by Sorrel Abbvel in the year 599. Carried into the Rimehollow by Nim Nokgul, who was slain there by the Rime Matron, who keeps it still, in the year 870.
Small things that make a run.
One run at a time, saved on every stair. Die and it's gone, but your cinders buy perks and callings on the Tally Wall.
No audio files ship with it. Every song is built from code, and the music follows you: towns, shops, fights, elites, the Regent, low health.
The classic layout puts the view beside a side panel. Press V and the view fills the screen instead, with your face, your bars and the map along the bottom.
Three settlements, a Magistrate and his man Corvane, mapmakers, hermits, ghosts and captives, and more than one way to end it.
Python 3.8 or newer and a terminal of at least 100 × 31 characters. Truecolour if you have it; 256 colours if you don't. Linux, macOS and Windows.
# play $ python3 emberdeep.py # the same dungeons every time $ python3 emberdeep.py --seed 42 # quiet, or force 256 colours $ python3 emberdeep.py --mute --256
There's nothing to install: the whole game, its art, its world and its soundtrack are one file using only Python's standard library. Sound plays through whatever your system already has (PipeWire, PulseAudio, ALSA, macOS or Windows).
On Linux there's also an AppImage that opens itself in a terminal when you double-click it.