Emberdeep

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.

9 floors down

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.

The Drowned Cellars, seen from inside the game
Floor 1The Drowned CellarsBrick vaults sweat cold water. Somewhere ahead, small claws scrabble on stone. The air smells of rot and old smoke.
The Rimehollow, seen from inside the game
Floor 2The RimehollowThe cellars drop into a cave the frost found first. Ice hangs from every ledge in long blue teeth, and somewhere in the white, something is howling.
The Cinder Galleries, seen from inside the game
Floor 3The Cinder GalleriesThe old ember-mines. The walls are scarred where picks bit into the living fire. It is warmer here, but not kindly.
The Mycel Warrens, seen from inside the game
Floor 4The Mycel WarrensThe mines give way to caves nobody dug. Pale fungus furs every surface and breathes out a soft green light. Something has been farming it.
The Sunken Archive, seen from inside the game
Floor 5The Sunken ArchiveShelves taller than houses, packed with a thousand years of the city's records, charring slowly from the bottom up. Pages drift through the air like snow that forgot how to fall.
The Glasswright Foundry, seen from inside the game
Floor 6The Glasswright FoundryVast halls where the Glasswrights melted stolen ember into glass for the rich. The kilns are cold now, but the things they made still walk the floors.
The Ossuary of Kings, seen from inside the game
Floor 7The Ossuary of KingsWalls of stacked skulls, a thousand years of Vesk's dead given to the fire. The bones are not as still as they should be.
The Ember Mire, seen from inside the game
Floor 8The Ember MireThe deep fire has pooled here and gone sour. The ground is a crust over molten slag, and it rises and falls, slowly, like something breathing in its sleep.
The Regent's Vault, seen from inside the game
Floor 9The Regent's VaultBlack basalt, veined with dying light. The heat presses on your skin. Whatever holds the Heart is waiting at the bottom of the world.

Play it here

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.

WASD moveQ E turn Space attack / talk1 2 spells V layoutEsc menu ? help
Open in its own window ↗

What were you, before they caught you?

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.

Sellsword

Brawn 7 · Nerve 5 · Wits 2

Hired steel. Hits hard and takes a beating. Starts with a shortsword, leather and Heavy Hand.

Emberwright

Brawn 3 · Nerve 4 · Wits 8

Taught to coax fire out of stone. Fragile, but Spark and Mend come cheap. Starts with Kindling.

Cutpurse

Brawn 4 · Nerve 8 · Wits 3

Quick hands, quicker feet. More critical hits, more coin, and an eye for traps. Starts with Keen Eye.

Penitent

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.

Duelist

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.

Gutter Rat
Slag Spitter
Rime Hound
Glass Golem
Rime Wight
Inkling
Cinder Moth
Cinder Salamander

Every run has a history

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.

LEGENDS OF VESK · year 1015
  • 1 Fenna Cingul, the first Regent, kindled the Undertorch in the stone, and Vesk was built around its warmth.
  • 5 The Regent's Vault was cut from black basalt around the Heart of the flame.
  • 67 Fenna Cingul walked down into the flame so that the city would stay warm, and did not come back.
  • 100 The Ossuary of Kings was dug beneath the city, and Ottilie Noknod was the first king laid in it.
  • 153 Anwe Laksom, a mason, bricked the Drowned Cellars beneath the city to keep its grain dry.
  • 188 Sorrel Ashkzan forged Vetport, the Oldgate.
  • 212 Nim Lakgul broke the first seam of the Cinder Galleries and found living fire in the rock.
  • 272 Fenna Tavnin carried Vetport down into the Regent's Vault, and was slain there by a Bone Priest.
  • 328 A fire called Tamama, "the Stillmother", burned the Saltworks for 4 days.
A THING OF RENOWN

Rukport, the Rustgate

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.

THE OLD TONGUE
  • Fenrad “the Smokeroot”, The Drowned Cellars
  • Gomtend “the Mirereach”, The Rimehollow
  • Thunul “the Coalcrown”, The Cinder Galleries
  • Sepul “the Gravecrown”, The Mycel Warrens
  • Ithrad “the Frostroot”, The Sunken Archive

And down there, too

Small things that make a run.

☠

Death is permanent

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.

♫

36 songs, synthesised

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.

▦

Two ways to look

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.

⚑

Quests and people

Three settlements, a Magistrate and his man Corvane, mapmakers, hermits, ghosts and captives, and more than one way to end it.

Run it in a terminal

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.