mudai
A modern Python port of the classic roguelike Umoria, in your browser.
mudai stands on the shoulders of others. The dungeon, the monsters, the spells, the line-of-sight, and the room-lit-on-entry trick all come from Umoria, which Jim E. Wilson ported to C/Unix in 1987–88 from Moria — the game Robert Alan Koeneke and Jimmey Wayne Todd wrote in VMS Pascal at the University of Oklahoma in 1983. David Grabiner and Ben Asselstine kept Umoria alive across the decades. mudai is a port, not a reinvention. The heritage is documented in full in ATTRIBUTION.md; please read it before forking.
A peek
A typical screen, six tiles east of a lit room:
########## HP: 24/24
#........# Mana: 10/12
#..!.....+#### AC: 13
#........# # Status: Blessed
########## # Wield: Longsword (1d10)
# k Worn:
####...#### body: Soft Leather Armor [+4 AC]
#@.....# light: Brass Lantern
####....... Visible:
##.k.>## - Kobold (×2)
##### Cast which spell?
a) Magic Missile (mana 1, 5% fail)
b) Phase Door (mana 1, 14% fail)
@ is you. k is a kobold. > is the stairs down — walk onto them and the
game asks if you want to descend.
Play it
Coming soon at https://play.umoria.net (DNS pending). Until then, run
locally — see the next section.
Run it locally
# One-time
curl -LsSf https://astral.sh/uv/install.sh | sh # or `irm https://astral.sh/uv/install.ps1 | iex` on Windows
uv sync
# Every time
MUDAI_LOCAL_DEV=1 uv run python server.py # bash
$env:MUDAI_LOCAL_DEV = "1"; uv run python server.py # PowerShell
Open http://127.0.0.1:8000, pick Warrior / Rogue / Wizard, and you land straight in the town square. No Google login, no Mongo, in-memory only. Fine for poking around, not for saved campaigns.
What's in it
Today, a fresh game gives you:
- Five dungeon levels of procedurally-generated rooms and corridors, Umoria-scale (198×66) with a smooth-scrolling viewport.
- 20 different creatures drawn straight from Umoria's bestiary — kobolds, jackals, naga, mushroom patches, a battle-scarred veteran.
- Three classes — Warrior, Rogue, and Wizard — with distinct stats and HP/mana curves.
- Items and equipment — weapons, armor, light sources, potions,
scrolls, with flavour names (
Blue Potion) until you identify them. - Magic spells for Wizards and Priests — 16 starter spells across four spellbooks, with mana cost, failure chance, and a targeting cursor for offensive spells.
- Fog of war driven by line-of-sight and your equipped torch / lantern. Lit rooms reveal in full the moment you step inside; dark rooms only show what your light radius can reach. Corridors you've walked dim to grey memory.
- Status effects — blindness, confusion, fear, poison, haste, slow, blessing — with timed counters that tick down each turn.
- Multiplayer — every
@connected to the same server shares the same dungeon. You'll meet other people on the stairs.
How it's built
Python 3.14, uv for dependencies, FastAPI on a
single WebSocket endpoint, MongoDB for persistence, and Cloud Run +
Workload Identity Federation for the deploy. The frontend is plain
HTML/CSS/JS — no React, no canvas — and the dungeon is drawn into a <pre>
block with one <span> per cell. The console aesthetic is deliberate. See
CONTRIBUTING.md for the local dev workflow and the
phase-based prompt model the project uses.
License & attribution
mudai is GPL-3.0, the same license the original Umoria carries (LICENSE). The names of the original authors — Koeneke, Todd, Wilson, Grabiner, Asselstine — appear in the in-game HUD footer, in every Python source file's header, and in full in ATTRIBUTION.md. Please keep them there.
On the shoulders of giants we sit.