python mudlib using telnetlib3
Find a file
Jared Miller 2a546a3171
Fix operator precedence in POV smart conjugation
The {s} conjugation check had incorrect operator precedence that
evaluated the ch/sh suffix check independently of the prev_text
existence check. This could lead to confusing logic flow even
though it didn't crash due to len() handling empty strings safely.

Fixed by wrapping both suffix conditions in parentheses so they're
both guarded by the prev_text truthiness check.
2026-02-14 01:00:37 -05:00
.claude Improve doc discovery 2026-02-11 21:47:05 -05:00
content Add announce and resolve templates to combat moves 2026-02-13 23:21:50 -05:00
docs Add bending research 2026-02-13 21:39:12 -05:00
scripts Add Grimm fairy tales splitter script 2026-02-13 11:28:56 -05:00
src/mudlib Fix operator precedence in POV smart conjugation 2026-02-14 01:00:37 -05:00
tests Fix operator precedence in POV smart conjugation 2026-02-14 01:00:37 -05:00
worlds/earth Add seed-based terrain world with movement and viewport 2026-02-07 13:27:44 -05:00
.dockerignore Add a docker container solution 2026-02-09 12:34:56 -05:00
.gitignore Re-copy fixed repos/zvm source into src/mudlib/zmachine 2026-02-09 20:44:21 -05:00
BRAINSTORM.txt Add a library brainstorm 2026-02-13 12:16:35 -05:00
compose.yml Add a docker container solution 2026-02-09 12:34:56 -05:00
demo_terrain.py Add seed-based terrain world with movement and viewport 2026-02-07 13:27:44 -05:00
Dockerfile Add a docker container solution 2026-02-09 12:34:56 -05:00
DREAMBOOK.md Add a dreambook 2026-02-07 12:19:49 -05:00
justfile Strip dfrotz prompt even without preceding newline 2026-02-09 17:55:14 -05:00
mud.tin Add combat and defense aliases 2026-02-12 18:31:26 -05:00
pyproject.toml Wire client capabilities into Player & terrain 2026-02-07 22:44:45 -05:00
README.md Add a simple README 2026-02-07 15:42:07 -05:00
uv.lock Update telnetlib3 to 2.4.0 2026-02-12 12:15:49 -05:00

mudlib

A telnet MUD engine. No client needed — just telnet and you're in.

Built on telnetlib3, Python 3.12+, managed with uv.

Quickstart

uv sync
just run

Then connect: telnet localhost 6789

Commands

just check   # lint + typecheck + test
just run     # start the server
just debug   # start with debug logging
just render  # generate world map HTML

What's in here

  • src/mudlib/ — the engine (commands, world, combat, rendering, storage)
  • tests/ — pytest tests
  • worlds/ — world definitions (yaml/toml)
  • docs/ — internal knowledge base
  • DREAMBOOK.md — vision and wild ideas

How it works

The world is a toroidal 2D grid of terrain tiles, not discrete rooms. Players see a viewport centered on their position. Terrain types have mechanics — shallow water slows you, mountains block you, forests hide you.

Combat is timing-based with telegraphed moves and cooldown management, not turn-based.

The server runs a tick-based async game loop alongside the telnet server. SQLite handles persistence. Session mode stacks filter what reaches the player depending on context (exploring, fighting, composing, solving puzzles).