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:
| Datei | Aufgabe |
|---|---|
app.py | Webserver (Flask + flask-sock): Login/Registrierung, WebSocket-Schleife, Broadcasts, Statistik-API |
engine.py | Spiellogik: Befehlsverteiler, Bewegung, Kampf, Handel, Quests, Post, Göttermacht |
db.py | SQLite: Spielerkonten (bcrypt-Hashes), Spielstände, Postsystem |
world.json | Die 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.
| Bereich | Syntax | Beispiel |
|---|---|---|
| Bewegung | <richtung> oder gehe <richtung>; n/s/o/w, no, sw … | norden, gehe sw, runter |
| Wahrnehmung | umschauen | l |
| Dinge untersuchen | untersuche/betrachte/x <ding> · schaue <ding> | untersuche brunnen |
| Items | nimm/ablegen/benutze/rueste <name> | rueste langschwert |
| Alles nehmen | nimm alles (englisch: take all) | nimm alles |
| Kampf | greif <npc> an · fliehe | greif rauber an |
| Dialog | sprich <npc> · gib <item> <npc> | gib fell schmied |
| Handel | kauf <ware> · verkauf <item> | kauf heiltrank |
| Bank | einzahlen <x> · abheben <x> · kontostand (Stadtkasse im Rathaus, alles erlaubt) | einzahlen 50 |
| Chat | sag <text> (Raum) · rufe <text> (alle) | sag Hallo! |
| Post | post · post <name> <text> | post hugo gruesse! |
| Meta | status · quests · spieler · quit | quit |
| Sprache | sprache 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ächern — TRUHE 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:
| Rasse | Bonus | Nachteil |
|---|---|---|
| ⚔ 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:
| Zauber | Ab | Kosten | Wirkung |
|---|---|---|---|
| heilung | 1 | 6 | +25 HP |
| funke | 1 | 3 | 8+Level Schaden |
| feuerball | 3 | 10 | 18+Level Schaden |
| heimwind | 4 | 12 | Teleport zum Marktplatz |
| blitz | 5 | 14 | 28+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
| Version | Datum | Änderungen |
|---|---|---|
| 1.2.20 | 2026-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.19 | 2026-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.18 | 2026-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.17 | 2026-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.16 | 2026-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.15 | 2026-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.14 | 2026-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.13 | 2026-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.12 | 2026-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.11 | 2026-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.10 | 2026-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.9 | 2026-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.8 | 2026-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.7 | 2026-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.6 | 2026-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.5 | 2026-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.4 | 2026-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.3 | 2026-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.2 | 2026-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.1 | 2026-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.0 | 2026-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.0 | 2026-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.0 | 2026-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 |
Dieses Projekt wächst – die Dokumentation wird mit jeder Versionsänderung aktualisiert.