Initial commit: SSH MUD server with data-driven world

Rust-based MUD server accepting SSH connections on port 2222.
Players connect with any SSH client, get dropped into a
data-driven world loaded from TOML files at startup.

Binary systems: SSH handling (russh), command parser, game state,
multiplayer broadcast, ANSI terminal rendering.

Data layer: world/ directory with regions, rooms, NPCs, and objects
defined as individual TOML files — no recompile needed to modify.

Commands: look, movement (n/s/e/w/u/d), say, who, help, quit.
Made-with: Cursor
This commit is contained in:
AI Agent
2026-03-14 13:24:34 -06:00
commit c82f57a720
23 changed files with 3477 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
name = "Grizzled Barkeep"
description = "A weathered man with thick forearms and a permanent scowl. He polishes the same mug endlessly."
room = "town:tavern"
dialogue = "Welcome to The Rusty Tankard. We've got ale, and we've got stronger ale. Pick one."

View File

@@ -0,0 +1,4 @@
name = "Town Guard"
description = "A bored-looking guard in dented chainmail. He leans on his spear and watches passersby."
room = "town:gate"
dialogue = "Move along. Nothing to see here."

View File

@@ -0,0 +1,4 @@
name = "Healing Potion"
description = "A small glass vial filled with a shimmering red liquid."
room = "town:temple"
kind = "consumable"

View File

@@ -0,0 +1,4 @@
name = "Rusty Sword"
description = "A battered iron blade with a cracked leather grip. It's seen better days."
room = "town:cellar"
kind = "weapon"

2
world/town/region.toml Normal file
View File

@@ -0,0 +1,2 @@
name = "Thornwall"
description = "A fortified trading town at the crossroads of the known world."

View File

@@ -0,0 +1,8 @@
name = "Tavern Cellar"
description = """\
A damp underground room lined with barrels and crates. Cobwebs drape \
the ceiling. A single lantern sputters on a hook, casting long shadows. \
Something skitters in the dark corners."""
[exits]
up = "town:tavern"

View File

@@ -0,0 +1,9 @@
name = "Dark Alley"
description = """\
A narrow passage between crumbling stone walls. Puddles of dubious origin \
dot the ground. Shadows pool in doorways, and you catch the faint sound \
of whispered conversation from somewhere above."""
[exits]
north = "town:town_square"
south = "town:gate"

View File

@@ -0,0 +1,8 @@
name = "Blacksmith's Forge"
description = """\
Waves of heat roll from a roaring forge. A massive anvil stands in the \
center, scarred by countless hammer strikes. Weapons and armor line the \
walls, gleaming with fresh oil."""
[exits]
west = "town:market"

View File

@@ -0,0 +1,8 @@
name = "City Gate"
description = """\
Towering iron-reinforced wooden gates mark the southern edge of town. \
Guards in dented armor lean on their spears, watching the dusty road \
that stretches into the wilderness beyond."""
[exits]
north = "town:dark_alley"

View File

@@ -0,0 +1,9 @@
name = "Market Row"
description = """\
Colorful stalls line both sides of a narrow street. Merchants hawk their \
wares — bolts of cloth, exotic spices, gleaming trinkets. The air is thick \
with competing smells and the chatter of commerce."""
[exits]
west = "town:town_square"
east = "town:forge"

View File

@@ -0,0 +1,9 @@
name = "The Rusty Tankard"
description = """\
A warm tavern with low wooden beams and the smell of roasting meat. \
A crackling fireplace casts dancing shadows across rough-hewn tables. \
The barkeep polishes a mug behind the counter, eyeing newcomers."""
[exits]
south = "town:town_square"
down = "town:cellar"

View File

@@ -0,0 +1,8 @@
name = "Temple of the Dawn"
description = """\
A serene stone temple bathed in golden light filtering through stained \
glass windows. Rows of wooden pews face an altar adorned with candles. \
The air hums with quiet reverence."""
[exits]
east = "town:town_square"

View File

@@ -0,0 +1,11 @@
name = "Town Square"
description = """\
You stand in the heart of Thornwall. A worn stone fountain sits at the \
center, water trickling quietly. Cobblestone paths branch in every \
direction. The sounds of merchants and travelers fill the air."""
[exits]
north = "town:tavern"
east = "town:market"
west = "town:temple"
south = "town:dark_alley"