← Zurück zum Spiel

Falkenmoor – Technische Spieldokumentation

Version 1.2.20 · Stand: 11. September 2026 · Python 3.12, Flask, WebSocket

Überblick & Architektur

Falkenmoor ist ein Multi-User-Dungeon (MUD): ein textbasiertes Online-Rollenspiel, das per WebSocket im Browser gespielt wird. Der Server ist in Python geschrieben und besteht aus vier Bausteinen:

DateiAufgabe
app.pyWebserver (Flask + flask-sock): Login/Registrierung, WebSocket-Schleife, Broadcasts, Statistik-API
engine.pySpiellogik: Befehlsverteiler, Bewegung, Kampf, Handel, Quests, Post, Göttermacht
db.pySQLite: Spielerkonten (bcrypt-Hashes), Spielstände, Postsystem
world.jsonDie komplette Spielwelt: 209 Räume, 101 NPCs, 39 Items, Quests, Händler, Türen

Die Welt wird beim Start einmal geladen und von allen Spielern geteilt („shared world"): Türen, Bodenitems und Monster-Zustände sind für alle gleich. Persönliche Daten (Inventar, Quests, Position) leben im Spielerobjekt und werden nach jedem Befehl in players.db gesichert.

Sprache der Befehle

Befehle sind deutsche Verben im Imperativ, groß- und kleinschreibungsunabhängig, mit Umlaut-Toleranz (knueppel findet „Holzknüppel“). Richtungen akzeptieren Abkürzungen.

BereichSyntaxBeispiel
Bewegung<richtung> oder gehe <richtung>; n/s/o/w, no, sw …norden, gehe sw, runter
Wahrnehmungumschauenl
Dinge untersuchenuntersuche/betrachte/x <ding> · schaue <ding>untersuche brunnen
Itemsnimm/ablegen/benutze/rueste <name>rueste langschwert
Alles nehmennimm alles (englisch: take all)nimm alles
Kampfgreif <npc> an · fliehegreif rauber an
Dialogsprich <npc> · gib <item> <npc>gib fell schmied
Handelkauf <ware> · verkauf <item>kauf heiltrank
Bankeinzahlen <x> · abheben <x> · kontostand (Stadtkasse im Rathaus, alles erlaubt)einzahlen 50
Chatsag <text> (Raum) · rufe <text> (alle)sag Hallo!
Postpost · post <name> <text>post hugo gruesse!
Metastatus · quests · spieler · quitquit
Sprachesprache en · sprache de (oder language) — englische Befehls-Aliase: take/drop/use/kill/flee/talk/buy/sell/deposit/withdraw/look/examine/help…sprache en

Spielmechaniken im Detail

Kampf

Rundenbasiert je Befehlseingabe: Der Spielerenschaden ist Basis(3) + Waffe + (Level−1) ± Zufall(−1..+3) − Verteidigung des Gegners, der Gegenschlag analog mit der Rüstung des Spielers. Stirbt der Spieler, wacht er mit 10 HP auf dem Marktplatz auf und verliert die Hälfte seines Bargelds — Gold auf der Bank (Stadtkasse im Rathaus) bleibt immer sicher. Besiegte Monster hinterlassen ihre beute im Raum und erscheinen nach 5 Minuten neu (Respawn-Konstante RESPAWN_SEKUNDEN = 300).

Charakterentwicklung

Jede Stufe benötigt Level × 100 XP und bringt +10 Max-HP (und vollständige Heilung). XP gibt es für Kills (10 + halbe Gegner-HP) und Quests. Der Beutel fasst 20 Gegenstände + 2 pro Stufe (Spiele-NPC zeigt INVENTAR); die Truhe im Haus bietet zusätzliche 100 Fächer.

Haus & Truhe

Am Marktplatz liegt der Ausgang haus zum Haus am Markt: Dort steht die Eichentruhe jedes Helden mit 100 FächernTRUHE zeigt den Inhalt, LEGE <x> lagert ein, HOL <x> nimmt zurück. Der Truheninhalt ist Teil des Spielstands und bleibt Tod, Logout und Server-Neustarts erhalten. Ausgerüstete Gegenstände müssen vor dem Einlagern abgelegt werden.

Rassen

Jeder Held wählt einmalig eine Rasse: RASSE <name> (wählbar: zwerg/dwarf, elf, ork/orc, mensch/human). Die Boni/Nachteile wirken sofort und stapeln sich mit der Gildenwahl:

RasseBonusNachteil
⚔ Ork+2 Schaden−5 Max-HP · Händler +10 % Preis
🛡 Zwerg+10 Max-HP, +1 Verteidigung−5 Max-Mana
✨ Elf+10 Max-Mana, Zauber −1 Mana−5 Max-HP
🌾 Mensch+10 Gold Siedlerbonus, +10 % XP

RASSE ohne Argument zeigt die Wahl, danach die Herkunfts-Lore. Die Entscheidung ist endgültig — Charaktere bleiben, was sie sind.

Quests

Eine Quest ist ein JSON-Objekt am NPC: gesprochen wird sie angenommen (sprich), mit gib wird der geforderte Gegenstand abgegeben (mehrfach bei anzahl > 1). Belohnungen: Items, Gold, XP.

Welt: Räume, Türen, Händler

Räume sind ein Dictionary mit Ausgängen. Ausgänge sind entweder einfache IDs oder verschlossene Türen mit Schlüsselanforderung:

"exits": {
  "norden": "wald_2",
  "sueden": {"raum": "gruft", "verschlossen": true,
             "tuer": "die Steinpforte", "schluessel": "i_schluessel_gruft"}
}

Händler sind NPCs mit laden-Objekt; Preise pro Item, Verkauf zum halben Item-wert. Kneipen (Goldener Falke, Anker-Krug) tragen zusätzlich das Flag "nacht": true und sind damit rund um die Uhr geöffnet: Getränke kosten 1 Gold (Bier +5 HP, Kaffee +5 Mana, Soda +3 HP, Wein +4 HP, Kräutertee +4 Mana), Essen 2 Gold (Suppe +6 HP, Eintopf +8 HP, Braten +10 HP). Sich treffen und sag-en ist selbstverständlich gratis.

Codebeispiele

Befehl registrieren (engine.py)

tabelle = {
    ...
    "post": (self.cmd_post, True),   # (Methode, braucht Argument?)
}

eintrag = tabelle.get(befehl)
if not eintrag:
    return f"Was meinst du mit '{eingabe}'?"
fn, braucht_arg = eintrag
ergebnis = fn(arg) if braucht_arg else fn()
self.save()                     # Spielstand sichern
return ergebnis

Neuen Raum in world.json anlegen

"lichtung_99": {
  "id": "lichtung_99",
  "name": "Verwunschene Lichtung",
  "beschreibung": "Pilze leuchten bläulich zwischen den Bäumen.",
  "region": "wald",
  "exits": {"sueden": "wald_5"},
  "items": ["i_heiltrank"],
  "npcs": []
}

Das WebSocket-Protokoll

Client und Server reden reinen Text: Die erste Nachricht ist die Anmeldung, danach entspricht jede Zeile einem Befehl, jede Antwort einer Zeile.

// Anmeldung
> LOGIN hugo geheimnis        // oder: REGISTER hugo geheimnis
< Willkommen zurück in Falkenmoor …

// Spielschleife
> nimm knueppel
< Du nimmst Holzknüppel.
> greif wolf an
< ⚔ Du triffst Hungriger Wolf für 5 Schaden. …

Statistik-API

GET /api/stats  →  {"online": 2, "registriert": 7}

Datenschutz & Konten

Passwörter werden ausschließlich als bcrypt-Hash gespeichert, Spielstände in SQLite. Keine Cookies, kein Tracking, keine E-Mail-Pflicht – Details in der Datenschutzerklärung.

Tag und Nacht

Ein Spieltag dauert 2 echte Stunden (5 Minuten je Spielstunde). Die Uhrzeit steht in jeder Raumansicht. Nachts (21–6 Uhr) sind die Läden geschlossen – ausgenommen sind die Kräuterhexe in Falkenmoor und alle Kneipen, die rund um die Uhr ausschenken.

Emotes & Anschlagbrett

Emotes sind Rollenspiel-Gesten für den Raum: LACH, WEINE, TANZ, SEUFZ, JAUCHZ … gezielt mit Ziel: VERBEUGE hugo, ZWINKERE maren, GRUESS (alle). Das Anschlagbrett am Marktplatz ist ein öffentliches Schwarzes Brett:

BRETT                    # letzte 15 Notizen lesen
BRETT Suche Gruppe für die Katakomben!
BRETT LOESCHE 3          # eigene Notiz entfernen (Gott darf alle)

Magie & Gilden

Zauber kosten Mana (Start: 20, +5 pro Stufe, Regeneration: +1 je Raumwechsel). Fünf Zauber, freigeschaltet nach Stufe:

ZauberAbKostenWirkung
heilung16+25 HP
funke138+Level Schaden
feuerball31018+Level Schaden
heimwind412Teleport zum Marktplatz
blitz51428+Level Schaden

Drei Gilden (Anmeldung bei der Gildenmeisterin im Rathaus): Krieger (+3 Schaden, +10 HP), Magier (+10 Mana, alle Zauber −1 Mana), Dieb (Gold aus jeder Beute). Wechsel kostet 100 Gold. Gilden-Chat: GILDENRUF <text>.

ZAUBER                    # verfügbare Zauber + Mana anzeigen
ZAUBER feuerball ork      # Zauber im Kampf (ohne Ziel: erstbester Gegner)
GILDE BEITRETEN magier    # im Rathaus, bei der Gildenmeisterin

Geheimnisse

Es gibt verborgene Befehle, die nicht in der Hilfe stehen. Wer gut hinschaut (oder Klugen Rat sucht), mag sie finden …

Änderungshistorie

VersionDatumÄnderungen
1.2.202026-09-11 Tagesquest: Aus 7 Aufträgen (Goblinplage, Wolfsjagd, Netze lichten, Gruftputz, Klosterreinigung, Hochwild, Die Speicher-Ratte) wählt ein datumsabhängiger Zähler täglich dieselbe Quest für alle Spieler — Wechsel automatisch um Berlin-Mitternacht, ohne Cron. Annahme und Abgabe am Anschlagbrett (TAGESQUEST ANNEHMEN / ABGEBEN), Fortschritt zählt bei Siegen über passende Monster, Belohnung skaliert mit dem Level (15+5×Level Gold, 20+10×Level XP). Zähler auch im QUESTS-Befehl; zweisprachig (EN: DAILY).
1.2.192026-09-11 Gildenstädte + Gildenport: Drei neue Städte, je eine pro Gilde — Eisenfels (Krieger: Trainingshof mit Kampf-Puppe, Gildenschmiede mit Falkenstreithammer und Harnisch), Arkanheim (Magier: Bibliothek mit Arkanstab und Arkanwasser, Sternwarte, Mondgarten) und Nebelpfad (Dieb: Hehler Flinn zahlt beim VERKAUF den vollen Wert, Übungsparkour, Schatzkammer-Lore). Neue Tabelle „spielkasse“ bleibt; 16 neue Räume, 4 NPCs, 6 Exklusiv-Items. Transfer per GILDENPORT vom Marktplatz (zurück aus jedem Stadtraum), nur für Gildenmitglieder, gesperrt im Kampf. Welt: 228 Räume.
1.2.182026-09-10 Kneipen-Würfelspiel: In Marktschenke und Anker-Krug kann man mit dem Wirt würfeln — WUERFELN <5|10|20>. Je zwei Würfel, höher gewinnt (Gleichstand gewinnt der Wirt); normaler Sieg zahlt das Doppelte, eine Doppelsechs das Fünffache — der Gewinn ist auf maximal +50 Gold gedeckt. Die Spielkasse zahlt höchstens 500 Gold pro Tag (Berliner Tag, gespeichert in der neuen Tabelle spielkasse); Hausvorteil ≈ 2,9 %. Zweisprachig (EN-Regeln: ROLL).
1.2.172026-09-09 Rassen: Einmalige Wahl zwischen Zwerg (+10 Max-HP, +1 Verteidigung, −5 Max-Mana), Elf (+10 Max-Mana, Zauber −1 Mana, −5 Max-HP), Ork (+2 Schaden, −5 Max-HP, Händler +10 % Preise) und Mensch (+10 Gold, +10 % XP) per RASSE <name> — mit Herkunfts-Lore auf Deutsch und Englisch, Boni stapelbar mit Gilden.
1.2.162026-09-09 Zwei neue Räume am Marktplatz (Ausgänge kneipe und laden, Rückwege über osten/markt): Die Marktschenke mit Schenkwirt Tönjes (Met als Spezialität, rund um die Uhr geöffnet) und Der Gemischtwarenladen mit Krämerin Alvida (tagsüber: Fackel, Strickseil, Glückswürfel, Proviantpaket). Neue Items: 5 (Gesamt: 52).
1.2.152026-09-09 Beutel-Kapazität: 20 Gegenstände + 2 pro Stufe; NIMM prüft den Platz, NIMM ALLES nimmt nur, was hineinpasst, und meldet, was liegen blieb. Neu: Das Haus am Markt (Raum haus, Ausgang vom Marktplatz) mit der persönlichen Eichentruhe — 100 Fächer pro Held, TRUHE/LEGE <x>/HOL <x>, Inhalt wird im Spielstand gesichert.
1.2.142026-09-09 NIMM ALLES (englisch TAKE ALL) nimmt sämtliche Gegenstände eines Raums auf einmal. Reisekomfort: Die Eintrittsräume der Regionen (Wald, Hügel, Sumpf, Fluss, Katakomben) sind jetzt monsterfrei — zuvor griff beim Betreten sofort ein Gegner an und sperrte die Bewegung. Der Rückweg aus der Flussregion zum Südtor heißt jetzt natürlich norden statt nordwesten (der Regionausgang nach fluß_7 wanderte nach nordosten).
1.2.132026-09-09 Sichtbarkeit der Zweisprachigkeit: Hinweis auf der Anmeldeseite („Zweisprachig / bilingual: SPRACHE EN oder SPRACHE DE“) und eigene Sprache-Zeile in der deutschen Hilfe. Bisher war der Sprachwechsel nur in der englischen Hilfe dokumentiert.
1.2.122026-09-08 Zweisprachigkeit Stufe 2: SPRACHE EN/SPRACHE DE (gespeichert pro Spieler, Befehl auch language). Englisches Befehls-Alias-Set (take, drop, use, wear, kill, flee, talk, buy, sell, deposit, withdraw, look, examine, help, …) und englische Ausgaben für die Kernsysteme (Raumansicht-Rahmen, Bewegung, Kampf, Handel, Kneipe, Bank, Chat, Status, Hilfe, Todesmeldung, Broadcasts pro Empfängersprache). Umsetzung als Zeilenkatalog in uebersetz.py mit Fallback auf Deutsch; Weltinhalte (Raum-/NPC-/Itemnamen) folgen in Stufe 3.
1.2.112026-09-08 Bank: Bankier Wenzel hält im Rathaus die Stadtkasse — EINZAHLEN <x> (auch „alles“), ABHEBEN <x>, KONTOSTAND. Eingezahltes Gold ist todesfest: Beim Tod verliert man nur die Hälfte des Bargelds, das Guthaben bleibt. Status zeigt Bargeld und Guthaben getrennt.
1.2.102026-09-08 Farbige Textausgabe: Der Server markiert Zeilentypen mit ANSI-Farbcodes (klassische MUD-Technik), der Browser-Client setzt sie in CSS-Farben um – Raumtitel gold, Kampf rot/gelb/magenta, Quests grün, Chat cyan, Post blau, Tageszeit und Ausgänge dezent. Sichere Umsetzung: HTML-Escaping vor dem Parsen, unbekannte Codes werden ignoriert; Broadcasts werden über ihr führendes Emoji eingefärbt.
1.2.92026-09-08 Kneipen: Goldener Falke und Anker-Krug (neue Krugwirtin Solveig im Hafen; Gastwirt Boldrick zieht in seine Taverne) schenken jetzt aus – Getränke (1 Gold) und Essen (2 Gold) mit kleinen HP-/Mana-Boni. Kneipen sind per "nacht"-Flag rund um die Uhr geöffnet; sich treffen und chatten bleibt kostenlos. Neue Items: 5 Getränke, 3 Speisen.
1.2.82026-09-08 ASCII-Wappen von Falkenmoor (Burg mit Türmen, Tor und Falkenpaar): erscheint im Spiel bei jedem Betreten/Ansehen des Startraums (Marktplatz) und als Banner auf der Anmeldeseite. Auf Mobilgeräten 30 Spalten breit – kein Umbruch.
1.2.72026-09-08 „Was ist ein MUD?“ ergänzt um den Abschnitt Wie groß sind die Klassiker? – Größenvergleichstabelle (Räume/Quests von Discworld, 3Kingdoms, Aardwolf, MorgenGrauen, Achaea, BatMUD) mit Quellenlinks und Falkenmoor zur Einordnung (209 Räume, 10 Quests, Dichte statt Masse).
1.2.62026-09-08 „Was ist ein MUD?“ ergänzt um den Abschnitt Ein persönliches MUD: VieMUD — der US-amerikanische DikuMUD (ab 1993, Implementor „Furry“/ Jeremy Elson, erste Heimat des Curious Areas Workshop), auf dem der Autor von Falkenmoor lange gespielt hat.
1.2.52026-09-08 Neue Seite „Was ist ein MUD?“: ausführliche Geschichte der MUDs (MUD1 1978 bis MMORPG), Stammbaum der Spielfamilien, die deutschsprachigen Klassiker, Sinn und Spaß des Genres sowie Links zu klassischen und heute noch laufenden MUDs. Verlinkt von der Spiel-Kopfzeile.
1.2.42026-09-08 Neu: UNTERSUCHE <ding> (auch BETRACHTE, X, SCHAUE <ding>) – Raum-Details in 27 Orten (atmosphärisch, verrät keine Geheimnisse), Gegenstands-Beschreibungen mit Wertangabe, Beobachtungen von NPCs ohne Quest-Auslösung, Mitspieler-Ansicht und die klassische Gegner-Einschätzung („Ein Kinderspiel“ bis „Lebensgefährlich“) statt nackter Zahlen.
1.2.32026-09-08 Login für Touchscreen-Geräte (iPhone/iPad): Fehlernachrichten („Falsches Passwort“ u. a.) erscheinen jetzt sichtbar im Anmeldeformular statt im versteckten Spiel-Log; das Namensfeld ist gegen iOS-Autogroßschreibung, -autokorrektur und -rechtschreibprüfung gehärtet; der Login toleriert abweichende Groß-/Kleinschreibung des Namens (gespeichert wird immer unter dem kanonischen Konto). Nach Verbindungsabbruch kehr man statt in den toten Log-Bildschirm zurück zum Anmeldeformular.
1.2.22026-09-08 Welt & Quests: Doppelung behoben – es gibt nur noch einen Burgherr Rabenmark (er trägt die Drachen-Quest). Neu: Köchin Gerlinde in der Burgküche („Pfeffer für die Köchin“). Questabgabe ist jetzt ziel-basiert – der Botengang (Bürgermeister → Burgherr) ist damit erstmals abschließbar. Alle Regionen haben Rückwege: vorher führten sämtliche Ausgänge aus Falkenmoor nur in eine Richtung (196 von 209 Räumen ohne Rückweg zum Marktplatz).
1.2.12026-09-08 Fehlerbehebungen: Angriffszauber (funke/feuerball/blitz) verursachen jetzt tatsächlich ihren Magieschaden – der Gegner schlägt danach zurück; +5 Max-Mana beim Stufenaufstieg (wie dokumentiert); Gildenwechsel entfernt den Bonus der alten Gilde; thread-sichere Online-Spieler-Listen (kein Absturzrisiko bei Login/Logout während der Anzeige); kleinere Textkorrekturen
1.2.02026-09-08 Magiesystem: Mana, 5 Zauber (heilung, funke, feuerball, heimwind, blitz); Gilden: Krieger/Magier/Dieb mit Boni, Beitritt im Rathaus, Gildenwechsel (100 G), Gilden-Chat (GILDENRUF)
1.1.02026-09-08 Emotes (Gesten mit und ohne Ziel), Anschlagbrett am Marktplatz (öffentliche Notizen), Tag/Nacht-Zyklus (2 h pro Spieltag, Läden nachts geschlossen, Kräuterhexe ausgenommen)
1.0.02026-09-08 Erste dokumentierte Version: 209 Räume/8 Regionen, Multiuser, Konten mit bcrypt, persistente Spielstände, Kampf/Quests/Handel/Türen, Postsystem mit Briefkasten, Chat (sag/rufe), Statistikleiste, Impressum/Datenschutz, HTTP-API, geheime und göttliche Befehle

← Zurück zum Spiel

Dieses Projekt wächst – die Dokumentation wird mit jeder Versionsänderung aktualisiert.