Automatisch erzeugte Manpages.

Damit nicht jeder sphinx auf dem Rechner haben muss,
behalten wir bis auf weiteres die aus den .rst
erzeugten Manpoages auch im Repo.

Change-Id: Id556c0d11cf5f79659d8350952ce1c014d81ea44
diff --git a/doc/lfun/AddAction b/doc/lfun/AddAction
index 23183ca..29c83c1 100644
--- a/doc/lfun/AddAction
+++ b/doc/lfun/AddAction
@@ -1,76 +1,104 @@
+
+AddAction()
+***********
+
+
 AddAction(L)
-FUNKTION:
-     varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);
+============
 
-DEFINIERT IN:
-     /std/player/command.c
 
-ARGUMENTE:
-     fun	zu rufende Methode im Spieler oder eine Closure
-     cmd	ausloesendes Kommandoverb
-     flag	unscharf ausfuehren
-     lvl	ab welchem (Magierlevel) funktioniert das Kommando
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
-     in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
-     eine Closure (Lfun-Closure oder Lambda) enthalten.
+   varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);
 
-     Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
-     bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
-     schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
-     AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
-     ausgeloest.
 
-     Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
-     Magierlevel von 0, Seher von 1.
+DEFINIERT IN
+============
 
-     Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
-     nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
-     gebendes Objekt im Spieler einsparen.
+   /std/player/command.c
 
-BEMERKUNGEN:
-     - es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
-       kann zu ernsten Fehlern fuehren.
-     - echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
-       ein AddAction(...,"sag",1,0); funktioniert nicht
-     - ein generelles AddAction(...,"",1,0); geht nicht
 
-BEISPIELE:
-     ...
-     this_player()->AddAction(symbol_function("zeige_mysterium",
-                                              find_object(".../mystzeiger")),
-			      "knorfula",0,0);
-     write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
-			"eingibst, werden dir Mysterien enthuellt!",78));
-     ...
+ARGUMENTE
+=========
 
-     // im Objekt "knorfula" ...
-     int zeige_mysterium(string str) {
-       string myst;
-       myst=environment(TP)->QueryMysterium(str);
-       if(myst) {
-         write("Du hast ein Mysterium entdeckt!\n");
-	 write(break_string(myst,78));
-	 say(break_string(
-		TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
-		"entdeckt zu haben!",78));
-       } else {
-         write(break_string(
-		"Leider entdeckst du trotz deiner magischen Faehigkeit "
-		"kein Mysterium in deiner Umgebung.",78));
-	 say(break_string(
-		TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
-		"jedoch etwas enttaeuscht aus.",78));
-       }
-       return 1;
+   fun        zu rufende Methode im Spieler oder eine Closure
+   cmd        ausloesendes Kommandoverb
+   flag       unscharf ausfuehren
+   lvl        ab welchem (Magierlevel) funktioniert das Kommando
+
+
+BESCHREIBUNG
+============
+
+   Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
+   in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
+   eine Closure (Lfun-Closure oder Lambda) enthalten.
+
+   Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
+   bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
+   schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
+   AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
+   ausgeloest.
+
+   Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
+   Magierlevel von 0, Seher von 1.
+
+   Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
+   nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
+   gebendes Objekt im Spieler einsparen.
+
+
+BEMERKUNGEN
+===========
+
+   - es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
+     kann zu ernsten Fehlern fuehren.
+   - echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
+     ein AddAction(...,"sag",1,0); funktioniert nicht
+   - ein generelles AddAction(...,"",1,0); geht nicht
+
+
+BEISPIELE
+=========
+
+   ...
+   this_player()->AddAction(symbol_function("zeige_mysterium",
+                                            find_object(".../mystzeiger")),
+                            "knorfula",0,0);
+   write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
+                      "eingibst, werden dir Mysterien enthuellt!",78));
+   ...
+
+   // im Objekt "knorfula" ...
+   int zeige_mysterium(string str) {
+     string myst;
+     myst=environment(TP)->QueryMysterium(str);
+     if(myst) {
+       write("Du hast ein Mysterium entdeckt!\n");
+       write(break_string(myst,78));
+       say(break_string(
+              TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
+              "entdeckt zu haben!",78));
+     } else {
+       write(break_string(
+              "Leider entdeckst du trotz deiner magischen Faehigkeit "
+              "kein Mysterium in deiner Umgebung.",78));
+       say(break_string(
+              TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
+              "jedoch etwas enttaeuscht aus.",78));
      }
+     return 1;
+   }
 
-SIEHE AUCH:
-			P_LOCALCMDS
-     Fehlermeldungen:	notify_fail(E), _notify_fail(E)
-     Argumentstring:	query_verb(E), _unparsed_args(L)
-     Sonstiges:		replace_personal(E), enable_commands(E)
-     Alternativen:	AddCmd(L), add_action(E)
+
+SIEHE AUCH
+==========
+
+                      P_LOCALCMDS
+   Fehlermeldungen:   notify_fail(E), _notify_fail(E)
+   Argumentstring:    query_verb(E), _unparsed_args(L)
+   Sonstiges:         replace_personal(E), enable_commands(E)
+   Alternativen:      AddCmd(L), add_action(E)
 
 24. Maerz 2004 Gloinson
diff --git a/doc/lfun/AddAdjective b/doc/lfun/AddAdjective
index 6b58101..a96a5e5 100644
--- a/doc/lfun/AddAdjective
+++ b/doc/lfun/AddAdjective
@@ -1,39 +1,62 @@
+
 AddAdjective()
+**************
 
-FUNKTION:
-     void AddAdjective(string|string* adj);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     adj
-          String oder Array von String mit den Adjektiven.
+   void AddAdjective(string|string* adj);
 
-BESCHREIBUNG:
-     Zusaetzlich zu den mit AddId() vergebenen Bezeichnern laesst sich mit
-     der Vergabe von Adjektiven die Ansprechbarkeit eines Objektes erhoehen.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Die Adjektive werden nicht dekliniert, man muss also fuer jeden
-     sinnvollen Fall ein Adjektiv uebergeben.
+   /std/thing/description.c
 
-BEISPIELE:
 
-       AddId( ({ "zettel", "blatt" }) );
-       AddAdjective( ({ "kleinen", "kleines" }) );
+ARGUMENTE
+=========
 
-     Das Objekt reagiert jetzt auf "zettel", "kleinen zettel", "blatt",
-     "kleines blatt" sowie auf die (sprachlich nicht ganz so korrekten)
-     Konstruktionen "kleines zettel", "kleinen blatt", "kleines kleinen
-     zettel", ...
+   adj
+        String oder Array von String mit den Adjektiven.
 
-SIEHE AUCH:
-     AddId(), RemoveAdjective() id(), present(), /std/thing/description.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Zusaetzlich zu den mit AddId() vergebenen Bezeichnern laesst sich mit
+   der Vergabe von Adjektiven die Ansprechbarkeit eines Objektes erhoehen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Die Adjektive werden nicht dekliniert, man muss also fuer jeden
+   sinnvollen Fall ein Adjektiv uebergeben.
+
+
+BEISPIELE
+=========
+
+     AddId( ({ "zettel", "blatt" }) );
+     AddAdjective( ({ "kleinen", "kleines" }) );
+
+   Das Objekt reagiert jetzt auf "zettel", "kleinen zettel", "blatt",
+   "kleines blatt" sowie auf die (sprachlich nicht ganz so korrekten)
+   Konstruktionen "kleines zettel", "kleinen blatt", "kleines kleinen
+   zettel", ...
+
+
+SIEHE AUCH
+==========
+
+   AddId(), RemoveAdjective() id(), present(), /std/thing/description.c
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddAmount b/doc/lfun/AddAmount
index 3be8e3f..59bb9b1 100644
--- a/doc/lfun/AddAmount
+++ b/doc/lfun/AddAmount
@@ -1,25 +1,44 @@
+
 AddAmount()
+***********
 
-FUNKTION:
-     void AddAmount(int menge);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     menge
-          Die Menge, die der Unit hinzugefuegt werden soll (kann auch
-          negativ sein).
+   void AddAmount(int menge);
 
-BESCHREIBUNG:
-     menge wird zur aktuellen Menge hinzugezaehlt. Sollte das Ergebnis 0
-     werden, wird die Unit in absehbarer Zeit zerstoert.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     /std/unit.c
+   /std/unit.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   menge
+        Die Menge, die der Unit hinzugefuegt werden soll (kann auch
+        negativ sein).
+
+
+BESCHREIBUNG
+============
+
+   menge wird zur aktuellen Menge hinzugezaehlt. Sollte das Ergebnis 0
+   werden, wird die Unit in absehbarer Zeit zerstoert.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   /std/unit.c
+
 Last modified: Wed May 8 10:15:50 1996 by Wargon
diff --git a/doc/lfun/AddClass b/doc/lfun/AddClass
index f97730c..fee72e3 100644
--- a/doc/lfun/AddClass
+++ b/doc/lfun/AddClass
@@ -1,28 +1,48 @@
+
 AddClass()
-FUNKTION:
-     void AddClass(string|string* class);
+**********
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     string/string* class	- String oder Stringarray der Klasse(n)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Dem Objekt werden weitere Klassifizierungen hinzugefuegt.
+   void AddClass(string|string* class);
 
-     Die allgemein verfuegbaren Klassen sind unter /sys/class.h definiert.
 
-BEMERKUNGEN:
-     Vor dem 7. Nov 2012 pruefte is_class_member() auch die P_IDS. Damit war
-     zB ein AddId("daemon") gleichbedeutend einem AddClass(CL_DEMON).
+DEFINIERT IN
+============
 
-     Bitte prueft eure Objekte (NPCs, Krankheiten, Gifte, ...) auf korrekte
-     Klassifizierung.
+   /std/thing/description.c
 
-SIEHE AUCH:
-     RemoveClass(), is_class_member()
-     P_CLASS
+
+ARGUMENTE
+=========
+
+   string/string* class       - String oder Stringarray der Klasse(n)
+
+
+BESCHREIBUNG
+============
+
+   Dem Objekt werden weitere Klassifizierungen hinzugefuegt.
+
+   Die allgemein verfuegbaren Klassen sind unter /sys/class.h definiert.
+
+
+BEMERKUNGEN
+===========
+
+   Vor dem 7. Nov 2012 pruefte is_class_member() auch die P_IDS. Damit war
+   zB ein AddId("daemon") gleichbedeutend einem AddClass(CL_DEMON).
+
+   Bitte prueft eure Objekte (NPCs, Krankheiten, Gifte, ...) auf korrekte
+   Klassifizierung.
+
+
+SIEHE AUCH
+==========
+
+   RemoveClass(), is_class_member()
+   P_CLASS
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddCmd b/doc/lfun/AddCmd
index aeea8db..088da28 100644
--- a/doc/lfun/AddCmd
+++ b/doc/lfun/AddCmd
@@ -1,210 +1,244 @@
+
+AddCmd()
+********
+
+
 AddCmd(L)
-FUNKTION:
-    varargs void AddCmd(mixed cmd, mixed func, [mixed flag, [mixed id]]);
-
-DEFINIERT IN:
-    /std/thing/commands.c
-
-ARGUMENTE:
-    cmd
-       Verben, auf die reagiert werden soll
-       ODER
-       Regel mit Triggerverb und noetigen Keywords/Synonymen
-    func
-       Funktionsname im selben Objekt oder Closure (Funktionspointer)
-    flag (optional)
-       Unscharfe Ausfuehrung == 1
-       ODER
-       Fehlermeldungen bei Nutzung von Regeln
-    id (optional)
-       eine ID, ueber die das Kommando eindeutig wieder geloescht
-       werden kann
-
-BESCHREIBUNG:
-    Wenn ein Spieler im Einflussbereich des Objektes das Verb benutzt,
-    wird die entsprechende Funktion im Objekt aufgerufen:
-    - die Verben sollten Imperative sein
-    - die Funktion muss 1 fuer ERFOLG (und FPs!) und 0 sonst zurueckgeben
-      (sonst werden evtl. weitere Funktionen mit diesem Kommandoverb gerufen)
-    - innerhalb der Funktionen koennen Fehlermeldungen fuer den totalen
-      Misserfolg des Kommandos mit notify_fail gesetzt werden
-      (anstatt "Wie bitte?")
-
-    AddCmd ist ein dynamischer Ersatz fuer add_action - im Gegensatz
-    zu add_action koennen auch ohne erneuten Aufruf der init() neue
-    Kommandos hinzugefuegt werden.
-
-    AddCmd kann das Leben einfacher machen mit:
-    ### REGELN: ###
-      Bei komplexen Syntaxen kann ein String angegeben werden, der die
-      _notwendigen_ (nicht die erlaubten!) Schluesselworte und deren
-      zulaessige Synonyme beschreibt. Damit kann man sich einen grossen
-      Teil eigener Auswertung ersparen.
-
-      Nur wenn in richtiger Reihenfolge aus JEDER der durch & getrennten
-      Synonymgruppen ein Wort im Spielerkommando enthalten ist, wird
-      die zugehoerige Funktion ausgefuehrt.
-
-      Trenner sind: | fuer Alternativen
-                    & fuer Konjunktionen
-
-      Beispiel:
-        "ritz|ritze|schnitz|schnitze&mit&messer|schnitzmesser&"
-        "herz|herzchen&rinde|baumrinde"
-      wuerde z.B. durch
-        "ritz mit dem Messer ein Herz in die Rinde des Baumes"
-        "schnitz mit Messer Herzchen Baumrinde"
-        "schnitz mit meinem Messer Herzchen in die harte Baumrinde"
-      erfuellt werden.
-
-      Spezialregelteile sind:
-      - @PRESENT: entspricht einem Objekt in Inv oder Env des Spielers
-      - @ID:      entspricht der ID des kommandobesitzenden Objektes
-                  (wo die Kommandomethode definiert ist, ist noch unwichtig)
-      - @PUT_GET_DROP, @PUT_GET_TAKE, @PUT_GET_NONE:
-                  entsprechend den Filteroptionen fuer find_obs()
-      ACHTUNG: Zusaetzliche Ziffern in Verbindung mit den @-Spezialregeln
-               sind schlecht. @-Regeln versuchen gierig, Objekte exakt im
-               Inventory zu matchen ("objekt 3" anstatt "objekt") und miss-
-               interpretieren daher zB die 4 in "stopf objekt 3 in loch 4" als
-               Teil des Objekt-ID-Strings.
-               Interna: 3 Substrings fuer @PRESENT/@ID ("gruener kristall 2")
-                        5 fuer @PUT... ("kristall 2 in beutel 3")
-
-    ### FEHLERMELDUNGEN (bei Anwendung von Regeln): ###
-      Als dritter Parameter koennen auch Fehlermeldungen fuer jeweils
-      fehlende Synonymgruppen (ausser der ersten - den Kommandoverben)
-      angegeben werden. Sie werden in derselben Reihenfolge (!) wie die
-      Synonymgruppen angegeben.
-
-      Mit nicht von Spielern erfuellbaren Regeln und ^-Fehlermeldungen
-      kann man auch ohne Ausfuehrung einer Funktion Texte an Spieler
-      und Umgebung ausgeben. Siehe dazu AddCmd_bsp.
-
-      Trenner sind: | zum Trennen der einzelnen Fehlermeldungen
-                    ^ um
-                       - die Auswertung (ab dieser Fehlermeldung!) mit
-                         "return 1;" zu beenden und
-                       - eine write^say-Meldung zu trennen und
-                       - (fuer funktionslose AddCmd auch FPs zu vergeben!)
-
-      Beispielfehlermeldungen fuer obige Regel:
-        "Womit willst Du schnitzen?|Was willst Du schnitzen?|"
-        "Wohinein willst Du das schnitzen?"
-
-      Es koennen in den Fehlermeldungen folgende Platzhalter benutzt
-      werden:
-      - @verb (ersetzt durch query_verb() ohne beendendes 'e')
-      - @VERB (ersetzt durch capitalize(query_verb()) ohne beendendes 'e')
-      - @WERx, @WESSENx, @WEMx, @WENx: siehe alles aus replace_personal()
-        - @WE..1 ist immer der aktive Spieler
-        - alle folgenden sind die matchenden Parameter der Spielereingabe
-          - (x-1)<=Fehlermeldung (da x=1 Spieler und
-                                  (x-1)>Fehlermeldungsobjekt nicht existent)
-
-      Ausfuehrungsbeispiel:
-        AddCmd("ritz|ritze|schnitz|schnitze&mit&messer|schnitzmesser&"
-               "herz|herzchen&rinde|baumrinde",#'fun,
-              "Willst Du mit etwas @verben?|Womit willst du @verben?|"
-              "Was willst du mit dem @WEM3 @verben?|"
-              "Wohinein willst Du das @WEN4 schnitzen?");
-        1. "ritze" == "Willst Du mit etwas ritzen?"
-        2. "schnitz mit" == "Womit willst du schnitzen?"
-        3. "ritz mit messer" == "Was willst du mit dem messer ritzen?"
-        4. "ritze mit dem messer ein herz" ==
-             "Wohinein willst Du das herz schnitzen?"
-        5. "ritze mit dem messer ein herzchen in die baumrinde"
-             == Erfolg!
-
-    ### UNSCHARFER AUSFUEHRUNG: ###
-      Bei unscharfer Ausfuehrung wird die zugehoerige Methode auch dann
-      ausgefuehrt, wenn das verwendete Verb ein Superstring ist und
-      bisher noch nicht behandelt wurde.
-      Dieses Verhalten sollte nur beim generellen Abfangen von
-      Befehlsgruppen benutzt werden und ist ansonsten veraltet. Es
-      entsprich add_action("fun","kommando",1).
+=========
 
 
-      Beispiel:
-        1. AddCmd("klett","fun",1);
-        2. AddCmd("kletter|klettere&hoch",#'fun2,"Wohin klettern?");
+FUNKTION
+========
 
-        a) "klett"
-        b) "kletter"
-        c) "klettere hoch"
+   varargs void AddCmd(mixed cmd, mixed func, [mixed flag, [mixed id]]);
 
-        Ausgefuehrte Funktion bei: 1a, 1b, 1c; 2c
-       (1 wuerde also immer ausgefuehrt)
-        Fehlermeldung bei: 2b ("Wohin klettern?")
 
-BEMERKUNGEN:
-    - Methoden der put_and_get (nimm/nehme) sollten so nicht versucht
-      werden zu ueberschreiben - dazu sind invis Container da
-    - benutzt man fuer <function> eine Closure, kann man die Fkt. auch
-      protected oder private deklarieren _und_ sie kann in einem
-      anderen Objekt sein
-    - bei Regeln wird an die ggf. gerufene Methode als zweiter Parameter
-      ein Array der erfuellenden Eingabeteile uebergeben:
-      "steck&@PRESENT&in&loch" bei Erfuellung -> ({<Objekt>,"in","loch})
-      - bei Nutzung von @PUT_GET_XXX koennen die Parameter wiederum
-        Arrays sein ("jede Hose" -> mehrere gueltige Objekte)
-    - juengere AddCmd ueberschreiben aeltere, bzw. werden vor diesen
-      ausgewertet
-    - @PUT_GET_XXX kosten sehr viel Auswertungszeit
+DEFINIERT IN
+============
+
+   /std/thing/commands.c
+
+
+ARGUMENTE
+=========
+
+   cmd
+      Verben, auf die reagiert werden soll
+
+      ODER
+
+      Regel mit Triggerverb und noetigen Keywords/Synonymen
+   func
+      Funktionsname im selben Objekt oder Closure (Funktionspointer)
+   flag (optional)
+      Unscharfe Ausfuehrung == 1
+
+      ODER
+
+      Fehlermeldungen bei Nutzung von Regeln
+   id (optional)
+      eine ID, ueber die das Kommando eindeutig wieder geloescht
+      werden kann
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Spieler im Einflussbereich des Objektes das Verb benutzt,
+   wird die entsprechende Funktion im Objekt aufgerufen:
+   - die Verben sollten Imperative sein
+   - die Funktion muss 1 fuer ERFOLG (und FPs!) und 0 sonst zurueckgeben
+     (sonst werden evtl. weitere Funktionen mit diesem Kommandoverb gerufen)
+   - innerhalb der Funktionen koennen Fehlermeldungen fuer den totalen
+     Misserfolg des Kommandos mit notify_fail gesetzt werden
+     (anstatt "Wie bitte?")
+
+   AddCmd ist ein dynamischer Ersatz fuer add_action - im Gegensatz
+   zu add_action koennen auch ohne erneuten Aufruf der init() neue
+   Kommandos hinzugefuegt werden.
+
+   AddCmd kann das Leben einfacher machen mit:
+   ### REGELN: ###
+     Bei komplexen Syntaxen kann ein String angegeben werden, der die
+     _notwendigen_ (nicht die erlaubten!) Schluesselworte und deren
+     zulaessige Synonyme beschreibt. Damit kann man sich einen grossen
+     Teil eigener Auswertung ersparen.
+
+     Nur wenn in richtiger Reihenfolge aus JEDER der durch & getrennten
+     Synonymgruppen ein Wort im Spielerkommando enthalten ist, wird
+     die zugehoerige Funktion ausgefuehrt.
+
+     Trenner sind: | fuer Alternativen
+                   & fuer Konjunktionen
+
+     Beispiel:
+       "ritz|ritze|schnitz|schnitze&mit&messer|schnitzmesser&"
+       "herz|herzchen&rinde|baumrinde"
+     wuerde z.B. durch
+       "ritz mit dem Messer ein Herz in die Rinde des Baumes"
+       "schnitz mit Messer Herzchen Baumrinde"
+       "schnitz mit meinem Messer Herzchen in die harte Baumrinde"
+     erfuellt werden.
+
+     Spezialregelteile sind:
+     - @PRESENT: entspricht einem Objekt in Inv oder Env des Spielers
+     - @ID:      entspricht der ID des kommandobesitzenden Objektes
+                 (wo die Kommandomethode definiert ist, ist noch unwichtig)
+     - @PUT_GET_DROP, @PUT_GET_TAKE, @PUT_GET_NONE:
+                 entsprechend den Filteroptionen fuer find_obs()
+     ACHTUNG: Zusaetzliche Ziffern in Verbindung mit den @-Spezialregeln
+              sind schlecht. @-Regeln versuchen gierig, Objekte exakt im
+              Inventory zu matchen ("objekt 3" anstatt "objekt") und miss-
+              interpretieren daher zB die 4 in "stopf objekt 3 in loch 4" als
+              Teil des Objekt-ID-Strings.
+              Interna: 3 Substrings fuer @PRESENT/@ID ("gruener kristall 2")
+                       5 fuer @PUT... ("kristall 2 in beutel 3")
+
+   ### FEHLERMELDUNGEN (bei Anwendung von Regeln): ###
+     Als dritter Parameter koennen auch Fehlermeldungen fuer jeweils
+     fehlende Synonymgruppen (ausser der ersten - den Kommandoverben)
+     angegeben werden. Sie werden in derselben Reihenfolge (!) wie die
+     Synonymgruppen angegeben.
+
+     Mit nicht von Spielern erfuellbaren Regeln und ^-Fehlermeldungen
+     kann man auch ohne Ausfuehrung einer Funktion Texte an Spieler
+     und Umgebung ausgeben. Siehe dazu AddCmd_bsp.
+
+     Trenner sind: | zum Trennen der einzelnen Fehlermeldungen
+                   ^ um
+                      - die Auswertung (ab dieser Fehlermeldung!) mit
+                        "return 1;" zu beenden und
+                      - eine write^say-Meldung zu trennen und
+                      - (fuer funktionslose AddCmd auch FPs zu vergeben!)
+
+     Beispielfehlermeldungen fuer obige Regel:
+       "Womit willst Du schnitzen?|Was willst Du schnitzen?|"
+       "Wohinein willst Du das schnitzen?"
+
+     Es koennen in den Fehlermeldungen folgende Platzhalter benutzt
+     werden:
+     - @verb (ersetzt durch query_verb() ohne beendendes 'e')
+     - @VERB (ersetzt durch capitalize(query_verb()) ohne beendendes 'e')
+     - @WERx, @WESSENx, @WEMx, @WENx: siehe alles aus replace_personal()
+       - @WE..1 ist immer der aktive Spieler
+       - alle folgenden sind die matchenden Parameter der Spielereingabe
+         - (x-1)<=Fehlermeldung (da x=1 Spieler und
+                                 (x-1)>Fehlermeldungsobjekt nicht existent)
+
+     Ausfuehrungsbeispiel:
+       AddCmd("ritz|ritze|schnitz|schnitze&mit&messer|schnitzmesser&"
+              "herz|herzchen&rinde|baumrinde",#'fun,
+             "Willst Du mit etwas @verben?|Womit willst du @verben?|"
+             "Was willst du mit dem @WEM3 @verben?|"
+             "Wohinein willst Du das @WEN4 schnitzen?");
+       1. "ritze" == "Willst Du mit etwas ritzen?"
+       2. "schnitz mit" == "Womit willst du schnitzen?"
+       3. "ritz mit messer" == "Was willst du mit dem messer ritzen?"
+       4. "ritze mit dem messer ein herz" ==
+            "Wohinein willst Du das herz schnitzen?"
+       5. "ritze mit dem messer ein herzchen in die baumrinde"
+            == Erfolg!
+
+   ### UNSCHARFER AUSFUEHRUNG: ###
+     Bei unscharfer Ausfuehrung wird die zugehoerige Methode auch dann
+     ausgefuehrt, wenn das verwendete Verb ein Superstring ist und
+     bisher noch nicht behandelt wurde.
+     Dieses Verhalten sollte nur beim generellen Abfangen von
+     Befehlsgruppen benutzt werden und ist ansonsten veraltet. Es
+     entsprich add_action("fun","kommando",1).
+
+
+     Beispiel:
+       1. AddCmd("klett","fun",1);
+       2. AddCmd("kletter|klettere&hoch",#'fun2,"Wohin klettern?");
+
+       a) "klett"
+       b) "kletter"
+       c) "klettere hoch"
+
+       Ausgefuehrte Funktion bei: 1a, 1b, 1c; 2c
+      (1 wuerde also immer ausgefuehrt)
+       Fehlermeldung bei: 2b ("Wohin klettern?")
+
+
+BEMERKUNGEN
+===========
+
+   - Methoden der put_and_get (nimm/nehme) sollten so nicht versucht
+     werden zu ueberschreiben - dazu sind invis Container da
+   - benutzt man fuer <function> eine Closure, kann man die Fkt. auch
+     protected oder private deklarieren _und_ sie kann in einem
+     anderen Objekt sein
+   - bei Regeln wird an die ggf. gerufene Methode als zweiter Parameter
+     ein Array der erfuellenden Eingabeteile uebergeben:
+     "steck&@PRESENT&in&loch" bei Erfuellung -> ({<Objekt>,"in","loch})
+     - bei Nutzung von @PUT_GET_XXX koennen die Parameter wiederum
+       Arrays sein ("jede Hose" -> mehrere gueltige Objekte)
+   - juengere AddCmd ueberschreiben aeltere, bzw. werden vor diesen
+     ausgewertet
+   - @PUT_GET_XXX kosten sehr viel Auswertungszeit
 
 BEISPIELE (SIEHE AUCH ADDCMD_BSP):
-    // SIMPEL: ganz simpel, beinahe wie add_action
-    AddCmd("befiehl","action_befehlen");
-    ...
-    int action_befehlen(string str) {
-     if(!str || !strlen(str))
-      // Fehlermeldung, falls gar keine Funktion 1 dafuer zurueckgibt
-      notify_fail("Was willst du befehlen?!\n");
-     else {
-      write("Du befiehlst \""+str+"\", und alle folgen!\n");
-      say(TP->Name(WER)+" befiehlt \""+str+"\", und du folgst!\n");
-      return 1;  // ERFOLG - Abbruch der Kommandoauswertung
-     }
-     return 0;  // MISSERFOLG - Fehlermeldung oben gesetzt
-    }
+   // SIMPEL: ganz simpel, beinahe wie add_action
+   AddCmd("befiehl","action_befehlen"); ... int action_befehlen(string
+   str) {
 
-    // SIMPEL .. weitere Beispiele
-    AddCmd(({"kletter","klettere"}),"action_klettern" );
-    AddCmd(({"renn","renne"}),#'action_rennen);
+      if(!str || !strlen(str))
+         // Fehlermeldung, falls gar keine Funktion 1 dafuer
+         zurueckgibt notify_fail("Was willst du befehlen?!n");
 
-    // REGELN: eine komplexere Regel
-    AddCmd("loesch|loesche|ersticke&feuer|brand|flammen&decke|wolldecke",
-           "action_loeschen",
-           "Was willst du loeschen?|Womit willst du loeschen?");
+      else {
+         write("Du befiehlst ""+str+"", und alle folgen!n");
+         say(TP->Name(WER)+" befiehlt ""+str+"", und du folgst!n");
+         return 1;  // ERFOLG - Abbruch der Kommandoauswertung
 
-    // REGELN: mit Platzhaltern im Fehlerstring
-    AddCmd("spring|springe|huepf|huepfe&von|vom&baum|ast|eiche",
-           #'action_huepfe,
-           "Willst du von etwas @verben?|Von wo willst du @verben?");
+      } return 0;  // MISSERFOLG - Fehlermeldung oben gesetzt
 
-    // SCHLECHT: eine unscharfe Regel - sie sollten eine Ausnahme sein (!)
-    AddCmd("kletter","fun_klettern",1);
+   }
 
-    // FALSCH: sehr schlecht, kein Imperativ verwendet
-    // ausserdem sollte man fuer solche Syntaxen AddReadDetail benutzen
-    AddCmd("lese","eval_lesen");
+   // SIMPEL .. weitere Beispiele
+   AddCmd(({"kletter","klettere"}),"action_klettern" );
+   AddCmd(({"renn","renne"}),#'action_rennen);
 
-    // SIMPLE REGEL OHNE METHODE
-    // mit Regeln kann man auch Aktivitaeten im Raum erlauben, ohne eine
-    // Funktion aufrufen zu muessen: die letzte Regel ist fuer Spieler
-    // unmoeglich zu erfuellen, die dazugehoerige Fehlermeldung wird mit
-    // dem ^ (write-Flag) versehen und entsprechend an den Spieler
-    // (und den Raum (hinter dem ^)) ausgegeben
-    AddCmd("spring|springe&herunter|runter&\n\bimpossible",0,
-           "Wohin oder wovon willst Du springen?|"
-           "Du springst vom Baum und kommst hart auf.^"
-           "@WER1 springt vom Baum und kommt hart auf.");
+   // REGELN: eine komplexere Regel AddCmd("loesch|loesche|ersticke&f
+   euer|brand|flammen&decke|wolldecke",
 
-SIEHE AUCH:
-    AddCmd_bsp, RemoveCmd(L), init(E)
-    Fehlermeldungen: notify_fail(E), _notify_fail(E)
-    Argumentstring: query_verb(E), _unparsed_args(L)
-    Sonstiges:  replace_personal(E), enable_commands(E)
-    Alternativen: AddAction(L), add_action(E)
+      "action_loeschen", "Was willst du loeschen?|Womit willst du
+      loeschen?");
+
+   // REGELN: mit Platzhaltern im Fehlerstring
+   AddCmd("spring|springe|huepf|huepfe&von|vom&baum|ast|eiche",
+
+      #'action_huepfe, "Willst du von etwas @verben?|Von wo willst du
+      @verben?");
+
+   // SCHLECHT: eine unscharfe Regel - sie sollten eine Ausnahme sein
+   (!) AddCmd("kletter","fun_klettern",1);
+
+   // FALSCH: sehr schlecht, kein Imperativ verwendet // ausserdem
+   sollte man fuer solche Syntaxen AddReadDetail benutzen
+   AddCmd("lese","eval_lesen");
+
+   // SIMPLE REGEL OHNE METHODE // mit Regeln kann man auch
+   Aktivitaeten im Raum erlauben, ohne eine // Funktion aufrufen zu
+   muessen: die letzte Regel ist fuer Spieler // unmoeglich zu
+   erfuellen, die dazugehoerige Fehlermeldung wird mit // dem ^
+   (write-Flag) versehen und entsprechend an den Spieler // (und den
+   Raum (hinter dem ^)) ausgegeben
+   AddCmd("spring|springe&herunter|runter&nbimpossible",0,
+
+      "Wohin oder wovon willst Du springen?|" "Du springst vom Baum
+      und kommst hart auf.^" "@WER1 springt vom Baum und kommt hart
+      auf.");
+
+
+SIEHE AUCH
+==========
+
+   AddCmd_bsp, RemoveCmd(L), init(E)
+   Fehlermeldungen: notify_fail(E), _notify_fail(E)
+   Argumentstring: query_verb(E), _unparsed_args(L)
+   Sonstiges:  replace_personal(E), enable_commands(E)
+   Alternativen: AddAction(L), add_action(E)
 
 30. Aug 2013 Gloinson
diff --git a/doc/lfun/AddCmd_bsp b/doc/lfun/AddCmd_bsp
index 6a4e177..ec8ff17 100644
--- a/doc/lfun/AddCmd_bsp
+++ b/doc/lfun/AddCmd_bsp
@@ -1,320 +1,382 @@
+
+AddCmd_bsp()
+************
+
+
 ADDCMD() - BEISPIELE
+====================
+
+
 FUNKTION
-    varargs void AddCmd(mixed cmd, mixed func, mixed flag);
+========
+
+   varargs void AddCmd(mixed cmd, mixed func, mixed flag);
+
 
 BEMERKUNGEN
-    Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis gedacht,
-    daher fuehren sie oft Alternativen auf. Die letzte Variante ist dann
-    jeweils diejenige, welche am leichtesten das Problem loesen koennte.
-    Falls die einem zu komplex ist, hilft vielleicht die vorletzte.
+===========
+
+   Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis gedacht,
+   daher fuehren sie oft Alternativen auf. Die letzte Variante ist dann
+   jeweils diejenige, welche am leichtesten das Problem loesen koennte.
+   Falls die einem zu komplex ist, hilft vielleicht die vorletzte.
+
 
 BEISPIELE
-    // SIMPEL: ganz simpel, beinahe wie add_action
-    AddCmd("befiehl","action_befehlen");
-    ...
-    int action_befehlen(string str) {
-     if(!str || !strlen(str))
-      // Fehlermeldung, falls gar keine Funktion 1 dafuer zurueckgibt
-      notify_fail("Was willst du befehlen?!\n");
-     else {
-      write("Du befiehlst \""+str+"\", und alle folgen!\n");
-      say(TP->Name(WER)+" befiehlt \""+str+"\", und du folgst!\n");
-      return 1;		// ERFOLG - Abbruch der Kommandoauswertung
-     }
-     return 0;		// MISSERFOLG - Fehlermeldung oben gesetzt
+=========
+
+   // SIMPEL: ganz simpel, beinahe wie add_action
+   AddCmd("befiehl","action_befehlen");
+   ...
+   int action_befehlen(string str) {
+    if(!str || !strlen(str))
+     // Fehlermeldung, falls gar keine Funktion 1 dafuer zurueckgibt
+     notify_fail("Was willst du befehlen?!\n");
+    else {
+     write("Du befiehlst \""+str+"\", und alle folgen!\n");
+     say(TP->Name(WER)+" befiehlt \""+str+"\", und du folgst!\n");
+     return 1;         // ERFOLG - Abbruch der Kommandoauswertung
     }
+    return 0;          // MISSERFOLG - Fehlermeldung oben gesetzt
+   }
 
-    // SIMPEL .. weitere Beispiele
-    AddCmd(({"kletter","klettere"}),"action_klettern" );
-    AddCmd(({"renn","renne"}),#'action_rennen);
+   // SIMPEL .. weitere Beispiele
+   AddCmd(({"kletter","klettere"}),"action_klettern" );
+   AddCmd(({"renn","renne"}),#'action_rennen);
 
-    // REGELN: eine komplexere Regel
-    AddCmd("loesch|loesche|ersticke&feuer|brand|flammen&decke|wolldecke",
-           "action_loeschen",
-           "Was willst du loeschen?|Womit willst du loeschen?");
+   // REGELN: eine komplexere Regel
+   AddCmd("loesch|loesche|ersticke&feuer|brand|flammen&decke|wolldecke",
+          "action_loeschen",
+          "Was willst du loeschen?|Womit willst du loeschen?");
 
-    // REGELN: mit Platzhaltern im Fehlerstring
-    AddCmd("spring|springe|huepf|huepfe&von|vom&baum|ast|eiche",
-           #'action_huepfe,
-           "Willst du von etwas @verben?|Von wo willst du @verben?");
+   // REGELN: mit Platzhaltern im Fehlerstring
+   AddCmd("spring|springe|huepf|huepfe&von|vom&baum|ast|eiche",
+          #'action_huepfe,
+          "Willst du von etwas @verben?|Von wo willst du @verben?");
 
-    // SCHLECHT: eine unscharfe Regel - sie sollten eine Ausnahme sein (!)
-    AddCmd("kletter","fun_klettern",1);
+   // SCHLECHT: eine unscharfe Regel - sie sollten eine Ausnahme sein (!)
+   AddCmd("kletter","fun_klettern",1);
 
-    // FALSCH: sehr schlecht, kein Imperativ verwendet
-    // ausserdem sollte man fuer solche Syntaxen AddReadDetail benutzen
-    AddCmd("lese","eval_lesen");
+   // FALSCH: sehr schlecht, kein Imperativ verwendet
+   // ausserdem sollte man fuer solche Syntaxen AddReadDetail benutzen
+   AddCmd("lese","eval_lesen");
 
-    // SIMPLE REGEL
-    static int action_jump(string str);        // Prototype (wegen closure)
-    ...
-    AddCmd("spring|springe|huepf|huepfe&von&baum|ast",#'action_jump,
-           "Willst Du von etwas @verben?|Wovon willst Du @verben?");
-    ...
-    static int action_jump(string str) {
-      write(break_string("Du springst vom Baum und kommst hart auf!",78));
-      this_player()->move((XXXROOM+"boden"), M_GO, 0,
-                          "springt unelegant vom Baum","faellt vom Baum");
-      this_player()->Defend(random(100),({DT_BLUDGEON}),([SP_RECURSIVE:1]),
-                            this_object());
-      return 1;
-    }
+   // SIMPLE REGEL
+   static int action_jump(string str);        // Prototype (wegen closure)
+   ...
+   AddCmd("spring|springe|huepf|huepfe&von&baum|ast",#'action_jump,
+          "Willst Du von etwas @verben?|Wovon willst Du @verben?");
+   ...
+   static int action_jump(string str) {
+     write(break_string("Du springst vom Baum und kommst hart auf!",78));
+     this_player()->move((XXXROOM+"boden"), M_GO, 0,
+                         "springt unelegant vom Baum","faellt vom Baum");
+     this_player()->Defend(random(100),({DT_BLUDGEON}),([SP_RECURSIVE:1]),
+                           this_object());
+     return 1;
+   }
 
-    // SIMPLE REGEL OHNE METHODE
-    // mit Regeln kann man auch Aktivitaeten im Raum erlauben, ohne eine
-    // Funktion aufrufen zu muessen: die letzte Regel ist fuer Spieler
-    // unmoeglich zu erfuellen, die dazugehoerige Fehlermeldung wird mit
-    // dem ^ (write-Flag) versehen und entsprechend an den Spieler
-    // (und den Raum (hinter dem ^)) ausgegeben
-    AddCmd("spring|springe&herunter|runter&\n\bimpossible",0,
-           "Wohin oder wovon willst Du springen?|"
-           "Du springst vom Baum und kommst hart auf.^"
-           "@WER1 springt vom Baum und kommt hart auf.");
+   // SIMPLE REGEL OHNE METHODE
+   // mit Regeln kann man auch Aktivitaeten im Raum erlauben, ohne eine
+   // Funktion aufrufen zu muessen: die letzte Regel ist fuer Spieler
+   // unmoeglich zu erfuellen, die dazugehoerige Fehlermeldung wird mit
+   // dem ^ (write-Flag) versehen und entsprechend an den Spieler
+   // (und den Raum (hinter dem ^)) ausgegeben
+   AddCmd("spring|springe&herunter|runter&\n\bimpossible",0,
+          "Wohin oder wovon willst Du springen?|"
+          "Du springst vom Baum und kommst hart auf.^"
+          "@WER1 springt vom Baum und kommt hart auf.");
 
 ## Komplexbeispiel: Regeln mit Fehlermeldungen ##
- ## Variante 1, OHNE REGELN ##
-    // bei Nichtverwendung von Regeln muss man Parameter selbst auswerten
-    AddCmd(({"bohr","bohre"}),#'action_bohren);
-    ...
-    private int action_bohren(string str) {
-      string *tmp;
-      notify_fail("Wo willst (etwas) Du bohren?\n");
-      if(!str) return 0;       // Tja, keine Argumente ...
-      tmp=explode(str," ");    // nach " " in Argument-Array aufspalten
-      if((i=member(tmp,"loch"))>=0) { // aha, ab jetzt uebernehmen wir :)
-       if((j=member(tmp[(i+1)..],"in"))<0 &&
-          (j=member(tmp[(i+1)..],"durch"))<0)
-         write("Willst Du das Loch in etwas bohren?\n");
-        else if((i=member(tmp[(j+1)..],"boden"))<0 &&
-                (i=member(tmp[(j+1)..],"erde"))<0)
-         write("In/Durch was willst du das Loch bohren?\n");
-        else {
-         write("Du bohrst ein Loch in den Boden.\n");
-         say(this_player()->Name(WER)+" bohrt ein Loch in den Boden.\n");
-        }
-        return 1;      // "bohre loch" war so eindeutig, dass nur diese
-                       // Methode gemeint sein konnte, also brechen wir die
-                       // weitere Auswertung auf jeden Fall ab (und geben
-                       // eine write-Fehlermeldung)
-      } // end if(..."loch")
-      return 0;        // "bohre" allein muss nicht diese Methode meinen,
-                       // also nur obige notify_fail()-Meldung, falls
-                       // sich nach dieser Methode gar keine sonst
-                       // angesprochen fuehlt
-    } // end fun
+   ## Variante 1, OHNE REGELN ##
+      // bei Nichtverwendung von Regeln muss man Parameter selbst
+      auswerten AddCmd(({"bohr","bohre"}),#'action_bohren); ...
+      private int action_bohren(string str) {
 
- ## Variante 1a, OHNE REGELN ##
-    // prinzipiell koennte die Methode action_bohren auch so
-    // aussehen, ist aber nicht ganz so flexibel:
-    private int action_bohren(string str) {
-     string tmp;
-     if(!str || (sprintf(str,"loch in erde%s",tmp)!=1 &&
-                 sprintf(str,"loch durch erde%s",tmp)!=1 &&
-                 sprintf(str,"loch in boden%s",tmp)!=1 &&
-                 sprintf(str,"loch durch boden%s",tmp)!=1))
-      notify_fail("Willst Du in irgendwas ein Loch bohren?\n");
-     else {
-      ...
-      return 1;
-     }
-     return 0;
-    }
+         string >>*<<tmp; notify_fail("Wo willst (etwas) Du
+         bohren?n"); if(!str) return 0;       // Tja, keine Argumente
+         ... tmp=explode(str," ");    // nach " " in Argument-Array
+         aufspalten if((i=member(tmp,"loch"))>=0) { // aha, ab jetzt
+         uebernehmen wir :)
 
- ## Variante 2, MIT REGEL ##
-    // das gleiche in etwa mal als einfache Regel
-    AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
-           "Was willst du (wohin) bohren?|"
-           "Willst du das Loch in etwas bohren?|"
-           "Wohin willst du das Loch bohren?");
-    ...
-    private int action_bohren(string str, mixed *param) {
-     write("Du bohrst ein Loch in den Boden.\n");
-     say(this_player()->Name(WER)+" bohrt ein Loch in den Boden.\n");
-     ...
-     return 1;
-    }
+            if((j=member(tmp[(i+1)..],"in"))<0 &&
+                     (j=member(tmp[(i+1)..],"durch"))<0)
 
- ## Variante 3, MIT REGEL UND FEHLERMELDUNG ##
-    // und nun mit Fehlermeldungen mit Ersetzungen, so dass wir mehr
-    // auf die Eingaben des Spielers eingehen
-    AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
-           "Was willst du (wohin) @verben?|"
-           "Willst du das Loch in etwas @verben?|"
-           "@WER3 was willst du das Loch @verben?");
-    ...
-    private int action_bohren(string str, mixed *param) ...
+                  write("Willst Du das Loch in etwas bohren?n");
 
- ## Variante 4, MIT REGEL, FEHLERMELDUNG UND RETURN 1 ##
-    // in Variante 1 kam sinnvollerweise sehr frueh der Abbruch mit
-    // "return 1;" und die Ausgabe von write-Fehlermeldungen,
-    // das koennen wir auch
-    AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
-           "Was willst du (wohin) @verben?|"
-           "Willst du das Loch in etwas @verben?^|"
-           "@WER3 was willst du das Loch @verben?^");
-    ...
-    private int action_bohren(string str, mixed *param) ...
+               else if((i=member(tmp[(j+1)..],"boden"))<0 &&
+                     (i=member(tmp[(j+1)..],"erde"))<0)
 
- ## Variante 5, MIT REGEL, FEHLERMELDUNG, RETURN 1, OHNE FUN ##
-    // und falls in action_bohren() nichts ausser Ausgaben passiert, koennen
-    // wir uns die auch ganz sparen indem wir eine nichterfuellbare Regel
-    // samt Fehlermeldung bauen
-    AddCmd("bohr|bohre&loch&in|durch&erde|boden&\nimpossible",0,
-           "Was willst du (wohin) @verben?|"
-           "Willst du das Loch in etwas @verben?^|"
-           "@WER3 was willst du das Loch @verben?^|"
-           "Du @verbst ein Loch @WER3 den Boden.^@WER1 @verbt "
-           "ein Loch @WER3 den Boden.");
+                  write("In/Durch was willst du das Loch bohren?n");
 
-   --- Ende Komplexbeispiel Regeln mit Fehlermeldungen ---
+               else {
+                  write("Du bohrst ein Loch in den Boden.n");
+                  say(this_player()->Name(WER)+" bohrt ein Loch in den
+                  Boden.n");
+
+               } return 1;      // "bohre loch" war so eindeutig, dass
+               nur diese
+
+                  // Methode gemeint sein konnte, also brechen wir die
+                  // weitere Auswertung auf jeden Fall ab (und geben
+                  // eine write-Fehlermeldung)
+
+         } // end if(..."loch") return 0;        // "bohre" allein
+         muss nicht diese Methode meinen,
+
+            // also nur obige notify_fail()-Meldung, falls // sich
+            nach dieser Methode gar keine sonst // angesprochen fuehlt
+
+      } // end fun
+
+   ## Variante 1a, OHNE REGELN ##
+      // prinzipiell koennte die Methode action_bohren auch so //
+      aussehen, ist aber nicht ganz so flexibel: private int
+      action_bohren(string str) {
+
+         string tmp; if(!str || (sprintf(str,"loch in erde%s",tmp)!=1
+         &&
+
+               sprintf(str,"loch durch erde%s",tmp)!=1 &&
+               sprintf(str,"loch in boden%s",tmp)!=1 &&
+               sprintf(str,"loch durch boden%s",tmp)!=1))
+
+            notify_fail("Willst Du in irgendwas ein Loch bohren?n");
+
+         else {
+            ... return 1;
+
+         } return 0;
+
+      }
+
+   ## Variante 2, MIT REGEL ##
+      // das gleiche in etwa mal als einfache Regel
+      AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
+
+         "Was willst du (wohin) bohren?|" "Willst du das Loch in etwas
+         bohren?|" "Wohin willst du das Loch bohren?");
+
+      ... private int action_bohren(string str, mixed >>*<<param) {
+
+         write("Du bohrst ein Loch in den Boden.n");
+         say(this_player()->Name(WER)+" bohrt ein Loch in den
+         Boden.n"); ... return 1;
+
+      }
+
+   ## Variante 3, MIT REGEL UND FEHLERMELDUNG ##
+      // und nun mit Fehlermeldungen mit Ersetzungen, so dass wir mehr
+      // auf die Eingaben des Spielers eingehen
+      AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
+
+         "Was willst du (wohin) @verben?|" "Willst du das Loch in
+         etwas @verben?|" "@WER3 was willst du das Loch @verben?");
+
+      ... private int action_bohren(string str, mixed >>*<<param) ...
+
+   ## Variante 4, MIT REGEL, FEHLERMELDUNG UND RETURN 1 ##
+      // in Variante 1 kam sinnvollerweise sehr frueh der Abbruch mit
+      // "return 1;" und die Ausgabe von write-Fehlermeldungen, // das
+      koennen wir auch
+      AddCmd("bohr|bohre&loch&in|durch&erde|boden",#'action_bohren,
+
+         "Was willst du (wohin) @verben?|" "Willst du das Loch in
+         etwas @verben?^|" "@WER3 was willst du das Loch @verben?^");
+
+      ... private int action_bohren(string str, mixed >>*<<param) ...
+
+   ## Variante 5, MIT REGEL, FEHLERMELDUNG, RETURN 1, OHNE FUN ##
+         // und falls in action_bohren() nichts ausser Ausgaben
+         passiert, koennen // wir uns die auch ganz sparen indem wir
+         eine nichterfuellbare Regel // samt Fehlermeldung bauen
+         AddCmd("bohr|bohre&loch&in|durch&erde|boden&nimpossible",0,
+
+            "Was willst du (wohin) @verben?|" "Willst du das Loch in
+            etwas @verben?^|" "@WER3 was willst du das Loch
+            @verben?^|" "Du @verbst ein Loch @WER3 den Boden.^@WER1
+            @verbt " "ein Loch @WER3 den Boden.");
+
+      --- Ende Komplexbeispiel Regeln mit Fehlermeldungen ---
 
 ## Komplexbeispiel: Spezialregeln @PRESENT und @ID ##
- ## Variante 1, OHNE REGELN ##
-    // oft agieren Kommandos auf Objekten im Raum, diese muessen dabei per
-    // present() identifiziert werden:
-    // Beispiel ist ein Geldautomat (den man besser mit einem Container
-    // mit PreventInsert() basteln sollte)
-    AddCmd(({"stopf","stopfe"}),#'action_stopf);
-    ...
-    private int action_stopf(string str) {
-     string tmp,tmp2;
-     object o;
+   ## Variante 1, OHNE REGELN ##
+      // oft agieren Kommandos auf Objekten im Raum, diese muessen
+      dabei per // present() identifiziert werden: // Beispiel ist ein
+      Geldautomat (den man besser mit einem Container // mit
+      PreventInsert() basteln sollte)
+      AddCmd(({"stopf","stopfe"}),#'action_stopf); ... private int
+      action_stopf(string str) {
 
-     if(str && (sprintf("%s in automat%s",tmp,tmp2)==2 ||
-                sprintf("%s in geldautomat%s",tmp,tmp2)==2 ||
-                sprintf("%s in bankomat%s",tmp,tmp2)==2) {
-      o=present(tmp,this_player());
-      if(o) {
-       if(o->QueryProp(...)) {
-        write(break_string(
-         "Du stopfst "+o->name(WEN,1)+" in den Automaten.",78));
-        say(...);
-       } else {
-        write(break_string(
-         "Du versuchst "+o->name(WEN,1)+" in den Automaten zu stopfen, "
-         "aber "+o->QueryPronoun(WER)+" passt nicht hinein.",78));
-        say(...);
-       }
-      } else {
-       write("Was willst du in den Automaten stopfen?\n");
-       say(....);
+         string tmp,tmp2; object o;
+
+         if(str && (sprintf("%s in automat%s",tmp,tmp2)==2 ||
+               sprintf("%s in geldautomat%s",tmp,tmp2)==2 ||
+               sprintf("%s in bankomat%s",tmp,tmp2)==2) {
+
+            o=present(tmp,this_player()); if(o) {
+
+               if(o->QueryProp(...)) {
+                  write(break_string(
+                     "Du stopfst "+o->name(WEN,1)+" in den
+                     Automaten.",78));
+
+                  say(...);
+
+               } else {
+                  write(break_string(
+                     "Du versuchst "+o->name(WEN,1)+" in den Automaten
+                     zu stopfen, " "aber "+o->QueryPronoun(WER)+"
+                     passt nicht hinein.",78));
+
+                  say(...);
+
+               }
+
+            } else {
+               write("Was willst du in den Automaten stopfen?n");
+               say(....);
+
+            } return 1;
+
+         } notify_fail("Was willst du wohin stecken?n"); return 0;
+
       }
-      return 1;
-     }
-     notify_fail("Was willst du wohin stecken?\n");
-     return 0;
-    }
 
- ## Variante 2, MIT REGEL ##
-    // einerseits koennen wir das Finden von Objekten in Inv und Env
-    // integrieren und uns andererseits das Aufzaehlen aller IDs des
-    // Automaten ersparen
-    AddCmd("steck|stecke&@PRESENT&in&@ID",#'action_stopf,
-           "Was willst du wohin stopfen?|"
-           "Willst du @WEN2 in etwas stopfen?|"
-           "Wohinein willst du @WEN2 stopfen?");
-    ...
-    // dabei werden wie immer die gefunden Matches als Parameterarray
-    // uebergeben ... und die @PRESENT und @ID als Objekte!
-    private int action_stopf(string str, mixed *param) {
-     if(param[0]->QueryProp(...)) {
-      write(break_string(
-       "Du stopfst "+param[0]->name(WEN,1)+" in den Automaten.",78));
-      say(...);
-     } else {
-      write(break_string(
-       "Du versuchst "+param[0]->name(WEN,1)+" in den Automaten zu "
-       "stopfen, aber "+param[0]->QueryPronoun(WER)+" passt nicht "
-       "hinein.",78));
-      say(...);
-     }
-     return 1;
-    }
+   ## Variante 2, MIT REGEL ##
+         // einerseits koennen wir das Finden von Objekten in Inv und
+         Env // integrieren und uns andererseits das Aufzaehlen aller
+         IDs des // Automaten ersparen
+         AddCmd("steck|stecke&@PRESENT&in&@ID",#'action_stopf,
 
-   --- Ende Komplexbeispiel Spezialregeln @PRESENT und @ID  ---
+            "Was willst du wohin stopfen?|" "Willst du @WEN2 in etwas
+            stopfen?|" "Wohinein willst du @WEN2 stopfen?");
+
+         ... // dabei werden wie immer die gefunden Matches als
+         Parameterarray // uebergeben ... und die @PRESENT und @ID als
+         Objekte! private int action_stopf(string str, mixed
+         >>*<<param) {
+
+            if(param[0]->QueryProp(...)) {
+               write(break_string(
+                  "Du stopfst "+param[0]->name(WEN,1)+" in den
+                  Automaten.",78));
+
+               say(...);
+
+            } else {
+               write(break_string(
+                  "Du versuchst "+param[0]->name(WEN,1)+" in den
+                  Automaten zu " "stopfen, aber
+                  "+param[0]->QueryPronoun(WER)+" passt nicht "
+                  "hinein.",78));
+
+               say(...);
+
+            } return 1;
+
+         }
+
+      --- Ende Komplexbeispiel Spezialregeln @PRESENT und @ID  ---
 
 ## Komplexbeispiel: gleiches Verb, mehrere Regeln ##
- // Das Problem mehrerer Regeln fuer ein Kommandoverb besteht darin, dass
- // letztlich nur eine der Fehlermeldungen zum Tragen kommt - welche
- // genau ist etwas vage.
- // Dabei kann man sich auf eines verlassen: juengere AddCmd werden
- // zuerst ausgewertet. Wenn sich das aendert, tretet euren EM.
+   // Das Problem mehrerer Regeln fuer ein Kommandoverb besteht darin,
+   dass // letztlich nur eine der Fehlermeldungen zum Tragen kommt -
+   welche // genau ist etwas vage. // Dabei kann man sich auf eines
+   verlassen: juengere AddCmd werden // zuerst ausgewertet. Wenn sich
+   das aendert, tretet euren EM.
 
- ## Problem 1: Mehrere Regeln weil mehrere Zwecke ##
-    ## Variante 1 - GLEICHLAUTENDE FEHLERMELDUNG
-    // fuer alles wird eine identische Fehlermeldung gesetzt, das ist
-    // natuerlich nicht sehr flexibel oder schoen
-    AddCmd("kriech|krieche&hoch|hinauf|hinaus|heraus|raus",#'result_kriech,
-           "Wohin willst Du kriechen?");
-    AddCmd("kriech|krieche&nach&oben",#'result_kriech,
-           "Wohin willst Du kriechen??|Wohin willst Du kriechen?");
-    AddCmd("kriech|krieche&aus&loch|grube|falle",#'result_kriech);
-           "Wohin willst Du kriechen?|Wohin willst Du kriechen?");
+   ## Problem 1: Mehrere Regeln weil mehrere Zwecke ##
+      ## Variante 1 - GLEICHLAUTENDE FEHLERMELDUNG // fuer alles wird
+      eine identische Fehlermeldung gesetzt, das ist // natuerlich
+      nicht sehr flexibel oder schoen AddCmd("kriech|krieche&hoch|hin
+      auf|hinaus|heraus|raus",#'result_kriech,
 
-    // oder man versucht eine bessere Regel zu schaffen, was hier durch
-    // die Moeglichkeit von zwei oder drei Parameter unmoeglich ist
+         "Wohin willst Du kriechen?");
 
-    ## Variante 2 - EIGENE AUSWERTUNG
-    // es bietet sich also eigene Weiterauswertung an, was durch die
-    // Uebergabe der getriggerten Verben erleichtert wird:
-    AddCmd("kriech|krieche&hoch|hinauf|hinaus|heraus|raus|aus|nach",
-           #'result_kriech,
-           "Wohin willst Du kriechen?");
-    ...
-    static int result_kriech(string str, mixed *extra) {
-      if(member(extra,"aus")>=0 &&
-         !sizeof(({str}),"*.\\<(hoehle|grube|falle)\\>.*"))
-       notify_fail("Woraus willst Du kriechen?\n");
-      else if(member(extra,"nach")>=0 && strstr(str,"oben")<0)
-       notify_fail("In welche Richtung willst Du kriechen?\n");
-      else if(this_player()->QueryAttribute(A_DEX)>10 ||
-              member(holding_root,this_player())) {
-        write("Du kriechst mit Muehe heraus.\n");
-        this_player()->move((XXXROOM+"draussen"), M_GO, 0,
-                            "kriecht mit Muehe aus der Grube",
-                            "kriecht aus einer Grube");
-        return 1;
-      } else
-        write("Du bist zu ungeschickt, halt Dich irgendwo fest.\n");
-        return 1;
-      }
-      return 0;
-    }
-    // (ob sich der Aufwand fuer diese Beispielsyntax lohnt ist fraglich)
+      AddCmd("kriech|krieche&nach&oben",#'result_kriech,
+         "Wohin willst Du kriechen??|Wohin willst Du kriechen?");
 
- ## Problem 2: mehrere Regeln, weil optionale Parameter ##
-    // Manchmal will man optionale Parameter erlauben, die aber eine
-    // Wirkung zeigen sollen:
-    AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart,
-           "Was oder wen willst du @verben?|"
-           "Wie willst du @WEN2 schlagen?");
-    AddCmd("schlag|schlage&@ID",#'action_schlag,
-           "Was oder wen willst du @verben?");
+      AddCmd("kriech|krieche&aus&loch|grube|falle",#'result_kriech);
+         "Wohin willst Du kriechen?|Wohin willst Du kriechen?");
 
-    // Da juengere AddCmd aelteren vorgehen, wird die komplexere Regel samt
-    // ihrer Fehlermeldung nie ausgewertet, da ein "schlag ball hart" auch
-    // die zweite Regel triggert.
+      // oder man versucht eine bessere Regel zu schaffen, was hier
+      durch // die Moeglichkeit von zwei oder drei Parameter
+      unmoeglich ist
 
-    // anders herum:
-    AddCmd("schlag|schlage&@ID",#'action_schlag,
-           "Was oder wen willst du @verben?");
-    AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart,
-           "Was oder wen willst du @verben?|"
-           "Wie willst du @WEN2 schlagen?");
+      ## Variante 2 - EIGENE AUSWERTUNG // es bietet sich also eigene
+      Weiterauswertung an, was durch die // Uebergabe der getriggerten
+      Verben erleichtert wird:
+      AddCmd("kriech|krieche&hoch|hinauf|hinaus|heraus|raus|aus|nach",
 
-    // Jetzt wird die komplexere Regel zuerst ueberprueft und triggert
-    // auch die richtige Funktion.
-    // Leider kommt die Fehlermeldung nie zum Tragen, denn was durch Regel 2
-    // durchfaellt, triggert entweder Regel 1 oder faellt auch durch Regel 1
-    // durch und ueberschreibt dabei die Meldung.
+         #'result_kriech, "Wohin willst Du kriechen?");
 
-    AddCmd("schlag|schlage&@ID",#'action_schlag,
-           "Was oder wen willst du wie @verben?");
-    AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart);
+      ... static int result_kriech(string str, mixed >>*<<extra) {
 
-    // Fast perfekt. Besser wird es nicht.
+         if(member(extra,"aus")>=0 &&
+               !sizeof(({str}),"*.\<(hoehle|grube|falle)\>.*"))
 
+            notify_fail("Woraus willst Du kriechen?n");
 
-    --- Ende Komplexbeispiel mehrere Regeln ---
+         else if(member(extra,"nach")>=0 && strstr(str,"oben")<0)
+            notify_fail("In welche Richtung willst Du kriechen?n");
+
+         else if(this_player()->QueryAttribute(A_DEX)>10 ||
+               member(holding_root,this_player())) {
+
+            write("Du kriechst mit Muehe heraus.n");
+            this_player()->move((XXXROOM+"draussen"), M_GO, 0,
+
+               "kriecht mit Muehe aus der Grube", "kriecht aus einer
+               Grube");
+
+            return 1;
+
+         } else
+            write("Du bist zu ungeschickt, halt Dich irgendwo
+            fest.n"); return 1;
+
+         } return 0;
+
+      } // (ob sich der Aufwand fuer diese Beispielsyntax lohnt ist
+      fraglich)
+
+   ## Problem 2: mehrere Regeln, weil optionale Parameter ##
+      // Manchmal will man optionale Parameter erlauben, die aber eine
+      // Wirkung zeigen sollen:
+      AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart,
+
+         "Was oder wen willst du @verben?|" "Wie willst du @WEN2
+         schlagen?");
+
+      AddCmd("schlag|schlage&@ID",#'action_schlag,
+         "Was oder wen willst du @verben?");
+
+      // Da juengere AddCmd aelteren vorgehen, wird die komplexere
+      Regel samt // ihrer Fehlermeldung nie ausgewertet, da ein
+      "schlag ball hart" auch // die zweite Regel triggert.
+
+      // anders herum: AddCmd("schlag|schlage&@ID",#'action_schlag,
+
+         "Was oder wen willst du @verben?");
+
+      AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart,
+         "Was oder wen willst du @verben?|" "Wie willst du @WEN2
+         schlagen?");
+
+      // Jetzt wird die komplexere Regel zuerst ueberprueft und
+      triggert // auch die richtige Funktion. // Leider kommt die
+      Fehlermeldung nie zum Tragen, denn was durch Regel 2 //
+      durchfaellt, triggert entweder Regel 1 oder faellt auch durch
+      Regel 1 // durch und ueberschreibt dabei die Meldung.
+
+      AddCmd("schlag|schlage&@ID",#'action_schlag,
+         "Was oder wen willst du wie @verben?");
+
+      AddCmd("schlag|schlage&@ID&hart",#'action_schlag_hart);
+
+      // Fast perfekt. Besser wird es nicht.
+
+      --- Ende Komplexbeispiel mehrere Regeln ---
 
 Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/AddDefender b/doc/lfun/AddDefender
index 3eb7923..5b33e14 100644
--- a/doc/lfun/AddDefender
+++ b/doc/lfun/AddDefender
@@ -1,34 +1,50 @@
+
 AddDefender()
+*************
 
-FUNKTION:
-	void AddDefender(object friend);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	friend
-	  Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
-	  informiert werden soll oder diese sogar abwehrt.
+   void AddDefender(object friend);
 
-BESCHREIBUNG:
-	Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
-	einen solchen Angriff per InformDefend() informieren oder ihnen
-	sogar die Moeglichkeit geben, per DefendOther() direkt in den
-	laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
-	Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
-	als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
-	Name der Funktion.
-	Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
-	abgespeichert und koennen dort abgerufen werden. Natuerlich kann
-	man weitere Objekte direkt dort eintragen, jedoch sollte man die
-	hierfuer bereitgestellte Funktionen AddDefender() verwenden.
-	Zum Loeschen von Eintraegen im Array steht ebenfalls eine Funktion
-	bereit: RemoveDefender().
 
-SIEHE AUCH:
-	RemoveDefender(), InformDefend(), DefendOther(),
-	P_DEFENDERS, /std/living/combat.c
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   friend
+     Objekt (normal Lebewesen), welches zukuenftig ueber Angriffe
+     informiert werden soll oder diese sogar abwehrt.
+
+
+BESCHREIBUNG
+============
+
+   Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
+   einen solchen Angriff per InformDefend() informieren oder ihnen
+   sogar die Moeglichkeit geben, per DefendOther() direkt in den
+   laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
+   Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
+   als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
+   Name der Funktion.
+   Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
+   abgespeichert und koennen dort abgerufen werden. Natuerlich kann
+   man weitere Objekte direkt dort eintragen, jedoch sollte man die
+   hierfuer bereitgestellte Funktionen AddDefender() verwenden.
+   Zum Loeschen von Eintraegen im Array steht ebenfalls eine Funktion
+   bereit: RemoveDefender().
+
+
+SIEHE AUCH
+==========
+
+   RemoveDefender(), InformDefend(), DefendOther(),
+   P_DEFENDERS, /std/living/combat.c
+
 Last modified: Thu Jul 29 18:48:45 1999 by Patryn
diff --git a/doc/lfun/AddDetail b/doc/lfun/AddDetail
index 229197b..951b48a 100644
--- a/doc/lfun/AddDetail
+++ b/doc/lfun/AddDetail
@@ -1,91 +1,110 @@
+
 AddDetail()
+***********
 
-FUNKTION:
-    void AddDetail(string|string* keys,
-                   string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    desc
-      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddDetail(string|string* keys,
+                  string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-      <desc> ist ein String.
-        Beim Untersuchen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-        Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
-      <desc> ist ein Mapping.
-        Das Mapping muss folgenden Aufbau haben:
-          ([0:        "Defaulttext",
-            "rasse1": "r1text", ...]).
 
-        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-        Eintrag im Mapping existiert, wird der entsprechende Text
-        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-        rassenabhaengige Details moeglich. Siehe auch die Beispiele.
-      <desc> ist eine Closure.
-        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-        als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer Details koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-BEISPIELE:
-    Ein schlichtes Detail:
 
-      AddDetail(({"sofa","couch"}), "Eine kleine Couch.\n");
+ARGUMENTE
+=========
 
-    Laengere Details sollten hierbei nicht per Hand umgebrochen werden,
-    sondern man kann hierzu die Funktion break_string() nutzen:
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   desc
+     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
 
-      AddDetail("detail", break_string(
-        "Du wolltest es ja nicht anders, jetzt musst Du Dir dieses "
-        "fuerchterlich lange Detail durchlesen!!!", 78));
 
-    Noetige Zeilenumbrueche bei Zeilenlaengen groesser 77 werden so
-    automatisch generiert.
-    Ein rassenabhaengiges Detail:
+BESCHREIBUNG
+============
 
-      AddDetail(({"bett","bettchen"}),
-        ([0      :"Eine kleines Bett.\n", // Der Defaulttext
-          "zwerg":                        // Die Rasse klein schreiben
-                "Das Bett laedt geradezu zu einem Nickerchen ein.\n"]));
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+     <desc> ist ein String.
+       Beim Untersuchen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+       Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
+     <desc> ist ein Mapping.
+       Das Mapping muss folgenden Aufbau haben:
+         ([0:        "Defaulttext",
+           "rasse1": "r1text", ...]).
 
-    Und nun ein Detail mit Closure (diese Version ersetzt das Verhalten
-     von AddSpecialDetail).
+       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+       Eintrag im Mapping existiert, wird der entsprechende Text
+       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+       rassenabhaengige Details moeglich. Siehe auch die Beispiele.
+     <desc> ist eine Closure.
+       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+       als Parameter uebergeben.
 
-      int hebel_betaetigt;
-      ...
-      string hebel(string str); // Funktion bekannt machen (Prototyping)
-      ...
-      AddDetail(({"hebel","schalter"}), #'hebel);
-      ...
-      string hebel(string key) {
-        if(hebel_betaetigt)
-          return "Der "+capitalize(key)+" steht auf EIN.\n";
-        else
-          return "Der "+capitalize(key)+" steht auf AUS.\n";
-      }
+   Fuer Details koennen Forscherpunkte eingetragen werden.
 
-    Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
-    ob das Flag hebel_betaetigt gesetzt ist oder nicht.
 
-SIEHE AUCH:
-    Setzen:    AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
-               P_TOUCH_DETAILS, P_SPECIAL_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+BEISPIELE
+=========
+
+   Ein schlichtes Detail:
+
+     AddDetail(({"sofa","couch"}), "Eine kleine Couch.\n");
+
+   Laengere Details sollten hierbei nicht per Hand umgebrochen werden,
+   sondern man kann hierzu die Funktion break_string() nutzen:
+
+     AddDetail("detail", break_string(
+       "Du wolltest es ja nicht anders, jetzt musst Du Dir dieses "
+       "fuerchterlich lange Detail durchlesen!!!", 78));
+
+   Noetige Zeilenumbrueche bei Zeilenlaengen groesser 77 werden so
+   automatisch generiert.
+   Ein rassenabhaengiges Detail:
+
+     AddDetail(({"bett","bettchen"}),
+       ([0      :"Eine kleines Bett.\n", // Der Defaulttext
+         "zwerg":                        // Die Rasse klein schreiben
+               "Das Bett laedt geradezu zu einem Nickerchen ein.\n"]));
+
+   Und nun ein Detail mit Closure (diese Version ersetzt das Verhalten
+    von AddSpecialDetail).
+
+     int hebel_betaetigt;
+     ...
+     string hebel(string str); // Funktion bekannt machen (Prototyping)
+     ...
+     AddDetail(({"hebel","schalter"}), #'hebel);
+     ...
+     string hebel(string key) {
+       if(hebel_betaetigt)
+         return "Der "+capitalize(key)+" steht auf EIN.\n";
+       else
+         return "Der "+capitalize(key)+" steht auf AUS.\n";
+     }
+
+   Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
+   ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
+              P_TOUCH_DETAILS, P_SPECIAL_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddDrink b/doc/lfun/AddDrink
index 6b99e08..4d722ec 100644
--- a/doc/lfun/AddDrink
+++ b/doc/lfun/AddDrink
@@ -1,12 +1,18 @@
+
 AddDrink()
+**********
 
-BEMERKUNGEN:
 
-        Die Funktion AddDrink() sollte NICHT MEHR BENUTZT werden.
-        Bitte AddToMenu() verwenden.
+BEMERKUNGEN
+===========
 
-SIEHE AUCH:
-	AddToMenu(), RemoveFromMenu()
+   Die Funktion AddDrink() sollte NICHT MEHR BENUTZT werden.
+   Bitte AddToMenu() verwenden.
 
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   AddToMenu(), RemoveFromMenu()
+
 Last modified: Fri Mar 03 13:23:00 2000 by Paracelsus
diff --git a/doc/lfun/AddExit b/doc/lfun/AddExit
index 9942ef3..384975f 100644
--- a/doc/lfun/AddExit
+++ b/doc/lfun/AddExit
@@ -1,91 +1,114 @@
+
 AddExit()
-FUNKTION:
-     void AddExit(string|string* cmd, closure|string dest);
+*********
 
-DEFINIERT IN:
-     /std/room/exits
 
-ARGUMENTE:
-     string/string* cmd
-          die Richtung(en), in die der Ausgang fuehrt
-     string/closure dest
-          das Ziel des Ausgangs mit Text/Closure
+FUNKTION
+========
 
-BESCHREIBUNG:
+   void AddExit(string|string* cmd, closure|string dest);
 
-     Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Die Art des
-     Ausgangs haengt ab von dest:
 
-     - ein String:
-       - mit einem Dateinamen:
-         Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet.
-       - der Form "<msg>#dateiname"
-         Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet,
-         bei der Benutzung wird jedoch statt "<name> geht nach <richtung>"
-         "<name> geht nach <msg>" ausgegeben.
-     - eine Closure:
-       Die Closure wird bei Nutzung des Ausgangs aufgerufen. Das entspricht
-       eine SpecialExit - in der gerufenen Funktion muss man den Spieler
-       selbst in den Zielraum bewegen.
-       Gegebenenfalls kann das durch AddCmd() ersetzt werden.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Man kann fuer den Dateinamen des Zielraumes auch einen relativen Pfad
-     angeben. Die Auswertung erfolgt nach folgendem Schema:
-     - "./<dateiname>"
-       Es wird ein Zielraum relativ zum gleichen Verzeichnis wie dieser
-       Raum angesprochen.
-     - "../<dateiname>"
-       Es wird ein Zielraum relativ zur Verzeichnisebene ueber der
-       dieses Raumes angesprochen (analog mit mehrerern "../..")
+   /std/room/exits
 
-     Mittels P_HIDE_EXITS kann man Ausgaenge verstecken.
 
-     Bei der Benutzung eines Ausgangs wird der Hook H_HOOK_EXIT_USE
-     ausgeloest.
+ARGUMENTE
+=========
 
-BEISPIELE:
-     ### normale Ausgaenge ###
-     // Beim Kommando "sueden" kommt: "<name> geht nach Sueden."
-     AddExit("sueden", "/gilden/abenteurer");
+   string/string* cmd
+        die Richtung(en), in die der Ausgang fuehrt
+   string/closure dest
+        das Ziel des Ausgangs mit Text/Closure
 
-     // Beim Kommando "sueden" kommt: "<name> geht in die Gilde."
-     AddExit("sueden", "in die Gilde#/gilden/abenteurer");
 
-     ### Ausgaenge mit relativen Pfaden ###
-     // Der Name des Raumes sei "/d/inseln/wargon/hafen1"
-     // Dieser Ausgang geht nach "/d/inseln/wargon/kneipe":
-     AddExit("norden", "./kneipe" );
+BESCHREIBUNG
+============
 
-     // Und dieser nach "/d/inseln/anthea/anlege":
-     AddExit("sueden", "../anthea/anlege" );
+   Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Die Art des
+   Ausgangs haengt ab von dest:
 
-     ### dynamische Ausgaenge ###
-     // ein Ausgang soll nur von Froeschen benutzbar sein:
+   - ein String:
+     - mit einem Dateinamen:
+       Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet.
+     - der Form "<msg>#dateiname"
+       Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet,
+       bei der Benutzung wird jedoch statt "<name> geht nach <richtung>"
+       "<name> geht nach <msg>" ausgegeben.
+   - eine Closure:
+     Die Closure wird bei Nutzung des Ausgangs aufgerufen. Das entspricht
+     eine SpecialExit - in der gerufenen Funktion muss man den Spieler
+     selbst in den Zielraum bewegen.
+     Gegebenenfalls kann das durch AddCmd() ersetzt werden.
 
-     static int lochfkt(string dir);		// Prototyp
-     ...
-     AddExit("loch", #'lochfkt);
-     // auch identisch zu:
-     // AddSpecialExit("loch", #'lochfkt); [eine Closure] oder
-     // AddSpecialExit("loch", "lochfkt"); [ein Funktionsname]
 
-     static int lochfkt(string dir) {
-       if (!(this_player()->QueryProp(P_FROG))) {
-         // Kein Frosch => passt nicht!
-         notify_fail("Du bist zu gross!\n");
-         return 0;
-       }
-       // Meldungen werden im move() gleich mitgegeben
-       return this_player()->move("/room/loch", M_GO, 0,
-                    "huepft ins Loch", "huepft herein");
+BEMERKUNGEN
+===========
+
+   Man kann fuer den Dateinamen des Zielraumes auch einen relativen Pfad
+   angeben. Die Auswertung erfolgt nach folgendem Schema:
+   - "./<dateiname>"
+     Es wird ein Zielraum relativ zum gleichen Verzeichnis wie dieser
+     Raum angesprochen.
+   - "../<dateiname>"
+     Es wird ein Zielraum relativ zur Verzeichnisebene ueber der
+     dieses Raumes angesprochen (analog mit mehrerern "../..")
+
+   Mittels P_HIDE_EXITS kann man Ausgaenge verstecken.
+
+   Bei der Benutzung eines Ausgangs wird der Hook H_HOOK_EXIT_USE
+   ausgeloest.
+
+
+BEISPIELE
+=========
+
+   ### normale Ausgaenge ###
+   // Beim Kommando "sueden" kommt: "<name> geht nach Sueden."
+   AddExit("sueden", "/gilden/abenteurer");
+
+   // Beim Kommando "sueden" kommt: "<name> geht in die Gilde."
+   AddExit("sueden", "in die Gilde#/gilden/abenteurer");
+
+   ### Ausgaenge mit relativen Pfaden ###
+   // Der Name des Raumes sei "/d/inseln/wargon/hafen1"
+   // Dieser Ausgang geht nach "/d/inseln/wargon/kneipe":
+   AddExit("norden", "./kneipe" );
+
+   // Und dieser nach "/d/inseln/anthea/anlege":
+   AddExit("sueden", "../anthea/anlege" );
+
+   ### dynamische Ausgaenge ###
+   // ein Ausgang soll nur von Froeschen benutzbar sein:
+
+   static int lochfkt(string dir);            // Prototyp
+   ...
+   AddExit("loch", #'lochfkt);
+   // auch identisch zu:
+   // AddSpecialExit("loch", #'lochfkt); [eine Closure] oder
+   // AddSpecialExit("loch", "lochfkt"); [ein Funktionsname]
+
+   static int lochfkt(string dir) {
+     if (!(this_player()->QueryProp(P_FROG))) {
+       // Kein Frosch => passt nicht!
+       notify_fail("Du bist zu gross!\n");
+       return 0;
      }
+     // Meldungen werden im move() gleich mitgegeben
+     return this_player()->move("/room/loch", M_GO, 0,
+                  "huepft ins Loch", "huepft herein");
+   }
 
-SIEHE AUCH:
-     AddSpecialExit(), GetExits(),
-     RemoveExit(), RemoveSpecialExit(),
-     GuardExit(),
-     H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+
+SIEHE AUCH
+==========
+
+   AddSpecialExit(), GetExits(),
+   RemoveExit(), RemoveSpecialExit(),
+   GuardExit(),
+   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/AddExp b/doc/lfun/AddExp
index 8baed55..a8bf488 100644
--- a/doc/lfun/AddExp
+++ b/doc/lfun/AddExp
@@ -1,32 +1,56 @@
+
 AddExp()
-FUNKTION:
-     int AddExp(int e)
+********
 
-DEFINIERT IN:
-     /std/living/life.c
 
-ARGUMENTE:
-     int e - Anzahl der hinzuzufuegenden (abzuziehenden) XP
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Dem Living werden e XP auf seine bisherigen P_XP addiert.
+   int AddExp(int e)
 
-     Falls es sich um einen Spieler mit P_KILLS>0 handelt und
-     e positiv ist, bekommt der Spieler keine XP gutgeschrieben.
 
-     P_LAST_XP wird aktualisiert.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-     - positive und negative Werte sind moeglich
-     - P_XP wird nicht <0 gesetzt.
+   /std/living/life.c
 
-RUECKGABEWERT:
-     int - neuer XP-Wert
 
-SIEHE AUCH:
-     Funktionen:  do_damage(), DistributeExp()
-     Properties:  P_XP, P_LAST_XP
-     Sonstiges:   P_NO_XP, P_NO_SCORE
-                  create_default_npc()
+ARGUMENTE
+=========
 
-14.Feb 2007 Gloinson
\ No newline at end of file
+   int e - Anzahl der hinzuzufuegenden (abzuziehenden) XP
+
+
+BESCHREIBUNG
+============
+
+   Dem Living werden e XP auf seine bisherigen P_XP addiert.
+
+   Falls es sich um einen Spieler mit P_KILLS>0 handelt und
+   e positiv ist, bekommt der Spieler keine XP gutgeschrieben.
+
+   P_LAST_XP wird aktualisiert.
+
+
+BEMERKUNG
+=========
+
+   - positive und negative Werte sind moeglich
+   - P_XP wird nicht <0 gesetzt.
+
+
+RUECKGABEWERT
+=============
+
+   int - neuer XP-Wert
+
+
+SIEHE AUCH
+==========
+
+   Funktionen:  do_damage(), DistributeExp()
+   Properties:  P_XP, P_LAST_XP
+   Sonstiges:   P_NO_XP, P_NO_SCORE
+                create_default_npc()
+
+14.Feb 2007 Gloinson
diff --git a/doc/lfun/AddExtraLook b/doc/lfun/AddExtraLook
index 526a851..7436f7e 100644
--- a/doc/lfun/AddExtraLook
+++ b/doc/lfun/AddExtraLook
@@ -1,96 +1,130 @@
+
 AddExtraLook()
-varargs int AddExtraLook(string look, [int duration, string key,
-                         string lookende, object ob]);
-DEFINIERT IN:
+**************
+
+AddExtraLook() varargs int AddExtraLook(string look, [int duration,
+string key,
+
+   string lookende, object ob]);
+
+
+DEFINIERT IN
+============
+
    /std/living/description.c
 
-BESCHREIBUNG:
+
+BESCHREIBUNG
+============
+
    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
    Eintraege koennen mit dieser Funktion hinzugefuegt werden. Dies ist der
    bevorzugte Weg, wenn ansonsten extra ein Objekt im Spielerinventar abgelegt
    werden muesste.
-   
+
+
+
    Alle Parameter bis auf <look> sind optional.
 
-ARGUMENTE:
-  - string look:
-    String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
-    wird.
-    Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
-  - int duration:
-    > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend 
-         wird er automatisch geloescht.
-    0:   Dieser Eintrag bleibt unbegrenzt gueltig.
-    < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
-  - string key:
-    Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
-    auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
-    moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der 
-    Objektname (object_name()) benutzt.
-  - string lookende:
-    String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
-    eingetragene Extralook abgelaufen ist.
-    Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
-  - object ob:
-    Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
-    Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
-    der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
-    abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
-    Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
-    wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
-    etc. sorgen!
-    WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
-    ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier 
-    einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
 
-RUECKGABEWERTE:
-  > 0, falls der Eintrag erfolgreich registriert wurde.
-  < 0 sonst.
-    -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
-    -2: <look> war kein gueltiger String.
-    -3: <duration> war kein Integer.
-    -4: unter <key> gibt es schon einen Eintrag.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-  Die Strings <look> und <lookende> werden vor Ausgabe durch
-  replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
-  usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
-  dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
-  Funktionen selber umbrechen, etc.
-  Nach replace_personal() werden die Strings noch von break_string() auf 78
-  Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
-  Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
-  Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
-  wird.
+   - string look:
+     String, der in der Langbeschreibung des Lebewesens zusaetzlich ausgegeben
+     wird.
+     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird (s.u.).
+   - int duration:
+     > 0: Wie lang bleibt der Extralook gueltig (in Sekunden)? Anschliessend
+          wird er automatisch geloescht.
+     0:   Dieser Eintrag bleibt unbegrenzt gueltig.
+     < 0: Dieser Eintrag bleibt bis zum Ende/Reboot bestehen.
+   - string key:
+     Schluesselwort, unter dem der Eintrag registriert wird und mit dem man ihn
+     auch mittels RemoveExtraLook() entfernen kann. Sollte natuerlich
+     moeglichst eindeutig sein. ;-) Wenn <key> nicht angeben wird, wird der
+     Objektname (object_name()) benutzt.
+   - string lookende:
+     String, der an das Lebewesen (nur bei Spielern) ausgegeben wird, wenn der
+     eingetragene Extralook abgelaufen ist.
+     Kann auch ein Funktionsname sein, wenn <ob> angegeben wird.
+   - object ob:
+     Wenn hier ein Objekt angegeben wird, werden <look> und <lookende> als
+     Funktonsnamen aufgefasst. Diese Funktionen werden in <ob> aufgerufen, wenn
+     der Extralook des Lebewesen angezeigt wird bzw. der eingetragene Extralook
+     abgelaufen ist. Diese Funktionen bekommen das jeweilige Lebenwesen als
+     Objekt uebergeben. Sie muessen einen String zurueckliefern, der ausgegeben
+     wird. Dieser String wird direkt so ausgeben, also selber fuer Zeilenumbruch
+     etc. sorgen!
+     WICHTIG: Das Objekt sollte nach Moeglichkeit eine Blueprint sein, da das
+     ganze nix mehr ausgibt, sobald der Clone zerstoert wird, falls hier
+     einer angeben wird. Wenn ihr keine BP uebergebt: Wisst, was ihr tut. ;-)
 
-BEISPIELE:
-  # einfacher Eintrag, "fuer die Ewigkeit"
-  living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
 
-  # Eintrag der nach 1h automatisch weg ist.
-  living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
-  
-  # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
-  living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
-                       "humni_marmeladen_look");
-  
-  # Mit "Ende"-Meldung, aber kein eigener Schluessel.
-  living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
-                       "Du bist endlich wieder trocken. Puuh.");
-  
-  # Mit Objekt, was den Extralook dynamisch erzeugt
-  living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
-    In diesem Fall muss this_object() natuerlich die Funktion
-    "get_my_special_extralook()" definieren, die einen String zurueckgibt.
+RUECKGABEWERTE
+==============
 
-  # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
-  living->AddExtraLook("get_my_special_extralook", 3600, 0,
-                       "extralookende", this_object());
+   > 0, falls der Eintrag erfolgreich registriert wurde.
+   < 0 sonst.
+     -1: <key> war nicht gueltig und es konnte keiner ermittelt werden.
+     -2: <look> war kein gueltiger String.
+     -3: <duration> war kein Integer.
+     -4: unter <key> gibt es schon einen Eintrag.
 
-SIEHE AUCH:
+
+BEMERKUNGEN
+===========
+
+   Die Strings <look> und <lookende> werden vor Ausgabe durch
+   replace_personal() geschickt, daher ist die Verwendung von @WER1, @WESSEN1
+   usw. moeglich (s. replace_personal). Dies gilt aber _nicht_ fuer den Fall,
+   dass die entsprechenden Funktionen in <ob> gerufen werden, dann muessen die
+   Funktionen selber umbrechen, etc.
+   Nach replace_personal() werden die Strings noch von break_string() auf 78
+   Zeilen umgebrochen, allerdings bleiben dabei vorhandene Umbrueche erhalten.
+   Die Meldung von <lookende> bzw. der Funktionsaufruf erfolgt, wenn der
+   Extralook der Lebewesen das erste Mal nach Ablauf der Gueltigkeit aufgerufen
+   wird.
+
+
+BEISPIELE
+=========
+
+   # einfacher Eintrag, "fuer die Ewigkeit"
+   living->AddExtraLook("@WER1 hat den Drachengott der SSP besiegt.");
+
+   # Eintrag der nach 1h automatisch weg ist.
+   living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600);
+
+
+
+   # Eintrag mit bestimmten Schluessel, damit man ihn wieder entfernen kann.
+   living->AddExtraLook("@WER1 ist ganz mit Marmelade bedeckt.", 3600,
+                        "humni_marmeladen_look");
+
+
+
+   # Mit "Ende"-Meldung, aber kein eigener Schluessel.
+   living->AddExtraLook("@WER1 ist patschnass.", 1200, 0,
+                        "Du bist endlich wieder trocken. Puuh.");
+
+
+
+   # Mit Objekt, was den Extralook dynamisch erzeugt
+   living->AddExtraLook("get_my_special_extralook", 3600, 0, 0, this_object());
+     In diesem Fall muss this_object() natuerlich die Funktion
+     "get_my_special_extralook()" definieren, die einen String zurueckgibt.
+
+   # Mit Objekt, was den Extralook und die Endemeldung dynamisch erzeugt
+   living->AddExtraLook("get_my_special_extralook", 3600, 0,
+                        "extralookende", this_object());
+
+
+SIEHE AUCH
+==========
+
    RemoveExtraLook(),
    replace_personal(), break_string()
    P_INTERNAL_EXTRA_LOOK
 
 14.05.2007, Zesstra
-
diff --git a/doc/lfun/AddFixedObject b/doc/lfun/AddFixedObject
index 3e2e172..5875ee2 100644
--- a/doc/lfun/AddFixedObject
+++ b/doc/lfun/AddFixedObject
@@ -1,52 +1,74 @@
+
 AddFixedObject()
+****************
 
-FUNKTION:
-        varargs void AddFixedObject(string str, int val, mixed ids);
 
-DEFINIERT IN:
-        /std/room/shop.c
+FUNKTION
+========
 
-ARGUMENTE:
-        str
-          Der absolute Filename eines Objekts, das in quasi beliebiger Menge
-          vom betreffenden Laden verkauft werden soll.
-        val
-          Sofern angegeben der angenommene Wert des Objekts. Falls val nicht
-          angegeben oder 0 ist, wird der Wert aus dem angegebenen Objekt
-          selbst ermittelt.
-          Der Verkaufspreis ist 3 * Wert des Objekts.
-        ids
-          String oder Stringarray mit der ID oder den IDs, ueber die man das
-          Objekt im Laden ansprechen kann. Falls nicht angegeben, wird die
-          ID-Liste aus der blueprint des Objekts ausgelesen.
+   varargs void AddFixedObject(string str, int val, mixed ids);
 
-BESCHREIBUNG:
-        Mit dieser Funktion kann man einem Laden mitteilen, dass ein Objekt
-        in ihm in unbegrenzter Anzahl verkauft werden soll.
-        WICHTIG: Das zu verkaufende Objekt sollte dies insofern unterstuetzen, 
-        dass die Blueprint die notwendigen Informationen
-        (P_SHORT, P_IDS, P_VALUE, P_LONG, P_NAME) beinhaltet. Dies bedeutet im
-        einfachsten Fall, dass im create() auf
-          if (!clonep()) return;
-        verzichtet wird.
 
-RUeCKGABEWERT:
-        keiner
-        
-BEISPIELE:
-        AddFixedObject("/obj/fackel", 5000, "fackel");
-          Der Laden verkauft Fackeln zum Preis von 3*5000 Goldmuenzen und man
-          kann die Fackel (ausser ueber die Inventarnummer) nur mittels der
-          id "fackel" kaufen.
-          
-        AddFixedObject("/obj/fackel");
-          Der Laden verkauft Fackeln zum dreifachen Wert dessen, was im Objekt
-          /obj/fackel.c angegeben ist (derzeit sind das 5 Muenzen) und laesst
-          alle IDs zu, die in /obj/fackel.c angegeben sind. Derzeit ist das
-          auch nur "fackel".
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	RemoveFixedObject(), SetStorageRoom(), /std/store.c
-        
-----------------------------------------------------------------------------
-Letzte Aenderung: Sat Nov  9 12:59:25 2002 durch Bambi
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   str
+     Der absolute Filename eines Objekts, das in quasi beliebiger Menge
+     vom betreffenden Laden verkauft werden soll.
+   val
+     Sofern angegeben der angenommene Wert des Objekts. Falls val nicht
+     angegeben oder 0 ist, wird der Wert aus dem angegebenen Objekt
+     selbst ermittelt.
+     Der Verkaufspreis ist 3 * Wert des Objekts.
+   ids
+     String oder Stringarray mit der ID oder den IDs, ueber die man das
+     Objekt im Laden ansprechen kann. Falls nicht angegeben, wird die
+     ID-Liste aus der blueprint des Objekts ausgelesen.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann man einem Laden mitteilen, dass ein Objekt
+   in ihm in unbegrenzter Anzahl verkauft werden soll.
+   WICHTIG: Das zu verkaufende Objekt sollte dies insofern unterstuetzen,
+   dass die Blueprint die notwendigen Informationen
+   (P_SHORT, P_IDS, P_VALUE, P_LONG, P_NAME) beinhaltet. Dies bedeutet im
+   einfachsten Fall, dass im create() auf
+     if (!clonep()) return;
+   verzichtet wird.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   AddFixedObject("/obj/fackel", 5000, "fackel");
+     Der Laden verkauft Fackeln zum Preis von 3*5000 Goldmuenzen und man
+     kann die Fackel (ausser ueber die Inventarnummer) nur mittels der
+     id "fackel" kaufen.
+
+
+
+   AddFixedObject("/obj/fackel");
+     Der Laden verkauft Fackeln zum dreifachen Wert dessen, was im Objekt
+     /obj/fackel.c angegeben ist (derzeit sind das 5 Muenzen) und laesst
+     alle IDs zu, die in /obj/fackel.c angegeben sind. Derzeit ist das
+     auch nur "fackel".
+
+
+SIEHE AUCH
+==========
+
+   RemoveFixedObject(), SetStorageRoom(), /std/store.c
diff --git a/doc/lfun/AddFood b/doc/lfun/AddFood
index 2da18e5..b870a5e 100644
--- a/doc/lfun/AddFood
+++ b/doc/lfun/AddFood
@@ -1,12 +1,18 @@
+
 AddFood()
+*********
 
-BEMERKUNGEN:
 
-        Die Funktion AddFood() sollte NICHT MEHR BENUTZT werden.
-        Bitte AddToMenu() verwenden.
+BEMERKUNGEN
+===========
 
-SIEHE AUCH:
-        AddToMenu(), RemoveFromMenu()
+   Die Funktion AddFood() sollte NICHT MEHR BENUTZT werden.
+   Bitte AddToMenu() verwenden.
 
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   AddToMenu(), RemoveFromMenu()
+
 Last modified: Fri Mar 03 13:23:00 2000 by Paracelsus
diff --git a/doc/lfun/AddFuel b/doc/lfun/AddFuel
index bf00350..cd0b25e 100644
--- a/doc/lfun/AddFuel
+++ b/doc/lfun/AddFuel
@@ -1,29 +1,51 @@
+
 AddFuel()
+*********
 
-FUNKTION:
-     void AddFuel(int fuel);
 
-DEFINIERT IN:
-     /std/lightsource.c
+FUNKTION
+========
 
-ARGUMENTE:
-     fuel
-          Die zusaetzliche Brenndauer in Sekunden.
+   void AddFuel(int fuel);
 
-BESCHREIBUNG:
-     Die Brenndauer der Lichtquelle wird um fuel Sekunden verlaengert.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Es werden keine Checks durchgefuehrt! Wenn man seine Lichtquelle
-     nachfuellbar gestalten will, sollte die Nachfuellfunktion vor dem
-     AddFuel()-Aufruf nachsehen, wie voll die Lichtquelle noch ist, und fuel
-     entsprechend begrenzen.
+   /std/lightsource.c
 
-SIEHE AUCH:
-     /std/lightsource.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   fuel
+        Die zusaetzliche Brenndauer in Sekunden.
+
+
+BESCHREIBUNG
+============
+
+   Die Brenndauer der Lichtquelle wird um fuel Sekunden verlaengert.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Es werden keine Checks durchgefuehrt! Wenn man seine Lichtquelle
+   nachfuellbar gestalten will, sollte die Nachfuellfunktion vor dem
+   AddFuel()-Aufruf nachsehen, wie voll die Lichtquelle noch ist, und fuel
+   entsprechend begrenzen.
+
+
+SIEHE AUCH
+==========
+
+   /std/lightsource.c
+
 Last modified: Wed May 8 10:16:39 1996 by Wargon
diff --git a/doc/lfun/AddFun b/doc/lfun/AddFun
index 925b5ac..5ba6cf1 100644
--- a/doc/lfun/AddFun
+++ b/doc/lfun/AddFun
@@ -1,63 +1,85 @@
+
 AddFun()
+********
 
-FUNKTION:
-     void AddFun(string fun, int next);
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     fun
-          Name der Funktion.
-     next
-          Zeit bis zur naechsten Fahrplanstation.
+   void AddFun(string fun, int next);
 
-BESCHREIBUNG:
-     Dem Fahrplan wird der Aufruf der Funktion fun, die im Transporter
-     definiert sein muss, hinzugefuegt. Nach Aufruf der Funktion vergehen
-     next Sekunden, bis die naechste Station angefahren wird.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Wenn ein zufaellig ausgewaehlter Passagier eines Schiffes unterwegs
-     seekrank werden soll, koennte man das wie folgt realisieren:
+   /std/transport.c
 
-     create()
-     {
-       ...
 
-       AddFun("seekrank", 5);
-       ...
-     }
+ARGUMENTE
+=========
 
-     seekrank()
-     {
-       object *passagiere, opfer;
+   fun
+        Name der Funktion.
+   next
+        Zeit bis zur naechsten Fahrplanstation.
 
-       // soll nicht immer passieren
-       if (random(5))
-         return;
 
-       // Opfer auswaehlen
-       passagiere = QueryPassengers();
-       if (sizeof(passagiere))
-         opfer = passagiere[random(sizeof(passagiere))];
+BESCHREIBUNG
+============
 
-       // Und viel Spass...
-       tell_object(opfer,
-         "Du wirst seekrank! Schnell stuerzt Du zur Reling um  Dich zu\n"
-        +"uebergeben.\n");
-       tell_room(this_object(),
-         sprintf("%s ueberkommt die Seekrankheit!\n%s stuerzt an die Reling, "
-                +"um sich zu uebergeben.\n",
-                 capitalize(opfer->name(WEN)),
-                 capitalize(opfer->QueryPronoun(WER))), ({ opfer }) );
-     }
+   Dem Fahrplan wird der Aufruf der Funktion fun, die im Transporter
+   definiert sein muss, hinzugefuegt. Nach Aufruf der Funktion vergehen
+   next Sekunden, bis die naechste Station angefahren wird.
 
-SIEHE AUCH:
-     AddRoute(), AddMsg(), /std/transport.c
 
-----------------------------------------------------------------------------
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Wenn ein zufaellig ausgewaehlter Passagier eines Schiffes unterwegs
+   seekrank werden soll, koennte man das wie folgt realisieren:
+
+   create()
+   {
+     ...
+
+     AddFun("seekrank", 5);
+     ...
+   }
+
+   seekrank()
+   {
+     object *passagiere, opfer;
+
+     // soll nicht immer passieren
+     if (random(5))
+       return;
+
+     // Opfer auswaehlen
+     passagiere = QueryPassengers();
+     if (sizeof(passagiere))
+       opfer = passagiere[random(sizeof(passagiere))];
+
+     // Und viel Spass...
+     tell_object(opfer,
+       "Du wirst seekrank! Schnell stuerzt Du zur Reling um  Dich zu\n"
+      +"uebergeben.\n");
+     tell_room(this_object(),
+       sprintf("%s ueberkommt die Seekrankheit!\n%s stuerzt an die Reling, "
+              +"um sich zu uebergeben.\n",
+               capitalize(opfer->name(WEN)),
+               capitalize(opfer->QueryPronoun(WER))), ({ opfer }) );
+   }
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), AddMsg(), /std/transport.c
+
 Last modified: Wed May 8 10:16:46 1996 by Wargon
diff --git a/doc/lfun/AddId b/doc/lfun/AddId
index fa1ce76..8c2aa4e 100644
--- a/doc/lfun/AddId
+++ b/doc/lfun/AddId
@@ -1,50 +1,75 @@
+
 AddId()
+*******
 
-FUNKTION:
-     void AddId(string|string* ids);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ids
-          String oder Array von Strings mit den Bezeichnungen, mit denen
-          sich sich das Objekt ansprechen lassen soll.
+   void AddId(string|string* ids);
 
-BESCHREIBUNG:
-     Jedes Objekt sollte sich auf die eine oder andere Weise ansprechen
-     lassen. Zu diesem Zweck kann man dem Objekt mit dieser Funktion
-     Bezeichner uebergeben.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Jedes Objekt sollte man zumindest mit seiner Kurzbeschreibung
-     ansprechen koennen! Fuer Abfragen von Questobjeken o.ae. sollte man
-     zusaetzlich IDs verwenden, die Sonderzeichen wie "\n" oder "\t"
-     enthalten, damit sichergestellt ist, dass der Spieler auch wirklich die
-     richtigen Objekte dabeihat.
+   /std/thing/description.c
 
-BEISPIELE:
 
-     AddId( "buch" );
-     AddId( "buechlein" );
+ARGUMENTE
+=========
 
-     Das Objekt laesst sich jetzt als "buch" und als "buechlein" ansprechen.
+   ids
+        String oder Array von Strings mit den Bezeichnungen, mit denen
+        sich sich das Objekt ansprechen lassen soll.
 
-     AddId( ({ "buch", "buechlein" }) );
 
-     Diese Zeile bewirkt das gleiche wie die obigen zwei Zeilen.
+BESCHREIBUNG
+============
 
-     AddId( ({ "puzzle", "\nquest_puzzle" }) );
+   Jedes Objekt sollte sich auf die eine oder andere Weise ansprechen
+   lassen. Zu diesem Zweck kann man dem Objekt mit dieser Funktion
+   Bezeichner uebergeben.
 
-     Der Spieler kann das Objekt als "puzzle" ansprechen, questrelevante
-     Objekte koennen mit der ID "\nquest_puzzle" nach ihm suchen.
 
-SIEHE AUCH:
-     AddAdjective(), RemoveId(), id(), present(), /std/thing/description.c
+RUeCKGABEWERT
+=============
 
-     -----------------------------------------------------------------------
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Jedes Objekt sollte man zumindest mit seiner Kurzbeschreibung
+   ansprechen koennen! Fuer Abfragen von Questobjeken o.ae. sollte man
+   zusaetzlich IDs verwenden, die Sonderzeichen wie "\n" oder "\t"
+   enthalten, damit sichergestellt ist, dass der Spieler auch wirklich die
+   richtigen Objekte dabeihat.
+
+
+BEISPIELE
+=========
+
+   AddId( "buch" );
+   AddId( "buechlein" );
+
+   Das Objekt laesst sich jetzt als "buch" und als "buechlein" ansprechen.
+
+   AddId( ({ "buch", "buechlein" }) );
+
+   Diese Zeile bewirkt das gleiche wie die obigen zwei Zeilen.
+
+   AddId( ({ "puzzle", "\nquest_puzzle" }) );
+
+   Der Spieler kann das Objekt als "puzzle" ansprechen, questrelevante
+   Objekte koennen mit der ID "\nquest_puzzle" nach ihm suchen.
+
+
+SIEHE AUCH
+==========
+
+   AddAdjective(), RemoveId(), id(), present(), /std/thing/description.c
+
+   -----------------------------------------------------------------------
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddInfo b/doc/lfun/AddInfo
index 2164584..759a300 100644
--- a/doc/lfun/AddInfo
+++ b/doc/lfun/AddInfo
@@ -1,222 +1,243 @@
+
 AddInfo()
-FUNKTION:
-     varargs void AddInfo( frage, meldung
-			   [, indent [, [silent [, casebased] ] ] );
-
-DEFINIERT IN:
-     /std/npc/info.c
-
-ARGUMENTE:
-     string/string* frage
-	Schluesseltext(e) auf die Informationen gegeben werden sollen.
-     string/closure meldung
-	Information, die gegeben werden soll/Closure
-     string indent
-	Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
-     int/string silent
-	Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
-     string/closure casebased
-	Closure mit Returnwert string oder int.
-
-BESCHREIBUNG:
-     Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
-     einer Information mit dem Schluessel 'frage' fragt, so wird die
-     entsprechende 'meldung' ausgegeben (oder die Closure in 'meldung'
-     gerufen und der zurueckgegebene Text ausgegeben). Der Meldung wird
-     der Name des Monsters vorangestellt.
-
-     Frage:
-      Schluessel muessen kleingeschrieben sein, koennen aber Leerzeichen
-      enthalten.
-
-     Meldung:
-      Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
-      umbrechen.
-
-     Indent:
-      Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
-      Monsternamen noch das 'indent' vorangesetzt. Zusaetzlich wird
-      'meldung' auf jeden Fall sauber umgebrochen.
-      Ein typisches indent ist "sagt: ".
-
-     Silent:
-      Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im Raum,
-      ist 'silent' ein String, so wird jener an alle anderen Spieler ausser
-      dem Fragesteller im Raum ausgegeben.
-
-     Casebased:
-      Die als Closure angegebene Methode entscheidet, ob oder wie der NPC 
-      auf diese Frage antworten soll:
-      - return 0:	normale Antwort mit "meldung"
-      - return 1:	keine Antwort/Antwort mit DEFAULT_NOINFO
-      - return string:	Antwort mit string unter Beruecksichtigung eines
-			indent
-
-     Die Strings von 'silent' und 'meldung' werden geparsed.
-     Dabei koennen die @...-Tags von replace_personal() verwendet werden,
-     Objekt 1 ist this_player(). Ersetzte String am Satzanfang werden
-     automatisch gross geschrieben.
-     AddInfo() konvertiert die alten Schluesselworte @WER, @WESSEN, @WEM,
-     @WEN zu denen von replace_personal().
-
-     Mittels der in <npc.h> definierten Frage DEFAULT_INFO kann eine
-     Meldung gesetzt werden, die gegeben werden soll, wenn der Spieler
-     etwas fragt, auf das keine Antwort vorgegeben ist (das loest
-     SetProp(P_DEFAULT_INFO, <text>) ab).
-
-BEISPIELE:
-     ### eine Standardantwort setzen ###
-     AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
-     // identisch zu
-     SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
-
-     ### einfache Beispiele, auch mit casebased ###
-     AddInfo(({"knete","kohle"}),
-	     "sagt: ich habe so etwas nicht.\n");
-     AddInfo("geld",
-	     "Ich habe zwar kein Geld, aber ... blablabla ...",
-	     "sagt: " );
-     AddInfo("muenzen",
-	     "fluestert: Du willst Geld?\n",
-	     0,
-	     "fluestert @WEM etwas zu.\n");
-
-     // "frage monster nach geld": alle im Raum hoeren
-     //  Das Monster sagt: Ich habe zwar kein Geld, aber ...
-     //  Das Monster sagt: ... blablabla ...
-
-     // "frage monster nach muenzen":
-     // - der Fragensteller hoert:
-     //   "Das Monster fluestert: Du willst Geld?"
-     // - alle andere hoeren:
-     //   "Das Monster fluestert <Fragenstellernamen> etwas zu."
-
-     ### dynamisch ###
-     // ein Prototyp, damit wir die Methode bekannt machen
-     static string query_kekse();
-     ...
-     AddInfo(({"keks","kekse"}),
-	     #'query_kekse,		// ein Verweis auf die Funktion
-	     "sagt: ");
-     ...
-     static string query_kekse() {
-      if(present("keks"))
-       return("Ich hab noch welche. Aetsch!");
-      return("Menno. Keine mehr da!");
-     }
-
-     // "frage monster nach keks":
-     // - wenn es noch Kekse hat, hoeren alle:
-     //   "Das Monster sagt: Ich hab noch welche. Aetsch!
-     // - sonst:
-     //   "Das Monster sagt: "Menno. Keine mehr da!
-
-     ### dynamischer ###
-     // ein Prototyp, damit wir die Methode bekannt machen
-     static string query_kekse();
-     static mixed case_fighting();
-     ...
-     AddInfo(({"keks","kekse"}),
-	     #'query_kekse,"		// ein Verweis auf die Funktion
-	     sagt: ",
-	     0,				// nicht silent :)
-	     #'case_fighting);		// noch ein Funktionsverweis
-     ...
-     static string query_kekse() {
-      if(present("keks"))
-       return("Ich hab noch welche. Aetsch!");
-      return("Menno. Keine mehr da!");
-     }
-
-     static mixed case_fighting() {
-      if(InFight())
-       return("Keine Zeit fuer Kekse. Muss kaempfen.");
-      return 0;
-     }
-
-     // "frage monster nach keks":
-     // - wenn es kaempft, hoeren alle:
-     //   "Das Monster sagt: Keine Zeit fuer Kekse. Muss kaempfen.
-     // - sonst, wenn es noch Kekse hat, hoeren alle:
-     //   "Das Monster sagt: Ich hab noch welche. Aetsch!
-     // - sonst:
-     //   "Das Monster sagt: "Menno. Keine mehr da!
+*********
 
 
-     ### dynamisch und komplex ###
-     // ein Prototyp, damit wir die Methode bekannt machen
-     static string question_gold();
-     ...
+FUNKTION
+========
 
-     // "gold" wird eine Closure auf die Methode question_gold()
-     // zugewiesen, ausserdem soll es still bleiben (wir informieren
-     // den Restraum selbst)
-     AddInfo("gold",#'question_gold,"murmelt: ",1);
-     ...
+   varargs void AddInfo( frage, meldung
+                         [, indent [, [silent [, casebased] ] ] );
 
-     // los gehts, wir generieren unsere Antwort selbst
-     static string question_gold() {
-      int money;
-      string *y, objstr;
-      object o;
-      // wieviel Kohle hat der Spieler
-      money=this_player()->QueryMoney();
-      y=allocate(0);
-      // und jetzt suchen wir die Dinge aus Gold
-      o=first_inventory(this_player());
-      while(o) {
-       if(o->QueryMaterial(MAT_GOLD)>0 &&
-          strstr(object_name(o),"/obj/money"))
-        y+=({o->name(WER,1)});
-       o=next_inventory(o);
-      }
 
-      // das geht an alle anderen im Raum, silent bietet sich hier
-      // nicht an, weil es mehrere Moeglichkeiten gibt
-      say(break_string(
-       Name(WER,1)+" murmelt "+
-       this_player()->name(WEM,1)+
-       " etwas zu"+
-       ((money || sizeof(y))?
-        " und glotzt "+
-        this_player()->QueryPronoun(WEN)+" gierig an.":
-        "."),78),({this_player()}));
+DEFINIERT IN
+============
 
-      // und hier die Antwort an den Spieler selbst, mit vielen
-      // Verzweigungen fuer dessen Besitztum
-      return("Ich hab kein Gold bei mir."+
-          ((money || sizeof(y))?
-           " Aber du "+
-           (money?"hast ja jede Menge Kohle bei dir, so etwa "+money+
-            " Muenzen."+
-            (sizeof(y)?
-             " Ausserdem "+
-             ((sizeof(y)==1)?"ist":"sind")+
-             " auch noch "+CountUp(y)+" aus Gold.":
-             ""):
-            (sizeof(y)?" Aber was du so bei dir hast: "+
-             CountUp(y)+
-             (sizeof(y)==1?" ist":" sind")+
-             " aus Gold.":"")):
-           ""));
-     }
+   /std/npc/info.c
 
-     // "frage monster nach gold"
-     // - der Fragesteller hoert zB:
-     //   Das Monster murmelt: Ich hab kein Gold bei mir. Aber du hast ja
-     //   Das Monster murmelt: jede Menge Kohle bei dir, so etwas <number>
-     //   Das Monster murmelt: Muenzen. Ausserdem ist/sind noch <object1>
-     //   Das Monster murmelt: und <object2> aus Gold."
-     // - die Umstehenden hoeren:
-     //   "Das Monster murmelt @WEM etwas zu."
-     //   oder
-     //   "Das Monster murmelt @WEM etwas zu und glotzt ihn/sie gierig an."
 
-SIEHE AUCH:
-     Verwandt:  AddSpecialInfo(L), RemoveInfo(L)
-     Props:     P_PRE_INFO, P_DEFAULT_INFO
-     Files:     /std/npc/info.c
-     Loggen:    P_LOG_INFO
-     Interna:   GetInfoArr, do_frage
+ARGUMENTE
+=========
+
+   string/string* frage
+      Schluesseltext(e) auf die Informationen gegeben werden sollen.
+   string/closure meldung
+      Information, die gegeben werden soll/Closure
+   string indent
+      Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
+   int/string silent
+      Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+   string/closure casebased
+      Closure mit Returnwert string oder int.
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
+   einer Information mit dem Schluessel 'frage' fragt, so wird die
+   entsprechende 'meldung' ausgegeben (oder die Closure in 'meldung'
+   gerufen und der zurueckgegebene Text ausgegeben). Der Meldung wird
+   der Name des Monsters vorangestellt.
+
+   Frage:
+    Schluessel muessen kleingeschrieben sein, koennen aber Leerzeichen
+    enthalten.
+
+   Meldung:
+    Wenn kein 'indent' angegeben ist, muss man die Meldung selbst
+    umbrechen.
+
+   Indent:
+    Wird ein 'indent' angegeben so wird jeder Zeile hinter dem
+    Monsternamen noch das 'indent' vorangesetzt. Zusaetzlich wird
+    'meldung' auf jeden Fall sauber umgebrochen.
+    Ein typisches indent ist "sagt: ".
+
+   Silent:
+    Bei 'silent'==1 erfolgt keine Textausgabe der Antwortmeldung im Raum,
+    ist 'silent' ein String, so wird jener an alle anderen Spieler ausser
+    dem Fragesteller im Raum ausgegeben.
+
+   Casebased:
+    Die als Closure angegebene Methode entscheidet, ob oder wie der NPC
+    auf diese Frage antworten soll:
+    - return 0:       normale Antwort mit "meldung"
+    - return 1:       keine Antwort/Antwort mit DEFAULT_NOINFO
+    - return string:  Antwort mit string unter Beruecksichtigung eines
+                      indent
+
+   Die Strings von 'silent' und 'meldung' werden geparsed.
+   Dabei koennen die @...-Tags von replace_personal() verwendet werden,
+   Objekt 1 ist this_player(). Ersetzte String am Satzanfang werden
+   automatisch gross geschrieben.
+   AddInfo() konvertiert die alten Schluesselworte @WER, @WESSEN, @WEM,
+   @WEN zu denen von replace_personal().
+
+   Mittels der in <npc.h> definierten Frage DEFAULT_INFO kann eine
+   Meldung gesetzt werden, die gegeben werden soll, wenn der Spieler
+   etwas fragt, auf das keine Antwort vorgegeben ist (das loest
+   SetProp(P_DEFAULT_INFO, <text>) ab).
+
+
+BEISPIELE
+=========
+
+   ### eine Standardantwort setzen ###
+   AddInfo(DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
+   // identisch zu
+   SetProp(P_DEFAULT_INFO, "starrt Dir boese in die Augen.\n");
+
+   ### einfache Beispiele, auch mit casebased ###
+   AddInfo(({"knete","kohle"}),
+           "sagt: ich habe so etwas nicht.\n");
+   AddInfo("geld",
+           "Ich habe zwar kein Geld, aber ... blablabla ...",
+           "sagt: " );
+   AddInfo("muenzen",
+           "fluestert: Du willst Geld?\n",
+           0,
+           "fluestert @WEM etwas zu.\n");
+
+   // "frage monster nach geld": alle im Raum hoeren
+   //  Das Monster sagt: Ich habe zwar kein Geld, aber ...
+   //  Das Monster sagt: ... blablabla ...
+
+   // "frage monster nach muenzen":
+   // - der Fragensteller hoert:
+   //   "Das Monster fluestert: Du willst Geld?"
+   // - alle andere hoeren:
+   //   "Das Monster fluestert <Fragenstellernamen> etwas zu."
+
+   ### dynamisch ###
+   // ein Prototyp, damit wir die Methode bekannt machen
+   static string query_kekse();
+   ...
+   AddInfo(({"keks","kekse"}),
+           #'query_kekse,             // ein Verweis auf die Funktion
+           "sagt: ");
+   ...
+   static string query_kekse() {
+    if(present("keks"))
+     return("Ich hab noch welche. Aetsch!");
+    return("Menno. Keine mehr da!");
+   }
+
+   // "frage monster nach keks":
+   // - wenn es noch Kekse hat, hoeren alle:
+   //   "Das Monster sagt: Ich hab noch welche. Aetsch!
+   // - sonst:
+   //   "Das Monster sagt: "Menno. Keine mehr da!
+
+   ### dynamischer ###
+   // ein Prototyp, damit wir die Methode bekannt machen
+   static string query_kekse();
+   static mixed case_fighting();
+   ...
+   AddInfo(({"keks","kekse"}),
+           #'query_kekse,"            // ein Verweis auf die Funktion
+           sagt: ",
+           0,                         // nicht silent :)
+           #'case_fighting);          // noch ein Funktionsverweis
+   ...
+   static string query_kekse() {
+    if(present("keks"))
+     return("Ich hab noch welche. Aetsch!");
+    return("Menno. Keine mehr da!");
+   }
+
+   static mixed case_fighting() {
+    if(InFight())
+     return("Keine Zeit fuer Kekse. Muss kaempfen.");
+    return 0;
+   }
+
+   // "frage monster nach keks":
+   // - wenn es kaempft, hoeren alle:
+   //   "Das Monster sagt: Keine Zeit fuer Kekse. Muss kaempfen.
+   // - sonst, wenn es noch Kekse hat, hoeren alle:
+   //   "Das Monster sagt: Ich hab noch welche. Aetsch!
+   // - sonst:
+   //   "Das Monster sagt: "Menno. Keine mehr da!
+
+
+   ### dynamisch und komplex ###
+   // ein Prototyp, damit wir die Methode bekannt machen
+   static string question_gold();
+   ...
+
+   // "gold" wird eine Closure auf die Methode question_gold()
+   // zugewiesen, ausserdem soll es still bleiben (wir informieren
+   // den Restraum selbst)
+   AddInfo("gold",#'question_gold,"murmelt: ",1);
+   ...
+
+   // los gehts, wir generieren unsere Antwort selbst
+   static string question_gold() {
+    int money;
+    string *y, objstr;
+    object o;
+    // wieviel Kohle hat der Spieler
+    money=this_player()->QueryMoney();
+    y=allocate(0);
+    // und jetzt suchen wir die Dinge aus Gold
+    o=first_inventory(this_player());
+    while(o) {
+     if(o->QueryMaterial(MAT_GOLD)>0 &&
+        strstr(object_name(o),"/obj/money"))
+      y+=({o->name(WER,1)});
+     o=next_inventory(o);
+    }
+
+    // das geht an alle anderen im Raum, silent bietet sich hier
+    // nicht an, weil es mehrere Moeglichkeiten gibt
+    say(break_string(
+     Name(WER,1)+" murmelt "+
+     this_player()->name(WEM,1)+
+     " etwas zu"+
+     ((money || sizeof(y))?
+      " und glotzt "+
+      this_player()->QueryPronoun(WEN)+" gierig an.":
+      "."),78),({this_player()}));
+
+    // und hier die Antwort an den Spieler selbst, mit vielen
+    // Verzweigungen fuer dessen Besitztum
+    return("Ich hab kein Gold bei mir."+
+        ((money || sizeof(y))?
+         " Aber du "+
+         (money?"hast ja jede Menge Kohle bei dir, so etwa "+money+
+          " Muenzen."+
+          (sizeof(y)?
+           " Ausserdem "+
+           ((sizeof(y)==1)?"ist":"sind")+
+           " auch noch "+CountUp(y)+" aus Gold.":
+           ""):
+          (sizeof(y)?" Aber was du so bei dir hast: "+
+           CountUp(y)+
+           (sizeof(y)==1?" ist":" sind")+
+           " aus Gold.":"")):
+         ""));
+   }
+
+   // "frage monster nach gold"
+   // - der Fragesteller hoert zB:
+   //   Das Monster murmelt: Ich hab kein Gold bei mir. Aber du hast ja
+   //   Das Monster murmelt: jede Menge Kohle bei dir, so etwas <number>
+   //   Das Monster murmelt: Muenzen. Ausserdem ist/sind noch <object1>
+   //   Das Monster murmelt: und <object2> aus Gold."
+   // - die Umstehenden hoeren:
+   //   "Das Monster murmelt @WEM etwas zu."
+   //   oder
+   //   "Das Monster murmelt @WEM etwas zu und glotzt ihn/sie gierig an."
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:  AddSpecialInfo(L), RemoveInfo(L)
+   Props:     P_PRE_INFO, P_DEFAULT_INFO
+   Files:     /std/npc/info.c
+   Loggen:    P_LOG_INFO
+   Interna:   GetInfoArr, do_frage
 
 7.Apr 2004 Gloinson
diff --git a/doc/lfun/AddItem b/doc/lfun/AddItem
index 8e812ea..222b24d 100644
--- a/doc/lfun/AddItem
+++ b/doc/lfun/AddItem
@@ -1,159 +1,184 @@
+
 AddItem()
+*********
 
-FUNKTION:
-	varargs object AddItem(mixed filename,int refresh,mixed props);
 
-DEFINIERT IN:
-	/std/room/items.c
-	/std/npc/items.c
+FUNKTION
+========
 
-ARGUMENTE:
-	filename
-	  String mit dem Namen des zu erzeugenden Objektes oder Array von
-	  Strings mit den Namen der zu erzeugenden Objekte. Bei einem Array
-	  wird ein Name zufaellig ausgewaehlt.
-	refresh
-	  Wann und wie soll das Objekt erneuert werden:
-	  - REFRESH_NONE      - Kein Refresh bis zum Neuladen des Raums
-                        - oder NPCs.
-	  - REFRESH_DESTRUCT  - Refresh bei Reset, wenn Item zerstoert
-	                        wurde.
-	  - REFRESH_REMOVE    - Refresh bei Reset, wenn Item entfernt wurde.
-	  - REFRESH_ALWAYS    - Neuer Clone bei jedem Reset.
-	  - REFRESH_MOVE_HOME - Objekt wird bei Reset automatisch
-	                        zurueckgeholt, wenn es wegbewegt wurde.
-	                        (nur in Raeumen!)
-	  Bei NPC's gilt zusaetzlich:
-	  - CLONE_WEAR       - Item Anziehen, wenn es eine Ruestung ist.
-	  - CLONE_WIELD      - Item zuecken, wenn es eine Waffe ist.
-	  - CLONE_NO_CHECK   - Zuecken oder Anziehen ohne Ueberpruefungen.
-	props (optional)
-	  Mapping mit denen in einem geclonten Objekt zu setzenden
-	  Properties oder 1 fuer die Erzeugung einer Blueprint.
+   varargs object AddItem(mixed filename,int refresh,mixed props);
 
-RUeCKGABEWERT:
-	Innerhalb von Raeumen wird das erzeugte Objekt zurueckgeliefert. Bei
-	NPC's klappt dies leider nicht, da dort die Objekte nicht sofort
-	erzeugt werden, sondern erst, nachdem der NPC an seinen
-	Bestimmungsort transferiert wurde. Daher wird bei NPC immer 0 
-	zurueckgegeben.
 
-BESCHREIBUNG:
-	Abhaengig von <filename> und <props> wird ein Objekt erzeugt und in
-	den Raum bzw. NPC bewegt. Dabei gibt es folgende Moeglichkeiten:
-	- <filename> ist ein Dateiname.
-	  Es wird ein Clone dieser Datei erstellt oder (wenn <props>=1 ist)
-	  deren Blueprint verwendet.
-	- <filename> ist ein Array von Dateinamen.
-	  Es wird eine Datei zufaellig aus dem Array ausgewaehlt und von
-	  dieser Datei ein Clone erstellt oder (wenn <props>=1 ist) deren
-	  Blueprint verwendet.
-	Uebergibt man fuer <props> ein Mapping mit dem Aufbau
-	  ([prop_name:prop_wert,...]),
-	so werden diese Properties im erzeugten Objekt gesetzt.
-	Der Parameter <refresh> gibt an, was waehrend eines Resets im Raum
-	bzw. in NPC's oder was beim Erzeugen von NPC's geschehen soll:
-	In <rooms.h> sind dazu folgende Moeglichkeiten definiert:
-	- REFRESH_NONE
-            Das Objekt wird niemals erneuert; falls es zerstoert wurde, wird
-	    es erst dann wieder erzeugt, wenn der Raum erneut geladen bzw.
-	    der NPC neu erzeugt wird. Man beachte, dass nicht jeder NPC
-	    wirklich refreshende Objekte benoetigt, REFRESH_NONE spart
-	    hierbei sowohl Rechenzeit als auch Speicher!
-	- REFRESH_DESTRUCT
-	    Das Objekt wird nur dann erneuert, wenn es in der Zwischenzeit
-	    zerstoert wurde (bei NPC's ist das zum Beispiel der Fall, wenn
-	    sie getoetet wurden).
-	    REFRESH_NONE & REFRESH_DESTRUCT + Blueprint-Objekt bedeutet bei
-	    NPC's ein Unique-Objekt, es wird also nicht beim Neuerzeugen des
-	    NPC's zurueckgesetzt.
-	- REFRESH_REMOVE
-	    Das Objekt wird erneuert, wenn es sich nicht mehr im Raum bzw.
-	    im NPC befindet. Das kein sein, weil es zerstoert wurde, aber
-	    auch zum Beispiel in folgenden Faellen:
-	    * weil es jemand mitgenommen hat
-	       (in Raeumen bei Gegenstaenden)
-	    * weil es fortgegangen ist
-	       (in Raeumen bei NPC's, die herumlaufen)
-	    * weil es weggeworfen wurde
-	       (in NPC's bei Gegenstaenden)
-	- REFRESH_ALWAYS
-	    Das Objekt wird immer erneuert. Von dieser Refreshmethode sollte
-	    man allerdings Abstand nehmen, da sich sonst mit der Zeit
-	    gewaltige Mengen von Objekten ansammeln koennen!
-	- REFRESH_MOVE_HOME
-	    Das Objekt wird in einen Raum zurueckbewegt, sofern es noch
-	    existiert, jedoch nicht mehr in dem Raum ist. Sinnvoll ist dies
-	    eigentlich nur fuer Lebewesen, funktioniert aber auch bei
-	    beliebigen Objekten. Hauptsaechlich geht es hierbei darum,
-	    herumlaufende NPCs oder bei erzwungenen Bewegungen nicht von
-	    P_GUARD zurueckgehaltene NPCs wieder an einen definierten
-	    Ausgangsort zurueckzubringen.
-	Hat man in Raeumen als <filename> ein Array von Dateinamen
-	uebergeben, so wird beim Reset jedesmal aufs Neue ein zufaelliges
-	Objekt aus der Liste ausgewaehlt (nicht in NPC's).
-	In NPC's gilt der Grundsatz der Vermeidung von ueberfluessigen
-	Objekten im MUD. Neu erzeugt werden Objekte beim Erzeugen eines
-	NPC's oder bei einem Reset im selbigen. Anstatt die Objekte gleich
-	neu zu erschaffen, wird erst geschaut, ob sich identische Objekte
-	schon im Raum befinden. Ist dies der Fall, so nimmt der NPC sie auf,
-	ruft jedoch vorher nochmals create() in ihnen auf!
-	  (noetig wegen moeglicher Veraenderungen an den Objekten)
-	Was dann passiert, haengt von weiteren Angaben in <refresh> ab.
-	Folgende weitere Moeglichkeiten sind in <npc.h> definiert:
-        - CLONE_WEAR
-	  Ist das hinzugefuegte Item eine Ruestung, so wird sie nach
-	  Aufnahme oder Neuerzeugung angezogen.
-        - CLONE_WIELD
-	  Ist das hinzugefuegte Item eine Waffe, so wird sie nach Aufnahme
-	  oder Neuerzeugung gezueckt.
-        - CLONE_NO_CHECK
-	  Hiermit verhindert man eine Ueberpruefung, ob eine Ruestung
-	  angezogen oder eine Waffe gezueckt werden kann. Es ist jedoch
-	  Vorsicht geboten: So kann es ohne weiteres passieren, dass ein NPC
-	  mehrere Ruestungen gleichen Typs angezogen oder mehrere Waffen
-	  gezueckt hat.
-	Benutzt man Blueprints (<props>=1) mit REFRESH_REMOVE oder
-	REFRESH_ALWAYS, so kann es zu ungewollten Ueberraschungen kommen, da
-	die Blueprint dann unabhaengig von ihrem momentanen Aufenthaltsort
-	wieder in den Raum bzw. NPC bewegt wird, von dem sie erzeugt wurde!
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-	Wenn man Blueprints benutzt, sollte man daran denken, dass sich von
-	dieser dann keine Clones mehr erstellen lassen!
-	RemoveItem() zum Entfernen von Items ist nur fuer Raeume definiert!
+   /std/room/items.c
+   /std/npc/items.c
 
-	Die Option CLONE_NEW ist veraltet. Die Objekte werden nun immer
-	neu erzeugt. Die Option darf noch angegeben werden, hat aber keine
-	Bedeutung mehr.
 
-BEISPIELE:
-	// Ein Wuerfel, der sich nach Entfernen erneuert:
-	  AddItem("/obj/misc/wuerfel",REFRESH_REMOVE);
-	// Ein etwas veraenderter Wuerfel:
-	  AddItem("/obj/misc/wuerfel",
-	          REFRESH_REMOVE,
-	          ([P_SHORT :"Ein schwerer Wuerfel",
-	            P_WEIGHT:100]));
-	// Eine Blueprint, die nur einmal im MUD existiert. Wenn sie
-	// zerstoert wurde, wird sie bei Reset neu erzeugt:
-	  AddItem("/mon/angsthase",REFRESH_DESTRUCT,1);
-	// Eine Blueprint, die nur einmal im MUD existiert. Wenn sie aus dem
-	// Raum entfernt wurde, wird sie bei Reset zurueckgeholt:
-	  AddItem("/mon/angsthase",REFRESH_MOVE_HOME,1);
-	// Ein zufaelliges Objekt:
-	  AddItem(({"/obj/misc/lolli",
-	            "/obj/misc/bonbon",
-	            "/obj/misc/bier"}),REFRESH_REMOVE);
-	// Eine Ruestung, die auch angezogen wird (nur in NPC's):
-	  AddItem("/ruestung/sommerkleid",REFRESH_REMOVE|CLONE_WEAR);
-	// Eine Unique-Waffe, die auch gezueckt wird (nur in NPC's):
-	  AddItem("/waffe/zapper",REFRESH_DESTRUCT|CLONE_WIELD,1);
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-	RemoveItem(), replace_program(), create(), P_GUARD,
-	/std/room/items.c, /std/npc/items.c,
-	/sys/rooms.h, /sys/npc.h
+   filename
+     String mit dem Namen des zu erzeugenden Objektes oder Array von
+     Strings mit den Namen der zu erzeugenden Objekte. Bei einem Array
+     wird ein Name zufaellig ausgewaehlt.
+   refresh
+     Wann und wie soll das Objekt erneuert werden:
+     - REFRESH_NONE      - Kein Refresh bis zum Neuladen des Raums
+                   - oder NPCs.
+     - REFRESH_DESTRUCT  - Refresh bei Reset, wenn Item zerstoert
+                           wurde.
+     - REFRESH_REMOVE    - Refresh bei Reset, wenn Item entfernt wurde.
+     - REFRESH_ALWAYS    - Neuer Clone bei jedem Reset.
+     - REFRESH_MOVE_HOME - Objekt wird bei Reset automatisch
+                           zurueckgeholt, wenn es wegbewegt wurde.
+                           (nur in Raeumen!)
+     Bei NPC's gilt zusaetzlich:
+     - CLONE_WEAR       - Item Anziehen, wenn es eine Ruestung ist.
+     - CLONE_WIELD      - Item zuecken, wenn es eine Waffe ist.
+     - CLONE_NO_CHECK   - Zuecken oder Anziehen ohne Ueberpruefungen.
+   props (optional)
+     Mapping mit denen in einem geclonten Objekt zu setzenden
+     Properties oder 1 fuer die Erzeugung einer Blueprint.
 
-----------------------------------------------------------------------------
+
+RUeCKGABEWERT
+=============
+
+   Innerhalb von Raeumen wird das erzeugte Objekt zurueckgeliefert. Bei
+   NPC's klappt dies leider nicht, da dort die Objekte nicht sofort
+   erzeugt werden, sondern erst, nachdem der NPC an seinen
+   Bestimmungsort transferiert wurde. Daher wird bei NPC immer 0
+   zurueckgegeben.
+
+
+BESCHREIBUNG
+============
+
+   Abhaengig von <filename> und <props> wird ein Objekt erzeugt und in
+   den Raum bzw. NPC bewegt. Dabei gibt es folgende Moeglichkeiten:
+   - <filename> ist ein Dateiname.
+     Es wird ein Clone dieser Datei erstellt oder (wenn <props>=1 ist)
+     deren Blueprint verwendet.
+   - <filename> ist ein Array von Dateinamen.
+     Es wird eine Datei zufaellig aus dem Array ausgewaehlt und von
+     dieser Datei ein Clone erstellt oder (wenn <props>=1 ist) deren
+     Blueprint verwendet.
+   Uebergibt man fuer <props> ein Mapping mit dem Aufbau
+     ([prop_name:prop_wert,...]),
+   so werden diese Properties im erzeugten Objekt gesetzt.
+   Der Parameter <refresh> gibt an, was waehrend eines Resets im Raum
+   bzw. in NPC's oder was beim Erzeugen von NPC's geschehen soll:
+   In <rooms.h> sind dazu folgende Moeglichkeiten definiert:
+   - REFRESH_NONE
+       Das Objekt wird niemals erneuert; falls es zerstoert wurde, wird
+       es erst dann wieder erzeugt, wenn der Raum erneut geladen bzw.
+       der NPC neu erzeugt wird. Man beachte, dass nicht jeder NPC
+       wirklich refreshende Objekte benoetigt, REFRESH_NONE spart
+       hierbei sowohl Rechenzeit als auch Speicher!
+   - REFRESH_DESTRUCT
+       Das Objekt wird nur dann erneuert, wenn es in der Zwischenzeit
+       zerstoert wurde (bei NPC's ist das zum Beispiel der Fall, wenn
+       sie getoetet wurden).
+       REFRESH_NONE & REFRESH_DESTRUCT + Blueprint-Objekt bedeutet bei
+       NPC's ein Unique-Objekt, es wird also nicht beim Neuerzeugen des
+       NPC's zurueckgesetzt.
+   - REFRESH_REMOVE
+       Das Objekt wird erneuert, wenn es sich nicht mehr im Raum bzw.
+       im NPC befindet. Das kein sein, weil es zerstoert wurde, aber
+       auch zum Beispiel in folgenden Faellen:
+       * weil es jemand mitgenommen hat
+          (in Raeumen bei Gegenstaenden)
+       * weil es fortgegangen ist
+          (in Raeumen bei NPC's, die herumlaufen)
+       * weil es weggeworfen wurde
+          (in NPC's bei Gegenstaenden)
+   - REFRESH_ALWAYS
+       Das Objekt wird immer erneuert. Von dieser Refreshmethode sollte
+       man allerdings Abstand nehmen, da sich sonst mit der Zeit
+       gewaltige Mengen von Objekten ansammeln koennen!
+   - REFRESH_MOVE_HOME
+       Das Objekt wird in einen Raum zurueckbewegt, sofern es noch
+       existiert, jedoch nicht mehr in dem Raum ist. Sinnvoll ist dies
+       eigentlich nur fuer Lebewesen, funktioniert aber auch bei
+       beliebigen Objekten. Hauptsaechlich geht es hierbei darum,
+       herumlaufende NPCs oder bei erzwungenen Bewegungen nicht von
+       P_GUARD zurueckgehaltene NPCs wieder an einen definierten
+       Ausgangsort zurueckzubringen.
+   Hat man in Raeumen als <filename> ein Array von Dateinamen
+   uebergeben, so wird beim Reset jedesmal aufs Neue ein zufaelliges
+   Objekt aus der Liste ausgewaehlt (nicht in NPC's).
+   In NPC's gilt der Grundsatz der Vermeidung von ueberfluessigen
+   Objekten im MUD. Neu erzeugt werden Objekte beim Erzeugen eines
+   NPC's oder bei einem Reset im selbigen. Anstatt die Objekte gleich
+   neu zu erschaffen, wird erst geschaut, ob sich identische Objekte
+   schon im Raum befinden. Ist dies der Fall, so nimmt der NPC sie auf,
+   ruft jedoch vorher nochmals create() in ihnen auf!
+     (noetig wegen moeglicher Veraenderungen an den Objekten)
+   Was dann passiert, haengt von weiteren Angaben in <refresh> ab.
+   Folgende weitere Moeglichkeiten sind in <npc.h> definiert:
+   - CLONE_WEAR
+     Ist das hinzugefuegte Item eine Ruestung, so wird sie nach
+     Aufnahme oder Neuerzeugung angezogen.
+   - CLONE_WIELD
+     Ist das hinzugefuegte Item eine Waffe, so wird sie nach Aufnahme
+     oder Neuerzeugung gezueckt.
+   - CLONE_NO_CHECK
+     Hiermit verhindert man eine Ueberpruefung, ob eine Ruestung
+     angezogen oder eine Waffe gezueckt werden kann. Es ist jedoch
+     Vorsicht geboten: So kann es ohne weiteres passieren, dass ein NPC
+     mehrere Ruestungen gleichen Typs angezogen oder mehrere Waffen
+     gezueckt hat.
+   Benutzt man Blueprints (<props>=1) mit REFRESH_REMOVE oder
+   REFRESH_ALWAYS, so kann es zu ungewollten Ueberraschungen kommen, da
+   die Blueprint dann unabhaengig von ihrem momentanen Aufenthaltsort
+   wieder in den Raum bzw. NPC bewegt wird, von dem sie erzeugt wurde!
+
+
+BEMERKUNGEN
+===========
+
+   Wenn man Blueprints benutzt, sollte man daran denken, dass sich von
+   dieser dann keine Clones mehr erstellen lassen!
+   RemoveItem() zum Entfernen von Items ist nur fuer Raeume definiert!
+
+   Die Option CLONE_NEW ist veraltet. Die Objekte werden nun immer
+   neu erzeugt. Die Option darf noch angegeben werden, hat aber keine
+   Bedeutung mehr.
+
+
+BEISPIELE
+=========
+
+   // Ein Wuerfel, der sich nach Entfernen erneuert:
+     AddItem("/obj/misc/wuerfel",REFRESH_REMOVE);
+   // Ein etwas veraenderter Wuerfel:
+     AddItem("/obj/misc/wuerfel",
+             REFRESH_REMOVE,
+             ([P_SHORT :"Ein schwerer Wuerfel",
+               P_WEIGHT:100]));
+   // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie
+   // zerstoert wurde, wird sie bei Reset neu erzeugt:
+     AddItem("/mon/angsthase",REFRESH_DESTRUCT,1);
+   // Eine Blueprint, die nur einmal im MUD existiert. Wenn sie aus dem
+   // Raum entfernt wurde, wird sie bei Reset zurueckgeholt:
+     AddItem("/mon/angsthase",REFRESH_MOVE_HOME,1);
+   // Ein zufaelliges Objekt:
+     AddItem(({"/obj/misc/lolli",
+               "/obj/misc/bonbon",
+               "/obj/misc/bier"}),REFRESH_REMOVE);
+   // Eine Ruestung, die auch angezogen wird (nur in NPC's):
+     AddItem("/ruestung/sommerkleid",REFRESH_REMOVE|CLONE_WEAR);
+   // Eine Unique-Waffe, die auch gezueckt wird (nur in NPC's):
+     AddItem("/waffe/zapper",REFRESH_DESTRUCT|CLONE_WIELD,1);
+
+
+SIEHE AUCH
+==========
+
+   RemoveItem(), replace_program(), create(), P_GUARD,
+   /std/room/items.c, /std/npc/items.c,
+   /sys/rooms.h, /sys/npc.h
+
 Last modified: Thu Nov 23 13:43:30 CET 2006 by Rumata
diff --git a/doc/lfun/AddKnownPotion b/doc/lfun/AddKnownPotion
index 4d4d296..874e55c 100644
--- a/doc/lfun/AddKnownPotion
+++ b/doc/lfun/AddKnownPotion
@@ -1,25 +1,45 @@
+
 AddKnownPotion()
+****************
 
-FUNKTION:
-     int AddKnownPotion(int nr)
 
-DEFINIERT IN:
-     /std/player/potion.c
+FUNKTION
+========
 
-ARGUMENTE:
-     int nr       Nummer eines ZTs
+   int AddKnownPotion(int nr)
 
-BESCHREIBUNG:
-     Addiert einen ZT als bekannt in einem Spieler. Nur vom Orakel rufbar.
 
-RUeCKGABEWERT:
-     1  Erfolg
-     -1 fehlende Berechtigung
-     -2 Nummer bereits eingetragen
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
-     Verwandt:  FindPotion(), RemoveKnownPotion(), InList()
-     Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
+   /std/player/potion.c
+
+
+ARGUMENTE
+=========
+
+   int nr       Nummer eines ZTs
+
+
+BESCHREIBUNG
+============
+
+   Addiert einen ZT als bekannt in einem Spieler. Nur vom Orakel rufbar.
+
+
+RUeCKGABEWERT
+=============
+
+   1  Erfolg
+   -1 fehlende Berechtigung
+   -2 Nummer bereits eingetragen
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
+   Verwandt:  FindPotion(), RemoveKnownPotion(), InList()
+   Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
 
 6.Feb 2016 Gloinson
diff --git a/doc/lfun/AddMaterial b/doc/lfun/AddMaterial
index d4f50b7..7f90d82 100644
--- a/doc/lfun/AddMaterial
+++ b/doc/lfun/AddMaterial
@@ -1,76 +1,100 @@
+
 AddMaterial()
-FUNKTION:
-     private static varargs void AddMaterial(string mat, int gender,
-                                             mixed names, mixed groups,
-                                             mixed dif) {
+*************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     string mat
-       Materialstring, definiert in <thing/material.h>
+FUNKTION
+========
 
-     int gender
-       Geschlecht des einzutragenden Materials
+   private static varargs void AddMaterial(string mat, int gender,
+                                           mixed names, mixed groups,
+                                           mixed dif) {
 
-     mixed names
-       Name des Materials:
-       - "<Nominativ>" oder (meist nur Nom. und Gen. noetig)
-       - ({"<Nominativ>","<Genitiv>","<Dativ>","<Akkusativ>"})
 
-     mixed groups
-       Eingruppierung des Materials:
-       - MATGROUP_XXX oder ({MATGROUP_XXX,...})
-       - ([MAT_GROUP_XXX:xx,MATGROUP_YYY:yy,...])
+DEFINIERT IN
+============
 
-     mixed dif
-       Schwierigkeiten bei der Erkennbarkeit:
-       - int x oder ({MINMAT,x1,MATPOS1,x2,MATPOS2 ...})
-       - xn: Erkennbarkeitsschwierigkeit (100=100%) -100..100
-       - MINMAT: Erkennung zumindest als _dieses_ Material
-                 moeglich
-       - MATPOSn: moegliches Material, erkennbar, wenn
-                  Erkennbarkeitfaehigkeit>=xn
-                  -> das letzte MATPOS muss natuerlich
-                     string mat entsprechen
+   /p/daemon/materialdb.c (MATERIALDB)
 
-BESCHREIBUNG:
-     Es wird in die Materialiendatenbank eine neues Material aufgenommen,
-     die Stringkonstante dafuer wird vorher in <thing/material.h> fest-
-     gelegt. Falls der Genitiv nicht Nominativ+"s" entspricht (z.B. "Seide"),
-     sollte dieser explizit angegeben werden.
-     Nach Neuladen der Datenbank ist dieses Material auch per MaterialName(),
-     'erkennbar' (siehe mixed dif, siehe Beispiel) bzw. seinen einzelnen
-     Gruppen zuordnbar.
 
-BEISPIELE:
-     AddMaterial(MAT_NITROGLYCERINE,NEUTER,"Nitroglycerin",
-                 ({MATGROUP_EXPLOSIVE,MATGROUP_FLUID}),
-                 ({MAT_OIL,25,MAT_MISC_EXPLOSIVE,50,MAT_NITROGLYCERINE}));
+ARGUMENTE
+=========
 
-     Damit wird das Material Nytroglycerin aufgenommen, ein explosiver
-     (damit entflammbarer) sowie fluessiger Stoff. Liegt die Erkennungs-
-     faehigkeit (MaterialName()) unter 25, wird es nur als Oel erkannt,
-     liegt sie unter 50, wird es zumindest als explosives Material erkannt,
-     liegt sie ueber 49, so wird es korrekt erkannt (wie schade :) ).
+   string mat
+     Materialstring, definiert in <thing/material.h>
 
-BEMERKUNGEN:
-     Wird in der create() der Datenbank aufgerufen. Zu beachten:
-     - vor Eintrag eines _neuen_ Materials die Datenbank durchsuchen!
-     - bei den Materialiengruppen die automatischen Abhaengigkeiten in
-       AddMaterial() durchsehen!
-     - bitte Datenbank neu laden
+   int gender
+     Geschlecht des einzutragenden Materials
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
-     Listen:	  AllMaterials(), AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
-     Sonstiges:	  P_MATERIAL_KNOWLEDGE
+   mixed names
+     Name des Materials:
+     - "<Nominativ>" oder (meist nur Nom. und Gen. noetig)
+     - ({"<Nominativ>","<Genitiv>","<Dativ>","<Akkusativ>"})
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+   mixed groups
+     Eingruppierung des Materials:
+     - MATGROUP_XXX oder ({MATGROUP_XXX,...})
+     - ([MAT_GROUP_XXX:xx,MATGROUP_YYY:yy,...])
+
+   mixed dif
+     Schwierigkeiten bei der Erkennbarkeit:
+     - int x oder ({MINMAT,x1,MATPOS1,x2,MATPOS2 ...})
+     - xn: Erkennbarkeitsschwierigkeit (100=100%) -100..100
+     - MINMAT: Erkennung zumindest als _dieses_ Material
+               moeglich
+     - MATPOSn: moegliches Material, erkennbar, wenn
+                Erkennbarkeitfaehigkeit>=xn
+                -> das letzte MATPOS muss natuerlich
+                   string mat entsprechen
+
+
+BESCHREIBUNG
+============
+
+   Es wird in die Materialiendatenbank eine neues Material aufgenommen,
+   die Stringkonstante dafuer wird vorher in <thing/material.h> fest-
+   gelegt. Falls der Genitiv nicht Nominativ+"s" entspricht (z.B. "Seide"),
+   sollte dieser explizit angegeben werden.
+   Nach Neuladen der Datenbank ist dieses Material auch per MaterialName(),
+   'erkennbar' (siehe mixed dif, siehe Beispiel) bzw. seinen einzelnen
+   Gruppen zuordnbar.
+
+
+BEISPIELE
+=========
+
+   AddMaterial(MAT_NITROGLYCERINE,NEUTER,"Nitroglycerin",
+               ({MATGROUP_EXPLOSIVE,MATGROUP_FLUID}),
+               ({MAT_OIL,25,MAT_MISC_EXPLOSIVE,50,MAT_NITROGLYCERINE}));
+
+   Damit wird das Material Nytroglycerin aufgenommen, ein explosiver
+   (damit entflammbarer) sowie fluessiger Stoff. Liegt die Erkennungs-
+   faehigkeit (MaterialName()) unter 25, wird es nur als Oel erkannt,
+   liegt sie unter 50, wird es zumindest als explosives Material erkannt,
+   liegt sie ueber 49, so wird es korrekt erkannt (wie schade :) ).
+
+
+BEMERKUNGEN
+===========
+
+   Wird in der create() der Datenbank aufgerufen. Zu beachten:
+   - vor Eintrag eines _neuen_ Materials die Datenbank durchsuchen!
+   - bei den Materialiengruppen die automatischen Abhaengigkeiten in
+     AddMaterial() durchsehen!
+   - bitte Datenbank neu laden
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/AddMiniQuest b/doc/lfun/AddMiniQuest
index 91e7857..787e718 100644
--- a/doc/lfun/AddMiniQuest
+++ b/doc/lfun/AddMiniQuest
@@ -1,54 +1,71 @@
+
 AddMiniQuest()
-
-FUNKTION:
-    int AddMiniQuest(int stupse, string questgeber, string desc, int active,
-                     string titel, string erledigt, mapping voraussetzungen,
-                     string region, string *erlaubte)
-
-DEFINIERT IN:
-    /secure/questmaster
-
-BESCHREIBUNG:
-    Diese Funktion traegt eine neue Miniquest im Questmaster ein.
-
-ARGUMENTE:
-
-    stupse (>0)  - Anzahl Stufenpunkte, die fuer die MQ gutgeschrieben werden
-    questgeber   - Ladename des Objekts, das GiveMiniQuest() aufruft
-    desc         - Aufgabenbeschreibung der Miniquest
-    active (0/1) - ist die Miniquest aktiv, d.h. spielbar, oder nicht?
-    titel        - Titel der Miniquest, darf weder "in", noch "im" enthalten,
-                   weil dann der Eintrag in der Fraternitas-Bibliothek nicht
-                   gelesen werden kann.
-    erledigt     - Beschreibung der Miniquest, nachdem man sie erledigt hat
-                   Der Text kann in der Bibliothek der kleinen und grossen
-                   Heldentaten in der Fraternitas eingesehen werden.
-    voraussetzungen - Mapping im Format von P_RESTRICTIONS (s. dort), um
-                   die Voraussetzungen festzulegen, die ein Spieler 
-                   erfuellen muss, um die MQ ueberhaupt spielen zu koennen
-                   Wird fuer die regionsbezogenen Informationspunkte/-NPCs
-                   ausgewertet. 0 oder ([]) eintragen, wenn keine 
-                   Voraussetzungen bestehen.
-    region       - Zuordnung der Miniquest zu einer Region; wird fuer der
-                   Bibliothek der Fraternitas verwendet, um die MQs der
-                   einzelnen Regionen herauszufiltern.
-    erlaubte     - Array mit Ladenamen von Objekten, die berechtigt sind,
-                   die Daten der MQ abzufragen, um Spielern einen Hinweis
-                   darauf zu geben, die sie noch nicht bestanden haben.
-
-RUECKGABEWERTE:
-     1: Hat geklappt
-    -1: Parameterformat stimmt nicht (questgeber kein String oder Leerstring,
-        voraussetzungen kein Mapping, region oder titel keine Strings, 
-        erlaubte kein Array)
-    -2: weniger als 1 Stufenpunkt einzutragen versucht
-    -3: Das Array in "erlaubte" ist leer, oder zum angegebenen Questgeber
-        wurde keine Datei gefunden.
-    -4: Der angegebene Questgeber vergibt schon eine andere Miniquest
+**************
 
 
-SIEHE AUCH:
-    GiveMiniQuest(L), HasMiniQuest(L)
-    P_RESTRICTIONS
-    /secure/questmaster.c
+FUNKTION
+========
 
+   int AddMiniQuest(int stupse, string questgeber, string desc, int active,
+                    string titel, string erledigt, mapping voraussetzungen,
+                    string region, string *erlaubte)
+
+
+DEFINIERT IN
+============
+
+   /secure/questmaster
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion traegt eine neue Miniquest im Questmaster ein.
+
+
+ARGUMENTE
+=========
+
+   stupse (>0)  - Anzahl Stufenpunkte, die fuer die MQ gutgeschrieben werden
+   questgeber   - Ladename des Objekts, das GiveMiniQuest() aufruft
+   desc         - Aufgabenbeschreibung der Miniquest
+   active (0/1) - ist die Miniquest aktiv, d.h. spielbar, oder nicht?
+   titel        - Titel der Miniquest, darf weder "in", noch "im" enthalten,
+                  weil dann der Eintrag in der Fraternitas-Bibliothek nicht
+                  gelesen werden kann.
+   erledigt     - Beschreibung der Miniquest, nachdem man sie erledigt hat
+                  Der Text kann in der Bibliothek der kleinen und grossen
+                  Heldentaten in der Fraternitas eingesehen werden.
+   voraussetzungen - Mapping im Format von P_RESTRICTIONS (s. dort), um
+                  die Voraussetzungen festzulegen, die ein Spieler
+                  erfuellen muss, um die MQ ueberhaupt spielen zu koennen
+                  Wird fuer die regionsbezogenen Informationspunkte/-NPCs
+                  ausgewertet. 0 oder ([]) eintragen, wenn keine
+                  Voraussetzungen bestehen.
+   region       - Zuordnung der Miniquest zu einer Region; wird fuer der
+                  Bibliothek der Fraternitas verwendet, um die MQs der
+                  einzelnen Regionen herauszufiltern.
+   erlaubte     - Array mit Ladenamen von Objekten, die berechtigt sind,
+                  die Daten der MQ abzufragen, um Spielern einen Hinweis
+                  darauf zu geben, die sie noch nicht bestanden haben.
+
+
+RUECKGABEWERTE
+==============
+
+    1: Hat geklappt
+   -1: Parameterformat stimmt nicht (questgeber kein String oder Leerstring,
+       voraussetzungen kein Mapping, region oder titel keine Strings,
+       erlaubte kein Array)
+   -2: weniger als 1 Stufenpunkt einzutragen versucht
+   -3: Das Array in "erlaubte" ist leer, oder zum angegebenen Questgeber
+       wurde keine Datei gefunden.
+   -4: Der angegebene Questgeber vergibt schon eine andere Miniquest
+
+
+SIEHE AUCH
+==========
+
+   GiveMiniQuest(L), HasMiniQuest(L)
+   P_RESTRICTIONS
+   /secure/questmaster.c
diff --git a/doc/lfun/AddMoney b/doc/lfun/AddMoney
index 229d1cc..b9e16b2 100644
--- a/doc/lfun/AddMoney
+++ b/doc/lfun/AddMoney
@@ -1,62 +1,92 @@
+
+AddMoney()
+**********
+
+
 AddMoney(L)
-FUNKTION:
-     public int AddMoney(int amount);
+===========
 
-DEFINIERT IN:
-     /std/container/moneyhandler.c
-     /std/living/moneyhandler.c
-     /std/player/moneyhandler.c
 
-ARGUMENTE:
-     int amount
-         Die zufuehrende oder abziehende Geldmenge
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Dem Spieler wird die in <amount> festgelegte Geldmenge abgezogen oder
-     zugefuehrt.
+   public int AddMoney(int amount);
 
-RUeCKGABEWERT:
-     Technisch gesehen wird Geld mit entsprechendem <amount> erzeugt
-     ("/items/money.c") und mittels "move" in den Spieler bewegt.  Das Ergebnis
-     dieses "move"-Aufrufes wird hier uebergeben, z.B. 1 fuer OK.
-     Die moeglichen Fehler-Konstanten sind in /sys/moving.h definiert, siehe
-     auch Dokumentation zu "move".
 
-BEMERKUNGEN:
-     <amount> kann sowohl positiv als auch negativ sein. Welche Auswirkungen
-     beide Faelle haben, sollte klar sein. Doch sollte bei einem negativen
-     <amount> vorher mittels QueryMoney() abgefragt werden, ob der Spieler
-     auch ueber ausreichend Geld verfuegt.
-     Wird dem Spieler Geld abgezogen, ist darauf zu achten, dieses in der
-     Zentralbank einzuzahlen (s.a.:PayIn() ). 
-     Verschafft man dem Spieler Geld aus dem Nichts, muss es vorher bei der
-     Zentralbank abgebucht (WithDraw()) werden.
+DEFINIERT IN
+============
 
-     Achtung: Kann der Spieler die in <amount> angebene Geldmenge nicht
-	      tragen, werden ihm keine Muenzen in sein Inventar bewegt.  Die
-	      Fehlermeldung erkennt man an dem Rueckgabewert ME_TOO_HEAVY.
+   /std/container/moneyhandler.c
+   /std/living/moneyhandler.c
+   /std/player/moneyhandler.c
 
-     Im Gegensatz zu Spielern haben alle anderen Objekte (Raeume, NPC, etc.)
-     standardmaessig keinen Moneyhandler. In diesem Fall muss in Lebewesen
-     "/std/living/moneyhandler"
-     und in nicht-Lebewesen
-     "/std/container/moneyhandler"
-     geerbt werden.
 
-BEISPIELE:
-     // gib ihm Geld
-     this_player()->AddMoney(50);
+ARGUMENTE
+=========
 
-     // nimm ihm Geld
-     if(this_player()->AddMoney(-50)==1)
-      write("Der Ork beklaut dich!\n");
+   int amount
+       Die zufuehrende oder abziehende Geldmenge
 
-SIEHE AUCH:
-     Geldhandling:	QueryMoney(L)
-     Zentralbank:	PayIn(L), WithDraw(L)
-     Sonstiges:		move(L),
-			/items/money.c, /sys/moving.h, /sys/money.h, /sys/bank.h
-			/std/container/moneyhandler.c
+
+BESCHREIBUNG
+============
+
+   Dem Spieler wird die in <amount> festgelegte Geldmenge abgezogen oder
+   zugefuehrt.
+
+
+RUeCKGABEWERT
+=============
+
+   Technisch gesehen wird Geld mit entsprechendem <amount> erzeugt
+   ("/items/money.c") und mittels "move" in den Spieler bewegt.  Das Ergebnis
+   dieses "move"-Aufrufes wird hier uebergeben, z.B. 1 fuer OK.
+   Die moeglichen Fehler-Konstanten sind in /sys/moving.h definiert, siehe
+   auch Dokumentation zu "move".
+
+
+BEMERKUNGEN
+===========
+
+   <amount> kann sowohl positiv als auch negativ sein. Welche Auswirkungen
+   beide Faelle haben, sollte klar sein. Doch sollte bei einem negativen
+   <amount> vorher mittels QueryMoney() abgefragt werden, ob der Spieler
+   auch ueber ausreichend Geld verfuegt.
+   Wird dem Spieler Geld abgezogen, ist darauf zu achten, dieses in der
+   Zentralbank einzuzahlen (s.a.:PayIn() ).
+   Verschafft man dem Spieler Geld aus dem Nichts, muss es vorher bei der
+   Zentralbank abgebucht (WithDraw()) werden.
+
+   Achtung: Kann der Spieler die in <amount> angebene Geldmenge nicht
+            tragen, werden ihm keine Muenzen in sein Inventar bewegt.  Die
+            Fehlermeldung erkennt man an dem Rueckgabewert ME_TOO_HEAVY.
+
+   Im Gegensatz zu Spielern haben alle anderen Objekte (Raeume, NPC, etc.)
+   standardmaessig keinen Moneyhandler. In diesem Fall muss in Lebewesen
+   "/std/living/moneyhandler"
+   und in nicht-Lebewesen
+   "/std/container/moneyhandler"
+   geerbt werden.
+
+
+BEISPIELE
+=========
+
+   // gib ihm Geld
+   this_player()->AddMoney(50);
+
+   // nimm ihm Geld
+   if(this_player()->AddMoney(-50)==1)
+    write("Der Ork beklaut dich!\n");
+
+
+SIEHE AUCH
+==========
+
+   Geldhandling:      QueryMoney(L)
+   Zentralbank:       PayIn(L), WithDraw(L)
+   Sonstiges:         move(L),
+                      /items/money.c, /sys/moving.h, /sys/money.h, /sys/bank.h
+                      /std/container/moneyhandler.c
 
 18.02.2013, Zesstra
-
diff --git a/doc/lfun/AddMsg b/doc/lfun/AddMsg
index 974c905..9faad47 100644
--- a/doc/lfun/AddMsg
+++ b/doc/lfun/AddMsg
@@ -1,42 +1,62 @@
+
 AddMsg()
+********
 
-FUNKTION:
-     void AddMsg(string msg, int next);
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     msg
-          Die auszugebende Meldung.
-     next
-          Zeit bis zur naechsten Fahrplanstation.
+   void AddMsg(string msg, int next);
 
-BESCHREIBUNG:
-     Dem Fahrplan wird die Ausgabe einer Meldung an den Transporter
-     hinzugefuegt. Diese Meldung koennte zum Beispiel das Nahen der
-     naechsten Haltestelle ankuendigen o.ae. Nach Ausgabe der Meldung
-     vergehen next Sekunden, bis die naechste Station angefahren wird.
 
-     Um das Umbrechen der Meldung (normalerweise auf 78 Zeichen pro Zeile)
-     muss sich der Aufrufer selber kuemmern.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   /std/transport.c
 
-BEISPIELE:
 
-     AddMsg("In der Ferne taucht eine kleine Inseln auf.\n", 10);
-     AddMsg("Das Schiff steuert einen kleinen Steg an.\n");
-     AddRoute(...);
+ARGUMENTE
+=========
 
-     Nach der Ankuendigung der Insel vergehen 10 Sekunden, bis die naechste
-     Meldung ausgegeben wird. Da bei der zweiten Meldung keine Zeit
-     angegeben war, legt das Schiff direkt nach der Ausgabe der Meldung an.
+   msg
+        Die auszugebende Meldung.
+   next
+        Zeit bis zur naechsten Fahrplanstation.
 
-SIEHE AUCH:
-     AddRoute(), AddFun(), /std/transport.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Dem Fahrplan wird die Ausgabe einer Meldung an den Transporter
+   hinzugefuegt. Diese Meldung koennte zum Beispiel das Nahen der
+   naechsten Haltestelle ankuendigen o.ae. Nach Ausgabe der Meldung
+   vergehen next Sekunden, bis die naechste Station angefahren wird.
+
+   Um das Umbrechen der Meldung (normalerweise auf 78 Zeichen pro Zeile)
+   muss sich der Aufrufer selber kuemmern.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   AddMsg("In der Ferne taucht eine kleine Inseln auf.\n", 10);
+   AddMsg("Das Schiff steuert einen kleinen Steg an.\n");
+   AddRoute(...);
+
+   Nach der Ankuendigung der Insel vergehen 10 Sekunden, bis die naechste
+   Meldung ausgegeben wird. Da bei der zweiten Meldung keine Zeit
+   angegeben war, legt das Schiff direkt nach der Ausgabe der Meldung an.
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), AddFun(), /std/transport.c
+
 25.01.2015, Zesstra
-
diff --git a/doc/lfun/AddPlant b/doc/lfun/AddPlant
index a79bcff..ae2df8b 100644
--- a/doc/lfun/AddPlant
+++ b/doc/lfun/AddPlant
@@ -1,58 +1,84 @@
+
 AddPlant()
+**********
 
-FUNKTION:
-        varargs int AddPlant(string filename, [string|string* npcId]) 
 
-DEFINIERT IN:
-        /std/room/kraeuter.c
+FUNKTION
+========
 
-ARGUMENTE:
-        filename
-          Der Filename des Krauts das hier gefunden werden soll.
-        npcId
-          Die ID eines NPCs oder die IDs einer Liste von NPCs, der/die das 
-          Kraut bewachen soll/en. Befindet sich ein NPC mit einer dieser IDs
-          im Raum, kann das Kraut nicht gepflueckt werden. Dieses Argument 
-          ist optional!
+   varargs int AddPlant(string filename, [string|string* npcId])
 
-RUeCKGABEWERT:
-        -1 wenn das Objekt nicht geclont werden konnte
-        >=0 sonst
 
-BESCHREIBUNG:
-        Mit Hilfe dieser Funktion koennen Kraeuter fuer den mudweiten
-        Kraeuterskill recht einfach eingebaut werden. Alles was man
-        noch machen muss, ist den Namen der Pflanze in einem Detail oder
-        der Langbeschreibung zu erwaehnen.
-        Mit dem Befehl "showplant" in /obj/tools/planttool kann man sich 
-        bequem anzeigen lassen, was es alles an Kraeutern gibt, die man 
-        nehmen kann.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-        Damit die Kraeuter von den Spielern zum Brauen von Traenken benutzt
-        werden koennen, muss der Raum erst in einem Master eingetragen werden.
-        Derzeit schickt ihr dazu am besten eine kurze Mail an einen Erzmagier,
-        gerne nimmt Humni die derzeit entgegen.
-        Die Kraeuter wurden von der Balance bereits alle im vorhinein
-        abgenommen. Lediglich die Einhaltung der Kategorien ist zu beachten.
-        Sind Kraeuter nicht im Master konfiguriert (wie z.B. im Homemud), sind
-        alle erzeugten Kraeuter nur "Testkraeuter" mit nur der ID "kraut".
+   /std/room/kraeuter.c
 
-BEISPIELE:
-        #include <items/kraeuter/kraeuterliste.h>
-        inherit "/std/room/kraeuter";
-        inherit "/std/room";
-        
-        void create()
-        {
-          ::create();
-          SetProp(P_INT_LONG, "Du siehst eine Wiese voller Feldklee.\n");
-          AddPlant(FELDKLEE);
-        }
 
-SIEHE AUCH:
-        AddItem();
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   filename
+     Der Filename des Krauts das hier gefunden werden soll.
+   npcId
+     Die ID eines NPCs oder die IDs einer Liste von NPCs, der/die das
+     Kraut bewachen soll/en. Befindet sich ein NPC mit einer dieser IDs
+     im Raum, kann das Kraut nicht gepflueckt werden. Dieses Argument
+     ist optional!
+
+
+RUeCKGABEWERT
+=============
+
+   -1 wenn das Objekt nicht geclont werden konnte
+   >=0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Mit Hilfe dieser Funktion koennen Kraeuter fuer den mudweiten
+   Kraeuterskill recht einfach eingebaut werden. Alles was man
+   noch machen muss, ist den Namen der Pflanze in einem Detail oder
+   der Langbeschreibung zu erwaehnen.
+   Mit dem Befehl "showplant" in /obj/tools/planttool kann man sich
+   bequem anzeigen lassen, was es alles an Kraeutern gibt, die man
+   nehmen kann.
+
+
+BEMERKUNGEN
+===========
+
+   Damit die Kraeuter von den Spielern zum Brauen von Traenken benutzt
+   werden koennen, muss der Raum erst in einem Master eingetragen werden.
+   Derzeit schickt ihr dazu am besten eine kurze Mail an einen Erzmagier,
+   gerne nimmt Humni die derzeit entgegen.
+   Die Kraeuter wurden von der Balance bereits alle im vorhinein
+   abgenommen. Lediglich die Einhaltung der Kategorien ist zu beachten.
+   Sind Kraeuter nicht im Master konfiguriert (wie z.B. im Homemud), sind
+   alle erzeugten Kraeuter nur "Testkraeuter" mit nur der ID "kraut".
+
+
+BEISPIELE
+=========
+
+   #include <items/kraeuter/kraeuterliste.h>
+   inherit "/std/room/kraeuter";
+   inherit "/std/room";
+
+
+
+   void create()
+   {
+     ::create();
+     SetProp(P_INT_LONG, "Du siehst eine Wiese voller Feldklee.\n");
+     AddPlant(FELDKLEE);
+   }
+
+
+SIEHE AUCH
+==========
+
+   AddItem();
+
 18.01.2015, Zesstra
-
diff --git a/doc/lfun/AddPluralId b/doc/lfun/AddPluralId
index fd37bb2..8d6d249 100644
--- a/doc/lfun/AddPluralId
+++ b/doc/lfun/AddPluralId
@@ -1,27 +1,49 @@
+
 AddPluralId()
+*************
 
-FUNKTION:
-     void AddPluralId(mixed id);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     id
-          Identfikationsstring oder Array von Strings
+   void AddPluralId(mixed id);
 
-BESCHREIBUNG:
-     Es werden ein oder mehrere Bezeichner hinzugefuegt, mit denen sich 
-     mehrere Einheiten der Menge ansprechen lassen.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     siehe /items/money.c
+   /std/unit.c
 
-SIEHE AUCH:
-     AddSingularId(), RemovePluralId(), AddId(), id(), /std/unit.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   id
+        Identfikationsstring oder Array von Strings
+
+
+BESCHREIBUNG
+============
+
+   Es werden ein oder mehrere Bezeichner hinzugefuegt, mit denen sich
+   mehrere Einheiten der Menge ansprechen lassen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   siehe /items/money.c
+
+
+SIEHE AUCH
+==========
+
+   AddSingularId(), RemovePluralId(), AddId(), id(), /std/unit.c
+
 Last modified: Mon Jul 14 11:30:00 1997 by Silvana
diff --git a/doc/lfun/AddPursuer b/doc/lfun/AddPursuer
index 451ea9d..f4839e6 100644
--- a/doc/lfun/AddPursuer
+++ b/doc/lfun/AddPursuer
@@ -1,29 +1,52 @@
+
 AddPursuer()
+************
 
-FUNKTION:
-  void AddPursuer(object pursuer)
 
-ARGUMENTE:
-  pursuer: Objekt, das demjenigen folgen soll, in dem AddPursuer
-           aufgerufen wurde.
+FUNKTION
+========
 
-FUNKTION:
-  Durch den Aufruf von AddPursuer in einem Objekt, welches living() ist,
-  wird das Object, welches als Argument uebergeben wurde in die Liste
-  der Verfolger eingetragen. Alle Objekte, die in der Verfolgerliste stehen
-  werden bei Bewegungen des Verfolgten in dasselbe Environment bewegt.
+   void AddPursuer(object pursuer)
 
-RUECKGABEWERT:
-  keiner
 
-BEMERKUNG:
-  Im Verfolger wird PreventFollow mit dem Zielobjekt, in das der Verfolgte 
-  bewegt wird, aufgerufen. Dadurch kann der raeumliche Bereich, in dem 
-  verfolgt wird, eingeschraenkt werden.
+ARGUMENTE
+=========
 
-BEISPIELE:
-  find_player("jof")->AddPursuer(find_player("kirk"))
-  Danach wird Jof von Kirk verfolgt.
+   pursuer: Objekt, das demjenigen folgen soll, in dem AddPursuer
+            aufgerufen wurde.
 
-SIEHE AUCH:
-  "RemovePursuer", "PreventFollow"
+
+FUNKTION
+========
+
+   Durch den Aufruf von AddPursuer in einem Objekt, welches living() ist,
+   wird das Object, welches als Argument uebergeben wurde in die Liste
+   der Verfolger eingetragen. Alle Objekte, die in der Verfolgerliste stehen
+   werden bei Bewegungen des Verfolgten in dasselbe Environment bewegt.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNG
+=========
+
+   Im Verfolger wird PreventFollow mit dem Zielobjekt, in das der Verfolgte
+   bewegt wird, aufgerufen. Dadurch kann der raeumliche Bereich, in dem
+   verfolgt wird, eingeschraenkt werden.
+
+
+BEISPIELE
+=========
+
+   find_player("jof")->AddPursuer(find_player("kirk"))
+   Danach wird Jof von Kirk verfolgt.
+
+
+SIEHE AUCH
+==========
+
+   "RemovePursuer", "PreventFollow"
diff --git a/doc/lfun/AddReadDetail b/doc/lfun/AddReadDetail
index c8de775..7f36aa4 100644
--- a/doc/lfun/AddReadDetail
+++ b/doc/lfun/AddReadDetail
@@ -1,80 +1,102 @@
+
 AddReadDetail()
+***************
 
-FUNKTION:
-    void AddReadDetail(string|string*keys,
-                       string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    desc
-      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddReadDetail(string|string*keys,
+                      string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    beim Lesen ausgegeben werden, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-      <desc> ist ein String.
-       Beim Lesen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-       Beim Lesen wird zufaellig einer der Strings zurueckgegeben.
-      <desc> ist ein Mapping.
-        Das Mapping muss folgenden Aufbau haben:
-          ([0:        "Defaulttext",
-            "rasse1": "r1text", ...]).
 
-        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-        Eintrag im Mapping existiert, wird der entsprechende Text
-        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-        rassenabhaengige Texte moeglich.
-      <desc> ist eine Closure.
-        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-        als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer lesbare Details koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-    Will man ein lesbares Detail an einem Objekt haben, welches der Spieler
-    mit "lies <id>" (<id> ist eine ID des Objekts) bekommt, muss man ein
-    Detail SENSE_DEFAULT hinzufuegen.
-    (Ein Detail "<id>" hinzuzufuegen, hat einen ganz anderes Effekt! Dieses
-     wuerde vom Spieler mit "lies <id> an <id>" gelesen werden und ist
-     meistens nicht das, was gewuenscht wird.)
 
-BEMERKUNGEN:
-    (1) Auf die 'desc' wird kein process_string() mehr angewendet.
-        Bitte stattdessen lfun closures bzw. 'inline closures'
-        verwenden.
+ARGUMENTE
+=========
 
-    (2) Im Gegensatz zum Verhalten von AddTouchDetail(), AddSmells() und
-        AddSounds() wirkt ein SENSE_DEFAULT-Detail in einem Raum nicht.
-        Ein einfaches "lies" bleibt dann ohne Rueckgabewert.
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   desc
+     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
 
-BEISPIELE:
-    AddReadDetail( ({ "schild" }),
-      "BETRETEN STRENGSTENS VERBOTEN!\n" );
 
-    AddReadDetail("inschrift",
-                  ([0: "Dort steht: Ein Ring sie zu binden. ....\n",
-                    "elf": "Alles in dir straeubt sich, DAS DA zu lesen.\n"]));
+BESCHREIBUNG
+============
 
-    AddReadDetail("regeln",
-      function string() {
-        this_player()->More("/etc/WIZRULES", 1);
-        return "";
-      });
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   beim Lesen ausgegeben werden, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+     <desc> ist ein String.
+      Beim Lesen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+      Beim Lesen wird zufaellig einer der Strings zurueckgegeben.
+     <desc> ist ein Mapping.
+       Das Mapping muss folgenden Aufbau haben:
+         ([0:        "Defaulttext",
+           "rasse1": "r1text", ...]).
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+       Eintrag im Mapping existiert, wird der entsprechende Text
+       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+       rassenabhaengige Texte moeglich.
+     <desc> ist eine Closure.
+       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+       als Parameter uebergeben.
+
+   Fuer lesbare Details koennen Forscherpunkte eingetragen werden.
+
+   Will man ein lesbares Detail an einem Objekt haben, welches der Spieler
+   mit "lies <id>" (<id> ist eine ID des Objekts) bekommt, muss man ein
+   Detail SENSE_DEFAULT hinzufuegen.
+   (Ein Detail "<id>" hinzuzufuegen, hat einen ganz anderes Effekt! Dieses
+    wuerde vom Spieler mit "lies <id> an <id>" gelesen werden und ist
+    meistens nicht das, was gewuenscht wird.)
+
+
+BEMERKUNGEN
+===========
+
+   (1) Auf die 'desc' wird kein process_string() mehr angewendet.
+       Bitte stattdessen lfun closures bzw. 'inline closures'
+       verwenden.
+
+   (2) Im Gegensatz zum Verhalten von AddTouchDetail(), AddSmells() und
+       AddSounds() wirkt ein SENSE_DEFAULT-Detail in einem Raum nicht.
+       Ein einfaches "lies" bleibt dann ohne Rueckgabewert.
+
+
+BEISPIELE
+=========
+
+   AddReadDetail( ({ "schild" }),
+     "BETRETEN STRENGSTENS VERBOTEN!\n" );
+
+   AddReadDetail("inschrift",
+                 ([0: "Dort steht: Ein Ring sie zu binden. ....\n",
+                   "elf": "Alles in dir straeubt sich, DAS DA zu lesen.\n"]));
+
+   AddReadDetail("regeln",
+     function string() {
+       this_player()->More("/etc/WIZRULES", 1);
+       return "";
+     });
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddResistanceModifier b/doc/lfun/AddResistanceModifier
index 6476f86..b8a5ad8 100644
--- a/doc/lfun/AddResistanceModifier
+++ b/doc/lfun/AddResistanceModifier
@@ -1,49 +1,75 @@
+
 AddResistanceModifier()
+***********************
 
-FUNKTION:
-     varargs int AddResistanceModifier(mapping mod, string add)
 
-DEFINIERT IN:
-     /std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     mapping mod:
-      Mapping mit Schadensarten und ihrem Resistenzmodifikator (der im Bereich
-      von -1.0 bis +x liegen kann), z.B. ([DT_FIRE:-1.0]) (Totalresistenz).
-     string add:
-      Ein Identifikator fuer _diesen_ Eintrag des setzenden Objektes.
+   varargs int AddResistanceModifier(mapping mod, string add)
 
-BESCHREIBUNG:
-     Es werden Resistenzen in dem Objekt gesetzt, die solange bestehen, wie
-     das setzende Objekt existiert, oder nicht RemoveResistanceModifier
-     (mit eventuellem Schluessel add) aufgerufen wird. Zusaetzliche Resistenzen
-     werden eingerechnet.
 
-BEMERKUNGEN:
-     Fuer Ruestungen kann und sollte man P_RESISTANCE_STRENGTHS verwenden.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     // Oel mit vervierfachtem Feuerschaden
-     int add_action() {
-      ...
-      write(break_string("Du schuettest das Oel ueber "+
-			 npc->name(WEN)+".",78));
-      ...
-      npc->AddResistanceModifier(([DT_FIRE:3.0]), "oel");
-      SetProp(P_INVIS,1);
-      SetProp(P_EXTRA_LOOK, "Ueberall tropft Oel herunter.\n");
-      move(npc,M_NOCHECK);
-      ...
-     }
+   /std/living/combat.c
 
-RUeCKGABEWERT:
-     1 fuer Erfolg
 
-SIEHE AUCH:
-     Modifikatoren:	RemoveResistanceModifier(), P_RESISTANCE_MODIFIER
-     simple Resistenz:	P_RESISTANCE, P_VULNERABILITY
-     Hauptmapping:	P_RESISTANCE_STRENGTHS
-     Berechnung:	CheckResistance(), UpdateResistanceStrengths()
-     anderes:		balance, /std/armour/combat.c, /std/living/combat.c
+ARGUMENTE
+=========
+
+   mapping mod:
+    Mapping mit Schadensarten und ihrem Resistenzmodifikator (der im Bereich
+    von -1.0 bis +x liegen kann), z.B. ([DT_FIRE:-1.0]) (Totalresistenz).
+   string add:
+    Ein Identifikator fuer _diesen_ Eintrag des setzenden Objektes.
+
+
+BESCHREIBUNG
+============
+
+   Es werden Resistenzen in dem Objekt gesetzt, die solange bestehen, wie
+   das setzende Objekt existiert, oder nicht RemoveResistanceModifier
+   (mit eventuellem Schluessel add) aufgerufen wird. Zusaetzliche Resistenzen
+   werden eingerechnet.
+
+
+BEMERKUNGEN
+===========
+
+   Fuer Ruestungen kann und sollte man P_RESISTANCE_STRENGTHS verwenden.
+
+
+BEISPIELE
+=========
+
+   // Oel mit vervierfachtem Feuerschaden
+   int add_action() {
+    ...
+    write(break_string("Du schuettest das Oel ueber "+
+                       npc->name(WEN)+".",78));
+    ...
+    npc->AddResistanceModifier(([DT_FIRE:3.0]), "oel");
+    SetProp(P_INVIS,1);
+    SetProp(P_EXTRA_LOOK, "Ueberall tropft Oel herunter.\n");
+    move(npc,M_NOCHECK);
+    ...
+   }
+
+
+RUeCKGABEWERT
+=============
+
+   1 fuer Erfolg
+
+
+SIEHE AUCH
+==========
+
+   Modifikatoren:     RemoveResistanceModifier(), P_RESISTANCE_MODIFIER
+   simple Resistenz:  P_RESISTANCE, P_VULNERABILITY
+   Hauptmapping:      P_RESISTANCE_STRENGTHS
+   Berechnung:        CheckResistance(), UpdateResistanceStrengths()
+   anderes:           balance, /std/armour/combat.c, /std/living/combat.c
 
 29.Apr 2002, Gloinson@MG
diff --git a/doc/lfun/AddRoomCmd b/doc/lfun/AddRoomCmd
index 5e206fe..f4aeb68 100644
--- a/doc/lfun/AddRoomCmd
+++ b/doc/lfun/AddRoomCmd
@@ -1,13 +1,23 @@
+
 AddRoomCmd()
+************
 
-SYNTAX:
-	AddRoomCmd( string kommando, string funktion );
-	AddRoomCmd( string *kommandos, string funktion );
 
-FUNKTION:
-	
-	Diese Funktion ist veraltet. Sie wird vollstaendig durch
-	die Funktion AddCmd ersetzt.
+SYNTAX
+======
 
-SIEHE AUCH:
-	"AddCmd"
+   AddRoomCmd( string kommando, string funktion );
+   AddRoomCmd( string *kommandos, string funktion );
+
+
+FUNKTION
+========
+
+   Diese Funktion ist veraltet. Sie wird vollstaendig durch
+   die Funktion AddCmd ersetzt.
+
+
+SIEHE AUCH
+==========
+
+   "AddCmd"
diff --git a/doc/lfun/AddRoomMessage b/doc/lfun/AddRoomMessage
index 4a9ca12..aa700c1 100644
--- a/doc/lfun/AddRoomMessage
+++ b/doc/lfun/AddRoomMessage
@@ -1,80 +1,103 @@
+
 AddRoomMessage()
+****************
 
-FUNKTION:
-     void AddRoomMessage(string *msg, int time, mixed *func);
 
-DEFINIERT IN:
-     /std/room/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     msg
-          Array von Strings mit den Meldungen.
-     time
-          Der Abstand zwischen zwei Meldungen in Sekunden.
-     func (optional)
-          String oder Array von Strings mit Funktionsnamen
+   void AddRoomMessage(string *msg, int time, mixed *func);
 
-BESCHREIBUNG:
-     Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
-     Meldungen an den Raum geschickt werden sollen.
 
-     Es wird alle time Sekunden zufaellig eine der in msg angegebenen
-     Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
-     zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
-     Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
-     Nummer der ausgegebenen Meldung.
+DEFINIERT IN
+============
 
-     Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
-     man folgendes bedenken:
-        o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
-          die Nerven zu gehen!
-        o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
-          aus Sicht des GameDrivers auch noch relativ teuer!
-     Fazit: weniger ist mehr!
+   /std/room/description.c
 
-BEMERKUNGEN:
-     * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
-     * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
-       ueberschreibt alle vorherigen Werte
-     * THIS_PLAYER() NICHT VERWENDEN!
-     In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
-     this_player() nicht verwendet werden. AddRoomMessage ist call_out-
-     gesteuert und speichert somit das this_player(). Damit ist this_player()
-     immer der Spieler, der den Raum geladen, also den Raum als erster
-     betreten hat. 
-     Spieler also bitte selbst ueber filter(all_inventory(this_object()),
-                                            #'interactive) suchen.
 
-BEISPIELE:
-     Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
-     unter den Fuessen knackt, soll man zudem mit 30%-iger
-     Wahrscheinlichkeit zusammenzucken:
+ARGUMENTE
+=========
 
-     inherit "/std/room";
+   msg
+        Array von Strings mit den Meldungen.
+   time
+        Der Abstand zwischen zwei Meldungen in Sekunden.
+   func (optional)
+        String oder Array von Strings mit Funktionsnamen
 
-     void create() {
-       ::create();
-       AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
-                          "Es raschelt im Gebuesch.\n",
-                          "Etwas knackt unter Deinen Fuessen.\n" }),
-                        30, ({"sound", "sound_more_rnd"}) );
-       ...
-     }
 
-     void sound(int msg) {
-       if (msg == 2)         // Es hat geknackt...
-         if (random(10) < 3) // Schreck lass nach! ;-)
-           tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
-     }
+BESCHREIBUNG
+============
 
-     // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
-     void sound_more_rnd() {
-       sound(0);   // die Message-Nummer ist hier unwichtig
-       SetProp(P_MSG_PROB, 25+random(20));  // neue Wartedauer
-     }
+   Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
+   Meldungen an den Raum geschickt werden sollen.
 
-SIEHE AUCH:
-     Verwandt: tell_room(), ReceiveMsg()
-     Props:    P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
+   Es wird alle time Sekunden zufaellig eine der in msg angegebenen
+   Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
+   zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
+   Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
+   Nummer der ausgegebenen Meldung.
+
+   Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
+   man folgendes bedenken:
+      o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
+        die Nerven zu gehen!
+      o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
+        aus Sicht des GameDrivers auch noch relativ teuer!
+   Fazit: weniger ist mehr!
+
+
+BEMERKUNGEN
+===========
+
+   * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
+   * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
+     ueberschreibt alle vorherigen Werte
+   * THIS_PLAYER() NICHT VERWENDEN!
+   In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
+   this_player() nicht verwendet werden. AddRoomMessage ist call_out-
+   gesteuert und speichert somit das this_player(). Damit ist this_player()
+   immer der Spieler, der den Raum geladen, also den Raum als erster
+   betreten hat.
+   Spieler also bitte selbst ueber filter(all_inventory(this_object()),
+                                          #'interactive) suchen.
+
+
+BEISPIELE
+=========
+
+   Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
+   unter den Fuessen knackt, soll man zudem mit 30%-iger
+   Wahrscheinlichkeit zusammenzucken:
+
+   inherit "/std/room";
+
+   void create() {
+     ::create();
+     AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
+                        "Es raschelt im Gebuesch.\n",
+                        "Etwas knackt unter Deinen Fuessen.\n" }),
+                      30, ({"sound", "sound_more_rnd"}) );
+     ...
+   }
+
+   void sound(int msg) {
+     if (msg == 2)         // Es hat geknackt...
+       if (random(10) < 3) // Schreck lass nach! ;-)
+         tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
+   }
+
+   // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
+   void sound_more_rnd() {
+     sound(0);   // die Message-Nummer ist hier unwichtig
+     SetProp(P_MSG_PROB, 25+random(20));  // neue Wartedauer
+   }
+
+
+SIEHE AUCH
+==========
+
+   Verwandt: tell_room(), ReceiveMsg()
+   Props:    P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
 
 2.Feb 2016 Gloinson
diff --git a/doc/lfun/AddRoute b/doc/lfun/AddRoute
index 3ca0093..265fa8a 100644
--- a/doc/lfun/AddRoute
+++ b/doc/lfun/AddRoute
@@ -1,84 +1,114 @@
+
 AddRoute()
-FUNKTION:
-    public varargs void AddRoute(string room, int stay, int next, 
-        string harbour_desc, mixed dest_ids, string deststr)
+**********
 
-DEFINIERT IN:
-    /std/transport.c
 
-ARGUMENTE:
-    string room
-        Filename der Haltestelle (des Ziels)
-    int stay
-        Aufenthaltszeit an der Haltestelle.
-    int next
-        Fahrtzeit von dort bis zum naechsten Fahrplanpunkt
-    string harbour_desc
-        Name der Haltestelle (fuer QueryArrived)
-    mixed dest_ids
-        kleingeschriebene IDs der Haltestelle
-    string destrstr
-        Unbenutzt / Undefiniert.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Dem Fahrplan des Transporters wird eine neue Haltestelle hinzugefuegt.
+   public varargs void AddRoute(string room, int stay, int next,
+       string harbour_desc, mixed dest_ids, string deststr)
 
-    Bei Erreichen der Haltestelle wird der Transporter in den Raum 'room'
-    bewegt und sichtbar gemacht. Nun kann man ihn fuer 'stay' Sekunden
-    betreten oder verlassen, bevor er ablegt (unsichtbar gemacht wird).
-    Nach 'next' Sekunden wird dann der naechste Punkt des Fahrplans
-    ausgefuehrt.
-     
-    'harbour_desc' ist ein String, den QueryArrived() zurueckgibt, wenn sich
-    der Transporter an einer Haltestelle befindet. In der Regel ist das ein
-    String, der die Haltestelle naeher beschreibt.
-    
-    'dest_ids' ist ein Array von Strings, die als ID-Code fuer diese 
-    Haltstelle dienen. Das wird zB bei der Ermittlung einer Haltestelle bei 
-    "reise nach" benutzt. Wenn 'dest_ids' nicht gesetzt ist, und auch 
-    P_HARBOUR des Zielhafens nicht korrekt gesetzt ist, werden 
-    grossgeschriebene Begriffe aus 'harbour_desc' verwendet.
 
-BEISPIELE:
-    #1 Hier ein Auszug aus /d/inseln/schiffe/jolle.c:
+DEFINIERT IN
+============
 
-      AddRoute("/d/ebene/room/PortVain/po_haf2", 40,
-               10, "Hafen von Port Vain");
+   /std/transport.c
 
-    Die Jolle wird also beim Anlegen in den Port Vainer Hafen bewegt und
-    laesst sich dort 40 Sekunden lang betreten oder verlassen.
-    QueryArrived() liefert waehrend dieser Zeit den String "Hafen von Port
-    Vain" zurueck. Nach den 40 Sekunden legt die Jolle ab, und nach
-    weiteren 10 Sekunden wird die naechste Station in ihrem Fahrplan
-    angefahren.
 
-    #2 Die Galeere nach Orkhausen:
-      AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )" );
-      - haelt 30 Sekunden
-      - reist 20 Sekunden
-      - reist nach INSEL("steg"), bekannt als "Verlorene Land ( Orkhausen )"
-      - da keine 'dest_ids' angegeben sind, waere eine so definierte 
-        Haltstelle nur mit den IDs ansprechbar, die in P_HARBOURS im Zielraum
-        angegeben sind.
+ARGUMENTE
+=========
 
-    Wenn man nun erreichen wollte, dass das Ziel auch mit dem Kuerzel "vland"
-    ansprechbar ist, kann man zum einen explizite 'dest_ids' eintragen:
-      AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )",
-               ({"verlorenes", "land", "orkhausen", "vland"}));
-    Dies laesst sich im Zielhafen aber auch durch Eintragen des Kuerzels
-    "vland" in P_HARBOUR erreichen. Dies hat den Vorteil, dass dieser Hafen
-    dann von allen Transportern, die dort anlegen, unter demselben Namen
-    erreicht werden kann.
-    
-HINWEISE:
-    Dadurch, dass die Eintraege aus P_HARBOUR und 'dest_ids' gleichberechtigt
-    fuer "reise nach <ziel>" verwendet werden koennen, ist es moeglich,
-    dass die Reiseziele auf einem Schiff unter zusaetzlichen Bezeichnungen 
-    bekannt sind, als an Land (zum Beispiel koennte eine fernwestliche
-    Besatzung die Ziele anders nennen).
+   string room
+       Filename der Haltestelle (des Ziels)
+   int stay
+       Aufenthaltszeit an der Haltestelle.
+   int next
+       Fahrtzeit von dort bis zum naechsten Fahrplanpunkt
+   string harbour_desc
+       Name der Haltestelle (fuer QueryArrived)
+   mixed dest_ids
+       kleingeschriebene IDs der Haltestelle
+   string destrstr
+       Unbenutzt / Undefiniert.
 
-SIEHE AUCH:
-Funktionen:  AddMsg(L), AddFun(L), /std/transport.c
-Properties:  P_HARBOUR, P_NO_TRAVELING, P_TRAVEL_INFO
+
+BESCHREIBUNG
+============
+
+   Dem Fahrplan des Transporters wird eine neue Haltestelle hinzugefuegt.
+
+   Bei Erreichen der Haltestelle wird der Transporter in den Raum 'room'
+   bewegt und sichtbar gemacht. Nun kann man ihn fuer 'stay' Sekunden
+   betreten oder verlassen, bevor er ablegt (unsichtbar gemacht wird).
+   Nach 'next' Sekunden wird dann der naechste Punkt des Fahrplans
+   ausgefuehrt.
+
+
+
+   'harbour_desc' ist ein String, den QueryArrived() zurueckgibt, wenn sich
+   der Transporter an einer Haltestelle befindet. In der Regel ist das ein
+   String, der die Haltestelle naeher beschreibt.
+
+
+
+   'dest_ids' ist ein Array von Strings, die als ID-Code fuer diese
+   Haltstelle dienen. Das wird zB bei der Ermittlung einer Haltestelle bei
+   "reise nach" benutzt. Wenn 'dest_ids' nicht gesetzt ist, und auch
+   P_HARBOUR des Zielhafens nicht korrekt gesetzt ist, werden
+   grossgeschriebene Begriffe aus 'harbour_desc' verwendet.
+
+
+BEISPIELE
+=========
+
+   #1 Hier ein Auszug aus /d/inseln/schiffe/jolle.c:
+
+     AddRoute("/d/ebene/room/PortVain/po_haf2", 40,
+              10, "Hafen von Port Vain");
+
+   Die Jolle wird also beim Anlegen in den Port Vainer Hafen bewegt und
+   laesst sich dort 40 Sekunden lang betreten oder verlassen.
+   QueryArrived() liefert waehrend dieser Zeit den String "Hafen von Port
+   Vain" zurueck. Nach den 40 Sekunden legt die Jolle ab, und nach
+   weiteren 10 Sekunden wird die naechste Station in ihrem Fahrplan
+   angefahren.
+
+   #2 Die Galeere nach Orkhausen:
+     AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )" );
+     - haelt 30 Sekunden
+     - reist 20 Sekunden
+     - reist nach INSEL("steg"), bekannt als "Verlorene Land ( Orkhausen )"
+     - da keine 'dest_ids' angegeben sind, waere eine so definierte
+       Haltstelle nur mit den IDs ansprechbar, die in P_HARBOURS im Zielraum
+       angegeben sind.
+
+   Wenn man nun erreichen wollte, dass das Ziel auch mit dem Kuerzel "vland"
+   ansprechbar ist, kann man zum einen explizite 'dest_ids' eintragen:
+     AddRoute(INSEL("steg"), 30, 20, "Verlorene Land ( Orkhausen )",
+              ({"verlorenes", "land", "orkhausen", "vland"}));
+   Dies laesst sich im Zielhafen aber auch durch Eintragen des Kuerzels
+   "vland" in P_HARBOUR erreichen. Dies hat den Vorteil, dass dieser Hafen
+   dann von allen Transportern, die dort anlegen, unter demselben Namen
+   erreicht werden kann.
+
+
+HINWEISE
+========
+
+   Dadurch, dass die Eintraege aus P_HARBOUR und 'dest_ids' gleichberechtigt
+   fuer "reise nach <ziel>" verwendet werden koennen, ist es moeglich,
+   dass die Reiseziele auf einem Schiff unter zusaetzlichen Bezeichnungen
+   bekannt sind, als an Land (zum Beispiel koennte eine fernwestliche
+   Besatzung die Ziele anders nennen).
+
+
+SIEHE AUCH
+==========
+
+Funktionen  AddMsg(L), AddFun(L), /std/transport.c Properties
+P_HARBOUR, P_NO_TRAVELING, P_TRAVEL_INFO
+
 
 2015-Jan-18, Arathorn.
+======================
diff --git a/doc/lfun/AddSingularId b/doc/lfun/AddSingularId
index d956567..c45199e 100644
--- a/doc/lfun/AddSingularId
+++ b/doc/lfun/AddSingularId
@@ -1,27 +1,49 @@
+
 AddSingularId()
+***************
 
-FUNKTION:
-     void AddSingularId(mixed id);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     id
-          Identifikationsstring oder Array von Strings
+   void AddSingularId(mixed id);
 
-BESCHREIBUNG:
-     Es werden ein oder mehrere Bezeichner hinzugefuegt, mit denen sich eine
-     einzelne Einheit ansprechen laesst.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     siehe /items/money.c
+   /std/unit.c
 
-SIEHE AUCH:
-     AddPluralId(), RemoveSingularId(), AddId(), id(), /std/unit.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   id
+        Identifikationsstring oder Array von Strings
+
+
+BESCHREIBUNG
+============
+
+   Es werden ein oder mehrere Bezeichner hinzugefuegt, mit denen sich eine
+   einzelne Einheit ansprechen laesst.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   siehe /items/money.c
+
+
+SIEHE AUCH
+==========
+
+   AddPluralId(), RemoveSingularId(), AddId(), id(), /std/unit.c
+
 Last modified: Mon Jul 14 11:31:00 1997 by Silvana
diff --git a/doc/lfun/AddSmells b/doc/lfun/AddSmells
index 5682f00..2623f98 100644
--- a/doc/lfun/AddSmells
+++ b/doc/lfun/AddSmells
@@ -1,71 +1,92 @@
+
 AddSmells()
+***********
 
-FUNKTION:
-    void AddSmells(string|string* keys, string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    desc
-      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddSmells(string|string* keys, string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
-    koennen hiermit Gerueche realisiert werden:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-      <desc> ist ein String.
-        Beim Untersuchen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-        Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
-      <desc> ist ein Mapping.
-        Das Mapping muss folgenden Aufbau haben:
-          ([0:        "Defaulttext",
-            "rasse1": "r1text", ...]).
 
-        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-        Eintrag im Mapping existiert, wird der entsprechende Text
-        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-        rassenabhaengige Details moeglich. Siehe auch die Beispiele.
-      <desc> ist eine Closure.
-        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-        als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer Geruchsdetails koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-    Gerueche koennen allgemein einen Raum oder Objekt zugeordnet werden:
-    dafuer muss man als <key> SENSE_DEFAULT uebergeben.
-    
-    Spielerkommandos: "riech", "rieche", "schnupper", "schnuppere"
 
-BEISPIELE:
-    Ein kleines Beispiel fuer rassenabhaengige Gerueche mit Closures:
-      string strafe(string key);
-      ...
-      AddSmells(SENSE_DEFAULT,
-        "Der Geruch von Knoblauch ist ueberwaeltigend!\n");
-      AddSmells(({"knoblauch","geruch"}),
-                ([0:        "Puhh, das stinkt!\n",
-                  "vampir": #'strafe]));
-      ...
-      string strafe(string key) {
-        this_player()->reduce_hit_points(100);
-        return "Der Knoblauch schmerzt dich furchtbar!\n";
-      }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   desc
+     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
+   koennen hiermit Gerueche realisiert werden:
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+     <desc> ist ein String.
+       Beim Untersuchen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+       Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
+     <desc> ist ein Mapping.
+       Das Mapping muss folgenden Aufbau haben:
+         ([0:        "Defaulttext",
+           "rasse1": "r1text", ...]).
+
+       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+       Eintrag im Mapping existiert, wird der entsprechende Text
+       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+       rassenabhaengige Details moeglich. Siehe auch die Beispiele.
+     <desc> ist eine Closure.
+       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+       als Parameter uebergeben.
+
+   Fuer Geruchsdetails koennen Forscherpunkte eingetragen werden.
+
+   Gerueche koennen allgemein einen Raum oder Objekt zugeordnet werden:
+   dafuer muss man als <key> SENSE_DEFAULT uebergeben.
+
+
+
+   Spielerkommandos: "riech", "rieche", "schnupper", "schnuppere"
+
+
+BEISPIELE
+=========
+
+   Ein kleines Beispiel fuer rassenabhaengige Gerueche mit Closures:
+     string strafe(string key);
+     ...
+     AddSmells(SENSE_DEFAULT,
+       "Der Geruch von Knoblauch ist ueberwaeltigend!\n");
+     AddSmells(({"knoblauch","geruch"}),
+               ([0:        "Puhh, das stinkt!\n",
+                 "vampir": #'strafe]));
+     ...
+     string strafe(string key) {
+       this_player()->reduce_hit_points(100);
+       return "Der Knoblauch schmerzt dich furchtbar!\n";
+     }
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddSounds b/doc/lfun/AddSounds
index b38389a..b14b976 100644
--- a/doc/lfun/AddSounds
+++ b/doc/lfun/AddSounds
@@ -1,63 +1,82 @@
+
 AddSounds()
+***********
 
-FUNKTION:
-    void AddSounds(string|string* keys, string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    desc
-      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddSounds(string|string* keys, string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
-    koennen hiermit Geraeusche realisiert werden:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-      <desc> ist ein String.
-        Beim Untersuchen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-        Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
-      <desc> ist ein Mapping.
-        Das Mapping muss folgenden Aufbau haben:
-          ([0:        "Defaulttext",
-           "rasse1": "r1text", ...]).
 
-        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-        Eintrag im Mapping existiert, wird der entsprechende Text
-        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-        rassenabhaengige Details moeglich. Siehe auch die Beispiele.
-      <desc> ist eine Closure.
-        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-        als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer Geraeuschdetails koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-    Gerauesche koennen allgemein einen Raum oder Objekt zugeordnet werden:
-    dafuer muss man als <key> SENSE_DEFAULT uebergeben.
 
-    Spielerkommandos: "lausche", "lausch", "hoer", "hoere"
+ARGUMENTE
+=========
 
-BEISPIELE:
-    Ein kleines Beispiel fuer rassenabhaengige Gerauesche
-      AddSounds(SENSE_DEFAULT, "Die Zwergenmusik uebertoent alles!\n");
-      AddSounds(({"zwergenmusik","musik"}),
-                ([0      : "Seltsamer Krach!\n",
-                  "zwerg": "Das klingt einfach fantastisch!\n"]));
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   desc
+     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
+   koennen hiermit Geraeusche realisiert werden:
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+     <desc> ist ein String.
+       Beim Untersuchen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+       Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
+     <desc> ist ein Mapping.
+       Das Mapping muss folgenden Aufbau haben:
+         ([0:        "Defaulttext",
+          "rasse1": "r1text", ...]).
+
+       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+       Eintrag im Mapping existiert, wird der entsprechende Text
+       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+       rassenabhaengige Details moeglich. Siehe auch die Beispiele.
+     <desc> ist eine Closure.
+       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+       als Parameter uebergeben.
+
+   Fuer Geraeuschdetails koennen Forscherpunkte eingetragen werden.
+
+   Gerauesche koennen allgemein einen Raum oder Objekt zugeordnet werden:
+   dafuer muss man als <key> SENSE_DEFAULT uebergeben.
+
+   Spielerkommandos: "lausche", "lausch", "hoer", "hoere"
+
+
+BEISPIELE
+=========
+
+   Ein kleines Beispiel fuer rassenabhaengige Gerauesche
+     AddSounds(SENSE_DEFAULT, "Die Zwergenmusik uebertoent alles!\n");
+     AddSounds(({"zwergenmusik","musik"}),
+               ([0      : "Seltsamer Krach!\n",
+                 "zwerg": "Das klingt einfach fantastisch!\n"]));
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddSpecialDetail b/doc/lfun/AddSpecialDetail
index 90c5543..3405eec 100644
--- a/doc/lfun/AddSpecialDetail
+++ b/doc/lfun/AddSpecialDetail
@@ -1,61 +1,87 @@
-VERALTET: AddSpecialDetail()
 
-FUNKTION:
-    void AddSpecialDetail(string|string* keys, string func);
+AddSpecialDetail()
+******************
 
-DEFINIERT IN:
-    /std/thing/description.c
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den Namen der Details.
-    func
-      String mit dem Namen der Funktion, die zur Auswertung aufgerufen
-      wird.
+VERALTET AddSpecialDetail()
+===========================
 
-BESCHREIBUNG:
-    Es wird ein Detail hinzugefuegt, dessen Inhalt nicht von vornherein
-    feststeht, sondern von aeusseren Bedingungen abhaengt. Zu diesem
-    Zweck wird immer, wenn dieses Detail untersucht wird, die Funktion
-    func aufgerufen, um den aktuellen Zustand des Details zu bestimmen.
-    Der Funktion wird als Parameter das Schluesselwort uebergeben, mit
-    dem das Detail untersucht wurde.
 
-    VERALTET: Bitte AddDetail mit Closure benutzen.
+FUNKTION
+========
 
-BEISPIELE:
-    Ein zustandsabhaengiges Detail:
+   void AddSpecialDetail(string|string* keys, string func);
 
-      int hebel_betaetigt;
-      string hebel(string key);
-      ...
-      // ALT: AddSpecialDetail( ({ "hebel", "schalter" }), "hebel" );
-      AddDetail(({ "hebel", "schalter" }), #'hebel );
-      ...
-      string hebel(string key)
-      { if(hebel_betaetigt)
-          return "Der "+capitalize(key)+" steht auf EIN.\n";
-        else
-          return "Der "+capitalize(key)+" steht auf AUS.\n";
-      }
 
-    Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
-    ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Intern werden Details und SpecialDetails im selben Mapping
-    verwaltet.
-    Man kann statt dieser Funktion deshalb auch AddDetail mit Closures
-    nutzen.
+   /std/thing/description.c
 
-SIEHE AUCH:
-    Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den Namen der Details.
+   func
+     String mit dem Namen der Funktion, die zur Auswertung aufgerufen
+     wird.
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Detail hinzugefuegt, dessen Inhalt nicht von vornherein
+   feststeht, sondern von aeusseren Bedingungen abhaengt. Zu diesem
+   Zweck wird immer, wenn dieses Detail untersucht wird, die Funktion
+   func aufgerufen, um den aktuellen Zustand des Details zu bestimmen.
+   Der Funktion wird als Parameter das Schluesselwort uebergeben, mit
+   dem das Detail untersucht wurde.
+
+   VERALTET: Bitte AddDetail mit Closure benutzen.
+
+
+BEISPIELE
+=========
+
+   Ein zustandsabhaengiges Detail:
+
+     int hebel_betaetigt;
+     string hebel(string key);
+     ...
+     // ALT: AddSpecialDetail( ({ "hebel", "schalter" }), "hebel" );
+     AddDetail(({ "hebel", "schalter" }), #'hebel );
+     ...
+     string hebel(string key)
+     { if(hebel_betaetigt)
+         return "Der "+capitalize(key)+" steht auf EIN.\n";
+       else
+         return "Der "+capitalize(key)+" steht auf AUS.\n";
+     }
+
+   Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
+   ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+
+
+BEMERKUNG
+=========
+
+   Intern werden Details und SpecialDetails im selben Mapping
+   verwaltet.
+   Man kann statt dieser Funktion deshalb auch AddDetail mit Closures
+   nutzen.
+
+
+SIEHE AUCH
+==========
+
+   Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AddSpecialExit b/doc/lfun/AddSpecialExit
index b6b54bb..2f16c17 100644
--- a/doc/lfun/AddSpecialExit
+++ b/doc/lfun/AddSpecialExit
@@ -1,58 +1,82 @@
+
 AddSpecialExit()
-FUNKTION:
-     void AddSpecialExit(string|string* cmd, string|closure func);
+****************
 
-DEFINIERT IN:
-     /std/room/exits
 
-ARGUMENTE:
-     string/string* cmd
-          die Richtung(en), in die der Ausgang fuehrt
-     string/closure func
-          der Name der aufzurufenden Funktion/Closure
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Wird der
-     Ausgang benutzt, so wird die Closure bzw. Funktion func ausgefuehrt.
+   void AddSpecialExit(string|string* cmd, string|closure func);
 
-     AddSpecialExit(cmd, "func") entspricht:
-     - AddExit(keys, #'func)
 
-BEMERKUNGEN:
-     In func muss man den Spieler selbst in den Zielraum bewegen. Im
-     Erfolgsfall sollte man einen Wert >0 zurueckgeben, im Fehlerfall einen
-     Wert <=0.
+DEFINIERT IN
+============
 
-     func bekommt als Parameter einen String mit der gewaehlten
-     Bewegungsrichtung uebergeben.
+   /std/room/exits
 
-BEISPIELE:
-     // ein Ausgang soll nur von Froeschen benutzbar sein:
 
-     AddSpecialExit("loch", "lochfkt");
-     // der gleiche Aufruf, nur anders:
-     // static int lochfkt(string dir);		// Prototyp
-     // ...
-     // AddSpecialExit("loch", #'lochfkt);
-     // auch identisch zu:
-     // AddExit("loch", #'lochfkt);
+ARGUMENTE
+=========
 
-     static int lochfkt(string dir) {
-       if (!(this_player()->QueryProp(P_FROG))) {
-         // Kein Frosch => passt nicht!
-         notify_fail("Du bist zu gross!\n");
-         return 0;
-       }
-       // Meldungen werden im move() gleich mitgegeben
-       return this_player()->move("/room/loch", M_GO, 0,
-                    "huepft ins Loch", "huepft herein");
+   string/string* cmd
+        die Richtung(en), in die der Ausgang fuehrt
+   string/closure func
+        der Name der aufzurufenden Funktion/Closure
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Wird der
+   Ausgang benutzt, so wird die Closure bzw. Funktion func ausgefuehrt.
+
+   AddSpecialExit(cmd, "func") entspricht:
+   - AddExit(keys, #'func)
+
+
+BEMERKUNGEN
+===========
+
+   In func muss man den Spieler selbst in den Zielraum bewegen. Im
+   Erfolgsfall sollte man einen Wert >0 zurueckgeben, im Fehlerfall einen
+   Wert <=0.
+
+   func bekommt als Parameter einen String mit der gewaehlten
+   Bewegungsrichtung uebergeben.
+
+
+BEISPIELE
+=========
+
+   // ein Ausgang soll nur von Froeschen benutzbar sein:
+
+   AddSpecialExit("loch", "lochfkt");
+   // der gleiche Aufruf, nur anders:
+   // static int lochfkt(string dir);         // Prototyp
+   // ...
+   // AddSpecialExit("loch", #'lochfkt);
+   // auch identisch zu:
+   // AddExit("loch", #'lochfkt);
+
+   static int lochfkt(string dir) {
+     if (!(this_player()->QueryProp(P_FROG))) {
+       // Kein Frosch => passt nicht!
+       notify_fail("Du bist zu gross!\n");
+       return 0;
      }
+     // Meldungen werden im move() gleich mitgegeben
+     return this_player()->move("/room/loch", M_GO, 0,
+                  "huepft ins Loch", "huepft herein");
+   }
 
-SIEHE AUCH:
-     AddExit(), GetExits(),
-     RemoveExit(), RemoveSpecialExit(),
-     GuardExit(),
-     H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+
+SIEHE AUCH
+==========
+
+   AddExit(), GetExits(),
+   RemoveExit(), RemoveSpecialExit(),
+   GuardExit(),
+   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/AddSpecialInfo b/doc/lfun/AddSpecialInfo
index 735983f..efc3067 100644
--- a/doc/lfun/AddSpecialInfo
+++ b/doc/lfun/AddSpecialInfo
@@ -1,64 +1,88 @@
+
 AddSpecialInfo()
-FUNKTION:
-     varargs void AddSpecialInfo( frage, meldung
-			   [, indent [, [silent [, casebased] ] ] );
+****************
 
-ARGUMENTE:
-     string/string* frage
-	Schluesseltext(e) auf die Informationen gegeben werden sollen.
-     string/closure function
-	Methodenname im NPC/Closure
-     string indent
-	Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
-     int/string silent
-	Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
-     string/closure casebased
-	Funktionsname oder Closure mit Returnwert string oder int.
 
-DEFINIERT IN:
-     /std/npc/info.c
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
-     einer Information mit dem Schluessel frage fragt, so wird die Methode
-     "function" gerufen. Die Rueckgabe wird als Meldung ausgegeben.
+   varargs void AddSpecialInfo( frage, meldung
+                         [, indent [, [silent [, casebased] ] ] );
 
-     Fuer die Beschreibung der weiteren Parameter siehe man AddInfo(L).
 
-     AddSpecialInfo(keys, "function", ...) entspricht:
-     - AddInfo(keys, #'function, ...) 
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     Da AddSpecialInfo() und AddInfo() auf die gleichen Daten zugreifen,
-     kann man Informationen, die mit AddSpecialInfo() gesetzt wurden, auch
-     mit RemoveInfo() entfernen. Es gibt kein RemoveSpecialInfo().
+   string/string* frage
+      Schluesseltext(e) auf die Informationen gegeben werden sollen.
+   string/closure function
+      Methodenname im NPC/Closure
+   string indent
+      Text, der sich bei mehrzeiligen Meldungen wiederholen soll.
+   int/string silent
+      Ist silent gesetzt, so erfolgt Antwort nur an Fragenden.
+   string/closure casebased
+      Funktionsname oder Closure mit Returnwert string oder int.
 
-BEISPIELE:
-     // Das folgende Beispiel ist auch unter man AddInfo(L) zu finden.
-     ### dynamisch ###
-     AddSpecialInfo(({"keks","kekse"}),
-		    "query_kekse",	// der Methodenname
-		    "sagt: ");
-     // ist uebrigens das gleiche wie:
-     // static string query_kekse();
-     // ...
-     // AddInfo(({"keks","kekse"}),
-     //		#'query_kekse,		// ein Verweis auf die Methode
-     //		"sagt: ");
-     ...
-     static string query_kekse() {
-      if(present("keks"))
-       return("Ich hab noch welche. Aetsch!");
-      return("Menno. Keine mehr da!");
-     }
 
-     // "frage monster nach keks":
-     // - wenn es noch Kekse hat, hoeren alle:
-     //   "Das Monster sagt: Ich hab noch welche. Aetsch!
-     // - sonst:
-     //   "Das Monster sagt: "Menno. Keine mehr da!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddInfo(L), RemoveInfo(L)
+   /std/npc/info.c
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Spieler ein NPC mittels "frage <monstername> nach <frage>" nach
+   einer Information mit dem Schluessel frage fragt, so wird die Methode
+   "function" gerufen. Die Rueckgabe wird als Meldung ausgegeben.
+
+   Fuer die Beschreibung der weiteren Parameter siehe man AddInfo(L).
+
+   AddSpecialInfo(keys, "function", ...) entspricht:
+   - AddInfo(keys, #'function, ...)
+
+
+BEMERKUNGEN
+===========
+
+   Da AddSpecialInfo() und AddInfo() auf die gleichen Daten zugreifen,
+   kann man Informationen, die mit AddSpecialInfo() gesetzt wurden, auch
+   mit RemoveInfo() entfernen. Es gibt kein RemoveSpecialInfo().
+
+
+BEISPIELE
+=========
+
+   // Das folgende Beispiel ist auch unter man AddInfo(L) zu finden.
+   ### dynamisch ###
+   AddSpecialInfo(({"keks","kekse"}),
+                  "query_kekse",      // der Methodenname
+                  "sagt: ");
+   // ist uebrigens das gleiche wie:
+   // static string query_kekse();
+   // ...
+   // AddInfo(({"keks","kekse"}),
+   //         #'query_kekse,          // ein Verweis auf die Methode
+   //         "sagt: ");
+   ...
+   static string query_kekse() {
+    if(present("keks"))
+     return("Ich hab noch welche. Aetsch!");
+    return("Menno. Keine mehr da!");
+   }
+
+   // "frage monster nach keks":
+   // - wenn es noch Kekse hat, hoeren alle:
+   //   "Das Monster sagt: Ich hab noch welche. Aetsch!
+   // - sonst:
+   //   "Das Monster sagt: "Menno. Keine mehr da!
+
+
+SIEHE AUCH
+==========
+
+   AddInfo(L), RemoveInfo(L)
 
 7.Apr 2004 Gloinson
diff --git a/doc/lfun/AddSpell b/doc/lfun/AddSpell
index 3ec1bf8..1661f8c 100644
--- a/doc/lfun/AddSpell
+++ b/doc/lfun/AddSpell
@@ -1,150 +1,173 @@
+
 AddSpell()
+**********
 
-FUNKTION:
-    varargs int AddSpell(int rate, int damage, string TextForEnemy,
-                         string TextForOthers, string|string* dam_type,
-                         string|closure func, int|mapping spellarg)
 
-DEFINIERT IN:
-    /std/npc/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-    rate          - Relative Haeufigkeit der Anwendung (*),
-                    muss >= 0 sein
-    damage        - Der Schadenswert fuer Defend(),
-                    muss > 0 sein
-    TextForEnemy  - Text, den der Feind erhalten soll
-    TextForOthers - Text, den andere im Raum erhalten sollen
-    dam_type      - Schadenstyp(en) fuer Defend(),
-                    (Default: ({DT_MAGIC}) )
-    func          - Funktionsname oder Closure, die nach Anwendung
-                    aufgerufen werden soll
-                    (Optional, bekommt als Argumente object enemy, 
-                    int real_damage, string* dam_type)
-    spellarg      - Spell-Argument fuer Defend(), Default ist "1"
+   varargs int AddSpell(int rate, int damage, string TextForEnemy,
+                        string TextForOthers, string|string* dam_type,
+                        string|closure func, int|mapping spellarg)
 
-BESCHREIBUNG:
-    Ermoeglicht einfache Angriffs-Zaubersprueche fuer NPCs. Das Ausfuehren von
-    Spells verursacht bei dem NPC keine KP-Kosten.
 
-    Mit P_SPELLRATE wird die generelle Wahrscheinlichkeit der Ausfuehrung
-    solcher Spells im Heartbeat angegeben, mit 'rate' kann man die relative
-    Wahrscheinlichkeit der Spells untereinander steuern.
+DEFINIERT IN
+============
 
-    (*) Relative Haeufigkeit heisst, dass sich alle 'rate' der Spells
-    aufaddieren und ein einzelnes 'rate' dann in Relation zur Gesamtsumme
-    steht. D.h. drei Spells mit 80, 10, 10 (Summe 100) haben die selben
-    Aufruf-Wahrscheinlichkeiten wie drei Spells mit 120, 15, 15 oder drei
-    Spells mit 160, 20, 20.
+   /std/npc/combat.c
 
-    Ein Spell wird immer in folgender Reihenfolge abgearbeitet:
-     1. Die Texte werden an die Beteiligten ausgegeben.
-     2. Es wird ggf. SpellDefend gerufen (wenn kein SP_PHYSICAL_ATTACK).
-        Abbruch bei Schutz.
-     3. Im Opfer wird Defend() mit den angegebenen Werten aufgerufen.
-        Abbruch bei Tod/Zerstoerung des Opfers.
-     4. Eine Funktion, so definiert, wird ausgefuehrt.
 
-BEMERKUNGEN:
-    TextForOthers wird vor der Ausgabe der Meldung durch replace_personal()
-    geschickt, d.h. es koennen Platzhalter wie @WER1, @WEMQP1 und aehnliche
-    verwendet werden (siehe auch die Manpage von replace_personal()).
-    Da Ersetzungen nur fuer das Gegnerobjekt beruecksichtigt werden, koennen
-    nur Platzhalter mit Endziffer 1 verwendet werden. Die Ersetzungen werden
-    so gesteuert, dass die eingefuegten Namen nach Satzanfaengen automatisch
-    gross geschrieben werden.
-    Frueher wurden statt replace_personal() die Platzhalter @WER, @WESSEN, 
-    @WEM, @WEN verwendet. Diese funktionieren weiterhin, sollten aber nicht 
-    mehr in neuem Code benutzt werden.
+ARGUMENTE
+=========
 
-    In der von AddSpell gerufenen Methode "func" koennen speziellere
-    Sachen mit dem aktuellen Feind angestellt werden koennen. Die Methode
-    muss im selben Objekt definiert sein, sofern der Funktionsname und
-    keine Closure uebergeben wird.
+   rate          - Relative Haeufigkeit der Anwendung (*),
+                   muss >= 0 sein
+   damage        - Der Schadenswert fuer Defend(),
+                   muss > 0 sein
+   TextForEnemy  - Text, den der Feind erhalten soll
+   TextForOthers - Text, den andere im Raum erhalten sollen
+   dam_type      - Schadenstyp(en) fuer Defend(),
+                   (Default: ({DT_MAGIC}) )
+   func          - Funktionsname oder Closure, die nach Anwendung
+                   aufgerufen werden soll
+                   (Optional, bekommt als Argumente object enemy,
+                   int real_damage, string* dam_type)
+   spellarg      - Spell-Argument fuer Defend(), Default ist "1"
 
-    Will man einen physischen Angriff ausloesen, MUSS <spellarg> ein Mapping
-    mit ([SP_PHYSICAL_ATTACK: 1]) sein. Bei Uebergeben einer 0 oder Weglassen
-    des Werts wird an Defend das Default '1' (da es Spells sind) uebergeben.
 
-    Wenn damage<=0 oder rate<0 oder keine Meldungen uebergeben werden, wird
-    der Spell NICHT eingetragen, sondern die Funktion bricht mit Rueckgabe
-    von 0 ab.
+BESCHREIBUNG
+============
 
-BEISPIELE:
-    // #1 Einfacher NPC mit drei Spells, Gesamtrate = 100, also sind die
-    //    Raten direkt als Prozent Aufrufwahrscheinlichkeit lesbar.
-    AddSpell(80, 400,
-             "Der Hexer greift Dich mit einem kleinen Feuerball an.\n",
-             "Der Hexer greift @WEN mit einem kleinen Feuerball an.\n",
-             ({DT_FIRE, DT_MAGIC}));
-    AddSpell(10, 800,
-             "Der Hexer greift Dich mit einem riesigen Feuerball an.\n",
-             "Der Hexer greift @WEN mit einem riesigen Feuerball an.\n",
-             ({DT_FIRE, DT_MAGIC}));
-    AddSpell(8, 100,
-             "Der Hexer piekst Dir in die Augen!",
-             "Der Hexer piekst @WEM in die Augen!", ({DT_PIERCE}),
-             "augen_stechen");
-    AddSpell(2, 5, (string)0, (string)0, (string*)0, "salto_mortalis");
+   Ermoeglicht einfache Angriffs-Zaubersprueche fuer NPCs. Das Ausfuehren von
+   Spells verursacht bei dem NPC keine KP-Kosten.
 
-    (Kleiner Feuerball mit 80% Wahrscheinlichkeit, riesiger mit 10%,
-     "augen_stechen" mit 8%, "salto_mortalis" mit 2%)
+   Mit P_SPELLRATE wird die generelle Wahrscheinlichkeit der Ausfuehrung
+   solcher Spells im Heartbeat angegeben, mit 'rate' kann man die relative
+   Wahrscheinlichkeit der Spells untereinander steuern.
 
-    // Die Funktion "augen_stechen" kann dann so aussehen:
-    void augen_stechen(object enemy, int damage, mixed dam_types ) {
-      if (damage>10 && !enemy->QueryProp(P_BLIND)) {
-        enemy->SetProp(P_BLIND, 1);
-        if(enemy->QueryProp(P_BLIND))
-          tell_object(enemy, "Du bist nun blind!\n");
-      }
-    }
+   (*) Relative Haeufigkeit heisst, dass sich alle 'rate' der Spells
+   aufaddieren und ein einzelnes 'rate' dann in Relation zur Gesamtsumme
+   steht. D.h. drei Spells mit 80, 10, 10 (Summe 100) haben die selben
+   Aufruf-Wahrscheinlichkeiten wie drei Spells mit 120, 15, 15 oder drei
+   Spells mit 160, 20, 20.
 
-    // Zur Funktion "salto_mortalis" gibt es keine Meldungen, dennoch
-    // wird Defend mit: enemy->Defend(5, ({DT_MAGIC}), 1, this_object())
-    // gerufen!
-    void salto_mortalis(object enemy, int damage, mixed dam_types ) {
-      // dem geneigten Leser ueberlassen, den Gegner zu toeten
-    }
+   Ein Spell wird immer in folgender Reihenfolge abgearbeitet:
+    1. Die Texte werden an die Beteiligten ausgegeben.
+    2. Es wird ggf. SpellDefend gerufen (wenn kein SP_PHYSICAL_ATTACK).
+       Abbruch bei Schutz.
+    3. Im Opfer wird Defend() mit den angegebenen Werten aufgerufen.
+       Abbruch bei Tod/Zerstoerung des Opfers.
+    4. Eine Funktion, so definiert, wird ausgefuehrt.
 
-    // #2 Physische Angriffe: die Ruestungen sollen beruecksichtigt werden!
-    //    SP_PHYSICAL_ATTACK muss in einem Mapping auf 1 gesetzt werden,
-    //    damit Ruestungen physisch wirken (ansonsten werden nur ihre
-    //    DefendFuncs() ausgewertet). Es muss auch eine physische Schadensart
-    //    enthalten sein!
-    //    SpellDefend() wird bei diesem Flag nicht mehr am Gegner gerufen.
-    AddSpell(100, 200+random(200),
-      "Die kleine Ratte beisst Dich!\n",
-      "@WER wird von einer kleinen Ratte gebissen!\n",
-      ({DT_PIERCE, DT_POISON}), (string)0,
-      ([SP_PHYSICAL_ATTACK:1]));
 
-    // #3 Selektive physische Angriffe (siehe auch man Defend_bsp):
-    //    Will man erreichen, dass einige Ruestungen wirken, andere aber
-    //    nicht oder nur teilweise, kann man das ueber die Spellparameter
-    //    ausfuehrlich steuern:
+BEMERKUNGEN
+===========
 
-    // erstmal fuer alle Ruestungsarten einen Schutz von 0% einstellen:
-    mapping armours = map_indices(VALID_ARMOUR_CLASS, #'!);
-    armours[AT_TROUSERS] = 120;  // 120% Schutz durch Hosen
-    armours[AT_BOOT] = 30;       //  30% Schutz durch Stiefel
+   TextForOthers wird vor der Ausgabe der Meldung durch replace_personal()
+   geschickt, d.h. es koennen Platzhalter wie @WER1, @WEMQP1 und aehnliche
+   verwendet werden (siehe auch die Manpage von replace_personal()).
+   Da Ersetzungen nur fuer das Gegnerobjekt beruecksichtigt werden, koennen
+   nur Platzhalter mit Endziffer 1 verwendet werden. Die Ersetzungen werden
+   so gesteuert, dass die eingefuegten Namen nach Satzanfaengen automatisch
+   gross geschrieben werden.
+   Frueher wurden statt replace_personal() die Platzhalter @WER, @WESSEN,
+   @WEM, @WEN verwendet. Diese funktionieren weiterhin, sollten aber nicht
+   mehr in neuem Code benutzt werden.
 
-    AddSpell(20,200+random(200),
-      "Die kleine Ratte beisst Dir blitzschnell in die Wade!\n",
-      "@WER wird von einer kleinen Ratte in die Wade gebissen!\n",
-      ({DT_PIERCE, DT_POISON}), (string)0,
-      ([SP_PHYSICAL_ATTACK:1, SP_NO_ACTIVE_DEFENSE:1,
-        SP_REDUCE_ARMOUR: armours]));
+   In der von AddSpell gerufenen Methode "func" koennen speziellere
+   Sachen mit dem aktuellen Feind angestellt werden koennen. Die Methode
+   muss im selben Objekt definiert sein, sofern der Funktionsname und
+   keine Closure uebergeben wird.
 
-    // SP_NO_ACTIVE_DEFENSE = 1 schaltet aktive Abwehr (Karate/Klerus) ab
-    // SP_REDUCE_ARMOUR enthaelt eine Liste von Ruestungstypen mit ihren
-    // neuen Wirkungsgraden in Prozent. Nicht enthaltene Ruestungen haben
-    // weiterhin 100% Schutzwirkung.
+   Will man einen physischen Angriff ausloesen, MUSS <spellarg> ein Mapping
+   mit ([SP_PHYSICAL_ATTACK: 1]) sein. Bei Uebergeben einer 0 oder Weglassen
+   des Werts wird an Defend das Default '1' (da es Spells sind) uebergeben.
 
-SIEHE AUCH:
-     Sonstiges:  SpellAttack, SpellDefend, Defend, QueryDefend, SelectEnemy
-                 replace_personal
-     Properties: P_DISABLE_ATTACK, P_SPELLRATE, P_AGGRESSIVE
-     Abwehr:     Defend, Defend_bsp, SpellDefend
-     Methoden:   modifiers
+   Wenn damage<=0 oder rate<0 oder keine Meldungen uebergeben werden, wird
+   der Spell NICHT eingetragen, sondern die Funktion bricht mit Rueckgabe
+   von 0 ab.
+
+
+BEISPIELE
+=========
+
+   // #1 Einfacher NPC mit drei Spells, Gesamtrate = 100, also sind die
+   //    Raten direkt als Prozent Aufrufwahrscheinlichkeit lesbar.
+   AddSpell(80, 400,
+            "Der Hexer greift Dich mit einem kleinen Feuerball an.\n",
+            "Der Hexer greift @WEN mit einem kleinen Feuerball an.\n",
+            ({DT_FIRE, DT_MAGIC}));
+   AddSpell(10, 800,
+            "Der Hexer greift Dich mit einem riesigen Feuerball an.\n",
+            "Der Hexer greift @WEN mit einem riesigen Feuerball an.\n",
+            ({DT_FIRE, DT_MAGIC}));
+   AddSpell(8, 100,
+            "Der Hexer piekst Dir in die Augen!",
+            "Der Hexer piekst @WEM in die Augen!", ({DT_PIERCE}),
+            "augen_stechen");
+   AddSpell(2, 5, (string)0, (string)0, (string*)0, "salto_mortalis");
+
+   (Kleiner Feuerball mit 80% Wahrscheinlichkeit, riesiger mit 10%,
+    "augen_stechen" mit 8%, "salto_mortalis" mit 2%)
+
+   // Die Funktion "augen_stechen" kann dann so aussehen:
+   void augen_stechen(object enemy, int damage, mixed dam_types ) {
+     if (damage>10 && !enemy->QueryProp(P_BLIND)) {
+       enemy->SetProp(P_BLIND, 1);
+       if(enemy->QueryProp(P_BLIND))
+         tell_object(enemy, "Du bist nun blind!\n");
+     }
+   }
+
+   // Zur Funktion "salto_mortalis" gibt es keine Meldungen, dennoch
+   // wird Defend mit: enemy->Defend(5, ({DT_MAGIC}), 1, this_object())
+   // gerufen!
+   void salto_mortalis(object enemy, int damage, mixed dam_types ) {
+     // dem geneigten Leser ueberlassen, den Gegner zu toeten
+   }
+
+   // #2 Physische Angriffe: die Ruestungen sollen beruecksichtigt werden!
+   //    SP_PHYSICAL_ATTACK muss in einem Mapping auf 1 gesetzt werden,
+   //    damit Ruestungen physisch wirken (ansonsten werden nur ihre
+   //    DefendFuncs() ausgewertet). Es muss auch eine physische Schadensart
+   //    enthalten sein!
+   //    SpellDefend() wird bei diesem Flag nicht mehr am Gegner gerufen.
+   AddSpell(100, 200+random(200),
+     "Die kleine Ratte beisst Dich!\n",
+     "@WER wird von einer kleinen Ratte gebissen!\n",
+     ({DT_PIERCE, DT_POISON}), (string)0,
+     ([SP_PHYSICAL_ATTACK:1]));
+
+   // #3 Selektive physische Angriffe (siehe auch man Defend_bsp):
+   //    Will man erreichen, dass einige Ruestungen wirken, andere aber
+   //    nicht oder nur teilweise, kann man das ueber die Spellparameter
+   //    ausfuehrlich steuern:
+
+   // erstmal fuer alle Ruestungsarten einen Schutz von 0% einstellen:
+   mapping armours = map_indices(VALID_ARMOUR_CLASS, #'!);
+   armours[AT_TROUSERS] = 120;  // 120% Schutz durch Hosen
+   armours[AT_BOOT] = 30;       //  30% Schutz durch Stiefel
+
+   AddSpell(20,200+random(200),
+     "Die kleine Ratte beisst Dir blitzschnell in die Wade!\n",
+     "@WER wird von einer kleinen Ratte in die Wade gebissen!\n",
+     ({DT_PIERCE, DT_POISON}), (string)0,
+     ([SP_PHYSICAL_ATTACK:1, SP_NO_ACTIVE_DEFENSE:1,
+       SP_REDUCE_ARMOUR: armours]));
+
+   // SP_NO_ACTIVE_DEFENSE = 1 schaltet aktive Abwehr (Karate/Klerus) ab
+   // SP_REDUCE_ARMOUR enthaelt eine Liste von Ruestungstypen mit ihren
+   // neuen Wirkungsgraden in Prozent. Nicht enthaltene Ruestungen haben
+   // weiterhin 100% Schutzwirkung.
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges:  SpellAttack, SpellDefend, Defend, QueryDefend, SelectEnemy
+               replace_personal
+   Properties: P_DISABLE_ATTACK, P_SPELLRATE, P_AGGRESSIVE
+   Abwehr:     Defend, Defend_bsp, SpellDefend
+   Methoden:   modifiers
 
 Zuletzt geaendert: 20.11.2016, Bugfix
diff --git a/doc/lfun/AddToMenu b/doc/lfun/AddToMenu
index 7ceacbb..01d46b6 100644
--- a/doc/lfun/AddToMenu
+++ b/doc/lfun/AddToMenu
@@ -1,240 +1,271 @@
+
 AddToMenu()
+***********
 
-FUNKTION:
-        varargs string AddToMenu(string  menuetext,
-                                 mixed   ids,
-                                 mapping minfo,
-                                 mixed   rate,
-                                 mixed   msg,
-                                 mixed   refresh,
-                                 mixed   delay,
-                                 mixed   d_msg);
 
-DEFINIERT IN:
-        /std/pub.c
+FUNKTION
+========
 
-ARGUMENTE:
-        Die Erlaeuterung der Parameter beschraenkt sich im Folgenden
-        zunaechst auf die Grundfunktionalitaet bei Verwendung fester
-        Werte. Die Moeglichkeiten zur Realisierung dynamischen Verhaltens
-        sind in den Fussnoten zu den einzelnen Parametern beschrieben.
+   varargs string AddToMenu(string  menuetext,
+                            mixed   ids,
+                            mapping minfo,
+                            mixed   rate,
+                            mixed   msg,
+                            mixed   refresh,
+                            mixed   delay,
+                            mixed   d_msg);
 
-        menuetext
-          Der Text steht als kurze Beschreibung im Menue.
-        ids
-          String oder Array von Strings, mit denen sich die Speise bzw. das
-          Getraenk beim Bestellen ansprechen laesst.
-        minfo
-          Mapping mit Eintraegen fuer:
-          P_HP      LP-Heilung in Punkten [*]
-          P_SP      KP-Heilung in Punkten [*]
-          P_FOOD    Saettigungswirkung der Speise [*]
-          P_DRINK   Saettigungswirkung des Getraenks [*]
-          P_ALCOHOL Alkoholgehalt des Getraenks [*]
-          P_VALUE   Preis der Speise bzw. des Getraenks [*]
-        rate [*]
-          Heilrate in Punkten pro HeartBeat.
-        msg [**]
-          Meldung beim Essen:
-          Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
-          Verfuegbare Platzhalter sind weiter unten im Abschnitt "Beispiel"
-          dokumentiert.
-        refresh
-          Mapping mit Eintraegen fuer:
-            PR_USER (Kontingent fuer einzelnen Spieler) [*]
-            PR_ALL  (Zusatzkontingent fuer alle) [*]
-          Alternativ: 0 fuer unbegrenzte Verfuegbarkeit
-          Einem Key muessen dabei zwei Werte zugeordnet werden:
-          Der Erste gibt die Hoehe des Kontingents an, der Zweite legt
-          fest, alle wieviel reset()s das Kontingent wieder aufgefuellt
-          wird.
-          Verwendung des Mappings erfordert Inkludieren von pub.h.
-        delay [*]
-          Zahl der Sekunden, um die verzoegert die Heilung eintritt,
-          z.B. weil das Essen erst zubereitet werden muss.
-        d_msg [**]
-          Meldung beim Bestellen, falls die Heilung verzoegert wird
-          Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
 
-          
-        [*] Dieser Parameter kann statt eines festen Zahlenwerts mit 
-            folgenden Werten gefuellt werden:
+DEFINIERT IN
+============
 
-            1) Mapping <racemodifier> der Form:
-                   ([ 0 : <standardwert> ,
-                    <rasse_1> : <wert_1>, 
-                    ... , 
-                    <rasse_n> : <wert_n> ]).
-               Die Eintraege in diesem Mapping werden gegen die Rasse des
-               bestellenden Spielers geprueft und entsprechend die 
-               zugehoerigen Werte verwendet.
-            2) string <func>: Aufruf erfolgt mittels 
-                 call_other(this_object(), func, empfaenger);
-               gerufen (aber: siehe Hinweise).
-            3) closure <func>: Aufruf erfolgt mittels
-                 funcall(func, empfaenger);
-            4) Array der Form  ({string <obj>, string <func>}) oder
-                               ({object <obj>, string <func>})
-               Aufruf erfolgt mittels
-                 call_other(obj, func, empfaenger);
-               (aber: siehe Hinweise). <obj> ist folglich als Objektpointer 
-               oder dessen object_name() anzugeben. <func> wird mittels 
-               function_exists() auf Existenz ueberprueft.
+   /std/pub.c
 
-               HINWEISE: im Falle von Lieferverzoegerung ("delay") und
-               Preis (P_VALUE) wird bei allen Funktionsaufrufen NICHT der 
-               Empfaenger, sondern der Zahler uebergeben.
-               Im Falle der Kontingent-Liste ("refresh") kann nur die
-               verfuegbare Menge modifiziert werden, nicht die Zeit
-               bis zum Wieder-Auffuellen.
 
-        [**] Zur Erzeugung variabler Meldungen koennen folgende Werte
-             eingetragen werden:
+ARGUMENTE
+=========
 
-             1) closure <func>: Aufruf erfolgt mittels 
-                  funcall(func, zahler, empfaenger, ident, minfo);
-             2) string <func>: Aufruf erfolgt mittels
-                  call_other(this_object(), func, zahler, empfaenger, 
-                             ident, minfo);
-             <func> bekommt Zahler und Empfaenger als Objektpointer,
-             ident als String und minfo als Mapping mit den 
-             jeweiligen Heilwerten uebergeben. minfo entspricht hierbei
-             den Daten, die als dritter Parameter an AddToMenu()
-             uebergeben wurden.
-             HINWEIS: wenn in das minfo-Mapping keine int-Festwerte 
-             eingetragen wurden, werden diese gemaess den Regeln unter [*]
-             geprueft; Funktionen/Closures werden ggf. ausgewertet und 
-             deren Rueckgabewerte an die Funktion <func> uebergeben.
-             WICHTIG: Die Rueckgabewerte der Funktion werden nicht 
-             ausgewertet. Jeder, der anstatt einer Meldung einen 
-             Funktionsaufruf programmiert, muss fuer die Ausgabe der
-             Meldungen selbst sorgen.
-                   
-BESCHREIBUNG:
-        Mit dieser Funktion werden Speisen oder Getraenke in die Karte
-        von Kneipen und Restaurants eingefuegt.
+   Die Erlaeuterung der Parameter beschraenkt sich im Folgenden
+   zunaechst auf die Grundfunktionalitaet bei Verwendung fester
+   Werte. Die Moeglichkeiten zur Realisierung dynamischen Verhaltens
+   sind in den Fussnoten zu den einzelnen Parametern beschrieben.
 
-RUECKGABEWERT:
-        Rueckgabewert ist ein String "menuentry%d", wobei %d eine Nummer
-        ist, die darueber Auskunft gibt, den wievielten Eintrag in die
-        interne Karte der Kneipe diese Speise bzw. dieses Getraenk
-        darstellt. Im Prinzip handelt es sich bei dem String um einen Key
-        fuer ein Mapping, in dem die Speisen bzw. Getraenke gespeichert
-        sind.
+   menuetext
+     Der Text steht als kurze Beschreibung im Menue.
+   ids
+     String oder Array von Strings, mit denen sich die Speise bzw. das
+     Getraenk beim Bestellen ansprechen laesst.
+   minfo
+     Mapping mit Eintraegen fuer:
+     P_HP      LP-Heilung in Punkten [*]
+     P_SP      KP-Heilung in Punkten [*]
+     P_FOOD    Saettigungswirkung der Speise [*]
+     P_DRINK   Saettigungswirkung des Getraenks [*]
+     P_ALCOHOL Alkoholgehalt des Getraenks [*]
+     P_VALUE   Preis der Speise bzw. des Getraenks [*]
+   rate [*]
+     Heilrate in Punkten pro HeartBeat.
+   msg [**]
+     Meldung beim Essen:
+     Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
+     Verfuegbare Platzhalter sind weiter unten im Abschnitt "Beispiel"
+     dokumentiert.
+   refresh
+     Mapping mit Eintraegen fuer:
+       PR_USER (Kontingent fuer einzelnen Spieler) [*]
+       PR_ALL  (Zusatzkontingent fuer alle) [*]
+     Alternativ: 0 fuer unbegrenzte Verfuegbarkeit
+     Einem Key muessen dabei zwei Werte zugeordnet werden:
+     Der Erste gibt die Hoehe des Kontingents an, der Zweite legt
+     fest, alle wieviel reset()s das Kontingent wieder aufgefuellt
+     wird.
+     Verwendung des Mappings erfordert Inkludieren von pub.h.
+   delay [*]
+     Zahl der Sekunden, um die verzoegert die Heilung eintritt,
+     z.B. weil das Essen erst zubereitet werden muss.
+   d_msg [**]
+     Meldung beim Bestellen, falls die Heilung verzoegert wird
+     Array mit 2 Strings: (1) fuer Empfaenger, (2) fuer Andere.
 
-BEMERKUNGEN:
-        Die aelteren Funktionen 'AddDrink' bzw. 'AddFood' werden zwar mithilfe
-        dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
-        simuliert, sollen aber nicht mehr eingesetzt werden.
-        
-        Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
-        sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
-        
-        Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
-        'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
-        checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
-        so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler
-        verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen
-        Werten sind durch Balance-EM zu genehmigen.
 
-BEISPIEL:
 
-        include <pub.h>
+   [*] Dieser Parameter kann statt eines festen Zahlenwerts mit
+       folgenden Werten gefuellt werden:
 
-        create()
-        {
-        AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
-        ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
-        ({"Du isst die Keule mit einem schlechten Gewissen.",
-          "@WER1 isst die Keule mit einem schlechten Gewissen."}),
-        ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
-        ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
-          "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
-          "wohl ein Tippfehler auf der Karte gewesen sein.",
-          "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-          "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
-        }
+       1) Mapping <racemodifier> der Form:
+              ([ 0 : <standardwert> ,
+               <rasse_1> : <wert_1>,
+               ... ,
+               <rasse_n> : <wert_n> ]).
+          Die Eintraege in diesem Mapping werden gegen die Rasse des
+          bestellenden Spielers geprueft und entsprechend die
+          zugehoerigen Werte verwendet.
+       2) string <func>: Aufruf erfolgt mittels
+            call_other(this_object(), func, empfaenger);
+          gerufen (aber: siehe Hinweise).
+       3) closure <func>: Aufruf erfolgt mittels
+            funcall(func, empfaenger);
+       4) Array der Form  ({string <obj>, string <func>}) oder
+                          ({object <obj>, string <func>})
+          Aufruf erfolgt mittels
+            call_other(obj, func, empfaenger);
+          (aber: siehe Hinweise). <obj> ist folglich als Objektpointer
+          oder dessen object_name() anzugeben. <func> wird mittels
+          function_exists() auf Existenz ueberprueft.
 
-        1) Name der Speise (des Getraenks) auf der Karte (bei menue).
+          HINWEISE: im Falle von Lieferverzoegerung ("delay") und
+          Preis (P_VALUE) wird bei allen Funktionsaufrufen NICHT der
+          Empfaenger, sondern der Zahler uebergeben.
+          Im Falle der Kontingent-Liste ("refresh") kann nur die
+          verfuegbare Menge modifiziert werden, nicht die Zeit
+          bis zum Wieder-Auffuellen.
 
-           AddToMenu("'Opa's Drachenkeule'",     
+   [**] Zur Erzeugung variabler Meldungen koennen folgende Werte
+        eingetragen werden:
 
-        2) ids mit denen sich bestellen laesst (z.B. "kaufe keule").
+        1) closure <func>: Aufruf erfolgt mittels
+             funcall(func, zahler, empfaenger, ident, minfo);
+        2) string <func>: Aufruf erfolgt mittels
+             call_other(this_object(), func, zahler, empfaenger,
+                        ident, minfo);
+        <func> bekommt Zahler und Empfaenger als Objektpointer,
+        ident als String und minfo als Mapping mit den
+        jeweiligen Heilwerten uebergeben. minfo entspricht hierbei
+        den Daten, die als dritter Parameter an AddToMenu()
+        uebergeben wurden.
+        HINWEIS: wenn in das minfo-Mapping keine int-Festwerte
+        eingetragen wurden, werden diese gemaess den Regeln unter [*]
+        geprueft; Funktionen/Closures werden ggf. ausgewertet und
+        deren Rueckgabewerte an die Funktion <func> uebergeben.
+        WICHTIG: Die Rueckgabewerte der Funktion werden nicht
+        ausgewertet. Jeder, der anstatt einer Meldung einen
+        Funktionsaufruf programmiert, muss fuer die Ausgabe der
+        Meldungen selbst sorgen.
 
-           ({"drachen","drachenkeule","keule"}),
 
-        3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK,
-           P_ALCOHOL nach Belieben setzen), Preis (P_VALUE). 
-           HP und SP muessen nicht gleich sein. Speisen und Getraenke,
-           die nur eines von beiden heilen, sind auch moeglich.
+BESCHREIBUNG
+============
 
-           ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]),
+   Mit dieser Funktion werden Speisen oder Getraenke in die Karte
+   von Kneipen und Restaurants eingefuegt.
 
-        4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP).
-    
-           5,
 
-        5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
-           ben werden (also NICHT der Bestell-Text).
+RUECKGABEWERT
+=============
 
-           ({"Du isst die Keule mit einem schlechten Gewissen.",
-             "@WER1 isst die Keule mit einem schlechten Gewissen."}),
+   Rueckgabewert ist ein String "menuentry%d", wobei %d eine Nummer
+   ist, die darueber Auskunft gibt, den wievielten Eintrag in die
+   interne Karte der Kneipe diese Speise bzw. dieses Getraenk
+   darstellt. Im Prinzip handelt es sich bei dem String um einen Key
+   fuer ein Mapping, in dem die Speisen bzw. Getraenke gespeichert
+   sind.
 
-           Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
-           als Objekt an replace_personal() uebergeben. Fuer die
-           moeglichen Platzhalter siehe dort.
-          
-        6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
-           sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
-           "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
-           wird. Aus diesem (so noch vorhanden) werden die Spieler
-           versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
 
-           ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
-           
-           HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert 
-           werden!
-           
-           Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
-           man hier eine 0 ein.
+BEMERKUNGEN
+===========
 
-        7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
-           die Zubereitung und Auslieferung an den Spieler braucht.
+   Die aelteren Funktionen 'AddDrink' bzw. 'AddFood' werden zwar mithilfe
+   dieser maechtigeren Funktion aus Gruenden der Abwaertskompatibilitaet
+   simuliert, sollen aber nicht mehr eingesetzt werden.
 
-           9,
-         
-        8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
-           stellung (hier 'kaufe keule') ausgegeben werden.
 
-           ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
-           "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
-           "wohl ein Tippfehler auf der Karte gewesen sein.",
-           "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
-           "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
+
+   Die alten Platzhalter && etc. (s.u.) werden weiterhin unterstuetzt,
+   sollten aber fuer bessere Wartbarkeit nicht mehr verwendet werden.
+
+
+
+   Fuer das Testen der Kneipe gibt es in jeder Kneipe den Befehl
+   'pubinit'. Hiermit lassen sich die Speisen und Getraenke durch-
+   checken. Steht in der Ausgabe bei einem Getraenk/Essen ein FAIL,
+   so wird die entsprechende Speise (oder Getraenk) NICHT an Spieler
+   verkauft. Ausnahmen fuer Speisen/Getraenke mit hoeheren maximalen
+   Werten sind durch Balance-EM zu genehmigen.
+
+
+BEISPIEL
+========
+
+   include <pub.h>
+
+   create()
+   {
+   AddToMenu("'Opa's Drachenkeule'",({"drachenkeule","keule"}),
+   ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]), 5,
+   ({"Du isst die Keule mit einem schlechten Gewissen.",
+     "@WER1 isst die Keule mit einem schlechten Gewissen."}),
+   ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]), 9,
+   ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
+     "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
+     "wohl ein Tippfehler auf der Karte gewesen sein.",
+     "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
+     "Stueck aus dessen Keule und braet diese fuer @WEN1."}) );
+   }
+
+   1) Name der Speise (des Getraenks) auf der Karte (bei menue).
+
+      AddToMenu("'Opa's Drachenkeule'",
+
+   2) ids mit denen sich bestellen laesst (z.B. "kaufe keule").
+
+      ({"drachen","drachenkeule","keule"}),
+
+   3) Heilung fuer LP und KP, Saettigung (P_FOOD oder P_DRINK,
+      P_ALCOHOL nach Belieben setzen), Preis (P_VALUE).
+      HP und SP muessen nicht gleich sein. Speisen und Getraenke,
+      die nur eines von beiden heilen, sind auch moeglich.
+
+      ([P_HP:63,P_SP:63,P_FOOD:9,P_VALUE:528]),
+
+   4) Heilung pro Heartbeat (in diesem Beispiel je 5 KP/LP).
+
+
+
+      5,
+
+   5) Meldungen fuer Spieler und Umstehende die bei Genuss ausgege-
+      ben werden (also NICHT der Bestell-Text).
+
+      ({"Du isst die Keule mit einem schlechten Gewissen.",
+        "@WER1 isst die Keule mit einem schlechten Gewissen."}),
+
+      Die Ausgabe-Strings werden vor der Ausgabe mit dem Empfaenger
+      als Objekt an replace_personal() uebergeben. Fuer die
+      moeglichen Platzhalter siehe dort.
+
+
+
+   6) Die Speise ist in ihrer Anzahl begrenzt. Fuer jeden Spieler
+      sind 4 Keulen pro reset() da. Ausserdem gibt es noch einen
+      "Notvorrat" von 20 Keulen, der alle 3 reset()s aufgefuellt
+      wird. Aus diesem (so noch vorhanden) werden die Spieler
+      versorgt, wenn ihr "persoenlicher Vorrat" aufgebraucht ist.
+
+      ([ PR_USER : 4; 1 , PR_ALL : 20; 3 ]),
+
+
+
+      HINWEIS: bei Benutzung des Mappings muss <pub.h> inkludiert
+      werden!
+
+
+
+      Wenn man keine reset-abhaengigen Speisen haben moechte, traegt
+      man hier eine 0 ein.
+
+   7) Die Zahl ist die Wartezeit in Sekunden, die der Wirt z.B. fuer
+      die Zubereitung und Auslieferung an den Spieler braucht.
+
+      9,
+
+
+
+   8) Letztendlich die Meldungen an Spieler und Umstehende, die bei Be-
+      stellung (hier 'kaufe keule') ausgegeben werden.
+
+      ({"Der unsichtbare Kneipier schneidet einem Rentner ein grosses "
+      "Stueck aus dessen Keule und bereitet sie Dir zu. Komisch, muss "
+      "wohl ein Tippfehler auf der Karte gewesen sein.",
+      "Der unsichtbare Kneipier schneidet einem hilflosen Opa ein "
+      "Stueck aus dessen Keule und braet diese fuer @WEN1."}));
 
 LISTE DER ALTEN PLATZHALTER (DEPRECATED):
-           &&  - pl->name(WER,2)
-           &1& - pl->name(WER,2)
-           &2& - pl->name(WESSEN,2)
-           &3& - pl->name(WEM,2)
-           &4& - pl->name(WEN,2)
-           &1# - capitalize(pl->name(WER,2))
-           &2# - capitalize(pl->name(WESSEN,2))
-           &3# - capitalize(pl->name(WEM,2))
-           &4# - capitalize(pl->name(WEN,2))
-           &!  - pl->QueryPronoun(WER)
-           &5& - pl->QueryPronoun(WE);
-           &6& - pl->QueryPronoun(WESSEN)
-           &7& - pl->QueryPronoun(WEM)
-           &8& - pl->QueryPronoun(WEN)
-           &5# - capitalize(pl->QueryPronoun(WER))
-           &6# - capitalize(pl->QueryPronoun(WESSEN))
-           &7# - capitalize(pl->QueryPronoun(WEM))
-           &8# - capitalize(pl->QueryPronoun(WEN))
+   &&  - pl->name(WER,2) &1& - pl->name(WER,2) &2& -
+   pl->name(WESSEN,2) &3& - pl->name(WEM,2) &4& - pl->name(WEN,2) &1#
+   - capitalize(pl->name(WER,2)) &2# - capitalize(pl->name(WESSEN,2))
+   &3# - capitalize(pl->name(WEM,2)) &4# - capitalize(pl->name(WEN,2))
+   &!  - pl->QueryPronoun(WER) &5& - pl->QueryPronoun(WE); &6& -
+   pl->QueryPronoun(WESSEN) &7& - pl->QueryPronoun(WEM) &8& -
+   pl->QueryPronoun(WEN) &5# - capitalize(pl->QueryPronoun(WER)) &6# -
+   capitalize(pl->QueryPronoun(WESSEN)) &7# -
+   capitalize(pl->QueryPronoun(WEM)) &8# -
+   capitalize(pl->QueryPronoun(WEN))
 
 
-SIEHE AUCH:
-        AddFood(), AddDrink(), /sys/pub.h
-        RemoveFromMenu(), replace_personal()
-----------------------------------------------------------------------------
+SIEHE AUCH
+==========
+
+   AddFood(), AddDrink(), /sys/pub.h
+   RemoveFromMenu(), replace_personal()
+
 Last modified: Sam, 01. Okt 2011, 23:40 by Arathorn
diff --git a/doc/lfun/AddTouchDetail b/doc/lfun/AddTouchDetail
index 413e3ca..6ca61e8 100644
--- a/doc/lfun/AddTouchDetail
+++ b/doc/lfun/AddTouchDetail
@@ -1,71 +1,90 @@
+
 AddTouchDetail()
+****************
 
-FUNKTION:
-    void AddTouchDetail(string|string* keys,
-                        string|string*|mapping|closure desc);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-     String oder Array von Strings mit den Namen der Details.
-    desc
-     String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+   void AddTouchDetail(string|string* keys,
+                       string|string*|mapping|closure desc);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
-    koennen hiermit (ab)tastbare bzw. fuehlbare Details realisiert werden:
-    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
-    beim (Ab)Tasten aussehen, haengt im wesentlichen vom Typ der
-    Beschreibung <desc> ab:
-     <desc> ist ein String.
-       Beim Untersuchen wird dieser String zurueckgegeben.
-      <desc> ist ein String-Array.
-        Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
-     <desc> ist ein Mapping.
-       Das Mapping muss folgenden Aufbau haben:
-         ([0:        "Defaulttext",
-           "rasse1": "r1text", ...]).
 
-       Falls fuer die Rasse des das Detail untersuchenden Spielers ein
-       Eintrag im Mapping existiert, wird der entsprechende Text
-       zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
-       rassenabhaengige Details moeglich. Siehe auch die Beispiele.
-     <desc> ist eine Closure.
-       In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
-       zurueckgegeben. Die Closure bekommt dabei den Namen des Details
-       als Parameter uebergeben.
+DEFINIERT IN
+============
 
-    Fuer fuehlbare Details koennen Forscherpunkte eingetragen werden.
+   /std/thing/description.c
 
-    Fuehlbare Details koennen allgemein einen Raum oder Objekt zugeordnet
-    werden: dafuer muss man als <key> SENSE_DEFAULT uebergeben.
 
-    Spielerkommandos: "taste"
+ARGUMENTE
+=========
 
-BEISPIELE:
-    Ein kleines Beispiel fuer rassenabhaengige, fuehlbare Details mit Closures:
-      string strafe(string key);
-      ...
-      AddTouchDetail(SENSE_DEFAULT, "Du fuehlst einige Knollen\n");
-      AddTouchDetail(({"knollen"}),
-                     ([0:       "Sie fuehlen sich an wie Knoblauchknollen. "
-                                "Riech doch mal daran.\n",
-                       "vampir": #'strafe]));
+   keys
+    String oder Array von Strings mit den Namen der Details.
+   desc
+    String, Mapping, String-Array oder Closure mit/zur Beschreibung.
 
-      string strafe(string key) {
-        this_player()->reduce_hit_points(100);
-        return "Au! Das waren ja Knoblauchknollen!\n";
-      }
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem AddDetail() fuer Standarddetails, nur
+   koennen hiermit (ab)tastbare bzw. fuehlbare Details realisiert werden:
+   Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+   beim (Ab)Tasten aussehen, haengt im wesentlichen vom Typ der
+   Beschreibung <desc> ab:
+    <desc> ist ein String.
+      Beim Untersuchen wird dieser String zurueckgegeben.
+     <desc> ist ein String-Array.
+       Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
+    <desc> ist ein Mapping.
+      Das Mapping muss folgenden Aufbau haben:
+        ([0:        "Defaulttext",
+          "rasse1": "r1text", ...]).
+
+      Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+      Eintrag im Mapping existiert, wird der entsprechende Text
+      zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+      rassenabhaengige Details moeglich. Siehe auch die Beispiele.
+    <desc> ist eine Closure.
+      In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+      zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+      als Parameter uebergeben.
+
+   Fuer fuehlbare Details koennen Forscherpunkte eingetragen werden.
+
+   Fuehlbare Details koennen allgemein einen Raum oder Objekt zugeordnet
+   werden: dafuer muss man als <key> SENSE_DEFAULT uebergeben.
+
+   Spielerkommandos: "taste"
+
+
+BEISPIELE
+=========
+
+   Ein kleines Beispiel fuer rassenabhaengige, fuehlbare Details mit Closures:
+     string strafe(string key);
+     ...
+     AddTouchDetail(SENSE_DEFAULT, "Du fuehlst einige Knollen\n");
+     AddTouchDetail(({"knollen"}),
+                    ([0:       "Sie fuehlen sich an wie Knoblauchknollen. "
+                               "Riech doch mal daran.\n",
+                      "vampir": #'strafe]));
+
+     string strafe(string key) {
+       this_player()->reduce_hit_points(100);
+       return "Au! Das waren ja Knoblauchknollen!\n";
+     }
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/AllGroups b/doc/lfun/AllGroups
index 8ffbbca..6511189 100644
--- a/doc/lfun/AllGroups
+++ b/doc/lfun/AllGroups
@@ -1,21 +1,36 @@
+
 AllGroups()
-FUNKTION:
-     string *AllGroups()
+***********
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-BESCHREIBUNG:
-     Gibt ein Array aller existenten Materialgruppen zurueck (ihre
-     Definitionsform wie in <thing/material.h> aufgelistet).
+FUNKTION
+========
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Listen:	  AllMaterials(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
+   string *AllGroups()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+DEFINIERT IN
+============
+
+   /p/daemon/materialdb.c (MATERIALDB)
+
+
+BESCHREIBUNG
+============
+
+   Gibt ein Array aller existenten Materialgruppen zurueck (ihre
+   Definitionsform wie in <thing/material.h> aufgelistet).
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Listen:      AllMaterials(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/AllMaterials b/doc/lfun/AllMaterials
index 6230e9b..57d1f6d 100644
--- a/doc/lfun/AllMaterials
+++ b/doc/lfun/AllMaterials
@@ -1,21 +1,36 @@
+
 AllMaterials()
-FUNKTION:
-     string *AllMaterials()
+**************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-BESCHREIBUNG:
-     Gibt ein Array aller existenten Materialien zurueck (ihre Definitions-
-     form wie in <thing/material.h> aufgelistet).
+FUNKTION
+========
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Listen:	  AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
+   string *AllMaterials()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+DEFINIERT IN
+============
+
+   /p/daemon/materialdb.c (MATERIALDB)
+
+
+BESCHREIBUNG
+============
+
+   Gibt ein Array aller existenten Materialien zurueck (ihre Definitions-
+   form wie in <thing/material.h> aufgelistet).
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Listen:      AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/AssocMember b/doc/lfun/AssocMember
index 349157b..139a670 100644
--- a/doc/lfun/AssocMember
+++ b/doc/lfun/AssocMember
@@ -1,52 +1,74 @@
 
 AssocMember()
+*************
 
 
-FUNKTION:
-        int AssocMember(object npc)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   int AssocMember(object npc)
 
-ARGUMENTE:
-        Der zuzuordnende NPC.
 
-BESCHREIBUNG:
-        Ordnet einen NPC einem Spieler zu. Dieser ist dann
-        immer im Team des Spielers, moeglichst in der gleichen Reihe.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        1, falls Zuordnung erfolgreich, sonst 0.
+   /std/living/team.c
 
-BEISPIEL:
-        void fun(object pl)
-        {
-          if ( pl && pl->AssocMember(this_object()) )
-            tell_object(pl,break_string(
-              "Ich kaempfe nun auf Deiner Seite!\n",78,"Ein Feuerteufel "
-              "teilt Dir mit:");
-         ...
-        }
 
-BEMERKUNGEN:
-        1. Kann nur von Gilden, Spellbooks, vom Objekt selber und vom
-           zuzuordnenden NPC aufgerufen werden.
-        2. Einem NPC, der selber einem Spieler zugeordnet ist, kann kein
-           NPC zugeordnet werden.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_TEAM_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      DeAssocMember, InsertEnemyTeam, SelectNearEnemy,
-                    SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+   Der zuzuordnende NPC.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Ordnet einen NPC einem Spieler zu. Dieser ist dann
+   immer im Team des Spielers, moeglichst in der gleichen Reihe.
+
+
+RUECKGABEWERT
+=============
+
+   1, falls Zuordnung erfolgreich, sonst 0.
+
+
+BEISPIEL
+========
+
+   void fun(object pl)
+   {
+     if ( pl && pl->AssocMember(this_object()) )
+       tell_object(pl,break_string(
+         "Ich kaempfe nun auf Deiner Seite!\n",78,"Ein Feuerteufel "
+         "teilt Dir mit:");
+    ...
+   }
+
+
+BEMERKUNGEN
+===========
+
+   1. Kann nur von Gilden, Spellbooks, vom Objekt selber und vom
+      zuzuordnenden NPC aufgerufen werden.
+   2. Einem NPC, der selber einem Spieler zugeordnet ist, kann kein
+      NPC zugeordnet werden.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_TEAM_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      DeAssocMember, InsertEnemyTeam, SelectNearEnemy,
+               SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 04.10.2011, Zesstra
-
diff --git a/doc/lfun/Attack b/doc/lfun/Attack
index 4656ae9..08a0c20 100644
--- a/doc/lfun/Attack
+++ b/doc/lfun/Attack
@@ -1,22 +1,42 @@
+
 Attack()
+********
 
-FUNKTION:
-	void Attack(object enemy)
 
-ARGUMENTE:
-	enemy: Der Feind.
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Der Feind wird der Staerke der Waffe (bzw. der Haende) entsprechend
-	stark angegriffen.
+   void Attack(object enemy)
 
-RUECKGABEWERT:
-	Keiner.
 
-BEMERKUNG:
-	Diese Funktion gibt die Angriffsmeldung aus.
-	Falls mit blossen Haenden angegriffen wird, ist die Staerke
-	(2*Staerke_der_Haende + 10*A_STR)/3
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-	"Defend", "QueryDamage"
+   enemy: Der Feind.
+
+
+BESCHREIBUNG
+============
+
+   Der Feind wird der Staerke der Waffe (bzw. der Haende) entsprechend
+   stark angegriffen.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner.
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion gibt die Angriffsmeldung aus.
+   Falls mit blossen Haenden angegriffen wird, ist die Staerke
+   (2*Staerke_der_Haende + 10*A_STR)/3
+
+
+SIEHE AUCH
+==========
+
+   "Defend", "QueryDamage"
diff --git a/doc/lfun/BecomesNetAlive b/doc/lfun/BecomesNetAlive
index 22a6cdc..a64f328 100644
--- a/doc/lfun/BecomesNetAlive
+++ b/doc/lfun/BecomesNetAlive
@@ -1,46 +1,68 @@
+
 BecomesNetAlive()
+*****************
 
-FUNKTION:
-    void BecomesNetAlive(object pl);
 
-GERUFEN VON:
-    /std/player/base.c
+FUNKTION
+========
 
-ARGUMENTE:
-    pl
-      Spieler, der Verbindung zum MUD wiedererlangt.
+   void BecomesNetAlive(object pl);
 
-BESCHREIBUNG:
-    Spieler, welche die Verbindung zum MUD freiwillig
-    (z.B. per 'schlafe ein') oder unfreiwillig verlieren, gehen in den
-    Netztotenstatus ueber. Sie verbleiben noch eine definierte Zeit in
-    der zuletzt betretenen Umgebung und werden schliesslich automatisch
-    in den Netztotenraum ueberfuehrt.
-    Wird die Verbindung wieder aufgebaut, so wird der Spielercharakter
-    wieder zum Leben erweckt und gegebenenfalls zuvor aus dem
-    Netztotenraum zurueck zu seiner letzten Umgebung teleportiert.
-    Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
-    Verbindung zum MUD wiederherstellt, gibt es die Funktion
-    BecomesNetAlive(). Sie wird automatisch in der Umgebung des
-    Spielers, in allen Objekten in der Umgebung des Spielers
-    (nicht rekursiv) und in allen Objekten im Spieler (rekursiv)
-    aufgerufen. Uebergeben wird hierbei das Spielerobjekt.
 
-    Es gibt auch noch die Funktion BecomesNetDead(), mit der man
-    auf aehnliche Weise einschlafende Spieler registrieren kann.
+GERUFEN VON
+===========
 
-BEISPIELE:
-    In einem NPC waere folgendes denkbar:
-    
-    void BecomesNetAlive(object pl) {
-      tell_room(environment(),break_string(
-        "Guten Morgen "+pl->name(WER)+", auch schon ausgeschlafen?!", 77,
-        Name(WER)+" sagt grinsend: "));
-    }
-    Steht der NPC in einem Raum, wo ein Spieler aufwacht, so wird der
-    Spieler gebuehrend begruesst.
+   /std/player/base.c
 
-SIEHE AUCH:
-    BecomesNetDead(), PlayerQuit(), /std/player/base.c, /room/netztot.c
 
-24. Aug 2011 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   pl
+     Spieler, der Verbindung zum MUD wiedererlangt.
+
+
+BESCHREIBUNG
+============
+
+   Spieler, welche die Verbindung zum MUD freiwillig
+   (z.B. per 'schlafe ein') oder unfreiwillig verlieren, gehen in den
+   Netztotenstatus ueber. Sie verbleiben noch eine definierte Zeit in
+   der zuletzt betretenen Umgebung und werden schliesslich automatisch
+   in den Netztotenraum ueberfuehrt.
+   Wird die Verbindung wieder aufgebaut, so wird der Spielercharakter
+   wieder zum Leben erweckt und gegebenenfalls zuvor aus dem
+   Netztotenraum zurueck zu seiner letzten Umgebung teleportiert.
+   Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
+   Verbindung zum MUD wiederherstellt, gibt es die Funktion
+   BecomesNetAlive(). Sie wird automatisch in der Umgebung des
+   Spielers, in allen Objekten in der Umgebung des Spielers
+   (nicht rekursiv) und in allen Objekten im Spieler (rekursiv)
+   aufgerufen. Uebergeben wird hierbei das Spielerobjekt.
+
+   Es gibt auch noch die Funktion BecomesNetDead(), mit der man
+   auf aehnliche Weise einschlafende Spieler registrieren kann.
+
+
+BEISPIELE
+=========
+
+   In einem NPC waere folgendes denkbar:
+
+
+
+   void BecomesNetAlive(object pl) {
+     tell_room(environment(),break_string(
+       "Guten Morgen "+pl->name(WER)+", auch schon ausgeschlafen?!", 77,
+       Name(WER)+" sagt grinsend: "));
+   }
+   Steht der NPC in einem Raum, wo ein Spieler aufwacht, so wird der
+   Spieler gebuehrend begruesst.
+
+
+SIEHE AUCH
+==========
+
+   BecomesNetDead(), PlayerQuit(), /std/player/base.c, /room/netztot.c
+
+24. Aug 2011 Gloinson
diff --git a/doc/lfun/BecomesNetDead b/doc/lfun/BecomesNetDead
index fcfed7c..8938d13 100644
--- a/doc/lfun/BecomesNetDead
+++ b/doc/lfun/BecomesNetDead
@@ -1,45 +1,67 @@
+
 BecomesNetDead()
+****************
 
-FUNKTION:
-    void BecomesNetDead(object pl);
 
-GERUFEN VON:
-    /std/player/base.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object pl
-      Spieler, der Verbindung zum MUD verliert.
+   void BecomesNetDead(object pl);
 
-BESCHREIBUNG:
-    Spieler, welche die Verbindung zum MUD freiwillig
-    (z.B. per 'schlafe ein') oder unfreiwillig verlieren, gehen in den
-    Netztotenstatus ueber. Sie verbleiben noch eine definierte Zeit in
-    der zuletzt betretenen Umgebung und werden schliesslich automatisch
-    in den Netztotenraum ueberfuehrt.
-    Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
-    Verbindung zum MUD verliert, gibt es die Funktion BecomesNetDead().
-    Sie wird automatisch in der Umgebung des Spielers, in allen Objekten
-    in der Umgebung des Spielers (nicht rekursiv) und in allen Objekten
-    im Spieler (rekursiv) aufgerufen. Uebergeben wird hierbei das
-    Spielerobjekt.
 
-    Es gibt auch noch die Funktion BecomesNetAlive(), mit der man
-    auf aehnliche Weise erwachende Spieler registrieren kann.
+GERUFEN VON
+===========
 
-BEISPIELE:
-    Es gibt Gebiete, in denen netztote Spieler unerwuenscht sind.
-    Folgendermassen kann man sich ihrer wirkungsvoll entledigen:
-    
-    void BecomesNetDead(object pl) {
-      pl->move("eingangsraum zu gebiet", M_TPORT|M_NOCHECK);
-    }
-    Man schickt diese Spieler wieder zum Eingang des Gebietes.
-    Da der letzte Aufenthaltsort eines Spielers, der in den
-    Netztotenstatus uebergeht, erst nach Aufruf der Funktion
-    BecomesNetDead() abgespeichert wird, wacht der Spieler dann an dem
-    Ort auf, wo man Ihn innerhalb dieser Funktion hinteleportiert hat.
+   /std/player/base.c
 
-SIEHE AUCH:
-    BecomesNetAlive(), PlayerQuit(), /std/player/base.c, /room/netztot.c
 
-24. Aug 2011, Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   object pl
+     Spieler, der Verbindung zum MUD verliert.
+
+
+BESCHREIBUNG
+============
+
+   Spieler, welche die Verbindung zum MUD freiwillig
+   (z.B. per 'schlafe ein') oder unfreiwillig verlieren, gehen in den
+   Netztotenstatus ueber. Sie verbleiben noch eine definierte Zeit in
+   der zuletzt betretenen Umgebung und werden schliesslich automatisch
+   in den Netztotenraum ueberfuehrt.
+   Um nun einen Ueberblick darueber zu erhalten, wann ein Spieler die
+   Verbindung zum MUD verliert, gibt es die Funktion BecomesNetDead().
+   Sie wird automatisch in der Umgebung des Spielers, in allen Objekten
+   in der Umgebung des Spielers (nicht rekursiv) und in allen Objekten
+   im Spieler (rekursiv) aufgerufen. Uebergeben wird hierbei das
+   Spielerobjekt.
+
+   Es gibt auch noch die Funktion BecomesNetAlive(), mit der man
+   auf aehnliche Weise erwachende Spieler registrieren kann.
+
+
+BEISPIELE
+=========
+
+   Es gibt Gebiete, in denen netztote Spieler unerwuenscht sind.
+   Folgendermassen kann man sich ihrer wirkungsvoll entledigen:
+
+
+
+   void BecomesNetDead(object pl) {
+     pl->move("eingangsraum zu gebiet", M_TPORT|M_NOCHECK);
+   }
+   Man schickt diese Spieler wieder zum Eingang des Gebietes.
+   Da der letzte Aufenthaltsort eines Spielers, der in den
+   Netztotenstatus uebergeht, erst nach Aufruf der Funktion
+   BecomesNetDead() abgespeichert wird, wacht der Spieler dann an dem
+   Ort auf, wo man Ihn innerhalb dieser Funktion hinteleportiert hat.
+
+
+SIEHE AUCH
+==========
+
+   BecomesNetAlive(), PlayerQuit(), /std/player/base.c, /room/netztot.c
+
+24. Aug 2011, Gloinson
diff --git a/doc/lfun/CannotSee b/doc/lfun/CannotSee
index 3869541..b86d33a 100644
--- a/doc/lfun/CannotSee
+++ b/doc/lfun/CannotSee
@@ -1,30 +1,49 @@
+
 CannotSee()
+***********
 
-FUNKTION:
-     varargs int CannotSee(int silent);
 
-DEFINIERT IN:
-     /std/living/light.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent - Soll an das Lebewesen direkt automatisch eine Meldung
-              ausgegeben werden wenn es nichts sehen kann?
+   varargs int CannotSee(int silent);
 
-BESCHREIBUNG:
-     Diese Funktion prueft ob das Lebewesen etwas sehen kann, oder nicht.
-     Hierbei wird sowohl das Lichtlevel mit saemtlichen Modifikatoren,
-     als auch Nachtsicht und die Property P_BLIND beruecksichtigt. Da
-     diese Funktion bei zukuenftigen Mudlibaenderungen immer aktualisiert
-     werden duerfte, sollte man sie nach Moeglichkeit benutzen und die
-     Abfragen nicht selbst implementieren.
 
-RUeCKGABEWERT:
-     0, wenn der Spieler etwas sehen kann
-     1, wenn der Spieler nichts sehen kann: Blindheit
-     2, wenn der Spieler nichts sehen kann: zu wenig Licht/keine Nachtsicht
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     P_BLIND, P_LIGHT_MODIFIER, P_PLAYER_LIGHT
+   /std/living/light.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   silent - Soll an das Lebewesen direkt automatisch eine Meldung
+            ausgegeben werden wenn es nichts sehen kann?
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion prueft ob das Lebewesen etwas sehen kann, oder nicht.
+   Hierbei wird sowohl das Lichtlevel mit saemtlichen Modifikatoren,
+   als auch Nachtsicht und die Property P_BLIND beruecksichtigt. Da
+   diese Funktion bei zukuenftigen Mudlibaenderungen immer aktualisiert
+   werden duerfte, sollte man sie nach Moeglichkeit benutzen und die
+   Abfragen nicht selbst implementieren.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn der Spieler etwas sehen kann
+   1, wenn der Spieler nichts sehen kann: Blindheit
+   2, wenn der Spieler nichts sehen kann: zu wenig Licht/keine Nachtsicht
+
+
+SIEHE AUCH
+==========
+
+   P_BLIND, P_LIGHT_MODIFIER, P_PLAYER_LIGHT
+
 Last modified: Mon Jan 17 18:22:27 2000 by Padreic
diff --git a/doc/lfun/ChangeMiniQuest b/doc/lfun/ChangeMiniQuest
index a6bfb7d..507bd68 100644
--- a/doc/lfun/ChangeMiniQuest
+++ b/doc/lfun/ChangeMiniQuest
@@ -1,48 +1,72 @@
-FUNKTION:
-    int ChangeMiniQuest(mixed questgeber, int parameter, mixed newvalue)
 
-DEFINIERT IN:
-    /secure/questmaster
+ChangeMiniQuest()
+*****************
 
-BESCHREIBUNG:
-    Diese Funktion aendert einen Parameter einer Miniquest im Questmaster,
-    schreibt fuer diese Aktion einen Log-Eintrag und erstellt das Miniquest-
-    Dumpfile neu.
 
-ARGUMENTE:
-    questgeber - Ladename des Objekts (string), das die Miniquest vergibt, 
-                 oderdie Indexnummer (int) der Miniquest in der MQ-Liste
-    parameter  - Angabe des zu aendernen Parameters (Position des Values
-                 im Miniquests-Mapping):
-                 0 : Miniquest-Stufenpunkte, mind. 1
-                 2 : Aufgabenbeschreibung der Miniquest (string)
-                 3 : Sichtbarkeit der Miniquest (0/1), default ist 1
-                 4 : aktiv/inaktiv (1/0)
-                 5 : Titel der Miniquest
-                 6 : "geschafft"-Beschreibung nach Abschluss der MQ
-                 7 : Voraussetzungen, Mapping im Format von P_RESTRICTIONS
-                 8 : zugeordnete Region, String wie z.B."polar", "gebirge"
-                 9 : erlaubte Abfrageobjekte, Array von Ladenamen, z.B.
-                     ({"/d/region/magier/npc/infonpc"}), es koennen mehrere 
-                     Objekte eingetragen sein
-    newvalue   - neuer Wert fuer den angegebenen Parameter
+FUNKTION
+========
 
-RUECKGABEWERTE:
-     1: hat geklappt
-     0: Zugriff verweigert
-    -2: ungueltiger Datentyp eines der Argumente, bei Parameter 9 wird
-        ein uebergebenes Array zusaetzlich auf Leerstrings und Elemente
-        geprueft, die keine Strings sind. Wenn das Array ausschliesslich
-        aus solchen Elementen besteht, wird ebenfalls -2 zurueckgegeben.
+   int ChangeMiniQuest(mixed questgeber, int parameter, mixed newvalue)
 
-BEMERKUNGEN:
-    Das Flag "active" laesst sich bequemer ueber die Questmaster-Funktion
-    SwitchMiniQuestActive() umschalten.
-    Der Miniquest-Titel darf kein "in" oder "im" enthalten, weil dann die
-    Eintraege in der Fraternitas-Bibliothek nicht gelesen werden
-    koennen.
 
-SIEHE AUCH:
+DEFINIERT IN
+============
+
+   /secure/questmaster
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion aendert einen Parameter einer Miniquest im Questmaster,
+   schreibt fuer diese Aktion einen Log-Eintrag und erstellt das Miniquest-
+   Dumpfile neu.
+
+
+ARGUMENTE
+=========
+
+   questgeber - Ladename des Objekts (string), das die Miniquest vergibt,
+                oderdie Indexnummer (int) der Miniquest in der MQ-Liste
+   parameter  - Angabe des zu aendernen Parameters (Position des Values
+                im Miniquests-Mapping):
+                0 : Miniquest-Stufenpunkte, mind. 1
+                2 : Aufgabenbeschreibung der Miniquest (string)
+                3 : Sichtbarkeit der Miniquest (0/1), default ist 1
+                4 : aktiv/inaktiv (1/0)
+                5 : Titel der Miniquest
+                6 : "geschafft"-Beschreibung nach Abschluss der MQ
+                7 : Voraussetzungen, Mapping im Format von P_RESTRICTIONS
+                8 : zugeordnete Region, String wie z.B."polar", "gebirge"
+                9 : erlaubte Abfrageobjekte, Array von Ladenamen, z.B.
+                    ({"/d/region/magier/npc/infonpc"}), es koennen mehrere
+                    Objekte eingetragen sein
+   newvalue   - neuer Wert fuer den angegebenen Parameter
+
+
+RUECKGABEWERTE
+==============
+
+    1: hat geklappt
+    0: Zugriff verweigert
+   -2: ungueltiger Datentyp eines der Argumente, bei Parameter 9 wird
+       ein uebergebenes Array zusaetzlich auf Leerstrings und Elemente
+       geprueft, die keine Strings sind. Wenn das Array ausschliesslich
+       aus solchen Elementen besteht, wird ebenfalls -2 zurueckgegeben.
+
+
+BEMERKUNGEN
+===========
+
+   Das Flag "active" laesst sich bequemer ueber die Questmaster-Funktion
+   SwitchMiniQuestActive() umschalten.
+   Der Miniquest-Titel darf kein "in" oder "im" enthalten, weil dann die
+   Eintraege in der Fraternitas-Bibliothek nicht gelesen werden
+   koennen.
+
+
+SIEHE AUCH
+==========
+
    AddMiniQuest(L)
    P_RESTRICTIONS
-
diff --git a/doc/lfun/ChangeReputation b/doc/lfun/ChangeReputation
index e7c3af6..c3d010e 100644
--- a/doc/lfun/ChangeReputation
+++ b/doc/lfun/ChangeReputation
@@ -1,45 +1,72 @@
-ChangeReputation
-FUNKTION:
-     public varargs int ChangeReputation(string repid, int value, int silent)
 
-DEFINIERT IN:
-     /std/player/reputation.c
+ChangeReputation()
+******************
 
-ARGUMENTE:
-     repid
-       Jede neue Reputationsgruppe muss anfangs mit einer eindeutigen ID von 
-       einem EM in den Reputationsmaster eingetragen werden. Danach kann man 
-       ueber die eindeutige ID <repid> auf sie zugreifen.
-     value
-       Der Wert, um den die Reputation geaendert werden soll. Positive Werte 
-       erhoehen die Reputation, negative verschlechtern sie.
-     silent
-       Ein optionales Flag. Falls gesetzt, wird keine Standardmeldung ueber 
-       die Reputationsaenderung an den Spieler ausgegeben. Man koennte dann 
-       eigene Meldungen ausgeben.
 
-BESCHREIBUNG:
-     Vor der Aenderung wird ein Check auf die UID des ausfuehrenden Objektes
-     ausgefuehrt, "fremde" Reputationen darf man somit nicht veraendern.
-     Man kann aber selbstverstaendlich in begruendeten Faellen mit dem
-     zustaendigen Magier/Regionsmagier sprechen, ob man ebenfalls Zugriff
-     erhaelt. Eingetragen wird dies schlussendlich durch einen EM.
+FUNKTION
+========
 
-RUeCKGABEWERT:
-     REP_RET_SUCCESS    Reputation wurde veraender.
-     REP_RET_SUCCESSCUT Reputation wurde auf Min / Max veraendert
-     REP_RET_WRONGARGS  Falsche Argumente fuer ChangeRep()
-     REP_RET_INVALIDUID Unzulaessige UID / keine Zugriffsrechte
-     REP_RET_ALREADYMAX Reputation bereits Max / Min
-     REP_RET_INACTIVE   Reputation momentan inaktiv
-     REP_RET_INVALIDREP Reputation nicht vorhanden
+   public varargs int ChangeReputation(string repid, int value, int silent)
 
-BEISPIELE:
-     s. reputation
 
-SIEHE AUCH:
-     reputation
-     GetReputation(), GetReputations()
+DEFINIERT IN
+============
 
-ZULETZT GEAeNDERT:
+   /std/player/reputation.c
+
+
+ARGUMENTE
+=========
+
+   repid
+     Jede neue Reputationsgruppe muss anfangs mit einer eindeutigen ID von
+     einem EM in den Reputationsmaster eingetragen werden. Danach kann man
+     ueber die eindeutige ID <repid> auf sie zugreifen.
+   value
+     Der Wert, um den die Reputation geaendert werden soll. Positive Werte
+     erhoehen die Reputation, negative verschlechtern sie.
+   silent
+     Ein optionales Flag. Falls gesetzt, wird keine Standardmeldung ueber
+     die Reputationsaenderung an den Spieler ausgegeben. Man koennte dann
+     eigene Meldungen ausgeben.
+
+
+BESCHREIBUNG
+============
+
+   Vor der Aenderung wird ein Check auf die UID des ausfuehrenden Objektes
+   ausgefuehrt, "fremde" Reputationen darf man somit nicht veraendern.
+   Man kann aber selbstverstaendlich in begruendeten Faellen mit dem
+   zustaendigen Magier/Regionsmagier sprechen, ob man ebenfalls Zugriff
+   erhaelt. Eingetragen wird dies schlussendlich durch einen EM.
+
+
+RUeCKGABEWERT
+=============
+
+   REP_RET_SUCCESS    Reputation wurde veraender.
+   REP_RET_SUCCESSCUT Reputation wurde auf Min / Max veraendert
+   REP_RET_WRONGARGS  Falsche Argumente fuer ChangeRep()
+   REP_RET_INVALIDUID Unzulaessige UID / keine Zugriffsrechte
+   REP_RET_ALREADYMAX Reputation bereits Max / Min
+   REP_RET_INACTIVE   Reputation momentan inaktiv
+   REP_RET_INVALIDREP Reputation nicht vorhanden
+
+
+BEISPIELE
+=========
+
+   s. reputation
+
+
+SIEHE AUCH
+==========
+
+   reputation
+   GetReputation(), GetReputations()
+
+
+ZULETZT GEAeNDERT
+=================
+
 06.04.2009, Zesstra
diff --git a/doc/lfun/CheckFindRestrictions b/doc/lfun/CheckFindRestrictions
index f9c96e5..a021a58 100644
--- a/doc/lfun/CheckFindRestrictions
+++ b/doc/lfun/CheckFindRestrictions
@@ -1,23 +1,43 @@
-CheckFindRestrictions
 
-FUNKTION:
-    varargs int CheckFindRestrictions(object ob, mixed restr, closure qp)
- 
-DEFINIERT IN:
-    /std/room/shop.c
- 
-ARGUMENTE:
-    ob     - Objekt
-    restr  - zusaetzliches Argument
-    qp     - symbol_function("QueryProp",ob)
+CheckFindRestrictions()
+***********************
 
-BESCHREIBUNG:
-    Funktion, die FindBestWeapon / FindBestArmours einschraenkt.
-    Wird in Wert ungleich 0 zurueckgeliefert, so wird das Objekt
-    nicht genommen.
 
-RUECKGABEWERT:
-    Normalerweise 0
+FUNKTION
+========
 
-SIEHE AUCH:
-    FindBestWeapon(), FindBestArmours()
+   varargs int CheckFindRestrictions(object ob, mixed restr, closure qp)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   ob     - Objekt
+   restr  - zusaetzliches Argument
+   qp     - symbol_function("QueryProp",ob)
+
+
+BESCHREIBUNG
+============
+
+   Funktion, die FindBestWeapon / FindBestArmours einschraenkt.
+   Wird in Wert ungleich 0 zurueckgeliefert, so wird das Objekt
+   nicht genommen.
+
+
+RUECKGABEWERT
+=============
+
+   Normalerweise 0
+
+
+SIEHE AUCH
+==========
+
+   FindBestWeapon(), FindBestArmours()
diff --git a/doc/lfun/CheckLightType b/doc/lfun/CheckLightType
index 1a0490a..2296ab8 100644
--- a/doc/lfun/CheckLightType
+++ b/doc/lfun/CheckLightType
@@ -1,84 +1,110 @@
+
 CheckLightType()
+****************
 
-FUNKTION:
-	varargs int CheckLightType(int lighttype, int mode);
 
-DEFINIERT IN:
-	/std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-	lighttype
-	  Auf diesen Lichttyp wird getestet.
-	mode
-	  Die Methode, nach der der Lichttyp ueberprueft wird.
+   varargs int CheckLightType(int lighttype, int mode);
 
-BESCHREIBUNG:
-        Die Funktion prueft, ob der uebergebene lighttype mit dem in
-        P_LIGHT_TYPE definierten Lichttyp uebereinstimmt. 
 
-        Dabei kann in verschiedenen Modi getestet werden:
+DEFINIERT IN
+============
 
-        LT_CHECK_ANY
-          Es wird geprueft, ob mindestens einer der in lighttype ueber
-          gebenen Lichttypen im Objekt vorhanden ist. Dies ist das
-          Standardverhalten (default) der Funktion.
+   /std/thing/description.c
 
-        LT_CHECK_ALL     
-          Es wird geprueft, ob alle in lighttype definierten Lichttypen
-          vorhanden sind. Es koennen aber auch mehr Lichttypen definiert
-          sein.
 
-        LT_CHECK_MATCH   
-          Es wird geprueft, ob genau die in lighttype definierten Licht-
-          tyen definiert sind, sind mehr oder weniger vorhanden, gibt die
-          Funktion 0 zurueck.
+ARGUMENTE
+=========
 
-        LT_CHECK_NONE    
-          Es wird geprueft, ob keiner der uebergebenen Lichttypen vorhanden
-          sind. Ob sonst noch andere Lichttypen vorhanden sind, ist dabei 
-          egal.
+   lighttype
+     Auf diesen Lichttyp wird getestet.
+   mode
+     Die Methode, nach der der Lichttyp ueberprueft wird.
 
-RUeCKGABEWERT:
-	0 wenn die geprueften Bedingungen nicht korrekt sind, sonst 
-        ein Wert ungleich 0.
 
-BEISPIELE:
-        In einem Raum scheint die Sonne, ausserdem gibt es dort ein Lager-
-        feuer und ein Objekt mit magischem Gluehen (meine Phantasie streikt
-        grad):
+BESCHREIBUNG
+============
 
-        raum->SetProp( P_LIGHT_TYPE, LT_SUN|LT_OPEN_FIRE|LT_GLOWING );
+   Die Funktion prueft, ob der uebergebene lighttype mit dem in
+   P_LIGHT_TYPE definierten Lichttyp uebereinstimmt.
 
-        Es soll getestet werden, ob an in dem Raum Tageslicht herrscht:
+   Dabei kann in verschiedenen Modi getestet werden:
 
-        raum->CheckLightType(LT_DAYLIGHT, LT_CHECK_ANY);
-        raum->CheckLightType(LT_DAYLIGHT); // gleichwertig
+   LT_CHECK_ANY
+     Es wird geprueft, ob mindestens einer der in lighttype ueber
+     gebenen Lichttypen im Objekt vorhanden ist. Dies ist das
+     Standardverhalten (default) der Funktion.
 
-        Die Funktion ergibt wahr, da LT_DAYLIGHT unter anderem LT_SUN ent-
-        haelt (vgl man P_LIGHT_TYPES).
+   LT_CHECK_ALL
+     Es wird geprueft, ob alle in lighttype definierten Lichttypen
+     vorhanden sind. Es koennen aber auch mehr Lichttypen definiert
+     sein.
 
-        Es soll getestet werden, dass weder Mond noch Sterne im Raum sind:
+   LT_CHECK_MATCH
+     Es wird geprueft, ob genau die in lighttype definierten Licht-
+     tyen definiert sind, sind mehr oder weniger vorhanden, gibt die
+     Funktion 0 zurueck.
 
-        raum->CheckLightType(LT_MOON|LT_STARS, LT_CHECK_NONE);
+   LT_CHECK_NONE
+     Es wird geprueft, ob keiner der uebergebenen Lichttypen vorhanden
+     sind. Ob sonst noch andere Lichttypen vorhanden sind, ist dabei
+     egal.
 
-        Die Funktion ergibt wahr, da die beiden nicht gesetzt sind.
 
-        Es soll geprueft werden, ob Mond und Sterne im Raum leuchten:
+RUeCKGABEWERT
+=============
 
-        raum->CheckLightType(LT_MOON|LT_STARS, LT_CHECK_ALL);
+   0 wenn die geprueften Bedingungen nicht korrekt sind, sonst
+   ein Wert ungleich 0.
 
-        Die Funktion ergibt falsch, da keins der beiden Lichter vorhanden
-        ist. Sie ergaebe aber auch falsch, wenn einer der beiden Typen
-        vorhanden waer. Nur wenn beide vorhanden sind, gibt LT_CHECK_ALL
-        wahr.
 
-BEMERKUNG:
-        Lighttypes haben nichts mit dem Lichtsystem zu tun. Sie dienen 
-        nur der Beschreibung der Lichtverhaeltnisse an/in einem Objekt.
-        Objekte mit verschiedenen Lichtverhaeltnissen beeinflussen sich
-        gegenseitig nicht.
+BEISPIELE
+=========
 
-SIEHE AUCH:
-        /std/thing/description.c, /std/thing/lighttypes.h, P_LIGHT_TYPE
-----------------------------------------------------------------------------
+   In einem Raum scheint die Sonne, ausserdem gibt es dort ein Lager-
+   feuer und ein Objekt mit magischem Gluehen (meine Phantasie streikt
+   grad):
+
+   raum->SetProp( P_LIGHT_TYPE, LT_SUN|LT_OPEN_FIRE|LT_GLOWING );
+
+   Es soll getestet werden, ob an in dem Raum Tageslicht herrscht:
+
+   raum->CheckLightType(LT_DAYLIGHT, LT_CHECK_ANY);
+   raum->CheckLightType(LT_DAYLIGHT); // gleichwertig
+
+   Die Funktion ergibt wahr, da LT_DAYLIGHT unter anderem LT_SUN ent-
+   haelt (vgl man P_LIGHT_TYPES).
+
+   Es soll getestet werden, dass weder Mond noch Sterne im Raum sind:
+
+   raum->CheckLightType(LT_MOON|LT_STARS, LT_CHECK_NONE);
+
+   Die Funktion ergibt wahr, da die beiden nicht gesetzt sind.
+
+   Es soll geprueft werden, ob Mond und Sterne im Raum leuchten:
+
+   raum->CheckLightType(LT_MOON|LT_STARS, LT_CHECK_ALL);
+
+   Die Funktion ergibt falsch, da keins der beiden Lichter vorhanden
+   ist. Sie ergaebe aber auch falsch, wenn einer der beiden Typen
+   vorhanden waer. Nur wenn beide vorhanden sind, gibt LT_CHECK_ALL
+   wahr.
+
+
+BEMERKUNG
+=========
+
+   Lighttypes haben nichts mit dem Lichtsystem zu tun. Sie dienen
+   nur der Beschreibung der Lichtverhaeltnisse an/in einem Objekt.
+   Objekte mit verschiedenen Lichtverhaeltnissen beeinflussen sich
+   gegenseitig nicht.
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/description.c, /std/thing/lighttypes.h, P_LIGHT_TYPE
+
 Last modified: Fri Jun 11 20:47:33 2004 by Vanion
diff --git a/doc/lfun/CheckResistance b/doc/lfun/CheckResistance
index 45486a5..bcf64ca 100644
--- a/doc/lfun/CheckResistance
+++ b/doc/lfun/CheckResistance
@@ -1,20 +1,37 @@
+
 CheckResistance()
+*****************
 
-FUNKTION:
-	CheckRessistance(string* dam_type_list)
 
-ARGUMENTE:
-	dam_type_list: Liste der Schadensarten, die geprueft werden
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Diese Funktion ueberprueft, gegen welche der angegebenen
-	Schadensarten das Lebewesen resistent oder verletzlich ist und
-	gibt einen Faktor zurueck, der mit dem Schaden multipliziert wird.
-	Dieser Faktor betraegt normalerweise 1, bei bei jeder Resistenz
-	wird er halbiert und bei jeder Verletzlichkeit verdoppelt.
+   CheckRessistance(string* dam_type_list)
 
-RUECKGABEWERT:
-	Ein Faktor, der mit dem Schaden multipliziert wird, vom Typ "float".
 
-SIEHE AUCH:
-	"Defend"
+ARGUMENTE
+=========
+
+   dam_type_list: Liste der Schadensarten, die geprueft werden
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ueberprueft, gegen welche der angegebenen
+   Schadensarten das Lebewesen resistent oder verletzlich ist und
+   gibt einen Faktor zurueck, der mit dem Schaden multipliziert wird.
+   Dieser Faktor betraegt normalerweise 1, bei bei jeder Resistenz
+   wird er halbiert und bei jeder Verletzlichkeit verdoppelt.
+
+
+RUECKGABEWERT
+=============
+
+   Ein Faktor, der mit dem Schaden multipliziert wird, vom Typ "float".
+
+
+SIEHE AUCH
+==========
+
+   "Defend"
diff --git a/doc/lfun/CheckSensitiveAttack b/doc/lfun/CheckSensitiveAttack
index 32aec2e..74f6220 100644
--- a/doc/lfun/CheckSensitiveAttack
+++ b/doc/lfun/CheckSensitiveAttack
@@ -1,33 +1,54 @@
+
 CheckSensitiveAttack()
-FUNKTION:
-     void CheckSensitiveAttack(int dam, string *dam_type, mixed spell,
-			       object enemy)
+**********************
 
-DEFINIERT IN:
-     /std/living/inventory.c
 
-ARGUMENTE:
-     dam	- an Defend uebergebener Schaden
-     dam_type	- Schadenstyp(en)
-     spell	- spell, int oder mapping
-     enemy	- Feindesobjekt
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Wird von Defend() aufgerufen und prueft die Listen in
-     P_SENSITIVE_ATTACK durch.
-     Wenn die Schluessel und Threshold-Werte stimmen, wird
-     trigger_sensitive_attack(enemy,key,dam,spell,options)
-     im Objekt gerufen.
+   void CheckSensitiveAttack(int dam, string *dam_type, mixed spell,
+                             object enemy)
 
-BEMERKUNGEN:
-     Objekte mit P_SENSITIVE mit Schluessel SENSITIVE_ATTACK bitte vorsichtig
-     verwenden, da rechenintensiv.
 
-SIEHE AUCH:
-     P_SENSITIVE
-     InsertSensitiveObject, RemoveSensitiveObject
-     insert_sensitive_inv_trigger, insert_sensitive_inv
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
-     P_SENSITIVE_INVENTORY_TRIGGER
+DEFINIERT IN
+============
+
+   /std/living/inventory.c
+
+
+ARGUMENTE
+=========
+
+   dam        - an Defend uebergebener Schaden
+   dam_type   - Schadenstyp(en)
+   spell      - spell, int oder mapping
+   enemy      - Feindesobjekt
+
+
+BESCHREIBUNG
+============
+
+   Wird von Defend() aufgerufen und prueft die Listen in
+   P_SENSITIVE_ATTACK durch.
+   Wenn die Schluessel und Threshold-Werte stimmen, wird
+   trigger_sensitive_attack(enemy,key,dam,spell,options)
+   im Objekt gerufen.
+
+
+BEMERKUNGEN
+===========
+
+   Objekte mit P_SENSITIVE mit Schluessel SENSITIVE_ATTACK bitte vorsichtig
+   verwenden, da rechenintensiv.
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   InsertSensitiveObject, RemoveSensitiveObject
+   insert_sensitive_inv_trigger, insert_sensitive_inv
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
+   P_SENSITIVE_INVENTORY_TRIGGER
 
 28.Jan.2001, Gloinson@MG
diff --git a/doc/lfun/CheckSpellFatigue b/doc/lfun/CheckSpellFatigue
index 0d7cc2a..ac9d3fe 100644
--- a/doc/lfun/CheckSpellFatigue
+++ b/doc/lfun/CheckSpellFatigue
@@ -1,61 +1,85 @@
-CheckSpellFatigue
 
-FUNKTION:
-    public varargs int CheckSpellFatigue(string key)
+CheckSpellFatigue()
+*******************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    /std/player/skills.c
-    /sys/living/skills.h
 
-ARGUMENTE:
-    string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
-                  oder 0 fuer die globale Spruchermuedung.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion dient zum Pruefen von individuellen Spruchermuedungen
-    (Spellfatigue, Spruchsperren).
-    Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
-    Sprueche oder Gruppen von Spruechen gestalten.
+   public varargs int CheckSpellFatigue(string key)
 
-    Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
-    geprueft (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls 
-    die unter <key> gespeicherte Spruchermuedung.
-    Prueft man einen Eintrag ohne Angabe von <key> ist das Ergebnis dieser
-    Funktion identisch zur Abfrage von P_NEXT_SPELL_TIME.
 
-RUeCKGABEWERT:
-    0    Spruchermuedung existiert nicht oder ist abgelaufen.
+DEFINIERT IN
+============
 
-    >0   Spruchermuedung ist noch nicht abgelaufen, Rueckgabewert ist die
-         Zeit, bei der dieser Eintrag ablaeuft. Der Spruch darf _nicht_
-         ausgefuehrt werden.
+   /std/living/skills.c
+   /std/player/skills.c
+   /sys/living/skills.h
 
-BEISPIELE:
-    Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
-    Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
-    Gruppe ausgefuehrt wurde.
-    if (ob->CheckSpellFatigue("extrasuess") {
-      // alte Sperre noch nicht abgelaufen.
-      tell_object(ob, "Deine unendliche Schokotorte ist noch nicht wieder "
-        "nachgewachsen.\n");
-      return ... ;
-    }
 
-BEMERKUNGEN:
-    Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
-    unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
-    auf volle 2s aufgerundet werden.
-    Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
-    werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
-    ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
-    Wuensche habt, sprecht den/die Mudlib-EM an.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    SetSpellFatigue(L), DeleteSpellFatigue(L)
-    P_NEXT_SPELL_TIME
-    spruchermuedung
+   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
+                 oder 0 fuer die globale Spruchermuedung.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion dient zum Pruefen von individuellen Spruchermuedungen
+   (Spellfatigue, Spruchsperren).
+   Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
+   Sprueche oder Gruppen von Spruechen gestalten.
+
+   Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
+   geprueft (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls
+   die unter <key> gespeicherte Spruchermuedung.
+   Prueft man einen Eintrag ohne Angabe von <key> ist das Ergebnis dieser
+   Funktion identisch zur Abfrage von P_NEXT_SPELL_TIME.
+
+
+RUeCKGABEWERT
+=============
+
+   0    Spruchermuedung existiert nicht oder ist abgelaufen.
+
+   >0   Spruchermuedung ist noch nicht abgelaufen, Rueckgabewert ist die
+        Zeit, bei der dieser Eintrag ablaeuft. Der Spruch darf _nicht_
+        ausgefuehrt werden.
+
+
+BEISPIELE
+=========
+
+   Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
+   Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
+   Gruppe ausgefuehrt wurde.
+   if (ob->CheckSpellFatigue("extrasuess") {
+     // alte Sperre noch nicht abgelaufen.
+     tell_object(ob, "Deine unendliche Schokotorte ist noch nicht wieder "
+       "nachgewachsen.\n");
+     return ... ;
+   }
+
+
+BEMERKUNGEN
+===========
+
+   Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
+   unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
+   auf volle 2s aufgerundet werden.
+   Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
+   werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
+   ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
+   Wuensche habt, sprecht den/die Mudlib-EM an.
+
+
+SIEHE AUCH
+==========
+
+   SetSpellFatigue(L), DeleteSpellFatigue(L)
+   P_NEXT_SPELL_TIME
+   spruchermuedung
+
 27.03.2010, Zesstra
-
diff --git a/doc/lfun/ClearRingBuffer b/doc/lfun/ClearRingBuffer
index 0095dec..869d298 100644
--- a/doc/lfun/ClearRingBuffer
+++ b/doc/lfun/ClearRingBuffer
@@ -1,34 +1,56 @@
+
 ClearRingBuffer()
+*****************
 
-FUNKTION:
-    protected struct std_ringbuffer ClearRingBuffer(struct std_ringbuffer b);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
+FUNKTION
+========
 
-ARGUMENTE:
-    b - der zu loeschende Ringpuffer
+   protected struct std_ringbuffer ClearRingBuffer(struct std_ringbuffer b);
 
-BESCHREIBUNG:
-    Diese Funktion loescht alle Daten aus dem Puffer <b> und re-initialisiert
-    ihn.
-    
-RUeCKGABEWERT:
-    Der geloeschte Puffer <b> wird wieder zurueckgegeben.
 
-BEISPIELE:
-    // Ringpuffer anlegen:
-    struct std_ringbuffer buffer=CreateRingBuffer(10, MODE_FIFO);
-    // mit irgendwelchen Daten fuellen...
-    // ...
-    // Puffer loeschen
-    buffer = ClearRingBuffer(buffer);
-    // oder:
-    ClearRingBuffer(buffer);
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    CreateRingBuffer(), RingBufferGet(), ResizeRingBuffer()
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
+
+
+ARGUMENTE
+=========
+
+   b - der zu loeschende Ringpuffer
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion loescht alle Daten aus dem Puffer <b> und re-initialisiert
+   ihn.
+
+
+RUeCKGABEWERT
+=============
+
+   Der geloeschte Puffer <b> wird wieder zurueckgegeben.
+
+
+BEISPIELE
+=========
+
+   // Ringpuffer anlegen:
+   struct std_ringbuffer buffer=CreateRingBuffer(10, MODE_FIFO);
+   // mit irgendwelchen Daten fuellen...
+   // ...
+   // Puffer loeschen
+   buffer = ClearRingBuffer(buffer);
+   // oder:
+   ClearRingBuffer(buffer);
+
+
+SIEHE AUCH
+==========
+
+   CreateRingBuffer(), RingBufferGet(), ResizeRingBuffer()
 
 23.05.2008, Zesstra
-
diff --git a/doc/lfun/Configure b/doc/lfun/Configure
index 9763999..5a919ce 100644
--- a/doc/lfun/Configure
+++ b/doc/lfun/Configure
@@ -1,23 +1,38 @@
+
+Configure()
+***********
+
 Configure()
 
-  public mixed Configure(mixed data)
+   public mixed Configure(mixed data)
 
-DEFINIERT IN:
+
+DEFINIERT IN
+============
+
    Beliebigen Objekten
 
-ARGUMENTE:
+
+ARGUMENTE
+=========
+
    <data>
      0 fuer Datenabfrage
      beliebige Daten, die ein Configure(0) vorher lieferte
 
-BESCHREIBUNG:
+
+BESCHREIBUNG
+============
+
    Viele Objekte werden fuer bestimmte Spieler konfiguriert und so
    personalisiert. Sie enthalten zusaetzlich zu den Daten, welche waehrend des
    create() gesetzt wurden, noch weitere spieler-individuelle Daten.
    Damit diese Objekte im Bedarfsfall neu erstellt werden koennen, sollte ein
    geeignetes Configure() definfiert werden, um diese Daten abzurufen und in
    einem neuen Clone (oder neugeladener Blueprint) wieder zu setzen.
-   
+
+
+
    Existiert Configure() im Objekt, MUSS dieses bei einem Aufruf mit
    <data>==0 (d.h. Configure(0)) alle individuellen Daten zurueckliefern,
    die noetig sind, um den aktuellen Zustand des Objektes spaeter
@@ -29,7 +44,10 @@
    von Configure(data) wieder gesetzt. Das Configure MUSS genau die Daten, die
    es im alten Objekt zurueckliefert, wieder akzeptieren.
 
-RUeCKGABEWERT:
+
+RUeCKGABEWERT
+=============
+
    Wenn <data>==0:
      Alle individuellen Daten in einer beliebigen Form. Ein Mapping bietet
      sich jedoch an.
@@ -39,13 +57,19 @@
      1, wenn die Daten zur Konfiguration akzeptiert wurden.
      0, sonst.
 
-BEMERKUNGEN:
+
+BEMERKUNGEN
+===========
+
    Configure() ist nicht verpflichtet, erneut Daten zu akzeptieren, wenn es
    bereits einmal mit gueltigen Daten aufgerufen wurde.
    Das Zurueckschreiben der Daten kann auch nach Ablauf laengerer Zeit
    und/oder in einer anderen Uptime erfolgen.
 
-BEISPIELE:
+
+BEISPIELE
+=========
+
    Ein Objekt, welches ein anderes Objekt sicher ersetzt, d.h. die
    individuelle Konfiguration bleibt erhalten:
    mixed data;
@@ -71,6 +95,8 @@
          "Daten enthaelt.",78));
    }
 
-LETZTE AeNDERUNG:
-26.09.2011, Zesstra
 
+LETZTE AeNDERUNG
+================
+
+26.09.2011, Zesstra
diff --git a/doc/lfun/ConvMaterialList b/doc/lfun/ConvMaterialList
index ab4618a..874753b 100644
--- a/doc/lfun/ConvMaterialList
+++ b/doc/lfun/ConvMaterialList
@@ -1,41 +1,65 @@
+
 ConvMaterialList()
-FUNKTION:
-     varargs string ConvMaterialList(mixed mats, int casus, mixed idinf)
+******************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     mixed mats:  - das zu erkennende Material:
-                    - ein Mapping, ein String oder ein Stringarray
-                      ([MAT_A:y,MAT_B:x,..]) oder MAT_A oder ({MAT_A,MAT_B,..})
-     int casus:   - der Fall: 0..3 -> <language.h>: WAS, WESSEN, WEM, WEN
-     mixed idinf  - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
-		    (siehe "man MaterialList")
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Man uebergibt ConvMaterialList() eine Liste von Materialien, die die
-     Funktion unter Verwendung von MaterialName() in ihre Bestandteile
-     aufsplittet und mit "und" und "," verknuepft zurueckgibt.
+   varargs string ConvMaterialList(mixed mats, int casus, mixed idinf)
 
-RUECKGABEWERT:
-     string - Materialien, durch Komma und "und" getrennt oder
-              "unbekanntes Material"
 
-BEMERKUNGEN:
-     Wird von /std/thing/description::MaterialList() gerufen.
-     Bitte an Objekten auch MaterialList() verwenden.
-     Ruft direkt MaterialName() auf.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
-     Listen:	  AllMaterials(), AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
-     Sonstiges:	  P_MATERIAL_KNOWLEDGE
+   /p/daemon/materialdb.c (MATERIALDB)
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   mixed mats:  - das zu erkennende Material:
+                  - ein Mapping, ein String oder ein Stringarray
+                    ([MAT_A:y,MAT_B:x,..]) oder MAT_A oder ({MAT_A,MAT_B,..})
+   int casus:   - der Fall: 0..3 -> <language.h>: WAS, WESSEN, WEM, WEN
+   mixed idinf  - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
+                  (siehe "man MaterialList")
+
+
+BESCHREIBUNG
+============
+
+   Man uebergibt ConvMaterialList() eine Liste von Materialien, die die
+   Funktion unter Verwendung von MaterialName() in ihre Bestandteile
+   aufsplittet und mit "und" und "," verknuepft zurueckgibt.
+
+
+RUECKGABEWERT
+=============
+
+   string - Materialien, durch Komma und "und" getrennt oder
+            "unbekanntes Material"
+
+
+BEMERKUNGEN
+===========
+
+   Wird von /std/thing/description::MaterialList() gerufen.
+   Bitte an Objekten auch MaterialList() verwenden.
+   Ruft direkt MaterialName() auf.
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/CreateRingBuffer b/doc/lfun/CreateRingBuffer
index 0471af6..e10b671 100644
--- a/doc/lfun/CreateRingBuffer
+++ b/doc/lfun/CreateRingBuffer
@@ -1,45 +1,70 @@
+
 CreateRingBuffer()
+******************
 
-FUNKTION:
-    protected struct std_ringbuffer CreateRingBuffer(int size, int newmode);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
+FUNKTION
+========
 
-ARGUMENTE:
-    size    - Groesse des neuen Ringpuffers (int)
-    newmode - Ausgabemodus beim Abrufen des Puffers (int):
-              MODE_FIFO: First-in-First-Out
-              MODE_LIFO: Last-in-First-Out
+   protected struct std_ringbuffer CreateRingBuffer(int size, int newmode);
 
-BESCHREIBUNG:
-    Diese Funktion erstellt einen neuen, leeren Ringpuffer der Groesse <size>
-    und liefert ihn zurueck. Die Daten des Puffers werden spaeter gemaess
-    <newmode> so gespeichert, dass bei der Ausgabe des Puffers mittels
-    RingBufferGet() die entweder die neuesten Daten zuerst (MODE_LIFO) oder
-    die aeltesten Daten zuerst (MODE_FIFO) geliefert werden.
 
-RUeCKGABEWERT:
-    Der neue Ringpuffer. Dieser wird in einer Struct std_ringbuffer
-    gespeichert. Er ist in einer Variable 'mixed' oder in einer mittels
-    'struct std_ringbuffer' angelegten Variable speicherbar.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    Der gelieferte Ringpuffer sollte nicht per Hand verarbeitet oder
-    genaendert werden, sondern nur ueber die Verwaltungsfunktionen aus
-    /std/util/ringbuffer.c.
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
 
-BEISPIELE:
-    // Variable anlegen:
-    struct std_ringbuffer buffer;
-    // _oder_: mixed buffer;
-    // neuen Puffer mit max. 50 Elementen anlegen, der bei der Abfrage die
-    // aeltesten Daten zuerst zurueckliefert:
-    buffer = CreateRingBuffer(50, MODE_FIFO);
 
-SIEHE AUCH:
-    RingBufferPut(), RingBufferGet(), ResizeRingBuffer()
+ARGUMENTE
+=========
+
+   size    - Groesse des neuen Ringpuffers (int)
+   newmode - Ausgabemodus beim Abrufen des Puffers (int):
+             MODE_FIFO: First-in-First-Out
+             MODE_LIFO: Last-in-First-Out
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion erstellt einen neuen, leeren Ringpuffer der Groesse <size>
+   und liefert ihn zurueck. Die Daten des Puffers werden spaeter gemaess
+   <newmode> so gespeichert, dass bei der Ausgabe des Puffers mittels
+   RingBufferGet() die entweder die neuesten Daten zuerst (MODE_LIFO) oder
+   die aeltesten Daten zuerst (MODE_FIFO) geliefert werden.
+
+
+RUeCKGABEWERT
+=============
+
+   Der neue Ringpuffer. Dieser wird in einer Struct std_ringbuffer
+   gespeichert. Er ist in einer Variable 'mixed' oder in einer mittels
+   'struct std_ringbuffer' angelegten Variable speicherbar.
+
+
+BEMERKUNGEN
+===========
+
+   Der gelieferte Ringpuffer sollte nicht per Hand verarbeitet oder
+   genaendert werden, sondern nur ueber die Verwaltungsfunktionen aus
+   /std/util/ringbuffer.c.
+
+
+BEISPIELE
+=========
+
+   // Variable anlegen:
+   struct std_ringbuffer buffer;
+   // _oder_: mixed buffer;
+   // neuen Puffer mit max. 50 Elementen anlegen, der bei der Abfrage die
+   // aeltesten Daten zuerst zurueckliefert:
+   buffer = CreateRingBuffer(50, MODE_FIFO);
+
+
+SIEHE AUCH
+==========
+
+   RingBufferPut(), RingBufferGet(), ResizeRingBuffer()
 
 23.05.2008, Zesstra
-
diff --git a/doc/lfun/CustomizeObject b/doc/lfun/CustomizeObject
index 4b35092..2c7736a 100644
--- a/doc/lfun/CustomizeObject
+++ b/doc/lfun/CustomizeObject
@@ -1,19 +1,36 @@
-CustomizeObject()
 
-FUNKTION:
+CustomizeObject()
+*****************
+
+
+FUNKTION
+========
+
    string CustomizeObject();
 
-DEFINIERT IN:
+
+DEFINIERT IN
+============
+
    /std/virtual/v_compiler.c
 
-ARGUMENTE:
+
+ARGUMENTE
+=========
+
    keine
 
-RUeCKGABEWERT:
+
+RUeCKGABEWERT
+=============
+
    Den Objektnamen, den das zuletzt erzeugte Objekt (welches gerade die
    Funktion aufruft) spaeter vom Driver bekommen wird.
 
-BESCHREIBUNG:
+
+BESCHREIBUNG
+============
+
    Diese Funktion ist aus dem Grunde da, da zum Zeitpunkt des Clonens des
    VC-Objektes (P_STD_OBJECT) dieses Objekt ja noch nicht weiss Wer
    oder Was es spaeter mal sein wird.
@@ -24,29 +41,44 @@
    Da das VC-Objekt vom VC geclont wurde, ist previous_object() im create()
    des VC-Objektes der VC, in dem man CustomizeObject() ruft.
 
-BEMERKUNGEN:
+
+BEMERKUNGEN
+===========
+
    Das CustomizeObject() im Standard-VC gibt nur den zukuenftigen Objektnamen
    zurueck und macht sonst nix.
 
-BEISPIELE:
+
+BEISPIELE
+=========
+
    create() eines VC-Objektes:
-   
+
+
+
    protected void create() {
      ...
-     
+
+
+
      // wer bin ich denn eigentlich?
      string myname = previous_object()->CustomizeObject();
      switch(myname) {
-       // Kram konfigurier, ja nach myname... 
+       // Kram konfigurier, ja nach myname...
      }
-     
+
+
+
      ...
    }
 
-SIEHE AUCH:
-     virtual_compiler
-     CustomizeObject(), Validate(), NoParaObjects(), 
-     P_COMPILER_PATH, P_PARA
-     /std/virtual/v_compiler.c
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   virtual_compiler
+   CustomizeObject(), Validate(), NoParaObjects(),
+   P_COMPILER_PATH, P_PARA
+   /std/virtual/v_compiler.c
+
 21.10.2007, Zesstra
diff --git a/doc/lfun/Damage b/doc/lfun/Damage
index 3258531..b36061b 100644
--- a/doc/lfun/Damage
+++ b/doc/lfun/Damage
@@ -1,34 +1,56 @@
+
 Damage()
+********
 
-FUNKTION:
-     int Damage(int dam);
 
-DEFINIERT IN:
-     /std/armour/combat.c und
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     dam  Der Wert, mit dem die Waffe/Ruestung beschaedig werden soll.
+   int Damage(int dam);
 
-BESCHREIBUNG:
-     P_WC bzw. P_AC wird um dam reduziert und P_DAMAGED wird um
-     dam erhoeht.
-     Bei dam>0 wird das Objekt beschaedigt, bei dam<0 repariert.
-     Dabei werden sowohl die Obergrenzen (s. /sys/combat.h) wie auch
-     die Untergrenzen (Waffen:30, Ruestungen: 0) fuer P_WC und P_AC
-     beachtet. Es kann auch nicht mehr repariert werden, als vorher
-     beschaedigt wurde.
 
-RUeCKGABEWERT:
-     Der Wert der Beschaedigung, die tatsaechlich vorgenommen wurde.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Ist das Objekt in Benutzung, setzt die Funktion Damage automatisch
-     die Properties P_TOTAL_WC bzw. P_TOTAL_AC in dem benutzenden Spieler
-     auf die richtigen Werte.
+   /std/armour/combat.c und
+   /std/weapon/combat.c
 
-SIEHE AUCH:
-     /std/armour/combat.c, /std/weapon/combat.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   dam  Der Wert, mit dem die Waffe/Ruestung beschaedig werden soll.
+
+
+BESCHREIBUNG
+============
+
+   P_WC bzw. P_AC wird um dam reduziert und P_DAMAGED wird um
+   dam erhoeht.
+   Bei dam>0 wird das Objekt beschaedigt, bei dam<0 repariert.
+   Dabei werden sowohl die Obergrenzen (s. /sys/combat.h) wie auch
+   die Untergrenzen (Waffen:30, Ruestungen: 0) fuer P_WC und P_AC
+   beachtet. Es kann auch nicht mehr repariert werden, als vorher
+   beschaedigt wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Wert der Beschaedigung, die tatsaechlich vorgenommen wurde.
+
+
+BEMERKUNGEN
+===========
+
+   Ist das Objekt in Benutzung, setzt die Funktion Damage automatisch
+   die Properties P_TOTAL_WC bzw. P_TOTAL_AC in dem benutzenden Spieler
+   auf die richtigen Werte.
+
+
+SIEHE AUCH
+==========
+
+   /std/armour/combat.c, /std/weapon/combat.c
+
 Last modified: Thu May 22 10:13:23 1997 by Paracelsus
diff --git a/doc/lfun/DeAssocMember b/doc/lfun/DeAssocMember
index 5f35326..f47d548 100644
--- a/doc/lfun/DeAssocMember
+++ b/doc/lfun/DeAssocMember
@@ -1,48 +1,71 @@
 
 DeAssocMember()
+***************
 
 
-FUNKTION:
-        int DeAssocMember(object npc)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   int DeAssocMember(object npc)
 
-ARGUMENTE:
-        Der NPC, der nicht mehr zugeordnet sein soll.
 
-BESCHREIBUNG:
-        Hebt die Zuordnung eines NPCs zu einem Spieler auf.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        1, falls Aufhebung erfolgreich, sonst 0.
+   /std/living/team.c
 
-BEISPIEL:
-        void fun(object pl)
-        {
-         if ( pl && pl->DeAssocMember(this_object()) )
-          tell_object(pl,break_string(
-              "Ich kaempfe nun nicht mehr auf Deiner Seite!\n",78,
-              "Ein Feuerteufel teilt Dir mit:");
-         ...
-        }
 
-BEMERKUNGEN:
-        Kann nur von Gilden, Spellbooks, vom Objekt selber und vom
-        zugeordneten NPC aufgerufen werden.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, InsertEnemyTeam, SelectNearEnemy,
-                    SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+   Der NPC, der nicht mehr zugeordnet sein soll.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Hebt die Zuordnung eines NPCs zu einem Spieler auf.
+
+
+RUECKGABEWERT
+=============
+
+   1, falls Aufhebung erfolgreich, sonst 0.
+
+
+BEISPIEL
+========
+
+   void fun(object pl)
+   {
+    if ( pl && pl->DeAssocMember(this_object()) )
+     tell_object(pl,break_string(
+         "Ich kaempfe nun nicht mehr auf Deiner Seite!\n",78,
+         "Ein Feuerteufel teilt Dir mit:");
+    ...
+   }
+
+
+BEMERKUNGEN
+===========
+
+   Kann nur von Gilden, Spellbooks, vom Objekt selber und vom
+   zugeordneten NPC aufgerufen werden.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, InsertEnemyTeam, SelectNearEnemy,
+               SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/DeclAdj b/doc/lfun/DeclAdj
index f6e4244..d7a7f91 100644
--- a/doc/lfun/DeclAdj
+++ b/doc/lfun/DeclAdj
@@ -1,46 +1,68 @@
+
 DeclAdj()
+*********
 
-FUNKTION:
-     varargs string DeclAdj( string adj, int casus, int demon);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     adj
-          Das zu deklinierende Adjektiv.
+   varargs string DeclAdj( string adj, int casus, int demon);
 
-     casus
-          Der Fall, in den es dekliniert werden soll.
 
-     demon
-          Bezieht sich das Adjektiv auf einen bestimmten oder einen
-          unbestimmten Gegenstand?
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-     Dekliniert das uebergebene Adjektiv in den angegebenen Fall. Ist demon
-     ungleich Null, so wird das Adjektiv so behandelt, als wuerde es sich
-     auf einen bestimmten Gegenstand beziehen, ansonsten bezieht es sich auf
-     einen unbestimmten Gegenstand.
+   /std/thing/language.c
 
-RUeCKGABEWERT:
-     Das deklinierte Adjektiv. Es wird zusaetzlich noch ein Leerzeichen
-     hinten angefuegt!
 
-BEISPIELE:
-     Zunaechst ein bestimmtes Adjektiv:
+ARGUMENTE
+=========
 
-     printf("Der %sBall.\n", ball->DeclAdj("gruen", WER, 1);
+   adj
+        Das zu deklinierende Adjektiv.
 
-     Nun ein unbestimmtes Adjektiv:
+   casus
+        Der Fall, in den es dekliniert werden soll.
 
-     printf("Ein %sBall.\n", ball->DeclAdj("gruen", WER, 0);
+   demon
+        Bezieht sich das Adjektiv auf einen bestimmten oder einen
+        unbestimmten Gegenstand?
 
-     Da DeclAdj() "gruene " bzw. "gruener " zurueckgibt, darf zwischen dem
-     "%s" und dem "Ball" kein Leerzeichen stehen!
 
-SIEHE AUCH:
-     /std/thing/language.c
+BESCHREIBUNG
+============
 
-----------------------------------------------------------------------------
+   Dekliniert das uebergebene Adjektiv in den angegebenen Fall. Ist demon
+   ungleich Null, so wird das Adjektiv so behandelt, als wuerde es sich
+   auf einen bestimmten Gegenstand beziehen, ansonsten bezieht es sich auf
+   einen unbestimmten Gegenstand.
+
+
+RUeCKGABEWERT
+=============
+
+   Das deklinierte Adjektiv. Es wird zusaetzlich noch ein Leerzeichen
+   hinten angefuegt!
+
+
+BEISPIELE
+=========
+
+   Zunaechst ein bestimmtes Adjektiv:
+
+   printf("Der %sBall.\n", ball->DeclAdj("gruen", WER, 1);
+
+   Nun ein unbestimmtes Adjektiv:
+
+   printf("Ein %sBall.\n", ball->DeclAdj("gruen", WER, 0);
+
+   Da DeclAdj() "gruene " bzw. "gruener " zurueckgibt, darf zwischen dem
+   "%s" und dem "Ball" kein Leerzeichen stehen!
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/language.c
+
 Last modified: Wed May 8 10:18:05 1996 by Wargon
diff --git a/doc/lfun/Defend b/doc/lfun/Defend
index e02264a..aa53945 100644
--- a/doc/lfun/Defend
+++ b/doc/lfun/Defend
@@ -1,150 +1,175 @@
+
 Defend()
-FUNKTION:
-     public int Defend(int dam, string|string* dam_type, int|mapping spell, 
-                        object enemy)
+********
 
-DEFINIERT IN:
-     /std/living/combat
 
-ARGUMENTE:
-     int dam                  initiale Staerke des Angriffs (10 dam ~ 1 HP)
-     string* dam_type         Art(en) des Schadens, der angerichtet werden
-                              soll
-                              Muss ein Array von Schadenstypen sein,
-                              alte Objekte uebergeben hier manchmal strings.
-     int/mapping spell        - 0 fuer normale Angriffe (keine Zauber)
-                              - 1 fuer Zauber (Standardruestungen ignorieren)
-                              - mapping fuer mehr Informationen
-                              Heute bitte nach Moeglichkeit ein Mapping
-                              uebergeben.
-     object enemy             der Feind/Schadenverursacher
+FUNKTION
+========
 
-BESCHREIBUNG:
-     1. Generell
-     Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark die
-     Ruestungen und koerpereigenen Abwehrkraefte sind und die Staerke des
-     Schadens dementsprechend vermindert.
-     Ggf. wird der Schaden zugefuegt und der Feind in  die Liste der Feinde
-     aufgenommen. Der Schaden betraegt:
-      (dam-Summe(Ruestungsstaerken)-random(P_BODY+A_DEX))*CheckResistance/10
-     aber nicht unter 0.
+   public int Defend(int dam, string|string* dam_type, int|mapping spell,
+                      object enemy)
 
-     2. Der Parameter 'spell'
-     Ist 'spell' 0, dann gilt der Angriff als normale physische Attacke
-     Uebergibt man als 'spell'-Parameter ein Mapping, so gibt es dafuer
-     diverse Flags, die das Ergebnis manipulieren (in new_skills.h
-     enthalten). Nichtangabe eines Flags gilt als 0.
 
-     - SP_PHYSICAL_ATTACK ---------- 0/1
-                1, wenn Ruestungen wirken sollen, 0 sonst
-                -> entspricht !spell, wenn dieses Int ist
-     - SP_NO_ENEMY ----------------- 0/1
-                1, falls der Angriff nicht toedlich ist, es also keinen echten
-                Gegner gibt
-                -> es wird dann reduce_hit_points() gerufen statt do_damage()
-     - SP_NO_ACTIVE_DEFENSE -------- 0/1
-                1, falls aktive Abwehren (wie zurueckschlagende Amulette,
-                Karateabwehren oder Ausweichmanoever) unterbleiben sollen
-                -> zB bei Kratzen durch Dornen oder Fall aus grosser Hoehe
-                   ist aktive Abwehr oder Ausweichen unlogisch
-     - SP_RECURSIVE ---------------- 0/1
-                1, falls der Spell aus einem Defend gerufen wurde (oder einer
-                DefendFunc)
-                -> verhindert Rekursionsprobleme
-     - SP_NAME --------------------- string
-                Name des Spells
-     - SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY, values int>=0
-                Die Schutzwirkung durch P_AC/Magie einer Ruestung wird
-                typabhaengig reduziert. Aufbau eines Mappings im Beispiel:
-                ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht
-                  P_BODY:  50,  // Koerper zu 50%
-                  AT_BELT: 600  // Guertel zu 600%
-                ])
-                -> alle 'fehlenden' Eintraege wirken normal
-     - SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays
-                0, fuer keine Treffermeldung, 1 sonst
-                In einem Array koennen Ersatz-Treffermeldungen definiert
-                werden. Format ist:
-                ({
-                 ({ int lphit1, string mess_me,
-                                string mess_en,
-                                string mess_room }),
-                 ({ lphit2, mess_me, mess_en, mess_room }),
-                 ...
-                 ({ lphitn, mess_me, mess_en, mess_room }),
-                })
-                wobei lphit1<lphit2<...<lphitn sein muss, d.h. das Array-
-                Array aufsteigend sortiert.
+DEFINIERT IN
+============
 
-                Ist ein Treffer x LP hart, werden die Meldungen des lphit-
-                Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
-                liegt.
+   /std/living/combat
 
-                In den Meldungen mess_me (an den Getroffenen), mess_en (an
-                den Feind), mess_room (an die restlichen Umstehenden) koennen
-                Ersatzstrings wie folgt verwendet werden:
-                @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen (TO)
-                @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes (enemy)
-     - EINFO_DEFEND ------------ Mapping
-                Dieses Mapping liefert erweiterte Informationen zu dem
-                bisherigen Ablauf des aktiven Attacks.
-                Die verfuegbaren Informationen sind in der Manpage zu
-                DefendInfo festgehalten.
 
-     3. Reihenfolgen in Defend
-     - das Living wird angegriffen, wenn
-       - P_NO_ATTACK != 0
-       - 'enemy' existiert und kein netztoter Spieler ist
-     - P_DEFENDERS werden durchgegangen (und eventuell benachrichtigt)
-     - P_TMP_ATTACK_HOOK wird abgefragt
-     - die Ruestungen werden vom Schaden gegebenenfalls abgezogen
-     - magischer Ausweichskill beruecksichtigt
-     - sensitive Objekte werden ggf. benachrichtigt
-     - InternalModifyDefend wird gerufen
-     - Koerperabwehr abgezogen
-     - der Schaden an do_damage()/reduce_hit_points() uebergeben
-     - Flucht ueberpruefen mit CheckWimpyAndFlee()
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     Ruestungen wirken konventionell nur, wenn mindestens ein Schadensanteil
-     mechanisch ist und es kein Spell oder ein Spell mit SP_PHYSICAL_ATTACK
-     auf 1 ist.
+   int dam                  initiale Staerke des Angriffs (10 dam ~ 1 HP)
+   string* dam_type         Art(en) des Schadens, der angerichtet werden
+                            soll
+                            Muss ein Array von Schadenstypen sein,
+                            alte Objekte uebergeben hier manchmal strings.
+   int/mapping spell        - 0 fuer normale Angriffe (keine Zauber)
+                            - 1 fuer Zauber (Standardruestungen ignorieren)
+                            - mapping fuer mehr Informationen
+                            Heute bitte nach Moeglichkeit ein Mapping
+                            uebergeben.
+   object enemy             der Feind/Schadenverursacher
 
-     Defend() beruecksichtigt magische Verteidigungen, die der Spieler bei
-     sich hat, sollte also aus Fairness gegenueber den Objekten anderer
-     Magier immer dem direkten reduce_hit_points() oder do_damage()
-     vorgezogen werden. Mittels der Flags in 'spell' kann man sehr viel
-     aendern.
 
-RUECKGABEWERT:
-     Hoehe des tatsaechlichen Schadens. Dies kann mehr sein als die
-     Lebenspunkte des Lebewesens.
+BESCHREIBUNG
+============
+
+   1. Generell
+   Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark die
+   Ruestungen und koerpereigenen Abwehrkraefte sind und die Staerke des
+   Schadens dementsprechend vermindert.
+   Ggf. wird der Schaden zugefuegt und der Feind in  die Liste der Feinde
+   aufgenommen. Der Schaden betraegt:
+    (dam-Summe(Ruestungsstaerken)-random(P_BODY+A_DEX))*CheckResistance/10
+   aber nicht unter 0.
+
+   2. Der Parameter 'spell'
+   Ist 'spell' 0, dann gilt der Angriff als normale physische Attacke
+   Uebergibt man als 'spell'-Parameter ein Mapping, so gibt es dafuer
+   diverse Flags, die das Ergebnis manipulieren (in new_skills.h
+   enthalten). Nichtangabe eines Flags gilt als 0.
+
+   - SP_PHYSICAL_ATTACK ---------- 0/1
+              1, wenn Ruestungen wirken sollen, 0 sonst
+              -> entspricht !spell, wenn dieses Int ist
+   - SP_NO_ENEMY ----------------- 0/1
+              1, falls der Angriff nicht toedlich ist, es also keinen echten
+              Gegner gibt
+              -> es wird dann reduce_hit_points() gerufen statt do_damage()
+   - SP_NO_ACTIVE_DEFENSE -------- 0/1
+              1, falls aktive Abwehren (wie zurueckschlagende Amulette,
+              Karateabwehren oder Ausweichmanoever) unterbleiben sollen
+              -> zB bei Kratzen durch Dornen oder Fall aus grosser Hoehe
+                 ist aktive Abwehr oder Ausweichen unlogisch
+   - SP_RECURSIVE ---------------- 0/1
+              1, falls der Spell aus einem Defend gerufen wurde (oder einer
+              DefendFunc)
+              -> verhindert Rekursionsprobleme
+   - SP_NAME --------------------- string
+              Name des Spells
+   - SP_REDUCE_ARMOUR ------------ Mapping: keys AT_X/P_BODY, values int>=0
+              Die Schutzwirkung durch P_AC/Magie einer Ruestung wird
+              typabhaengig reduziert. Aufbau eines Mappings im Beispiel:
+              ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht
+                P_BODY:  50,  // Koerper zu 50%
+                AT_BELT: 600  // Guertel zu 600%
+              ])
+              -> alle 'fehlenden' Eintraege wirken normal
+   - SP_SHOW_DAMAGE -------------- 0/1 oder Array von Arrays
+              0, fuer keine Treffermeldung, 1 sonst
+              In einem Array koennen Ersatz-Treffermeldungen definiert
+              werden. Format ist:
+              ({
+               ({ int lphit1, string mess_me,
+                              string mess_en,
+                              string mess_room }),
+               ({ lphit2, mess_me, mess_en, mess_room }),
+               ...
+               ({ lphitn, mess_me, mess_en, mess_room }),
+              })
+              wobei lphit1<lphit2<...<lphitn sein muss, d.h. das Array-
+              Array aufsteigend sortiert.
+
+              Ist ein Treffer x LP hart, werden die Meldungen des lphit-
+              Arrays ausgegeben, dessen Wert am naehesten unter dem Schaden
+              liegt.
+
+              In den Meldungen mess_me (an den Getroffenen), mess_en (an
+              den Feind), mess_room (an die restlichen Umstehenden) koennen
+              Ersatzstrings wie folgt verwendet werden:
+              @WER1/@WESSEN1/@WEM1/@WEN1 - name(casus) des Getroffenen (TO)
+              @WER2/@WESSEN2/@WEM2/@WEN2 - name(casus) des Feindes (enemy)
+   - EINFO_DEFEND ------------ Mapping
+              Dieses Mapping liefert erweiterte Informationen zu dem
+              bisherigen Ablauf des aktiven Attacks.
+              Die verfuegbaren Informationen sind in der Manpage zu
+              DefendInfo festgehalten.
+
+   3. Reihenfolgen in Defend
+   - das Living wird angegriffen, wenn
+     - P_NO_ATTACK != 0
+     - 'enemy' existiert und kein netztoter Spieler ist
+   - P_DEFENDERS werden durchgegangen (und eventuell benachrichtigt)
+   - P_TMP_ATTACK_HOOK wird abgefragt
+   - die Ruestungen werden vom Schaden gegebenenfalls abgezogen
+   - magischer Ausweichskill beruecksichtigt
+   - sensitive Objekte werden ggf. benachrichtigt
+   - InternalModifyDefend wird gerufen
+   - Koerperabwehr abgezogen
+   - der Schaden an do_damage()/reduce_hit_points() uebergeben
+   - Flucht ueberpruefen mit CheckWimpyAndFlee()
+
+
+BEMERKUNGEN
+===========
+
+   Ruestungen wirken konventionell nur, wenn mindestens ein Schadensanteil
+   mechanisch ist und es kein Spell oder ein Spell mit SP_PHYSICAL_ATTACK
+   auf 1 ist.
+
+   Defend() beruecksichtigt magische Verteidigungen, die der Spieler bei
+   sich hat, sollte also aus Fairness gegenueber den Objekten anderer
+   Magier immer dem direkten reduce_hit_points() oder do_damage()
+   vorgezogen werden. Mittels der Flags in 'spell' kann man sehr viel
+   aendern.
+
+
+RUECKGABEWERT
+=============
+
+   Hoehe des tatsaechlichen Schadens. Dies kann mehr sein als die
+   Lebenspunkte des Lebewesens.
 
 BEISPIELE (SIEHE AUCH Defend_bsp):
-     // ein simpler Angriff:
-     enem->Defend(100, ({DT_BLUDGEON}), 0, this_object());
+   // ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}), 0,
+   this_object());
 
-     // ein magischer Angriff (ohne Treffermeldung):
-     enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), 1, this_object());
+   // ein magischer Angriff (ohne Treffermeldung): enem->Defend(100,
+   ({DT_BLUDGEON, DT_FIRE}), 1, this_object());
 
-     // ein magischer Angriff mit Treffermeldung:
-     enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_SHOW_DAMAGE:1]),
-                         this_object());
+   // ein magischer Angriff mit Treffermeldung: enem->Defend(100,
+   ({DT_BLUDGEON, DT_FIRE}), ([SP_SHOW_DAMAGE:1]),
 
-SIEHE AUCH:
-     Angriff:   Attack(L), P_NO_ATTACK, InsertEnemy(L)
-     Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE,
-                do_damage(L), reduce_hit_points(L)
-     Schutz:    P_DEFENDERS, InformDefend(L), DefendOther(L)
-                P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L)
-                P_BODY, A_DEX
-     Daten:     P_LAST_COMBAT_TIME
-                P_LAST_DAMTYPES, P_LAST_DAMTIME, P_LAST_DAMAGE
-                P_DAMAGE_MSG
-     Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
-     Sonstiges: CheckSensitiveAttack(L)
-                InternalModifyDefend(L)
-                UseSkill(L),
-                DefendInfo
+      this_object());
+
+
+SIEHE AUCH
+==========
+
+   Angriff:   Attack(L), P_NO_ATTACK, InsertEnemy(L)
+   Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE,
+              do_damage(L), reduce_hit_points(L)
+   Schutz:    P_DEFENDERS, InformDefend(L), DefendOther(L)
+              P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L)
+              P_BODY, A_DEX
+   Daten:     P_LAST_COMBAT_TIME
+              P_LAST_DAMTYPES, P_LAST_DAMTIME, P_LAST_DAMAGE
+              P_DAMAGE_MSG
+   Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
+   Sonstiges: CheckSensitiveAttack(L)
+              InternalModifyDefend(L)
+              UseSkill(L),
+              DefendInfo
 
 15.09.2010, Zesstra
diff --git a/doc/lfun/DefendFunc b/doc/lfun/DefendFunc
index 7043e04..1683b3f 100644
--- a/doc/lfun/DefendFunc
+++ b/doc/lfun/DefendFunc
@@ -1,78 +1,107 @@
+
+DefendFunc()
+************
+
+
 DefendFunc(L)
+=============
 
-FUNKTION:
-     int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
 
-DEFINIERT IN:
-     eigenen Objekten; fuer /std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     dtyp
-          Schadenstypen der Angriffsart.
-          Sollte heute ein string* sein.
-     spell
-          0 bei veralteten konventionellen Angriffen im Regelfall jedoch
-          ein Mapping mit weiteren Infos.
-          Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
-          1.
-     enemy
-          Der angreifende Gegner
+   int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
 
-BESCHREIBUNG:
-     Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
-     auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
-     Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
 
-RUeCKGABEWERT:
-     Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
-     zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
-     dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
-     Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
-     die DefendFuncs nicht konstant wirken.
+   eigenen Objekten; fuer /std/armour/combat.c
 
-     Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
-     SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
 
-BEISPIELE:
-     Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
-     und bei Angriffen durch Geister geschwaecht wird:
+ARGUMENTE
+=========
 
-     void create()
-     {
-       ::create();
+   dtyp
+        Schadenstypen der Angriffsart.
+        Sollte heute ein string* sein.
+   spell
+        0 bei veralteten konventionellen Angriffen im Regelfall jedoch
+        ein Mapping mit weiteren Infos.
+        Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
+        1.
+   enemy
+        Der angreifende Gegner
 
-       SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
-       SetProp(P_AC, 20);
-       ...
-       // Die DefendFunc() ist in der Ruestung selbst definiert
-       SetProp(P_DEFEND_FUNC, this_object());
-     }
 
-     int DefendFunc(string *dtyp, mixed spell, object enemy)
-     {
-       int prot;
+BESCHREIBUNG
+============
 
-       // Zuerst fragen wir den Angriff durch Feuer ab:
-       if (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den Schadenstypen
-         prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
-                                // kommt man also maximal auf 14+20 = 34,
-                                // liegt also unter der fuer AT_ARMOUR
-                                // geltenden Obergrenze
+   Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
+   auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
+   Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
 
-       // Und jetzt der Geistertest
-       if (enemy->QueryProp(P_RACE) == "Geist" ||
-           enemy->is_class_member(CL_GHOST))
-         prot -= random(10);
 
-       // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
-       return prot;
-     }
+RUeCKGABEWERT
+=============
 
-SIEHE AUCH:
-     P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
+   Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
 
-----------------------------------------------------------------------------
+
+BEMERKUNGEN
+===========
+
+   Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
+   zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
+   dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
+   Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
+   die DefendFuncs nicht konstant wirken.
+
+   Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
+   SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
+
+
+BEISPIELE
+=========
+
+   Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
+   und bei Angriffen durch Geister geschwaecht wird:
+
+   void create()
+   {
+     ::create();
+
+     SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
+     SetProp(P_AC, 20);
+     ...
+     // Die DefendFunc() ist in der Ruestung selbst definiert
+     SetProp(P_DEFEND_FUNC, this_object());
+   }
+
+   int DefendFunc(string *dtyp, mixed spell, object enemy)
+   {
+     int prot;
+
+     // Zuerst fragen wir den Angriff durch Feuer ab:
+     if (member(dtyp, DT_FIRE) >= 0)  // Feuer gehoert zu den Schadenstypen
+       prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
+                              // kommt man also maximal auf 14+20 = 34,
+                              // liegt also unter der fuer AT_ARMOUR
+                              // geltenden Obergrenze
+
+     // Und jetzt der Geistertest
+     if (enemy->QueryProp(P_RACE) == "Geist" ||
+         enemy->is_class_member(CL_GHOST))
+       prot -= random(10);
+
+     // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
+     return prot;
+   }
+
+
+SIEHE AUCH
+==========
+
+   P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
+
 Last modified: 18.Jul 2006 Muadib
diff --git a/doc/lfun/DefendInfo b/doc/lfun/DefendInfo
index 460352a..21d41ac 100644
--- a/doc/lfun/DefendInfo
+++ b/doc/lfun/DefendInfo
@@ -1,168 +1,216 @@
-DefendInfo
-FUNKTION:
 
-DEFINIERT IN:
-     /sys/combat.h
+DefendInfo()
+************
 
-ARGUMENTE:
 
-BESCHREIBUNG:
-     Die DefendInformationen werden im Runde eines Attack/Defend Vorgangs 
-     in Attack initial angelegt und dem Defend ueber den Parameter spell
-     uebergeben. Ist dieser Parameter ein Mapping, so sind die 
-     DefendInformationen ueber den Key EINFO_DEFEND zu erhalten.
-     Die Informationen liegen in Form eines Mappings vor.
-     Vor Zugriff sollte immer auf die Existenz dieses Keys in dem Mapping
-     geprueft werden, da nicht alle Informationen immer existieren.
-     Die Keys sind in combat.h definiert und sind folgende:
-     
-    ORIGINAL_AINFO - Mapping 
-        Hier ist eine Kopie des originalen ainfo-mappings des Attacks 
-        vorhanden mit folgenden Eintraegen:
-        Immer vorhandene Eintraege:
-          SI_ENEMY              der angegriffene Gegner
-        
-        Angriff mit gezueckter Waffe:
-          P_WEAPON              das Waffenobjekt selbst
-          P_WEAPON_TYPE         P_WEAPON_TYPE der Waffe
-          P_WC                  P_WC der Waffe
-          P_NR_HANDS            P_NR_HANDS der Waffe
-          SI_SKILLDAMAGE_TYPE   P_DAM_TYPE der Waffe
-          SI_SKILLDAMAGE        waffe->QueryDamage(enemy)
-             bei vorhandenem Zweihandskill SK_TWOHANDED wird nur der durch 
-             den Skill modifizierte Schadenswert uebernommen
-          SI_SKILLDAMAGE_MSG    "mit "+waffe->name(WEM,0)
-          SI_SKILLDAMAGE_MSG2   "mit "+waffe->name(WEM,1)
-          SI_SPELL              0
+FUNKTION
+========
 
-        Angriff mit blossen Haenden:
-          P_WEAPON_TYPE         WT_HANDS
-          P_WC                  P_HANDS[1]
-          SI_SKILLDAMAGE        Schadenswert, aus P_HANDS[1] und A_STR 
-                                berechnet
-          SI_SKILLDAMAGE_TYPE   P_HANDS[2]
-          SI_SKILLDAMAGE_MSG
-          SI_SKILLDAMAGE_MSG2   beides P_HANDS[0]
-          SI_SPELL              0
-          
-        Angriff mit einem Spell (SK_MAGIC_ATTACK):
-          SI_SKILLDAMAGE        Schadenswert des Spells
-          SI_SKILLDAMAGE_TYPE   Schadenstypen des Spells
-          SI_SKILLDAMAGE_MSG    Schadensmeldung des Spells, wenn vorhanden,
-                                sonst "mit magischen Faehigkeiten"
-          SI_SKILLDAMAGE_MSG2   entsprechende Meldung des Spells, wenn 
-                                gesetzt, ansonsten identisch mit 
-                                SI_SKILLDAMAGE_MSG
-          P_WEAPON_TYPE         P_WEAPON_TYPE des Spells, wenn vorhanden,
-                                sonst WT_MAGIC
-          SI_SPELL              SI_SPELL des Spells
-          
-        Hinweise:
-        - Alle Eintraege in diesem Mapping koennen bereits durch
-          InternalModifyAttack() veraendert worden sein.
-        - Die Daten werden mittels deep_copy(ainfo) eingetragen.
-        - Daten in den Eintraegen SI_SKILLDAMAGE* und SI_SPELL koennen bei
-          physikalischen Angriffen durch die Skills FIGHT(P_WEAPON_TYPE) oder
-          SK_FIGHT oder durch einen P_TMP_ATTACK_MOD bzw. Hook vom Typ 
-          H_HOOK_ATTACK_MOD modifiziert worden sein.
-        
-    ORIGINAL_DAM - int
-        Der Originalschaden aus dem Attack
 
-    ORIGINAL_DAM_TYPE - string/string* 
-        Der Originaldamagetyp aus dem Attack
+DEFINIERT IN
+============
 
-    CURRENT_DAM - int
-        Der momentane Schaden, nach schon erfolgten Modifikationen
-  
-    CURRENT_DAM_TYPE - string/string*
-        Der momentane Damagetyp, nach schon erfolgten Modifikationen
-  
-    ENEMY_INSERTED - int
-        0 oder 1 je nachdem ob der Angreifer schon in der enemy-list
-        vorhanden war oder nicht
-  
-    RFR_REDUCE - int 
-        0 oder reduzierter Schaden durch RFR Modifikation
-  
-    PRESENT_DEFENDERS - Array 
-        Liste der durch InformDefend informierten Defender als Objekt.
-        Ein Defender wird immer NACH InformDefend
-        dazugefuegt
-  
-    DEFENDING_DEFENDER - Array ({})
-        Hat ein durch InformDefend ein Defender verteidigt, so wird
-        fuer diesen Defender ein Eintrag in diesem Array vorgenommen,
-        welcher folgende Struktur besitzt.
-                ({
-                        DEF_DEFENDER - Object
-                          Der Verteidiger, welcher VOR
-                          DefendOther eingefuegt wird
-                        DEF_DAM - int
-                          Der veraenderte Schaden, welcher NACH 
-                          DefendOther eingefuegt wird
-                        DEF_DAMTYPE string/string*  
-                          Die veraenderte Schadensart, welche 
-                          NACH DefendOther eingefuegt wird
-                        DEF_SPELL - Mapping   
-                          Das Mapping des veraenderten Spells, welches
-                          als Kopie NACH DefendOther eingefuegt wird
-                })
-  
-    DEFEND_HOOK - Int/Array 
-        DI_NOHOOK, wenn kein Hook da war, DI_HOOKINTERRUPT, wenn der
-        Hook das Defend unterbricht, DI_HOOK, wenn ein Hook vorhanden 
-        ist, dieser das Defend aber unveraendert laesst.
-        Veraendert ein Hook das Defend, so ist hier ein Array zu finden
-        mit den veraenderten Parametern in der Struktur:
-                ({
-                        HOOK_DAM - int
-                           Der veraenderte Schaden
-                        HOOK_DAMTYPE - string/string*   
-                           Die veraenderte Schadensart
-                        HOOK_SPELL - Mapping 
-                           Das Mapping des veraenderten Spells als Kopie
-                })
-  
-    DEFEND_ARMOURS - Mapping (2 Werte pro Key)
-        Liste der beruecksichtigten Ruestungen. Fuer jede Ruestung
-        wird ein Eintrag vorgenommen, mit dem Objekt der jeweiligen
-        Ruestung als Key. Hierbei werden die Ruestungen erst eingetragen,
-        wenn ihr jeweiliges QueryDefend() aufgerufen wird, d.h. es sind nicht
-        von Anfang an alle getragenen Ruestung drin. Jeder Eintrag im Mapping
-        besitzt die folgenden 2 Werte:
-                DEF_ARMOUR_DAM - int 
-                    Der Schaden NACH QueryDefend (vorher 0)
-                DEF_ARMOUR_PROT - int
-                    Verteidigungswert der Ruestung VOR DefendFunc
-        Bsp: Ich will wissen, wie gut 'ruestung' schuetzte:
-             spell[EINFO_DEFEND][DEFEND_ARMOURS][ruestung,DEF_ARMOUR_PROT]
+   /sys/combat.h
 
-    DEFEND_GUILD - Array 
-        Eine Liste mit der Modifikation der Gilde mit der Struktur
-                ({
-                        GUILD_DAM - int
+
+ARGUMENTE
+=========
+
+
+BESCHREIBUNG
+============
+
+    Die DefendInformationen werden im Runde eines Attack/Defend Vorgangs
+    in Attack initial angelegt und dem Defend ueber den Parameter spell
+    uebergeben. Ist dieser Parameter ein Mapping, so sind die
+    DefendInformationen ueber den Key EINFO_DEFEND zu erhalten.
+    Die Informationen liegen in Form eines Mappings vor.
+    Vor Zugriff sollte immer auf die Existenz dieses Keys in dem Mapping
+    geprueft werden, da nicht alle Informationen immer existieren.
+    Die Keys sind in combat.h definiert und sind folgende:
+
+
+
+   ORIGINAL_AINFO - Mapping
+       Hier ist eine Kopie des originalen ainfo-mappings des Attacks
+       vorhanden mit folgenden Eintraegen:
+       Immer vorhandene Eintraege:
+         SI_ENEMY              der angegriffene Gegner
+
+
+
+       Angriff mit gezueckter Waffe:
+         P_WEAPON              das Waffenobjekt selbst
+         P_WEAPON_TYPE         P_WEAPON_TYPE der Waffe
+         P_WC                  P_WC der Waffe
+         P_NR_HANDS            P_NR_HANDS der Waffe
+         SI_SKILLDAMAGE_TYPE   P_DAM_TYPE der Waffe
+         SI_SKILLDAMAGE        waffe->QueryDamage(enemy)
+            bei vorhandenem Zweihandskill SK_TWOHANDED wird nur der durch
+            den Skill modifizierte Schadenswert uebernommen
+         SI_SKILLDAMAGE_MSG    "mit "+waffe->name(WEM,0)
+         SI_SKILLDAMAGE_MSG2   "mit "+waffe->name(WEM,1)
+         SI_SPELL              0
+
+       Angriff mit blossen Haenden:
+         P_WEAPON_TYPE         WT_HANDS
+         P_WC                  P_HANDS[1]
+         SI_SKILLDAMAGE        Schadenswert, aus P_HANDS[1] und A_STR
+                               berechnet
+         SI_SKILLDAMAGE_TYPE   P_HANDS[2]
+         SI_SKILLDAMAGE_MSG
+         SI_SKILLDAMAGE_MSG2   beides P_HANDS[0]
+         SI_SPELL              0
+
+
+
+       Angriff mit einem Spell (SK_MAGIC_ATTACK):
+         SI_SKILLDAMAGE        Schadenswert des Spells
+         SI_SKILLDAMAGE_TYPE   Schadenstypen des Spells
+         SI_SKILLDAMAGE_MSG    Schadensmeldung des Spells, wenn vorhanden,
+                               sonst "mit magischen Faehigkeiten"
+         SI_SKILLDAMAGE_MSG2   entsprechende Meldung des Spells, wenn
+                               gesetzt, ansonsten identisch mit
+                               SI_SKILLDAMAGE_MSG
+         P_WEAPON_TYPE         P_WEAPON_TYPE des Spells, wenn vorhanden,
+                               sonst WT_MAGIC
+         SI_SPELL              SI_SPELL des Spells
+
+
+
+       Hinweise:
+       - Alle Eintraege in diesem Mapping koennen bereits durch
+         InternalModifyAttack() veraendert worden sein.
+       - Die Daten werden mittels deep_copy(ainfo) eingetragen.
+       - Daten in den Eintraegen SI_SKILLDAMAGE* und SI_SPELL koennen bei
+         physikalischen Angriffen durch die Skills FIGHT(P_WEAPON_TYPE) oder
+         SK_FIGHT oder durch einen P_TMP_ATTACK_MOD bzw. Hook vom Typ
+         H_HOOK_ATTACK_MOD modifiziert worden sein.
+
+
+
+   ORIGINAL_DAM - int
+       Der Originalschaden aus dem Attack
+
+   ORIGINAL_DAM_TYPE - string/string*
+       Der Originaldamagetyp aus dem Attack
+
+   CURRENT_DAM - int
+       Der momentane Schaden, nach schon erfolgten Modifikationen
+
+
+
+   CURRENT_DAM_TYPE - string/string*
+       Der momentane Damagetyp, nach schon erfolgten Modifikationen
+
+
+
+   ENEMY_INSERTED - int
+       0 oder 1 je nachdem ob der Angreifer schon in der enemy-list
+       vorhanden war oder nicht
+
+
+
+   RFR_REDUCE - int
+       0 oder reduzierter Schaden durch RFR Modifikation
+
+
+
+   PRESENT_DEFENDERS - Array
+       Liste der durch InformDefend informierten Defender als Objekt.
+       Ein Defender wird immer NACH InformDefend
+       dazugefuegt
+
+
+
+   DEFENDING_DEFENDER - Array ({})
+       Hat ein durch InformDefend ein Defender verteidigt, so wird
+       fuer diesen Defender ein Eintrag in diesem Array vorgenommen,
+       welcher folgende Struktur besitzt.
+               ({
+                       DEF_DEFENDER - Object
+                         Der Verteidiger, welcher VOR
+                         DefendOther eingefuegt wird
+                       DEF_DAM - int
+                         Der veraenderte Schaden, welcher NACH
+                         DefendOther eingefuegt wird
+                       DEF_DAMTYPE string/string*
+                         Die veraenderte Schadensart, welche
+                         NACH DefendOther eingefuegt wird
+                       DEF_SPELL - Mapping
+                         Das Mapping des veraenderten Spells, welches
+                         als Kopie NACH DefendOther eingefuegt wird
+               })
+
+
+
+   DEFEND_HOOK - Int/Array
+       DI_NOHOOK, wenn kein Hook da war, DI_HOOKINTERRUPT, wenn der
+       Hook das Defend unterbricht, DI_HOOK, wenn ein Hook vorhanden
+       ist, dieser das Defend aber unveraendert laesst.
+       Veraendert ein Hook das Defend, so ist hier ein Array zu finden
+       mit den veraenderten Parametern in der Struktur:
+               ({
+                       HOOK_DAM - int
                           Der veraenderte Schaden
-                        GUILD_DAMTYPE - string/string*
+                       HOOK_DAMTYPE - string/string*
                           Die veraenderte Schadensart
-                })
-  
-    DEFEND_RESI - int
-        Schaden nach CheckResistance
-  
-    DEFEND_BODY - int
-        Schaden nach Beruecksichtigung des Bodies (nur
-        physikalisch)
-  
-    DEFEND_LOSTLP - int
-        Tatsaechlich abgezogene LP
-  
-    DEFEND_CUR_ARMOUR_PROT - int
-        Schutz der Ruestung vor Call der
-        DefendFunc. Ist nur in der DefendFunc definiert. Kann auch aus
-        DEFEND_ARMOURS entnommen werden
-     
-SIEHE AUCH:
-     Attack, Defend
+                       HOOK_SPELL - Mapping
+                          Das Mapping des veraenderten Spells als Kopie
+               })
+
+
+
+   DEFEND_ARMOURS - Mapping (2 Werte pro Key)
+       Liste der beruecksichtigten Ruestungen. Fuer jede Ruestung
+       wird ein Eintrag vorgenommen, mit dem Objekt der jeweiligen
+       Ruestung als Key. Hierbei werden die Ruestungen erst eingetragen,
+       wenn ihr jeweiliges QueryDefend() aufgerufen wird, d.h. es sind nicht
+       von Anfang an alle getragenen Ruestung drin. Jeder Eintrag im Mapping
+       besitzt die folgenden 2 Werte:
+               DEF_ARMOUR_DAM - int
+                   Der Schaden NACH QueryDefend (vorher 0)
+               DEF_ARMOUR_PROT - int
+                   Verteidigungswert der Ruestung VOR DefendFunc
+       Bsp: Ich will wissen, wie gut 'ruestung' schuetzte:
+            spell[EINFO_DEFEND][DEFEND_ARMOURS][ruestung,DEF_ARMOUR_PROT]
+
+   DEFEND_GUILD - Array
+       Eine Liste mit der Modifikation der Gilde mit der Struktur
+               ({
+                       GUILD_DAM - int
+                         Der veraenderte Schaden
+                       GUILD_DAMTYPE - string/string*
+                         Die veraenderte Schadensart
+               })
+
+
+
+   DEFEND_RESI - int
+       Schaden nach CheckResistance
+
+
+
+   DEFEND_BODY - int
+       Schaden nach Beruecksichtigung des Bodies (nur
+       physikalisch)
+
+
+
+   DEFEND_LOSTLP - int
+       Tatsaechlich abgezogene LP
+
+
+
+   DEFEND_CUR_ARMOUR_PROT - int
+       Schutz der Ruestung vor Call der
+       DefendFunc. Ist nur in der DefendFunc definiert. Kann auch aus
+       DEFEND_ARMOURS entnommen werden
+
+
+SIEHE AUCH
+==========
+
+   Attack, Defend
 
 18.Jul 2006 Muadib
diff --git a/doc/lfun/DefendOther b/doc/lfun/DefendOther
index a0b2277..f0386f2 100644
--- a/doc/lfun/DefendOther
+++ b/doc/lfun/DefendOther
@@ -1,85 +1,107 @@
+
 DefendOther()
+*************
 
-FUNKTION:
-	mixed DefendOther(int dam,mixed dam_type,mixed spell,object enemy);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	dam
-	  Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
-	  verursacht werden soll.
-	dam_type
-	  Der Schadenstyp (oder die Schadenstypen), der beim zu
-	  verteidigenden Lebewesen verursacht werden sollen.
-	spell
-	  Wenn das zu verteidigende Lebewesen mit Spells angegriffen wurde,
-	  so koennte man hier mehr Infos entnehmen.
-	enemy
-	  Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+   mixed DefendOther(int dam,mixed dam_type,mixed spell,object enemy);
 
-RUeCKGABEWERT:
-	Array mit den Eintraegen der gegebenenfalls veraenderten
-	uebergebenen Parameter: 
-            (1) dam      [Typ int], 
-            (2) dam_type [Typ string*], 
-            (3) spell    [Typ mapping].
 
-BESCHREIBUNG:
-	Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
-	umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen
-	mittels AddDefender() angemeldet wurden und sich der selben Umgebung
-	befinden.
-	Zumeist wird es sich bei den Objekten natuerlich ebenfalls um
-	andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet
-	sind, verteidigen sollen.
-	Bei einem Angriff auf das Lebewesen koennen alle Objekte per Aufruf
-	von DefendOther() in einen Angriff eingreifen, wobei die
-	Schadensstaerke, der Schadenstyp (die Schadenstypen),
-	Zusatzinformationen fuer Angriffsspells und der Angreifer als
-	Parameter uebergeben werden.
-	Desweiteren ist zu beachten, dass bei als physikalisch markierten
-	Angriffen in einem Team nur Verteidiger aus der ersten Reihe
-	beruecksichtigt werden und dass bei einem Angriff zufaellig aus
-	allen moeglichen Verteidigern ausgewaehlt wird.
-	Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
-	wobei der Skill SK_DEFEND_OTHER, sofern vorhanden, aufgerufen wird.
+DEFINIERT IN
+============
 
-BEISPIEL:
-	Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
-	verteidigen, z.B. beschworene Daemonen:
-	  inherit "std/npc";
-	  include <properties.h>
-	  object owner;
-	  void create()
-	  { ::create();
-	    SetProp(P_NAME,"Daemon");
-	    ...
-	  }
-	// nach Clonen des Daemons folgende Funktion mit Beschwoerer als
-	// Parameter aufrufen
-	  Identify(object caster)
-	  { if(!objectp(caster))
-	      call_out(#'remove,0);
-	    owner=caster;
-	    owner->AddDefender(this_object());
-	  }
-	// der Daemon wehrt jeden Angriff mit Feuer voll ab, man muss zuerst
-	// den Verteidiger umbringen, um den Beschwoerer toeten zu koennen
-	  mixed DefendOther(int dam,mixed dam_type,mixed spell,object enemy)
-	  { if(sizeof(dam_type)&&member_array(DT_FIRE,dam_type)!=-1)
-	      dam=0;
-	    return({dam,dam_type,spell});
-	  }
-	Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
-	Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
-	diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
-	uebergeben wird.
+   /std/living/combat.c
 
-SIEHE AUCH:
-	AddDefender(), RemoveDefender(), InformDefend(), Kill(), IsEnemy(),
-	P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   dam
+     Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
+     verursacht werden soll.
+   dam_type
+     Der Schadenstyp (oder die Schadenstypen), der beim zu
+     verteidigenden Lebewesen verursacht werden sollen.
+   spell
+     Wenn das zu verteidigende Lebewesen mit Spells angegriffen wurde,
+     so koennte man hier mehr Infos entnehmen.
+   enemy
+     Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit den Eintraegen der gegebenenfalls veraenderten
+   uebergebenen Parameter:
+       (1) dam      [Typ int],
+       (2) dam_type [Typ string*],
+       (3) spell    [Typ mapping].
+
+
+BESCHREIBUNG
+============
+
+   Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder
+   umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen
+   mittels AddDefender() angemeldet wurden und sich der selben Umgebung
+   befinden.
+   Zumeist wird es sich bei den Objekten natuerlich ebenfalls um
+   andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet
+   sind, verteidigen sollen.
+   Bei einem Angriff auf das Lebewesen koennen alle Objekte per Aufruf
+   von DefendOther() in einen Angriff eingreifen, wobei die
+   Schadensstaerke, der Schadenstyp (die Schadenstypen),
+   Zusatzinformationen fuer Angriffsspells und der Angreifer als
+   Parameter uebergeben werden.
+   Desweiteren ist zu beachten, dass bei als physikalisch markierten
+   Angriffen in einem Team nur Verteidiger aus der ersten Reihe
+   beruecksichtigt werden und dass bei einem Angriff zufaellig aus
+   allen moeglichen Verteidigern ausgewaehlt wird.
+   Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
+   wobei der Skill SK_DEFEND_OTHER, sofern vorhanden, aufgerufen wird.
+
+
+BEISPIEL
+========
+
+   Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
+   verteidigen, z.B. beschworene Daemonen:
+     inherit "std/npc";
+     include <properties.h>
+     object owner;
+     void create()
+     { ::create();
+       SetProp(P_NAME,"Daemon");
+       ...
+     }
+   // nach Clonen des Daemons folgende Funktion mit Beschwoerer als
+   // Parameter aufrufen
+     Identify(object caster)
+     { if(!objectp(caster))
+         call_out(#'remove,0);
+       owner=caster;
+       owner->AddDefender(this_object());
+     }
+   // der Daemon wehrt jeden Angriff mit Feuer voll ab, man muss zuerst
+   // den Verteidiger umbringen, um den Beschwoerer toeten zu koennen
+     mixed DefendOther(int dam,mixed dam_type,mixed spell,object enemy)
+     { if(sizeof(dam_type)&&member_array(DT_FIRE,dam_type)!=-1)
+         dam=0;
+       return({dam,dam_type,spell});
+     }
+   Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
+   Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
+   diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
+   uebergeben wird.
+
+
+SIEHE AUCH
+==========
+
+   AddDefender(), RemoveDefender(), InformDefend(), Kill(), IsEnemy(),
+   P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+
 Last modified: Fri Feb 25 14:45:00 2000 by Paracelsus
diff --git a/doc/lfun/Defend_bsp b/doc/lfun/Defend_bsp
index 06458a5..9feb25f 100644
--- a/doc/lfun/Defend_bsp
+++ b/doc/lfun/Defend_bsp
@@ -1,137 +1,155 @@
+
+Defend_bsp()
+************
+
+
 Defend() - BEISPIELE
+====================
 
-FUNKTION:
-     varargs int Defend(int dam, mixed dam_type, mixed spell, object enemy)
 
-BEMERKUNGEN:
-     Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis gedacht.
+FUNKTION
+========
 
-BEISPIELE:
-  1) Ein ordinaerer Biss ins Bein.
-     this_player()->Defend(random(500),
-                           ({DT_PIERCE, DT_RIP}),
-                           0,
-                           this_object());
+   varargs int Defend(int dam, mixed dam_type, mixed spell, object enemy)
 
-  2) Ein Biss ins Bein, mit der Hose als 200%ige Ruestung und Rest mit 100%.
-     this_player()->Defend(random(500),
-                           ({DT_PIERCE, DT_RIP}),
-                           ([SP_PHYSICAL_ATTACK: 1,
-                             SP_REDUCE_ARMOUR:   ([AT_TROUSERS: 200])
-                           ]),
-                           this_object());
 
-  3) Der Biss, wenn ein Tier in die Hose gekrochen ist und dieser ohne
-     Treffermeldung und physischen Ruestungsschutz durchgeht.
-     this_player()->Defend(random(500),
-                           ({DT_PIERCE, DT_RIP}),
-                           ([SP_PHYSICAL_ATTACK: 0]),
-                           this_object());
+BEMERKUNGEN
+===========
 
-  4) Spell-Parameter
-     // Beispiel fuer einen Spell, der nur vom Helm normal und von einem
-     // Amulett mit 115% aufgehalten wird, alle anderen (angebenenen)
-     // Ruestungen haben 0% Schutzwirkung.
-     // Mit Ausgabe eigener Meldungen: beginnend mit -1, da der verursachte
-     // Schadenswert minimal 0 wird (fuers Ersetzen: Feind: @WEx2,
-     // Spieler: WEx1); maximal wird er (Empfindlichkeiten jetzt mal aussen
-     // vor) 49 (499/10 = 49), nicht 499!!!
-     this_player()->Defend(
-       random(500),
-       ({DT_PIERCE, DT_AIR}),
-       ([SP_PHYSICAL_ATTACK: 1, // wegen DT_PIERCE
-         SP_REDUCE_ARMOUR:   ([AT_ARMOUR:   0,
-                               AT_HELMET: 100,
-                               AT_RING:     0,
-                               AT_GLOVE:    0,
-                               AT_CLOAK:    0,
-                               AT_BOOT:     0,
-                               AT_TROUSERS: 0,
-                               AT_SHIELD:   0,
-                               AT_AMULET: 115,
-                               AT_MISC:     0,
-                               AT_BELT:     0,
-                               AT_QUIVER:   0])
-         SP_SHOW_DAMAGE:
-               ({({-1,"@WER2 schrammt Dich mit einem durchbohrenden Blick.",
-                      "Du schrammst @WEN1 mit einem durchbohrenden Blick.",
-                      "@WER2 schrammt @WEN1 mit einem durchbohrenden Blick."
-                 }),
-                 ({5,"Der durchbohrende Blick von @WEM2 trifft Dich.",
-                     "Dein durchbohrender Blick trifft @WEN1.",
-                     "Der durchbohrende Blick von @WEM2 trifft @WEN1."
-                 }),
-                 ({20,"@WESSEN2 stechender Blick durchbohrt Dich.",
-                      "Dein stechender Blick durchbohrt @WEN1.",
-                      "@WESSEN2 stechender Blick durchbohrt @WEN1."
-               })})
-       ]),
-       this_object());
+   Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis gedacht.
 
-     // Etwas geschickter geht das Ganze, wenn wir einfach aus der Mudlib
-     // alle existierenden Ruestungen in ein Mapping packen und diese
-     // nullen (damit sind wir auch gegen neue Ruestungstypen sicher):
-     mapping amap = map_indices(VALID_ARMOUR_CLASS,#'!);
-     amap[AT_HELMET]=100;
-     amap[AT_AMULET]=115;
 
-     this_player()->Defend(random(500),
-                           ({DT_PIERCE, DT_AIR}),
-                           ([SP_PHYSICAL_ATTACK: 1,
-                             SP_REDUCE_ARMOUR: amap,
-                             SP_SHOW_DAMAGE: ({ ... (siehe oben)
+BEISPIELE
+=========
 
-  5) Der Biss von weiter oben mit Meldung.
-     // Eine Meldung, die nur ausgegeben wird, wenn der Biss auch mindestens
-     // einen LP abzieht.
-     this_player()->Defend(random(500),
-                           ({DT_PIERCE, DT_RIP}),
-                           ([SP_PHYSICAL_ATTACK: 1,
-                             SP_REDUCE_ARMOUR:   ([AT_TROUSERS: 200]),
-                             SP_SHOW_DAMAGE: ({
-                               ({1,"@WER2 beisst Dich ins Bein!",
-                                   "Du beisst @WEN1 ins Bein!",
-                                   "@WER2 beisst @WEN1 ins Bein!"
-                                })           })
-                           ]),
-                           this_object());
+   1) Ein ordinaerer Biss ins Bein.
+      this_player()->Defend(random(500),
+                            ({DT_PIERCE, DT_RIP}),
+                            0,
+                            this_object());
 
-  6) DefendFunc() und Defend() in einem Objekt
-     6a)
-     // eine Luftangriffe reflektierende Ruestung:
-     int DefendFunc(string *dtyp, mixed spell, object enemy) {
-       if(member(dtyp, DT_AIR)>=0 && !spell[SP_RECURSIVE])
-         enemy->Defend(random(200),
-                       ({DT_AIR}),
-                       ([SP_RECURSIVE: 1,
-                         SP_SHOW_DAMAGE:
-                         ({"Ein Luftwirbel erfasst auch Dich.",
-                           "Deine Ruestung wirbelt @WEN1 herum.",
-                           "@WESSEN2 Ruestung wirbelt @WEN1 herum."
-                          })
-                       ]),
-                       QueryProp(P_WORN));
+   2) Ein Biss ins Bein, mit der Hose als 200%ige Ruestung und Rest mit 100%.
+      this_player()->Defend(random(500),
+                            ({DT_PIERCE, DT_RIP}),
+                            ([SP_PHYSICAL_ATTACK: 1,
+                              SP_REDUCE_ARMOUR:   ([AT_TROUSERS: 200])
+                            ]),
+                            this_object());
 
-       return 0; // -> In diesem Fall gibts keinen Ruestungsbonus!
-     }
+   3) Der Biss, wenn ein Tier in die Hose gekrochen ist und dieser ohne
+      Treffermeldung und physischen Ruestungsschutz durchgeht.
+      this_player()->Defend(random(500),
+                            ({DT_PIERCE, DT_RIP}),
+                            ([SP_PHYSICAL_ATTACK: 0]),
+                            this_object());
 
-     6b)
-     // Eine NUR REINE Luftangriffe reflektierende Ruestung:
-     int DefendFunc(string *dtyp, mixed spell, object enemy) {
-       if(!sizeof(dtyp-({DT_AIR})) && !spell[SP_RECURSIVE])
-         ...
+   4) Spell-Parameter
+      // Beispiel fuer einen Spell, der nur vom Helm normal und von einem
+      // Amulett mit 115% aufgehalten wird, alle anderen (angebenenen)
+      // Ruestungen haben 0% Schutzwirkung.
+      // Mit Ausgabe eigener Meldungen: beginnend mit -1, da der verursachte
+      // Schadenswert minimal 0 wird (fuers Ersetzen: Feind: @WEx2,
+      // Spieler: WEx1); maximal wird er (Empfindlichkeiten jetzt mal aussen
+      // vor) 49 (499/10 = 49), nicht 499!!!
+      this_player()->Defend(
+        random(500),
+        ({DT_PIERCE, DT_AIR}),
+        ([SP_PHYSICAL_ATTACK: 1, // wegen DT_PIERCE
+          SP_REDUCE_ARMOUR:   ([AT_ARMOUR:   0,
+                                AT_HELMET: 100,
+                                AT_RING:     0,
+                                AT_GLOVE:    0,
+                                AT_CLOAK:    0,
+                                AT_BOOT:     0,
+                                AT_TROUSERS: 0,
+                                AT_SHIELD:   0,
+                                AT_AMULET: 115,
+                                AT_MISC:     0,
+                                AT_BELT:     0,
+                                AT_QUIVER:   0])
+          SP_SHOW_DAMAGE:
+                ({({-1,"@WER2 schrammt Dich mit einem durchbohrenden Blick.",
+                       "Du schrammst @WEN1 mit einem durchbohrenden Blick.",
+                       "@WER2 schrammt @WEN1 mit einem durchbohrenden Blick."
+                  }),
+                  ({5,"Der durchbohrende Blick von @WEM2 trifft Dich.",
+                      "Dein durchbohrender Blick trifft @WEN1.",
+                      "Der durchbohrende Blick von @WEM2 trifft @WEN1."
+                  }),
+                  ({20,"@WESSEN2 stechender Blick durchbohrt Dich.",
+                       "Dein stechender Blick durchbohrt @WEN1.",
+                       "@WESSEN2 stechender Blick durchbohrt @WEN1."
+                })})
+        ]),
+        this_object());
 
-SIEHE AUCH:
-     Angriff:   Attack(L), P_NO_ATTACK, InsertEnemy(L)
-     Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE, do_damage(L),
-                reduce_hit_points(L), reduce_spell_points(L)
-     Schutz:    P_DEFENDERS, InformDefend(L), DefendOther(L),
-                P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L),
-                P_BODY, A_DEX, Defend(L)
-     Daten:     P_LAST_COMBAT_TIME, P_LAST_XP, P_LAST_DAMAGE,
-                P_LAST_DAMTYPES, P_LAST_DAMTIME
-     Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
-     Sonstiges: CheckSensitiveAttack(L), UseSkill(L),
-                InternalModifyDefend(L)
+      // Etwas geschickter geht das Ganze, wenn wir einfach aus der Mudlib
+      // alle existierenden Ruestungen in ein Mapping packen und diese
+      // nullen (damit sind wir auch gegen neue Ruestungstypen sicher):
+      mapping amap = map_indices(VALID_ARMOUR_CLASS,#'!);
+      amap[AT_HELMET]=100;
+      amap[AT_AMULET]=115;
+
+      this_player()->Defend(random(500),
+                            ({DT_PIERCE, DT_AIR}),
+                            ([SP_PHYSICAL_ATTACK: 1,
+                              SP_REDUCE_ARMOUR: amap,
+                              SP_SHOW_DAMAGE: ({ ... (siehe oben)
+
+   5) Der Biss von weiter oben mit Meldung.
+      // Eine Meldung, die nur ausgegeben wird, wenn der Biss auch mindestens
+      // einen LP abzieht.
+      this_player()->Defend(random(500),
+                            ({DT_PIERCE, DT_RIP}),
+                            ([SP_PHYSICAL_ATTACK: 1,
+                              SP_REDUCE_ARMOUR:   ([AT_TROUSERS: 200]),
+                              SP_SHOW_DAMAGE: ({
+                                ({1,"@WER2 beisst Dich ins Bein!",
+                                    "Du beisst @WEN1 ins Bein!",
+                                    "@WER2 beisst @WEN1 ins Bein!"
+                                 })           })
+                            ]),
+                            this_object());
+
+   6) DefendFunc() und Defend() in einem Objekt
+      6a)
+      // eine Luftangriffe reflektierende Ruestung:
+      int DefendFunc(string *dtyp, mixed spell, object enemy) {
+        if(member(dtyp, DT_AIR)>=0 && !spell[SP_RECURSIVE])
+          enemy->Defend(random(200),
+                        ({DT_AIR}),
+                        ([SP_RECURSIVE: 1,
+                          SP_SHOW_DAMAGE:
+                          ({"Ein Luftwirbel erfasst auch Dich.",
+                            "Deine Ruestung wirbelt @WEN1 herum.",
+                            "@WESSEN2 Ruestung wirbelt @WEN1 herum."
+                           })
+                        ]),
+                        QueryProp(P_WORN));
+
+        return 0; // -> In diesem Fall gibts keinen Ruestungsbonus!
+      }
+
+      6b)
+      // Eine NUR REINE Luftangriffe reflektierende Ruestung:
+      int DefendFunc(string *dtyp, mixed spell, object enemy) {
+        if(!sizeof(dtyp-({DT_AIR})) && !spell[SP_RECURSIVE])
+          ...
+
+
+SIEHE AUCH
+==========
+
+   Angriff:   Attack(L), P_NO_ATTACK, InsertEnemy(L)
+   Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE, do_damage(L),
+              reduce_hit_points(L), reduce_spell_points(L)
+   Schutz:    P_DEFENDERS, InformDefend(L), DefendOther(L),
+              P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(L),
+              P_BODY, A_DEX, Defend(L)
+   Daten:     P_LAST_COMBAT_TIME, P_LAST_XP, P_LAST_DAMAGE,
+              P_LAST_DAMTYPES, P_LAST_DAMTIME
+   Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance(L)
+   Sonstiges: CheckSensitiveAttack(L), UseSkill(L),
+              InternalModifyDefend(L)
 
 25. Mai 2011 Gabylon
diff --git a/doc/lfun/DeleteSpellFatigue b/doc/lfun/DeleteSpellFatigue
index c0049d9..f01755b 100644
--- a/doc/lfun/DeleteSpellFatigue
+++ b/doc/lfun/DeleteSpellFatigue
@@ -1,37 +1,55 @@
-DeleteSpellFatigue
 
-FUNKTION:
-    public void DeleteSpellFatigue(string key)
+DeleteSpellFatigue()
+********************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    /std/player/skills.c
-    /sys/living/skills.h
 
-ARGUMENTE:
-    string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
-                  oder 0 fuer die globale Spruchermuedung.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion dient zum Loeschen von individuellen Spruchermuedungen
-    (Spellfatigue, Spruchsperren).
+   public void DeleteSpellFatigue(string key)
 
-    Ist <key> 0, wird die globale Spruchsperre geloescht (identisch zu der
-    Property P_NEXT_SPELL_TIME), anderenfalls die unter <key> gespeicherte
-    Spruchermuedung.
-    Loescht man einen Eintrag 0 ist das Ergebnis dieser Funktion identisch zum
-    Loeschen/Nullen von P_NEXT_SPELL_TIME.
 
-BEMERKUNGEN:
-    Spruchsperren (insb. fremde) duerfen nicht ohne weiteres geloescht oder
-    geaendert werden. Dieses bedarf grundsaetzlich der Genehmigung durch die
-    Gildenbalance!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    SetSpellFatigue(L), CheckSpellFatigue(L)
-    P_NEXT_SPELL_TIME
-    spruchermuedung
+   /std/living/skills.c
+   /std/player/skills.c
+   /sys/living/skills.h
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
+                 oder 0 fuer die globale Spruchermuedung.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion dient zum Loeschen von individuellen Spruchermuedungen
+   (Spellfatigue, Spruchsperren).
+
+   Ist <key> 0, wird die globale Spruchsperre geloescht (identisch zu der
+   Property P_NEXT_SPELL_TIME), anderenfalls die unter <key> gespeicherte
+   Spruchermuedung.
+   Loescht man einen Eintrag 0 ist das Ergebnis dieser Funktion identisch zum
+   Loeschen/Nullen von P_NEXT_SPELL_TIME.
+
+
+BEMERKUNGEN
+===========
+
+   Spruchsperren (insb. fremde) duerfen nicht ohne weiteres geloescht oder
+   geaendert werden. Dieses bedarf grundsaetzlich der Genehmigung durch die
+   Gildenbalance!
+
+
+SIEHE AUCH
+==========
+
+   SetSpellFatigue(L), CheckSpellFatigue(L)
+   P_NEXT_SPELL_TIME
+   spruchermuedung
+
 27.03.2010, Zesstra
-
diff --git a/doc/lfun/DeleteTimedAttrModifier b/doc/lfun/DeleteTimedAttrModifier
index 069aa90..2d1bd1e 100644
--- a/doc/lfun/DeleteTimedAttrModifier
+++ b/doc/lfun/DeleteTimedAttrModifier
@@ -1,30 +1,53 @@
+
 DeleteTimedAttrModifier()
-FUNKTION:
-     int DeleteTimedAttrModifier(string key)
+*************************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     key	-	aus P_TIMED_ATTR_MOD zu loeschender Eintrag
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der zu key gehoerende Eintrag in P_TIMED_ATTR_MOD wird geloescht und
-     update_max_sp_and_hp ausgefuehrt.

-

-RUeCKGABEWERT:

-     TATTR_INVALID_ARGS      -     Im Falle eines fehlenden key-Arguments 
-     TATTR_NO_SUCH_MODIFIER  -     Falls der Modifier mit diesem Key nicht
-                                   existiert

-     TATTR_OK                -     Im Erfolgsfall

-     

-     Die Rueckgabewerte sind in /sys/living/attributes.h definiert.

-    
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+   int DeleteTimedAttrModifier(string key)
+
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   key        -       aus P_TIMED_ATTR_MOD zu loeschender Eintrag
+
+
+BESCHREIBUNG
+============
+
+   Der zu key gehoerende Eintrag in P_TIMED_ATTR_MOD wird geloescht und
+   update_max_sp_and_hp ausgefuehrt.
+
+
+RUeCKGABEWERT
+=============
+
+   TATTR_INVALID_ARGS      -     Im Falle eines fehlenden key-Arguments
+   TATTR_NO_SUCH_MODIFIER  -     Falls der Modifier mit diesem Key nicht
+                                 existiert
+   TATTR_OK                -     Im Erfolgsfall
+
+
+
+   Die Rueckgabewerte sind in /sys/living/attributes.h definiert.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/DiscoverDoor b/doc/lfun/DiscoverDoor
index 88310d5..9046a0e 100644
--- a/doc/lfun/DiscoverDoor
+++ b/doc/lfun/DiscoverDoor
@@ -1,31 +1,54 @@
+
 DiscoverDoor()
+**************
 
-FUNKTION:
-    varargs int DiscoverDoor(string dname)
 
-ARGUMENTE:
-    dname: Name des Raumes, in dem der Seher das Sehertor kennenlernen soll.
-           Default: Die Umgebung des Sehers.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Nachdem diese Funktion aufgerufen wurde, kann der Seher (this_player())
-    das Tor in dem angegebenen Raum immer verwenden.
+   varargs int DiscoverDoor(string dname)
 
-RUECKGABEWERT:
-    1, falls der Seher ein NEUES Tor kennengelernt hat
-    0, falls er das Tor schon kannte oder kein Seher war
 
-BEMERKUNGEN:
-    Von einem Sehertor wird diese Funktion automatisch beim Betreten des
-    umgebenden Raumes aufgerufen, falls P_SEERDOOR_DISCOVER gesetzt ist. Wenn
-    ein Tor auf diese Art nicht entdeckt werden soll, so darf
-    P_SEERDOOR_DISCOVER nicht gesetzt sein und muss DiscoverDoor() separat,
-    z.B. von einem Questobjekt, aufgerufen werden.
-    Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+ARGUMENTE
+=========
 
-BEISPIELE:
-    write("Der Zauberer sagt: Im Nichts wirst Du ein weiteres Tor finden!\n");
-    "/d/seher/portale/sehertormaster"->DiscoverDoor("/room/void");
+   dname: Name des Raumes, in dem der Seher das Sehertor kennenlernen soll.
+          Default: Die Umgebung des Sehers.
 
-SIEHE AUCH:
-    DoorIsKnown, ShowDoors, Teleport, GetDoorsMapping
+
+BESCHREIBUNG
+============
+
+   Nachdem diese Funktion aufgerufen wurde, kann der Seher (this_player())
+   das Tor in dem angegebenen Raum immer verwenden.
+
+
+RUECKGABEWERT
+=============
+
+   1, falls der Seher ein NEUES Tor kennengelernt hat
+   0, falls er das Tor schon kannte oder kein Seher war
+
+
+BEMERKUNGEN
+===========
+
+   Von einem Sehertor wird diese Funktion automatisch beim Betreten des
+   umgebenden Raumes aufgerufen, falls P_SEERDOOR_DISCOVER gesetzt ist. Wenn
+   ein Tor auf diese Art nicht entdeckt werden soll, so darf
+   P_SEERDOOR_DISCOVER nicht gesetzt sein und muss DiscoverDoor() separat,
+   z.B. von einem Questobjekt, aufgerufen werden.
+   Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+
+
+BEISPIELE
+=========
+
+   write("Der Zauberer sagt: Im Nichts wirst Du ein weiteres Tor finden!\n");
+   "/d/seher/portale/sehertormaster"->DiscoverDoor("/room/void");
+
+
+SIEHE AUCH
+==========
+
+   DoorIsKnown, ShowDoors, Teleport, GetDoorsMapping
diff --git a/doc/lfun/DistributeExp b/doc/lfun/DistributeExp
index 294eebe..e29427d 100644
--- a/doc/lfun/DistributeExp
+++ b/doc/lfun/DistributeExp
@@ -1,24 +1,42 @@
-DistributeExp()

-FUNKTION:

-     private void DistributeExp(object enemy, int exp_to_give)

-

-DEFINIERT IN:

-     /std/living/life.c

-

-ARGUMENTE:

-     object enemy     - toetender Feind

-     int exp_to_give  - zu verteilende XP (== P_XP/100)

-

-BESCHREIBUNG:

-     Das sterbende Wesen verteilt seine XP an seine Feinde.

-

-     Dabei bekommt jeder Gegner seinen Anteil (abhaengig von 50% von seinem

-     gemachten Schaden) und einen Teamanteil (die anderen 50% ueber das

-     gesamte Team addiert und durch die Teamanzahl geteilt).

-

-SIEHE AUCH:

-     Funktionen:  AddExp()

-     Properties:  P_XP

-     Sonstiges:   teamkampf

-

-Letzte Aenderung: 22.12.2016, Bugfix

+
+DistributeExp()
+***************
+
+
+FUNKTION
+========
+
+   private void DistributeExp(object enemy, int exp_to_give)
+
+
+DEFINIERT IN
+============
+
+   /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   object enemy     - toetender Feind
+   int exp_to_give  - zu verteilende XP (== P_XP/100)
+
+
+BESCHREIBUNG
+============
+
+   Das sterbende Wesen verteilt seine XP an seine Feinde.
+
+   Dabei bekommt jeder Gegner seinen Anteil (abhaengig von 50% von seinem
+   gemachten Schaden) und einen Teamanteil (die anderen 50% ueber das
+   gesamte Team addiert und durch die Teamanzahl geteilt).
+
+
+SIEHE AUCH
+==========
+
+   Funktionen:  AddExp()
+   Properties:  P_XP
+   Sonstiges:   teamkampf
+
+Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/DoDecay b/doc/lfun/DoDecay
index 85cf541..695856a 100644
--- a/doc/lfun/DoDecay
+++ b/doc/lfun/DoDecay
@@ -1,44 +1,69 @@
+
 DoDecay()
+*********
 
-FUNKTION:
-      public  int    DoDecay(int silent) 
 
-DEFINIERT IN:
-      /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent (int)
-       Falls != 0, erfolgt beim Zerfall keine Meldung, d.h. doDecayMessaage()
-       wird nicht gerufen.
+   public  int    DoDecay(int silent)
 
-RUeCKGABEWERT:
-     Die Funktion gibt die nach dem Zerfall noch uebrig gebliebene Menge
-     zurueck (int).
 
-BESCHREIBUNG:
-     Diese Funktion wird in Clones von Unitobjekten aus der Blueprint gerufen,
-     wenn ein Zerfallsintervall abgelaufen ist (natuerlich nur, wenn in der BP
-     der Zerfall konfiguriert ist).
-     Die Funktion prueft normalerweise via P_UNIT_DECAY_FLAGS, ob der Zerfall
-     stattfinden soll, bestimmt aus P_UNIT_DECAY_QUOTA die zu zerfallende
-     Menge, ruft DoDecayMessage() und reduziert P_AMOUNT.
-     
-     Sie kann auch von Hand gerufen werden, um einen Zerfall auszuloesen, auch
-     wenn mir gerade nicht einfaellt, in welchen Situationen das sinnvoll
-     waere (vielleicht als Spruchmisserfolg. *g*)
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn man einen anderen Zerfallsmechanismus haben, will muss man diese
-     Funktion wohl ueberschreiben. In fast allen Faellen sollte dies jedoch
-     unnoetig sein. Hat jemand das Verlangen, diese Funktion zu
-     ueberschreiben, ist vielleicht vorher eine Diskussion mit dem Mudlib-EM
-     angebracht.
+   /std/unit.c
 
-SIEHE AUCH:
-     unit
-     P_UNIT_DECAY_INTERVAL, P_UNIT_DECAY_FLAGS, P_UNIT_DECAY_QUOTA,
-     P_UNIT_DECAY_MIN
-     DoDecayMessage()
-     /std/unit.c
+
+ARGUMENTE
+=========
+
+   silent (int)
+     Falls != 0, erfolgt beim Zerfall keine Meldung, d.h. doDecayMessaage()
+     wird nicht gerufen.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Funktion gibt die nach dem Zerfall noch uebrig gebliebene Menge
+   zurueck (int).
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird in Clones von Unitobjekten aus der Blueprint gerufen,
+   wenn ein Zerfallsintervall abgelaufen ist (natuerlich nur, wenn in der BP
+   der Zerfall konfiguriert ist).
+   Die Funktion prueft normalerweise via P_UNIT_DECAY_FLAGS, ob der Zerfall
+   stattfinden soll, bestimmt aus P_UNIT_DECAY_QUOTA die zu zerfallende
+   Menge, ruft DoDecayMessage() und reduziert P_AMOUNT.
+
+
+
+   Sie kann auch von Hand gerufen werden, um einen Zerfall auszuloesen, auch
+   wenn mir gerade nicht einfaellt, in welchen Situationen das sinnvoll
+   waere (vielleicht als Spruchmisserfolg. *g*)
+
+
+BEMERKUNGEN
+===========
+
+   Wenn man einen anderen Zerfallsmechanismus haben, will muss man diese
+   Funktion wohl ueberschreiben. In fast allen Faellen sollte dies jedoch
+   unnoetig sein. Hat jemand das Verlangen, diese Funktion zu
+   ueberschreiben, ist vielleicht vorher eine Diskussion mit dem Mudlib-EM
+   angebracht.
+
+
+SIEHE AUCH
+==========
+
+   unit
+   P_UNIT_DECAY_INTERVAL, P_UNIT_DECAY_FLAGS, P_UNIT_DECAY_QUOTA,
+   P_UNIT_DECAY_MIN
+   DoDecayMessage()
+   /std/unit.c
 
 14.10.2007, Zesstra
diff --git a/doc/lfun/DoDecayMessage b/doc/lfun/DoDecayMessage
index fc39309..671f9c7 100644
--- a/doc/lfun/DoDecayMessage
+++ b/doc/lfun/DoDecayMessage
@@ -1,34 +1,54 @@
+
 DoDecayMessage()
+****************
 
-FUNKTION:
-      protected void DoDecayMessage(int oldamount, int zerfall);
-      
-DEFINIERT IN:
-      /std/unit.c
 
-ARGUMENTE:
-     oldamount (int)
-        Menge vor dem Zerfall
-     zerfall (int)
-        jetzt zerfallende Menge
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird von DoDecay() gerufen und gibt die Standardmeldungen
-     beim Zerfall von Unitobjekten aus.
-     Hierbei ist an der Unit noch alles unveraendert, wenn diese Funktion
-     gerufen wird, die Reduktion von P_AMOUNT erfolgt direkt im Anschluss.
-     Die Funktion wird nicht gerufen, wenn DoDecay() mit silent!=0 gerufen
-     wird.
+   protected void DoDecayMessage(int oldamount, int zerfall);
 
-BEMERKUNGEN:
-     Will man nicht die Standardzerfallsmeldungen (wovon ich meist ausgehe),
-     kann man diese Funktion ueberschreiben und eigene Meldungen erzeugen.
 
-SIEHE AUCH:
-     unit
-     P_UNIT_DECAY_INTERVAL, P_UNIT_DECAY_FLAGS, P_UNIT_DECAY_QUOTA,
-     P_UNIT_DECAY_MIN
-     DoDecay()
-     /std/unit.c
+DEFINIERT IN
+============
+
+   /std/unit.c
+
+
+ARGUMENTE
+=========
+
+   oldamount (int)
+      Menge vor dem Zerfall
+   zerfall (int)
+      jetzt zerfallende Menge
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von DoDecay() gerufen und gibt die Standardmeldungen
+   beim Zerfall von Unitobjekten aus.
+   Hierbei ist an der Unit noch alles unveraendert, wenn diese Funktion
+   gerufen wird, die Reduktion von P_AMOUNT erfolgt direkt im Anschluss.
+   Die Funktion wird nicht gerufen, wenn DoDecay() mit silent!=0 gerufen
+   wird.
+
+
+BEMERKUNGEN
+===========
+
+   Will man nicht die Standardzerfallsmeldungen (wovon ich meist ausgehe),
+   kann man diese Funktion ueberschreiben und eigene Meldungen erzeugen.
+
+
+SIEHE AUCH
+==========
+
+   unit
+   P_UNIT_DECAY_INTERVAL, P_UNIT_DECAY_FLAGS, P_UNIT_DECAY_QUOTA,
+   P_UNIT_DECAY_MIN
+   DoDecay()
+   /std/unit.c
 
 14.10.2007, Zesstra
diff --git a/doc/lfun/DoUnwear b/doc/lfun/DoUnwear
index 638eda7..56e53d3 100644
--- a/doc/lfun/DoUnwear
+++ b/doc/lfun/DoUnwear
@@ -1,33 +1,55 @@
+
 DoUnwear()
+**********
 
-FUNKTION:
-     varargs int DoUnwear(int silent, int all);
 
-DEFINIERT IN:
-     /std/clothing/wear.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent
-          Falls ungleich 0, so werden keine Meldungen ausgegeben.
-          Falls (silent&M_NOCHECK) werden auch verfluchte Ruestungen
-          ausgezogen
-     all
-          Ungleich 0, wenn DoUnwear() aus einem "ziehe alles aus" heraus
-          aufgerufen wurde.
+   varargs int DoUnwear(int silent, int all);
 
-BESCHREIBUNG:
-     Es wird versucht, die Ruestung auszuziehen. Dabei werden eine eventuell
-     vorhandene RemoveFunc() und Flueche mit beruecksichtigt.
 
-RUeCKGABEWERT:
-     0, wenn die Ruestung gar nicht getragen war, ansonsten 1.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Auch wenn eine 1 zurueckgegeben wird, muss das nicht heissen, dass die
-     Ruestung erfolgreich ausgezogen wurde!
+   /std/clothing/wear.c
 
-SIEHE AUCH:
-     DoWear(), RemoveFunc(), InformUnwear(), /std/armour/combat.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   silent
+        Falls ungleich 0, so werden keine Meldungen ausgegeben.
+        Falls (silent&M_NOCHECK) werden auch verfluchte Ruestungen
+        ausgezogen
+   all
+        Ungleich 0, wenn DoUnwear() aus einem "ziehe alles aus" heraus
+        aufgerufen wurde.
+
+
+BESCHREIBUNG
+============
+
+   Es wird versucht, die Ruestung auszuziehen. Dabei werden eine eventuell
+   vorhandene RemoveFunc() und Flueche mit beruecksichtigt.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn die Ruestung gar nicht getragen war, ansonsten 1.
+
+
+BEMERKUNGEN
+===========
+
+   Auch wenn eine 1 zurueckgegeben wird, muss das nicht heissen, dass die
+   Ruestung erfolgreich ausgezogen wurde!
+
+
+SIEHE AUCH
+==========
+
+   DoWear(), RemoveFunc(), InformUnwear(), /std/armour/combat.c
+
 Last modified: Sun Jun 27 22:22:00 1999 by Paracelsus
diff --git a/doc/lfun/DoUnwield b/doc/lfun/DoUnwield
index f33e5f0..d003bfc 100644
--- a/doc/lfun/DoUnwield
+++ b/doc/lfun/DoUnwield
@@ -1,32 +1,54 @@
+
 DoUnwield()
+***********
 
-FUNKTION:
-     varargs int DoUnwield(int silent);
 
-DEFINIERT IN:
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent
-          Ungleich 0, wenn die Waffe ohne Meldungen weggesteckt werden soll.
-          Wenn silent&M_NOCHECK wird die Waffe auch weggesteckt wenn sie
-          verflucht ist und UnwieldFunc() wird nicht ausgewertet.
+   varargs int DoUnwield(int silent);
 
-BESCHREIBUNG:
-     Es wird versucht, die Waffe wegzustecken.
 
-RUeCKGABEWERT:
-     0, wenn die Waffe gar nicht gezueckt war, ansonsten 1.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Anhand des Rueckgabewertes laesst sich nicht ersehen, ob die Waffe sich
-     wegstecken liess oder nicht!
+   /std/weapon/combat.c
 
-     Wenn die Waffe verflucht ist oder (falls definiert) UnwieldFunc() 0
-     zurueckgibt, laesst sie sich nicht wegstecken.
 
-SIEHE AUCH:
-     UnwieldFunc(), InformUnwield(), /std/weapon.c
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   silent
+        Ungleich 0, wenn die Waffe ohne Meldungen weggesteckt werden soll.
+        Wenn silent&M_NOCHECK wird die Waffe auch weggesteckt wenn sie
+        verflucht ist und UnwieldFunc() wird nicht ausgewertet.
+
+
+BESCHREIBUNG
+============
+
+   Es wird versucht, die Waffe wegzustecken.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn die Waffe gar nicht gezueckt war, ansonsten 1.
+
+
+BEMERKUNGEN
+===========
+
+   Anhand des Rueckgabewertes laesst sich nicht ersehen, ob die Waffe sich
+   wegstecken liess oder nicht!
+
+   Wenn die Waffe verflucht ist oder (falls definiert) UnwieldFunc() 0
+   zurueckgibt, laesst sie sich nicht wegstecken.
+
+
+SIEHE AUCH
+==========
+
+   UnwieldFunc(), InformUnwield(), /std/weapon.c
+
 Letzte Aenderung: 18.11.2016, Bugfix
diff --git a/doc/lfun/DoWear b/doc/lfun/DoWear
index 0d64e5a..e253290 100644
--- a/doc/lfun/DoWear
+++ b/doc/lfun/DoWear
@@ -1,42 +1,64 @@
+
 DoWear()
+********
 
-FUNKTION:
-     varargs int DoWear(int silent, int all);
 
-DEFINIERT IN:
-     /std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent
-          Falls ungleich 0, so werden keine Meldungen ausgegeben.
-     all
-          Ungleich 0, wenn DoWear() aus einem "ziehe alles an" heraus
-          aufgerufen wurde.
+   varargs int DoWear(int silent, int all);
 
-BESCHREIBUNG:
-     Es wird versucht, die Ruestung anzuziehen. Dabei wird eine eventuell
-     vorhandene WearFunc() mit beruecksichtigt.
 
-RUeCKGABEWERT:
-     0, wenn man die Ruestung gar nicht bei sich hat oder sie schon an hat,
-     ansonsten 1.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Auch wenn eine 1 zurueckgegeben wird, muss das nicht heissen, dass die
-     Ruestung erfolgreich angezogen wurde!
+   /std/armour/combat.c
 
-     Gruende fuer ein Fehlschlagen des Anziehens koennen sein:
-        o Man hat die Ruestung nicht bei sich.
-        o Man hat die Ruestung schon an.
-        o Man hat schon eine Ruestung des gleichen Typs an.
-        o Der Typ der Ruestung oder die Ruestungsklasse ist illegal.
-        o Falls definiert: WearFunc() gab 0 zurueck.
-        o Falls es sich um einen Schild handelt: Man hat keine Hand mehr
-          frei.
 
-SIEHE AUCH:
-     DoUnwear(), WearFunc(), InformWear(), P_EQUIP_TIME, 
-     /std/armour/combat.c, P_UNWEAR_MSG, P_WEAR_MSG
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   silent
+        Falls ungleich 0, so werden keine Meldungen ausgegeben.
+   all
+        Ungleich 0, wenn DoWear() aus einem "ziehe alles an" heraus
+        aufgerufen wurde.
+
+
+BESCHREIBUNG
+============
+
+   Es wird versucht, die Ruestung anzuziehen. Dabei wird eine eventuell
+   vorhandene WearFunc() mit beruecksichtigt.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn man die Ruestung gar nicht bei sich hat oder sie schon an hat,
+   ansonsten 1.
+
+
+BEMERKUNGEN
+===========
+
+   Auch wenn eine 1 zurueckgegeben wird, muss das nicht heissen, dass die
+   Ruestung erfolgreich angezogen wurde!
+
+   Gruende fuer ein Fehlschlagen des Anziehens koennen sein:
+      o Man hat die Ruestung nicht bei sich.
+      o Man hat die Ruestung schon an.
+      o Man hat schon eine Ruestung des gleichen Typs an.
+      o Der Typ der Ruestung oder die Ruestungsklasse ist illegal.
+      o Falls definiert: WearFunc() gab 0 zurueck.
+      o Falls es sich um einen Schild handelt: Man hat keine Hand mehr
+        frei.
+
+
+SIEHE AUCH
+==========
+
+   DoUnwear(), WearFunc(), InformWear(), P_EQUIP_TIME,
+   /std/armour/combat.c, P_UNWEAR_MSG, P_WEAR_MSG
+
 Last modified: Sun Jun 27 22:22:00 1999 by Paracelsus
diff --git a/doc/lfun/DoWield b/doc/lfun/DoWield
index 9fc436d..6e6c06c 100644
--- a/doc/lfun/DoWield
+++ b/doc/lfun/DoWield
@@ -1,41 +1,63 @@
+
 DoWield()
+*********
 
-FUNKTION:
-     varargs int DoWield(int silent);
 
-DEFINIERT IN:
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent
-          Ungleich 0, wenn die Waffe ohne Meldungen gezueckt werden soll.
+   varargs int DoWield(int silent);
 
-BESCHREIBUNG:
-     Es wird versucht, die Waffe zu zuecken. Hat man schon eine Waffe
-     gezueckt, so wird versucht, diese wegzustecken. Klappt das nicht, kann
-     die Waffe nicht gezueckt werden.
 
-RUeCKGABEWERT:
-     0, wenn man die Waffe gar nicht bei sich traegt, ansonsten 1.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Anhand des Rueckgabewertes laesst sich nicht entscheiden, ob die Waffe
-     sich erfolgreich zuecken liess!
+   /std/weapon/combat.c
 
-     Gruende, warum sich eine Waffe nicht zuecken lassen kann, sind
-     folgende:
-        o Man traegt sie nicht bei sich (oder sie steckt in einem Beutel
-          o.ae.).
-        o Man hat sie schon gezueckt.
-        o Falls definiert: WieldFunc() gibt 0 zurueck.
-        o Man ist nicht geschickt genug (das haengt von der Waffenklasse
-          ab).
-        o Eine schon gezueckte Waffe laesst sich nicht wegstecken.
-        o Die Waffenklasse ist hoeher als erlaubt.
-        o Man hat nicht genug Haende frei.
 
-SIEHE AUCH:
-     WieldFunc(), InformWield(), P_EQUIP_TIME, /std/weapon.c
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   silent
+        Ungleich 0, wenn die Waffe ohne Meldungen gezueckt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Es wird versucht, die Waffe zu zuecken. Hat man schon eine Waffe
+   gezueckt, so wird versucht, diese wegzustecken. Klappt das nicht, kann
+   die Waffe nicht gezueckt werden.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn man die Waffe gar nicht bei sich traegt, ansonsten 1.
+
+
+BEMERKUNGEN
+===========
+
+   Anhand des Rueckgabewertes laesst sich nicht entscheiden, ob die Waffe
+   sich erfolgreich zuecken liess!
+
+   Gruende, warum sich eine Waffe nicht zuecken lassen kann, sind
+   folgende:
+      o Man traegt sie nicht bei sich (oder sie steckt in einem Beutel
+        o.ae.).
+      o Man hat sie schon gezueckt.
+      o Falls definiert: WieldFunc() gibt 0 zurueck.
+      o Man ist nicht geschickt genug (das haengt von der Waffenklasse
+        ab).
+      o Eine schon gezueckte Waffe laesst sich nicht wegstecken.
+      o Die Waffenklasse ist hoeher als erlaubt.
+      o Man hat nicht genug Haende frei.
+
+
+SIEHE AUCH
+==========
+
+   WieldFunc(), InformWield(), P_EQUIP_TIME, /std/weapon.c
+
 Last modified: Wed Apr 08 10:25:00 2004 by Muadib
diff --git a/doc/lfun/DoorIsKnown b/doc/lfun/DoorIsKnown
index b909e30..b799698 100644
--- a/doc/lfun/DoorIsKnown
+++ b/doc/lfun/DoorIsKnown
@@ -1,24 +1,46 @@
+
 DoorIsKnown()
+*************
 
-FUNKTION:
-	int DoorIsKnown()
 
-ARGUMENTE:
-	Keine.
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Testet, ob der Seher (this_player()) das Tor in seiner momentanen
-	Umgebung schon kennt.
+   int DoorIsKnown()
 
-RUECKGABEWERT:
-	Die Nummer des Tores.
 
-BEMERKUNGEN:
-    Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+ARGUMENTE
+=========
 
-BEISPIELE:
-    /d/seher/portale/sehertormaster->DoorIsKnown()
+   Keine.
 
-SIEHE AUCH:
-    DiscoverDoor, ShowDoors, Teleport, GetDoorsMapping
 
+BESCHREIBUNG
+============
+
+   Testet, ob der Seher (this_player()) das Tor in seiner momentanen
+   Umgebung schon kennt.
+
+
+RUECKGABEWERT
+=============
+
+   Die Nummer des Tores.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+
+
+BEISPIELE
+=========
+
+   /d/seher/portale/sehertormaster->DoorIsKnown()
+
+
+SIEHE AUCH
+==========
+
+   DiscoverDoor, ShowDoors, Teleport, GetDoorsMapping
diff --git a/doc/lfun/Dump b/doc/lfun/Dump
index 274fbb4..9d8d7e0 100644
--- a/doc/lfun/Dump
+++ b/doc/lfun/Dump
@@ -1,23 +1,38 @@
+
 Dump()
-FUNKTION:
-     void Dump()
+******
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-BESCHREIBUNG:
-     Schreibt alle Materialien samt ihren Gruppen und alle Gruppen mit
-     dazugehoerenden Materialien in DUMPFILE (/p/daemon/save/MATERIALS)
-     Wird in create() der Materialiendatenbank automatisch aufgerufen.
-     Das Dumpfile ist zum Recherchieren der Materialien gedacht.
+FUNKTION
+========
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Listen:	  AllMaterials(), AllGroups()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
+   void Dump()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+DEFINIERT IN
+============
+
+   /p/daemon/materialdb.c (MATERIALDB)
+
+
+BESCHREIBUNG
+============
+
+   Schreibt alle Materialien samt ihren Gruppen und alle Gruppen mit
+   dazugehoerenden Materialien in DUMPFILE (/p/daemon/save/MATERIALS)
+   Wird in create() der Materialiendatenbank automatisch aufgerufen.
+   Das Dumpfile ist zum Recherchieren der Materialien gedacht.
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Listen:      AllMaterials(), AllGroups()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/EnemyPresent b/doc/lfun/EnemyPresent
index 365ae3d..bf3853c 100644
--- a/doc/lfun/EnemyPresent
+++ b/doc/lfun/EnemyPresent
@@ -1,19 +1,34 @@
-EnemyPresent
-FUNKTION:
-     public mixed EnemyPresent()
 
-DEFINIERT IN:
-     /std/living/combat.c
+EnemyPresent()
+**************
 
-BESCHREIBUNG:
-     Gibt aus der Feindesliste den ersten anwesenden, lebenden und 
-     angreifbaren aktuellen Gegner im Raum zurueck.
-     Damit ist die Funktion identisch zu InFight().
 
-     Will man alle Gegner, auf die diese Kriterien zutreffen, sollte man
-     PresentEnemies() verwenden.
+FUNKTION
+========
 
-SIEHE AUCH:
-     PresentEnemies(), Infight()
+   public mixed EnemyPresent()
+
+
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+BESCHREIBUNG
+============
+
+   Gibt aus der Feindesliste den ersten anwesenden, lebenden und
+   angreifbaren aktuellen Gegner im Raum zurueck.
+   Damit ist die Funktion identisch zu InFight().
+
+   Will man alle Gegner, auf die diese Kriterien zutreffen, sollte man
+   PresentEnemies() verwenden.
+
+
+SIEHE AUCH
+==========
+
+   PresentEnemies(), Infight()
 
 22.03.2009, Zesstra
diff --git a/doc/lfun/Enter b/doc/lfun/Enter
index 7987efa..0ebc7f0 100644
--- a/doc/lfun/Enter
+++ b/doc/lfun/Enter
@@ -1,40 +1,64 @@
+
 Enter()
+*******
 
-FUNKTION:
-     int Enter();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int Enter();
 
-BESCHREIBUNG:
-     Wenn sich der Spieler noch nicht auf dem Transporter befindet, und der
-     Transporter momentan an einer Haltestelle liegt, betritt der Spieler
-     den Transporter.
 
-RUeCKGABEWERT:
-     Null, wenn der Spieler den Transporter nicht betreten konnte, sonst
-     ungleich Null.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Es werden keine Tests durchgefuehrt, ob der Transporter ueberhaupt
-     angesprochen wurde! Das muss man selber machen.
+   /std/transport.c
 
-BEISPIELE:
 
-     int myEnter(string str)
-     {
-       if (str && id(str))
-         return Enter();
+ARGUMENTE
+=========
 
-       notify_fail("Was willst Du betreten?\n");
-       return 0;
-     }
+   keine
 
-SIEHE AUCH:
-     Leave(), /std/transport.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Wenn sich der Spieler noch nicht auf dem Transporter befindet, und der
+   Transporter momentan an einer Haltestelle liegt, betritt der Spieler
+   den Transporter.
+
+
+RUeCKGABEWERT
+=============
+
+   Null, wenn der Spieler den Transporter nicht betreten konnte, sonst
+   ungleich Null.
+
+
+BEMERKUNGEN
+===========
+
+   Es werden keine Tests durchgefuehrt, ob der Transporter ueberhaupt
+   angesprochen wurde! Das muss man selber machen.
+
+
+BEISPIELE
+=========
+
+   int myEnter(string str)
+   {
+     if (str && id(str))
+       return Enter();
+
+     notify_fail("Was willst Du betreten?\n");
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Leave(), /std/transport.c
+
 Last modified: Wed May 8 10:18:42 1996 by Wargon
diff --git a/doc/lfun/EvalArmour b/doc/lfun/EvalArmour
index f1d356a..7daf07c 100644
--- a/doc/lfun/EvalArmour
+++ b/doc/lfun/EvalArmour
@@ -1,21 +1,40 @@
+
 EvalArmour()
+************
 
-FUNKTION:
-    int EvalArmour(object ob, closure qp)
- 
-DEFINIERT IN:
-    /std/room/shop.c
- 
-ARGUMENTE:
-    ob - Eine Ruestung.
-    qp - symbol_function("QueryProp",ob)
 
-BESCHREIBUNG:
-    Bewertet die Ruestung.
- 
-RUECKGABEWERT:
-    Max(P_AC,P_EFFECTIVE_AC);
- 
-SIEHE AUCH:
-    FindBestArmour()
+FUNKTION
+========
 
+   int EvalArmour(object ob, closure qp)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   ob - Eine Ruestung.
+   qp - symbol_function("QueryProp",ob)
+
+
+BESCHREIBUNG
+============
+
+   Bewertet die Ruestung.
+
+
+RUECKGABEWERT
+=============
+
+   Max(P_AC,P_EFFECTIVE_AC);
+
+
+SIEHE AUCH
+==========
+
+   FindBestArmour()
diff --git a/doc/lfun/EvalWeapon b/doc/lfun/EvalWeapon
index 1e671a3..395a0a1 100644
--- a/doc/lfun/EvalWeapon
+++ b/doc/lfun/EvalWeapon
@@ -1,21 +1,40 @@
+
 EvalWeapon()
+************
 
-FUNKTION:
-    int EvalWeapon(object ob, closure qp)
- 
-DEFINIERT IN:
-    /std/room/shop.c
- 
-ARGUMENTE:
-    ob - Eine Waffe.
-    qp - symbol_function("QueryProp",ob)
 
-BESCHREIBUNG:
-    Bewertet die Waffe.
- 
-RUECKGABEWERT:
-    Max(P_WC,P_EFFECTIVE_WC);
- 
-SIEHE AUCH:
-    FindBestWeapon()
+FUNKTION
+========
 
+   int EvalWeapon(object ob, closure qp)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   ob - Eine Waffe.
+   qp - symbol_function("QueryProp",ob)
+
+
+BESCHREIBUNG
+============
+
+   Bewertet die Waffe.
+
+
+RUECKGABEWERT
+=============
+
+   Max(P_WC,P_EFFECTIVE_WC);
+
+
+SIEHE AUCH
+==========
+
+   FindBestWeapon()
diff --git a/doc/lfun/ExtraAttack b/doc/lfun/ExtraAttack
index 016b5c1..cc0b109 100644
--- a/doc/lfun/ExtraAttack
+++ b/doc/lfun/ExtraAttack
@@ -1,30 +1,49 @@
+
 ExtraAttack()
+*************
 
-FUNKTION:
-	varargs public void ExtraAttack(object enemy, int ignore_previous);
 
-ARGUMENTE:
-	enemy: Der Feind.
-	ignore_previous: Ein Flag
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Der Feind wird der Staerke der Waffe (bzw. der Haende) entsprechend
-	stark angegriffen. Hierbei wird Attack() aufgerufen.
-	Ist ignore_previous ungleich 0, dann wird die Erstschlagsperre von
-	Attack ignoriert. Dieser Angriff ist also auch dann moeglich, wenn
-	das Lebewesen eigentlich keinen Schlag mehr in dieser Runde ausfuehren
-	duerfte.
+   varargs public void ExtraAttack(object enemy, int ignore_previous);
 
-RUECKGABEWERT:
-	Keiner.
 
-BEMERKUNG:
-	Der Einsatz dieser Funktion ist genehmigungspflichtig.
-	Weitere Hinweise siehe "man Attack".
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-	"Attack"
-	/std/living/combat.c
+   enemy: Der Feind.
+   ignore_previous: Ein Flag
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Der Feind wird der Staerke der Waffe (bzw. der Haende) entsprechend
+   stark angegriffen. Hierbei wird Attack() aufgerufen.
+   Ist ignore_previous ungleich 0, dann wird die Erstschlagsperre von
+   Attack ignoriert. Dieser Angriff ist also auch dann moeglich, wenn
+   das Lebewesen eigentlich keinen Schlag mehr in dieser Runde ausfuehren
+   duerfte.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner.
+
+
+BEMERKUNG
+=========
+
+   Der Einsatz dieser Funktion ist genehmigungspflichtig.
+   Weitere Hinweise siehe "man Attack".
+
+
+SIEHE AUCH
+==========
+
+   "Attack"
+   /std/living/combat.c
+
 Last modified: Sun Nov 21 12:32:20 2004 by Bambi
diff --git a/doc/lfun/FilterArmours b/doc/lfun/FilterArmours
index f934933..32a7f2b 100644
--- a/doc/lfun/FilterArmours
+++ b/doc/lfun/FilterArmours
@@ -1,69 +1,99 @@
-FilterArmours
-FUNKTION:
-     public object *FilterArmours(closure filterfun, varargs mixed* extra)
 
-DEFINIERT IN:
-     /std/living/clothing.c
-
-ARGUMENTE:
-     closure filterfun
-       Die Closure, die entscheiden soll, ob eine Ruestung im Ergebnisarray
-       enthalten sein soll.
-     
-     mixed extra
-       Beliebig viele Extra-Argumente, die <filterfun> uebergeben werden.
-
-BESCHREIBUNG:
-     Diese Funktion ruft <filterfunc> fuer jede getragene Ruestung des
-     Lebewesen mit der jeweiligen Ruestung als Argument auf und liefert ein
-     Array mit allen Ruestungen zurueck, fuer die <filterfun> einen Wert != 0
-     zurueckliefert.
-     Die <extra> Argumente werden als zusaetzliche Parameter an <filterfun>
-     uebergeben und duerfen keine Referenzen sein.
-     
-     Diese Variante ist zu bevorzugen, wenn man Ruestungen nach bestimmten
-     Kriterien durchsuchen will und QueryArmourByType() nicht ausreichend sein
-     sollte.
-
-RUeCKGABEWERT:
-     Ein Array von Objekten mit allen passenden Ruestungen.
-
-BEISPIELE:
-     1) Ich moechte gerne alle Ruestungen haben, die beschaedigt sind:
-     private int _is_damaged(object ruestung) {
-         return ruestung->QueryProp(P_DAMAGE);
-     }
-     ...
-     object *damaged_armours = PL->FilterArmours(#'_is_damaged);
-
-     2) Ich moechte alle Ruestungen, die groesser als 50cm sind.
-     private int _armour_is_bigger(object ruestung, int size) {
-       return ruestung->QueryProp(P_SIZE) > size;
-     }
-     ...
-     object *big_armours = PL->FilterArmours(#'_amour_is_bigger, 50); 
-
-     3) alle Ruestungen mit einer speziellen ID.
-     private int _has_id(object ruestung, string idstr) {
-       return ruestung->id(idstr);
-     }
-     object *has_id = PL->FilterArmours(#'_has_id, "\ntolleruestung");
-
-     4) alle Ruestungen mit einer speziellen ID, die groesser als 50cm sind.
-     private int _has_id(object ruestung, string idstr, int size) {
-       return ruestung->id(idstr) && ruestung->QueryProp(P_SIZE) > size;
-     }
-     object *has_id = PL->FilterArmours(#'_has_id, "\ntolleruestung", 50);
-
-     5) ueberhaupt alle getragene Ruestung
-     object *rue = PL->FilterArmours(#'objectp)
+FilterArmours()
+***************
 
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(), 
-     UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), QueryArmourByType()
+FUNKTION
+========
 
-ZULETZT GEAeNDERT:
+   public object *FilterArmours(closure filterfun, varargs mixed* extra)
+
+
+DEFINIERT IN
+============
+
+   /std/living/clothing.c
+
+
+ARGUMENTE
+=========
+
+   closure filterfun
+     Die Closure, die entscheiden soll, ob eine Ruestung im Ergebnisarray
+     enthalten sein soll.
+
+
+
+   mixed extra
+     Beliebig viele Extra-Argumente, die <filterfun> uebergeben werden.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ruft <filterfunc> fuer jede getragene Ruestung des
+   Lebewesen mit der jeweiligen Ruestung als Argument auf und liefert ein
+   Array mit allen Ruestungen zurueck, fuer die <filterfun> einen Wert != 0
+   zurueckliefert.
+   Die <extra> Argumente werden als zusaetzliche Parameter an <filterfun>
+   uebergeben und duerfen keine Referenzen sein.
+
+
+
+   Diese Variante ist zu bevorzugen, wenn man Ruestungen nach bestimmten
+   Kriterien durchsuchen will und QueryArmourByType() nicht ausreichend sein
+   sollte.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array von Objekten mit allen passenden Ruestungen.
+
+
+BEISPIELE
+=========
+
+   1) Ich moechte gerne alle Ruestungen haben, die beschaedigt sind:
+   private int _is_damaged(object ruestung) {
+       return ruestung->QueryProp(P_DAMAGE);
+   }
+   ...
+   object *damaged_armours = PL->FilterArmours(#'_is_damaged);
+
+   2) Ich moechte alle Ruestungen, die groesser als 50cm sind.
+   private int _armour_is_bigger(object ruestung, int size) {
+     return ruestung->QueryProp(P_SIZE) > size;
+   }
+   ...
+   object *big_armours = PL->FilterArmours(#'_amour_is_bigger, 50);
+
+   3) alle Ruestungen mit einer speziellen ID.
+   private int _has_id(object ruestung, string idstr) {
+     return ruestung->id(idstr);
+   }
+   object *has_id = PL->FilterArmours(#'_has_id, "\ntolleruestung");
+
+   4) alle Ruestungen mit einer speziellen ID, die groesser als 50cm sind.
+   private int _has_id(object ruestung, string idstr, int size) {
+     return ruestung->id(idstr) && ruestung->QueryProp(P_SIZE) > size;
+   }
+   object *has_id = PL->FilterArmours(#'_has_id, "\ntolleruestung", 50);
+
+   5) ueberhaupt alle getragene Ruestung
+   object *rue = PL->FilterArmours(#'objectp)
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(),
+   UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), QueryArmourByType()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/FilterClothing b/doc/lfun/FilterClothing
index 95b00e3..a7e1d01 100644
--- a/doc/lfun/FilterClothing
+++ b/doc/lfun/FilterClothing
@@ -1,51 +1,80 @@
-FilterClothing
-FUNKTION:
-     public object *FilterClothing(closure filterfun, varargs mixed* extra)
 
-DEFINIERT IN:
-     /std/living/clothing.c
+FilterClothing()
+****************
 
-ARGUMENTE:
-     closure filterfun
-       Die Closure, die entscheiden soll, ob eine Kleidung im Ergebnisarray
-       enthalten sein soll.
 
-BESCHREIBUNG:
-     Diese Funktion ruft <filterfunc> fuer jede getragene Kleidung des
-     Lebewesen mit der jeweiligen Kleidung als Argument auf und liefert ein
-     Array mit aller Kleidung zurueck, fuer die <filterfun> einen Wert != 0
-     zurueckliefert.
-     Die <extra> Argumente werden als zusaetzliche Parameter an <filterfun>
-     uebergeben und duerfen keine Referenzen sein.
-     
-     Diese Variante ist zu bevorzugen, wenn man die getrage Kleidung nach
-     bestimmten Kriterien durchsuchen will. 
+FUNKTION
+========
 
-RUeCKGABEWERT:
-     Ein Array von Objekten mit allen passenden Kleidung.
+   public object *FilterClothing(closure filterfun, varargs mixed* extra)
 
-BEISPIELE:
-     1) Ich moechte alle Kleidung, die groesser als 50cm ist.
-     private int _armour_is_bigger(object clothing, int size) {
-       return clothing->QueryProp(P_SIZE) > size;
-     }
-     ...
-     object *big_armours = PL->FilterClothing(#'_amour_is_bigger, 50); 
 
-     2) alle Kleidung mit einer speziellen ID.
-     private int _has_id(object clothing, string idstr) {
-       return clothing->id(idstr);
-     }
-     object *has_id = PL->FilterClothing(#'_has_id, "\ntollekleidung");
+DEFINIERT IN
+============
 
-     3) ueberhaupt alle getragene Kleidung
-     object *clothing = PL->FilterClothing(#'objectp)
+   /std/living/clothing.c
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(), 
-     UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterArmours(), QueryArmourByType()
 
-ZULETZT GEAeNDERT:
+ARGUMENTE
+=========
+
+   closure filterfun
+     Die Closure, die entscheiden soll, ob eine Kleidung im Ergebnisarray
+     enthalten sein soll.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ruft <filterfunc> fuer jede getragene Kleidung des
+   Lebewesen mit der jeweiligen Kleidung als Argument auf und liefert ein
+   Array mit aller Kleidung zurueck, fuer die <filterfun> einen Wert != 0
+   zurueckliefert.
+   Die <extra> Argumente werden als zusaetzliche Parameter an <filterfun>
+   uebergeben und duerfen keine Referenzen sein.
+
+
+
+   Diese Variante ist zu bevorzugen, wenn man die getrage Kleidung nach
+   bestimmten Kriterien durchsuchen will.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array von Objekten mit allen passenden Kleidung.
+
+
+BEISPIELE
+=========
+
+   1) Ich moechte alle Kleidung, die groesser als 50cm ist.
+   private int _armour_is_bigger(object clothing, int size) {
+     return clothing->QueryProp(P_SIZE) > size;
+   }
+   ...
+   object *big_armours = PL->FilterClothing(#'_amour_is_bigger, 50);
+
+   2) alle Kleidung mit einer speziellen ID.
+   private int _has_id(object clothing, string idstr) {
+     return clothing->id(idstr);
+   }
+   object *has_id = PL->FilterClothing(#'_has_id, "\ntollekleidung");
+
+   3) ueberhaupt alle getragene Kleidung
+   object *clothing = PL->FilterClothing(#'objectp)
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(),
+   UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterArmours(), QueryArmourByType()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/FindBestArmours b/doc/lfun/FindBestArmours
index 68e734b..10a5d80 100644
--- a/doc/lfun/FindBestArmours
+++ b/doc/lfun/FindBestArmours
@@ -1,38 +1,64 @@
+
 FindBestArmours()
+*****************
 
-FUNKTION:
-    varargs object *FindBestArmours(mixed type, int maxmon, int maxw,
-                                    mapping minac, mixed restr)
- 
-DEFINIERT IN:
-    /std/room/shop.c
- 
-ARGUMENTE:
-    type   - gewuenschter Ruestungstyp / Ruestungstypen
-    maxmon - Geld das ausgegeben werden darf
-    maxw   - Maximales Gewicht
-    minac  - minimale gewuenschte Ruestungsklasse pro Typ
-    restr  - zusaetzliches Argument fuer CheckFindRestrictions()
 
-BESCHREIBUNG:
-    Sucht die besten Ruestungen, die der Laden verkaufen kann.
- 
-RUECKGABEWERT:
-    Die besten Ruestungen
- 
-BEMERKUNG:
-    Die Qualitaet der Ruestung wird mit EvalArmour() bestimmt.
-    Haben zwei Ruestungen die gleiche Qualitaet,
-    wird die preiswertere genommen.
- 
-BEISPIEL:
-    FindBestArmours(AT_ARMOUR,5000)
-    Bestes Ruestung unter 5000 Muenzen.
+FUNKTION
+========
 
-    FindBestArmours(({AT_ARMOUR,AT_CLOAK,AT_BOOT}),10000,([AT_ARMOUR:20]))
-    Finded beste Ruestung, Umhang und Schuhe, die der Laden fuer
-    insgesamt 10000 Muenzen verkaufen kann, wobei die Ruestung mindestens
-    AC 20 haben muss.
+   varargs object *FindBestArmours(mixed type, int maxmon, int maxw,
+                                   mapping minac, mixed restr)
 
-SIEHE AUCH:
-    FindBestWeapon(), CheckFindRestrictions(), EvalArmour()
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   type   - gewuenschter Ruestungstyp / Ruestungstypen
+   maxmon - Geld das ausgegeben werden darf
+   maxw   - Maximales Gewicht
+   minac  - minimale gewuenschte Ruestungsklasse pro Typ
+   restr  - zusaetzliches Argument fuer CheckFindRestrictions()
+
+
+BESCHREIBUNG
+============
+
+   Sucht die besten Ruestungen, die der Laden verkaufen kann.
+
+
+RUECKGABEWERT
+=============
+
+   Die besten Ruestungen
+
+
+BEMERKUNG
+=========
+
+   Die Qualitaet der Ruestung wird mit EvalArmour() bestimmt.
+   Haben zwei Ruestungen die gleiche Qualitaet,
+   wird die preiswertere genommen.
+
+
+BEISPIEL
+========
+
+   FindBestArmours(AT_ARMOUR,5000)
+   Bestes Ruestung unter 5000 Muenzen.
+
+   FindBestArmours(({AT_ARMOUR,AT_CLOAK,AT_BOOT}),10000,([AT_ARMOUR:20]))
+   Finded beste Ruestung, Umhang und Schuhe, die der Laden fuer
+   insgesamt 10000 Muenzen verkaufen kann, wobei die Ruestung mindestens
+   AC 20 haben muss.
+
+
+SIEHE AUCH
+==========
+
+   FindBestWeapon(), CheckFindRestrictions(), EvalArmour()
diff --git a/doc/lfun/FindBestWeapon b/doc/lfun/FindBestWeapon
index d0ba8f1..1aaeb0d 100644
--- a/doc/lfun/FindBestWeapon
+++ b/doc/lfun/FindBestWeapon
@@ -1,33 +1,59 @@
+
 FindBestWeapon()
+****************
 
-FUNKTION:
-    varargs object FindBestWeapon(mixed type, int maxmon, int maxw, int hands,
-                                  int minwc, mixed restr)
- 
-DEFINIERT IN:
-    /std/room/shop.c
- 
-ARGUMENTE:
-    type   - gewuenschter Waffentyp / Waffentypen
-    maxmon - Geld das ausgegeben werden darf
-    maxw   - Maximales Gewicht
-    hands  - Anzahl Haende, die die Waffe belegen darf
-    minwc  - minimale gewuenschte Waffenklasse
-    restr  - zusaetzliches Argument fuer CheckFindRestrictions()
 
-BESCHREIBUNG:
-    Sucht die beste Waffe, die der Laden verkaufen kann.
- 
-RUECKGABEWERT:
-    Die beste Waffe :-)
- 
-BEMERKUNG:
-    Die Qualitaet der Waffe wird mit EvalWeapon() bestimmt.
-    Haben zwei Waffen die gleiche Qualitaet, wird die preiswertere genommen.
- 
-BEISPIEL:
-    FindBestWeapon(WT_SWORD,5000,1)
-    Bestes einhaendiges Schwert unter 5000 Muenzen.
+FUNKTION
+========
 
-SIEHE AUCH:
-    FindBestArmours(), CheckFindRestrictions(), EvalWeapon()
+   varargs object FindBestWeapon(mixed type, int maxmon, int maxw, int hands,
+                                 int minwc, mixed restr)
+
+
+DEFINIERT IN
+============
+
+   /std/room/shop.c
+
+
+ARGUMENTE
+=========
+
+   type   - gewuenschter Waffentyp / Waffentypen
+   maxmon - Geld das ausgegeben werden darf
+   maxw   - Maximales Gewicht
+   hands  - Anzahl Haende, die die Waffe belegen darf
+   minwc  - minimale gewuenschte Waffenklasse
+   restr  - zusaetzliches Argument fuer CheckFindRestrictions()
+
+
+BESCHREIBUNG
+============
+
+   Sucht die beste Waffe, die der Laden verkaufen kann.
+
+
+RUECKGABEWERT
+=============
+
+   Die beste Waffe :-)
+
+
+BEMERKUNG
+=========
+
+   Die Qualitaet der Waffe wird mit EvalWeapon() bestimmt.
+   Haben zwei Waffen die gleiche Qualitaet, wird die preiswertere genommen.
+
+
+BEISPIEL
+========
+
+   FindBestWeapon(WT_SWORD,5000,1)
+   Bestes einhaendiges Schwert unter 5000 Muenzen.
+
+
+SIEHE AUCH
+==========
+
+   FindBestArmours(), CheckFindRestrictions(), EvalWeapon()
diff --git a/doc/lfun/FindDistantEnemyVictim b/doc/lfun/FindDistantEnemyVictim
index a51c27f..5ea712d 100644
--- a/doc/lfun/FindDistantEnemyVictim
+++ b/doc/lfun/FindDistantEnemyVictim
@@ -1,32 +1,55 @@
+
 FindDistantEnemyVictim()
+************************
 
-FUNKTION:
-	object FindDistantEnemyVictim(string wen, object pl, string msg,
-	                              int dist, int dy)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wen  - id des gewuenschten Gegners, falls nicht angegeben:
-               SelectEnemy(FindDistantGroup(pl,-1,dist,dy,10000)
-	pl   - Caster.
-	msg  - Nachricht falls Gegner nicht anwesend ist.
-	dist - Entfernung
-	dy   - 2*erlaubte Abweichung von der Entfernung, default 100
+   object FindDistantEnemyVictim(string wen, object pl, string msg,
+                                 int dist, int dy)
 
-BESCHREIBUNG:
-	Findet einen Gegner in Entfernung dist-dy/2 bis dist+dy/2
-	z.B. fuer einen Angriffsspruch.
-	
-RUECKGABEWERT:
-	Der Auserwaehlte :-)
 
-BEMERKUNGEN:
-	1. Der Gegner wird auf jeden Fall angegriffen.
-	2. dist wird mit SA_RANGE modifiziert,
-	   dy wird mit SA_EXTENSION modifiziert.
-	3. Die Entfernung ist relativ zum Spieler.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	teams, FindEnemyVictim, FindNearEnemyVictim, FindFarEnemyVictim
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   wen  - id des gewuenschten Gegners, falls nicht angegeben:
+          SelectEnemy(FindDistantGroup(pl,-1,dist,dy,10000)
+   pl   - Caster.
+   msg  - Nachricht falls Gegner nicht anwesend ist.
+   dist - Entfernung
+   dy   - 2*erlaubte Abweichung von der Entfernung, default 100
+
+
+BESCHREIBUNG
+============
+
+   Findet einen Gegner in Entfernung dist-dy/2 bis dist+dy/2
+   z.B. fuer einen Angriffsspruch.
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   1. Der Gegner wird auf jeden Fall angegriffen.
+   2. dist wird mit SA_RANGE modifiziert,
+      dy wird mit SA_EXTENSION modifiziert.
+   3. Die Entfernung ist relativ zum Spieler.
+
+
+SIEHE AUCH
+==========
+
+   teams, FindEnemyVictim, FindNearEnemyVictim, FindFarEnemyVictim
diff --git a/doc/lfun/FindDistantGroup b/doc/lfun/FindDistantGroup
index 4dedab6..b94e048 100644
--- a/doc/lfun/FindDistantGroup
+++ b/doc/lfun/FindDistantGroup
@@ -1,31 +1,53 @@
+
 FindDistantGroup()
+******************
 
-FUNKTION:
-	varargs object *FindDistantGroup(object pl, int who,
-                                         int dist, int dy, int dx)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	pl   - Caster
-	who  - 1=Freunde, -1=Gegner, 0=beide
-	dist - Entfernung
-	dy   - Tiefe      (default 100)
-	dx   - Breite     (default 100*MAX_TEAM_ROWLEN)
+   varargs object *FindDistantGroup(object pl, int who,
+                                    int dist, int dy, int dx)
 
-BESCHREIBUNG:
-	Ermittelt Lebewesen, die sich in Entfernung <dist> in einem Bereich
-	der Breite <dx> und Tiefe <dy> befinden.
 
-RUECKGABEWERT:
-	Array mit den gefundenen Lebewesen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-	Genauere Hinweise unter "FindDistantGroups".
-	Wer sowohl Freunde wie auch Feinde in getrennten Arrays braucht,
-	sollte FindDistantGroups statt FindDistantGroup verwenden.
+   /std/spellbook.c
 
-SIEHE AUCH:
-	teams, FindDistantGroups
 
+ARGUMENTE
+=========
+
+   pl   - Caster
+   who  - 1=Freunde, -1=Gegner, 0=beide
+   dist - Entfernung
+   dy   - Tiefe      (default 100)
+   dx   - Breite     (default 100*MAX_TEAM_ROWLEN)
+
+
+BESCHREIBUNG
+============
+
+   Ermittelt Lebewesen, die sich in Entfernung <dist> in einem Bereich
+   der Breite <dx> und Tiefe <dy> befinden.
+
+
+RUECKGABEWERT
+=============
+
+   Array mit den gefundenen Lebewesen.
+
+
+BEMERKUNGEN
+===========
+
+   Genauere Hinweise unter "FindDistantGroups".
+   Wer sowohl Freunde wie auch Feinde in getrennten Arrays braucht,
+   sollte FindDistantGroups statt FindDistantGroup verwenden.
+
+
+SIEHE AUCH
+==========
+
+   teams, FindDistantGroups
diff --git a/doc/lfun/FindDistantGroups b/doc/lfun/FindDistantGroups
index 507b72e..efb3354 100644
--- a/doc/lfun/FindDistantGroups
+++ b/doc/lfun/FindDistantGroups
@@ -1,59 +1,85 @@
+
 FindDistantGroups()
+*******************
 
-FUNKTION:
-	varargs mixed FindDistantGroups(object pl, int dist, int dy, int dx)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	pl   - Caster
-	dist - Entfernung
-	dy   - Tiefe      (default 100)
-	dx   - Breite     (default 100*MAX_TEAM_ROWLEN)
+   varargs mixed FindDistantGroups(object pl, int dist, int dy, int dx)
 
-BESCHREIBUNG:
-	Ermitteld feindliche (bei Spielern NPCs, bei NPCs Spieler) und
-	freundliche (bei Spielern Spieler, bei NPCs NPCs) Lebewesen,
-	die sich in Entfernung <dist> in einem Bereich der Breite <dx>
-	und Tiefe <dy> befinden.
 
-RUECKGABEWERT:
-	Array mit zwei Arrays als Inhalt:
-	({ feindliche Lebewesen, freundliche Lebewesen })
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-	Die Entfernungsangaben sind als cm. zu verstehen.
-	Jedes Lebewesen belegt 50cm x 50cm mit Abstand 50cm
-	zum naechsten Lebewesen in jeder Richtung.
-	Die Breitenangabe wirkt sich nur in der Anzahl der
-	Lebewesen aus, die zufaellig pro Reihe ausgewaehlt werden.
-	Die Skillattribute SA_RANGE und SA_EXTENSION werden beruecksichtigt.
+   /std/spellbook.c
 
-BEISPIEL:
-	dist=200, dy=200, dx=200, ein Punkt = 50cm x 50cm
-	   . . . . . . . . . . . . .
-	3. . . . . . . G . . . . . .
-	   . . . . . . . . . . . . .
-	2. . . . . . G . G . . . . .dist+dy/2-+
-	   . . . . . . . . . . . . .          |  
-	1. . . . . G . G . G . . . .     dist +-+ (Gegner G)
-	---.-.-.-.-.-.-.-.-.-.-.-.-.          | |
-	1. . . . . F . F . F . . . .dist-dy/2-+ | (Freunde F)
-	   . . . . . . . . . . . . .            |
-	2. . . . . . F . S . . . . .------------+ (Reihe des Spielers S)
-	   . . . . . . . . . . . . .
-	3. . . . . . . F . . . . . .
-	   . . . . . . . . . . . . .
-	Abgedeckter Bereich:           100cm  bis  300cm
-                Reihe 3:  375cm..425cm         375>300 -> nicht erwischt
-                Reihe 2:  275cm..325cm         275<300 -> erwischt
-	Gegner  Reihe 1:  175cm..225cm 100<175,225<300 -> erwischt
-	Freunde Reihe 1:   75cm..125cm 100<125         -> erwischt
-	        Reihe 2:  -25cm...25cm 100> 25         -> nicht erwischt
-                Reihe 3: -125cm..-75cm 100>-75         -> nicht erwischt
-	Ergebnis: ({({G,G,G,G}),({F,F})})
-	(Maximal 2 Lebewesen pro Reihe bei Breite 200).
 
-SIEHE AUCH:
-	teams, FindDistantGroup
+ARGUMENTE
+=========
+
+   pl   - Caster
+   dist - Entfernung
+   dy   - Tiefe      (default 100)
+   dx   - Breite     (default 100*MAX_TEAM_ROWLEN)
+
+
+BESCHREIBUNG
+============
+
+   Ermitteld feindliche (bei Spielern NPCs, bei NPCs Spieler) und
+   freundliche (bei Spielern Spieler, bei NPCs NPCs) Lebewesen,
+   die sich in Entfernung <dist> in einem Bereich der Breite <dx>
+   und Tiefe <dy> befinden.
+
+
+RUECKGABEWERT
+=============
+
+   Array mit zwei Arrays als Inhalt:
+   ({ feindliche Lebewesen, freundliche Lebewesen })
+
+
+BEMERKUNGEN
+===========
+
+   Die Entfernungsangaben sind als cm. zu verstehen.
+   Jedes Lebewesen belegt 50cm x 50cm mit Abstand 50cm
+   zum naechsten Lebewesen in jeder Richtung.
+   Die Breitenangabe wirkt sich nur in der Anzahl der
+   Lebewesen aus, die zufaellig pro Reihe ausgewaehlt werden.
+   Die Skillattribute SA_RANGE und SA_EXTENSION werden beruecksichtigt.
+
+
+BEISPIEL
+========
+
+   dist=200, dy=200, dx=200, ein Punkt = 50cm x 50cm
+      . . . . . . . . . . . . .
+   3. . . . . . . G . . . . . .
+      . . . . . . . . . . . . .
+   2. . . . . . G . G . . . . .dist+dy/2-+
+      . . . . . . . . . . . . .          |
+   1. . . . . G . G . G . . . .     dist +-+ (Gegner G)
+   ---.-.-.-.-.-.-.-.-.-.-.-.-.          | |
+   1. . . . . F . F . F . . . .dist-dy/2-+ | (Freunde F)
+      . . . . . . . . . . . . .            |
+   2. . . . . . F . S . . . . .------------+ (Reihe des Spielers S)
+      . . . . . . . . . . . . .
+   3. . . . . . . F . . . . . .
+      . . . . . . . . . . . . .
+   Abgedeckter Bereich:           100cm  bis  300cm
+           Reihe 3:  375cm..425cm         375>300 -> nicht erwischt
+           Reihe 2:  275cm..325cm         275<300 -> erwischt
+   Gegner  Reihe 1:  175cm..225cm 100<175,225<300 -> erwischt
+   Freunde Reihe 1:   75cm..125cm 100<125         -> erwischt
+           Reihe 2:  -25cm...25cm 100> 25         -> nicht erwischt
+           Reihe 3: -125cm..-75cm 100>-75         -> nicht erwischt
+   Ergebnis: ({({G,G,G,G}),({F,F})})
+   (Maximal 2 Lebewesen pro Reihe bei Breite 200).
+
+
+SIEHE AUCH
+==========
+
+   teams, FindDistantGroup
diff --git a/doc/lfun/FindEnemyVictim b/doc/lfun/FindEnemyVictim
index 0ab72fc..c5a81a6 100644
--- a/doc/lfun/FindEnemyVictim
+++ b/doc/lfun/FindEnemyVictim
@@ -1,24 +1,47 @@
+
 FindEnemyVictim()
+*****************
 
-FUNKTION:
-	object FindEnemyVictim(string wen, object pl, string msg)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wen - id des gewuenschten Gegners, falls nicht angegeben SelectEnemy.
-	pl  - Caster.
-	msg - Nachricht falls Gegner nicht anwesend ist.
+   object FindEnemyVictim(string wen, object pl, string msg)
 
-BESCHREIBUNG:
-	Findet einen Gegner, z.B. fuer einen Angriffsspruch.
-	
-RUECKGABEWERT:
-	Der Auserwaehlte :-)
 
-BEMERKUNGEN:
-	Der Gegner wird auf jeden Fall angegriffen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	FindLivingVictim
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   wen - id des gewuenschten Gegners, falls nicht angegeben SelectEnemy.
+   pl  - Caster.
+   msg - Nachricht falls Gegner nicht anwesend ist.
+
+
+BESCHREIBUNG
+============
+
+   Findet einen Gegner, z.B. fuer einen Angriffsspruch.
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   Der Gegner wird auf jeden Fall angegriffen.
+
+
+SIEHE AUCH
+==========
+
+   FindLivingVictim
diff --git a/doc/lfun/FindFarEnemyVictim b/doc/lfun/FindFarEnemyVictim
index e43dda6..455cf89 100644
--- a/doc/lfun/FindFarEnemyVictim
+++ b/doc/lfun/FindFarEnemyVictim
@@ -1,30 +1,53 @@
+
 FindFarEnemyVictim()
+********************
 
-FUNKTION:
-	object FindFarEnemyVictim(string wen, object pl, string msg,
-	                          int min, int max)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wen - id des gewuenschten Gegners, SelectFarEnemy falls n/a.
-	pl  - Caster.
-	msg - Nachricht falls Gegner nicht anwesend ist.
-	min - minimale Kampfreihe
-	max - maximale Kampfreihe
+   object FindFarEnemyVictim(string wen, object pl, string msg,
+                             int min, int max)
 
-BESCHREIBUNG:
-	Findet einen Gegner aus Kampfreihe <min> bis <max>
-	z.B. fuer einen Angriffsspruch.
-	
-RUECKGABEWERT:
-	Der Auserwaehlte :-)
 
-BEMERKUNGEN:
-	1. Der Gegner wird auf jeden Fall angegriffen.
-	2. Die Reihenangaben werden NICHT mit Skillattributen modifiziert.
-	3. Die Angabe der Reihe ist absolut.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	teams, FindEnemyVictim, FindNearEnemyVictim, FindDistantEnemyVictim
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   wen - id des gewuenschten Gegners, SelectFarEnemy falls n/a.
+   pl  - Caster.
+   msg - Nachricht falls Gegner nicht anwesend ist.
+   min - minimale Kampfreihe
+   max - maximale Kampfreihe
+
+
+BESCHREIBUNG
+============
+
+   Findet einen Gegner aus Kampfreihe <min> bis <max>
+   z.B. fuer einen Angriffsspruch.
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   1. Der Gegner wird auf jeden Fall angegriffen.
+   2. Die Reihenangaben werden NICHT mit Skillattributen modifiziert.
+   3. Die Angabe der Reihe ist absolut.
+
+
+SIEHE AUCH
+==========
+
+   teams, FindEnemyVictim, FindNearEnemyVictim, FindDistantEnemyVictim
diff --git a/doc/lfun/FindGroup b/doc/lfun/FindGroup
index ec1c693..112c76f 100644
--- a/doc/lfun/FindGroup
+++ b/doc/lfun/FindGroup
@@ -1,76 +1,98 @@
+
 FindGroup()
+***********
 
-FUNKTION:
-    object*FindGroup(object pl,int who);
 
-DEFINIERT IN:
-    /std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-    pl
-      Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
-      gefunden werden sollen.
-    who
-      Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
-      sollen (Konstanten definiert in '/sys/new_skills.h'):
-        FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
-        FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
-        FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+   object*FindGroup(object pl,int who);
 
-RUeCKGABEWERT:
-    Array mit gefundenen Lebewesen
 
-BESCHREIBUNG:
-    Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man
-    per Hand ein Opfer auswaehlen moechte, laesst sich mittels der
-    Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in
-    der Umgebung von <pl> zu finden sind.
-    Je nachdem, was man denn genau vorhat, kann man sich von der
-    Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen
-    lassen.
-    Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt
-    man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die
-    Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte
-    schliesslich FG_ALL.
-    Bei der Auswahl gelten folgende Regeln:
-      (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich
-          feindlich gesinnt.
-      (2) Teammitglieder von <pl> sind grundsaetzlich freundlich
-          gesinnt.
-      (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs
-          gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property
-          P_FRIEND den Spielern zuordnen.
-      (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich
-          eine feindliche Einstellung gegenueber haben, sofern die NPCs
-          nicht die Property P_FRIEND gesetzt haben
-           (was standardmaessig natuerlich nicht der Fall ist).
-      (5) Netztote werden nicht erkannt.
-      (6) Magier werden nicht erkannt, wenn sie unsichtbar sind.
-      (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn
-          <pl> mit ihm im Kampf ist.
-      (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche
-          eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK
-          gesetzt haben, nicht erkannt.
-    Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler
-    hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter
-    Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei
-    an, dass sich die freundlich gesinnten Lebewesen des Gegners auch
-    naeher bei ihm befinden als die feindlich gesinnten:
-      victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster);
-      victimList=FindGroup(victim,FG_FRIENDS);
-      map_objects(victimList,
-                      "Defend",
-                      100,
-                      DT_FIRE,
-                      ([SP_SHOW_DAMAGE:1]),
-                      caster);
-    Hiermit trifft man also auch die Freunde von <victim>.
+   /std/spellbook.c
 
-SIEHE AUCH:
-    FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   pl
+     Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
+     gefunden werden sollen.
+   who
+     Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
+     sollen (Konstanten definiert in '/sys/new_skills.h'):
+       FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
+       FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
+       FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit gefundenen Lebewesen
+
+
+BESCHREIBUNG
+============
+
+   Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man
+   per Hand ein Opfer auswaehlen moechte, laesst sich mittels der
+   Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in
+   der Umgebung von <pl> zu finden sind.
+   Je nachdem, was man denn genau vorhat, kann man sich von der
+   Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen
+   lassen.
+   Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt
+   man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die
+   Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte
+   schliesslich FG_ALL.
+   Bei der Auswahl gelten folgende Regeln:
+     (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich
+         feindlich gesinnt.
+     (2) Teammitglieder von <pl> sind grundsaetzlich freundlich
+         gesinnt.
+     (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs
+         gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property
+         P_FRIEND den Spielern zuordnen.
+     (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich
+         eine feindliche Einstellung gegenueber haben, sofern die NPCs
+         nicht die Property P_FRIEND gesetzt haben
+          (was standardmaessig natuerlich nicht der Fall ist).
+     (5) Netztote werden nicht erkannt.
+     (6) Magier werden nicht erkannt, wenn sie unsichtbar sind.
+     (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn
+         <pl> mit ihm im Kampf ist.
+     (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche
+         eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK
+         gesetzt haben, nicht erkannt.
+   Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler
+   hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs.
+
+
+BEISPIELE
+=========
+
+   Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter
+   Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei
+   an, dass sich die freundlich gesinnten Lebewesen des Gegners auch
+   naeher bei ihm befinden als die feindlich gesinnten:
+     victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster);
+     victimList=FindGroup(victim,FG_FRIENDS);
+     map_objects(victimList,
+                     "Defend",
+                     100,
+                     DT_FIRE,
+                     ([SP_SHOW_DAMAGE:1]),
+                     caster);
+   Hiermit trifft man also auch die Freunde von <victim>.
+
+
+SIEHE AUCH
+==========
+
+   FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
+
 Last modified: Mon Jan 28 21:45:00 2002 by Tiamak
diff --git a/doc/lfun/FindGroupN b/doc/lfun/FindGroupN
index 8364f77..b0104ee 100644
--- a/doc/lfun/FindGroupN
+++ b/doc/lfun/FindGroupN
@@ -1,45 +1,67 @@
+
 FindGroupN()
+************
 
-FUNKTION:
-	object*FindGroupN(object pl,int who,int n);
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	pl
-	  Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
-	  gefunden werden sollen.
-	who
-	  Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
-	  sollen (Konstanten definiert in '/sys/new_skills.h'):
-	    FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
-	    FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
-	    FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
-	n
-	  Anzahl der Lebewesen, die zurueckgegeben werden sollen.
-	  Hierbei geht vorher noch das Skillattribute SA_EXTENSION ein!
-	  Es wird mindestens 1 Lebewesen zurueckgeliefert (sofern gefunden).
+   object*FindGroupN(object pl,int who,int n);
 
-RUeCKGABEWERT:
-	Array mit gefundenen Lebewesen
 
-BESCHREIBUNG:
-	Ausgesucht werden die Lebewesen genauso wie bei FindGroup(), nur
-	dass zum Schluss die Anzahl noch begrenzt wird.
+DEFINIERT IN
+============
 
-BEISPIELE:
-	Man moechte maximal 5 Feinde finden, die man gleichzeitig mit einem
-	Spell belegen kann:
-	  enemyList=FindGroupN(caster,FG_ENEMIES,5);
-	Dies gilt jedoch nur bei SA_EXTENSION==100, sonst wird
-	dementsprechend mehr oder weniger zurueckgegeben.
-	 (also bei SA_EXTENSION==200 doppelt so viele -> 10 Lebewesen)
-	Das Skillattribute SA_EXTENSION kann auch durch SA_QUALITY
-	veraendert worden sein; das sollte beachtet werden.
+   /std/spellbook.c
 
-SIEHE AUCH:
-	FindGroup(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   pl
+     Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
+     gefunden werden sollen.
+   who
+     Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
+     sollen (Konstanten definiert in '/sys/new_skills.h'):
+       FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
+       FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
+       FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+   n
+     Anzahl der Lebewesen, die zurueckgegeben werden sollen.
+     Hierbei geht vorher noch das Skillattribute SA_EXTENSION ein!
+     Es wird mindestens 1 Lebewesen zurueckgeliefert (sofern gefunden).
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit gefundenen Lebewesen
+
+
+BESCHREIBUNG
+============
+
+   Ausgesucht werden die Lebewesen genauso wie bei FindGroup(), nur
+   dass zum Schluss die Anzahl noch begrenzt wird.
+
+
+BEISPIELE
+=========
+
+   Man moechte maximal 5 Feinde finden, die man gleichzeitig mit einem
+   Spell belegen kann:
+     enemyList=FindGroupN(caster,FG_ENEMIES,5);
+   Dies gilt jedoch nur bei SA_EXTENSION==100, sonst wird
+   dementsprechend mehr oder weniger zurueckgegeben.
+    (also bei SA_EXTENSION==200 doppelt so viele -> 10 Lebewesen)
+   Das Skillattribute SA_EXTENSION kann auch durch SA_QUALITY
+   veraendert worden sein; das sollte beachtet werden.
+
+
+SIEHE AUCH
+==========
+
+   FindGroup(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
+
 Last modified: Mon Jan 25 15:04:31 1999 by Patryn
diff --git a/doc/lfun/FindGroupP b/doc/lfun/FindGroupP
index efef568..e4c297b 100644
--- a/doc/lfun/FindGroupP
+++ b/doc/lfun/FindGroupP
@@ -1,46 +1,68 @@
+
 FindGroupP()
+************
 
-FUNKTION:
-	object*FindGroupP(object pl,int who,int pr);
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	pl
-	  Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
-	  gefunden werden sollen.
-	who
-	  Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
-	  sollen (Konstanten definiert in '/sys/new_skills.h'):
-	    FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
-	    FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
-	    FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
-	pr
-	  Wahrscheinlichkeit, mit der ein Lebewesen ausgesucht werden soll.
-	  Hierbei geht vorher noch das Skillattribute SA_EXTENSION ein!
+   object*FindGroupP(object pl,int who,int pr);
 
-RUeCKGABEWERT:
-	Array mit gefundenen Lebewesen
 
-BESCHREIBUNG:
-	Ausgesucht werden die Lebewesen genauso wie bei FindGroup(), nur
-	dass zum Schluss die einzelnen Lebewesen per Zufall ausgewaehlt
-	werden. Es ist also nicht gesichert, dass ueberhaupt ein Lebewesen
-	zurueckgeliefert wird, trotzdem welche gefunden wurden.
+DEFINIERT IN
+============
 
-BEISPIELE:
-	Man moechte im Schnitt 50% der Feinde finden, die man gleichzeitig
-	mit einem Spell belegt:
-	  enemyList=FindGroupP(caster,FG_ENEMIES,50);
-	Dies gilt jedoch nur bei SA_EXTENSION==100, sonst wird mit
-	dementsprechend mehr oder weniger Wahrscheinlichkeit zurueckgegeben.
-	 (also bei SA_EXTENSION==200 doppelt so viele -> 100%, also alle)
-	Das Skillattribute SA_EXTENSION kann auch durch SA_QUALITY
-	veraendert worden sein; das sollte beachtet werden.
+   /std/spellbook.c
 
-SIEHE AUCH:
-	FindGroup(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   pl
+     Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
+     gefunden werden sollen.
+   who
+     Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
+     sollen (Konstanten definiert in '/sys/new_skills.h'):
+       FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
+       FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
+       FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+   pr
+     Wahrscheinlichkeit, mit der ein Lebewesen ausgesucht werden soll.
+     Hierbei geht vorher noch das Skillattribute SA_EXTENSION ein!
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit gefundenen Lebewesen
+
+
+BESCHREIBUNG
+============
+
+   Ausgesucht werden die Lebewesen genauso wie bei FindGroup(), nur
+   dass zum Schluss die einzelnen Lebewesen per Zufall ausgewaehlt
+   werden. Es ist also nicht gesichert, dass ueberhaupt ein Lebewesen
+   zurueckgeliefert wird, trotzdem welche gefunden wurden.
+
+
+BEISPIELE
+=========
+
+   Man moechte im Schnitt 50% der Feinde finden, die man gleichzeitig
+   mit einem Spell belegt:
+     enemyList=FindGroupP(caster,FG_ENEMIES,50);
+   Dies gilt jedoch nur bei SA_EXTENSION==100, sonst wird mit
+   dementsprechend mehr oder weniger Wahrscheinlichkeit zurueckgegeben.
+    (also bei SA_EXTENSION==200 doppelt so viele -> 100%, also alle)
+   Das Skillattribute SA_EXTENSION kann auch durch SA_QUALITY
+   veraendert worden sein; das sollte beachtet werden.
+
+
+SIEHE AUCH
+==========
+
+   FindGroup(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
+
 Last modified: Mon Jan 25 15:04:31 1999 by Patryn
diff --git a/doc/lfun/FindNearEnemyVictim b/doc/lfun/FindNearEnemyVictim
index 86d77ce..4bd0458 100644
--- a/doc/lfun/FindNearEnemyVictim
+++ b/doc/lfun/FindNearEnemyVictim
@@ -1,25 +1,48 @@
+
 FindNearEnemyVictim()
+*********************
 
-FUNKTION:
-	object FindNearEnemyVictim(string wen, object pl, string msg)
 
-DEFINIERT IN:
-	/std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wen - id des gewuenschten Gegners, SelectNearEnemy falls n/a.
-	pl  - Caster.
-	msg - Nachricht falls Gegner nicht anwesend ist.
+   object FindNearEnemyVictim(string wen, object pl, string msg)
 
-BESCHREIBUNG:
-	Findet einen im Nahkampf erreichbaren Gegner,
-	z.B. fuer einen Angriffsspruch.
-	
-RUECKGABEWERT:
-	Der Auserwaehlte :-)
 
-BEMERKUNGEN:
-	Der Gegner wird auf jeden Fall angegriffen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	teams, FindEnemyVictim, FindFarEnemyVictim, FindDistantEnemyVictim
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   wen - id des gewuenschten Gegners, SelectNearEnemy falls n/a.
+   pl  - Caster.
+   msg - Nachricht falls Gegner nicht anwesend ist.
+
+
+BESCHREIBUNG
+============
+
+   Findet einen im Nahkampf erreichbaren Gegner,
+   z.B. fuer einen Angriffsspruch.
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   Der Gegner wird auf jeden Fall angegriffen.
+
+
+SIEHE AUCH
+==========
+
+   teams, FindEnemyVictim, FindFarEnemyVictim, FindDistantEnemyVictim
diff --git a/doc/lfun/FindPotion b/doc/lfun/FindPotion
index 417c89b..5d8cae1 100644
--- a/doc/lfun/FindPotion
+++ b/doc/lfun/FindPotion
@@ -1,49 +1,74 @@
+
 FindPotion()
+************
 
-FUNKTION:
-     varargs int FindPotion(string s);
 
-DEFINIERT IN:
-     /std/player/potion.c
+FUNKTION
+========
 
-ARGUMENTE:
-     string s
-       Ausgabetext. Wenn 0/Leerstring, wird Default verwendet.
+   varargs int FindPotion(string s);
 
-BESCHREIBUNG:
-     Diese Funktion gibt einem aufrufenden Spieler eventuell diesen ZT.
-     
-     Das aufrufende Spielerobjekt muss dafuer:
-     * diesen ZT im Potionmaster in seiner Liste eingetragen haben
-     * diesen ZT in der Liste der bekannten Traenke haben (durch
-       Orakel also fuer ihn auch freigeschaltet)
-     * darf keine Playerkills haben (P_KILLS)
-     * darf nicht im Editiermodus sein
-     * darf kein Geist sein (Ausnahme: Geisterschloss)
 
-     Wenn alle Kriterien erfolgreich erfuellt sind, wird 's' oder 
-     "Du findest einen Zaubertrank, den Du sofort trinkst." ausgegeben
-     und dem Spieler ggf die Wahl der Attribute gegeben.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     0 bei Nichtvergabe, 1 bei erfolgreicher Vergabe.
+   /std/player/potion.c
 
-BEISPIELE:
-     string detail_papiere() {
-       if (this_player()->FindPotion(
-         break_string("Beim Rumwuehlen in den Papieren entdeckst Du einen "
-                      "kleinen Zaubertrank, den Du sofort trinkst.", 78)))
-         return "";  
-         // Es muss ein String zurueckgegeben werden, da man sonst
-         // die Fehlermeldung "Sowas siehst du hier nicht." bekommt
-       else
-         return "Die Papiere sind alle unbeschriftet.\n";
-     }
 
-SIEHE AUCH:
-     Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
-     Verwandt:  AddKnownPotion(), RemoveKnownPotion(), InList()
-     Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
-     Befehl:    traenke (fuer Magier zum Einschalten des Findens von ZTs)
+ARGUMENTE
+=========
+
+   string s
+     Ausgabetext. Wenn 0/Leerstring, wird Default verwendet.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt einem aufrufenden Spieler eventuell diesen ZT.
+
+
+
+   Das aufrufende Spielerobjekt muss dafuer:
+   * diesen ZT im Potionmaster in seiner Liste eingetragen haben
+   * diesen ZT in der Liste der bekannten Traenke haben (durch
+     Orakel also fuer ihn auch freigeschaltet)
+   * darf keine Playerkills haben (P_KILLS)
+   * darf nicht im Editiermodus sein
+   * darf kein Geist sein (Ausnahme: Geisterschloss)
+
+   Wenn alle Kriterien erfolgreich erfuellt sind, wird 's' oder
+   "Du findest einen Zaubertrank, den Du sofort trinkst." ausgegeben
+   und dem Spieler ggf die Wahl der Attribute gegeben.
+
+
+RUeCKGABEWERT
+=============
+
+   0 bei Nichtvergabe, 1 bei erfolgreicher Vergabe.
+
+
+BEISPIELE
+=========
+
+   string detail_papiere() {
+     if (this_player()->FindPotion(
+       break_string("Beim Rumwuehlen in den Papieren entdeckst Du einen "
+                    "kleinen Zaubertrank, den Du sofort trinkst.", 78)))
+       return "";
+       // Es muss ein String zurueckgegeben werden, da man sonst
+       // die Fehlermeldung "Sowas siehst du hier nicht." bekommt
+     else
+       return "Die Papiere sind alle unbeschriftet.\n";
+   }
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
+   Verwandt:  AddKnownPotion(), RemoveKnownPotion(), InList()
+   Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
+   Befehl:    traenke (fuer Magier zum Einschalten des Findens von ZTs)
 
 6.Feb 2016 Gloinson
diff --git a/doc/lfun/FindRangedTarget b/doc/lfun/FindRangedTarget
index 75970fb..5fa6776 100644
--- a/doc/lfun/FindRangedTarget
+++ b/doc/lfun/FindRangedTarget
@@ -1,40 +1,63 @@
+
 FindRangedTarget()
+******************
 
-FUNKTION:
-    static string FindRangedTarget(string str, mapping shoot)
 
-DEFINIERT IN:
-    /std/ranged_weapon.c
+FUNKTION
+========
 
-ARGUMENTE:
-    string str    - Schusssyntax
-    mapping shoot - Schussdaten
+   static string FindRangedTarget(string str, mapping shoot)
 
-BESCHREIBUNG:
-    Erhaelt von /std/ranged_weapon::cmd_shoot() die Schussdaten und eine
-    eventuell bereits modifizierte Syntax und versucht einen passenden Gegner
-    im Raum oder im Gebiet (P_SHOOTING_AREA) zu finden.
-    Dieser wird in SI_ENEMY im Mapping 'shoot' eingetragen und ein Wert != 0
-    zurueckgegeben.
 
-RUECKGABEWERT:
-    0     bei Fehlschlag
-    != 0  bei gueltigem SI_ENEMY in 'shoot'
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    'shoot' enthaelt normalerweise folgende Eintraege:
-    * Key P_WEAPON:       die Schusswaffe
-    * Key P_WEAPON_TYPE:  P_AMMUNITION, also die Munitions-ID
-    * Key P_STRETCH_TIME: P_STRETCH_TIME der Waffe
-    * Key P_WC:           P_SHOOTING_WC der Waffe
+   /std/ranged_weapon.c
 
-SIEHE AUCH:
-    Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
-    Methoden:  shoot_dam(L), cmd_shoot(L)
-    Gebiet:    P_RANGE, P_SHOOTING_AREA, P_TARGET_AREA
-    Team:      PresentPosition(L)
-    Suche:     present, SelectFarEnemy(L)
-    Syntax:    _unparsed_args(L)
-    Sonstiges: fernwaffen
 
-28.Jul 2014 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   string str    - Schusssyntax
+   mapping shoot - Schussdaten
+
+
+BESCHREIBUNG
+============
+
+   Erhaelt von /std/ranged_weapon::cmd_shoot() die Schussdaten und eine
+   eventuell bereits modifizierte Syntax und versucht einen passenden Gegner
+   im Raum oder im Gebiet (P_SHOOTING_AREA) zu finden.
+   Dieser wird in SI_ENEMY im Mapping 'shoot' eingetragen und ein Wert != 0
+   zurueckgegeben.
+
+
+RUECKGABEWERT
+=============
+
+   0     bei Fehlschlag
+   != 0  bei gueltigem SI_ENEMY in 'shoot'
+
+
+BEMERKUNGEN
+===========
+
+   'shoot' enthaelt normalerweise folgende Eintraege:
+   * Key P_WEAPON:       die Schusswaffe
+   * Key P_WEAPON_TYPE:  P_AMMUNITION, also die Munitions-ID
+   * Key P_STRETCH_TIME: P_STRETCH_TIME der Waffe
+   * Key P_WC:           P_SHOOTING_WC der Waffe
+
+
+SIEHE AUCH
+==========
+
+   Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
+   Methoden:  shoot_dam(L), cmd_shoot(L)
+   Gebiet:    P_RANGE, P_SHOOTING_AREA, P_TARGET_AREA
+   Team:      PresentPosition(L)
+   Suche:     present, SelectFarEnemy(L)
+   Syntax:    _unparsed_args(L)
+   Sonstiges: fernwaffen
+
+28.Jul 2014 Gloinson
diff --git a/doc/lfun/Flee b/doc/lfun/Flee
index 6a63d89..995cf26 100644
--- a/doc/lfun/Flee
+++ b/doc/lfun/Flee
@@ -1,57 +1,83 @@
+
 Flee()
+******
 
-FUNKTION:
-        public varargs void Flee( object oldenv, int force )
 
-DEFINIERT IN:
-        /sys/living/combat.h
-        /std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-        oldenv
-          Ein Raum oder 0.
-          Wird ein Raum angegeben, dann muss sich der Fluechtende in diesem
-          Raum befinden, damit er versucht, zu fluechten, es sei denn, das
-          optionale Flag "force" ist gesetzt.
-        force
-          1, wenn der spieler unabhaengig von seiner Vorsicht fluechten soll.
-          0 sonst.
+   public varargs void Flee( object oldenv, int force )
 
-BESCHREIBUNG:
-        Flee() wird im heart_beat() oder von CheckWimpyAndFlee() aufgerufen,
-        um den Spieler fluechten zu lassen. Man kann die Funktion im Spieler
-        auch "von Hand" aufrufen, beispielsweise in einem Spell. Man sollte
-        dann force auf 1 setzen, damit der Spieler unabhaengig von seiner
-        Vorsicht fluechtet.
-        Hierbei kann die Flucht dazu fuehren, dass man die Teamreihe wechselt,
-        aber auch, dass man den Raum verlaesst.
-        
-RUeCKGABEWERT:
-        keiner
 
-BEMERKUNGEN:
+DEFINIERT IN
+============
 
-BEISPIELE:
-        this_player()->Flee(0, 1);
-        // Der Spieler soll fluechten, egal, ob seine Lebenspunkte geringer
-        // als seine Vorsicht sind und unabhaengig von seiner Position.
-        
-        this_player()->Flee( find_object("/gilden/abenteurer") );
-        // Der Spieler soll fluechten, wenn er sich in der Abenteurergilde
-        // befindet (oder wenn diese nicht existiert)
-        
-        this_player()->Flee( "/gilden/abenteurer" );
-        // Der Spieler wird nicht fluechten, da der Vergleich von Dateiname
-        // und dem Raum 0 ergibt.
+   /sys/living/combat.h
+   /std/living/combat.c
 
-        this_player()->Flee( find_object("/gilden/abenteurer"), 1);
-        // Der Spieler soll auf jeden Fall fluechten, egal ob er sich in der
-        // Abenteurergilde befindet oder nicht. Grund: Gesetztes force-Flag.
-        
-        
-        
-SIEHE AUCH:
-        CheckWimpyAndFlee(), Defend(), heart_beat(), 
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   oldenv
+     Ein Raum oder 0.
+     Wird ein Raum angegeben, dann muss sich der Fluechtende in diesem
+     Raum befinden, damit er versucht, zu fluechten, es sei denn, das
+     optionale Flag "force" ist gesetzt.
+   force
+     1, wenn der spieler unabhaengig von seiner Vorsicht fluechten soll.
+     0 sonst.
+
+
+BESCHREIBUNG
+============
+
+   Flee() wird im heart_beat() oder von CheckWimpyAndFlee() aufgerufen,
+   um den Spieler fluechten zu lassen. Man kann die Funktion im Spieler
+   auch "von Hand" aufrufen, beispielsweise in einem Spell. Man sollte
+   dann force auf 1 setzen, damit der Spieler unabhaengig von seiner
+   Vorsicht fluechtet.
+   Hierbei kann die Flucht dazu fuehren, dass man die Teamreihe wechselt,
+   aber auch, dass man den Raum verlaesst.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+
+BEISPIELE
+=========
+
+   this_player()->Flee(0, 1);
+   // Der Spieler soll fluechten, egal, ob seine Lebenspunkte geringer
+   // als seine Vorsicht sind und unabhaengig von seiner Position.
+
+
+
+   this_player()->Flee( find_object("/gilden/abenteurer") );
+   // Der Spieler soll fluechten, wenn er sich in der Abenteurergilde
+   // befindet (oder wenn diese nicht existiert)
+
+
+
+   this_player()->Flee( "/gilden/abenteurer" );
+   // Der Spieler wird nicht fluechten, da der Vergleich von Dateiname
+   // und dem Raum 0 ergibt.
+
+   this_player()->Flee( find_object("/gilden/abenteurer"), 1);
+   // Der Spieler soll auf jeden Fall fluechten, egal ob er sich in der
+   // Abenteurergilde befindet oder nicht. Grund: Gesetztes force-Flag.
+
+
+SIEHE AUCH
+==========
+
+   CheckWimpyAndFlee(), Defend(), heart_beat(),
+
 Last modified: Wed Nov 12 14:44:42 2003 by Bambi
diff --git a/doc/lfun/FreeHands b/doc/lfun/FreeHands
index 2bed9b0..c876b21 100644
--- a/doc/lfun/FreeHands
+++ b/doc/lfun/FreeHands
@@ -1,36 +1,60 @@
-FreeHands
-FUNKTION:
-     public varargs int FreeHands(object ob)
 
-DEFINIERT IN:
-     /std/living/combat.c
+FreeHands()
+***********
 
-ARGUMENTE:
-     ob - das Objekt, dessen Handnutzung vorbei ist
-        - kann 0 sein, dann wird PO benutzt
 
-RUECKGABEWERT:
-     0, wenn kein Objekt uebergeben wurde oder kein PO existiert
-     1, sonst
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Befreit die Haende eines Livings von ein bestimmten Objekt.
-     Es werden _alle_ Haende wieder freigegeben.
+   public varargs int FreeHands(object ob)
 
-BEISPIELE:
-     > halte seil fest
-     ...
-     this_player()->UseHands(this_object(),2);
-     ...
 
-     > lasse seil los
-     ...
-     this_player()->FreeHands(this_object());
-     ...
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     P_HANDS, P_HANDS_USED_BY
-     P_MAX_HANDS, P_USED_HANDS, P_FREE_HANDS
-     UseHands
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   ob - das Objekt, dessen Handnutzung vorbei ist
+      - kann 0 sein, dann wird PO benutzt
+
+
+RUECKGABEWERT
+=============
+
+   0, wenn kein Objekt uebergeben wurde oder kein PO existiert
+   1, sonst
+
+
+BESCHREIBUNG
+============
+
+   Befreit die Haende eines Livings von ein bestimmten Objekt.
+   Es werden _alle_ Haende wieder freigegeben.
+
+
+BEISPIELE
+=========
+
+   > halte seil fest
+   ...
+   this_player()->UseHands(this_object(),2);
+   ...
+
+   > lasse seil los
+   ...
+   this_player()->FreeHands(this_object());
+   ...
+
+
+SIEHE AUCH
+==========
+
+   P_HANDS, P_HANDS_USED_BY
+   P_MAX_HANDS, P_USED_HANDS, P_FREE_HANDS
+   UseHands
 
 1.Feb.2004 Gloinson
diff --git a/doc/lfun/GetAquarium b/doc/lfun/GetAquarium
index cea8d49..3896ac5 100644
--- a/doc/lfun/GetAquarium
+++ b/doc/lfun/GetAquarium
@@ -1,37 +1,59 @@
+
 GetAquarium()
+*************
 
-FUNKTION:
-     varargs public string* GetAquarium(object angel)
 
-ARGUMENTE:
-     Das optionale Argument <angel> ist die Angel selbst.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die Funktion wird beim Angeln in Raeumen gerufen, wenn diese als 
-     Gewaessertyp W_USER gesetzt haben (siehe Manpage zu P_WATER).
-     Aus der zurueckgegebenen Liste der Pfade wird einer zufaellig aus-
-     gewaehlt und das Objekt geclont. 
+   varargs public string* GetAquarium(object angel)
 
-RUECKGABEWERT:
-     String-Array mit Pfadnamen zu den in diesem Raum fangbaren Fischen.
 
-BEMERKUNG:
-     Man kann die Fangchancen durch Mehrfachnennung einzelner Eintraege 
-     modifizieren. Es muss sich bei den Eintraegen um lad- und clonebare
-     Objekte handeln.
-     Fuer selbstprogrammierte Fische ist das Basisobjekt 
-     /std/items/fishing/fish zu verwenden. Einige vorgefertigte Fische 
-     finden sich darueber hinaus in /items/fishing/aquarium/
+ARGUMENTE
+=========
 
-BEISPIEL:
-     varargs string* GetAquarium(object angel) {
-       return ({"/d/dschungel/rikus/q4e/obj/stichling",
-                "/d/dschungel/rikus/q4e/obj/karpfen",
-                "/p/seher/partymonster/obj/fisch"});
-     }
+   Das optionale Argument <angel> ist die Angel selbst.
 
-SIEHE AUCH:
-    Properties: P_WATER, P_FISH
 
------------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Die Funktion wird beim Angeln in Raeumen gerufen, wenn diese als
+   Gewaessertyp W_USER gesetzt haben (siehe Manpage zu P_WATER).
+   Aus der zurueckgegebenen Liste der Pfade wird einer zufaellig aus-
+   gewaehlt und das Objekt geclont.
+
+
+RUECKGABEWERT
+=============
+
+   String-Array mit Pfadnamen zu den in diesem Raum fangbaren Fischen.
+
+
+BEMERKUNG
+=========
+
+   Man kann die Fangchancen durch Mehrfachnennung einzelner Eintraege
+   modifizieren. Es muss sich bei den Eintraegen um lad- und clonebare
+   Objekte handeln.
+   Fuer selbstprogrammierte Fische ist das Basisobjekt
+   /std/items/fishing/fish zu verwenden. Einige vorgefertigte Fische
+   finden sich darueber hinaus in /items/fishing/aquarium/
+
+
+BEISPIEL
+========
+
+   varargs string* GetAquarium(object angel) {
+     return ({"/d/dschungel/rikus/q4e/obj/stichling",
+              "/d/dschungel/rikus/q4e/obj/karpfen",
+              "/p/seher/partymonster/obj/fisch"});
+   }
+
+
+SIEHE AUCH
+==========
+
+   Properties: P_WATER, P_FISH
+
 zuletzt geaendert: 2014-Sep-02, Arathorn
diff --git a/doc/lfun/GetDetail b/doc/lfun/GetDetail
index 4bd7301..7e5a092 100644
--- a/doc/lfun/GetDetail
+++ b/doc/lfun/GetDetail
@@ -1,67 +1,90 @@
+
 GetDetail()
+***********
 
-FUNKTION:
-    varargs string GetDetail(string key, string race, int sense)
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    key
-      Das zu ermittelnde Detail.
-    race
-      Rasse des ermittelnden Objektes (falls es ein Lebewesen ist).
-    sense
-      Die Art des zu untersuchenden Details:
-        Untersuchen, Riechen, Hoeren, Tasten.
+   varargs string GetDetail(string key, string race, int sense)
 
-BESCHREIBUNG:
-    Die Beschreibung des gewuenschten Details wird ermittelt. Dabei
-    werden rassenspezifische Details beruecksichtigt. Es gibt hierbei
-    verschiedene Detailarten, deren Typ man in <sense> angibt:
-      SENSE_VIEW    - Fuer Defaultdetails zum Untersuchen.
-      SENSE_SMELL   - Fuer Details, die man riechen kann.
-      SENSE_SOUND   - Fuer Details, die man hoeren kann.
-      SENSE_TOUCH   - Fuer Details, die man abtasten kann.
-      SENSE_READ    - Fuer Details, die man lesen kann.
 
-    Dabei ist 0 == SENSE_VIEW.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    Die Beschreibung des Details oder 0, wenn es dieses Detail nicht
-    gibt.
+   /std/thing/description.c
 
-BEISPIEL:
-    Im folgenden wird ein kleines Testdetail generiert:
-      AddDetail("test","Das ist ein Test!\n");
-    Im folgenden wird das Detail entfernt, wenn es existiert. Dies ist
-    eigentlich nicht noetig, da RemoveDetail() damit zurechtkommt, aber
-    eventuell sind ja noch weitere Aktionen noetig.
-      if(GetDetail("test"))
-      { RemoveDetail("test");
-        ...
-      }
-    Ein Geruch kann man folgendermassen erzeugen:
-      AddSmells("gold",
-        ([0      :"Gold kann man nicht riechen!\n",
-          "zwerg":"Deine trainierte Nase riecht es muehelos!\n"]));
-    Die Abfrage des Details gestaltet sich recht einfach:
-      GetDetail("gold","zwerg",SENSE_SMELL);
-    Die Funktion liefert das Detail fuer den Zwerg.
-      GetDetail("gold",0,SENSE_SMELL);
-    Die Funktion liefert das Detail fuer die restlichen Rassen.
-      GetDetail("gold",0,SENSE_SOUND);
-    Ein Sounddetail mit dem Namen "gold" existiert nicht, die Funktion
-    liefert 0 zurueck.
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveReadDetail(), RemoveSmells(), RemoveDetail(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
-               P_TOUCH_DETAILS, P_SPECIAL_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: break_string()
+ARGUMENTE
+=========
+
+   key
+     Das zu ermittelnde Detail.
+   race
+     Rasse des ermittelnden Objektes (falls es ein Lebewesen ist).
+   sense
+     Die Art des zu untersuchenden Details:
+       Untersuchen, Riechen, Hoeren, Tasten.
+
+
+BESCHREIBUNG
+============
+
+   Die Beschreibung des gewuenschten Details wird ermittelt. Dabei
+   werden rassenspezifische Details beruecksichtigt. Es gibt hierbei
+   verschiedene Detailarten, deren Typ man in <sense> angibt:
+     SENSE_VIEW    - Fuer Defaultdetails zum Untersuchen.
+     SENSE_SMELL   - Fuer Details, die man riechen kann.
+     SENSE_SOUND   - Fuer Details, die man hoeren kann.
+     SENSE_TOUCH   - Fuer Details, die man abtasten kann.
+     SENSE_READ    - Fuer Details, die man lesen kann.
+
+   Dabei ist 0 == SENSE_VIEW.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Beschreibung des Details oder 0, wenn es dieses Detail nicht
+   gibt.
+
+
+BEISPIEL
+========
+
+   Im folgenden wird ein kleines Testdetail generiert:
+     AddDetail("test","Das ist ein Test!\n");
+   Im folgenden wird das Detail entfernt, wenn es existiert. Dies ist
+   eigentlich nicht noetig, da RemoveDetail() damit zurechtkommt, aber
+   eventuell sind ja noch weitere Aktionen noetig.
+     if(GetDetail("test"))
+     { RemoveDetail("test");
+       ...
+     }
+   Ein Geruch kann man folgendermassen erzeugen:
+     AddSmells("gold",
+       ([0      :"Gold kann man nicht riechen!\n",
+         "zwerg":"Deine trainierte Nase riecht es muehelos!\n"]));
+   Die Abfrage des Details gestaltet sich recht einfach:
+     GetDetail("gold","zwerg",SENSE_SMELL);
+   Die Funktion liefert das Detail fuer den Zwerg.
+     GetDetail("gold",0,SENSE_SMELL);
+   Die Funktion liefert das Detail fuer die restlichen Rassen.
+     GetDetail("gold",0,SENSE_SOUND);
+   Ein Sounddetail mit dem Namen "gold" existiert nicht, die Funktion
+   liefert 0 zurueck.
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveReadDetail(), RemoveSmells(), RemoveDetail(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
+              P_TOUCH_DETAILS, P_SPECIAL_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: break_string()
 
 27. Jan 2013 Gloinson
diff --git a/doc/lfun/GetDoorsMapping b/doc/lfun/GetDoorsMapping
index 4c68a9d..68beb0d 100644
--- a/doc/lfun/GetDoorsMapping
+++ b/doc/lfun/GetDoorsMapping
@@ -1,24 +1,46 @@
+
 GetDoorsMapping()
+*****************
 
-FUNKTION:
-    mapping GetDoorsMapping()
 
-BESCHREIBUNG:
-    Mit dieser Funktion erhaelt man das Mapping der vorhandenen
-    Seherportale.
-    
-    Die Struktur ist von der Form: 
-	([ Pfad: Portalnummer; Portalbeschreibung, ])
-    Es wird eine Kopie dieses Mappings geliefert.
+FUNKTION
+========
 
-RUECKGABEWERT:
-    Das Sehertormapping
+   mapping GetDoorsMapping()
 
-BEMERKUNGEN:
-    Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
 
-BEISPIELE:
-    "/d/seher/portale/sehertormaster"->GetDoorsMapping();
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-    DoorIsKnown, ShowDoors, Teleport, DiscoverDoor
+   Mit dieser Funktion erhaelt man das Mapping der vorhandenen
+   Seherportale.
+
+
+
+   Die Struktur ist von der Form:
+       ([ Pfad: Portalnummer; Portalbeschreibung, ])
+   Es wird eine Kopie dieses Mappings geliefert.
+
+
+RUECKGABEWERT
+=============
+
+   Das Sehertormapping
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+
+
+BEISPIELE
+=========
+
+   "/d/seher/portale/sehertormaster"->GetDoorsMapping();
+
+
+SIEHE AUCH
+==========
+
+   DoorIsKnown, ShowDoors, Teleport, DiscoverDoor
diff --git a/doc/lfun/GetEnemies b/doc/lfun/GetEnemies
index 334d0bf..e288250 100644
--- a/doc/lfun/GetEnemies
+++ b/doc/lfun/GetEnemies
@@ -1,34 +1,53 @@
+
 GetEnemies()
+************
 
-FUNKTION:
-	mapping GetEnemies();
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	keine
+   mapping GetEnemies();
 
-RUeCKGABEWERT:
-	Mapping mit bekannten Gegnern als Schluessel und Zeiten als
-	Eintraegen.
 
-BESCHREIBUNG:
-	Diese Funktion liefert das interne Mapping zurueck, in dem alle
-	Gegner abgespeichert sind. Diese Gegner stellen die Schluessel in
-	dem Mapping dar. Als Eintraege sind die Zeiten vermerkt, nach
-	welcher Zeit ein Gegner automatisch wieder vergessen werden soll.
-	Mehr Informationen dazu sind in der Dokumentation zur aehnlich
-	gearteten Funktion QueryEnemies() zu finden, die jedoch zwei Arrays
-	getrennte zurueckliefert.
-	Achtung: Es wird keine Kopie des Mappings erstellt. Saemtliche
-	Veraenderungen in dem Mapping wirken sich unmittelbar auf die
-	interne Gegnerliste aus. Die Funktion sollte deshalb nicht genutzt
-	werden. Gegner ein- und austragen sollte man nur mittels
-	InsertEnemy() und StopHuntFor().
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	QueryEnemies(), SetEnemies(), InsertEnemy(), StopHuntFor()
+   /std/living/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUeCKGABEWERT
+=============
+
+   Mapping mit bekannten Gegnern als Schluessel und Zeiten als
+   Eintraegen.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert das interne Mapping zurueck, in dem alle
+   Gegner abgespeichert sind. Diese Gegner stellen die Schluessel in
+   dem Mapping dar. Als Eintraege sind die Zeiten vermerkt, nach
+   welcher Zeit ein Gegner automatisch wieder vergessen werden soll.
+   Mehr Informationen dazu sind in der Dokumentation zur aehnlich
+   gearteten Funktion QueryEnemies() zu finden, die jedoch zwei Arrays
+   getrennte zurueckliefert.
+   Achtung: Es wird keine Kopie des Mappings erstellt. Saemtliche
+   Veraenderungen in dem Mapping wirken sich unmittelbar auf die
+   interne Gegnerliste aus. Die Funktion sollte deshalb nicht genutzt
+   werden. Gegner ein- und austragen sollte man nur mittels
+   InsertEnemy() und StopHuntFor().
+
+
+SIEHE AUCH
+==========
+
+   QueryEnemies(), SetEnemies(), InsertEnemy(), StopHuntFor()
+
 Last modified: Wed May 26 16:47:51 1999 by Patryn
diff --git a/doc/lfun/GetExits b/doc/lfun/GetExits
index 03b9306..a235b1f 100644
--- a/doc/lfun/GetExits
+++ b/doc/lfun/GetExits
@@ -1,26 +1,46 @@
+
 GetExits()
+**********
 
-FUNKTION:
-     varargs string GetExits(object viewer);
 
-DEFINIERT IN:
-     /std/room/exits
+FUNKTION
+========
 
-ARGUMENTE:
-     viewer
-          Derjenige, der sich die Ausgaenge anschaut.
+   varargs string GetExits(object viewer);
 
-BESCHREIBUNG:
-     Es wird eine Liste der fuer viewer sichtbaren Ausgaenge erstellt.
 
-RUeCKGABEWERT:
-     String mit der Liste der sichtbaren Ausgaenge.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddExit(), AddSpecialExit(), GetExits(),
-     RemoveExit(), RemoveSpecialExit(),
-     GuardExit(),
-     H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+   /std/room/exits
+
+
+ARGUMENTE
+=========
+
+   viewer
+        Derjenige, der sich die Ausgaenge anschaut.
+
+
+BESCHREIBUNG
+============
+
+   Es wird eine Liste der fuer viewer sichtbaren Ausgaenge erstellt.
+
+
+RUeCKGABEWERT
+=============
+
+   String mit der Liste der sichtbaren Ausgaenge.
+
+
+SIEHE AUCH
+==========
+
+   AddExit(), AddSpecialExit(), GetExits(),
+   RemoveExit(), RemoveSpecialExit(),
+   GuardExit(),
+   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/GetFValue b/doc/lfun/GetFValue
index ac17224..30db195 100644
--- a/doc/lfun/GetFValue
+++ b/doc/lfun/GetFValue
@@ -1,37 +1,47 @@
-FUNKTION:
 
-	varargs int GetFValue(string vname, mapping map, object pl) 
+GetFValue()
+***********
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetFValue(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	Berechnet den Wert und den Factor des Parameters in spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter Wert*Factor aus dem Spellmapping.
+   Berechnet den Wert und den Factor des Parameters in spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	Ruft GetValue(vname,map,pl)*GetFactor(vname,map,pl)/100 auf.
+   Berechneter Wert*Factor aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	xxx=GetFValue(SI_SKILLDAMAGE,sinfo,caster);
+   Ruft GetValue(vname,map,pl)*GetFactor(vname,map,pl)/100 auf.
+
+
+BEISPIEL
+========
+
+   xxx=GetFValue(SI_SKILLDAMAGE,sinfo,caster);
 
 Siehe auch:
 
-	"GetValue", "GetFactor", "GetOffset", "GetValueO", "GetFValueO"
+   "GetValue", "GetFactor", "GetOffset", "GetValueO", "GetFValueO"
 
-	Ausfuehrliches Beispiel siehe "GetFValueO".
-
+   Ausfuehrliches Beispiel siehe "GetFValueO".
diff --git a/doc/lfun/GetFValueO b/doc/lfun/GetFValueO
index e954e4b..25650fb 100644
--- a/doc/lfun/GetFValueO
+++ b/doc/lfun/GetFValueO
@@ -1,74 +1,85 @@
-FUNKTION:
 
-	varargs int GetFValueO(string vname, mapping map, object pl) 
+GetFValueO()
+************
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetFValueO(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	'Berechnet' den Wert, den Factor und den Offset des Parameters 
-	in spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter (Wert*Factor)/100+Offset aus dem Spellmapping.
+   'Berechnet' den Wert, den Factor und den Offset des Parameters
+   in spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	Ruft (GetValue(vname,map,pl)*GetFactor(vname,map,pl))/100+
-	GetOffset(vname,map,pl) auf.
+   Berechneter (Wert*Factor)/100+Offset aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	AddSpell("egal",10,
-	([
-	OFFSET(SI_COST):([SM_RACE:(["Zwerg":4]) ]),
-	FACTOR(SI_COST):([SM_RACE:(["Mensch":90]) ]),
-	SI_SKILLDAMAGE:100,
-	OFFSET(SI_SKILLDAMAGE):25,
-	SI_SKILLDAMAGE_TYPE:DT_EXAMPLE,
-	FACTOR(SI_SKILLDAMAGE):([SM_RACE:(["Zwerg":80,"Elf":120]) ]) 
-	]));
+   Ruft (GetValue(vname,map,pl)*GetFactor(vname,map,pl))/100+
+   GetOffset(vname,map,pl) auf.
 
-	So, was sollen uns diese Zeilen sagen?
 
-	Es wird ein Spruch Names 'egal' ins Spellbook eingetragen. Er kostet
-	regulaer 10 MP. Fuer Zwerge allerdings wird ein Offset von 4 MP 
-	aufgeschlagen. Ausserdem machen Zwerge nur 80% Schaden, Elfen 
-	hingegen 120%. Der Grundschaden betraegt 100 Schadenspunkte, der 
-	Offset des Schadens nochmal 25. Menschen bezahlen fuer diesen 
-	Spruch nur 90% der Kosten.
+BEISPIEL
+========
 
-	Nun die Rechenbeispiele:
+   AddSpell("egal",10,
+   ([
+   OFFSET(SI_COST):([SM_RACE:(["Zwerg":4]) ]),
+   FACTOR(SI_COST):([SM_RACE:(["Mensch":90]) ]),
+   SI_SKILLDAMAGE:100,
+   OFFSET(SI_SKILLDAMAGE):25,
+   SI_SKILLDAMAGE_TYPE:DT_EXAMPLE,
+   FACTOR(SI_SKILLDAMAGE):([SM_RACE:(["Zwerg":80,"Elf":120]) ])
+   ]));
 
-	Fuer die Kosten:
-		Value	ValueO	FValue	FValueO
-	Mensch	   10	    10	     9	      9
-	Elf   	   10	    10	    10       10
-	Hobbit	   10	    10	    10	     10
-	Zwerg	   10	    14	    10	     14
+   So, was sollen uns diese Zeilen sagen?
 
-	Fuer den Schaden:
-			Value	ValueO	FValue	FValueO
-	Mensch		100	125	100	125
-	Elf  		100	125	120	150
-	Hobbit		100	125	100	125
-	Zwerg		100	125	 80	100
+   Es wird ein Spruch Names 'egal' ins Spellbook eingetragen. Er kostet
+   regulaer 10 MP. Fuer Zwerge allerdings wird ein Offset von 4 MP
+   aufgeschlagen. Ausserdem machen Zwerge nur 80% Schaden, Elfen
+   hingegen 120%. Der Grundschaden betraegt 100 Schadenspunkte, der
+   Offset des Schadens nochmal 25. Menschen bezahlen fuer diesen
+   Spruch nur 90% der Kosten.
 
-	An diesem Beispiel sieht man deutlich, wie man mit ein paar 
-	Offsets und Faktoren die Wirkung eines Spruches deutlich 
-	veraendern kann. Es sollte bei eigenen Berechnungen immer 
-	GetFValueO benutzt werden.
+   Nun die Rechenbeispiele:
+
+   Fuer die Kosten:
+           Value   ValueO  FValue  FValueO
+   Mensch     10       10       9        9
+   Elf        10       10      10       10
+   Hobbit     10       10      10       10
+   Zwerg      10       14      10       14
+
+   Fuer den Schaden:
+                   Value   ValueO  FValue  FValueO
+   Mensch          100     125     100     125
+   Elf             100     125     120     150
+   Hobbit          100     125     100     125
+   Zwerg           100     125      80     100
+
+   An diesem Beispiel sieht man deutlich, wie man mit ein paar
+   Offsets und Faktoren die Wirkung eines Spruches deutlich
+   veraendern kann. Es sollte bei eigenen Berechnungen immer
+   GetFValueO benutzt werden.
 
 Siehe auch:
 
-	"GetValue", "GetFactor", "GetOffset", "GetFValue", "GetValueO"
+   "GetValue", "GetFactor", "GetOffset", "GetFValue", "GetValueO"
diff --git a/doc/lfun/GetFactor b/doc/lfun/GetFactor
index 42812dd..adc6a19 100644
--- a/doc/lfun/GetFactor
+++ b/doc/lfun/GetFactor
@@ -1,37 +1,48 @@
-FUNKTION:
 
-	varargs int GetFactor(string vname, mapping map, object pl) 
+GetFactor()
+***********
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetFactor(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	'Berechnet' den Factor des Parameters in spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter Factor aus dem Spellmapping.
+   'Berechnet' den Factor des Parameters in spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	Beschraekung auf 10-1000. Werte groesser oder kleiner als diese
-	werden 'abgeschnitten'.
+   Berechneter Factor aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	xxx=GetFactor(SI_SKILLDAMAGE,sinfo,caster);
+   Beschraekung auf 10-1000. Werte groesser oder kleiner als diese
+   werden 'abgeschnitten'.
+
+
+BEISPIEL
+========
+
+   xxx=GetFactor(SI_SKILLDAMAGE,sinfo,caster);
 
 Siehe auch:
 
-	"GetValue", "GetOffset", "GetFValue", "GetValueO", "GetFValueO"
+   "GetValue", "GetOffset", "GetFValue", "GetValueO", "GetFValueO"
 
-	Ausfuehrliches Beispiel siehe "GetFValueO".
+   Ausfuehrliches Beispiel siehe "GetFValueO".
diff --git a/doc/lfun/GetGroupMembers b/doc/lfun/GetGroupMembers
index ef70aa3..8c765d7 100644
--- a/doc/lfun/GetGroupMembers
+++ b/doc/lfun/GetGroupMembers
@@ -1,36 +1,60 @@
+
 GetGroupMembers()
-FUNKTION:
-     string *GetGroupMembers(string grp)
+*****************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     string grp - Gruppenname
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Gibt alle dieser Gruppe zugehoerigen Materialien zurueck. Dazu gut, sich
-     einen Ueberblick ueber die aktuelle Liste zu verschaffen.
+   string *GetGroupMembers(string grp)
 
-RUECKGABEWERT:
-     Array von Strings mit Materialien oder ({})
 
-BEISPIELE:
-     // wir wollen irgend ein Metall haben, nennen dies aber beim Namen
-     int ind;
-     string* likeit;
-     likeit=MATERIALDB->GetGroupMembers(MATGROUP_METAL);
-     ind=random(sizeof(likeit));
-     ...
-     write("Der Schmied sagt: Mir fehlt noch "+
-	   MATERIALDB->MaterialName(likeit[ind], WER, 100)+".\n");
-     ...
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetMatMembership()
+   /p/daemon/materialdb.c (MATERIALDB)
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   string grp - Gruppenname
+
+
+BESCHREIBUNG
+============
+
+   Gibt alle dieser Gruppe zugehoerigen Materialien zurueck. Dazu gut, sich
+   einen Ueberblick ueber die aktuelle Liste zu verschaffen.
+
+
+RUECKGABEWERT
+=============
+
+   Array von Strings mit Materialien oder ({})
+
+
+BEISPIELE
+=========
+
+   // wir wollen irgend ein Metall haben, nennen dies aber beim Namen
+   int ind;
+   string* likeit;
+   likeit=MATERIALDB->GetGroupMembers(MATGROUP_METAL);
+   ind=random(sizeof(likeit));
+   ...
+   write("Der Schmied sagt: Mir fehlt noch "+
+         MATERIALDB->MaterialName(likeit[ind], WER, 100)+".\n");
+   ...
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/GetInfoArr b/doc/lfun/GetInfoArr
index ef71482..ba6c4c4 100644
--- a/doc/lfun/GetInfoArr
+++ b/doc/lfun/GetInfoArr
@@ -1,31 +1,55 @@
+
 GetInfoArr()
-FUNKTION:
-     static mixed *GetInfoArr(string str)
+************
 
-DEFINIERT IN:
-     /std/npc/info.c
 
-ARGUMENTE:
-     string str	 - Schluesselwort der Frage
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Sucht nach einem Schluesselwort in den abgelegten Antworten
-     und gibt die Informationen oder einen 0er-Array zurueck.
+   static mixed *GetInfoArr(string str)
 
-BEMERKUNGEN:
-     Ueberschreibbar :)
 
-RUECKGABEWERT:
-     Siehe Parameter von AddInfo:
+DEFINIERT IN
+============
 
-     Array mit:
-     ({ <Infostring> (0 fuer keine Antwort),
-        <Indent-String> (Default: 0),
-        <Silent> (Default: 0),
-        <Casebased> (Default: 0)
-     })
+   /std/npc/info.c
 
-SIEHE AUCH:
-     Verwandt: AddInfo, do_frage
+
+ARGUMENTE
+=========
+
+   string str  - Schluesselwort der Frage
+
+
+BESCHREIBUNG
+============
+
+   Sucht nach einem Schluesselwort in den abgelegten Antworten
+   und gibt die Informationen oder einen 0er-Array zurueck.
+
+
+BEMERKUNGEN
+===========
+
+   Ueberschreibbar :)
+
+
+RUECKGABEWERT
+=============
+
+   Siehe Parameter von AddInfo:
+
+   Array mit:
+   ({ <Infostring> (0 fuer keine Antwort),
+      <Indent-String> (Default: 0),
+      <Silent> (Default: 0),
+      <Casebased> (Default: 0)
+   })
+
+
+SIEHE AUCH
+==========
+
+   Verwandt: AddInfo, do_frage
 
 31.Mar 2007 Gloinson
diff --git a/doc/lfun/GetMatMembership b/doc/lfun/GetMatMembership
index 8859a38..e25e991 100644
--- a/doc/lfun/GetMatMembership
+++ b/doc/lfun/GetMatMembership
@@ -1,55 +1,79 @@
+
 GetMatMembership()
-FUNKTION:
-     string *GetMatMembership(string mat)
+******************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     string mat - ein Material
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Gibt alle Gruppen, denen das Material angehoert zurueck. Geeignet, um
-     die Eigenschaften eines Materials zu ueberpruefen.
+   string *GetMatMembership(string mat)
 
-RUECKGABEWERT:
-     Array von Strings mit Materialiengruppen oder ({})
 
-BEISPIELE:
-     // ein weiser Schmied:
-     int i;
-     string *mat, mname, mgroup;
-     mat=m_indices(ob->QueryProp(P_MATERIAL));
-     i=sizeof(mat);
+DEFINIERT IN
+============
 
-     write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
-     while(i--) {
-      // den Namen erkennen/aussprechen:
-      // Materialien werden allgemein etwas besser erkannt (zu 5%), aber
-      // alles aus Metall wird zu +100% besser erkannt ...
-      mname=MATERIALDB->MaterialName(mat[i], WER,
-	     ({5, ([MATRGROUP_METAL, 100])}));
+   /p/daemon/materialdb.c (MATERIALDB)
 
-      // und nur Metalle analysieren ...
-      if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
-       int j;
-       string *mgr;
-       mgr=MATERIALDB->GetMatMembership(mat[i]);
-       j=sizeof(mgr);
-       mgroup=" gehoert zu ";
-       while(j--) {
-        mgroup+=MATERIALDB->GroupName(mgr[j]);
-        if(j>0) mgroup+=", ";
-       }
-      } else mgroup=" kenne ich nicht";
-      printf("%-12.12s: %s\n",mname, mgroup);
+
+ARGUMENTE
+=========
+
+   string mat - ein Material
+
+
+BESCHREIBUNG
+============
+
+   Gibt alle Gruppen, denen das Material angehoert zurueck. Geeignet, um
+   die Eigenschaften eines Materials zu ueberpruefen.
+
+
+RUECKGABEWERT
+=============
+
+   Array von Strings mit Materialiengruppen oder ({})
+
+
+BEISPIELE
+=========
+
+   // ein weiser Schmied:
+   int i;
+   string *mat, mname, mgroup;
+   mat=m_indices(ob->QueryProp(P_MATERIAL));
+   i=sizeof(mat);
+
+   write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
+   while(i--) {
+    // den Namen erkennen/aussprechen:
+    // Materialien werden allgemein etwas besser erkannt (zu 5%), aber
+    // alles aus Metall wird zu +100% besser erkannt ...
+    mname=MATERIALDB->MaterialName(mat[i], WER,
+           ({5, ([MATRGROUP_METAL, 100])}));
+
+    // und nur Metalle analysieren ...
+    if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
+     int j;
+     string *mgr;
+     mgr=MATERIALDB->GetMatMembership(mat[i]);
+     j=sizeof(mgr);
+     mgroup=" gehoert zu ";
+     while(j--) {
+      mgroup+=MATERIALDB->GroupName(mgr[j]);
+      if(j>0) mgroup+=", ";
      }
+    } else mgroup=" kenne ich nicht";
+    printf("%-12.12s: %s\n",mname, mgroup);
+   }
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/GetOffset b/doc/lfun/GetOffset
index e3eba54..ee982b7 100644
--- a/doc/lfun/GetOffset
+++ b/doc/lfun/GetOffset
@@ -1,38 +1,49 @@
-FUNKTION:
 
-	varargs int GetOffset(string vname, mapping map, object pl) 
+GetOffset()
+***********
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetOffset(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	'Berechnet' den Offset des Parameters in spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter Offset aus dem Spellmapping.
+   'Berechnet' den Offset des Parameters in spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	Beschraekung auf -10000 bis +10000. Werte groesser oder kleiner 
-	als diese werden 'abgeschnitten'. Mehr als 100% Bonus oder Malus
-	gibts nicht ;-).
+   Berechneter Offset aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	xxx=GetOffset(SI_SKILLDAMAGE,sinfo,caster);
+   Beschraekung auf -10000 bis +10000. Werte groesser oder kleiner
+   als diese werden 'abgeschnitten'. Mehr als 100% Bonus oder Malus
+   gibts nicht ;-).
+
+
+BEISPIEL
+========
+
+   xxx=GetOffset(SI_SKILLDAMAGE,sinfo,caster);
 
 Siehe auch:
 
-	"GetValue", "GetFactor", "GetFValue", "GetValueO", "GetFValueO"
+   "GetValue", "GetFactor", "GetFValue", "GetValueO", "GetFValueO"
 
-	Ausfuehrliches Beispiel siehe "GetFValueO".
+   Ausfuehrliches Beispiel siehe "GetFValueO".
diff --git a/doc/lfun/GetOwner b/doc/lfun/GetOwner
index f6b0f98..92543f0 100644
--- a/doc/lfun/GetOwner
+++ b/doc/lfun/GetOwner
@@ -1,19 +1,38 @@
+
+GetOwner()
+**********
+
+
 GetOwner(L)
-FUNKTION:
-     string GetOwner();
+===========
 
-BESCHREIBUNG:
-     Wird vom Hoerrohr gerufen:
-      /d/inseln/shakedbeer/shakyisland/obj/hoerrohr.c
-     und kann einen Besitzer der Dateien zurueckgeben, der vom Besitzer
-     der Pfade in denen die Datei liegt abweicht.
 
-BEISPIELE:
-     string GetOwner() {
-      return "Tiamak";
-     }
+FUNKTION
+========
 
-SIEHE AUCH:
-     P_INFO
+   string GetOwner();
+
+
+BESCHREIBUNG
+============
+
+   Wird vom Hoerrohr gerufen:
+    /d/inseln/shakedbeer/shakyisland/obj/hoerrohr.c
+   und kann einen Besitzer der Dateien zurueckgeben, der vom Besitzer
+   der Pfade in denen die Datei liegt abweicht.
+
+
+BEISPIELE
+=========
+
+   string GetOwner() {
+    return "Tiamak";
+   }
+
+
+SIEHE AUCH
+==========
+
+   P_INFO
 
 11. Mai 2004 Gloinson
diff --git a/doc/lfun/GetPhiolenInfos b/doc/lfun/GetPhiolenInfos
index 604d697..ccd0f68 100644
--- a/doc/lfun/GetPhiolenInfos
+++ b/doc/lfun/GetPhiolenInfos
@@ -1,97 +1,122 @@
+
+GetPhiolenInfos()
+*****************
+
+
 GetPhiolenInfos(L)
+==================
 
-FUNKTION:
-     mixed *GetPhiolenInfos();
 
-BESCHREIBUNG:
+FUNKTION
+========
 
-     Wird von der Phiole aufgerufen:
-     /d/inseln/miril/sternquest/obj/phiole.c
-     Der Raum muss /p/service/miril/phiole.h includen.     
-     Mit der Phiole kann ein Spieler durch Tueren schauen. Bei Tueren, die
-     vom Doormaster (/obj/doormaster.c) verwaltet werden, klappt dies auto-
-     matisch. Moechte man das verbieten, so muss die Funktion 
-     GetPhiolenInfos() im entsprechenden Raum definiert sein.
-     Befinden sich Tueren im Raum, die nicht vom Doormaster verwaltet werden,
-     aber bei denen die Phiole funktionieren soll, so kann dies ebenfalls
-     mittels GetPhiolenInfos() geschehen.
-     
-     Funktion der Phiole:
-     Sie projiziert ein Bild dessen, was hinter der Tuer liegt auf die Tuer.
-     Steht die Tuer offen, so sieht der Spieler nur eine Wand, denn es wird
-     gezeigt, was hinter dieser Tuer ist.
-     
-     Ist die Tuer jedoch ge- oder verschlossen, so sieht er auf der Tuer
-     die Langbeschreibung des Raumes, der hinter der Tuer liegt, sowie das
-     Inventar dieses Raumes. 
+   mixed *GetPhiolenInfos();
 
-     Aufbau der Funktion:
-     mixed *GetPhiolenInfos() {
-       return ({
-                ([
-                  PHIOLE_DEST:     string,       
-                  PHIOLE_IDS:      *string,             
-                  PHIOLE_GENDER:   int,           
-                  PHIOLE_STATUS:   int,     (optional)
-                  PHIOLE_LONG:     string,  (optional)
-                  PHIOLE_VERBOTEN: int      (optional)
-                ]),
-                ([
-                  ... Naechste Tuer
-                ])
-              });
-     }
-     
-     PHIOLE_DEST      Dateiname des Zielraums
-     PHIOLE_IDS	      Array der Strings, mit denen sich die Tuer 
-                      ansprechen laesst
-     PHIOLE_GENDER    Geschlecht der Tuer
-     PHIOLE_STATUS    aktueller Status der Tuer:
-                      0 geschlossen/verschlossen, 1 offen
-                      Bei Tueren, die mit NewDoor erzeugt wurden
-                      nicht setzen
-     PHIOLE_LONG      Beschreibung des Zielraums (z.B. bei einer 
-                      Faketuer)
-     PHIOLE_VERBOTEN  0 erlaubt, 1 verboten
 
-BEISPIEL:
-     Ein Raum enthaelt eine Holztuer und ein Portal. Erstere ist mittels 
-     NewDoor(...) gebaut, soll aber nicht zu durchschauen sein, letztere ist 
-     selbstgestrickt. Die erste fuehrt in den Workroom von Jof, die zweite
-     ist nur ein Fake und immer geschlossen. Bei vom Doormaster erzeugten 
-     Tueren sollte PHIOLE_STATUS nicht gesetzt werden, da dies automatisch
-     abgefragt wird.
-     
-     #include "/p/service/miril/phiole.h"
-     ...
-     mixed *GetPhiolenInfos(){
-       return ({
-                ([
-                  PHIOLE_DEST:"/players/jof/workroom",
-                  PHIOLE_IDS:({"holztuer"}),           
-                  PHIOLE_GENDER:FEMALE,                    
-                  PHIOLE_VERBOTEN:1          
-                ]),
-                ([
-                  PHIOLE_DEST:0,
-                  PHIOLE_IDS:({"portal"}),           
-                  PHIOLE_GENDER:NEUTER, 
-                  PHIOLE_STATUS:0,
-                  PHIOLE_LONG:"Du stehst in einer riesigen Schatzkammer und "
-                              "kannst Dein Glueck kaum fassen. Nun brauchst "
-                              "Du nur noch zuzugreifen und bist der reichste "
-                              "Bewohner des MorgenGrauen.",
-                  PHIOLE_VERBOTEN:0
-                ])
-              });
-      }
-      Mittels PHIOLE_LONG laesst sich auch bei erlaubten und verbotenen Tueren 
-      einstellen, was der Spieler statt der normalen Raumbeschreibung und den 
-      im Raum befindlichen Objekten sehen soll. Das koennte z.B. sinnvoll 
-      sein, falls der Spieler zwar die Raumbeschreibung, aber nicht den fiesen 
-      Drachen sehen soll, der sich ebenfalls im Raum befindet.
-      
-SIEHE AUCH:
-      NewDoor(), QueryDoorStatus(), SetDoorStatus(), QueryAllDoors()
------------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Wird von der Phiole aufgerufen:
+   /d/inseln/miril/sternquest/obj/phiole.c
+   Der Raum muss /p/service/miril/phiole.h includen.
+   Mit der Phiole kann ein Spieler durch Tueren schauen. Bei Tueren, die
+   vom Doormaster (/obj/doormaster.c) verwaltet werden, klappt dies auto-
+   matisch. Moechte man das verbieten, so muss die Funktion
+   GetPhiolenInfos() im entsprechenden Raum definiert sein.
+   Befinden sich Tueren im Raum, die nicht vom Doormaster verwaltet werden,
+   aber bei denen die Phiole funktionieren soll, so kann dies ebenfalls
+   mittels GetPhiolenInfos() geschehen.
+
+
+
+   Funktion der Phiole:
+   Sie projiziert ein Bild dessen, was hinter der Tuer liegt auf die Tuer.
+   Steht die Tuer offen, so sieht der Spieler nur eine Wand, denn es wird
+   gezeigt, was hinter dieser Tuer ist.
+
+
+
+   Ist die Tuer jedoch ge- oder verschlossen, so sieht er auf der Tuer
+   die Langbeschreibung des Raumes, der hinter der Tuer liegt, sowie das
+   Inventar dieses Raumes.
+
+   Aufbau der Funktion:
+   mixed *GetPhiolenInfos() {
+     return ({
+              ([
+                PHIOLE_DEST:     string,
+                PHIOLE_IDS:      *string,
+                PHIOLE_GENDER:   int,
+                PHIOLE_STATUS:   int,     (optional)
+                PHIOLE_LONG:     string,  (optional)
+                PHIOLE_VERBOTEN: int      (optional)
+              ]),
+              ([
+                ... Naechste Tuer
+              ])
+            });
+   }
+
+
+
+   PHIOLE_DEST      Dateiname des Zielraums
+   PHIOLE_IDS       Array der Strings, mit denen sich die Tuer
+                    ansprechen laesst
+   PHIOLE_GENDER    Geschlecht der Tuer
+   PHIOLE_STATUS    aktueller Status der Tuer:
+                    0 geschlossen/verschlossen, 1 offen
+                    Bei Tueren, die mit NewDoor erzeugt wurden
+                    nicht setzen
+   PHIOLE_LONG      Beschreibung des Zielraums (z.B. bei einer
+                    Faketuer)
+   PHIOLE_VERBOTEN  0 erlaubt, 1 verboten
+
+
+BEISPIEL
+========
+
+   Ein Raum enthaelt eine Holztuer und ein Portal. Erstere ist mittels
+   NewDoor(...) gebaut, soll aber nicht zu durchschauen sein, letztere ist
+   selbstgestrickt. Die erste fuehrt in den Workroom von Jof, die zweite
+   ist nur ein Fake und immer geschlossen. Bei vom Doormaster erzeugten
+   Tueren sollte PHIOLE_STATUS nicht gesetzt werden, da dies automatisch
+   abgefragt wird.
+
+
+
+   #include "/p/service/miril/phiole.h"
+   ...
+   mixed *GetPhiolenInfos(){
+     return ({
+              ([
+                PHIOLE_DEST:"/players/jof/workroom",
+                PHIOLE_IDS:({"holztuer"}),
+                PHIOLE_GENDER:FEMALE,
+                PHIOLE_VERBOTEN:1
+              ]),
+              ([
+                PHIOLE_DEST:0,
+                PHIOLE_IDS:({"portal"}),
+                PHIOLE_GENDER:NEUTER,
+                PHIOLE_STATUS:0,
+                PHIOLE_LONG:"Du stehst in einer riesigen Schatzkammer und "
+                            "kannst Dein Glueck kaum fassen. Nun brauchst "
+                            "Du nur noch zuzugreifen und bist der reichste "
+                            "Bewohner des MorgenGrauen.",
+                PHIOLE_VERBOTEN:0
+              ])
+            });
+    }
+    Mittels PHIOLE_LONG laesst sich auch bei erlaubten und verbotenen Tueren
+    einstellen, was der Spieler statt der normalen Raumbeschreibung und den
+    im Raum befindlichen Objekten sehen soll. Das koennte z.B. sinnvoll
+    sein, falls der Spieler zwar die Raumbeschreibung, aber nicht den fiesen
+    Drachen sehen soll, der sich ebenfalls im Raum befindet.
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorStatus(), SetDoorStatus(), QueryAllDoors()
+
 Letzte Aenderung: Sam, 14. Jan 2006, 12:21, Miril
diff --git a/doc/lfun/GetReputation b/doc/lfun/GetReputation
index b60cdf8..b27d053 100644
--- a/doc/lfun/GetReputation
+++ b/doc/lfun/GetReputation
@@ -1,26 +1,53 @@
-GetReputation
-FUNKTION:
-     public int GetReputation(string repid)
 
-DEFINIERT IN:
-     /std/player/reputation.c
+GetReputation()
+***************
 
-ARGUMENTE:
-     repid
-       Eindeutige ID der angefragten Reputation.
 
-BESCHREIBUNG:
-     Liefert den aktuellen Wert der angegebenen Reputation <repid> zurueck.
+FUNKTION
+========
 
-RUeCKGABEWERT:
-     Zahlenwert, Integer.
+   public int GetReputation(string repid)
 
-BEISPIELE:
-     s. reputation
 
-SIEHE AUCH:
-     reputation
-     ChangeReputation(), GetReputations()
+DEFINIERT IN
+============
 
-ZULETZT GEAeNDERT:
+   /std/player/reputation.c
+
+
+ARGUMENTE
+=========
+
+   repid
+     Eindeutige ID der angefragten Reputation.
+
+
+BESCHREIBUNG
+============
+
+   Liefert den aktuellen Wert der angegebenen Reputation <repid> zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Zahlenwert, Integer.
+
+
+BEISPIELE
+=========
+
+   s. reputation
+
+
+SIEHE AUCH
+==========
+
+   reputation
+   ChangeReputation(), GetReputations()
+
+
+ZULETZT GEAeNDERT
+=================
+
 06.04.2009, Zesstra
diff --git a/doc/lfun/GetReputations b/doc/lfun/GetReputations
index 81d571e..134bd2c 100644
--- a/doc/lfun/GetReputations
+++ b/doc/lfun/GetReputations
@@ -1,23 +1,47 @@
-GetReputations
-FUNKTION:
-     public mapping GetReputations()
 
-DEFINIERT IN:
-     /std/player/reputation.c
+GetReputations()
+****************
 
-BESCHREIBUNG:
-     Liefert ein Mapping aller im Spieler gespeicherten Reputationen und ihrer
-     Werte zurueck.
 
-RUeCKGABEWERT:
-     Mapping ([(string)repid: (int)wert])
+FUNKTION
+========
 
-BEISPIELE:
-     s. repuation
+   public mapping GetReputations()
 
-SIEHE AUCH:
-     reputation
-     GetReputation(), GetReputations()
 
-ZULETZT GEAeNDERT:
+DEFINIERT IN
+============
+
+   /std/player/reputation.c
+
+
+BESCHREIBUNG
+============
+
+   Liefert ein Mapping aller im Spieler gespeicherten Reputationen und ihrer
+   Werte zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Mapping ([(string)repid: (int)wert])
+
+
+BEISPIELE
+=========
+
+   s. repuation
+
+
+SIEHE AUCH
+==========
+
+   reputation
+   GetReputation(), GetReputations()
+
+
+ZULETZT GEAeNDERT
+=================
+
 06.04.2009, Zesstra
diff --git a/doc/lfun/GetValue b/doc/lfun/GetValue
index 1c95119..29eea03 100644
--- a/doc/lfun/GetValue
+++ b/doc/lfun/GetValue
@@ -1,37 +1,46 @@
-FUNKTION:
 
-	varargs int GetValue(string vname, mapping map, object pl) 
+GetValue()
+**********
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetValue(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	'Berechnet' den Wert des uebergebenen Parameters aus dem 
-	Spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter Wert aus dem Spellmapping.
+   'Berechnet' den Wert des uebergebenen Parameters aus dem
+   Spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	
+   Berechneter Wert aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	xxx=GetValue(SI_SKILLDAMAGE,sinfo,caster);
+
+BEISPIEL
+========
+
+   xxx=GetValue(SI_SKILLDAMAGE,sinfo,caster);
 
 Siehe auch:
 
-	"GetFactor", "GetOffset", "GetFValue", "GetValueO", "GetFValueO"
+   "GetFactor", "GetOffset", "GetFValue", "GetValueO", "GetFValueO"
 
-	Ausfuehrliches Beispiel siehe "GetFValueO".
+   Ausfuehrliches Beispiel siehe "GetFValueO".
diff --git a/doc/lfun/GetValueO b/doc/lfun/GetValueO
index e55b8f3..e9a7522 100644
--- a/doc/lfun/GetValueO
+++ b/doc/lfun/GetValueO
@@ -1,36 +1,47 @@
-FUNKTION:
 
-	varargs int GetValueO(string vname, mapping map, object pl) 
+GetValueO()
+***********
 
 
-ARGUMENTE:
+FUNKTION
+========
 
-	vname	: name des parameters aus dem spellmapping
-	map   	: spellmapping
-	pl 	: caster
+   varargs int GetValueO(string vname, mapping map, object pl)
 
 
-BESCHREIBUNG:
+ARGUMENTE
+=========
 
-	Berechnet den Wert und den Offset des Parameters in spellmapping.
+   vname   : name des parameters aus dem spellmapping
+   map     : spellmapping
+   pl      : caster
 
 
-RUECKGABEWERT:
+BESCHREIBUNG
+============
 
-	Berechneter Wert+Offset aus dem Spellmapping.
+   Berechnet den Wert und den Offset des Parameters in spellmapping.
 
 
-BEMERKUNGEN:
+RUECKGABEWERT
+=============
 
-	Ruft GetValue(vname,map,pl)+GetOffset(vname,map,pl) auf.
+   Berechneter Wert+Offset aus dem Spellmapping.
 
 
-BEISPIEL:
+BEMERKUNGEN
+===========
 
-	xxx=GetValueO(SI_SKILLDAMAGE,sinfo,caster);
+   Ruft GetValue(vname,map,pl)+GetOffset(vname,map,pl) auf.
+
+
+BEISPIEL
+========
+
+   xxx=GetValueO(SI_SKILLDAMAGE,sinfo,caster);
 
 Siehe auch:
 
-	"GetValue", "GetFactor", "GetOffset", "GetFValue", "GetFValueO"
+   "GetValue", "GetFactor", "GetOffset", "GetFValue", "GetFValueO"
 
-	Ausfuehrliches Beispiel siehe "GetFValueO".
+   Ausfuehrliches Beispiel siehe "GetFValueO".
diff --git a/doc/lfun/Gildenproperties b/doc/lfun/Gildenproperties
index 30a16c3..dd5676f 100644
--- a/doc/lfun/Gildenproperties
+++ b/doc/lfun/Gildenproperties
@@ -1,131 +1,186 @@
-Name			Beschreibung
 
-P_GUILD_SKILLS		Property fuer Skills in der Gilde
-P_GUILD_RESTRICTIONS 	Restriktionen fuer den Eintritt in die Gilde
-P_GUILD_DEFAULT_SPELLBOOK  
-P_GUILD_MALE_TITLES 	Maennliche Gildentitel
-P_GUILD_FEMALE_TITLES	Weibliche Gildentitel
-P_GUILD_LEVELS		Gildenstufen
-P_SB_SPELLS 		Property fuer Spells in Spellbook
-P_GLOBAL_SKILLPROPS	Properties der Gilde UND des Spellbooks
+Gildenproperties()
+******************
 
-Properties des Spielers:
-P_GUILD			String mit dem Namen der Gilde
-P_GUILD_LEVEL		Gildenstufe
-P_GUILD_TITLE		Gildentitel
-P_GUILD_RATING		Rating in der Gilde
-P_NEWSKILLS		mapping mit Skills und Spells
-P_NEXT_SPELL_TIME	Zeit bis der naechste Spell gesprochen werden kann
-P_TMP_ATTACK_HOOK	Angriffs-Ersatzfunktion
-P_TMP_ATTACK_MOD	Angriffs-Modifizierung
-P_TMP_DEFEND_HOOK	Abwehr-Ersatzfunktion
-P_TMP_DIE_HOOK		"Die"-Ersatzfunktion
-P_TMP_MOVE_HOOK		Bewegungs-Ersatzfunktion
-P_DEFENDERS		Verteidiger
-P_PREPARED_SPELL	Vorbereiteter Spell
-P_DEFAULT_GUILD		Standardgilde
+Name                    Beschreibung
+
+P_GUILD_SKILLS          Property fuer Skills in der Gilde
+P_GUILD_RESTRICTIONS    Restriktionen fuer den Eintritt in die Gilde
+P_GUILD_DEFAULT_SPELLBOOK P_GUILD_MALE_TITLES     Maennliche
+Gildentitel P_GUILD_FEMALE_TITLES   Weibliche Gildentitel
+P_GUILD_LEVELS          Gildenstufen P_SB_SPELLS             Property
+fuer Spells in Spellbook P_GLOBAL_SKILLPROPS     Properties der Gilde
+UND des Spellbooks
+
+Properties des Spielers P_GUILD                 String mit dem Namen
+der Gilde P_GUILD_LEVEL           Gildenstufe P_GUILD_TITLE
+Gildentitel P_GUILD_RATING          Rating in der Gilde P_NEWSKILLS
+mapping mit Skills und Spells P_NEXT_SPELL_TIME       Zeit bis der
+naechste Spell gesprochen werden kann P_TMP_ATTACK_HOOK
+Angriffs-Ersatzfunktion P_TMP_ATTACK_MOD        Angriffs-Modifizierung
+P_TMP_DEFEND_HOOK       Abwehr-Ersatzfunktion P_TMP_DIE_HOOK
+"Die"-Ersatzfunktion P_TMP_MOVE_HOOK         Bewegungs-Ersatzfunktion
+P_DEFENDERS             Verteidiger P_PREPARED_SPELL
+Vorbereiteter Spell P_DEFAULT_GUILD         Standardgilde
 P_MAGIC_RESISTANCE_OFFSET Offset fuer Magie-Resistenzen
 
-Standard-Skills:
-SK_FIGHT		Kampfskill(global)
-SK_SWORDFIGHTING	Schwertkampf
-SK_WEAPONLESS		Waffenloser Kampf
-SK_TWOHANDED       	Zweihandkampf
-SK_CASTING         	Zauber-Skill
-SK_MAGIC_ATTACK    	Magischer Angriff
-SK_MAGIC_DEFENSE   	Magische Abwehr
-SK_NIGHTVISION     	Nachtsicht
-SK_BOOZE           	Sauf-Skill
-SK_INFORM_DEFEND   	
-SK_DEFEND_OTHER		
-SK_CARRY		Trage-Skill
-SK_SPELL_DEFEND		Spruch-Abwehr
+Standard-Skills SK_FIGHT                Kampfskill(global)
+SK_SWORDFIGHTING        Schwertkampf SK_WEAPONLESS
+Waffenloser Kampf SK_TWOHANDED            Zweihandkampf SK_CASTING
+Zauber-Skill SK_MAGIC_ATTACK         Magischer Angriff
+SK_MAGIC_DEFENSE        Magische Abwehr SK_NIGHTVISION
+Nachtsicht SK_BOOZE                Sauf-Skill SK_INFORM_DEFEND
+SK_DEFEND_OTHER SK_CARRY                Trage-Skill SK_SPELL_DEFEND
+Spruch-Abwehr
 
-Skill-Attribute:
-P_SKILL_ATTRIBUTES	Property fuer Skill-Attribute
+Skill-Attribute P_SKILL_ATTRIBUTES      Property fuer Skill-Attribute
 P_SKILL_ATTRIBUTE_OFFSETS   Property fuer Offsets der Skill-Attribute
-SA_QUALITY		Allgemeine Qualitaet
-SA_DAMAGE		Schaden
-SA_SPEED		Geschwindigkeit
-SA_DURATION		Dauer
-SA_EXTENSION		Ausdehnung
-SA_RANGE		Reichweit
-SA_ENEMY_SAVE: identisch zu SA_SPELL_PENETRATION (OBSOLET!)
-SA_SPELL_PENETRATION: Chance des _Casters_, einen Spell durch ein
-                      P_NOMAGIC durchzukriegen.
+SA_QUALITY              Allgemeine Qualitaet SA_DAMAGE
+Schaden SA_SPEED                Geschwindigkeit SA_DURATION
+Dauer SA_EXTENSION            Ausdehnung SA_RANGE
+Reichweit SA_ENEMY_SAVE identisch zu SA_SPELL_PENETRATION (OBSOLET!)
+SA_SPELL_PENETRATION Chance des _Casters_, einen Spell durch ein
 
-Skill-Info:
-FACTOR(x)		Faktor
-OFFSET(x)		Offset
-SI_SKILLFUNC		Funktion, die aufgerufen wird
-SI_CLOSURE		Intern (Geschwindigkeitsoptimierung)
-SI_SPELLBOOK		Spellbook, in dem der Spell steht
-SI_SPELLCOST		Kosten des Spells
-SI_TIME_MSG		Die Meldung wird anstelle von "Du bist noch zu 
-			erschoepft von Deinem letzten Spruch." ausgegeben.
-SI_SP_LOW_MSG		Die Meldung wird anstelle von "Du hast zu wenig 
-			Zauberpunkte fuer diesen Spruch." ausgegeben.
-SI_NOMAGIC		Prozentwert, mit dem P_NOMAGIC mgangen werden kann
-SI_SPELLFATIGUE		Erschoepfung - Zeit, in der keine weiteren Spells
-			aufgerufen werden koennen
-SI_SKILLLEARN		Lerngeschwindigkeit in 0.01% pro A_INT/2
-SI_SKILLABILITY		Faehigkeit, diesen Spruch zu benutzen
-SI_SKILLARG		Argumente, die uebergeben wurden
-SI_SKILLRESTR_USE	Beschraenkungen beim Gebrauch
-SI_SKILLRESTR_LEARN	Beschraenkungen beim Lernen
-SI_SKILLINFO		Kurzer Informationstext
-SI_SKILLINFO_LONG	Langer Informationstext
-SI_SKILLDAMAGE		Schaden
-SI_SKILLDAMAGE_TYPE	Art des Schadens
-SI_SKILLDAMAGE_MSG	Meldung die anstelle einer Waffe kommen soll
-SI_SKILLDAMAGE_MSG2	dito fuer den Text fuer andere im Raum
-SI_SPELL		Spell, mit dem angegriffen wurde
-SI_INHERIT		Skill, von dem etwas uebernommen werden soll
-SI_DIFFICULTY		Wert, der die Obergrenze der Faehigkeit abgrenzt
-SI_LASTLIGHT		Fuer Nachtsicht: Wann hat der Spieler zum letzten 
-			mal Licht gesehen.
-SI_SKILLHEAL		Heilung
-SI_USR			selbst definierte Infos
-SI_GUILD		Gilde, falls Auswahl aus mehreren moeglich
-SI_ENEMY		Feind bei Kampfspruechen
-SI_FRIEND		Der zu verteidigende Freund bei DefendOther 
-			und InformDefend
-SI_MAGIC_TYPE		Von was fuer einer Art ist die Magie (s.u.)
-SI_PREPARE_TIME		Zeit die zur Vorbereitung benoetigt wird.
-SI_ATTACK_BUSY_MSG	Meldung, wenn der Spieler zu beschaeftigt ist
-SI_NO_ATTACK_BUSY	Wenn der Spell nicht als Taetigkeit zaehlen/gezaehlt 
-			werden soll, kann man hier 
-			NO_ATTACK_BUSY[_SET|_QUERY] setzen
-SP_NAME			Name des Spells, falls Mapping
-SP_SHOW_DAMAGE		Treffermeldung soll gezeigt werden.
-SP_REDUCE_ARMOUR	AC soll Typabhaengig reduziert werden.
-SP_PHYSICAL_ATTACK	Koerperlicher Angriff
-SP_RECURSIVE		Rekursionen
+   P_NOMAGIC durchzukriegen.
 
-Skill-Restrictions:
-SR_FUN			Funktion, die weitere Einschraenkungen prueft
-SR_EXCLUDE_RACE		Ausgeschlossene Rassen
-SR_INCLUDE_RACE		Eingeschlossene Rassen
-SR_GOOD			Align < 
-SR_BAD			Align >
-SR_FREE_HANDS		Benoetigte freie Haende
-SR_SEER			Muss Seher sein
-SR_MIN_SIZE		Mindestgroesse
-SR_MAX_SIZE		Maximalgroesse
-SM_RACE			Rassenspezifische Besonderheiten
+Skill-Info FACTOR(x)               Faktor OFFSET(x)
+Offset SI_SKILLFUNC            Funktion, die aufgerufen wird
+SI_CLOSURE              Intern (Geschwindigkeitsoptimierung)
+SI_SPELLBOOK            Spellbook, in dem der Spell steht SI_SPELLCOST
+Kosten des Spells SI_TIME_MSG             Die Meldung wird anstelle
+von "Du bist noch zu
 
-Magie-Arten:
-MT_ANGRIFF      	Angriff
-MT_SCHUTZ       	Schutz
-MT_ILLUSION     	Illusion
-MT_BEHERRSCHUNG 	Beherrschung
-MT_HELLSICHT    	Hellsicht
-MT_VERWANDLUNG  	Verwandlung
-MT_BESCHWOERUNG 	Beschwoerung
-MT_BEWEGUNG     	Bewegung
-MT_SAKRAL       	'Goettliches'
-MT_HEILUNG      	Heilung
-MT_CREATION     	Erschaffung
-MT_PSYCHO       	Psycho-Kram
-MT_MISC         	Sonstiges
+   erschoepft von Deinem letzten Spruch." ausgegeben.
 
+SI_SP_LOW_MSG           Die Meldung wird anstelle von "Du hast zu
+wenig
+   Zauberpunkte fuer diesen Spruch." ausgegeben.
+
+SI_NOMAGIC              Prozentwert, mit dem P_NOMAGIC mgangen werden
+kann SI_SPELLFATIGUE         Erschoepfung - Zeit, in der keine
+weiteren Spells
+
+   aufgerufen werden koennen
+
+SI_SKILLLEARN           Lerngeschwindigkeit in 0.01% pro A_INT/2
+SI_SKILLABILITY         Faehigkeit, diesen Spruch zu benutzen
+SI_SKILLARG             Argumente, die uebergeben wurden
+SI_SKILLRESTR_USE       Beschraenkungen beim Gebrauch
+SI_SKILLRESTR_LEARN     Beschraenkungen beim Lernen SI_SKILLINFO
+Kurzer Informationstext SI_SKILLINFO_LONG       Langer
+Informationstext SI_SKILLDAMAGE          Schaden SI_SKILLDAMAGE_TYPE
+Art des Schadens SI_SKILLDAMAGE_MSG      Meldung die anstelle einer
+Waffe kommen soll SI_SKILLDAMAGE_MSG2     dito fuer den Text fuer
+andere im Raum SI_SPELL                Spell, mit dem angegriffen
+wurde SI_INHERIT              Skill, von dem etwas uebernommen werden
+soll SI_DIFFICULTY           Wert, der die Obergrenze der Faehigkeit
+abgrenzt SI_LASTLIGHT            Fuer Nachtsicht Wann hat der Spieler
+zum letzten
+
+   mal Licht gesehen.
+
+SI_SKILLHEAL            Heilung SI_USR                  selbst
+definierte Infos SI_GUILD                Gilde, falls Auswahl aus
+mehreren moeglich SI_ENEMY                Feind bei Kampfspruechen
+SI_FRIEND               Der zu verteidigende Freund bei DefendOther
+
+   und InformDefend
+
+SI_MAGIC_TYPE           Von was fuer einer Art ist die Magie (s.u.)
+SI_PREPARE_TIME         Zeit die zur Vorbereitung benoetigt wird.
+SI_ATTACK_BUSY_MSG      Meldung, wenn der Spieler zu beschaeftigt ist
+SI_NO_ATTACK_BUSY       Wenn der Spell nicht als Taetigkeit
+zaehlen/gezaehlt
+
+   werden soll, kann man hier NO_ATTACK_BUSY[_SET|_QUERY] setzen
+
+SP_NAME                 Name des Spells, falls Mapping SP_SHOW_DAMAGE
+Treffermeldung soll gezeigt werden. SP_REDUCE_ARMOUR        AC soll
+Typabhaengig reduziert werden. SP_PHYSICAL_ATTACK      Koerperlicher
+Angriff SP_RECURSIVE            Rekursionen
+
+Skill-Restrictions SR_FUN                  Funktion, die weitere
+Einschraenkungen prueft SR_EXCLUDE_RACE         Ausgeschlossene Rassen
+SR_INCLUDE_RACE         Eingeschlossene Rassen SR_GOOD
+Align < SR_BAD                  Align > SR_FREE_HANDS
+Benoetigte freie Haende SR_SEER                 Muss Seher sein
+SR_MIN_SIZE             Mindestgroesse SR_MAX_SIZE
+Maximalgroesse SM_RACE                 Rassenspezifische
+Besonderheiten
+
+Magie-Arten MT_ANGRIFF              Angriff MT_SCHUTZ
+Schutz MT_ILLUSION             Illusion MT_BEHERRSCHUNG
+Beherrschung MT_HELLSICHT            Hellsicht MT_VERWANDLUNG
+Verwandlung MT_BESCHWOERUNG         Beschwoerung MT_BEWEGUNG
+Bewegung MT_SAKRAL               'Goettliches' MT_HEILUNG
+Heilung MT_CREATION             Erschaffung MT_PSYCHO
+Psycho-Kram MT_MISC                 Sonstiges -----------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+-------
diff --git a/doc/lfun/GiveMiniQuest b/doc/lfun/GiveMiniQuest
index c08418c..d208dbd 100644
--- a/doc/lfun/GiveMiniQuest
+++ b/doc/lfun/GiveMiniQuest
@@ -1,43 +1,68 @@
+
 GiveMiniQuest()
+***************
 
-FUNKTION:
-        int GiveMiniQuest(object winner)
 
-DEFINIERT IN:
-        /secure/questmaster
+FUNKTION
+========
 
-ARGUMENTE:
-	winner
-	  Spielerobjekt, das die Quest bestanden hat.
+   int GiveMiniQuest(object winner)
 
-RUeCKGABEWERT:
-        (Die Defines fuer den Rueckgabewert finden sich in 
-         /secure/questmaster.h)
-         1 : Hat geklappt                           (OK)
-        -1 : Spieler hat die Quest bereits geloest  (MQ_ALREADY_SET)
-        -2 : Ungueltiger Questname                  (MQ_KEY_INVALID)
-        -3 : Unbefugter Zugriff                     (MQ_ILLEGAL_OBJ)
-        -4 : Quest zur Zeit inaktiv                 (MQ_IS_INACTIVE)
-        -5 : Gaeste loesen keine Quests             (MQ_GUEST)
 
-BESCHREIBUNG:
-	Mit dieser Funktion wird nach dem erfolgreichen Loesen einer 
-        MiniQuest die Quest im Spieler eingetragen. Dabei muss der
-        Aufruf in dem Objekt erfolgen, welches im Questmaster 
-        eingetragen ist. Als Argument muss das Spielerobjekt 
-	angegeben werden, welches die Quest bestanden hat.
-        
-BEISPIEL:
-	QM->GiveMiniQuest(this_player());
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        HasMiniQuest
-        /secure/questmaster.h, /secure/questmaster.c
+   /secure/questmaster
 
-HINWEIS:
-        Die Informationen fuer den EM fuer Quests sollten diesem
-        beim Eintragen der Miniquest in den Questmaster per Mail
-        zugeschickt werden. Siehe dazu die Hilfe zu AddMiniQuest.
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   winner
+     Spielerobjekt, das die Quest bestanden hat.
+
+
+RUeCKGABEWERT
+=============
+
+   (Die Defines fuer den Rueckgabewert finden sich in
+    /secure/questmaster.h)
+    1 : Hat geklappt                           (OK)
+   -1 : Spieler hat die Quest bereits geloest  (MQ_ALREADY_SET)
+   -2 : Ungueltiger Questname                  (MQ_KEY_INVALID)
+   -3 : Unbefugter Zugriff                     (MQ_ILLEGAL_OBJ)
+   -4 : Quest zur Zeit inaktiv                 (MQ_IS_INACTIVE)
+   -5 : Gaeste loesen keine Quests             (MQ_GUEST)
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion wird nach dem erfolgreichen Loesen einer
+   MiniQuest die Quest im Spieler eingetragen. Dabei muss der
+   Aufruf in dem Objekt erfolgen, welches im Questmaster
+   eingetragen ist. Als Argument muss das Spielerobjekt
+   angegeben werden, welches die Quest bestanden hat.
+
+
+BEISPIEL
+========
+
+   QM->GiveMiniQuest(this_player());
+
+
+SIEHE AUCH
+==========
+
+   HasMiniQuest
+   /secure/questmaster.h, /secure/questmaster.c
+
+
+HINWEIS
+=======
+
+   Die Informationen fuer den EM fuer Quests sollten diesem
+   beim Eintragen der Miniquest in den Questmaster per Mail
+   zugeschickt werden. Siehe dazu die Hilfe zu AddMiniQuest.
+
 Zuletzt geaendert: Don, 30. Jan 2014, 22:14:12 von Ark.
diff --git a/doc/lfun/GiveQuest b/doc/lfun/GiveQuest
index 613a501..daedc6c 100644
--- a/doc/lfun/GiveQuest
+++ b/doc/lfun/GiveQuest
@@ -1,63 +1,86 @@
+
 GiveQuest()
+***********
 
-FUNKTION:
-        varargs int GiveQuest(string questname, string message)
 
-DEFINIERT IN:
-        /std/player/quests.c
+FUNKTION
+========
 
-ARGUMENTE:
-        questname
-          Questname, wie er im Questmaster eingetragen wurde.
-        message 
-          Optionale Meldung, die auf dem Abenteuer-Kanal statt der 
-          Standardmeldung gesendet wird.
-          Dabei wird @@name@@ durch den Spielernamen ersetzt.
+   varargs int GiveQuest(string questname, string message)
 
-RUeCKGABEWERT:
-        (Die Defines fuer den Rueckgabewert finden sich in 
-         /secure/questmaster.h)
-         1 : Hat geklappt                           (OK)
-        -1 : Spieler hat die Quest bereits geloest  (GQ_ALREADY_SET)
-        -2 : Ungueltiger Questname                  (GQ_KEY_INVALID)
-        -3 : Unbefugter Zugriff                     (GQ_ILLEGAL_OBJ)
-        -4 : Quest zur Zeit inaktiv                 (GQ_IS_INACTIVE)
 
-BESCHREIBUNG:
-        Mit dieser Funktion wird nach dem erfolgreichen Loesen einer 
-        Quest die Quest im Spieler eingetragen. Dabei muss der Aufruf 
-        in dem Objekt erfolgen, welches im Questmaster eingetragen ist.
-        Zusaetzlich wird der Zeitpunkt eingetragen, an dem die Quest
-        bestanden wurde.
-        
-        Wer sich da nicht sicher ist, kann mit dem Questtool 
-        (/obj/tools/questtool) nachsehen. 
+DEFINIERT IN
+============
 
-        Nachdem eine Quest als geloest markiert wurde, ist dies in einem 
-        Logfile fuer die Quest im Verzeichnis /log/quest einzutragen. Dazu
-        wird write_file verwendet.
+   /std/player/quests.c
 
-BEISPIEL:
 
-        int quest;
+ARGUMENTE
+=========
 
-        quest = this_player()->GiveQuest("Zacharias Eispalast");
+   questname
+     Questname, wie er im Questmaster eingetragen wurde.
+   message
+     Optionale Meldung, die auf dem Abenteuer-Kanal statt der
+     Standardmeldung gesendet wird.
+     Dabei wird @@name@@ durch den Spielernamen ersetzt.
 
-        if (quest == 1)
-        {
-          write("Du fuehlst, wie Deine Erfahrung ansteigt.\n");
-          write_file("/log/quest/eispalast", 
-                     dtime(time())+"   Aufgabe geloest von "
-                     +this_player()->name()+"\n");
-        } 
-        else if (quest != -1)
-          write( "Die Weltenmaschine will Dir Deine Arbeit "
-                 +"nicht anerkennen.\n"
-                 +"Frage einen Erzmagier um Hilfe.\n" );
 
-SIEHE AUCH:
-        /secure/questmaster.h, /obj/tools/questtool
-        QueryQuest(), write_file(), ModifyQuestTime()
+RUeCKGABEWERT
+=============
 
-----------------------------------------------------------------------------
+   (Die Defines fuer den Rueckgabewert finden sich in
+    /secure/questmaster.h)
+    1 : Hat geklappt                           (OK)
+   -1 : Spieler hat die Quest bereits geloest  (GQ_ALREADY_SET)
+   -2 : Ungueltiger Questname                  (GQ_KEY_INVALID)
+   -3 : Unbefugter Zugriff                     (GQ_ILLEGAL_OBJ)
+   -4 : Quest zur Zeit inaktiv                 (GQ_IS_INACTIVE)
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion wird nach dem erfolgreichen Loesen einer
+   Quest die Quest im Spieler eingetragen. Dabei muss der Aufruf
+   in dem Objekt erfolgen, welches im Questmaster eingetragen ist.
+   Zusaetzlich wird der Zeitpunkt eingetragen, an dem die Quest
+   bestanden wurde.
+
+
+
+   Wer sich da nicht sicher ist, kann mit dem Questtool
+   (/obj/tools/questtool) nachsehen.
+
+   Nachdem eine Quest als geloest markiert wurde, ist dies in einem
+   Logfile fuer die Quest im Verzeichnis /log/quest einzutragen. Dazu
+   wird write_file verwendet.
+
+
+BEISPIEL
+========
+
+   int quest;
+
+   quest = this_player()->GiveQuest("Zacharias Eispalast");
+
+   if (quest == 1)
+   {
+     write("Du fuehlst, wie Deine Erfahrung ansteigt.\n");
+     write_file("/log/quest/eispalast",
+                dtime(time())+"   Aufgabe geloest von "
+                +this_player()->name()+"\n");
+   }
+   else if (quest != -1)
+     write( "Die Weltenmaschine will Dir Deine Arbeit "
+            +"nicht anerkennen.\n"
+            +"Frage einen Erzmagier um Hilfe.\n" );
+
+
+SIEHE AUCH
+==========
+
+   /secure/questmaster.h, /obj/tools/questtool
+   QueryQuest(), write_file(), ModifyQuestTime()
+
 Zuletzt geaendert: Son, 27. Apr 2014, Arathorn
diff --git a/doc/lfun/GroupName b/doc/lfun/GroupName
index 7a81c45..7b819be 100644
--- a/doc/lfun/GroupName
+++ b/doc/lfun/GroupName
@@ -1,63 +1,87 @@
+
 GroupName()
-FUNKTION:
-     string GroupName(string grp)
+***********
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     string grp - ein Gruppenname
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Gibt die Langbeschreibung des Gruppennamens zurueck.
+   string GroupName(string grp)
 
-RUECKGABEWERT:
-     Die Gruppenbeschreibung oder "Unbekanntes"
 
-BEISPIELE:
-     // simpel
-     tmp=m_indices(ob->QueryProp(P_MATERIAL));
-     write("Dieses Objekt gehoert u.a. zur Gruppe "+
-           MATERIALDB->GroupName(MATERIALDB->GetMatMembership(tmp[0])[0])+
-           ".\n");
-     // gibt die erste Gruppenzugehoerigkeit des erste Materials in
-     // P_MATERIAL zurueck (bei MATGROUP_METAL z.B. "... zur Gruppe Metalle.")
+DEFINIERT IN
+============
 
-     // ein weiser Schmied:
-     int i;
-     string *mat, mname, mgroup;
-     mat=m_indices(ob->QueryProp(P_MATERIAL));
-     i=sizeof(mat);
+   /p/daemon/materialdb.c (MATERIALDB)
 
-     write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
-     while(i--) {
-      // den Namen erkennen/aussprechen:
-      // Materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
-      // alles aus Metall wird zu +100% gut erkannt ...
-      mname=MATERIALDB->MaterialName(mat[i], WER,
-	     ({5, ([MATERIAL_SYMMETRIC_RECOGNIZABILITY:
-			({MATGROUP_METAL, 100})])}));
 
-      // und nur Metalle analysieren ...
-      if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
-       int j;
-       string *mgr;
-       mgr=MATERIALDB->GetMatMembership(mat[i]);
-       j=sizeof(mgr);
-       mgroup=" gehoert zu ";
-       while(j--) {
-        mgroup+=MATERIALDB->GroupName(mgr[j]);
-        if(j>0) mgroup+=", ";
-       }
-      } else mgroup=" kenne ich nicht";
-      printf("%-12.12s: %s\n",mname, mgroup);
+ARGUMENTE
+=========
+
+   string grp - ein Gruppenname
+
+
+BESCHREIBUNG
+============
+
+   Gibt die Langbeschreibung des Gruppennamens zurueck.
+
+
+RUECKGABEWERT
+=============
+
+   Die Gruppenbeschreibung oder "Unbekanntes"
+
+
+BEISPIELE
+=========
+
+   // simpel
+   tmp=m_indices(ob->QueryProp(P_MATERIAL));
+   write("Dieses Objekt gehoert u.a. zur Gruppe "+
+         MATERIALDB->GroupName(MATERIALDB->GetMatMembership(tmp[0])[0])+
+         ".\n");
+   // gibt die erste Gruppenzugehoerigkeit des erste Materials in
+   // P_MATERIAL zurueck (bei MATGROUP_METAL z.B. "... zur Gruppe Metalle.")
+
+   // ein weiser Schmied:
+   int i;
+   string *mat, mname, mgroup;
+   mat=m_indices(ob->QueryProp(P_MATERIAL));
+   i=sizeof(mat);
+
+   write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
+   while(i--) {
+    // den Namen erkennen/aussprechen:
+    // Materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
+    // alles aus Metall wird zu +100% gut erkannt ...
+    mname=MATERIALDB->MaterialName(mat[i], WER,
+           ({5, ([MATERIAL_SYMMETRIC_RECOGNIZABILITY:
+                      ({MATGROUP_METAL, 100})])}));
+
+    // und nur Metalle analysieren ...
+    if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
+     int j;
+     string *mgr;
+     mgr=MATERIALDB->GetMatMembership(mat[i]);
+     j=sizeof(mgr);
+     mgroup=" gehoert zu ";
+     while(j--) {
+      mgroup+=MATERIALDB->GroupName(mgr[j]);
+      if(j>0) mgroup+=", ";
      }
+    } else mgroup=" kenne ich nicht";
+    printf("%-12.12s: %s\n",mname, mgroup);
+   }
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/GuardExit b/doc/lfun/GuardExit
index 1cdf8cc..88da3c9 100644
--- a/doc/lfun/GuardExit
+++ b/doc/lfun/GuardExit
@@ -1,85 +1,111 @@
-FUNKTION:
-     protected <int|<string|closure>* >* GuardExit(object room, int hookid,
-                                                   <string|closure>* hdata);
 
-DEFINIERT IN:
-     /std/npc/moving.c
-
-ARGUMENTE:
-     room
-          Der den Hook ausloesende Raum (environment())
-     hookid
-          Die ID des Hooks (H_HOOK_EXIT_USE)
-     hdata
-          Ein Array mit 3 Elementen:
-          ({
-              verb - Das Kommandoverb/Ausgangsname (string)
-              dest - Zielraum (string) oder closure (special exits)
-              msg  - Bewegungsrichtung (string) oder 0
-          })
-
-BESCHREIBUNG:
-     Ist diese Funktion in einem NPC definiert, traegt sich der NPC bei jeder
-     Bewegung automatisch als Konsument von H_HOOK_EXIT_USE ein und diese
-     Funktion wird immer gerufen, wenn ein Lebewesen im gleichen Environment
-     wie der NPC versucht, einen Ausgang zu benutzen.
-     Der NPC kann dann die Bewegung abbrechen (und so den Ausgang
-     blockieren), Ziel oder Bewegungsmeldung aendern oder keine Veraenderung
-     vornehmen.
-     Die Konstanten fuer Hookid und Hookstatus (s. Rueckgabewert) sind in
-     <hook.h> definiert.
-
-RUeCKGABEWERT:
-     Array mit zwei Elementen:
-     ({
-         H_NO_MOD / H_ALTERED / H_CANCELLED,
-         hdata
-     })
-     hdata ist ggf. das geaenderte Array, welches die Funktion uebergeben
-     wird. Weitere Details s. auch /doc/std/hooks
-
-BEMERKUNGEN:
-     Die Anzahl an Konsumenten eines Hooks ist begrenzt. Es ist daher
-     moeglich, dass die Registrierung nicht klappt, wenn zuviele (>5) Waechter
-     im Raum sind. Will man darauf reagieren, muesste man die Registrierung
-     pruefen.
-     Ein NPC, welcher GuardExit() definiert, aber im aktuellen Environment
-     keine Wache halten will, koennte sich selber de-registrieren.
-
-BEISPIELE:
-     <int|<string|closure>* >* GuardExit(object room, int hookid,
-                                         <string|closure>* hdata)
-     {
-       // Nur in Gefaengnisraeumen Wache halten
-       if (strstr(object_name(environment()), "/room/jail")==0)
-       {
-         // Hier gehts nicht raus. ;-)
-         if (hdata[0] == "raus") {
-             tell_object(this_player(), ...);
-             return ({H_CANCELLED, hdata});
-         }
-         // Special exits ersetzen wir durch einen eigenen
-         else if (closurep(hdata[1])) {
-           hdata[1] = #'my_special_exit;
-           return ({H_ALTERED, hdata});
-         }
-         // alle anderen Ausgaenge in die persoenliche Zelle
-         else {
-           tell_object(this_player(), ...);
-           hdata[1] = "/room/jail_"+getuid(this_player());
-           hdata[2] = "Sueden";
-           return ({H_ALTERED, hdata});
-         }
-      }
-      // in allen anderen Raeumen nicht eingreifen
-      return ({H_NO_MOD, hdata});
-    }
+GuardExit()
+***********
 
 
-SIEHE AUCH:
-     AddExit, AddSpecialExit, RemoveExit
-     HRegisterToHook, HRegisterModifier, HUnregisterFromHook
-     /doc/std/hooks
-----------------------------------------------------------------------------
-20.02.2016, Zesstra
-22.05.2016, Mupfel (Beispiel korrigiert)
+FUNKTION
+========
+
+   protected <int|<string|closure>* >* GuardExit(object room, int hookid,
+                                                 <string|closure>* hdata);
+
+
+DEFINIERT IN
+============
+
+   /std/npc/moving.c
+
+
+ARGUMENTE
+=========
+
+   room
+        Der den Hook ausloesende Raum (environment())
+   hookid
+        Die ID des Hooks (H_HOOK_EXIT_USE)
+   hdata
+        Ein Array mit 3 Elementen:
+        ({
+            verb - Das Kommandoverb/Ausgangsname (string)
+            dest - Zielraum (string) oder closure (special exits)
+            msg  - Bewegungsrichtung (string) oder 0
+        })
+
+
+BESCHREIBUNG
+============
+
+   Ist diese Funktion in einem NPC definiert, traegt sich der NPC bei jeder
+   Bewegung automatisch als Konsument von H_HOOK_EXIT_USE ein und diese
+   Funktion wird immer gerufen, wenn ein Lebewesen im gleichen Environment
+   wie der NPC versucht, einen Ausgang zu benutzen.
+   Der NPC kann dann die Bewegung abbrechen (und so den Ausgang
+   blockieren), Ziel oder Bewegungsmeldung aendern oder keine Veraenderung
+   vornehmen.
+   Die Konstanten fuer Hookid und Hookstatus (s. Rueckgabewert) sind in
+   <hook.h> definiert.
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit zwei Elementen:
+   ({
+       H_NO_MOD / H_ALTERED / H_CANCELLED,
+       hdata
+   })
+   hdata ist ggf. das geaenderte Array, welches die Funktion uebergeben
+   wird. Weitere Details s. auch /doc/std/hooks
+
+
+BEMERKUNGEN
+===========
+
+   Die Anzahl an Konsumenten eines Hooks ist begrenzt. Es ist daher
+   moeglich, dass die Registrierung nicht klappt, wenn zuviele (>5) Waechter
+   im Raum sind. Will man darauf reagieren, muesste man die Registrierung
+   pruefen.
+   Ein NPC, welcher GuardExit() definiert, aber im aktuellen Environment
+   keine Wache halten will, koennte sich selber de-registrieren.
+
+
+BEISPIELE
+=========
+
+    <int|<string|closure>* >* GuardExit(object room, int hookid,
+                                        <string|closure>* hdata)
+    {
+      // Nur in Gefaengnisraeumen Wache halten
+      if (strstr(object_name(environment()), "/room/jail")==0)
+      {
+        // Hier gehts nicht raus. ;-)
+        if (hdata[0] == "raus") {
+            tell_object(this_player(), ...);
+            return ({H_CANCELLED, hdata});
+        }
+        // Special exits ersetzen wir durch einen eigenen
+        else if (closurep(hdata[1])) {
+          hdata[1] = #'my_special_exit;
+          return ({H_ALTERED, hdata});
+        }
+        // alle anderen Ausgaenge in die persoenliche Zelle
+        else {
+          tell_object(this_player(), ...);
+          hdata[1] = "/room/jail_"+getuid(this_player());
+          hdata[2] = "Sueden";
+          return ({H_ALTERED, hdata});
+        }
+     }
+     // in allen anderen Raeumen nicht eingreifen
+     return ({H_NO_MOD, hdata});
+   }
+
+
+SIEHE AUCH
+==========
+
+   AddExit, AddSpecialExit, RemoveExit
+   HRegisterToHook, HRegisterModifier, HUnregisterFromHook
+   /doc/std/hooks
+
+20.02.2016, Zesstra 22.05.2016, Mupfel (Beispiel korrigiert)
diff --git a/doc/lfun/Halt b/doc/lfun/Halt
index 06bfda4..2fb45e8 100644
--- a/doc/lfun/Halt
+++ b/doc/lfun/Halt
@@ -1,30 +1,52 @@
+
 Halt()
+******
 
-FUNKTION:
-     void Halt();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   void Halt();
 
-BESCHREIBUNG:
-     Die Fahrt des Transporters wird abgebrochen. Sie muss explizit mit
-     Start() wieder aufgenommen werden!
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Es gibt keine einfache Moeglichkeit, die Fahrt eines Transporters an
-     der Stelle wieder aufzunehmen, an der sie unterbrochen wurde. Man
-     muesste die aktuelle Position mit QueryPosition() ermitteln, mit Hilfe
-     der AddXXX()-Aufrufe in eine Positionsnummer umwandlen und diese an
-     Start() uebergeben.
+   /std/transport.c
 
-SIEHE AUCH:
-     Start(), /std/transport.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Die Fahrt des Transporters wird abgebrochen. Sie muss explizit mit
+   Start() wieder aufgenommen werden!
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Es gibt keine einfache Moeglichkeit, die Fahrt eines Transporters an
+   der Stelle wieder aufzunehmen, an der sie unterbrochen wurde. Man
+   muesste die aktuelle Position mit QueryPosition() ermitteln, mit Hilfe
+   der AddXXX()-Aufrufe in eine Positionsnummer umwandlen und diese an
+   Start() uebergeben.
+
+
+SIEHE AUCH
+==========
+
+   Start(), /std/transport.c
+
 Last modified: Wed May 8 10:19:23 1996 by Wargon
diff --git a/doc/lfun/HasMiniQuest b/doc/lfun/HasMiniQuest
index 76fc394..c832f00 100644
--- a/doc/lfun/HasMiniQuest
+++ b/doc/lfun/HasMiniQuest
@@ -1,37 +1,59 @@
+
 HasMiniQuest()
+**************
 
-FUNKTION:
-        int HasMiniQuest(mixed pl, mixed name)
 
-DEFINIERT IN:
-        /secure/questmaster
+FUNKTION
+========
 
-ARGUMENTE:
-        pl
-          Name des Spielers oder das Spielerobjekt
-        name
-          Filename des Objekts oder das Objekt selbst, welches die Miniquest
-          im Spieler eintragen darf, oder die Nummer (int) der Miniquest
+   int HasMiniQuest(mixed pl, mixed name)
 
-RUeCKGABEWERT:
-         1 : Der Spieler hat die MiniQuest
-         0 : Der Spieler hat die MiniQuest noch nicht
-        -2 : angegebene Miniquest existiert nicht
-        -3 : falsche Datentypen fuer pl oder name uebergeben
 
-BESCHREIBUNG:
-        Mit dieser Funktion kann getestet werden, ob ein Spieler eine 
-        MiniQuest bereits geloest hat. Dabei ist entweder der Filename des 
-        Objektes anzugeben, das die Quest im Spieler eintragen darf oder
-        das Objekt selbst.
-        
-BEISPIEL:
-        if( QM->HasMiniQuest(getuid(this_player()), this_object())!=1 )
-          write("Du bist noch nicht reif genug.\n");
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        GiveMiniQuest(L)
-        /secure/questmaster.h, /secure/questmaster.c
+   /secure/questmaster
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   pl
+     Name des Spielers oder das Spielerobjekt
+   name
+     Filename des Objekts oder das Objekt selbst, welches die Miniquest
+     im Spieler eintragen darf, oder die Nummer (int) der Miniquest
+
+
+RUeCKGABEWERT
+=============
+
+    1 : Der Spieler hat die MiniQuest
+    0 : Der Spieler hat die MiniQuest noch nicht
+   -2 : angegebene Miniquest existiert nicht
+   -3 : falsche Datentypen fuer pl oder name uebergeben
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann getestet werden, ob ein Spieler eine
+   MiniQuest bereits geloest hat. Dabei ist entweder der Filename des
+   Objektes anzugeben, das die Quest im Spieler eintragen darf oder
+   das Objekt selbst.
+
+
+BEISPIEL
+========
+
+   if( QM->HasMiniQuest(getuid(this_player()), this_object())!=1 )
+     write("Du bist noch nicht reif genug.\n");
+
+
+SIEHE AUCH
+==========
+
+   GiveMiniQuest(L)
+   /secure/questmaster.h, /secure/questmaster.c
+
 Zuletzt geaendert: 2014-Feb-03, Arathorn.
diff --git a/doc/lfun/HitFunc b/doc/lfun/HitFunc
index 3d22075..2fb9b79 100644
--- a/doc/lfun/HitFunc
+++ b/doc/lfun/HitFunc
@@ -1,68 +1,94 @@
+
 HitFunc()
+*********
 
-FUNKTION:
-     int HitFunc(object enemy);
 
-DEFINIERT IN:
-     eigenen Objekten, fuer /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     enemy
-          Der Gegner, gegen den die Waffe eingesetzt wird.
+   int HitFunc(object enemy);
 
-BESCHREIBUNG:
-     Die Waffe kann anhand des Gegners enemy entscheiden, ob ein
-     Schadensbonus oder auch ein Schadensmalus wirksam wird. Dieser Bonus
-     wird zu dem normalen Schaden der Waffe hinzuaddiert.
 
-RUeCKGABEWERT:
-     Der Schadensbonus bzw. der Abschlag.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn durch den Bonus die Genehmigungsgrenzen der Balance
-     ueberschritten werden koennen, muss man seinen Regionsmagier und
-     die Objekt-Balance konsultieren!
+   eigenen Objekten, fuer /std/weapon/combat.c
 
-     Werte der HitFunc sollten immer ueber ein random() zurueckgegeben 
-     werden!
 
-     Diese Funktion sollte die Waffe nicht zerstoeren! Falls ihr im Kampf eine
-     Waffe (ggf. in Abhaengigkeit vom Gegner) zerstoeren wollt, nutzt dazu
-     bitte TakeFlaw(). 
+ARGUMENTE
+=========
 
-BEISPIELE:
-     Eine Waffe, die gegen Orks besonders gut wirkt:
+   enemy
+        Der Gegner, gegen den die Waffe eingesetzt wird.
 
-     inherit "std/weapon";
 
-     #include <properties.h>
-     #include <combat.h>
-     #include <class.h>
+BESCHREIBUNG
+============
 
-     create(){
-       if(!clonep(this_object())) {
-           set_next_reset(-1);
-           return;
-       }
-       ::create();
-       /* 
-       zig SetProp's, um die Waffe zu konfigurieren
-       HitFunc() ist in der Waffe selbst definiert 
-       */
-       SetProp(P_HIT_FUNC, this_object());
+   Die Waffe kann anhand des Gegners enemy entscheiden, ob ein
+   Schadensbonus oder auch ein Schadensmalus wirksam wird. Dieser Bonus
+   wird zu dem normalen Schaden der Waffe hinzuaddiert.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Schadensbonus bzw. der Abschlag.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn durch den Bonus die Genehmigungsgrenzen der Balance
+   ueberschritten werden koennen, muss man seinen Regionsmagier und
+   die Objekt-Balance konsultieren!
+
+   Werte der HitFunc sollten immer ueber ein random() zurueckgegeben
+   werden!
+
+   Diese Funktion sollte die Waffe nicht zerstoeren! Falls ihr im Kampf eine
+   Waffe (ggf. in Abhaengigkeit vom Gegner) zerstoeren wollt, nutzt dazu
+   bitte TakeFlaw().
+
+
+BEISPIELE
+=========
+
+   Eine Waffe, die gegen Orks besonders gut wirkt:
+
+   inherit "std/weapon";
+
+   #include <properties.h>
+   #include <combat.h>
+   #include <class.h>
+
+   create(){
+     if(!clonep(this_object())) {
+         set_next_reset(-1);
+         return;
      }
+     ::create();
+     /*
+     zig SetProp's, um die Waffe zu konfigurieren
+     HitFunc() ist in der Waffe selbst definiert
+     */
+     SetProp(P_HIT_FUNC, this_object());
+   }
 
-     int HitFunc(object enemy)
-     {
-       /* laesst sich der Gegner als Ork ansprechen? */
-       if (enemy->is_class_member(CL_ORC))
-         return random(10+random(50)); /* Ja => Schaden erhoehen */
+   int HitFunc(object enemy)
+   {
+     /* laesst sich der Gegner als Ork ansprechen? */
+     if (enemy->is_class_member(CL_ORC))
+       return random(10+random(50)); /* Ja => Schaden erhoehen */
 
-       return 0;   /* ansonsten keinen zusaetzlichen Schaden anrichten */
-     }
+     return 0;   /* ansonsten keinen zusaetzlichen Schaden anrichten */
+   }
 
-SIEHE AUCH:
-     QueryDefend(), /std/weapon.c
-     TakeFlaw()
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   QueryDefend(), /std/weapon.c
+   TakeFlaw()
+
 11.08.2007, Zesstra
diff --git a/doc/lfun/Identify b/doc/lfun/Identify
index 836e58b..9f55541 100644
--- a/doc/lfun/Identify
+++ b/doc/lfun/Identify
@@ -1,24 +1,43 @@
+
 Identify()
+**********
 
-FUNKTION:
-     void Identify(object ob);
 
-DEFINIERT IN:
-     /std/corpse.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob
-          Das kuerzlich nach langem, hartem Kampf verstorbene Objekt.
+   void Identify(object ob);
 
-BESCHREIBUNG:
-     In dieser Funktion werden Lang- und Kurzbeschreibung der Leiche gesetzt
-     sowie die Verwesung in Gang gesetzt.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     /std/corpse.c
+   /std/corpse.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   ob
+        Das kuerzlich nach langem, hartem Kampf verstorbene Objekt.
+
+
+BESCHREIBUNG
+============
+
+   In dieser Funktion werden Lang- und Kurzbeschreibung der Leiche gesetzt
+   sowie die Verwesung in Gang gesetzt.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   /std/corpse.c
+
 Last modified: Wed May 8 10:19:57 1996 by Wargon
diff --git a/doc/lfun/InFight b/doc/lfun/InFight
index 086c5bd..73fef03 100644
--- a/doc/lfun/InFight
+++ b/doc/lfun/InFight
@@ -1,32 +1,52 @@
+
 InFight()
+*********
 
-FUNKTION:
-        mixed InFight()
 
-ARGUMENTE:
-        keine
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wurde dazu geschrieben, um herauszufinden,
-        ob sich ein PC/NPC direkt im Kampf befindet. Dazu wird
-        das Array mit den Namen der Feinden des PC/NPCs durch die
-        Funktion environment gefiltert und so festgestellt, ob
-        die Umgebung der beiden Feinde gleich ist.
+   mixed InFight()
 
-RUECKGABEWERT: 
-        Als Rueckgabewert enthaelt man entweder 0, wenn das Objekt
-        im Moment keine Feinde hat bzw. die nicht im selben Raum
-        sind, oder aber das Feindobjekt, das als erstes im Array
-        steht und anwesend ist.
 
-BEISPIEL:
-        Selbsterklaerend ;)
+ARGUMENTE
+=========
 
-BEMERKUNG:
-        InFight() gibt lediglich das Ergebnis von EnemyPresent() zurueck.
+   keine
 
-SIEHE AUCH:
-        EnemyPresent(), PresentEnemies()
-        /std/living/combat.c
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wurde dazu geschrieben, um herauszufinden,
+   ob sich ein PC/NPC direkt im Kampf befindet. Dazu wird
+   das Array mit den Namen der Feinden des PC/NPCs durch die
+   Funktion environment gefiltert und so festgestellt, ob
+   die Umgebung der beiden Feinde gleich ist.
+
+RUECKGABEWERT:
+   Als Rueckgabewert enthaelt man entweder 0, wenn das Objekt im
+   Moment keine Feinde hat bzw. die nicht im selben Raum sind, oder
+   aber das Feindobjekt, das als erstes im Array steht und anwesend
+   ist.
+
+
+BEISPIEL
+========
+
+   Selbsterklaerend ;)
+
+
+BEMERKUNG
+=========
+
+   InFight() gibt lediglich das Ergebnis von EnemyPresent() zurueck.
+
+
+SIEHE AUCH
+==========
+
+   EnemyPresent(), PresentEnemies()
+   /std/living/combat.c
 
 22.03.2009, Zesstra
diff --git a/doc/lfun/InList b/doc/lfun/InList
index adcd431..82de3c9 100644
--- a/doc/lfun/InList
+++ b/doc/lfun/InList
@@ -1,28 +1,48 @@
+
 InList()
+********
 
-FUNKTION:
-     int InList(object room, int *potionlist, int *knownlist)
 
-DEFINIERT IN:
-     /secure/potionmaster.c
+FUNKTION
+========
 
-ARGUMENTE:
-     Implizit: previous_object() - Spielerobjekt, das ZT bekommen soll
-     object room                 - Objekt, welches ZT vergeben will
-     int* potionlist             - Liste der ZTs des Spielers
-     int* knownlist              - Liste der bekannten ZTs des Spielers
+   int InList(object room, int *potionlist, int *knownlist)
 
-BESCHREIBUNG:
-     Prueft, ob 'room' einen ZT vergeben darf und gibt zurueck, ob die
-     Nummer dieses ZTs in der 'knownlist' enthalten ist.
 
-RUeCKGABEWERT:
-     0  Kein aktiver ZT oder nicht in Liste enthalten.
-     1  Aktiver ZT und in Liste.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Sonstiges: zaubertraenke, /room/orakel.c
-     Verwandt:  FindPotion(), RemoveKnownPotion(), AddKnownPotion()
-     Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
+   /secure/potionmaster.c
+
+
+ARGUMENTE
+=========
+
+   Implizit: previous_object() - Spielerobjekt, das ZT bekommen soll
+   object room                 - Objekt, welches ZT vergeben will
+   int* potionlist             - Liste der ZTs des Spielers
+   int* knownlist              - Liste der bekannten ZTs des Spielers
+
+
+BESCHREIBUNG
+============
+
+   Prueft, ob 'room' einen ZT vergeben darf und gibt zurueck, ob die
+   Nummer dieses ZTs in der 'knownlist' enthalten ist.
+
+
+RUeCKGABEWERT
+=============
+
+   0  Kein aktiver ZT oder nicht in Liste enthalten.
+   1  Aktiver ZT und in Liste.
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges: zaubertraenke, /room/orakel.c
+   Verwandt:  FindPotion(), RemoveKnownPotion(), AddKnownPotion()
+   Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
 
 6.Feb 2016 Gloinson
diff --git a/doc/lfun/InformAlcoholEffect b/doc/lfun/InformAlcoholEffect
index 0fa5297..4967510 100644
--- a/doc/lfun/InformAlcoholEffect
+++ b/doc/lfun/InformAlcoholEffect
@@ -1,43 +1,65 @@
-InformAlcoholEffect
 
-FUNKTION:
-	void InformAlcoholEffect(object pl, int msgid, int area)
+InformAlcoholEffect()
+*********************
 
-DEFINIERT IN:
-     eigenen Objekten; fuer /std/living/life.c
- 
-ARGUMENTE:
-	pl
-          Das Lebewesen, das alkoholisiert ist.
-        msgid
-          Flag fuer die Meldung, die ausgegeben wird.
-        area
-          Aufruf erfolgt in Gilde (0) oder im Environment (1).
 
-BESCHREIBUNG:
-        Wenn ein Lebewesen alkoholisiert ist, werden in unregelmaessigen
-        Abstaenden Meldungen an die Umgebung und ans Lebewesen ausgegeben.
-        Gleichzeitig wird die Funktion InformAlcoholEffect in der Gilde
-        und im Environment des Lebewesens aufgerufen.
-        
-        Es gibt vier verschiedene Meldungen (definiert in /sys/health.h):
-        ALC_EFFECT_HICK      (0) : "<Hick>! Oh, Tschuldigung.\n"
-        ALC_EFFECT_RUELPS    (1) : "Du ruelpst.\n"
-        ALC_EFFECT_LOOKDRUNK (2) : "Du fuehlst Dich benommen.\n"
-        ALC_EFFECT_STUMBLE   (3) : "Du stolperst.\n"
-        
-        Wird die Funktion in einem Gildenraum implementiert, so kann man
-        anhand des 3. Parameters unterscheiden, ob die Gilde als Gilde
-        oder als Raum gemeint ist (die Funktion wird je einmal aufgerufen):
-        ALC_EFFECT_AREA_GUILD (0) : der Aufruf betrifft die Gilde,
-        ALC_EFFECT_AREA_ENV   (1) : der Aufruf betrifft die Umgebung.
+FUNKTION
+========
 
-RUeCKGABEWERT:
-	keiner
+   void InformAlcoholEffect(object pl, int msgid, int area)
 
-SIEHE AUCH:
-        P_ALCOHOL, /sys/health.h
 
-----------------------------------------------------------------------------
+DEFINIERT IN
+============
+
+   eigenen Objekten; fuer /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das alkoholisiert ist.
+   msgid
+     Flag fuer die Meldung, die ausgegeben wird.
+   area
+     Aufruf erfolgt in Gilde (0) oder im Environment (1).
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Lebewesen alkoholisiert ist, werden in unregelmaessigen
+   Abstaenden Meldungen an die Umgebung und ans Lebewesen ausgegeben.
+   Gleichzeitig wird die Funktion InformAlcoholEffect in der Gilde
+   und im Environment des Lebewesens aufgerufen.
+
+
+
+   Es gibt vier verschiedene Meldungen (definiert in /sys/health.h):
+   ALC_EFFECT_HICK      (0) : "<Hick>! Oh, Tschuldigung.\n"
+   ALC_EFFECT_RUELPS    (1) : "Du ruelpst.\n"
+   ALC_EFFECT_LOOKDRUNK (2) : "Du fuehlst Dich benommen.\n"
+   ALC_EFFECT_STUMBLE   (3) : "Du stolperst.\n"
+
+
+
+   Wird die Funktion in einem Gildenraum implementiert, so kann man
+   anhand des 3. Parameters unterscheiden, ob die Gilde als Gilde
+   oder als Raum gemeint ist (die Funktion wird je einmal aufgerufen):
+   ALC_EFFECT_AREA_GUILD (0) : der Aufruf betrifft die Gilde,
+   ALC_EFFECT_AREA_ENV   (1) : der Aufruf betrifft die Umgebung.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   P_ALCOHOL, /sys/health.h
+
 Last modified: Thu May 23 23:08:00 2002 by Mupfel
-
diff --git a/doc/lfun/InformDefend b/doc/lfun/InformDefend
index eb36921..d6a401e 100644
--- a/doc/lfun/InformDefend
+++ b/doc/lfun/InformDefend
@@ -1,62 +1,81 @@
+
 InformDefend()
+**************
 
-FUNKTION:
-	void InformDefend(object enemy);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	enemy
-	  Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+   void InformDefend(object enemy);
 
-BESCHREIBUNG:
-	Es ist moeglich, dass Objekte ueber Angriffe auf Lebewesen
-	informiert werden, sofern diese Objekte bei dem angegriffenen
-	Lebewesen mittels AddDefender() angemeldet wurden und sich der
-	selben Umgebung befinden.
-	Zumeist wird es sich bei den Objekten natuerlich ebenfalls um
-	andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet
-	sind, verteidigen sollen.
-	Bei einem Angriff auf das Lebewesen werden alle Objekte per Aufruf
-	von InformDefend() darueber informiert, wobei der Angreifer als
-	Parameter uebergeben wird.
-	Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
-	wobei der Skill SK_INFORM_DEFEND, sofern vorhanden, aufgerufen wird.
 
-BEISPIEL:
-	Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
-	verteidigen, z.B. beschworene Daemonen:
-	  inherit "std/npc";
-	  include <properties.h>
-	  object owner;
-	  void create()
-	  { ::create();
-	    SetProp(P_NAME,"Daemon");
-	    ...
-	  }
-	// nach Clonen des Daemons folgende Funktion mit Beschwoerer als
-	// Parameter aufrufen
-	  Identify(object caster)
-	  { if(!objectp(caster))
-	      call_out(#'remove,0);
-	    owner=caster;
-	    owner->AddDefender(this_object());
-	  }
-	// folgende Funktion wird automatisch aufgerufen, wenn der
-	// Beschwoerer angegriffen wird
-	  void InformDefend(object enemy)
-	  { if(!IsEnemy(enemy)&&enemy!=owner)
-	      Kill(enemy);
-	  }
-	Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
-	Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
-	diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
-	uebergeben wird.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	AddDefender(), RemoveDefender(), DefendOther(), Kill(), IsEnemy(),
-	P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+   /std/living/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   enemy
+     Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
+
+
+BESCHREIBUNG
+============
+
+   Es ist moeglich, dass Objekte ueber Angriffe auf Lebewesen
+   informiert werden, sofern diese Objekte bei dem angegriffenen
+   Lebewesen mittels AddDefender() angemeldet wurden und sich der
+   selben Umgebung befinden.
+   Zumeist wird es sich bei den Objekten natuerlich ebenfalls um
+   andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet
+   sind, verteidigen sollen.
+   Bei einem Angriff auf das Lebewesen werden alle Objekte per Aufruf
+   von InformDefend() darueber informiert, wobei der Angreifer als
+   Parameter uebergeben wird.
+   Standardmaessig ist diese Funktion in Lebewesen bereits definiert,
+   wobei der Skill SK_INFORM_DEFEND, sofern vorhanden, aufgerufen wird.
+
+
+BEISPIEL
+========
+
+   Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
+   verteidigen, z.B. beschworene Daemonen:
+     inherit "std/npc";
+     include <properties.h>
+     object owner;
+     void create()
+     { ::create();
+       SetProp(P_NAME,"Daemon");
+       ...
+     }
+   // nach Clonen des Daemons folgende Funktion mit Beschwoerer als
+   // Parameter aufrufen
+     Identify(object caster)
+     { if(!objectp(caster))
+         call_out(#'remove,0);
+       owner=caster;
+       owner->AddDefender(this_object());
+     }
+   // folgende Funktion wird automatisch aufgerufen, wenn der
+   // Beschwoerer angegriffen wird
+     void InformDefend(object enemy)
+     { if(!IsEnemy(enemy)&&enemy!=owner)
+         Kill(enemy);
+     }
+   Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
+   Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
+   diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
+   uebergeben wird.
+
+
+SIEHE AUCH
+==========
+
+   AddDefender(), RemoveDefender(), DefendOther(), Kill(), IsEnemy(),
+   P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+
 Last modified: Thu Jul 29 18:48:45 1999 by Patryn
diff --git a/doc/lfun/InformRowChange b/doc/lfun/InformRowChange
index e2aa8fc..7e7b804 100644
--- a/doc/lfun/InformRowChange
+++ b/doc/lfun/InformRowChange
@@ -1,23 +1,43 @@
+
 InformRowChange()
+*****************
 
-FUNKTION:
-	varargs void InformRowChange(int from, int to, object caster);
 
-DEFINIERT IN:
-	/std/living/team.c
+FUNKTION
+========
 
-ARGUMENTE:
-	from   - Reihe, in die der Spieler vorher war.
-	to     - Reihe in der der Spieler jetzt ist.
-	caster - Der Spieler, falls die Funktion in der Gilde aufgerufen wird.
-        
-BESCHREIBUNG:
-	Diese Funktion wird im Spieler und in seiner Gilde aufgerufen,
-	falls sich die aktuelle Kampfreihe in der Teamaufstellung
-	aendert.
+   varargs void InformRowChange(int from, int to, object caster);
 
-RUECKGABEWERT:
-	Keiner.
 
-SIEHE AUCH:
-	teams
+DEFINIERT IN
+============
+
+   /std/living/team.c
+
+
+ARGUMENTE
+=========
+
+   from   - Reihe, in die der Spieler vorher war.
+   to     - Reihe in der der Spieler jetzt ist.
+   caster - Der Spieler, falls die Funktion in der Gilde aufgerufen wird.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird im Spieler und in seiner Gilde aufgerufen,
+   falls sich die aktuelle Kampfreihe in der Teamaufstellung
+   aendert.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner.
+
+
+SIEHE AUCH
+==========
+
+   teams
diff --git a/doc/lfun/InformUnwear b/doc/lfun/InformUnwear
index 9471028..01e9886 100644
--- a/doc/lfun/InformUnwear
+++ b/doc/lfun/InformUnwear
@@ -1,29 +1,48 @@
-InformUnwear
 
-FUNKTION:
-	protected void InformUnwear(object pl, int silent, int all)
+InformUnwear()
+**************
 
-DEFINIERT IN:
-        /std/clothing/wear.c
 
-ARGUMENTE:
-	pl
-          Das Lebewesen, das die Ruestung ausgezogen hat.
-        silent
-          Flag, ob Meldungen unterdruckt werden sollen.
-        all
-          Flag, ob die Ruestung mit "ziehe alles aus"/
-          "ziehe alle ruestungen aus" ausgezogen wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird aufgerufen, wenn die Ruestung erfolgreich
-        ausgezogen wurde.
+   protected void InformUnwear(object pl, int silent, int all)
 
-RUeCKGABEWERT:
-	keiner
 
-SIEHE AUCH:
-        InformUnwield(), InformWield(), InformWear()
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/clothing/wear.c
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das die Ruestung ausgezogen hat.
+   silent
+     Flag, ob Meldungen unterdruckt werden sollen.
+   all
+     Flag, ob die Ruestung mit "ziehe alles aus"/
+     "ziehe alle ruestungen aus" ausgezogen wurde.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aufgerufen, wenn die Ruestung erfolgreich
+   ausgezogen wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   InformUnwield(), InformWield(), InformWear()
+
 06.10.2007, Zesstra
diff --git a/doc/lfun/InformUnwield b/doc/lfun/InformUnwield
index ef2d9bc..1f10e72 100644
--- a/doc/lfun/InformUnwield
+++ b/doc/lfun/InformUnwield
@@ -1,26 +1,45 @@
-InformUnwield
 
-FUNKTION:
-	protected void InformUnwield(object pl, int silent)
+InformUnwield()
+***************
 
-DEFINIERT IN:
-	/std/weapon/combat.c
 
-ARGUMENTE:
-	pl
-          Das Lebewesen, das die Waffe gezueckt hatte.
-        silent
-          Flag, ob Meldungen unterdruckt werden sollen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird aufgerufen, wenn die Waffe erfolgreich
-        weggesteckt wurde.
+   protected void InformUnwield(object pl, int silent)
 
-RUeCKGABEWERT:
-	keiner
 
-SIEHE AUCH:
-        InformWield(), InformWear(), InformUnwear()
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/weapon/combat.c
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das die Waffe gezueckt hatte.
+   silent
+     Flag, ob Meldungen unterdruckt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aufgerufen, wenn die Waffe erfolgreich
+   weggesteckt wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   InformWield(), InformWear(), InformUnwear()
+
 06.10.2007, Zesstra
diff --git a/doc/lfun/InformWear b/doc/lfun/InformWear
index 4c7c9b4..6860633 100644
--- a/doc/lfun/InformWear
+++ b/doc/lfun/InformWear
@@ -1,29 +1,48 @@
-InformWear
 
-FUNKTION:
-	protected void InformWear(object pl, int silent, int all)
+InformWear()
+************
 
-DEFINIERT IN:
-        /std/clothing/wear.c
 
-ARGUMENTE:
-	pl
-          Das Lebewesen, das die Ruestung angezogen hat.
-        silent
-          Flag, ob Meldungen unterdruckt werden sollen.
-        all
-          Flag, ob die Ruestung mit "trage alles"/"trage alle ruestungen"
-          angezogen wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird aufgerufen, wenn die Ruestung erfolgreich
-        angezogen wurde.
+   protected void InformWear(object pl, int silent, int all)
 
-RUeCKGABEWERT:
-	keiner
 
-SIEHE AUCH:
-        InformUnwield(), InformWield(), InformUnwear()
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/clothing/wear.c
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das die Ruestung angezogen hat.
+   silent
+     Flag, ob Meldungen unterdruckt werden sollen.
+   all
+     Flag, ob die Ruestung mit "trage alles"/"trage alle ruestungen"
+     angezogen wurde.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aufgerufen, wenn die Ruestung erfolgreich
+   angezogen wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   InformUnwield(), InformWield(), InformUnwear()
+
 06.10.2007, Zesstra
diff --git a/doc/lfun/InformWield b/doc/lfun/InformWield
index 67c6b98..0c14c2a 100644
--- a/doc/lfun/InformWield
+++ b/doc/lfun/InformWield
@@ -1,26 +1,45 @@
-InformWield
 
-FUNKTION:
-	protected void InformWield(object pl, int silent)
+InformWield()
+*************
 
-DEFINIERT IN:
-	/std/weapon/combat.c
 
-ARGUMENTE:
-	pl
-          Das Lebewesen, das die Waffe gezueckt hat.
-        silent
-          Flag, ob Meldungen unterdruckt werden sollen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird aufgerufen, wenn die Waffe erfolgreich
-        gezueckt wurde.
+   protected void InformWield(object pl, int silent)
 
-RUeCKGABEWERT:
-	keiner
 
-SIEHE AUCH:
-        InformUnwield(), InformWear(), InformUnwear()
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/weapon/combat.c
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das die Waffe gezueckt hat.
+   silent
+     Flag, ob Meldungen unterdruckt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aufgerufen, wenn die Waffe erfolgreich
+   gezueckt wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   InformUnwield(), InformWear(), InformUnwear()
+
 06.10.2007, Zesstra
diff --git a/doc/lfun/InsertEnemy b/doc/lfun/InsertEnemy
index 03d1d7d..84885db 100644
--- a/doc/lfun/InsertEnemy
+++ b/doc/lfun/InsertEnemy
@@ -1,28 +1,53 @@
+
+InsertEnemy()
+*************
+
 gefunden : lfun/InsertEnemy
 
-FUNKTION:
-        int InsertEnemy(object enemy)
-        
-DEFINIERT IN:
-        /std/living/combat.c
-        
-ARGUMENTE:
-        enemy: Das Lebewesen, das angegriffen werden soll.
-        
-BESCHREIBUNG:
-        Nach Aufruf der Funktion wird das Wesen in die Liste der Feinde
-        aufgenommen.
-        In jedem heart_beat() wird dann ein anwesender Feind
-        angegriffen.
-        
-RUECKGABEWERT:
-        0, falls der Feind nicht existiert, kein Lebewesen ist, ein Geist ist, 
-           oder im Gegner P_NO_ATTACK gesetzt ist, oder schon angegegriffen 
-           wurde
-        1  sonst
-        
-SIEHE AUCH:
-        Kill, IsEnemy, StopHuntFor, P_NO_ATTACK
 
-LETZTE AENDERUNG:
+FUNKTION
+========
+
+   int InsertEnemy(object enemy)
+
+
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   enemy: Das Lebewesen, das angegriffen werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Nach Aufruf der Funktion wird das Wesen in die Liste der Feinde
+   aufgenommen.
+   In jedem heart_beat() wird dann ein anwesender Feind
+   angegriffen.
+
+
+RUECKGABEWERT
+=============
+
+   0, falls der Feind nicht existiert, kein Lebewesen ist, ein Geist ist,
+      oder im Gegner P_NO_ATTACK gesetzt ist, oder schon angegegriffen
+      wurde
+   1  sonst
+
+
+SIEHE AUCH
+==========
+
+   Kill, IsEnemy, StopHuntFor, P_NO_ATTACK
+
+
+LETZTE AENDERUNG
+================
+
 26.08.2010, Zesstra
diff --git a/doc/lfun/InsertEnemyTeam b/doc/lfun/InsertEnemyTeam
index e9ade63..b25843d 100644
--- a/doc/lfun/InsertEnemyTeam
+++ b/doc/lfun/InsertEnemyTeam
@@ -1,46 +1,66 @@
 
 InsertEnemyTeam()
+*****************
 
 
-FUNKTION:
-        varargs void InsertEnemyTeam(mixed ens, int rek)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs void InsertEnemyTeam(mixed ens, int rek)
 
-ARGUMENTE:
-        ens     object Feind oder object *Feinde
-        rek     Wurde von InsertEnemyTeam aufgerufen
 
-BESCHREIBUNG:
-        Alle Teammitglieder des Feindes bzw. die angegebenen Feinde (aber
-        nicht deren Teammitglieder) werden zu Feinden
-         a) des Spielers und aller Teammitglieder, falls rek==0
-         b) des Spielers, falls rek!=0
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        keiner
+   /std/living/team.c
 
-BEMERKUNGEN:
-        1. Nur wenn Gegner und Teammitglied im gleichen Raum stehen (aber
-           nicht notwendigerweise im gleichen Raum wie der Spieler) werden
-           sie zu Feinden.
-        2. Falls Teammitglied und Gegner beides Spieler sind, werden sie
-           nicht zu Feinden gemacht.
-        3. Ist der Gegner im eigenen Team, so wird nichts gemacht.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, SelectNearEnemy,
-                    SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   ens     object Feind oder object *Feinde
+   rek     Wurde von InsertEnemyTeam aufgerufen
+
+
+BESCHREIBUNG
+============
+
+   Alle Teammitglieder des Feindes bzw. die angegebenen Feinde (aber
+   nicht deren Teammitglieder) werden zu Feinden
+    a) des Spielers und aller Teammitglieder, falls rek==0
+    b) des Spielers, falls rek!=0
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   1. Nur wenn Gegner und Teammitglied im gleichen Raum stehen (aber
+      nicht notwendigerweise im gleichen Raum wie der Spieler) werden
+      sie zu Feinden.
+   2. Falls Teammitglied und Gegner beides Spieler sind, werden sie
+      nicht zu Feinden gemacht.
+   3. Ist der Gegner im eigenen Team, so wird nichts gemacht.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, SelectNearEnemy,
+               SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/InsertSensitiveObject b/doc/lfun/InsertSensitiveObject
index c89cef8..534db19 100644
--- a/doc/lfun/InsertSensitiveObject
+++ b/doc/lfun/InsertSensitiveObject
@@ -1,48 +1,68 @@
+
 InsertSensitiveObject()
-FUNKTION:
-     void InsertSensitiveObject(object ob, mixed *arg)
+***********************
 
-DEFINIERT IN:
-     /std/container/inventory.c
-     generalizes /std/living/inventory.c
 
-BESCHREIBUNG:
-     Fuegt "ob" in die Benachrichtigungslisten des Containers ein.
-     Wird von thing/moving.c im Ziel-Environment gerufen, wenn
-     P_SENSITIVE gesetzt ist.
+FUNKTION
+========
 
-BEMERKUNGEN:
-     Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
-     dann muss man auch InsertSensitiveObject() im Environment
-     auch selbst rufen!
+   void InsertSensitiveObject(object ob, mixed *arg)
 
-BEISPIEL:
-     // Fackel (inheriting lightsource)
-     // wenn angezuendet, aendert es die Eigenschaften und wird zum
-     // aktiven Objekt - das muss man dem environment() mitteilen
-     static int light(string str) {
-      int i;
-      i=::light(str);
-      if(i && QueryProp(P_LIGHT)>0) {
-       SetProp(P_SENSITIVE,
-        ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
-       if(environment())
-        environment()->InsertSensitiveObject(this_object(),
-					     QueryProp(P_SENSITIVE));
-      }
-      return i;
-     }
 
-     - falls ein empfindliches Objekt im environment() ist, dann wird
-       in diesem nun eventuell (Treshold) trigger_sensitive_inv()
-       gerufen
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     P_SENSITIVE
-     RemoveSensitiveObject
-     insert_sensitive_inv_trigger, insert_sensitive_inv
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
-     CheckSensitiveAttack
+   /std/container/inventory.c
+   generalizes /std/living/inventory.c
+
+
+BESCHREIBUNG
+============
+
+   Fuegt "ob" in die Benachrichtigungslisten des Containers ein.
+   Wird von thing/moving.c im Ziel-Environment gerufen, wenn
+   P_SENSITIVE gesetzt ist.
+
+
+BEMERKUNGEN
+===========
+
+   Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
+   dann muss man auch InsertSensitiveObject() im Environment
+   auch selbst rufen!
+
+
+BEISPIEL
+========
+
+   // Fackel (inheriting lightsource)
+   // wenn angezuendet, aendert es die Eigenschaften und wird zum
+   // aktiven Objekt - das muss man dem environment() mitteilen
+   static int light(string str) {
+    int i;
+    i=::light(str);
+    if(i && QueryProp(P_LIGHT)>0) {
+     SetProp(P_SENSITIVE,
+      ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
+     if(environment())
+      environment()->InsertSensitiveObject(this_object(),
+                                           QueryProp(P_SENSITIVE));
+    }
+    return i;
+   }
+
+   - falls ein empfindliches Objekt im environment() ist, dann wird
+     in diesem nun eventuell (Treshold) trigger_sensitive_inv()
+     gerufen
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   RemoveSensitiveObject
+   insert_sensitive_inv_trigger, insert_sensitive_inv
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
+   CheckSensitiveAttack
 
 25.Apr.2001, Gloinson@MG
-
diff --git a/doc/lfun/InternalModifyAttack b/doc/lfun/InternalModifyAttack
index 0ac2d19..2d9f3eb 100644
--- a/doc/lfun/InternalModifyAttack
+++ b/doc/lfun/InternalModifyAttack
@@ -1,37 +1,58 @@
+
+InternalModifyAttack()
+**********************
+
+
 InternalModifyAttack(L)
+=======================
 
-FUNKTION:
-     protected void InternalModifyAttack(mapping ainfo)
 
-DEFINIERT IN:
-     /std/living/combat
+FUNKTION
+========
 
-ARGUMENTE:
-     mapping ainfo		Werte aus der Attack
+   protected void InternalModifyAttack(mapping ainfo)
 
-BESCHREIBUNG:
-     Dient dazu noch Aenderungen am Verhalten der Attack() vornehmen zu
-     koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
-     wirken also direkt in der Attack()!
-     Einfach ueberschreiben (aber ::InternalModifyAttack(&ainfo) nicht
-     vergessen!
 
-     Aufbau von 'ainfo':
-     ([ SI_ENEMY :            object Angreifer,			(-> Defend)
-        SI_SPELL :           0/1/array Spellparameter,		(-> Defend)
-        P_WEAPON :           - oder Waffe,
-        SI_SKILLDAMAGE_MSG:  string Angriffsmeldungsende an Raum,
-        SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
-        SI_SKILLDAMAGE:      int Schaden in Zehntel HP (Skills schon drin)
-								(-> Defend),
-        SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen,	(-> Defend)
-        P_WEAPON_TYPE:       string Waffentyp (combat.h),
-        P_WC:		     - oder int WC der Waffe/Hand,
-        P_NR_HANDS:	     - oder int Hands der Waffe/Hand,
-     ]);
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     InternalModifyDefend(L)
-     Attack(L)
+   /std/living/combat
+
+
+ARGUMENTE
+=========
+
+   mapping ainfo              Werte aus der Attack
+
+
+BESCHREIBUNG
+============
+
+   Dient dazu noch Aenderungen am Verhalten der Attack() vornehmen zu
+   koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
+   wirken also direkt in der Attack()!
+   Einfach ueberschreiben (aber ::InternalModifyAttack(&ainfo) nicht
+   vergessen!
+
+   Aufbau von 'ainfo':
+   ([ SI_ENEMY :            object Angreifer,                 (-> Defend)
+      SI_SPELL :           0/1/array Spellparameter,          (-> Defend)
+      P_WEAPON :           - oder Waffe,
+      SI_SKILLDAMAGE_MSG:  string Angriffsmeldungsende an Raum,
+      SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
+      SI_SKILLDAMAGE:      int Schaden in Zehntel HP (Skills schon drin)
+                                                              (-> Defend),
+      SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen,      (-> Defend)
+      P_WEAPON_TYPE:       string Waffentyp (combat.h),
+      P_WC:                - oder int WC der Waffe/Hand,
+      P_NR_HANDS:          - oder int Hands der Waffe/Hand,
+   ]);
+
+
+SIEHE AUCH
+==========
+
+   InternalModifyDefend(L)
+   Attack(L)
 
 28.03.2008, Zesstra
diff --git a/doc/lfun/InternalModifyDefend b/doc/lfun/InternalModifyDefend
index 93f0d39..3015534 100644
--- a/doc/lfun/InternalModifyDefend
+++ b/doc/lfun/InternalModifyDefend
@@ -1,29 +1,50 @@
+
+InternalModifyDefend()
+**********************
+
+
 InternalModifyDefend(L)
+=======================
 
-FUNKTION:
-     protected void InternalModifyDefend(int dam, mixed dt, mixed spell,
-				      object enemy)
 
-DEFINIERT IN:
-     /std/living/combat
+FUNKTION
+========
 
-ARGUMENTE:
-     int dam             Staerke des abzuwehrenden Angriffs (in HP/10)
-     string/string* dt   Art(en) des Schadens, der angerichtet werden soll
-     int/mapping spell   0 fuer normale Angriffe (keine Zauber)
-                         1 fuer Zauber (Standardruestungen ignorieren)
-                         mapping fuer mehr Informationen
-     object enemy        der Feind/Schadenverursacher
+   protected void InternalModifyDefend(int dam, mixed dt, mixed spell,
+                                    object enemy)
 
-BESCHREIBUNG:
-     Dient dazu noch Aenderungen am Verhalten der Defend() vornehmen zu
-     koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
-     wirken also direkt in der Defend()!
-     Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....) nicht
-     vergessen!
 
-SIEHE AUCH:
-     InternalModifyAttack(L)
-     Defend(L)
+DEFINIERT IN
+============
+
+   /std/living/combat
+
+
+ARGUMENTE
+=========
+
+   int dam             Staerke des abzuwehrenden Angriffs (in HP/10)
+   string/string* dt   Art(en) des Schadens, der angerichtet werden soll
+   int/mapping spell   0 fuer normale Angriffe (keine Zauber)
+                       1 fuer Zauber (Standardruestungen ignorieren)
+                       mapping fuer mehr Informationen
+   object enemy        der Feind/Schadenverursacher
+
+
+BESCHREIBUNG
+============
+
+   Dient dazu noch Aenderungen am Verhalten der Defend() vornehmen zu
+   koennen. Die Parameter werden alle per Referenz uebergeben, Aenderungen
+   wirken also direkt in der Defend()!
+   Einfach ueberschreiben, aber ::InternalModifyDefend(&..., &....) nicht
+   vergessen!
+
+
+SIEHE AUCH
+==========
+
+   InternalModifyAttack(L)
+   Defend(L)
 
 28.03.2008, Zesstra
diff --git a/doc/lfun/IsArmour b/doc/lfun/IsArmour
index 8ef812a..a7e5daf 100644
--- a/doc/lfun/IsArmour
+++ b/doc/lfun/IsArmour
@@ -1,32 +1,55 @@
+
 IsArmour()
+**********
 
-FUNKTION:
-    status IsArmour()
 
-DEFINIERT IN:
-    /std/armour/wear.c
+FUNKTION
+========
 
-RUeCKGABEWERT:
-    1 wenn ein Ruestung
-    0 sonst
+   status IsArmour()
 
-BESCHREIBUNG:
-    Gibt 1 zurueck, wenn entsprechende Klasse irgendwo geerbt wurden, es
-    also eine Ruestung ist.
 
-BEMERKUNGEN:
-    Entsprechende Basisklasse ueberschreibt und gibt fuer IsClothing()
-    explizit 0 zurueck.
+DEFINIERT IN
+============
 
-BEISPIEL:
-    // enthaelt im Gegensatz zu P_ARMOURS auch nichtgetragenen Kram
-    // im Inventory L1
-    object *allarmours =
-      filter_objects(all_inventory(this_player()), "IsArmour")
+   /std/armour/wear.c
 
-SIEHE AUCH:
-    Aehnlich: living, interactive
-    Aehnlich: IsBottle, IsClothing, IsPlayerCorpse, IsRoom, IsUnit
-    Props:    P_ARMOURS
+
+RUeCKGABEWERT
+=============
+
+   1 wenn ein Ruestung
+   0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn entsprechende Klasse irgendwo geerbt wurden, es
+   also eine Ruestung ist.
+
+
+BEMERKUNGEN
+===========
+
+   Entsprechende Basisklasse ueberschreibt und gibt fuer IsClothing()
+   explizit 0 zurueck.
+
+
+BEISPIEL
+========
+
+   // enthaelt im Gegensatz zu P_ARMOURS auch nichtgetragenen Kram
+   // im Inventory L1
+   object *allarmours =
+     filter_objects(all_inventory(this_player()), "IsArmour")
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich: living, interactive
+   Aehnlich: IsBottle, IsClothing, IsPlayerCorpse, IsRoom, IsUnit
+   Props:    P_ARMOURS
 
 3. Sep 2016, Gloinson
diff --git a/doc/lfun/IsBottle b/doc/lfun/IsBottle
index 8ac0c96..08f0125 100644
--- a/doc/lfun/IsBottle
+++ b/doc/lfun/IsBottle
@@ -1,21 +1,42 @@
+
+IsBottle()
+**********
+
+
 IsPlayerCorpse
+==============
 
-FUNKTION:
-    int IsBottle()
 
-DEFINIERT IN:
-    /std/items/flasche.c
+FUNKTION
+========
 
-RUeCKGABEWERT:
-    1 wenn Flasche
-    0 sonst
+   int IsBottle()
 
-BESCHREIBUNG:
-    Gibt 1 zurueck, wenn das eine Flasche mit ordentlichem Flaschenverhalten
-    ist.
 
-SIEHE AUCH:
-    Aehnlich: living, interactive
-    Aehnlich: IsArmour, IsClothing, IsPlayerCorpse, IsRoom, IsUnit
+DEFINIERT IN
+============
+
+   /std/items/flasche.c
+
+
+RUeCKGABEWERT
+=============
+
+   1 wenn Flasche
+   0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn das eine Flasche mit ordentlichem Flaschenverhalten
+   ist.
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich: living, interactive
+   Aehnlich: IsArmour, IsClothing, IsPlayerCorpse, IsRoom, IsUnit
 
 3. Sep 2016, Gloinson
diff --git a/doc/lfun/IsClothing b/doc/lfun/IsClothing
index 843e18d..c51f3f6 100644
--- a/doc/lfun/IsClothing
+++ b/doc/lfun/IsClothing
@@ -1,29 +1,49 @@
+
 IsClothing()
+************
 
-FUNKTION:
-    status IsClothing()
 
-DEFINIERT IN:
-    /std/clothing.c
-    /std/clothing_container.c
+FUNKTION
+========
 
-RUeCKGABEWERT:
-    1 wenn ein Kleidungsstueck
-    0 sonst
+   status IsClothing()
 
-BESCHREIBUNG:
-    Gibt 1 zurueck, wenn entsprechende Klassen irgendwo geerbt wurden, es
-    also ein Kleidungsstueck (oder ein Kleidungsstueck mit Taschen) ist.
 
-BEISPIEL:
-    // enthaelt im Gegensatz zu P_CLOTHING auch nichtgetragenen Kram
-    // im Inventory L1
-    object *allcloth =
-      filter_objects(all_inventory(this_player()), "IsClothing")
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    Aehnlich: living, interactive
-    Aehnlich: IsArmour, IsBottle, IsPlayerCorpse, IsRoom, IsUnit
-    Props:    P_CLOTHING
+   /std/clothing.c
+   /std/clothing_container.c
+
+
+RUeCKGABEWERT
+=============
+
+   1 wenn ein Kleidungsstueck
+   0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn entsprechende Klassen irgendwo geerbt wurden, es
+   also ein Kleidungsstueck (oder ein Kleidungsstueck mit Taschen) ist.
+
+
+BEISPIEL
+========
+
+   // enthaelt im Gegensatz zu P_CLOTHING auch nichtgetragenen Kram
+   // im Inventory L1
+   object *allcloth =
+     filter_objects(all_inventory(this_player()), "IsClothing")
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich: living, interactive
+   Aehnlich: IsArmour, IsBottle, IsPlayerCorpse, IsRoom, IsUnit
+   Props:    P_CLOTHING
 
 3. Sep 2016, Gloinson
diff --git a/doc/lfun/IsEnemy b/doc/lfun/IsEnemy
index c406cd5..45fb1fc 100644
--- a/doc/lfun/IsEnemy
+++ b/doc/lfun/IsEnemy
@@ -1,31 +1,50 @@
+
 IsEnemy()
+*********
 
-FUNKTION:
-	int IsEnemy(object wer);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wer
-	  Das Objekt, welches darauf ueberprueft werden soll, ob es
-	  derzeit als Gegner bekannt ist.
+   int IsEnemy(object wer);
 
-RUeCKGABEWERT:
-	Flag: 1 bei Feindschaft, 0 sonst
 
-BESCHREIBUNG:
-	Mit dieser Funktion kann man ueberpruefen, ob das Objekt <wer>, also
-	im Normalfall ein Lebewesen, derzeit als Gegner erkannt wird. Nach
-	einer gewissen Zeit laeuft die Feindschaft automatisch aus, sodass
-	man sich nicht darauf verlassen, dass ein Gegner auch zukuenftig als
-	solchiger erkannt wird. (Diese Zeit betraegt normal 300 Sekunden.)
-	Solch eine Feindschaft kann im uebrigen auch einseitig sein! Mehr
-	dazu findet man in der Dokumentation zu StopHuntFor(), einer
-	Funktion, die Frieden zwischen Gegnern stiften soll.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	SelectEnemy(), QueryEnemies(), StopHuntFor()
+   /std/living/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   wer
+     Das Objekt, welches darauf ueberprueft werden soll, ob es
+     derzeit als Gegner bekannt ist.
+
+
+RUeCKGABEWERT
+=============
+
+   Flag: 1 bei Feindschaft, 0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann man ueberpruefen, ob das Objekt <wer>, also
+   im Normalfall ein Lebewesen, derzeit als Gegner erkannt wird. Nach
+   einer gewissen Zeit laeuft die Feindschaft automatisch aus, sodass
+   man sich nicht darauf verlassen, dass ein Gegner auch zukuenftig als
+   solchiger erkannt wird. (Diese Zeit betraegt normal 300 Sekunden.)
+   Solch eine Feindschaft kann im uebrigen auch einseitig sein! Mehr
+   dazu findet man in der Dokumentation zu StopHuntFor(), einer
+   Funktion, die Frieden zwischen Gegnern stiften soll.
+
+
+SIEHE AUCH
+==========
+
+   SelectEnemy(), QueryEnemies(), StopHuntFor()
+
 Last modified: Wed May 26 16:47:51 1999 by Patryn
diff --git a/doc/lfun/IsEqual b/doc/lfun/IsEqual
index 806661e..34d142f 100644
--- a/doc/lfun/IsEqual
+++ b/doc/lfun/IsEqual
@@ -1,39 +1,58 @@
+
 IsEqual()
+*********
+
 
 FUNKTION
-    int IsEqual(object ob)
+========
 
-DEFINIERT IN:
-    /std/unit.c
+   int IsEqual(object ob)
 
-ARGUMENTE:
-    ob      Das Objekt das geprueft werden soll.
 
-BESCHREIBUNG:                                                               
-    Diese Funktion prueft ob zwei Objekte vom gleichen Typ sind, also ob
-    z.B. ob und this_object() beides Muenzen sind oder beides Edelsteine.
-    Bei einem Ergebnis != 0 fasst unit.c diese zwei Objekte automatisch
-    zusammen, wenn ob->IsEqual(this_object()) auch einen Wert != 0 ergibt.
-    Hierbei wird das IsEqual() von beiden beteiligten Objekten gerufen und sie
-    muessen uebereinstimmen, dass sie eigentlich das gleiche Objekt sind.
-    Selbstverstaendlich ist diese Funktion nur im Falle von Unitobjekten
-    sinnvoll.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    0 - this_object() ist nicht vom selben Typ wie ob
-    1 - this_object() ist vom gleichen Typ wie ob
+   /std/unit.c
 
-BEISPIELE:
-    o Ein Unitobjekt das verschiedene Beschreibungen haben kann...
 
-       int IsEqual(object ob)
-       {
-          if (!(int)::IsEqual(ob)) return 0;
-          return (QueryProp(P_SHORT)==ob->QueryProp(P_SHORT));
-       }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    /std/unit.c
-------------------------------------------------------------------------------
+   ob      Das Objekt das geprueft werden soll.
+
+BESCHREIBUNG:
+   Diese Funktion prueft ob zwei Objekte vom gleichen Typ sind, also
+   ob z.B. ob und this_object() beides Muenzen sind oder beides
+   Edelsteine. Bei einem Ergebnis != 0 fasst unit.c diese zwei Objekte
+   automatisch zusammen, wenn ob->IsEqual(this_object()) auch einen
+   Wert != 0 ergibt. Hierbei wird das IsEqual() von beiden beteiligten
+   Objekten gerufen und sie muessen uebereinstimmen, dass sie
+   eigentlich das gleiche Objekt sind. Selbstverstaendlich ist diese
+   Funktion nur im Falle von Unitobjekten sinnvoll.
+
+
+RUeCKGABEWERT
+=============
+
+   0 - this_object() ist nicht vom selben Typ wie ob
+   1 - this_object() ist vom gleichen Typ wie ob
+
+
+BEISPIELE
+=========
+
+   o Ein Unitobjekt das verschiedene Beschreibungen haben kann...
+
+      int IsEqual(object ob)
+      {
+         if (!(int)::IsEqual(ob)) return 0;
+         return (QueryProp(P_SHORT)==ob->QueryProp(P_SHORT));
+      }
+
+
+SIEHE AUCH
+==========
+
+   /std/unit.c
+
 25.01.2015, Zesstra
-
diff --git a/doc/lfun/IsPlayerCorpse b/doc/lfun/IsPlayerCorpse
index a92a830..3cccc05 100644
--- a/doc/lfun/IsPlayerCorpse
+++ b/doc/lfun/IsPlayerCorpse
@@ -1,21 +1,38 @@
-IsPlayerCorpse
 
-FUNKTION:
-    public int IsPlayerCorpse()
+IsPlayerCorpse()
+****************
 
-DEFINIERT IN:
-    /std/corpse.c
 
-RUeCKGABEWERT:
-    1 wenn Spielerleiche
-    0 sonst
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Gibt 1 zurueck, wenn diese Leiche eine Spielerleiche ist. Es kann auch
-    eine "normale" NPC-Leiche sein.
+   public int IsPlayerCorpse()
 
-SIEHE AUCH:
-    Aehnlich: living, interactive
-    Aehnlich: IsArmour, IsBottle, IsClothing, IsRoom, IsUnit
+
+DEFINIERT IN
+============
+
+   /std/corpse.c
+
+
+RUeCKGABEWERT
+=============
+
+   1 wenn Spielerleiche
+   0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn diese Leiche eine Spielerleiche ist. Es kann auch
+   eine "normale" NPC-Leiche sein.
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich: living, interactive
+   Aehnlich: IsArmour, IsBottle, IsClothing, IsRoom, IsUnit
 
 3. Sep 2016, Gloinson
diff --git a/doc/lfun/IsRoom b/doc/lfun/IsRoom
index d595ed0..61ce904 100644
--- a/doc/lfun/IsRoom
+++ b/doc/lfun/IsRoom
@@ -1,21 +1,38 @@
+
 IsRoom()
+********
 
-FUNKTION:
-    status IsRoom()
 
-DEFINIERT IN:
-    /std/room.c
+FUNKTION
+========
 
-RUeCKGABEWERT:
-    1 wenn ein Raum
-    0 sonst
+   status IsRoom()
 
-BESCHREIBUNG:
-    Gibt 1 zurueck, wenn /std/room.c irgendwo geerbt wurde, es also ein
-    Raum ist.
 
-SIEHE AUCH:
-    Aehnlich: living, interactive
-    Aehnlich: IsArmour, IsBottle, IsClothing, IsPlayerCorpse, IsUnit
+DEFINIERT IN
+============
+
+   /std/room.c
+
+
+RUeCKGABEWERT
+=============
+
+   1 wenn ein Raum
+   0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Gibt 1 zurueck, wenn /std/room.c irgendwo geerbt wurde, es also ein
+   Raum ist.
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich: living, interactive
+   Aehnlich: IsArmour, IsBottle, IsClothing, IsPlayerCorpse, IsUnit
 
 3. Sep 2016, Gloinson
diff --git a/doc/lfun/IsTeamLeader b/doc/lfun/IsTeamLeader
index eaa008f..1880cc9 100644
--- a/doc/lfun/IsTeamLeader
+++ b/doc/lfun/IsTeamLeader
@@ -1,48 +1,68 @@
 
 IsTeamLeader()
+**************
 
 
-FUNKTION:
-        object IsTeamLeader()
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   object IsTeamLeader()
 
-ARGUMENTE:
-        keine
 
-BESCHREIBUNG:
-        Testet, ob der Spieler ein Teamleiter ist.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Falls der Spieler Teamleiter ist, wird das Teamobjekt zurueckgegeben,
-        sonst 0.
+   /std/living/team.c
 
-BEISPIEL:
-        string leader_test(object pl)
-        {
-         ...
 
-         if ( objectp(pl->IsTeamLeader()) )
-          return "Als Leiter eines Teams hast Du grosse Verantwortung zu "
-            "tragen!";
-         else
-          return "Wenn Du mal Leiter eines Teams sein moechtes, solltest "
-            "Du Dir vorher der Verantwortung bewusst werden!";
-        }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+   keine
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Testet, ob der Spieler ein Teamleiter ist.
+
+
+RUECKGABEWERT
+=============
+
+   Falls der Spieler Teamleiter ist, wird das Teamobjekt zurueckgegeben,
+   sonst 0.
+
+
+BEISPIEL
+========
+
+   string leader_test(object pl)
+   {
+    ...
+
+    if ( objectp(pl->IsTeamLeader()) )
+     return "Als Leiter eines Teams hast Du grosse Verantwortung zu "
+       "tragen!";
+    else
+     return "Wenn Du mal Leiter eines Teams sein moechtes, solltest "
+       "Du Dir vorher der Verantwortung bewusst werden!";
+   }
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/IsTeamMove b/doc/lfun/IsTeamMove
index 844b041..584dc13 100644
--- a/doc/lfun/IsTeamMove
+++ b/doc/lfun/IsTeamMove
@@ -1,40 +1,60 @@
 
 IsTeamMove()
+************
 
 
-FUNKTION:
-        object IsTeamMove()
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   object IsTeamMove()
 
-ARGUMENTE:
-        keine
 
-BESCHREIBUNG:
-        Testet, ob momentan die Angriffsbewegung ausgefuehrt wird.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Falls die Angriffsbewegung gerade ausgefuehrt wird, wird das
-        Teamobjekt zurueckgegeben, sonst 0.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Wird intern benoetigt, damit der Begruessungsschlag verzoegert
-        werden kann, bis alle Teammitglieder ihre Angriffsbewegung
-        ausgefuehrt haben.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Testet, ob momentan die Angriffsbewegung ausgefuehrt wird.
+
+
+RUECKGABEWERT
+=============
+
+   Falls die Angriffsbewegung gerade ausgefuehrt wird, wird das
+   Teamobjekt zurueckgegeben, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Wird intern benoetigt, damit der Begruessungsschlag verzoegert
+   werden kann, bis alle Teammitglieder ihre Angriffsbewegung
+   ausgefuehrt haben.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/IsUnit b/doc/lfun/IsUnit
index bce8ab0..230f09e 100644
--- a/doc/lfun/IsUnit
+++ b/doc/lfun/IsUnit
@@ -1,23 +1,42 @@
+
 IsUnit()
+********
 
-FUNKTION:
-     int IsUnit();
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int IsUnit();
 
-BESCHREIBUNG:
-     Diese Funktion liefert immer 1 zurueck und zeigt damit an, dass es sich
-     bei diesem Objekt um ein Mengenobjekt handelt.
 
-RUeCKGABEWERT:
-     1 bei allen Objekten, die /std/unit.c erben, ansonsten 0.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     /std/unit.c
+   /std/unit.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert immer 1 zurueck und zeigt damit an, dass es sich
+   bei diesem Objekt um ein Mengenobjekt handelt.
+
+
+RUeCKGABEWERT
+=============
+
+   1 bei allen Objekten, die /std/unit.c erben, ansonsten 0.
+
+
+SIEHE AUCH
+==========
+
+   /std/unit.c
+
 Last modified: Wed May 8 10:20:19 1996 by Wargon
diff --git a/doc/lfun/Kill b/doc/lfun/Kill
index a8e4540..1125345 100644
--- a/doc/lfun/Kill
+++ b/doc/lfun/Kill
@@ -1,24 +1,43 @@
+
 Kill()
+******
 
-FUNKTION:
-	int Kill(object enemy)
 
-ARGUMENTE:
-	enemy: Der boese, boese Feind.
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Nach Aufruf der Funktion wird der Feind in jedem
-	heart_beat() attackiert.
+   int Kill(object enemy)
 
-RUECKGABEWERT:
-	0,  Falls der Feind nicht existiert
-  -1, falls der Feind ein Geist ist
-  -2, falls der Feind P_NO_ATTACK gesetzt hat
-  -3, falls der Angreifer selber P_NO_ATTACK gesetzt hat
-  -4, falls der Feind bereits angegriffen wurde
-	1   falls der Feind erfolgreich als Find registriert wurde.
 
-BEMERKUNGEN:
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-	InsertEnemy
+   enemy: Der boese, boese Feind.
+
+
+BESCHREIBUNG
+============
+
+   Nach Aufruf der Funktion wird der Feind in jedem
+   heart_beat() attackiert.
+
+
+RUECKGABEWERT
+=============
+
+         0,  Falls der Feind nicht existiert
+   -1, falls der Feind ein Geist ist
+   -2, falls der Feind P_NO_ATTACK gesetzt hat
+   -3, falls der Angreifer selber P_NO_ATTACK gesetzt hat
+   -4, falls der Feind bereits angegriffen wurde
+         1   falls der Feind erfolgreich als Find registriert wurde.
+
+
+BEMERKUNGEN
+===========
+
+
+SIEHE AUCH
+==========
+
+   InsertEnemy
diff --git a/doc/lfun/LearnSkill b/doc/lfun/LearnSkill
index 6373fbb..caab276 100644
--- a/doc/lfun/LearnSkill
+++ b/doc/lfun/LearnSkill
@@ -1,35 +1,53 @@
+
 LearnSkill()
-FUNKTION:
-    public varargs void LearnSkill(string sname, int add, int diff)
+************
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    string sname     der zu lernende Skill
-    string add       Anzahl zu lernender Skillpunkte
-    int diff         Schwierigkeit
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Die Methode laesst einen interaktiven (eingeloggten) Spieler den
-    Skill 'sname' um 'add' Punkte lernen.
+   public varargs void LearnSkill(string sname, int add, int diff)
 
-    Dabei wird sichergestellt, dass 'add' den Wert MAX_SKILLEARN nicht
-    ueberschreitet, der Skill nicht verschwindet und fuer uebergeordnete
-    Skills (SI_INHERIT) dieser uebergeordnete Skill auch einen Lerneffekt
-    erfaehrt.
 
-    Wird zB von Learn (spellbook) und SpellSuccess (spellbook) gerufen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    Skills Lernen:  ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung
-    * Properties:   P_NEWSKILLS
-    Spellbook:      Learn, SpellSuccess
+   /std/living/skills.c
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   string sname     der zu lernende Skill
+   string add       Anzahl zu lernender Skillpunkte
+   int diff         Schwierigkeit
+
+
+BESCHREIBUNG
+============
+
+   Die Methode laesst einen interaktiven (eingeloggten) Spieler den
+   Skill 'sname' um 'add' Punkte lernen.
+
+   Dabei wird sichergestellt, dass 'add' den Wert MAX_SKILLEARN nicht
+   ueberschreitet, der Skill nicht verschwindet und fuer uebergeordnete
+   Skills (SI_INHERIT) dieser uebergeordnete Skill auch einen Lerneffekt
+   erfaehrt.
+
+   Wird zB von Learn (spellbook) und SpellSuccess (spellbook) gerufen.
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung
+   * Properties:   P_NEWSKILLS
+   Spellbook:      Learn, SpellSuccess
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/Leave b/doc/lfun/Leave
index b3b52d2..fef5e6f 100644
--- a/doc/lfun/Leave
+++ b/doc/lfun/Leave
@@ -1,40 +1,64 @@
+
 Leave()
+*******
 
-FUNKTION:
-     int Leave();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int Leave();
 
-BESCHREIBUNG:
-     Wenn sich der Spieler auf einem Transporter befindet, und dieser sich
-     momentan an einer Haltestelle liegt, verlaesst der Spieler den
-     Transporter.
 
-RUeCKGABEWERT:
-     Null, wenn der Spieler den Transporter nicht verlassen konnte, sonst
-     ungleich Null.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Es werden keine Tests durchgefuehrt, ob der Transporter ueberhaupt
-     angesprochen wurde! Das muss man selber machen.
+   /std/transport.c
 
-BEISPIELE:
 
-     int myLeave(string str)
-     {
-       if (str && id(str))
-         return Leave();
+ARGUMENTE
+=========
 
-       notify_fail("Was willst Du verlassen?\n");
-       return 0;
-     }
+   keine
 
-SIEHE AUCH:
-     Enter(), /std/transport.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Wenn sich der Spieler auf einem Transporter befindet, und dieser sich
+   momentan an einer Haltestelle liegt, verlaesst der Spieler den
+   Transporter.
+
+
+RUeCKGABEWERT
+=============
+
+   Null, wenn der Spieler den Transporter nicht verlassen konnte, sonst
+   ungleich Null.
+
+
+BEMERKUNGEN
+===========
+
+   Es werden keine Tests durchgefuehrt, ob der Transporter ueberhaupt
+   angesprochen wurde! Das muss man selber machen.
+
+
+BEISPIELE
+=========
+
+   int myLeave(string str)
+   {
+     if (str && id(str))
+       return Leave();
+
+     notify_fail("Was willst Du verlassen?\n");
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Enter(), /std/transport.c
+
 Last modified: Wed May 8 10:20:30 1996 by Wargon
diff --git a/doc/lfun/LimitAbility b/doc/lfun/LimitAbility
index e6a2810..6c31eed 100644
--- a/doc/lfun/LimitAbility
+++ b/doc/lfun/LimitAbility
@@ -1,47 +1,67 @@
+
 LimitAbility()
-FUNKTION:
-    protected varargs mixed LimitAbility(mixed sinfo, int diff)
+**************
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    mixed sinfo      Skill-Informationen
-    int diff         Schwierigkeit
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Setzt ein Maximum an Skillfertigkeit basierend auf der Schwierigkeit
-    und dem P_LEVEL des Spielers.
-    
-    Folgend eine Kopie (!) der Tabelle aus /std/living/skills:
-    diff|lvl 1:|   3:|   7:| 10:| 13:| 16:| 19:| 22:| 25:| 28:| 31:| 34:|
-    ----+------+-----+-----+----+----+----+----+----+----+----+----+----+
-     -50|   83%|  84%|  86%| 87%| 89%| 90%| 92%| 93%| 95%| 96%| 98%| 99%|
-     -10|   69%|  72%|  74%| 77%| 80%| 82%| 85%| 88%| 91%| 93%| 96%| 99%|
-       0|   66%|  69%|  72%| 75%| 78%| 81%| 84%| 87%| 90%| 93%| 96%| 99%|
-      10|   62%|  65%|  69%| 72%| 75%| 79%| 82%| 85%| 89%| 92%| 95%| 98%|
-      20|   59%|  62%|  66%| 70%| 73%| 77%| 80%| 84%| 88%| 91%| 95%| 98%|
-      30|   55%|  59%|  63%| 67%| 71%| 75%| 79%| 83%| 87%| 90%| 94%| 98%|
-      40|   52%|  56%|  60%| 65%| 69%| 73%| 77%| 81%| 86%| 90%| 94%| 98%|
-      50|   49%|  53%|  58%| 62%| 67%| 71%| 76%| 80%| 85%| 89%| 94%| 98%|
-     100|   32%|  38%|  44%| 50%| 56%| 62%| 68%| 74%| 80%| 86%| 92%| 98%|
-     150|   15%|  22%|  30%| 37%| 45%| 52%| 60%| 67%| 75%| 82%| 90%| 97%|
-     200|   -2%|   7%|  16%| 25%| 34%| 43%| 52%| 61%| 70%| 79%| 88%| 97%|
-     250|  -19%|  -8%|   2%| 12%| 23%| 33%| 44%| 54%| 65%| 75%| 86%| 96%|
-     300|  -36%| -24%| -12%|  0%| 12%| 24%| 36%| 48%| 60%| 72%| 84%| 96%|
-     400|  -70%| -55%| -40%|-25%|-10%|  5%| 20%| 35%| 50%| 65%| 80%| 95%|
-     500| -104%| -86%| -68%|-50%|-32%|-14%|  4%| 22%| 40%| 58%| 76%| 94%|
-     600| -138%|-117%| -96%|-75%|-54%|-33%|-12%|  9%| 30%| 51%| 72%| 93%|
+   protected varargs mixed LimitAbility(mixed sinfo, int diff)
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung
-    * Properties:   P_NEWSKILLS
-    Spellbook:      Learn, SpellSuccess
+
+DEFINIERT IN
+============
+
+   /std/living/skills.c
+
+
+ARGUMENTE
+=========
+
+   mixed sinfo      Skill-Informationen
+   int diff         Schwierigkeit
+
+
+BESCHREIBUNG
+============
+
+   Setzt ein Maximum an Skillfertigkeit basierend auf der Schwierigkeit
+   und dem P_LEVEL des Spielers.
+
+
+
+   Folgend eine Kopie (!) der Tabelle aus /std/living/skills:
+   diff|lvl 1:|   3:|   7:| 10:| 13:| 16:| 19:| 22:| 25:| 28:| 31:| 34:|
+   ----+------+-----+-----+----+----+----+----+----+----+----+----+----+
+    -50|   83%|  84%|  86%| 87%| 89%| 90%| 92%| 93%| 95%| 96%| 98%| 99%|
+    -10|   69%|  72%|  74%| 77%| 80%| 82%| 85%| 88%| 91%| 93%| 96%| 99%|
+      0|   66%|  69%|  72%| 75%| 78%| 81%| 84%| 87%| 90%| 93%| 96%| 99%|
+     10|   62%|  65%|  69%| 72%| 75%| 79%| 82%| 85%| 89%| 92%| 95%| 98%|
+     20|   59%|  62%|  66%| 70%| 73%| 77%| 80%| 84%| 88%| 91%| 95%| 98%|
+     30|   55%|  59%|  63%| 67%| 71%| 75%| 79%| 83%| 87%| 90%| 94%| 98%|
+     40|   52%|  56%|  60%| 65%| 69%| 73%| 77%| 81%| 86%| 90%| 94%| 98%|
+     50|   49%|  53%|  58%| 62%| 67%| 71%| 76%| 80%| 85%| 89%| 94%| 98%|
+    100|   32%|  38%|  44%| 50%| 56%| 62%| 68%| 74%| 80%| 86%| 92%| 98%|
+    150|   15%|  22%|  30%| 37%| 45%| 52%| 60%| 67%| 75%| 82%| 90%| 97%|
+    200|   -2%|   7%|  16%| 25%| 34%| 43%| 52%| 61%| 70%| 79%| 88%| 97%|
+    250|  -19%|  -8%|   2%| 12%| 23%| 33%| 44%| 54%| 65%| 75%| 86%| 96%|
+    300|  -36%| -24%| -12%|  0%| 12%| 24%| 36%| 48%| 60%| 72%| 84%| 96%|
+    400|  -70%| -55%| -40%|-25%|-10%|  5%| 20%| 35%| 50%| 65%| 80%| 95%|
+    500| -104%| -86%| -68%|-50%|-32%|-14%|  4%| 22%| 40%| 58%| 76%| 94%|
+    600| -138%|-117%| -96%|-75%|-54%|-33%|-12%|  9%| 30%| 51%| 72%| 93%|
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung
+   * Properties:   P_NEWSKILLS
+   Spellbook:      Learn, SpellSuccess
 
 3. Okt 2011 Gloinson
diff --git a/doc/lfun/MaterialGroup b/doc/lfun/MaterialGroup
index da51cad..1b4e61e 100644
--- a/doc/lfun/MaterialGroup
+++ b/doc/lfun/MaterialGroup
@@ -1,37 +1,64 @@
+
 MaterialGroup()
-FUNKTION:
-     int MaterialGroup(mapping mats, string grp)
+***************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     mapping mats - Materialienmapping
-     string grp   - Materialiengruppe
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die Materialien im Mapping werden auf Zugehoerigkeit zu der Gruppe
-     untersucht und der Gesamtanteil dieser Materialiengruppe am Mapping
-     in Prozent zurueckgegeben (wenn das Mapping sich auf 100% aufaddiert).
+   int MaterialGroup(mapping mats, string grp)
 
-RUECKGABEWERT:
-     int - prozentualer Anteil der Materialiengruppe -100 ... 100 %
 
-BEISPIELE:
-     if(MATERIALDB->MaterialGroup(
-		([MAT_MISC_STONE:40,MAT_AMETHYST:50,MAT_MISC_METAL:10]),
-		MATGROUP_JEWEL)>50)
-      write("Oh ja, darin sind sehr viele Edelsteine!\n");
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wird von /std/thing/description::QueryMaterialGroup() gerufen.
-     Bitte an Objekten auch QueryMaterialGroup() verwenden.
+   /p/daemon/materialdb.c (MATERIALDB)
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Master:	  AddMaterial(), ConvMaterialList()
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   mapping mats - Materialienmapping
+   string grp   - Materialiengruppe
+
+
+BESCHREIBUNG
+============
+
+   Die Materialien im Mapping werden auf Zugehoerigkeit zu der Gruppe
+   untersucht und der Gesamtanteil dieser Materialiengruppe am Mapping
+   in Prozent zurueckgegeben (wenn das Mapping sich auf 100% aufaddiert).
+
+
+RUECKGABEWERT
+=============
+
+   int - prozentualer Anteil der Materialiengruppe -100 ... 100 %
+
+
+BEISPIELE
+=========
+
+   if(MATERIALDB->MaterialGroup(
+              ([MAT_MISC_STONE:40,MAT_AMETHYST:50,MAT_MISC_METAL:10]),
+              MATGROUP_JEWEL)>50)
+    write("Oh ja, darin sind sehr viele Edelsteine!\n");
+
+
+BEMERKUNGEN
+===========
+
+   Wird von /std/thing/description::QueryMaterialGroup() gerufen.
+   Bitte an Objekten auch QueryMaterialGroup() verwenden.
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Master:      AddMaterial(), ConvMaterialList()
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/MaterialList b/doc/lfun/MaterialList
index 17ef526..228f7a8 100644
--- a/doc/lfun/MaterialList
+++ b/doc/lfun/MaterialList
@@ -1,65 +1,96 @@
+
+MaterialList()
+**************
+
+
 MaterialList(L)
-FUNKTION:
-     varargs string MaterialList(int casus, mixed idinf)
+===============
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     int casus	 - der Fall, in dem die Materialien dekliniert werden sollen
-     mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen:
-		   Einzelne Werte:
-                   * x: allgemeine Erkennung -100 ... 100
-                   * who: der Spieler - P_MATERIAL_KNOWLEDGE wird abgefragt
-                   * fun: wird evaluiert
-                   * what, kann folgendes enthalten:
-                     - Eintrag fuer Materialien ([MAT_XXX:-100...100])
-                     - Eintrag fuer Materialiengruppen (dito)
-                     - ([MATERIAL_SYMMETRIC_RECOGNIZABILITY: mixed mg])
-                       * mg ein Array:
-                         ({MATGROUP_X1,int z1, MATGROUP_X2, int z2, ...})
-                         wobei bei Zugehoerigkeit von string mat zu Gruppe
-                         z<n> auf die Faehigkeit addiert, andernfalls davon
-                         subtrahiert wird
-		   Array mit obigen Werten:
-                   - alle Parameter des Arrays sind optional und additiv
-                   - ({int x, object who, mapping what, closure fun})
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Listet die Materialien auf, aus denen ein Objekt besteht.
-     Dabei haengt die Genauigkeit der Materialerkennung von idinf ab. D.h.
-     je nach den Faehigkeiten/der angegebenen Faehigkeit wird zB Wolfram
-     als "Wolfram" oder nur als "Metall" erkannt.
+   varargs string MaterialList(int casus, mixed idinf)
 
-     Wenn ein Spieler etwas identifiziert, sollte auch TP uebergeben werden,
-     bei NPCs koennte das anders aussehen.
 
-RUECKGABEWERT:
-     String mit Liste der Materialien.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - es werden nur die Materialien angegeben, nicht die Menge.
-     - ruft ConvMaterialList() an der MATERIALDB
+   /std/thing/description.c
 
-BEISPIELE:
-     // simpel
-     write("Der Gegenstand besteht aus"+ob->MaterialList(WEM,TP)+".\n")
-     // -> "Der Gegenstand besteht aus Gold, Silber und Rubin.\n"
 
-     // komplexer
-     ob->SetProp(P_MATERIAL, ([P_NITROGLYCERINE:90,P_GUNPOWDER:10]));
-     write("Das enthaelt "+ob->MaterialList(WER,TP)+".\n");
-     // -> "Das enthaelt Schwarzpulver und Nitroglycerin."
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Methoden:    QueryMaterial(), QueryMaterialGroup()
-     Listen:	  AllMaterials(), AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
-     Sonstiges:	  P_MATERIAL_KNOWLEDGE
+   int casus   - der Fall, in dem die Materialien dekliniert werden sollen
+   mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen:
+                 Einzelne Werte:
+                 * x: allgemeine Erkennung -100 ... 100
+                 * who: der Spieler - P_MATERIAL_KNOWLEDGE wird abgefragt
+                 * fun: wird evaluiert
+                 * what, kann folgendes enthalten:
+                   - Eintrag fuer Materialien ([MAT_XXX:-100...100])
+                   - Eintrag fuer Materialiengruppen (dito)
+                   - ([MATERIAL_SYMMETRIC_RECOGNIZABILITY: mixed mg])
+                     * mg ein Array:
+                       ({MATGROUP_X1,int z1, MATGROUP_X2, int z2, ...})
+                       wobei bei Zugehoerigkeit von string mat zu Gruppe
+                       z<n> auf die Faehigkeit addiert, andernfalls davon
+                       subtrahiert wird
+                 Array mit obigen Werten:
+                 - alle Parameter des Arrays sind optional und additiv
+                 - ({int x, object who, mapping what, closure fun})
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Listet die Materialien auf, aus denen ein Objekt besteht.
+   Dabei haengt die Genauigkeit der Materialerkennung von idinf ab. D.h.
+   je nach den Faehigkeiten/der angegebenen Faehigkeit wird zB Wolfram
+   als "Wolfram" oder nur als "Metall" erkannt.
+
+   Wenn ein Spieler etwas identifiziert, sollte auch TP uebergeben werden,
+   bei NPCs koennte das anders aussehen.
+
+
+RUECKGABEWERT
+=============
+
+   String mit Liste der Materialien.
+
+
+BEMERKUNGEN
+===========
+
+   - es werden nur die Materialien angegeben, nicht die Menge.
+   - ruft ConvMaterialList() an der MATERIALDB
+
+
+BEISPIELE
+=========
+
+   // simpel
+   write("Der Gegenstand besteht aus"+ob->MaterialList(WEM,TP)+".\n")
+   // -> "Der Gegenstand besteht aus Gold, Silber und Rubin.\n"
+
+   // komplexer
+   ob->SetProp(P_MATERIAL, ([P_NITROGLYCERINE:90,P_GUNPOWDER:10]));
+   write("Das enthaelt "+ob->MaterialList(WER,TP)+".\n");
+   // -> "Das enthaelt Schwarzpulver und Nitroglycerin."
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterial(), QueryMaterialGroup()
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/MaterialName b/doc/lfun/MaterialName
index 0e338a3..782a9f7 100644
--- a/doc/lfun/MaterialName
+++ b/doc/lfun/MaterialName
@@ -1,72 +1,96 @@
+
 MaterialName()
-FUNKTION:
-     varargs string MaterialName(string mat, int casus, mixed idinf)
+**************
 
-DEFINIERT IN:
-     /p/daemon/materialdb.c (MATERIALDB)
 
-ARGUMENTE:
-     string mat	 - das zu erkennende Material
-     int casus	 - der Fall
-     mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
-		   (siehe "man MaterialList")
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion sucht unter Beruecksichtigung der Erkennungsbe-
-     schraenkungen des Materials und Faehigkeiten des Spielers den
-     Klarnamen des Materials heraus und gibt den zurueck.
+   varargs string MaterialName(string mat, int casus, mixed idinf)
 
-RUECKGABEWERT:
-     string: Materialname oder genereller Name.
 
-BEISPIELE:
-     // der hier mag alle existierenden Juwelen, auch wenn welche ergaenzt
-     // werden sollten
-     // Parameter: 1. ein Juwel, 2. Casus, 3. 100% Erkennung - ob er sie
-     // beim Empfang dann auch zu 100% erkennt, steht hier nicht!
-     string* likeit;
-     likeit=MATERIALDB->GetGroupMembers(MATGROUP_JEWEL);
-     ...
-     write("Der Alte sagt: Ich mag "+
-	   MATERIALDB->MaterialName(likeit[random(sizeof(likeit))], WEN, 100)+
-	   ".\n");
-     ...
+DEFINIERT IN
+============
 
-     // ein weiser schmied:
-     int i;
-     string *mat, mname, mgroup;
-     mat=m_indices(ob->queryprop(p_material));
-     i=sizeof(mat);
+   /p/daemon/materialdb.c (MATERIALDB)
 
-     write("der schmied sagt: "+ob->name(wer)+" besteht aus ...\n");
-     while(i--) {
-      // den namen erkennen/aussprechen:
-      // materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
-      // alles aus metall wird zu +100% gut erkannt ...
-      mname=materialdb->materialname(mat[i], wer,
-	     ({5, ([material_symmetric_recognizability:
-			({matgroup_metal, 100})])}));
 
-      // und nur metalle analysieren ...
-      if(materialdb->materialgroup(([mat[i]:100]),matgroup_metal)>=100) {
-       int j;
-       string *mgr;
-       mgr=materialdb->getmatmembership(mat[i]);
-       j=sizeof(mgr);
-       mgroup=" gehoert zu ";
-       while(j--) {
-        mgroup+=materialdb->groupname(mgr[j]);
-        if(j>0) mgroup+=", ";
-       }
-      } else mgroup=" kenne ich nicht";
-      printf("%-12.12s: %s\n",mname, mgroup);
+ARGUMENTE
+=========
+
+   string mat  - das zu erkennende Material
+   int casus   - der Fall
+   mixed idinf - Dinge, welche die Faehigkeiten des Erkennens beeinflussen
+                 (siehe "man MaterialList")
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion sucht unter Beruecksichtigung der Erkennungsbe-
+   schraenkungen des Materials und Faehigkeiten des Spielers den
+   Klarnamen des Materials heraus und gibt den zurueck.
+
+
+RUECKGABEWERT
+=============
+
+   string: Materialname oder genereller Name.
+
+
+BEISPIELE
+=========
+
+   // der hier mag alle existierenden Juwelen, auch wenn welche ergaenzt
+   // werden sollten
+   // Parameter: 1. ein Juwel, 2. Casus, 3. 100% Erkennung - ob er sie
+   // beim Empfang dann auch zu 100% erkennt, steht hier nicht!
+   string* likeit;
+   likeit=MATERIALDB->GetGroupMembers(MATGROUP_JEWEL);
+   ...
+   write("Der Alte sagt: Ich mag "+
+         MATERIALDB->MaterialName(likeit[random(sizeof(likeit))], WEN, 100)+
+         ".\n");
+   ...
+
+   // ein weiser schmied:
+   int i;
+   string *mat, mname, mgroup;
+   mat=m_indices(ob->queryprop(p_material));
+   i=sizeof(mat);
+
+   write("der schmied sagt: "+ob->name(wer)+" besteht aus ...\n");
+   while(i--) {
+    // den namen erkennen/aussprechen:
+    // materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
+    // alles aus metall wird zu +100% gut erkannt ...
+    mname=materialdb->materialname(mat[i], wer,
+           ({5, ([material_symmetric_recognizability:
+                      ({matgroup_metal, 100})])}));
+
+    // und nur metalle analysieren ...
+    if(materialdb->materialgroup(([mat[i]:100]),matgroup_metal)>=100) {
+     int j;
+     string *mgr;
+     mgr=materialdb->getmatmembership(mat[i]);
+     j=sizeof(mgr);
+     mgroup=" gehoert zu ";
+     while(j--) {
+      mgroup+=materialdb->groupname(mgr[j]);
+      if(j>0) mgroup+=", ";
      }
+    } else mgroup=" kenne ich nicht";
+    printf("%-12.12s: %s\n",mname, mgroup);
+   }
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName()
-		  GetGroupMembers(), GetMatMembership()
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName()
+                GetGroupMembers(), GetMatMembership()
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/MayAddObject b/doc/lfun/MayAddObject
index d502da4..1df06ea 100644
--- a/doc/lfun/MayAddObject
+++ b/doc/lfun/MayAddObject
@@ -1,33 +1,55 @@
+
 MayAddObject()
+**************
 
-FUNKTION:
-     int MayAddObject(object ob);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob - Das Object bei dem geprueft werden soll, ob es noch in den
-          Container passt.
+   int MayAddObject(object ob);
 
-BESCHREIBUNG:
-     Wenn ein Objekt in einen Container bewegt wird, prueft move() ueber
-     diese Funktion, ob das Objekt ueberhaupt noch in den Behaelter hinein
-     passt. Dazu uebergibt move() das Objekt das in den Container bewegt
-     werden soll. (In Raeumen ist diese Funktionen ueberschrieben und
-     liefert immer True zurueck.)
 
-RUeCKGABEWERT:
-     1 - wenn das Objekt noch vom Container aufgenommen werden kann.
-     0 sonst.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     invis-Objekte passen immer in den Container hinein!
-     move() ruft diese Funktion nicht auf, wenn in den Flags M_NOCHECK
-     gesetzt war!
+   /std/container/restrictions.c
 
-SIEHE AUCH:
-     MayAddWeight(), PreventInsert(), move(), /std/container/restrictions.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   ob - Das Object bei dem geprueft werden soll, ob es noch in den
+        Container passt.
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Objekt in einen Container bewegt wird, prueft move() ueber
+   diese Funktion, ob das Objekt ueberhaupt noch in den Behaelter hinein
+   passt. Dazu uebergibt move() das Objekt das in den Container bewegt
+   werden soll. (In Raeumen ist diese Funktionen ueberschrieben und
+   liefert immer True zurueck.)
+
+
+RUeCKGABEWERT
+=============
+
+   1 - wenn das Objekt noch vom Container aufgenommen werden kann.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   invis-Objekte passen immer in den Container hinein!
+   move() ruft diese Funktion nicht auf, wenn in den Flags M_NOCHECK
+   gesetzt war!
+
+
+SIEHE AUCH
+==========
+
+   MayAddWeight(), PreventInsert(), move(), /std/container/restrictions.c
+
 Last modified: 23.09.2007, Zesstra
diff --git a/doc/lfun/MayAddWeight b/doc/lfun/MayAddWeight
index 1cc4e47..bc8e06d 100644
--- a/doc/lfun/MayAddWeight
+++ b/doc/lfun/MayAddWeight
@@ -1,47 +1,72 @@
+
 MayAddWeight()
+**************
 
-FUNKTION:
-     int MayAddWeight(int gewicht);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     gewicht
-          Das zu pruefende Gewicht.
+   int MayAddWeight(int gewicht);
 
-BESCHREIBUNG:
-     Wenn ein Objekt ein einen Behaelter bewegt wird, prueft move() ueber
-     diese Funktion, ob das Objekt ueberhaupt noch in den Behaelter hinein
-     passt. Dazu uebergibt move() dieser Funktion das Gewicht des zu
-     bewegenden Objektes.
 
-RUeCKGABEWERT:
-     0, wenn der Behaelter noch ein gewicht Gramm wiegendes Objekt aufnehmen
-     kann, -1 im anderen Fall.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     move() ruft diese Funktion nicht auf, wenn in den Flags M_NOCHECK
-     gesetzt war!
+   /std/container/restrictions.c
 
-BEISPIELE:
-     Die entsprechende Abfrage in /std/thing/moving.c sieht etwa
-     folgendermassen aus:
 
-     int weight;
+ARGUMENTE
+=========
 
-     ...
-     weight = QueryProp(P_TOTAL_WEIGHT);   // Behaelter? Ja => Gesamtgewicht
-     if (!weight)
-       weight = QueryProp(P_WEIGHT);       // Nein: einfaches Gewicht
+   gewicht
+        Das zu pruefende Gewicht.
 
-     if (ziel->MayAddWeight(weight) == -1) // Passt es noch rein?
-       return ME_TOO_HEAVY;                // Nein, entspr. Fehler zurueckgeben
 
-     ...
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-     MayAddObject(), PreventInsert(), move(), /std/container/restrictions.c
+   Wenn ein Objekt ein einen Behaelter bewegt wird, prueft move() ueber
+   diese Funktion, ob das Objekt ueberhaupt noch in den Behaelter hinein
+   passt. Dazu uebergibt move() dieser Funktion das Gewicht des zu
+   bewegenden Objektes.
 
-----------------------------------------------------------------------------
+
+RUeCKGABEWERT
+=============
+
+   0, wenn der Behaelter noch ein gewicht Gramm wiegendes Objekt aufnehmen
+   kann, -1 im anderen Fall.
+
+
+BEMERKUNGEN
+===========
+
+   move() ruft diese Funktion nicht auf, wenn in den Flags M_NOCHECK
+   gesetzt war!
+
+
+BEISPIELE
+=========
+
+   Die entsprechende Abfrage in /std/thing/moving.c sieht etwa
+   folgendermassen aus:
+
+   int weight;
+
+   ...
+   weight = QueryProp(P_TOTAL_WEIGHT);   // Behaelter? Ja => Gesamtgewicht
+   if (!weight)
+     weight = QueryProp(P_WEIGHT);       // Nein: einfaches Gewicht
+
+   if (ziel->MayAddWeight(weight) == -1) // Passt es noch rein?
+     return ME_TOO_HEAVY;                // Nein, entspr. Fehler zurueckgeben
+
+   ...
+
+
+SIEHE AUCH
+==========
+
+   MayAddObject(), PreventInsert(), move(), /std/container/restrictions.c
+
 Last modified: 23.09.2007, Zesstra
diff --git a/doc/lfun/Message b/doc/lfun/Message
index 3635f6e..bee1d46 100644
--- a/doc/lfun/Message
+++ b/doc/lfun/Message
@@ -1,23 +1,40 @@
+
 Message()
+*********
 
-FUNKTION:
-        varargs int Message(string str, int flag)
 
-ARGUMENTE:
-        str: Den zu uebermittelnden Text.
-	flag: Beschreibt die Art der Meldung naeher, siehe
-	      /sys/player/comm.h
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Einem Spieler wird der Text str uebermittelt.
+   varargs int Message(string str, int flag)
 
-RUECKGABEWERT:
-        1 bei erfolgreicher Uebermittlung
-        0 wenn der Kobold aktiv war
-       <0 wenn Spieler oder verwendetes Verb ignoriert
-          werden
 
-SIEHE AUCH:
-     P_IGNORE, TestIgnore()
+ARGUMENTE
+=========
+
+   str: Den zu uebermittelnden Text.
+   flag: Beschreibt die Art der Meldung naeher, siehe
+         /sys/player/comm.h
+
+
+BESCHREIBUNG
+============
+
+   Einem Spieler wird der Text str uebermittelt.
+
+
+RUECKGABEWERT
+=============
+
+    1 bei erfolgreicher Uebermittlung
+    0 wenn der Kobold aktiv war
+   <0 wenn Spieler oder verwendetes Verb ignoriert
+      werden
+
+
+SIEHE AUCH
+==========
+
+   P_IGNORE, TestIgnore()
 
 12. Mai 2004 Gloinson
diff --git a/doc/lfun/ModifyQuestTime b/doc/lfun/ModifyQuestTime
index 0020bad..432a362 100644
--- a/doc/lfun/ModifyQuestTime
+++ b/doc/lfun/ModifyQuestTime
@@ -1,44 +1,66 @@
+
 ModifyQuestTime()
+*****************
 
-FUNKTION:
-        int ModifyQuestTime(string questname, int zeit)
 
-DEFINIERT IN:
-        /std/player/quests.c
+FUNKTION
+========
 
-ARGUMENTE:
-        questname
-          Questname, wie er im Questmaster eingetragen wurde.
-        zeit
-          Zeitpunkt, zu dem die Quest geloest wurde
+   int ModifyQuestTime(string questname, int zeit)
 
-RUeCKGABEWERT:
-         1 : Questzeitpunkt erfolgreich nachgetragen
-        -1 : keine Zugriffsrechte (nur EM+ und der Tagebuchmaster erlaubt)
-        -2 : Questliste im Spielerobjekt ist unerwartet kein Mapping
-        -3 : Spieler hat diese Quest noch nicht bestanden
-        -4 : kein gueltiger Zeitpunkt uebergeben (kein Integer, Wert < -1
-             oder Wert > time()).
 
-BESCHREIBUNG:
-        Mit dieser Funktion kann der Zeitpunkt nachgetragen werden, zu
-        dem ein Spieler eine bestimmte Quest bereits geloest hat. 
-        Als Questname wird dazu der Name angegeben, der im Questmaster 
-        eingetragen ist. Der Zeitpunkt ist als Integer-Wert im ueblichen
-        time()-Format anzugeben. Uebergibt man -1 als <zeit>, dann wird
-        der Tagebuchmaster erneut versuchen, das Logfile einzulesen, 
-        wenn der Spieler das naechste mal sein Abenteuertagebuch liest.
+DEFINIERT IN
+============
 
-HINWEIS:
-        Die Funktion mktime() ist nuetzlich, wenn der Zeitpunkt des 
-        Bestehens einer Quest manuell rekonstruiert werden muss, der
-        Zeitpunkt aber nur als Datums-/Zeitangabe in Textform vorliegt 
-        (etwa aus einem Logfile oder aus der Quest-Feedbackmail).
+   /std/player/quests.c
 
-SIEHE AUCH:
-        /secure/questmaster.h, /obj/tools/questtool
-        GiveQuest(L)
-        mktime(E), dtime(SE)
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   questname
+     Questname, wie er im Questmaster eingetragen wurde.
+   zeit
+     Zeitpunkt, zu dem die Quest geloest wurde
+
+
+RUeCKGABEWERT
+=============
+
+    1 : Questzeitpunkt erfolgreich nachgetragen
+   -1 : keine Zugriffsrechte (nur EM+ und der Tagebuchmaster erlaubt)
+   -2 : Questliste im Spielerobjekt ist unerwartet kein Mapping
+   -3 : Spieler hat diese Quest noch nicht bestanden
+   -4 : kein gueltiger Zeitpunkt uebergeben (kein Integer, Wert < -1
+        oder Wert > time()).
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann der Zeitpunkt nachgetragen werden, zu
+   dem ein Spieler eine bestimmte Quest bereits geloest hat.
+   Als Questname wird dazu der Name angegeben, der im Questmaster
+   eingetragen ist. Der Zeitpunkt ist als Integer-Wert im ueblichen
+   time()-Format anzugeben. Uebergibt man -1 als <zeit>, dann wird
+   der Tagebuchmaster erneut versuchen, das Logfile einzulesen,
+   wenn der Spieler das naechste mal sein Abenteuertagebuch liest.
+
+
+HINWEIS
+=======
+
+   Die Funktion mktime() ist nuetzlich, wenn der Zeitpunkt des
+   Bestehens einer Quest manuell rekonstruiert werden muss, der
+   Zeitpunkt aber nur als Datums-/Zeitangabe in Textform vorliegt
+   (etwa aus einem Logfile oder aus der Quest-Feedbackmail).
+
+
+SIEHE AUCH
+==========
+
+   /secure/questmaster.h, /obj/tools/questtool
+   GiveQuest(L)
+   mktime(E), dtime(SE)
+
 Zuletzt geaendert: Mon, 27. Jan. 2015, Arathorn
diff --git a/doc/lfun/ModifySkill b/doc/lfun/ModifySkill
index 8dd622f..70c33ba 100644
--- a/doc/lfun/ModifySkill
+++ b/doc/lfun/ModifySkill
@@ -1,73 +1,98 @@
+
 ModifySkill()
-FUNKTION:
-    public varargs void ModifySkill(string sname, mixed val,
-                                    int diff, string gilde)
+*************
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    string sname     der zu aendernde Skill
-    mixed val        Aenderungswert: int fuer SI_SKILLABILITY, sonst mapping
-    int diff         Schwierigkeit (optional: default ist existierendes diff)
-    string gilde     Gilde (optional: default ist eigene Gilde)
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Mit der Methode kann man die Werte eines Skills/Spells veraendern. Dabei
-    wird ein Skill immer in ein Mapping umgewandelt (Skills/Spells koennen
-    auch einfach nur ihren Skillwert enthalten, diese ist aequivalent zu
-    einem Mapping mit ([SI_SKILLABILITY:<Skillwert>]).
+   public varargs void ModifySkill(string sname, mixed val,
+                                   int diff, string gilde)
 
-    Ist 'val' ein int, wird dieses als SI_SKILLABILITY gesetzt. Falls der
-    Skill nur ein int war, wird ein 'diff'!=0 als SI_DIFFICULTY gesetzt.
 
-    Ist 'val' ein Mapping, wird dieses zum Skillmapping addiert.
-    
-    Etwaige SI_SKILLABILITY-Aenderungen laufen danach noch durch LimitAbility.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    // #1a: Lerne einen Spell/Skill (einer Gilde)
-    caster->ModifySkill("feuerball", MAX_ABILITY, 100, "abenteurer")
-    // #1b: ... oder ...
-    caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100,
-                        "abenteurer")
-    // #1c: ... oder fuer einen Abenteurer ...
-    caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100);
-    
-    // #2: Setze eine Skill-Funktion fuer einen Kampfskill des Klerus
-    this_player()->ModifySkill(FIGHT(WT_CLUB),
-                               ([SI_SKILLFUNC: "Keulenkampf",
-                                 SI_DIFFICULTY: 100]),
-                               100, "klerus");
+   /std/living/skills.c
 
-    // #3: Speichere im Skill (also Spieler) eine Option fuer diesen Skill
-    // Vorteil: dieser Eintrag wird dem Spell immer uebergeben
-    caster->ModifySkill("blitz", (["klerus_spell_option": 2]));
 
-    (Code in /doc/beispiele/testobjekte/modifyskillspell_test)
-    // #4: Lerne einen unabhaengigen Spell: ACHTUNG
-    // dieser Spell funktioniert nur solange, wie die Closure existiert,
-    // SI_SKILLABILITY und Spell bleiben jedoch im Spieler gespeichert (!)
-    this_player()->ModifySkill("fnrx",
-      ([SI_CLOSURE:
-          function int (object caster, string skill, mapping sinf) {
-            caster->LearnSkill("fnrx", 1);
-            tell_object(caster, "Peng! Dein Skillwert steigt auf "+
-                                caster->QuerySkillAbility("fnrx")+".\n");
-            return ERFOLG;
-          },
-        SI_SKILLABILITY: 8432]),
-      100,
-      "ANY");
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung
-    * Properties:   P_NEWSKILLS
+   string sname     der zu aendernde Skill
+   mixed val        Aenderungswert: int fuer SI_SKILLABILITY, sonst mapping
+   int diff         Schwierigkeit (optional: default ist existierendes diff)
+   string gilde     Gilde (optional: default ist eigene Gilde)
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Mit der Methode kann man die Werte eines Skills/Spells veraendern. Dabei
+   wird ein Skill immer in ein Mapping umgewandelt (Skills/Spells koennen
+   auch einfach nur ihren Skillwert enthalten, diese ist aequivalent zu
+   einem Mapping mit ([SI_SKILLABILITY:<Skillwert>]).
+
+   Ist 'val' ein int, wird dieses als SI_SKILLABILITY gesetzt. Falls der
+   Skill nur ein int war, wird ein 'diff'!=0 als SI_DIFFICULTY gesetzt.
+
+   Ist 'val' ein Mapping, wird dieses zum Skillmapping addiert.
+
+
+
+   Etwaige SI_SKILLABILITY-Aenderungen laufen danach noch durch LimitAbility.
+
+
+BEISPIELE
+=========
+
+   // #1a: Lerne einen Spell/Skill (einer Gilde)
+   caster->ModifySkill("feuerball", MAX_ABILITY, 100, "abenteurer")
+   // #1b: ... oder ...
+   caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100,
+                       "abenteurer")
+   // #1c: ... oder fuer einen Abenteurer ...
+   caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100);
+
+
+
+   // #2: Setze eine Skill-Funktion fuer einen Kampfskill des Klerus
+   this_player()->ModifySkill(FIGHT(WT_CLUB),
+                              ([SI_SKILLFUNC: "Keulenkampf",
+                                SI_DIFFICULTY: 100]),
+                              100, "klerus");
+
+   // #3: Speichere im Skill (also Spieler) eine Option fuer diesen Skill
+   // Vorteil: dieser Eintrag wird dem Spell immer uebergeben
+   caster->ModifySkill("blitz", (["klerus_spell_option": 2]));
+
+   (Code in /doc/beispiele/testobjekte/modifyskillspell_test)
+   // #4: Lerne einen unabhaengigen Spell: ACHTUNG
+   // dieser Spell funktioniert nur solange, wie die Closure existiert,
+   // SI_SKILLABILITY und Spell bleiben jedoch im Spieler gespeichert (!)
+   this_player()->ModifySkill("fnrx",
+     ([SI_CLOSURE:
+         function int (object caster, string skill, mapping sinf) {
+           caster->LearnSkill("fnrx", 1);
+           tell_object(caster, "Peng! Dein Skillwert steigt auf "+
+                               caster->QuerySkillAbility("fnrx")+".\n");
+           return ERFOLG;
+         },
+       SI_SKILLABILITY: 8432]),
+     100,
+     "ANY");
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung
+   * Properties:   P_NEWSKILLS
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/ModifySkillAttribute b/doc/lfun/ModifySkillAttribute
index e5b3669..1b4fe40 100644
--- a/doc/lfun/ModifySkillAttribute
+++ b/doc/lfun/ModifySkillAttribute
@@ -1,105 +1,133 @@
+
 ModifySkillAttribute()
-FUNKTION:
-    public int ModifySkillAttribute(string atrname, mixed value, 
-                                    int duration)
+**********************
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
 
-ARGUMENTE:
-    <atrname>   string
-                Name des zu veraendernden Attributes
-                (Definiert in /sys/living/skill_attributes.h)
+FUNKTION
+========
 
-    <value>     int oder closure
-                Wert des Modifikators
-                oder
-                eine Closure, welche bei Abfrage des betreffenden SAs
-                abgefragt um den Modifikator zu bestimmen.
+   public int ModifySkillAttribute(string atrname, mixed value,
+                                   int duration)
 
-    <duration>  int
-                Dauer in Sekunden
 
-BESCHREIBUNG:
-    Aendert temporaer, d.h. fuer eine bestimmte Zeit, ein Skill-Attribut
-    eines Lebewesen, indem ein Modifikator hinzugefuegt wird.
-    
-    Der Standardwert eines SA wird von P_SKILL_ATTRIBUTE_OFFSETS festgelegt
-    oder ist 100, wenn besagte Property leer ist.
-    Alle Modifikatoren (negativ wie positiv) werden addiert und bilden
-    zusammen mit dem Standardwert eine Gesamtsumme.
-    Bei allen SAs ausser SA_QUALITY wird diese Gesamtsumme noch mit
-    SA_QUALITY (welches sich damit auf alle anderen Skill-Attribute
-    auswirkt) multipliziert und das Ergebnis stellt den Endwert des SA dar.
-    (Beispiel s.u.)
+DEFINIERT IN
+============
 
-    Der Wert eines Modifikators muss zwischen -1000 und 1000 liegen. Der
-    Gesamtwert eines SA kann 10 nicht unter- und 1000 nicht ueberschreiten.
+   /std/living/skill_attributes.c
 
-    Falle <value> eine Closure ist, wird diese Closure jedesmal
-    ausgefuehrt, wenn das entsprechende SA abgefragt wird. Der
-    Rueckgabewert dieser Closure stellt dann den Wert des Modifikators
-    dar. Auch dieser muss zwischen -1000 und 1000 liegen. Gibt die
-    Closure keinen int zurueck, wird der Modifikator geloescht.
 
-    Gueltige Skill-Attribute sind momentan:
-    * SA_QUALITY:    Allgemeine Qualitaet: wirkt sich auf alle anderen
-                     Attribute auch aus (multplikativ auf Basis 100)
-    * SA_DAMAGE:     Schaden, den das Lebewesen macht
-    * SA_SPEED:      Geschwindigkeit des Lebewesens (zB Angriffe/Runde)
-    * SA_DURATION:   Spell-/Skilldauer
-    * SA_ENEMY_SAVE: identisch zu SA_SPELL_PENETRATION (OBSOLET!)
-    * SA_SPELL_PENETRATION: Chance des _Casters_, einen Spell durch ein
-                            P_NOMAGIC durchzukriegen.
-    * SA_RANGE:      Reichweite des Lebewesens (eher unbenutzt)
-    * SA_EXTENSION:  "Ausdehnung" bei Gruppen-/Flaechenspells: FindGroupN/P
+ARGUMENTE
+=========
 
-RUECKGABEWERT:
-    SA_MOD_OK              wenn der Modifikator gesetzt wurde
-    SA_TOO_MANY_MODS       wenn die max. Anzahl an Mods schon erreicht ist.
-    SA_MOD_TOO_SMALL       wenn der Modifikator zu klein ist 
-    SA_MOD_TOO_BIG         wenn der Modifikator zu gross ist
-    SA_MOD_INVALID_ATTR    wenn das gewuenschte SA gar nicht existiert
-    SA_MOD_INVALID_OBJECT  wenn das setzende Objekt ungueltig ist
-    SA_MOD_INVALID_VALUE   wenn der Modifikator ungueltig ist
-    Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt
-    es sich, auf == SA_MOD_OK zu pruefen.
+   <atrname>   string
+               Name des zu veraendernden Attributes
+               (Definiert in /sys/living/skill_attributes.h)
 
-BEMERKUNGEN:
-    Nachdem ein Objekt, welches Modifikatoren setzte, zerstoert wurde,
-    werden die Modifikatoren spaetestens ungueltig, sobald in dem
-    manipulierten Lebewesen erneut ModifySkillAttribute() gerufen wird!
-    Bei Closures ist der Mod sofort weg.
+   <value>     int oder closure
+               Wert des Modifikators
+               oder
+               eine Closure, welche bei Abfrage des betreffenden SAs
+               abgefragt um den Modifikator zu bestimmen.
 
-BEISPIELE:
-    // sei PL ein Spieler, den mein NPC schwaechen will:
-    PL->ModifySkillAttribute(SA_QUALITY, -75, 13);
-    // Fuer 13s wird SA_QUALITY um 75 reduziert. Dies wirkt sich auf alle
-    // anderen SAs aus! (s. drittes Beispiel)
+   <duration>  int
+               Dauer in Sekunden
 
-    // sei PL ein Lebewesen, welchem ich fuer 11s 2 Schlaege pro Kampfrunde
-    // zusaetzlich geben moechte:
-    PL->ModifySkillAttribute(SA_SPEED, 200, 11);
-    // wenn keine weiteres Modifikatoren wirken, hat PL jetzt 3 Schlaege
-    // pro Kampfrunde (Basiswert 100 + 200 == 300 => 3).
 
-    Angenommen, ein Lebewesen hat einen Basiswert von 130 auf SA_SPEED und
-    100 auf SA_QUALITY (P_SKILL_ATTRIBUTE_OFFSETS) und nun 3 Modifikatoren
-    gesetzt: SA_SPEED +100, SA_SPEED -30 und SA_QUALITY von -10:
-    Zunaechst wird SA_QUALITY bestimmt: 100 - 10 = 90  => 0.9
-    Anschliessend wird SA_SPEED bestimmt: 130 + 100 - 30 = 200 => 2
-    Nun wird SA_SPEED noch mit SA_QUALITY multipliziert: 2 * 0.9 = 1.8
-    Das Lebewesen hat nun also im Endeffekt 1.8 Schlaege pro Kampfrunde.
+BESCHREIBUNG
+============
 
-    
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill
-    * Modifikation: QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+   Aendert temporaer, d.h. fuer eine bestimmte Zeit, ein Skill-Attribut
+   eines Lebewesen, indem ein Modifikator hinzugefuegt wird.
+
+
+
+   Der Standardwert eines SA wird von P_SKILL_ATTRIBUTE_OFFSETS festgelegt
+   oder ist 100, wenn besagte Property leer ist.
+   Alle Modifikatoren (negativ wie positiv) werden addiert und bilden
+   zusammen mit dem Standardwert eine Gesamtsumme.
+   Bei allen SAs ausser SA_QUALITY wird diese Gesamtsumme noch mit
+   SA_QUALITY (welches sich damit auf alle anderen Skill-Attribute
+   auswirkt) multipliziert und das Ergebnis stellt den Endwert des SA dar.
+   (Beispiel s.u.)
+
+   Der Wert eines Modifikators muss zwischen -1000 und 1000 liegen. Der
+   Gesamtwert eines SA kann 10 nicht unter- und 1000 nicht ueberschreiten.
+
+   Falle <value> eine Closure ist, wird diese Closure jedesmal
+   ausgefuehrt, wenn das entsprechende SA abgefragt wird. Der
+   Rueckgabewert dieser Closure stellt dann den Wert des Modifikators
+   dar. Auch dieser muss zwischen -1000 und 1000 liegen. Gibt die
+   Closure keinen int zurueck, wird der Modifikator geloescht.
+
+   Gueltige Skill-Attribute sind momentan:
+   * SA_QUALITY:    Allgemeine Qualitaet: wirkt sich auf alle anderen
+                    Attribute auch aus (multplikativ auf Basis 100)
+   * SA_DAMAGE:     Schaden, den das Lebewesen macht
+   * SA_SPEED:      Geschwindigkeit des Lebewesens (zB Angriffe/Runde)
+   * SA_DURATION:   Spell-/Skilldauer
+   * SA_ENEMY_SAVE: identisch zu SA_SPELL_PENETRATION (OBSOLET!)
+   * SA_SPELL_PENETRATION: Chance des _Casters_, einen Spell durch ein
+                           P_NOMAGIC durchzukriegen.
+   * SA_RANGE:      Reichweite des Lebewesens (eher unbenutzt)
+   * SA_EXTENSION:  "Ausdehnung" bei Gruppen-/Flaechenspells: FindGroupN/P
+
+
+RUECKGABEWERT
+=============
+
+   SA_MOD_OK              wenn der Modifikator gesetzt wurde
+   SA_TOO_MANY_MODS       wenn die max. Anzahl an Mods schon erreicht ist.
+   SA_MOD_TOO_SMALL       wenn der Modifikator zu klein ist
+   SA_MOD_TOO_BIG         wenn der Modifikator zu gross ist
+   SA_MOD_INVALID_ATTR    wenn das gewuenschte SA gar nicht existiert
+   SA_MOD_INVALID_OBJECT  wenn das setzende Objekt ungueltig ist
+   SA_MOD_INVALID_VALUE   wenn der Modifikator ungueltig ist
+   Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt
+   es sich, auf == SA_MOD_OK zu pruefen.
+
+
+BEMERKUNGEN
+===========
+
+   Nachdem ein Objekt, welches Modifikatoren setzte, zerstoert wurde,
+   werden die Modifikatoren spaetestens ungueltig, sobald in dem
+   manipulierten Lebewesen erneut ModifySkillAttribute() gerufen wird!
+   Bei Closures ist der Mod sofort weg.
+
+
+BEISPIELE
+=========
+
+   // sei PL ein Spieler, den mein NPC schwaechen will:
+   PL->ModifySkillAttribute(SA_QUALITY, -75, 13);
+   // Fuer 13s wird SA_QUALITY um 75 reduziert. Dies wirkt sich auf alle
+   // anderen SAs aus! (s. drittes Beispiel)
+
+   // sei PL ein Lebewesen, welchem ich fuer 11s 2 Schlaege pro Kampfrunde
+   // zusaetzlich geben moechte:
+   PL->ModifySkillAttribute(SA_SPEED, 200, 11);
+   // wenn keine weiteres Modifikatoren wirken, hat PL jetzt 3 Schlaege
+   // pro Kampfrunde (Basiswert 100 + 200 == 300 => 3).
+
+   Angenommen, ein Lebewesen hat einen Basiswert von 130 auf SA_SPEED und
+   100 auf SA_QUALITY (P_SKILL_ATTRIBUTE_OFFSETS) und nun 3 Modifikatoren
+   gesetzt: SA_SPEED +100, SA_SPEED -30 und SA_QUALITY von -10:
+   Zunaechst wird SA_QUALITY bestimmt: 100 - 10 = 90  => 0.9
+   Anschliessend wird SA_SPEED bestimmt: 130 + 100 - 30 = 200 => 2
+   Nun wird SA_SPEED noch mit SA_QUALITY multipliziert: 2 * 0.9 = 1.8
+   Das Lebewesen hat nun also im Endeffekt 1.8 Schlaege pro Kampfrunde.
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill
+   * Modifikation: QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 5. Okt 2011 Gloinson
diff --git a/doc/lfun/More b/doc/lfun/More
index 2e73fa2..c504209 100644
--- a/doc/lfun/More
+++ b/doc/lfun/More
@@ -1,56 +1,80 @@
+
 More()
+******
 
-FUNKTION:
-     varargs public void More(string txt, int file,
-                              mixed ctrl, mixed *ctrlargs, int flags);
 
-DEFINIERT IN:
-     /std/util/pager.c
+FUNKTION
+========
 
-ARGUMENTE:
-     txt  - entweder ein Text der ausgegeben werden soll, oder ein filename.
-     file - das flag file gibt an, ob es sich bei <txt> um einen text oder
-            einen Filenamen handelt. Bei einem Filenamen wird der Inhalt
-            dieses Files eingelesen und ausgegeben.
-     ctrl - Eine closure, die aufgerufen wird, falls kein <txt> angegeben
-            wurde.
-     ctrlargs - ctrlargs wird als Parameter an ctrl uebergeben.
-     flags - flags wird mit den im Spieler definierten P_MORE_FLAGS
-             kombiniert.
+   varargs public void More(string txt, int file,
+                            mixed ctrl, mixed *ctrlargs, int flags);
 
-BESCHREIBUNG:
 
-     More() dient der Ausgabe von Texten an Spieler. Mit Hilfe eines
-     PL->More(txt) oder PL->More(txt, 1) ist es sehr einfach laengere Texte
-     an Spieler auszugeben. Bei der Ausgabe werden die persoenlichen
-     Einstellungen des Spielern (wie z.b. Zeilen pro Bildschirmseite)
-     automatisch beruecksichtigt und der Text dadurch ggf. zerstueckelt
-     und in mehreren Schritten nacheinander angezeigt.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   /std/util/pager.c
 
-BEMERKUNGEN:
-     Beim einlesen des Files sind die Leserechte des Spieler in dem More()
-     aufgerufen wird von Bedeutung und nicht die Rechte des Objektes das
-     More() aufruft. Spielerobjekte haben im MorgenGrauen jedoch nur sehr
-     eingeschraenkte Leserechte! Ausgegeben werden koennen nur files
-     aus /p/*, /gilden/* und /d/* die _keinen_ code enthalten. Als Code
-     wird hierbei jedes File betrachtet das als vorletztes Zeichen einen .
-     hat (also .c, .h, .o usw.).
-     Will man aus irgendwelchen Gruenden ein File (z.b. aus /players/)
-     ausgeben, so sollte man stattdessen folgendes verwenden:
-     this_player()->More(read_file(filename))
 
-BEISPIELE:
+ARGUMENTE
+=========
 
-     // Ausgabe eines normalen textes...
-     this_player()->More("Einfach nur mal so ein Test...\n");
+   txt  - entweder ein Text der ausgegeben werden soll, oder ein filename.
+   file - das flag file gibt an, ob es sich bei <txt> um einen text oder
+          einen Filenamen handelt. Bei einem Filenamen wird der Inhalt
+          dieses Files eingelesen und ausgegeben.
+   ctrl - Eine closure, die aufgerufen wird, falls kein <txt> angegeben
+          wurde.
+   ctrlargs - ctrlargs wird als Parameter an ctrl uebergeben.
+   flags - flags wird mit den im Spieler definierten P_MORE_FLAGS
+           kombiniert.
 
-     // Ausgabe eines kompletten files
-     this_player()->More("/etc/WIZRULES", 1);
 
-SIEHE AUCH:
+BESCHREIBUNG
+============
 
-----------------------------------------------------------------------------
+   More() dient der Ausgabe von Texten an Spieler. Mit Hilfe eines
+   PL->More(txt) oder PL->More(txt, 1) ist es sehr einfach laengere Texte
+   an Spieler auszugeben. Bei der Ausgabe werden die persoenlichen
+   Einstellungen des Spielern (wie z.b. Zeilen pro Bildschirmseite)
+   automatisch beruecksichtigt und der Text dadurch ggf. zerstueckelt
+   und in mehreren Schritten nacheinander angezeigt.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Beim einlesen des Files sind die Leserechte des Spieler in dem More()
+   aufgerufen wird von Bedeutung und nicht die Rechte des Objektes das
+   More() aufruft. Spielerobjekte haben im MorgenGrauen jedoch nur sehr
+   eingeschraenkte Leserechte! Ausgegeben werden koennen nur files
+   aus /p/*, /gilden/* und /d/* die _keinen_ code enthalten. Als Code
+   wird hierbei jedes File betrachtet das als vorletztes Zeichen einen .
+   hat (also .c, .h, .o usw.).
+   Will man aus irgendwelchen Gruenden ein File (z.b. aus /players/)
+   ausgeben, so sollte man stattdessen folgendes verwenden:
+   this_player()->More(read_file(filename))
+
+
+BEISPIELE
+=========
+
+   // Ausgabe eines normalen textes...
+   this_player()->More("Einfach nur mal so ein Test...\n");
+
+   // Ausgabe eines kompletten files
+   this_player()->More("/etc/WIZRULES", 1);
+
+
+SIEHE AUCH
+==========
+
+   ----------------------------------------------------------------------------
+
 Last modified: Mon Feb 22 15:09:18 1999 by Padreic
diff --git a/doc/lfun/NPC_Killed_by b/doc/lfun/NPC_Killed_by
index 37392ba..3b8801d 100644
--- a/doc/lfun/NPC_Killed_by
+++ b/doc/lfun/NPC_Killed_by
@@ -1,13 +1,28 @@
-FUNKTION:
-	void NPC_Killed_By(object pl)
-	
-ARGUMENTE:
-	Spieler, der einen NPC gekillt hat.
-	
-BESCHREIBUNG:
-	Wird in der Gilde des Spielers aufgerufen,
-	wenn dieser einen NPC gekillt hat.
-	
-RUECKGABEWERT:
-	Keiner
-	
+
+NPC_Killed_by()
+***************
+
+
+FUNKTION
+========
+
+   void NPC_Killed_By(object pl)
+
+
+ARGUMENTE
+=========
+
+   Spieler, der einen NPC gekillt hat.
+
+
+BESCHREIBUNG
+============
+
+   Wird in der Gilde des Spielers aufgerufen,
+   wenn dieser einen NPC gekillt hat.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner
diff --git a/doc/lfun/NewDoor b/doc/lfun/NewDoor
index 09f5796..c534be5 100644
--- a/doc/lfun/NewDoor
+++ b/doc/lfun/NewDoor
@@ -1,223 +1,252 @@
-FUNKTION:
-     varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
-                         mapping|<int|string|string*>* props);
-DEFINIERT IN:
-     /std/room/doors.c
 
-ARGUMENTE:
-     cmds (string|string*)
-          String oder Array von Strings mit den Befehlen, mit denen man
-          durch die Tuer geht (in der Regel Richtungen wie "norden").
-     dest (string)
-          Pfad des Zielraumes, OHNE ".c", sonst wird eine zweiseitige Tuer
-          (wie sie ueblich ist) nicht als solche erkannt.
-     ids (string|string*)
-          String oder Array von Strings mit den Bezeichnern der Tuer. Kann
-          auch 0 sein; in diesem Fall laesst sich die Tuer nur als "tuer"
-          ansprechen.
-     props (mapping|<int|string|string*>*)
-          Die Eigenschaften der Tuer (s.u.).
+NewDoor()
+*********
 
-BESCHREIBUNG:
-     Es wird eine neue Tuer geschaffen. Die Tuer laesst sich, wenn sie
-     geoeffnet ist, mit den in <cmds> angegebenen Befehlen durchschreiten.
-     Man gelangt dann in den Raum <dest>.
 
-     Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
-     Ausgaenge eingefuegt.
+FUNKTION
+========
 
-     In <props> lassen sich Aussehen und Eigenschaften der Tuer festlegen.
-     Historisch ist es ein Array mit Paaren von Schluesseln und Werten, d.h.
-     es kommt immer erst ein Element, welches die Eigenschaft bezeichnet und
-     dann ein Element mit dem Wert dieser Eigenschaft.
-     Moderner ist es, ein Mapping mit den entsprechenden Schluesseln und
-     Werten zu uebergeben. Dies ist auch dringend empfohlen.
+   varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
+                       mapping|<int|string|string*>* props);
 
-     In <doorroom.h> sind dazu folgende Eigenschaften definiert:
-     D_FLAGS
-          DOOR_OPEN
-               Die Tuer ist beim Erzeugen geoeffnet.
-          DOOR_CLOSED
-               Die Tuer ist beim Erzeugen geschlossen.
-          DOOR_NEEDKEY
-               Man benoetigt einen Schluessel zum Oeffnen der Tuer.
-          DOOR_CLOSEKEY
-               Man benoetigt einen Schluessel zum Schliessen der Tuer.
-          DOOR_RESET_CL
-               Die Tuer schliesst sich beim Reset.
-          DOOR_RESET_OP
-               Die Tuer oeffnet sich beim Reset.
 
-     D_LONG
-          Die Langbeschreibung der Tuer. 
-          Hier kann ein Mapping eingetragen werden, das als Keys den Tuer-
-          Status hat und die zugehoerige Langbeschreibung dazu. Beispiel:
-          ([ D_STATUS_CLOSED : "Die Tuer ist geschlossen.\n",
-             D_STATUS_OPEN   : "Die Tuer ist offen.\n" ])
-          
-          Default: "Eine Tuer.\n"
+DEFINIERT IN
+============
 
-     D_SHORT
-          Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
-          bzw. "geschlossen" ersetzt.
+   /std/room/doors.c
 
-          Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
-          aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
-          das Ganze mit break_string() umgebrochen und an P_INT_LONG
-          angehaengt.
 
-          Default: "Eine %se Tuer."
+ARGUMENTE
+=========
 
-     D_NAME
-          Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
-          der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
-          P_NAME einen String oder ein Array von Strings angeben.
+   cmds (string|string*)
+        String oder Array von Strings mit den Befehlen, mit denen man
+        durch die Tuer geht (in der Regel Richtungen wie "norden").
+   dest (string)
+        Pfad des Zielraumes, OHNE ".c", sonst wird eine zweiseitige Tuer
+        (wie sie ueblich ist) nicht als solche erkannt.
+   ids (string|string*)
+        String oder Array von Strings mit den Bezeichnern der Tuer. Kann
+        auch 0 sein; in diesem Fall laesst sich die Tuer nur als "tuer"
+        ansprechen.
+   props (mapping|<int|string|string*>*)
+        Die Eigenschaften der Tuer (s.u.).
 
-          Default: "Tuer"
 
-     D_GENDER
-          Das Geschlecht der Tuer.
+BESCHREIBUNG
+============
 
-          Default: FEMALE
+   Es wird eine neue Tuer geschaffen. Die Tuer laesst sich, wenn sie
+   geoeffnet ist, mit den in <cmds> angegebenen Befehlen durchschreiten.
+   Man gelangt dann in den Raum <dest>.
 
-     D_MSGS
-          String oder Array von drei Strings. Diese Strings werden beim
-          Durchschreiten der Tuer an move() als dir bzw. dir, textout und
-          textin uebergeben.
+   Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
+   Ausgaenge eingefuegt.
 
-     D_FUNC
-          String mit dem Namen einer Funktion, die im Startraum vor dem
-          Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
-          kann das Durchschreiten jedoch nicht verhindern!
+   In <props> lassen sich Aussehen und Eigenschaften der Tuer festlegen.
+   Historisch ist es ein Array mit Paaren von Schluesseln und Werten, d.h.
+   es kommt immer erst ein Element, welches die Eigenschaft bezeichnet und
+   dann ein Element mit dem Wert dieser Eigenschaft.
+   Moderner ist es, ein Mapping mit den entsprechenden Schluesseln und
+   Werten zu uebergeben. Dies ist auch dringend empfohlen.
 
-     D_FUNC2
-          String mit dem Namen einer Funktion, die im Zielraum nach dem
-          Durchschreiten der Tuer aufgerufen werden soll.
+   In <doorroom.h> sind dazu folgende Eigenschaften definiert:
+   D_FLAGS
+        DOOR_OPEN
+             Die Tuer ist beim Erzeugen geoeffnet.
+        DOOR_CLOSED
+             Die Tuer ist beim Erzeugen geschlossen.
+        DOOR_NEEDKEY
+             Man benoetigt einen Schluessel zum Oeffnen der Tuer.
+        DOOR_CLOSEKEY
+             Man benoetigt einen Schluessel zum Schliessen der Tuer.
+        DOOR_RESET_CL
+             Die Tuer schliesst sich beim Reset.
+        DOOR_RESET_OP
+             Die Tuer oeffnet sich beim Reset.
 
-     D_TESTFUNC
-          Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
-          vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
-          Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten. 
+   D_LONG
+        Die Langbeschreibung der Tuer.
+        Hier kann ein Mapping eingetragen werden, das als Keys den Tuer-
+        Status hat und die zugehoerige Langbeschreibung dazu. Beispiel:
+        ([ D_STATUS_CLOSED : "Die Tuer ist geschlossen.\n",
+           D_STATUS_OPEN   : "Die Tuer ist offen.\n" ])
 
-     D_RESET_MSG
-          Meldung, die beim Reset der Tuer ausgegeben wird.
 
-     D_OPEN_WITH_MOVE
-          Tuer oeffnet automatisch bei Eingabe des Befehls zum 
-          Hindurchgehen.
-          
-RUECKGABEWERT:
-     1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
 
-BEMERKUNGEN:
-     Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
-     Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
-     wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
-     geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
-     und beim Reset.
+        Default: "Eine Tuer.\n"
 
-     Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
-     auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
-     einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
-     jedoch kein Schluessel noetig ist.
+   D_SHORT
+        Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
+        bzw. "geschlossen" ersetzt.
 
-     Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
-     veraendern will, kann dafuer in /obj/doormaster die Funktionen
-     QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
+        Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
+        aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
+        das Ganze mit break_string() umgebrochen und an P_INT_LONG
+        angehaengt.
 
-     *** ACHTUNG ***
-     Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
-     Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
-     per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
-     oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
-     dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
-     erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
+        Default: "Eine %se Tuer."
 
-BEISPIELE:
+   D_NAME
+        Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
+        der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
+        P_NAME einen String oder ein Array von Strings angeben.
 
-  ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
-     Extra-Beschreibung:
+        Default: "Tuer"
 
-     NewDoor("sueden","/players/rochus/room/test1");
+   D_GENDER
+        Das Geschlecht der Tuer.
 
-  ** Ein Portal:
+        Default: FEMALE
 
-     NewDoor("norden","/players/rochus/room/test2",
-             "portal",
-             ([ D_NAME:   "Portal",
-                D_GENDER: NEUTER,
-                D_SHORT:  "Im Norden siehst Du ein %ses Portal.",
-                D_LONG:   "Das Portal ist einfach nur gigantisch.\n",
-              ]) );
+   D_MSGS
+        String oder Array von drei Strings. Diese Strings werden beim
+        Durchschreiten der Tuer an move() als dir bzw. dir, textout und
+        textin uebergeben.
 
-     Alternativ mit props in alter Arraynotation:
-     NewDoor("norden","/players/rochus/room/test2",
-             "portal",
-             ({ D_NAME,   "Portal",
-                D_GENDER, NEUTER,
-                D_SHORT,  "Im Norden siehst Du ein %ses Portal.",
-                D_LONG,   "Das Portal ist einfach nur gigantisch.\n"
+   D_FUNC
+        String mit dem Namen einer Funktion, die im Startraum vor dem
+        Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
+        kann das Durchschreiten jedoch nicht verhindern!
+
+   D_FUNC2
+        String mit dem Namen einer Funktion, die im Zielraum nach dem
+        Durchschreiten der Tuer aufgerufen werden soll.
+
+   D_TESTFUNC
+        Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
+        vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
+        Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten.
+
+   D_RESET_MSG
+        Meldung, die beim Reset der Tuer ausgegeben wird.
+
+   D_OPEN_WITH_MOVE
+        Tuer oeffnet automatisch bei Eingabe des Befehls zum
+        Hindurchgehen.
+
+
+RUECKGABEWERT
+=============
+
+   1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
+   Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
+   wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
+   geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
+   und beim Reset.
+
+   Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
+   auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
+   einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
+   jedoch kein Schluessel noetig ist.
+
+   Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
+   veraendern will, kann dafuer in /obj/doormaster die Funktionen
+   QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
+
+   *** ACHTUNG ***
+   Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
+   Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
+   per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
+   oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
+   dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
+   erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
+
+
+BEISPIELE
+=========
+
+   ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
+      Extra-Beschreibung:
+
+      NewDoor("sueden","/players/rochus/room/test1");
+
+   ** Ein Portal:
+
+      NewDoor("norden","/players/rochus/room/test2",
+              "portal",
+              ([ D_NAME:   "Portal",
+                 D_GENDER: NEUTER,
+                 D_SHORT:  "Im Norden siehst Du ein %ses Portal.",
+                 D_LONG:   "Das Portal ist einfach nur gigantisch.\n",
+               ]) );
+
+      Alternativ mit props in alter Arraynotation:
+      NewDoor("norden","/players/rochus/room/test2",
+              "portal",
+              ({ D_NAME,   "Portal",
+                 D_GENDER, NEUTER,
+                 D_SHORT,  "Im Norden siehst Du ein %ses Portal.",
+                 D_LONG,   "Das Portal ist einfach nur gigantisch.\n"
+               }) );
+
+
+
+   ** Tueren mit Bewegungsmeldung:
+
+      NewDoor("norden","/room/see2",
+              ({ D_MSGS,  ({"nach Norden","schwimmt",
+                            "kommt hereingeschwommen"}) }) );
+
+   ** Eine Tuer mit Testfunktion:
+
+      NewDoor("osten","/mein/zielraum",
+              ({ D_TESTFUNC, "blocker_da" }) );
+
+      Die Funktion blocker_da:
+
+      int blocker_da()      // KEINE protected-Funktion! Sie wird sonst NICHT
+      {                     // aufgerufen und ausgewertet!
+        if ( present("mein_fieses_mo\nster",this_object()) )
+         {
+          write("Ein fieses Monster stellt sich Dir in den Weg.\n");
+          return 1;
+         }
+        return 0;           // optional
+      }
+
+   ** Nun noch eine Tuer mit einigen Extras:
+
+      NewDoor("nordwesten","/rooms/kammer",
+              ({"tuer","holztuer"}),
+              ({
+                D_FLAGS,  (DOOR_CLOSED|DOOR_RESET_CL),
+                D_MSGS,   ({"nach Nordwesten","geht",
+                          "kommt durch eine Tuer herein"}),
+                D_SHORT,  "Im Nordwesten siehst Du eine %se Holztuer.",
+                D_LONG,   "Sie trennt den Laden vom dahinterliegenden Raum.\n",
+                D_NAME,   "Holztuer",
+                D_FUNC,   "view",
+                D_FUNC2,  "look_up"
               }) );
-     
-  ** Tueren mit Bewegungsmeldung:
 
-     NewDoor("norden","/room/see2",
-             ({ D_MSGS,  ({"nach Norden","schwimmt",
-                           "kommt hereingeschwommen"}) }) );
+      Im Startraum:
 
-  ** Eine Tuer mit Testfunktion:
+      void view()
+      {
+        write("Der Angestellte wirft Dir einen missbilligenden Blick zu, "
+              "laesst Dich aber passieren.\n");
+      }
 
-     NewDoor("osten","/mein/zielraum",
-             ({ D_TESTFUNC, "blocker_da" }) );
+      Im Zielraum:
 
-     Die Funktion blocker_da:
-
-     int blocker_da()      // KEINE protected-Funktion! Sie wird sonst NICHT
-     {                     // aufgerufen und ausgewertet!
-       if ( present("mein_fieses_mo\nster",this_object()) )
-        {
-         write("Ein fieses Monster stellt sich Dir in den Weg.\n");
-         return 1;
-        }
-       return 0;           // optional
-     }
-
-  ** Nun noch eine Tuer mit einigen Extras:
-
-     NewDoor("nordwesten","/rooms/kammer",
-             ({"tuer","holztuer"}),
-             ({
-               D_FLAGS,  (DOOR_CLOSED|DOOR_RESET_CL),
-               D_MSGS,   ({"nach Nordwesten","geht",
-                         "kommt durch eine Tuer herein"}),
-               D_SHORT,  "Im Nordwesten siehst Du eine %se Holztuer.",
-               D_LONG,   "Sie trennt den Laden vom dahinterliegenden Raum.\n",
-               D_NAME,   "Holztuer",
-               D_FUNC,   "view",
-               D_FUNC2,  "look_up"
-             }) );
-
-     Im Startraum:
-
-     void view()
-     {
-       write("Der Angestellte wirft Dir einen missbilligenden Blick zu, "
-             "laesst Dich aber passieren.\n");
-     }
-
-     Im Zielraum:
-
-     void look_up()
-     {
-       write("Ein alter Mann schaut kurz zu Dir auf und vertieft sich dann "
-             "wieder in seine Akten.\n");
-     }
+      void look_up()
+      {
+        write("Ein alter Mann schaut kurz zu Dir auf und vertieft sich dann "
+              "wieder in seine Akten.\n");
+      }
 
 
-SIEHE AUCH:
-    QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
-    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+SIEHE AUCH
+==========
 
------------------------------------------------------------------------------
+   QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
+   /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+
 08.02.2015, Arathorn
-
diff --git a/doc/lfun/NoParaObjects b/doc/lfun/NoParaObjects
index 804e7b7..4b6013a 100644
--- a/doc/lfun/NoParaObjects
+++ b/doc/lfun/NoParaObjects
@@ -1,28 +1,46 @@
+
+NoParaObjects()
+***************
+
 ********************** VERALTETE LFUN ****************************
 NoParaObjects()
 
-FUNKTION:
-	int NoParaObjects()
 
-DEFINIERT IN:
-	/std/virtual/v_compiler.c
+FUNKTION
+========
 
-RUeCKGABEWERT:
-    1, wenn der VC keine Parawelt-Objekte erzeugt,
-    0, wenn er es doch tut.
+   int NoParaObjects()
 
-BESCHREIBUNG:
-    Diese Funktion ist veraltet. QueryValidObject() ist genereller und
-    einfacher zu handhaben. Bitte in Zukunft P_PARA im VC setzen, siehe hierzu
-    die Manpage von QueryValidObject().
 
-    Die Funktion gibt an, ob ein Virtual Compiler auch Parawelt-Objekte
-    erzeugen kann.
-    Wichtig: Entweder dieser Funktion im VC definieren, wenn der VC keine
-    Para-Objekte erzeugen wird oder P_PARA passend setzen!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	virtual_compiler, P_PARA, QueryValidObject
+   /std/virtual/v_compiler.c
 
-----------------------------------------------------------------------------
+
+RUeCKGABEWERT
+=============
+
+   1, wenn der VC keine Parawelt-Objekte erzeugt,
+   0, wenn er es doch tut.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ist veraltet. QueryValidObject() ist genereller und
+   einfacher zu handhaben. Bitte in Zukunft P_PARA im VC setzen, siehe hierzu
+   die Manpage von QueryValidObject().
+
+   Die Funktion gibt an, ob ein Virtual Compiler auch Parawelt-Objekte
+   erzeugen kann.
+   Wichtig: Entweder dieser Funktion im VC definieren, wenn der VC keine
+   Para-Objekte erzeugen wird oder P_PARA passend setzen!
+
+
+SIEHE AUCH
+==========
+
+   virtual_compiler, P_PARA, QueryValidObject
+
 04.03.2007, Zesstra
diff --git a/doc/lfun/NotifyDestruct b/doc/lfun/NotifyDestruct
index 48e71ee..31e02e9 100644
--- a/doc/lfun/NotifyDestruct
+++ b/doc/lfun/NotifyDestruct
@@ -1,47 +1,66 @@
+
 NotifyDestruct()
+****************
 
-FUNKTION:
-     public int|string NotifyRemove(object zerstoerer);
 
-ARGUMENTE:
-     zerstoerer
-          Das Objekt, welches destruct() auf dieses Objekt anwendet.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird vom Master der Mudlib in jedem Objekt gerufen,
-     welches zerstoert wird, um Objekten eine letzte Chance zu geben, sich
-     aufzuraeumen.
-     Wenn ihr diese Funktion selber definiert, achtet bittet darauf, dass sie
-     in keinem Fall Fehler ausloesen sollte, d.h. testet entsprechend
-     gruendlich.
-     Wenn ihr aus /std/ erbt und diese Funktion ueberschreibt,, _muesst_ ihr
-     die geerbte NotifyDestruct() aufrufen, da sonst das Lichtsystem nicht
-     aktualisiert wird.
+   public int|string NotifyRemove(object zerstoerer);
 
-     Privilegierte Objekte (z.B. Root-Objekte, spezielle Ausnahmen wie der
-     Netztotenraum, Armageddon) koennen die Zerstoerung in letzter Sekunde
-     verhindern, indem sie hier einen Wert != 0 zurueckliefern. Wird ein
-     string zurueckgeliefert, wird dieser die Fehlermeldung des
-     prepare_destruct() im Master sein.
-     Bei nicht-privilegierten Objekten (also fast alle) ist an dieser Stelle
-     _kein_ Abbruch der Zerstoerung moeglich!
 
-RUeCKGABEWERT:
-     Der Rueckgabewert muss ein string oder ein int sein. Allerdings wird der
-     Master den Rueckgabewert nur fuer privilegierte Objekte auswerten.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     Wie gesagt, bitte keine Fehler ausloesen (auch wenn der Master
-     grundsaetzlich damit klar kommt). Speziell ist ein raise_error() zur
-     Verhinderung eines destructs nutzlos.
-     Bitte macht in dieser Funkion nur das, was _unbedingt_ notwendig ist.
-     Wenn jemand ein destruct() anwendet statt ein remove() zu rufen, hat das
-     in der Regel einen Grund (z.B. um buggende remove() zu umgehen). Insb.
-     ist ein save_object() in remove() und NotifyDestruct() vollstaendig
-     ueberfluessig.
+   zerstoerer
+        Das Objekt, welches destruct() auf dieses Objekt anwendet.
 
-SIEHE AUCH:
-    NotifyLeave(), NotifyInsert(), NotifyRemove()
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion wird vom Master der Mudlib in jedem Objekt gerufen,
+   welches zerstoert wird, um Objekten eine letzte Chance zu geben, sich
+   aufzuraeumen.
+   Wenn ihr diese Funktion selber definiert, achtet bittet darauf, dass sie
+   in keinem Fall Fehler ausloesen sollte, d.h. testet entsprechend
+   gruendlich.
+   Wenn ihr aus /std/ erbt und diese Funktion ueberschreibt,, _muesst_ ihr
+   die geerbte NotifyDestruct() aufrufen, da sonst das Lichtsystem nicht
+   aktualisiert wird.
+
+   Privilegierte Objekte (z.B. Root-Objekte, spezielle Ausnahmen wie der
+   Netztotenraum, Armageddon) koennen die Zerstoerung in letzter Sekunde
+   verhindern, indem sie hier einen Wert != 0 zurueckliefern. Wird ein
+   string zurueckgeliefert, wird dieser die Fehlermeldung des
+   prepare_destruct() im Master sein.
+   Bei nicht-privilegierten Objekten (also fast alle) ist an dieser Stelle
+   _kein_ Abbruch der Zerstoerung moeglich!
+
+
+RUeCKGABEWERT
+=============
+
+   Der Rueckgabewert muss ein string oder ein int sein. Allerdings wird der
+   Master den Rueckgabewert nur fuer privilegierte Objekte auswerten.
+
+
+BEMERKUNGEN
+===========
+
+   Wie gesagt, bitte keine Fehler ausloesen (auch wenn der Master
+   grundsaetzlich damit klar kommt). Speziell ist ein raise_error() zur
+   Verhinderung eines destructs nutzlos.
+   Bitte macht in dieser Funkion nur das, was _unbedingt_ notwendig ist.
+   Wenn jemand ein destruct() anwendet statt ein remove() zu rufen, hat das
+   in der Regel einen Grund (z.B. um buggende remove() zu umgehen). Insb.
+   ist ein save_object() in remove() und NotifyDestruct() vollstaendig
+   ueberfluessig.
+
+
+SIEHE AUCH
+==========
+
+   NotifyLeave(), NotifyInsert(), NotifyRemove()
+
 Last modified: 25.02.2009, Zesstra
diff --git a/doc/lfun/NotifyInsert b/doc/lfun/NotifyInsert
index aa2c6ec..fa2f2ac 100644
--- a/doc/lfun/NotifyInsert
+++ b/doc/lfun/NotifyInsert
@@ -1,28 +1,47 @@
+
 NotifyInsert()
+**************
 
-FUNKTION:
-     void NotifyInsert(object ob, object oldenv);
 
-ARGUMENTE:
-     ob
-          Das Objekt, das in den Behaelter eingefuegt wurde.
-     oldenv
-          Das Objekt, aus dem <ob> kam.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird im Behaelter aufgerufen, nachdem ein Objekt in
-     besagten Behaelter hinein bewegt wurde. 
+   void NotifyInsert(object ob, object oldenv);
 
-RUeCKGABEWERT:
-     keiner
 
-BEMERKUNGEN:
-     Diese Funktion wird nur im Falle unbelebter Objekte gerufen. Fuer 
-     Lebewesen s. bitte. init().
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    NotifyLeave(), PreventInsert(), PreventLeave(), move(), NotifyRemove()
-    exit(), init(), NotifyMove(), PreventMove()
+   ob
+        Das Objekt, das in den Behaelter eingefuegt wurde.
+   oldenv
+        Das Objekt, aus dem <ob> kam.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird im Behaelter aufgerufen, nachdem ein Objekt in
+   besagten Behaelter hinein bewegt wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird nur im Falle unbelebter Objekte gerufen. Fuer
+   Lebewesen s. bitte. init().
+
+
+SIEHE AUCH
+==========
+
+   NotifyLeave(), PreventInsert(), PreventLeave(), move(), NotifyRemove()
+   exit(), init(), NotifyMove(), PreventMove()
+
 Last modified: 21.05.2012, Zesstra
diff --git a/doc/lfun/NotifyLeave b/doc/lfun/NotifyLeave
index 621fca8..fbfc1c3 100644
--- a/doc/lfun/NotifyLeave
+++ b/doc/lfun/NotifyLeave
@@ -1,28 +1,47 @@
+
 NotifyLeave()
+*************
 
-FUNKTION:
-     void NotifyLeave(object ob, object dest);
 
-ARGUMENTE:
-     ob
-          Das Objekt, das aus dem Behaelter entfernt wurde.
-     dest
-          Das Objekt, in das <ob> bewegt wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird im Behaelter aufgerufen, nachdem ein Objekt aus
-     besagten Behaelter entfernt wurde.
+   void NotifyLeave(object ob, object dest);
 
-RUeCKGABEWERT:
-     keiner
 
-BEMERKUNGEN:
-     Diese Funktion wird nur im Falle unbelebter Objekte gerufen. Fuer
-     Lebewesen s. bitte. exit().
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    NotifyRemove(), NotifyInsert(), PreventInsert(), PreventLeave(), move(),
-    exit(), init(), NotifyMove(), PreventMove()
+   ob
+        Das Objekt, das aus dem Behaelter entfernt wurde.
+   dest
+        Das Objekt, in das <ob> bewegt wurde.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird im Behaelter aufgerufen, nachdem ein Objekt aus
+   besagten Behaelter entfernt wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird nur im Falle unbelebter Objekte gerufen. Fuer
+   Lebewesen s. bitte. exit().
+
+
+SIEHE AUCH
+==========
+
+   NotifyRemove(), NotifyInsert(), PreventInsert(), PreventLeave(), move(),
+   exit(), init(), NotifyMove(), PreventMove()
+
 Last modified: 21.05.2012, Zesstra
diff --git a/doc/lfun/NotifyMove b/doc/lfun/NotifyMove
index 9fe1861..18261f8 100644
--- a/doc/lfun/NotifyMove
+++ b/doc/lfun/NotifyMove
@@ -1,58 +1,83 @@
 
-FUNKTION:
-     protected void NotifyMove(object dest, object oldenv, int method);
-
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
-     /std/player/moving.c
-
-ARGUMENTE:
-     dest
-          Das Ziel des Moves bzw. das jetzt aktuelle Environment
-     oldenv
-          Das alte Environment des Objekts
-     method
-          Die Move-Methode(n), mit der/denen bewegt wurde.
-
-BESCHREIBUNG:
-     Diese Funktion wird vom move() im Objekt gerufen, sobald die Bewegung im
-     wesentlichen abgeschlossen ist. Sie soll einerseits das Objekt ueber eine
-     stattgefundene Bewegung informieren, aber auch einige Dinge erledigen,
-     die bei der Bewegung stattfinden muessen (bei Livings z.B. das Team
-     nachholen).
-
-RUeCKGABEWERT:
-     keiner
-
-BEMERKUNGEN:
-     Diese Funktion kann ueberschrieben werden, damit das Objekt Bewegungen
-     mitgekommt, ohne das move() selber zu ueberschreiben oder einen Move-Hook
-     zu setzen. Dabei aber bitte unbedingt beachten:
-     Das geerbte NotifyMove() _MUSS IN JEDEM FALL_ mit aufgerufen werden!
-     Solltet ihr das vergessen, werden eure Objekte buggen. ;-)
-     Die Funktion darf nur objektintern verwendet werden. Beim Ueberschreiben
-     das 'protected' nicht vergessen!
-
-BEISPIELE:
-     Eine Bombe, die in Seherhaustruhen explodiert:
-
-     protected void NotifyMove(object dest, object oldenv, int method) {
-         ::NotifyMove(dest, oldenv, method); // WICHTIG!
-         if (objectp(dest) &&
-             load_name(dest) == "/d/seher/haeuser/truhe") {
-             if (find_call_out("explodiere")==-1)
-                 call_out("explodiere",900);
-         }
-         else
-             remove_call_out("explodiere");
-     }
+NotifyMove()
+************
 
 
-SIEHE AUCH:
-     PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
-     PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-     PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   protected void NotifyMove(object dest, object oldenv, int method);
+
+
+DEFINIERT IN
+============
+
+   /std/thing/moving.c
+   /std/living/moving.c
+   /std/player/moving.c
+
+
+ARGUMENTE
+=========
+
+   dest
+        Das Ziel des Moves bzw. das jetzt aktuelle Environment
+   oldenv
+        Das alte Environment des Objekts
+   method
+        Die Move-Methode(n), mit der/denen bewegt wurde.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird vom move() im Objekt gerufen, sobald die Bewegung im
+   wesentlichen abgeschlossen ist. Sie soll einerseits das Objekt ueber eine
+   stattgefundene Bewegung informieren, aber auch einige Dinge erledigen,
+   die bei der Bewegung stattfinden muessen (bei Livings z.B. das Team
+   nachholen).
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion kann ueberschrieben werden, damit das Objekt Bewegungen
+   mitgekommt, ohne das move() selber zu ueberschreiben oder einen Move-Hook
+   zu setzen. Dabei aber bitte unbedingt beachten:
+   Das geerbte NotifyMove() _MUSS IN JEDEM FALL_ mit aufgerufen werden!
+   Solltet ihr das vergessen, werden eure Objekte buggen. ;-)
+   Die Funktion darf nur objektintern verwendet werden. Beim Ueberschreiben
+   das 'protected' nicht vergessen!
+
+
+BEISPIELE
+=========
+
+   Eine Bombe, die in Seherhaustruhen explodiert:
+
+   protected void NotifyMove(object dest, object oldenv, int method) {
+       ::NotifyMove(dest, oldenv, method); // WICHTIG!
+       if (objectp(dest) &&
+           load_name(dest) == "/d/seher/haeuser/truhe") {
+           if (find_call_out("explodiere")==-1)
+               call_out("explodiere",900);
+       }
+       else
+           remove_call_out("explodiere");
+   }
+
+
+SIEHE AUCH
+==========
+
+   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
+   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
+   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/NotifyPlayerDeath b/doc/lfun/NotifyPlayerDeath
index 9166150..96678ea 100644
--- a/doc/lfun/NotifyPlayerDeath
+++ b/doc/lfun/NotifyPlayerDeath
@@ -1,74 +1,99 @@
+
 NotifyPlayerDeath()
+*******************
 
-FUNKTION:
-  void NotifyPlayerDeath(object victim,object killer,int lost_exp);
 
-DEFINIERT IN:
-  /std/player/life.c
+FUNKTION
+========
 
-ARGUMENTE:
-  victim
-    Getoeteter Spieler.
-  killer
-    Objekt, welches den Spieler getoetet hat.
-  lost_exp
-    Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
+   void NotifyPlayerDeath(object victim,object killer,int lost_exp);
 
-BESCHREIBUNG:
-  Diese Funktion wird aus dem Spielerobjekt heraus immer dann
-  aufgerufen, wenn der Spieler stirbt und zwar:
-    1) im Gegner, der den Spieler getoetet hat,
-    2) im Environment des getoeteten Spielers,
-    3) in der Gilde des Spielers,
-    4) in allen Objekten in diesem Environment und
-    5) in allen Objekten (auch innerhalb Containern) im Spieler.
-  Der Gegner wird hierbei nur einmal informiert, also bei letzteren
-  Faellen herausgefiltert, falls noetig!
-  Hauptaufgabe dieser Funktion ist es somit, auf Tode von Spielern zu
-  reagieren oder selbige einfach nur mitzuloggen.
 
-  Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch _nicht_
-  Geist und noch _nicht_ im Todesraum - dies wird im Anschluss an den Aufruf
-  der NotifyPlayerDeath() durchgefuehrt.
-  
-  Aufgerufen wird die Funktion aus '/std/player/life.c' mittels catch() und
-  werden mit limited() auf max. 150k (Gegner, Environment, Gilde) bzw. 80k 
-  (alle anderen Objekte) Ticks beschraenkt.
-  Fehler in dieser Funktion haben somit keine negativen Auswirkungen
-  auf das Sterben des Spielers.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-  keiner
+   /std/player/life.c
 
-BEISPIELE:
-  Folgendes Beispiel demonstriert beispielsweise, wie man Tode von
-  Spielern mitloggen kann (das Beispiel ist hierbei auf den am
-  haeufigsten auftretenden Fall bezogen, dass nur das toetende Objekt
-  den Tod protokollieren soll):
 
-    void NotifyPlayerDeath(object dead, object killer, int lost_exp) 
-    { 
-      if ( intp(lost_exp) && objectp(dead) && objectp(killer) && 
-           killer==this_object() )
-        write_file( "/log/patryn/dead", sprintf(
-          "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
-           killer->name(WEM), lost_exp) );
-    }
+ARGUMENTE
+=========
 
-  Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in das
-  Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-Aktivitaet
-  zu Logfiles von enormer Groesse fuehren kann, ist die Verwendung
-  von write_file() nicht empfehlenswert. Ausnahmen koennen natuerlich
-  mit dem zustaendigen Regionsmagier abgesprochen werden, z.B. fuer
-  begrenzte Anwendung etwa bei sehr starken, selten besiegten Gegnern.
+   victim
+     Getoeteter Spieler.
+   killer
+     Objekt, welches den Spieler getoetet hat.
+   lost_exp
+     Erfahrungspunkte, die der Spieler durch den Tod verloren hat.
 
-  Weiterhin ist es empfehlenswert, das toetende Objekt (killer) nicht
-  im NotifyPlayerDeath() zu zestoeren, sondern etwas zeitversetzt,
-  damit nicht etwa im nachfolgenden NotifyPlayerDeath() eines anderen
-  Objektes (s.o. Reihenfolge) killer==0 ist.
 
-SIEHE AUCH:
-  Defend(), do_damage(), NotifyHpChange(), catch(), write_file(), log_file()
-  P_LAST_DEATH_PROPS
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aus dem Spielerobjekt heraus immer dann
+   aufgerufen, wenn der Spieler stirbt und zwar:
+     1) im Gegner, der den Spieler getoetet hat,
+     2) im Environment des getoeteten Spielers,
+     3) in der Gilde des Spielers,
+     4) in allen Objekten in diesem Environment und
+     5) in allen Objekten (auch innerhalb Containern) im Spieler.
+   Der Gegner wird hierbei nur einmal informiert, also bei letzteren
+   Faellen herausgefiltert, falls noetig!
+   Hauptaufgabe dieser Funktion ist es somit, auf Tode von Spielern zu
+   reagieren oder selbige einfach nur mitzuloggen.
+
+   Zu dem Zeitpunkt des Aufrufs dieser Funktion ist der Spieler noch _nicht_
+   Geist und noch _nicht_ im Todesraum - dies wird im Anschluss an den Aufruf
+   der NotifyPlayerDeath() durchgefuehrt.
+
+
+
+   Aufgerufen wird die Funktion aus '/std/player/life.c' mittels catch() und
+   werden mit limited() auf max. 150k (Gegner, Environment, Gilde) bzw. 80k
+   (alle anderen Objekte) Ticks beschraenkt.
+   Fehler in dieser Funktion haben somit keine negativen Auswirkungen
+   auf das Sterben des Spielers.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Folgendes Beispiel demonstriert beispielsweise, wie man Tode von
+   Spielern mitloggen kann (das Beispiel ist hierbei auf den am
+   haeufigsten auftretenden Fall bezogen, dass nur das toetende Objekt
+   den Tod protokollieren soll):
+
+     void NotifyPlayerDeath(object dead, object killer, int lost_exp)
+     {
+       if ( intp(lost_exp) && objectp(dead) && objectp(killer) &&
+            killer==this_object() )
+         write_file( "/log/patryn/dead", sprintf(
+           "%s - %s von %s getoetet. XP: -%d", ctime(), getuid(dead),
+            killer->name(WEM), lost_exp) );
+     }
+
+   Bitte beachten: write_file() schreibt ohne Groessenbegrenzung in das
+   Logfile. Da dies auf Dauer bzw. in Gebieten mit hoher Log-Aktivitaet
+   zu Logfiles von enormer Groesse fuehren kann, ist die Verwendung
+   von write_file() nicht empfehlenswert. Ausnahmen koennen natuerlich
+   mit dem zustaendigen Regionsmagier abgesprochen werden, z.B. fuer
+   begrenzte Anwendung etwa bei sehr starken, selten besiegten Gegnern.
+
+   Weiterhin ist es empfehlenswert, das toetende Objekt (killer) nicht
+   im NotifyPlayerDeath() zu zestoeren, sondern etwas zeitversetzt,
+   damit nicht etwa im nachfolgenden NotifyPlayerDeath() eines anderen
+   Objektes (s.o. Reihenfolge) killer==0 ist.
+
+
+SIEHE AUCH
+==========
+
+   Defend(), do_damage(), NotifyHpChange(), catch(), write_file(), log_file()
+   P_LAST_DEATH_PROPS
+
 24.03.2012, Zesstra
diff --git a/doc/lfun/NotifyRemove b/doc/lfun/NotifyRemove
index 48b04fa..2604b77 100644
--- a/doc/lfun/NotifyRemove
+++ b/doc/lfun/NotifyRemove
@@ -1,26 +1,45 @@
+
 NotifyRemove()
+**************
 
-FUNKTION:
-     void NotifyRemove(object ob);
 
-ARGUMENTE:
-     ob
-          Das Objekt, das aus dem Behaelter entfernt wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird im Behaelter aufgerufen, wenn ein Objekt im
-     besagten Behaelter zerstoert wird.
+   void NotifyRemove(object ob);
 
-RUeCKGABEWERT:
-     keiner
 
-BEMERKUNGEN:
-     Wird nicht gerufen, wenn ein Spielerobjekt zerstoert wird.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    NotifyLeave(), NotifyInsert(), PreventInsert(), PreventLeave(), move(),
-    NotifyMove(), PreventMove(),
-    BecomesNetDead()
+   ob
+        Das Objekt, das aus dem Behaelter entfernt wurde.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird im Behaelter aufgerufen, wenn ein Objekt im
+   besagten Behaelter zerstoert wird.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Wird nicht gerufen, wenn ein Spielerobjekt zerstoert wird.
+
+
+SIEHE AUCH
+==========
+
+   NotifyLeave(), NotifyInsert(), PreventInsert(), PreventLeave(), move(),
+   NotifyMove(), PreventMove(),
+   BecomesNetDead()
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/NotifyTimedAttrModExpired b/doc/lfun/NotifyTimedAttrModExpired
index f59a79a..09dc168 100644
--- a/doc/lfun/NotifyTimedAttrModExpired
+++ b/doc/lfun/NotifyTimedAttrModExpired
@@ -1,20 +1,38 @@
-NotifyTimedAttrModExpired
-FUNKTION:
-     void NotifyTimedAttrModExpired(string key)
 
-DEFINIERT IN:
-     Push-Methode in notify-Objekten.
+NotifyTimedAttrModExpired()
+***************************
 
-ARGUMENTE:
-     string key		- der geloeschte Modifier
 
-BESCHREIBUNG:
-     Wird aus dem Lebewesen aus aufgerufen, in dem der entsprechenden
-     Modifier soeben ungueltig geworden ist.     
+FUNKTION
+========
 
-SIEHE AUCH:
-     Properties: P_ATTRIBUTES, P_TIMED_ATTR_MOD
-     Methoden:	 SetTimedAttrModifier(L), DeleteTimedAttrModifier(L),
-		 QueryTimedAttrModifier(L)
+   void NotifyTimedAttrModExpired(string key)
+
+
+DEFINIERT IN
+============
+
+   Push-Methode in notify-Objekten.
+
+
+ARGUMENTE
+=========
+
+   string key         - der geloeschte Modifier
+
+
+BESCHREIBUNG
+============
+
+   Wird aus dem Lebewesen aus aufgerufen, in dem der entsprechenden
+   Modifier soeben ungueltig geworden ist.
+
+
+SIEHE AUCH
+==========
+
+   Properties: P_ATTRIBUTES, P_TIMED_ATTR_MOD
+   Methoden:   SetTimedAttrModifier(L), DeleteTimedAttrModifier(L),
+               QueryTimedAttrModifier(L)
 
 27. Juli 2004 Gloinson
diff --git a/doc/lfun/NotifyXMAttrModLimitViolation b/doc/lfun/NotifyXMAttrModLimitViolation
index 44f39c0..f3c54a4 100644
--- a/doc/lfun/NotifyXMAttrModLimitViolation
+++ b/doc/lfun/NotifyXMAttrModLimitViolation
@@ -1,20 +1,35 @@
+
 NotifyXMAttrModLimitViolation()
-FUNKTION:
-      void NotifyXMAttrModLimitViolation()
+*******************************
 
-DEFINIERT IN:
-     /std/thing/restrictions.c
-

-BESCHREIBUNG:
-     Wird gerufen wenn die Summe der in P_X_ATTR_MOD oder P_X_ATTR_MOD
-     angegebenen Modifikatoren die Summe aller Modifikatoren im Spieler 
-     ueber den zugelassenen Grenzwert hebt und somit nicht mehr in die
-     Berechnung eingeht.
-     
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,

-     P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

 
-13.Jun.2004, Muadib
\ No newline at end of file
+FUNKTION
+========
+
+   void NotifyXMAttrModLimitViolation()
+
+
+DEFINIERT IN
+============
+
+   /std/thing/restrictions.c
+
+
+BESCHREIBUNG
+============
+
+   Wird gerufen wenn die Summe der in P_X_ATTR_MOD oder P_X_ATTR_MOD
+   angegebenen Modifikatoren die Summe aller Modifikatoren im Spieler
+   ueber den zugelassenen Grenzwert hebt und somit nicht mehr in die
+   Berechnung eingeht.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+13.Jun.2004, Muadib
diff --git a/doc/lfun/Pacify b/doc/lfun/Pacify
index b90ed83..feca7bf 100644
--- a/doc/lfun/Pacify
+++ b/doc/lfun/Pacify
@@ -1,113 +1,146 @@
+
+Pacify()
+********
+
+
 FUNKTION
-	public int Pacify(object caster)
+========
+
+   public int Pacify(object caster)
+
 
 DEFINIERT IN
-	/std/living/combat.c
+============
+
+   /std/living/combat.c
+
 
 BESCHREIBUNG
-	Diese Funktion versucht, ein Lebewesen zu befrieden.
-  Will eine Gilde ein Lebewesen befrieden, muss sie hierfuer diese Funktion
-  in dem Lebewesen aufrufen.
+============
 
-  Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in einem
-  Lebewesen realisiert werden.
+         Diese Funktion versucht, ein Lebewesen zu befrieden.
+   Will eine Gilde ein Lebewesen befrieden, muss sie hierfuer diese Funktion
+   in dem Lebewesen aufrufen.
 
-	Standardmaessig funktioniert die Funktion wie folgt:
-  * Kommt der Versuch vom Spellcaster selbst, ist er immer erfolgreich.
-  * Kommt der Versuch von einem Teamkollegen, ist er immer erfolgreich.
-  * Hat das Lebewesen keine Gegner, ist der Versuch immer erfolglos.
-  In diesen Faellen erfolgt auch keine Erhoehung des Befriedezaehlers.
-  
-  In anderen Faellen wird die in P_PEACE_HISTORY fuer die Gilde des Casters
-  abgelegte Zahl erfolgreicher Befriedungen (ANZ), die Intelligenz des
-  Casters (INT_CASTER) und die Intelligenz des Lebenwesens selber (INT_ME)
-  ermittelt.
-  Anschliessend wird eine Wahrscheinlichkeit w ausgerechnet:
-  
-    w = (INT_CASTER + 10 - ANZ*4) / (INT_ME + 10)
-  
-  Hierbei gibt w die Chance auf eine erfolgreiche Befriedung an. Mittels einer
-  Zufallszahl wird bestimmt, ob der aktuelle Versuch erfolgreich ist. Falls
-  ja, wird der Zaehler fuer die Gilde des Casters in P_PEACE_HISTORY erhoeht.
+   Ein immer befriedbarer NPC kann durch das Setzen von P_ACCEPT_PEACE in einem
+   Lebewesen realisiert werden.
 
-  Je oefter ein Lebewesen als von einer Gilde schon befriedet wurde, desto
-  unwahrscheinlicher, dass es erneut darauf 'hereinfaellt'.
+         Standardmaessig funktioniert die Funktion wie folgt:
+   * Kommt der Versuch vom Spellcaster selbst, ist er immer erfolgreich.
+   * Kommt der Versuch von einem Teamkollegen, ist er immer erfolgreich.
+   * Hat das Lebewesen keine Gegner, ist der Versuch immer erfolglos.
+   In diesen Faellen erfolgt auch keine Erhoehung des Befriedezaehlers.
 
-BEMERKUNGEN:
-  *	Die Funktion kann auch ueberschrieben werden, um ein vom Magier
-    gewuenschtes Verhalten zu realisieren. Ein komplettes Abhaengen von
-    Befriedungen sollte dabei aber die Ausnahme sein!
-  * Diese Funktion verwaltet auch das P_PEACE_HISTORY, speziell die Reduktion
-    der Erfolgszaehler. Ueberschreibt man sie ohne das geerbte Pacify()
-    zu nutzen, wird P_PEACE_HISTORY nicht mehr verwaltet.
 
-RUECKGABEWERTE:
-    1 - das Lebewesen wurde erfolgreich befriedet..
-    0 - der Befriedeversuch ist gescheitert.
-    
-BEISPIELE:
-    Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
-    gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
-    (in Abhaengigkeit von eigener Intelligenz und vergangener erfolgreicher
-     Versuche)
- INT_ME  Erfolgswahrscheinlichkeiten je nach Anzahl erfolgreicher Versuche
-              1       2       3       4       5       6       7       8
-      0     280     240     200     160     120      80      40       0
-      2  233,33     200  166,67  133,33     100   66,67   33,33       0
-      4     200  171,43  142,86  114,29   85,71   57,14   28,57       0
-      6     175     150     125     100      75      50      25       0
-      8  155,56  133,33  111,11   88,89   66,67   44,44   22,22       0
-     10     140     120     100      80      60      40      20       0
-     12  127,27  109,09   90,91   72,73   54,55   36,36   18,18       0
-     14  116,67     100   83,33   66,67      50   33,33   16,67       0
-     16  107,69   92,31   76,92   61,54   46,15   30,77   15,38       0
-     18     100   85,71   71,43   57,14   42,86   28,57   14,29       0
-     20   93,33      80   66,67   53,33      40   26,67   13,33       0
-     22    87,5      75    62,5      50    37,5      25    12,5       0
-     24   82,35   70,59   58,82   47,06   35,29   23,53   11,76       0
-     26   77,78   66,67   55,56   44,44   33,33   22,22   11,11       0
-     28   73,68   63,16   52,63   42,11   31,58   21,05   10,53       0
-     30      70      60      50      40      30      20      10       0
-     32   66,67   57,14   47,62    38,1   28,57   19,05    9,52       0
-     34   63,64   54,55   45,45   36,36   27,27   18,18    9,09       0
-     35   62,22   53,33   44,44   35,56   26,67   17,78    8,89       0
-     36   60,87   52,17   43,48   34,78   26,09   17,39     8,7       0
-     38   58,33      50   41,67   33,33      25   16,67    8,33       0
-     40      56      48      40      32      24      16       8       0
-     42   53,85   46,15   38,46   30,77   23,08   15,38    7,69       0
-     44   51,85   44,44   37,04   29,63   22,22   14,81    7,41       0
-     46      50   42,86   35,71   28,57   21,43   14,29    7,14       0
-     48   48,28   41,38   34,48   27,59   20,69   13,79     6,9       0
-     50   46,67      40   33,33   26,67      20   13,33    6,67       0
-     52   45,16   38,71   32,26   25,81   19,35    12,9    6,45       0
-     54   43,75    37,5   31,25      25   18,75    12,5    6,25       0
-     56   42,42   36,36    30,3   24,24   18,18   12,12    6,06       0
-     58   41,18   35,29   29,41   23,53   17,65   11,76    5,88       0
-     60      40   34,29   28,57   22,86   17,14   11,43    5,71       0
-     62   38,89   33,33   27,78   22,22   16,67   11,11    5,56       0
-     64   37,84   32,43   27,03   21,62   16,22   10,81    5,41       0
-     66   36,84   31,58   26,32   21,05   15,79   10,53    5,26       0
-     68    35,9   30,77   25,64   20,51   15,38   10,26    5,13       0
-     70      35      30      25      20      15      10       5       0
-     72   34,15   29,27   24,39   19,51   14,63    9,76    4,88       0
-     74   33,33   28,57   23,81   19,05   14,29    9,52    4,76       0
-     76   32,56   27,91   23,26    18,6   13,95     9,3    4,65       0
-     78   31,82   27,27   22,73   18,18   13,64    9,09    4,55       0
-     80   31,11   26,67   22,22   17,78   13,33    8,89    4,44       0
-     82   30,43   26,09   21,74   17,39   13,04     8,7    4,35       0
-     84   29,79   25,53   21,28   17,02   12,77    8,51    4,26       0
-     86   29,17      25   20,83   16,67    12,5    8,33    4,17       0
-     88   28,57   24,49   20,41   16,33   12,24    8,16    4,08       0
-     90      28      24      20      16      12       8       4       0
-     92   27,45   23,53   19,61   15,69   11,76    7,84    3,92       0
-     94   26,92   23,08   19,23   15,38   11,54    7,69    3,85       0
-     96   26,42   22,64   18,87   15,09   11,32    7,55    3,77       0
-     98   25,93   22,22   18,52   14,81   11,11    7,41     3,7       0
-    100   25,45   21,82   18,18   14,55   10,91    7,27    3,64       0
+
+   In anderen Faellen wird die in P_PEACE_HISTORY fuer die Gilde des Casters
+   abgelegte Zahl erfolgreicher Befriedungen (ANZ), die Intelligenz des
+   Casters (INT_CASTER) und die Intelligenz des Lebenwesens selber (INT_ME)
+   ermittelt.
+   Anschliessend wird eine Wahrscheinlichkeit w ausgerechnet:
+
+
+
+     w = (INT_CASTER + 10 - ANZ*4) / (INT_ME + 10)
+
+
+
+   Hierbei gibt w die Chance auf eine erfolgreiche Befriedung an. Mittels einer
+   Zufallszahl wird bestimmt, ob der aktuelle Versuch erfolgreich ist. Falls
+   ja, wird der Zaehler fuer die Gilde des Casters in P_PEACE_HISTORY erhoeht.
+
+   Je oefter ein Lebewesen als von einer Gilde schon befriedet wurde, desto
+   unwahrscheinlicher, dass es erneut darauf 'hereinfaellt'.
+
+
+BEMERKUNGEN
+===========
+
+   *     Die Funktion kann auch ueberschrieben werden, um ein vom Magier
+     gewuenschtes Verhalten zu realisieren. Ein komplettes Abhaengen von
+     Befriedungen sollte dabei aber die Ausnahme sein!
+   * Diese Funktion verwaltet auch das P_PEACE_HISTORY, speziell die Reduktion
+     der Erfolgszaehler. Ueberschreibt man sie ohne das geerbte Pacify()
+     zu nutzen, wird P_PEACE_HISTORY nicht mehr verwaltet.
+
+
+RUECKGABEWERTE
+==============
+
+   1 - das Lebewesen wurde erfolgreich befriedet..
+   0 - der Befriedeversuch ist gescheitert.
+
+
+BEISPIELE
+=========
+
+      Angenommen, der Caster hat eine Intelligenz von 22. Die folgende Tabelle
+      gibt dann die Wahrscheinlichkeiten fuer eine erfolgreiche Befriedung an:
+      (in Abhaengigkeit von eigener Intelligenz und vergangener erfolgreicher
+       Versuche)
+   INT_ME  Erfolgswahrscheinlichkeiten je nach Anzahl erfolgreicher Versuche
+                1       2       3       4       5       6       7       8
+        0     280     240     200     160     120      80      40       0
+        2  233,33     200  166,67  133,33     100   66,67   33,33       0
+        4     200  171,43  142,86  114,29   85,71   57,14   28,57       0
+        6     175     150     125     100      75      50      25       0
+        8  155,56  133,33  111,11   88,89   66,67   44,44   22,22       0
+       10     140     120     100      80      60      40      20       0
+       12  127,27  109,09   90,91   72,73   54,55   36,36   18,18       0
+       14  116,67     100   83,33   66,67      50   33,33   16,67       0
+       16  107,69   92,31   76,92   61,54   46,15   30,77   15,38       0
+       18     100   85,71   71,43   57,14   42,86   28,57   14,29       0
+       20   93,33      80   66,67   53,33      40   26,67   13,33       0
+       22    87,5      75    62,5      50    37,5      25    12,5       0
+       24   82,35   70,59   58,82   47,06   35,29   23,53   11,76       0
+       26   77,78   66,67   55,56   44,44   33,33   22,22   11,11       0
+       28   73,68   63,16   52,63   42,11   31,58   21,05   10,53       0
+       30      70      60      50      40      30      20      10       0
+       32   66,67   57,14   47,62    38,1   28,57   19,05    9,52       0
+       34   63,64   54,55   45,45   36,36   27,27   18,18    9,09       0
+       35   62,22   53,33   44,44   35,56   26,67   17,78    8,89       0
+       36   60,87   52,17   43,48   34,78   26,09   17,39     8,7       0
+       38   58,33      50   41,67   33,33      25   16,67    8,33       0
+       40      56      48      40      32      24      16       8       0
+       42   53,85   46,15   38,46   30,77   23,08   15,38    7,69       0
+       44   51,85   44,44   37,04   29,63   22,22   14,81    7,41       0
+       46      50   42,86   35,71   28,57   21,43   14,29    7,14       0
+       48   48,28   41,38   34,48   27,59   20,69   13,79     6,9       0
+       50   46,67      40   33,33   26,67      20   13,33    6,67       0
+       52   45,16   38,71   32,26   25,81   19,35    12,9    6,45       0
+       54   43,75    37,5   31,25      25   18,75    12,5    6,25       0
+       56   42,42   36,36    30,3   24,24   18,18   12,12    6,06       0
+       58   41,18   35,29   29,41   23,53   17,65   11,76    5,88       0
+       60      40   34,29   28,57   22,86   17,14   11,43    5,71       0
+       62   38,89   33,33   27,78   22,22   16,67   11,11    5,56       0
+       64   37,84   32,43   27,03   21,62   16,22   10,81    5,41       0
+       66   36,84   31,58   26,32   21,05   15,79   10,53    5,26       0
+       68    35,9   30,77   25,64   20,51   15,38   10,26    5,13       0
+       70      35      30      25      20      15      10       5       0
+       72   34,15   29,27   24,39   19,51   14,63    9,76    4,88       0
+       74   33,33   28,57   23,81   19,05   14,29    9,52    4,76       0
+       76   32,56   27,91   23,26    18,6   13,95     9,3    4,65       0
+       78   31,82   27,27   22,73   18,18   13,64    9,09    4,55       0
+       80   31,11   26,67   22,22   17,78   13,33    8,89    4,44       0
+       82   30,43   26,09   21,74   17,39   13,04     8,7    4,35       0
+       84   29,79   25,53   21,28   17,02   12,77    8,51    4,26       0
+       86   29,17      25   20,83   16,67    12,5    8,33    4,17       0
+       88   28,57   24,49   20,41   16,33   12,24    8,16    4,08       0
+       90      28      24      20      16      12       8       4       0
+       92   27,45   23,53   19,61   15,69   11,76    7,84    3,92       0
+       94   26,92   23,08   19,23   15,38   11,54    7,69    3,85       0
+       96   26,42   22,64   18,87   15,09   11,32    7,55    3,77       0
+       98   25,93   22,22   18,52   14,81   11,11    7,41     3,7       0
+      100   25,45   21,82   18,18   14,55   10,91    7,27    3,64       0
+
 
 SIEHE AUCH
-        P_ACCEPT_PEACE, P_PEACE_HISTORY
+==========
+
+   P_ACCEPT_PEACE, P_PEACE_HISTORY
+
 
 LETZTE AENDERUNG
-07.06.2008, Zesstra
+================
 
+07.06.2008, Zesstra
diff --git a/doc/lfun/PayIn b/doc/lfun/PayIn
index 0714c53..35616de 100644
--- a/doc/lfun/PayIn
+++ b/doc/lfun/PayIn
@@ -1,47 +1,73 @@
+
 PayIn()
-FUNKTION:
-     varargs void PayIn(int amount, int percent);
+*******
 
-DEFINIERT IN:
-     /p/daemon/zentralbank.c
 
-ARGUMENTE:
-     int amount	-	einzuzahlender Betrag
-     int percent -	Bewertungsprozentsatz
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird Brutto amount Geld in die Bank eingezahlt. Der Prozentsatz legt
-     fest, wieviel tatsaechlich gutgeschrieben wird:
-     Gutschrift = amount*percent/100
+   varargs void PayIn(int amount, int percent);
 
-     Wird percent nicht angegeben, dann wird der derzeitige Bankbewertungs-
-     massstab fuer Geld angenommen.
 
-BEISPIELE:
-     #include <bank.h>
-     ...
-     AddCmd("spende",#'action_spende,
-	    "Was willst du spenden?");
-     ...
-     int action_spende(string str, extra *o) {
-      int i;
-      if(sscanf("%d muenze",i)==1 && i>0)
-       if(this_player()->QueryMoney(i) && this_player()->AddMoney(-i)) {
-        write("Du spendest "+i+" Muenzen.\n");
-	say(this_player()->Name(WER)+" spendet "+i+" Muenzen.\n");
-	ZENTRALBANK->PayIn(i);
-	
-       } else
-        write("Soviel hast du nicht dabei!\n");
-      ...
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
-     an anderen Stellen Geld erzeugt wird.
+   /p/daemon/zentralbank.c
 
-SIEHE AUCH:
-     Geldhandling:	AddMoney(L), QueryMoney(L)
-     Zentralbank:	WithDraw(L), _query_current_money(L)
-     Sonstiges:		/items/money.c, /sys/bank.h
+
+ARGUMENTE
+=========
+
+   int amount -       einzuzahlender Betrag
+   int percent -      Bewertungsprozentsatz
+
+
+BESCHREIBUNG
+============
+
+   Es wird Brutto amount Geld in die Bank eingezahlt. Der Prozentsatz legt
+   fest, wieviel tatsaechlich gutgeschrieben wird:
+   Gutschrift = amount*percent/100
+
+   Wird percent nicht angegeben, dann wird der derzeitige Bankbewertungs-
+   massstab fuer Geld angenommen.
+
+
+BEISPIELE
+=========
+
+   #include <bank.h>
+   ...
+   AddCmd("spende",#'action_spende,
+          "Was willst du spenden?");
+   ...
+   int action_spende(string str, extra *o) {
+    int i;
+    if(sscanf("%d muenze",i)==1 && i>0)
+     if(this_player()->QueryMoney(i) && this_player()->AddMoney(-i)) {
+      write("Du spendest "+i+" Muenzen.\n");
+      say(this_player()->Name(WER)+" spendet "+i+" Muenzen.\n");
+      ZENTRALBANK->PayIn(i);
+
+
+
+     } else
+      write("Soviel hast du nicht dabei!\n");
+    ...
+
+
+BEMERKUNGEN
+===========
+
+   Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
+   an anderen Stellen Geld erzeugt wird.
+
+
+SIEHE AUCH
+==========
+
+   Geldhandling:      AddMoney(L), QueryMoney(L)
+   Zentralbank:       WithDraw(L), _query_current_money(L)
+   Sonstiges:         /items/money.c, /sys/bank.h
 
 27. Apr 2004 Gloinson
diff --git a/doc/lfun/PlayerQuit b/doc/lfun/PlayerQuit
index 22e3d6e..0eb8fbf 100644
--- a/doc/lfun/PlayerQuit
+++ b/doc/lfun/PlayerQuit
@@ -1,20 +1,37 @@
+
 PlayerQuit()
+************
 
-FUNKTION:
-    void PlayerQuit(object pl);
 
-GERUFEN VON:
-    /std/player/base.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object pl
-      Spieler, der Verbindung beendet
+   void PlayerQuit(object pl);
 
-BESCHREIBUNG:
-    Wird im environment() gerufen, wenn der Spieler das MUD mit "ende"
-    verlaesst.
 
-SIEHE AUCH:
-    BecomesNetAlive(), BecomesNetDead()
-    
-24. Aug 2011 Gloinson
\ No newline at end of file
+GERUFEN VON
+===========
+
+   /std/player/base.c
+
+
+ARGUMENTE
+=========
+
+   object pl
+     Spieler, der Verbindung beendet
+
+
+BESCHREIBUNG
+============
+
+   Wird im environment() gerufen, wenn der Spieler das MUD mit "ende"
+   verlaesst.
+
+
+SIEHE AUCH
+==========
+
+   BecomesNetAlive(), BecomesNetDead()
+
+24. Aug 2011 Gloinson
diff --git a/doc/lfun/PresentEnemies b/doc/lfun/PresentEnemies
index 9c31efe..12ac650 100644
--- a/doc/lfun/PresentEnemies
+++ b/doc/lfun/PresentEnemies
@@ -1,71 +1,95 @@
-FUNKTION:
-	object *PresentEnemies();
 
-DEFINIERT IN:
-	/std/living/combat.c
+PresentEnemies()
+****************
 
-ARGUMENTE:
-	keine
 
-RUeCKGABEWERT:
-	anwesende Feinde
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Diese Funktion liefert genau die Feinde zurueck, die sich derzeit im
-	selben Raum befinden. Die Feinde unterliegen hierbei noch gewissen
-	Einschraenkungen:
-	  (1) Sie duerfen als NPC nicht gestorben sein, das heisst, sie
-	      muessen als Objekt noch existieren.
-	  (2) Sie duerfen als Spieler nicht gestorben sein, das heisst, sie
-	      duerfen keine Geister sein (Property P_GHOST nicht gesetzt).
-	  (3) Sie muessen angreifbar sein, das heisst, die Property
-	      P_NO_ATTACK darf nicht gesetzt sein.
-	Wird eine dieser Bedingungen verletzt, so wird der Gegner aus der
-	internen Gegnerliste entfernt. Zusaetzlich gilt:
-	  Netztote werden nur als Gegner erkannt, wenn keine anderen Gegner
-	  zur Verfuegung stehen.
+   object *PresentEnemies();
 
-BEISPIEL:
-	Im Folgenden erblinden alle Gegner im Raum:
-	  string blindThemAll()
-	  { ob*livList;
-	    if(!livList=PresentEnemies())
-	      return break_string(
-	 "Mist...keiner da, der blind werden moechte.",77,
-	 Name(WER)+" grummelt: ");
-	    for(i=sizeof(livList);i--;)
-	    { if(livList[i]->QueryProp(P_BLIND))
-	      { tell_object(this_object(),break_string(
-	 livList[i]->Name(WER)+" ist schon blind.",77));
-	        continue;
-	      }
-	      tell_object(this_object(),break_string(
-	 "Du kratzt "+livList[i]->name(WEM)+" die Augen aus.",77));
-	      tell_object(livList[i],break_string(
-	 Name(WER)+" kratzt Dir die Augen aus!",77));
-	      tell_room(environment(this_object()),break_string(
-	 Name(WER)+" kratzt "+livList[i]->name(WEM)
-	+" die Augen aus.",77),({this_object(),livList[i]}));
-	      livList[i]->SetProp(P_BLIND,1);
-	    }
-	    return"";
-	  }
-	Aufgerufen wird das ganze am Besten in einem Chat:
-	  void create()
-	  { ::create();
-	    ...
-	    SetProp(P_CHAT_CHANCE,10);
-	    SetChats(20,({break_string(
-	 "Nicht angreifen, sonst wirst Du noch blind!",77,
-	 Name(WER)+" bruellt: "),
-	                  "@@blindThemAll@@"}));
-	  }
-	Natuerlich sind auch noch mehr Funktionen und Meldungen als Chats
-	moeglich: Die zwei im Beispiel sind im Normalfall etwas wenig.
 
-SIEHE AUCH:
-	SelectEnemy(), QueryEnemies(), IsEnemy(), P_GHOST, P_NO_ATTACK,
-	SetChats, P_CHAT_CHANCE
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUeCKGABEWERT
+=============
+
+   anwesende Feinde
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert genau die Feinde zurueck, die sich derzeit im
+   selben Raum befinden. Die Feinde unterliegen hierbei noch gewissen
+   Einschraenkungen:
+     (1) Sie duerfen als NPC nicht gestorben sein, das heisst, sie
+         muessen als Objekt noch existieren.
+     (2) Sie duerfen als Spieler nicht gestorben sein, das heisst, sie
+         duerfen keine Geister sein (Property P_GHOST nicht gesetzt).
+     (3) Sie muessen angreifbar sein, das heisst, die Property
+         P_NO_ATTACK darf nicht gesetzt sein.
+   Wird eine dieser Bedingungen verletzt, so wird der Gegner aus der
+   internen Gegnerliste entfernt. Zusaetzlich gilt:
+     Netztote werden nur als Gegner erkannt, wenn keine anderen Gegner
+     zur Verfuegung stehen.
+
+
+BEISPIEL
+========
+
+   Im Folgenden erblinden alle Gegner im Raum:
+     string blindThemAll()
+     { ob*livList;
+       if(!livList=PresentEnemies())
+         return break_string(
+    "Mist...keiner da, der blind werden moechte.",77,
+    Name(WER)+" grummelt: ");
+       for(i=sizeof(livList);i--;)
+       { if(livList[i]->QueryProp(P_BLIND))
+         { tell_object(this_object(),break_string(
+    livList[i]->Name(WER)+" ist schon blind.",77));
+           continue;
+         }
+         tell_object(this_object(),break_string(
+    "Du kratzt "+livList[i]->name(WEM)+" die Augen aus.",77));
+         tell_object(livList[i],break_string(
+    Name(WER)+" kratzt Dir die Augen aus!",77));
+         tell_room(environment(this_object()),break_string(
+    Name(WER)+" kratzt "+livList[i]->name(WEM)
+   +" die Augen aus.",77),({this_object(),livList[i]}));
+         livList[i]->SetProp(P_BLIND,1);
+       }
+       return"";
+     }
+   Aufgerufen wird das ganze am Besten in einem Chat:
+     void create()
+     { ::create();
+       ...
+       SetProp(P_CHAT_CHANCE,10);
+       SetChats(20,({break_string(
+    "Nicht angreifen, sonst wirst Du noch blind!",77,
+    Name(WER)+" bruellt: "),
+                     "@@blindThemAll@@"}));
+     }
+   Natuerlich sind auch noch mehr Funktionen und Meldungen als Chats
+   moeglich: Die zwei im Beispiel sind im Normalfall etwas wenig.
+
+
+SIEHE AUCH
+==========
+
+   SelectEnemy(), QueryEnemies(), IsEnemy(), P_GHOST, P_NO_ATTACK,
+   SetChats, P_CHAT_CHANCE
+
 Last modified: Thu May 27 15:01:48 1999 by Patryn
diff --git a/doc/lfun/PresentEnemyRows b/doc/lfun/PresentEnemyRows
index 339642c..003d6c3 100644
--- a/doc/lfun/PresentEnemyRows
+++ b/doc/lfun/PresentEnemyRows
@@ -1,40 +1,60 @@
 
 PresentEnemyRows()
+******************
 
 
-FUNKTION:
-        varargs mixed *PresentEnemyRows(object *here)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs mixed *PresentEnemyRows(object *here)
 
-ARGUMENTE:
-        Rueckgabewert von PresentEnemies kann uebergeben werden.
 
-BESCHREIBUNG:
-        Ergibt die feindlichen Reihen.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Ein Array, bestehend aus MAX_TEAMROWS Arrays mit den Objekten
-        der anwesenden Feinde.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Jede Reihe ist Summe der entsprechenden Reihen der
-        anwesenden Teams.
-        Feinde, die in keinem Team sind, stehen im ersten Array.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentTeamPosition,
-                    SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   Rueckgabewert von PresentEnemies kann uebergeben werden.
+
+
+BESCHREIBUNG
+============
+
+   Ergibt die feindlichen Reihen.
+
+
+RUECKGABEWERT
+=============
+
+   Ein Array, bestehend aus MAX_TEAMROWS Arrays mit den Objekten
+   der anwesenden Feinde.
+
+
+BEMERKUNGEN
+===========
+
+   Jede Reihe ist Summe der entsprechenden Reihen der
+   anwesenden Teams.
+   Feinde, die in keinem Team sind, stehen im ersten Array.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentTeamPosition,
+               SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/PresentPosition b/doc/lfun/PresentPosition
index ea765cf..c94d129 100644
--- a/doc/lfun/PresentPosition
+++ b/doc/lfun/PresentPosition
@@ -1,38 +1,58 @@
 
 PresentPosition()
+*****************
 
 
-FUNKTION:
-        varargs int PresentPosition(mixed pmap)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs int PresentPosition(mixed pmap)
 
-ARGUMENTE:
-        Rueckgabewert von PresentTeamRows() oder PresentTeamPositions()
-        kann uebergeben werden.
 
-BESCHREIBUNG:
-        Ergibt die Nummer der Reihe, in der der Spieler gerade steht.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Reihennummer im Bereich von 1 bis TEAM_MAXROWS.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Ist ein Spieler in keinem Team, so steht er automatisch in Reihe 1.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentRows, PresentEnemyRows, PresentTeamPosition,
-                    SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   Rueckgabewert von PresentTeamRows() oder PresentTeamPositions()
+   kann uebergeben werden.
+
+
+BESCHREIBUNG
+============
+
+   Ergibt die Nummer der Reihe, in der der Spieler gerade steht.
+
+
+RUECKGABEWERT
+=============
+
+   Reihennummer im Bereich von 1 bis TEAM_MAXROWS.
+
+
+BEMERKUNGEN
+===========
+
+   Ist ein Spieler in keinem Team, so steht er automatisch in Reihe 1.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentRows, PresentEnemyRows, PresentTeamPosition,
+               SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/PresentRows b/doc/lfun/PresentRows
index e8c854a..37e3ab8 100644
--- a/doc/lfun/PresentRows
+++ b/doc/lfun/PresentRows
@@ -1,88 +1,120 @@
 
 PresentRows()
+*************
 
 
-FUNKTION:
-    mixed *PresentRows(object env);
+FUNKTION
+========
 
-DEFINIERT IN:
-    TEAM_OBJECT (s. <living/team.h>)
+   mixed *PresentRows(object env);
 
-ARGUMENTE:
-    object env
-        Das Environment des gewuenschten Objektes.
 
-BESCHREIBUNG:
-    Mit dieser Funktion bekommt man die aktuellen Teamreihen, die im Argument
-    env anwesend sind, des Teams zurueckgegeben. Ist env kein Objekt, so
-    wird environment(this_player()) als solches angenommen.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    Es wird ein mixed-Array zurueckgegeben, dabei sind die einzelnen Reihen
-    selbst wiederum Arrays mit den Spielerobjekten.
+   TEAM_OBJECT (s. <living/team.h>)
 
-BEISPIEL:
 
-    Ein NPC im Kampf laesst eine Feuerwalze auf ein Team los, welche aber nur
-    Spieler in der ersten und zweiten Teamreihe Schaden zufuegen soll.
+ARGUMENTE
+=========
 
-    void Attack( object enemy )
-    {
-     ...
+   object env
+       Das Environment des gewuenschten Objektes.
 
-     object team = enemy->QueryProp(P_TEAM);
 
-     if ( objectp(team) )
-      {
-       mixed teamrows = team->PresentRows(enemy);
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion bekommt man die aktuellen Teamreihen, die im Argument
+   env anwesend sind, des Teams zurueckgegeben. Ist env kein Objekt, so
+   wird environment(this_player()) als solches angenommen.
+
+
+RUECKGABEWERT
+=============
+
+   Es wird ein mixed-Array zurueckgegeben, dabei sind die einzelnen Reihen
+   selbst wiederum Arrays mit den Spielerobjekten.
+
+
+BEISPIEL
+========
+
+   Ein NPC im Kampf laesst eine Feuerwalze auf ein Team los, welche aber nur
+   Spieler in der ersten und zweiten Teamreihe Schaden zufuegen soll.
+
+   void Attack( object enemy )
+   {
+    ...
+
+    object team = enemy->QueryProp(P_TEAM);
+
+    if ( objectp(team) )
+     {
+      mixed teamrows = team->PresentRows(enemy);
 
 //  Inhalt von "teamrows" zu diesem Zeitpunkt:
 
 //  ({ ({[/dwarf:hauweg]}),({}),({[/elf:spitzohr]}),({}),({}),({}) })
 
-//  In der Umgebung von Zwerg Hauweg steht also noch Elf Spitzohr, und zwar
-//  in der dritten Teamreihe (der hat Glueck gehabt).
-//  Wenn dem Team noch mehr Spieler angehoeren, befinden sie sich gerade
-//  nicht in der Umgebung (sprich im selben Raum) wie Hauweg.
+//  In der Umgebung von Zwerg Hauweg steht also noch Elf Spitzohr, und
+zwar //  in der dritten Teamreihe (der hat Glueck gehabt). //  Wenn
+dem Team noch mehr Spieler angehoeren, befinden sie sich gerade //
+nicht in der Umgebung (sprich im selben Raum) wie Hauweg.
 
-       foreach ( i : 2 )
-        {
-         foreach ( object pl : teamrows[i] )
-          {
-           tell_object(pl,"Der Feuerteufel laesst eine Feuerwalze auf Dich "
-               "und Dein Team los.\n");
+            foreach ( i : 2 )
+               {
+                  foreach ( object pl : teamrows[i] )
+                     {
+                        tell_object(pl,"Der Feuerteufel laesst eine
+                        Feuerwalze auf Dich "
+                           "und Dein Team los.n");
 
-           pl->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAGE:1]),TO);
-          }
-        }
-      }
-     else
-      {
-       tell_object(enemy,"Der Feuerteufel laesst eine Feuerwalze auf Dich "
-           "los.\n");
+                        pl->Defend(200+random(200),({DT_FIRE}),([SP_S
+                        HOW_DAMAGE:1]),TO);
 
-       enemy->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAGE:1]),TO);
-      }
+                     }
 
-     ...
-    }
+               }
 
-BEMERKUNG:
-    Man beachte, dass das erste Argument (also Argument 0) die erste
-    Teamreihe ist.
+         }
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentEnemyRows, PresentTeamPosition,
-                    SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+      else
+         {
+            tell_object(enemy,"Der Feuerteufel laesst eine Feuerwalze
+            auf Dich "
+               "los.n");
 
-----------------------------------------------------------------------------
+            enemy->Defend(200+random(200),({DT_FIRE}),([SP_SHOW_DAMAG
+            E:1]),TO);
+
+         }
+
+      ...
+
+   }
+
+
+BEMERKUNG
+=========
+
+   Man beachte, dass das erste Argument (also Argument 0) die erste
+   Teamreihe ist.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentEnemyRows, PresentTeamPosition,
+               SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/PresentTeamPositions b/doc/lfun/PresentTeamPositions
index 76adc17..3af354b 100644
--- a/doc/lfun/PresentTeamPositions
+++ b/doc/lfun/PresentTeamPositions
@@ -1,40 +1,60 @@
 
 PresentTeamPositions()
+**********************
 
 
-FUNKTION:
-        varargs mapping PresentTeamPositions(mixed pmap)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs mapping PresentTeamPositions(mixed pmap)
 
-ARGUMENTE:
-        Rueckgabewert von PresentTeamRows() kann uebergeben werden.
 
-BESCHREIBUNG:
-        Ermittelt die Reihennummern aller anwesender Teammitglieder.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Ein Mapping mit den Reihennummern (von 1 bis MAX_TEAMROWS)
-        der anwesenden Teammitglieder.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Kann auch zur Konvertierung anderer Kampfreihen-Arrays in
-        ein Positions-Mapping verwendet werden.
-        Ist der Spieler in keinem Team, so steht er in Reihe 1.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   Rueckgabewert von PresentTeamRows() kann uebergeben werden.
+
+
+BESCHREIBUNG
+============
+
+   Ermittelt die Reihennummern aller anwesender Teammitglieder.
+
+
+RUECKGABEWERT
+=============
+
+   Ein Mapping mit den Reihennummern (von 1 bis MAX_TEAMROWS)
+   der anwesenden Teammitglieder.
+
+
+BEMERKUNGEN
+===========
+
+   Kann auch zur Konvertierung anderer Kampfreihen-Arrays in
+   ein Positions-Mapping verwendet werden.
+   Ist der Spieler in keinem Team, so steht er in Reihe 1.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/PresentTeamRows b/doc/lfun/PresentTeamRows
index 38bfa7e..7875918 100644
--- a/doc/lfun/PresentTeamRows
+++ b/doc/lfun/PresentTeamRows
@@ -1,24 +1,47 @@
+
 PresentTeamRows()
+*****************
 
-FUNKTION:
-	mixed *PresentTeamRows()
 
-DEFINIERT IN:
-	/std/living/team.c
+FUNKTION
+========
 
-ARGUMENTE:
-	keine
+   mixed *PresentTeamRows()
 
-BESCHREIBUNG:
-	Ergibt die Reihen mit den anwesenden Teammitgliedern.
 
-RUECKGABEWERT:
-	Ein Array bestehend aus MAX_TEAMROWS Arrays mit den Objekten
-        der anwesenden Teammitglieder.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-	Wenn der Spieler in keinem Team ist, enthaelt das erste Array
-	nur den Spieler und die anderen Arrays sind leer.
+   /std/living/team.c
 
-SIEHE AUCH:
-	teams
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Ergibt die Reihen mit den anwesenden Teammitgliedern.
+
+
+RUECKGABEWERT
+=============
+
+   Ein Array bestehend aus MAX_TEAMROWS Arrays mit den Objekten
+   der anwesenden Teammitglieder.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn der Spieler in keinem Team ist, enthaelt das erste Array
+   nur den Spieler und die anderen Arrays sind leer.
+
+
+SIEHE AUCH
+==========
+
+   teams
diff --git a/doc/lfun/PreventFollow b/doc/lfun/PreventFollow
index 100f92d..c3de6b1 100644
--- a/doc/lfun/PreventFollow
+++ b/doc/lfun/PreventFollow
@@ -1,49 +1,72 @@
+
 PreventFollow()
+***************
 
-FUNKTION:
-  int PreventFollow(object dest)
 
-ARGUMENTE:
-  dest: Zielobjekt, in das der Verfolgte bewegt werden soll.
+FUNKTION
+========
 
-FUNKTION:
-  In jedem Verfolger, der mit AddPursuer in die Liste der Verfolger 
-  eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die Funktion
-  PreventFollow mit dem Zielobjekt als Argument aufgerufen.
+   int PreventFollow(object dest)
 
-RUECKGABEWERT:
-  0: Verfolger darf in das Zielobjekt folgen
-  1: Verfolger darf in dieses Zielobjekt nicht folgen
-     (Verfolgung bleibt weiterhin aktiv)
-  2: Verfolger darf in dieses Zielobjekt nicht folgen
-     (Verfolgung wird abgebrochen und Verfolger aus der Verfolgerliste
-      ausgetragen)
 
-BEMERKUNG:
-  Durch PreventFollow kann der raeumliche Bereich, in dem verfolgt werden
-  darf, eingeschraenkt werden.
+ARGUMENTE
+=========
 
-BEISPIELE:
-  Man moechte, dass ein NPC auf einer Insel nicht mit dem Spieler in das
-  Boot steigt, um mit dem Spieler zusammen von der Insel herunterzukommen.
+   dest: Zielobjekt, in das der Verfolgte bewegt werden soll.
 
-  #define PATH(x) ("/d/.../.../mein/pfad/+(x)")                           
 
-  ...                                          
+FUNKTION
+========
 
-  int PreventFollow(object boot)                                           
-   {
-    if ( object_name(boot)[0..strlen(PATH("boot"))-1] == PATH("boot") )
-     return 1;
-   }                                                                         
+   In jedem Verfolger, der mit AddPursuer in die Liste der Verfolger
+   eingetragen wurde, wird vor dem Bewegen in das Zielobjekt die Funktion
+   PreventFollow mit dem Zielobjekt als Argument aufgerufen.
 
-  Diese Funktions-Definition ist sehr flexibel, denn sie erlaubt sowohl
-  spaetere Pfadanpassung als auch mehrere Boote.
-  Da ueber die Funktion strlen() nur bis zum letzten Buchstaben des    
-  angegebenen Strings getestet wird, wird also gleichzeitig auch auf          
-  boot[1], boot[2] usw. getestet.
 
-SIEHE AUCH:
-  "AddPursuer", "RemovePursuer"
-----------------------------------------------------------------------------
-Last modified: Tue Jun 10 13:59:30 2003 by Gabylon
\ No newline at end of file
+RUECKGABEWERT
+=============
+
+   0: Verfolger darf in das Zielobjekt folgen
+   1: Verfolger darf in dieses Zielobjekt nicht folgen
+      (Verfolgung bleibt weiterhin aktiv)
+   2: Verfolger darf in dieses Zielobjekt nicht folgen
+      (Verfolgung wird abgebrochen und Verfolger aus der Verfolgerliste
+       ausgetragen)
+
+
+BEMERKUNG
+=========
+
+   Durch PreventFollow kann der raeumliche Bereich, in dem verfolgt werden
+   darf, eingeschraenkt werden.
+
+
+BEISPIELE
+=========
+
+   Man moechte, dass ein NPC auf einer Insel nicht mit dem Spieler in das
+   Boot steigt, um mit dem Spieler zusammen von der Insel herunterzukommen.
+
+   #define PATH(x) ("/d/.../.../mein/pfad/+(x)")
+
+   ...
+
+   int PreventFollow(object boot)
+    {
+     if ( object_name(boot)[0..strlen(PATH("boot"))-1] == PATH("boot") )
+      return 1;
+    }
+
+   Diese Funktions-Definition ist sehr flexibel, denn sie erlaubt sowohl
+   spaetere Pfadanpassung als auch mehrere Boote.
+   Da ueber die Funktion strlen() nur bis zum letzten Buchstaben des
+   angegebenen Strings getestet wird, wird also gleichzeitig auch auf
+   boot[1], boot[2] usw. getestet.
+
+
+SIEHE AUCH
+==========
+
+   "AddPursuer", "RemovePursuer"
+
+Last modified: Tue Jun 10 13:59:30 2003 by Gabylon
diff --git a/doc/lfun/PreventInsert b/doc/lfun/PreventInsert
index 55c1533..3635142 100644
--- a/doc/lfun/PreventInsert
+++ b/doc/lfun/PreventInsert
@@ -1,46 +1,71 @@
+
 PreventInsert()
+***************
 
-FUNKTION:
-     int PreventInsert(object ob);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob
-          Das Objekt, das in den Behaelter eingefuegt werden soll.
+   int PreventInsert(object ob);
 
-BESCHREIBUNG:
-     Mit dieser Funktion kann ein Behaelter pruefen, ob er das Objekt ob
-     aufnehmen moechte oder nicht.
 
-RUeCKGABEWERT:
-     0, wenn das Objekt aufgenommen werden kann; ein Wert groesser als 0
-     zeigt an, dass das Objekt nicht aufgenommen werden soll.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventInsert() zwar
-     aufgerufen, das Objekt wird jedoch auf jeden Fall in den Behaelter
-     bewegt, unabhaengig vom Rueckgabewert!
+   /std/container/restrictions.c
 
-BEISPIELE:
-     Um zu verhindern, dass man Geld in einen Behaelter stecken kann, sollte
-     man wie folgt vorgehen:
 
-     varargs int PreventInsert(object ob)
-     {
-       // Wenn es Geld ist, erheben wir sofort Einspruch
-       if (ob->id("geld"))
-         return 1;
-       // Ansonsten koennte ein ererbtes Objekt noch Einspruch erheben!
-       else
-         return ::PreventInsert(ob);
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
-     PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-     PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+   ob
+        Das Objekt, das in den Behaelter eingefuegt werden soll.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann ein Behaelter pruefen, ob er das Objekt ob
+   aufnehmen moechte oder nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Objekt aufgenommen werden kann; ein Wert groesser als 0
+   zeigt an, dass das Objekt nicht aufgenommen werden soll.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventInsert() zwar
+   aufgerufen, das Objekt wird jedoch auf jeden Fall in den Behaelter
+   bewegt, unabhaengig vom Rueckgabewert!
+
+
+BEISPIELE
+=========
+
+   Um zu verhindern, dass man Geld in einen Behaelter stecken kann, sollte
+   man wie folgt vorgehen:
+
+   varargs int PreventInsert(object ob)
+   {
+     // Wenn es Geld ist, erheben wir sofort Einspruch
+     if (ob->id("geld"))
+       return 1;
+     // Ansonsten koennte ein ererbtes Objekt noch Einspruch erheben!
+     else
+       return ::PreventInsert(ob);
+   }
+
+
+SIEHE AUCH
+==========
+
+   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
+   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
+   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+
 Last modified: Sat Dec 18 02:00:00 1999 by Tiamak
diff --git a/doc/lfun/PreventInsertLiving b/doc/lfun/PreventInsertLiving
index 78f431f..fbde29f 100644
--- a/doc/lfun/PreventInsertLiving
+++ b/doc/lfun/PreventInsertLiving
@@ -1,35 +1,56 @@
+
 PreventInsertLiving()
-
-FUNKTION:
-     int PreventInsertLiving(object ob);
-
-DEFINIERT IN:
-     /std/container/restrictions.c
-
-ARGUMENTE:
-     ob
-          Das Living, das in den Behaelter eingefuegt werden soll.
-
-BESCHREIBUNG:
-     Mit dieser Funktion kann ein Behaelter pruefen, ob er das Living ob
-     aufnehmen moechte oder nicht.
-
-RUeCKGABEWERT:
-     0, wenn das Living aufgenommen werden kann; ein Wert groesser als 0
-     zeigt an, dass das Living nicht aufgenommen werden soll.
-
-BEMERKUNGEN:
-     Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventInsertLiving() 
-     zwar aufgerufen, das Living wird jedoch auf jeden Fall in den Behaelter
-     bewegt, unabhaengig vom Rueckgabewert!
+*********************
 
 
-SIEHE AUCH:
-     PreventLeaveLiving(), /std/container/restrictions.c,
-     PreventMove(), PreventInsert(), PreventLeave(),
-     NotifyMove(), NotifyInsert(), NotifyLeave(), NotifyRemove(),
-     move(), init(), exit(),
-     InitAttack(), ExitAttack()
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   int PreventInsertLiving(object ob);
+
+
+DEFINIERT IN
+============
+
+   /std/container/restrictions.c
+
+
+ARGUMENTE
+=========
+
+   ob
+        Das Living, das in den Behaelter eingefuegt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann ein Behaelter pruefen, ob er das Living ob
+   aufnehmen moechte oder nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Living aufgenommen werden kann; ein Wert groesser als 0
+   zeigt an, dass das Living nicht aufgenommen werden soll.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventInsertLiving()
+   zwar aufgerufen, das Living wird jedoch auf jeden Fall in den Behaelter
+   bewegt, unabhaengig vom Rueckgabewert!
+
+
+SIEHE AUCH
+==========
+
+   PreventLeaveLiving(), /std/container/restrictions.c,
+   PreventMove(), PreventInsert(), PreventLeave(),
+   NotifyMove(), NotifyInsert(), NotifyLeave(), NotifyRemove(),
+   move(), init(), exit(),
+   InitAttack(), ExitAttack()
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/PreventLeave b/doc/lfun/PreventLeave
index 85d46a3..24c33d2 100644
--- a/doc/lfun/PreventLeave
+++ b/doc/lfun/PreventLeave
@@ -1,35 +1,57 @@
+
 PreventLeave()
+**************
 
-FUNKTION:
-     int PreventLeave(object ob, mixed dest);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob
-          Das Objekt, das aus dem Behaelter genommen werden soll.
-     dest 
-          Das Ziel in das das Objekt ob bewegt werden soll.
+   int PreventLeave(object ob, mixed dest);
 
-BESCHREIBUNG:
-     Mit dieser Funktion kann ein Behaelter pruefen, ob er das Objekt ob
-     sich bewegen lassen moechte oder nicht.
 
-RUeCKGABEWERT:
-     0, wenn das Objekt bewegt werden kann; ein Wert groesser als 0
-     zeigt an, dass das Objekt nicht bewegt werden soll.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventLeave() zwar
-     aufgerufen, das Objekt wird jedoch auf jeden Fall aus dem Behaelter
-     bewegt, unabhaengig vom Rueckgabewert!
+   /std/container/restrictions.c
 
-SIEHE AUCH:
-     PreventInsert(), NotifyInsert(), NotifyLeave(),
-     MayAddWeight(), move(), /std/container/restrictions.c
-     PreventLeaveLiving(), PreventInsertLiving(), PreventMove(),
-     NotifyMove(), MayAddObject(), NotifyRemove()
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   ob
+        Das Objekt, das aus dem Behaelter genommen werden soll.
+   dest
+        Das Ziel in das das Objekt ob bewegt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann ein Behaelter pruefen, ob er das Objekt ob
+   sich bewegen lassen moechte oder nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Objekt bewegt werden kann; ein Wert groesser als 0
+   zeigt an, dass das Objekt nicht bewegt werden soll.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventLeave() zwar
+   aufgerufen, das Objekt wird jedoch auf jeden Fall aus dem Behaelter
+   bewegt, unabhaengig vom Rueckgabewert!
+
+
+SIEHE AUCH
+==========
+
+   PreventInsert(), NotifyInsert(), NotifyLeave(),
+   MayAddWeight(), move(), /std/container/restrictions.c
+   PreventLeaveLiving(), PreventInsertLiving(), PreventMove(),
+   NotifyMove(), MayAddObject(), NotifyRemove()
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/PreventLeaveLiving b/doc/lfun/PreventLeaveLiving
index 4d13b54..20a5844 100644
--- a/doc/lfun/PreventLeaveLiving
+++ b/doc/lfun/PreventLeaveLiving
@@ -1,35 +1,58 @@
+
 PreventLeaveLiving()
+********************
 
-FUNKTION:
-     int PreventLeaveLiving(object ob, mixed dest);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob
-          Das Living, das aus dem Behaelter genommen werden soll.
-     dest 
-          Das Ziel in das das Living ob bewegt werden soll.
+   int PreventLeaveLiving(object ob, mixed dest);
 
-BESCHREIBUNG:
-     Mit dieser Funktion kann ein Behaelter pruefen, ob er das Living ob
-     sich bewegen lassen moechte oder nicht.
 
-RUeCKGABEWERT:
-     0, wenn das Living bewegt werden kann; ein Wert groesser als 0
-     zeigt an, dass das Living nicht bewegt werden soll.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventLeave() zwar
-     aufgerufen, das Living wird jedoch auf jeden Fall aus dem Behaelter
-     bewegt, unabhaengig vom Rueckgabewert!
+   /std/container/restrictions.c
 
-SIEHE AUCH:
-     PreventInsertLiving(), /std/container/restrictions.c
-     PreventMove(), PreventLeave(), PreventInsert(),
-     NotifyMove(), NotifyLeave(), NotifyInsert(), NotifyRemove(),
-     move(), exit(), init(),
-     InitAttack, ExitAttack()
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   ob
+        Das Living, das aus dem Behaelter genommen werden soll.
+   dest
+        Das Ziel in das das Living ob bewegt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann ein Behaelter pruefen, ob er das Living ob
+   sich bewegen lassen moechte oder nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Living bewegt werden kann; ein Wert groesser als 0
+   zeigt an, dass das Living nicht bewegt werden soll.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventLeave() zwar
+   aufgerufen, das Living wird jedoch auf jeden Fall aus dem Behaelter
+   bewegt, unabhaengig vom Rueckgabewert!
+
+
+SIEHE AUCH
+==========
+
+   PreventInsertLiving(), /std/container/restrictions.c
+   PreventMove(), PreventLeave(), PreventInsert(),
+   NotifyMove(), NotifyLeave(), NotifyInsert(), NotifyRemove(),
+   move(), exit(), init(),
+   InitAttack, ExitAttack()
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/PreventMove b/doc/lfun/PreventMove
index 798ee0b..920372d 100644
--- a/doc/lfun/PreventMove
+++ b/doc/lfun/PreventMove
@@ -1,81 +1,109 @@
+
+PreventMove()
+*************
+
+
 PreventInsert()
+===============
 
-FUNKTION:
-     protected int PreventMove(object dest, object oldenv, int method);
 
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
-     /std/player/moving.c
+FUNKTION
+========
 
-ARGUMENTE:
-     dest
-          Das Ziel des Moves
-     oldenv
-          Das (Noch-)Environment des Objekts
-     method
-          Die Move-Methode(n), mit der/denen bewegt werden soll
+   protected int PreventMove(object dest, object oldenv, int method);
 
-BESCHREIBUNG:
-     Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
-     bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
-     M_NOCHECK die meisten Pruefungen ab).
-     Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
-     das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
-     PreventLeave() geprueft.
-     Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
-     PreventLeaveLiving/PreventInsertLiving() ausgewertet.
-     Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
-     enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
 
-RUeCKGABEWERT:
-     0, wenn das Objekt bewegt werden darf.
-     Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
-     /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
-     hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
-     ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
-     Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
-     1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
-     Pruefungen nur zu machen, wenn es nicht in method vorkommt.
-     2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
-     bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
-     das geerbte PreventMove() noch aufrufen und dessen Wert
-     zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc. 
-     nicht funktionieren oder bei Lebewesen die Prevent*() im Environment 
-     nicht gerufen werden!
-     3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
-     sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
-     4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
+   /std/thing/moving.c
+   /std/living/moving.c
+   /std/player/moving.c
 
-BEISPIELE:
-     Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
-     auch immer):
 
-     protected int PreventMove(object dest, object oldenv, int method) {
-       if ( (method & M_NOCHECK) ) {
-           // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
-           // geerbtes PreventMove() beruecksichten:
-           return ::PreventMove(dest, oldenv, method);
-       }
-       else if ( method & M_GET) {
-           // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
-           // gucken:
-           if (objectp(dest) && 
-               (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
-               return ME_CANT_BE_TAKEN;
-       }
-       // Fall-through:
-       return ::PreventMove(dest, oldenv, method);
+ARGUMENTE
+=========
+
+   dest
+        Das Ziel des Moves
+   oldenv
+        Das (Noch-)Environment des Objekts
+   method
+        Die Move-Methode(n), mit der/denen bewegt werden soll
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach 'dest'
+   bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B. schaltet
+   M_NOCHECK die meisten Pruefungen ab).
+   Bei Gegenstaenden wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel
+   das Objekt aufnehmen will (MayAddWeight(), PreventInsert) oder auch
+   PreventLeave() geprueft.
+   Bei Lebewesen wird z.B. P_NO_TPORT in 'dest' und 'oldenv' und
+   PreventLeaveLiving/PreventInsertLiving() ausgewertet.
+   Bei Spielern wird auch noch getestet, ob method M_GO oder M_TPORT
+   enthaelt und ob das Ziel nur von Testspielern betreten werden kann.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn das Objekt bewegt werden darf.
+   Wenn es nicht bewegt werden darf, sind als Rueckgabewerte die in
+   /sys/moving.h definierten Move-Fehlerwerte zulaessig (s. move()). Sollte
+   hier ein ungueltiger Fehlerwert zurueckgegeben werden, wird das move()
+   ebenfalls abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
+   Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge beachten:
+   1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
+   Pruefungen nur zu machen, wenn es nicht in method vorkommt.
+   2. GANZ WICHTIG: Wenn ihr mit euren Pruefungen fertig sein und das Objekt
+   bewegt werden duerfte, die geerbten Pruefungen noch testen, also _IMMER_
+   das geerbte PreventMove() noch aufrufen und dessen Wert
+   zurueckgeben/beruecksichtigen, da sonst Pruefungen des Gewichts etc.
+   nicht funktionieren oder bei Lebewesen die Prevent*() im Environment
+   nicht gerufen werden!
+   3. Die Funktion ist nur objektintern zu verwenden, Call-Other von aussen
+   sind nicht moeglich, beim Ueberschreiben 'protected' nicht vergessen.
+   4. Nochmal: Geerbtes PreventMove() _NICHT VERGESSEN_!
+
+
+BEISPIELE
+=========
+
+   Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
+   auch immer):
+
+   protected int PreventMove(object dest, object oldenv, int method) {
+     if ( (method & M_NOCHECK) ) {
+         // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
+         // geerbtes PreventMove() beruecksichten:
+         return ::PreventMove(dest, oldenv, method);
      }
+     else if ( method & M_GET) {
+         // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
+         // gucken:
+         if (objectp(dest) &&
+             (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
+             return ME_CANT_BE_TAKEN;
+     }
+     // Fall-through:
+     return ::PreventMove(dest, oldenv, method);
+   }
 
 
-SIEHE AUCH:
-     PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
-     PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
-     PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+SIEHE AUCH
+==========
 
-----------------------------------------------------------------------------
+   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
+   PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(),
+   PreventMove(), MayAddWeight(), move(), /std/container/restrictions.c
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/Query b/doc/lfun/Query
index 2b39998..27c2d9e 100644
--- a/doc/lfun/Query
+++ b/doc/lfun/Query
@@ -1,81 +1,108 @@
+
 Query()
-FUNKTION:
-     public varargs mixed Query(string name, int Type);
+*******
 
-DEFINIERT IN:
-     /std/thing/properties.c
 
-ARGUMENTE:
-     string name - Property, deren Wert(e) ausgelesen werden
-     int type  - Art der gewuenschten Information.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Wert einer der inneren Eigenschaften der Property 'name' wird
-     zurueckgegeben.  'Type' ist dabei einer der in /sys/thing/properties.h
-     und folgend aufgelisteten F_XXX-Werte:
+   public varargs mixed Query(string name, int Type);
 
-     F_VALUE (==0, Default)
-         Unter Umgehung einer eventuell vorhandenen Abfragemethode oder
-         _query_'name'() wird der Datenwert der Property 'name'
-         zurueckgegeben.
-     F_MODE
-          Die internen Flags der Property werden zurueckgegeben.Dies koennen
-          (logisch mit & verknuepft) sein:
-          SAVE  - Property soll bei save_object() gespeichert werden
-          PROTECTED - Objekt selbst/EM/Root kann Property manipulieren
-          SECURED  - wie PROTECTED, das Flag kann aber nicht
-                     zurueckgesetzt werden (immer SECURED)
-          NOSETMETHOD - niemand kann Property manipulieren
-                        (auch kein F_SET_METHOD oder _set_'name'())
-     F_SET_METHOD
-          Ein eventuell fuer die Property eingetragene F_SET_METHOD wird
-          zurueckgegeben.
-          (_set_'name'()-Methoden werden so nicht aufgefuehrt!)
-     F_QUERY_METHOD
-          Ein eventuell fuer die Property eingetragene F_QUERY_METHOD wird
-          zurueckgegeben.
-          (_query_'name'()-Methoden werden so nicht aufgefuehrt!)
 
-RUeCKGABEWERT:
-     Die gewuenschte Eigenschaft, abhaengig von 'Type'.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - Query() sollte nicht zum regulaeren Auslesen des Inhalt einer
-       Property verwendet werden, da sowohl F_QUERY_METHOD als auch
-       libinterne _query_'name'()-Methoden umgangen werden und das Ergebnis
-       fuer so veraenderte Propertys undefiniert ist
-     - _set_'name'() und _query_'name'() sind alte Propertymethoden und
-       sollten nicht in normalen Objekten benutzt werden ->
-       F_SET_METHOD/F_QUERY_METHOD (ggf. mit PROTECTED) nutzen
-     - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
-       sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
-       diese geht nur 'static' (in diesem Fall empfohlen).
+   /std/thing/properties.c
 
-BEISPIELE:
-     // Auslesen des Wertes unter Umgehung einer Abfragemethode
-     Query(P_XYZ, F_VALUE);
 
-     // Auslesen der Flags erfaehrt man mit:
-     Query(P_XYZ, F_MODE);
+ARGUMENTE
+=========
 
-     // sauberes Programmieren, wir wollen eine F_QUERY_METHOD setzen,
-     // pruefen vorher auf Existenz:
-     if(this_player()->Query(P_FROG, F_QUERY_METHOD) {
-      write(break_string(
-       "Ich kann dich nicht weiter vor Froschsein schuetzen!",
-       "Der Magier winkt ab: ", 78));
-      say(break_string(
-       "Ich kann dich nicht weiter vor Froschsein schuetzen!",
-       "Der Magier sagt zu "+this_player()->name(WEM)+": ", 78));
-     } else {
-      this_player()->Set(P_FROG, #'query_protect_frog, F_QUERY_METHOD);
-      ...
-     }
+   string name - Property, deren Wert(e) ausgelesen werden
+   int type  - Art der gewuenschten Information.
 
-SIEHE AUCH:
-     Aehnliches: SetProp(L), QueryProp(L), Set(L)
-     Generell:  SetProperties(L), QueryProperties(L)
-     Konzept:  properties, /std/thing/properties.c
-     Sonstiges:  P_AUTOLOADOBJ
+
+BESCHREIBUNG
+============
+
+   Der Wert einer der inneren Eigenschaften der Property 'name' wird
+   zurueckgegeben.  'Type' ist dabei einer der in /sys/thing/properties.h
+   und folgend aufgelisteten F_XXX-Werte:
+
+   F_VALUE (==0, Default)
+       Unter Umgehung einer eventuell vorhandenen Abfragemethode oder
+       _query_'name'() wird der Datenwert der Property 'name'
+       zurueckgegeben.
+   F_MODE
+        Die internen Flags der Property werden zurueckgegeben.Dies koennen
+        (logisch mit & verknuepft) sein:
+        SAVE  - Property soll bei save_object() gespeichert werden
+        PROTECTED - Objekt selbst/EM/Root kann Property manipulieren
+        SECURED  - wie PROTECTED, das Flag kann aber nicht
+                   zurueckgesetzt werden (immer SECURED)
+        NOSETMETHOD - niemand kann Property manipulieren
+                      (auch kein F_SET_METHOD oder _set_'name'())
+   F_SET_METHOD
+        Ein eventuell fuer die Property eingetragene F_SET_METHOD wird
+        zurueckgegeben.
+        (_set_'name'()-Methoden werden so nicht aufgefuehrt!)
+   F_QUERY_METHOD
+        Ein eventuell fuer die Property eingetragene F_QUERY_METHOD wird
+        zurueckgegeben.
+        (_query_'name'()-Methoden werden so nicht aufgefuehrt!)
+
+
+RUeCKGABEWERT
+=============
+
+   Die gewuenschte Eigenschaft, abhaengig von 'Type'.
+
+
+BEMERKUNGEN
+===========
+
+   - Query() sollte nicht zum regulaeren Auslesen des Inhalt einer
+     Property verwendet werden, da sowohl F_QUERY_METHOD als auch
+     libinterne _query_'name'()-Methoden umgangen werden und das Ergebnis
+     fuer so veraenderte Propertys undefiniert ist
+   - _set_'name'() und _query_'name'() sind alte Propertymethoden und
+     sollten nicht in normalen Objekten benutzt werden ->
+     F_SET_METHOD/F_QUERY_METHOD (ggf. mit PROTECTED) nutzen
+   - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
+     sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
+     diese geht nur 'static' (in diesem Fall empfohlen).
+
+
+BEISPIELE
+=========
+
+   // Auslesen des Wertes unter Umgehung einer Abfragemethode
+   Query(P_XYZ, F_VALUE);
+
+   // Auslesen der Flags erfaehrt man mit:
+   Query(P_XYZ, F_MODE);
+
+   // sauberes Programmieren, wir wollen eine F_QUERY_METHOD setzen,
+   // pruefen vorher auf Existenz:
+   if(this_player()->Query(P_FROG, F_QUERY_METHOD) {
+    write(break_string(
+     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
+     "Der Magier winkt ab: ", 78));
+    say(break_string(
+     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
+     "Der Magier sagt zu "+this_player()->name(WEM)+": ", 78));
+   } else {
+    this_player()->Set(P_FROG, #'query_protect_frog, F_QUERY_METHOD);
+    ...
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches: SetProp(L), QueryProp(L), Set(L)
+   Generell:  SetProperties(L), QueryProperties(L)
+   Konzept:  properties, /std/thing/properties.c
+   Sonstiges:  P_AUTOLOADOBJ
 
 28.03.2008, Zesstra
diff --git a/doc/lfun/QueryAllDoors b/doc/lfun/QueryAllDoors
index 3bbbfbb..cdf7140 100644
--- a/doc/lfun/QueryAllDoors
+++ b/doc/lfun/QueryAllDoors
@@ -1,32 +1,52 @@
-FUNKTION:
-     mapping QueryAllDoors();
 
-DEFINIERT IN:
-     /obj/doormaster.c
-
-ARGUMENTE:
-     keine
-
-BESCHREIBUNG:
-     Es werden die Zustaende ALLER Tueren im MorgenGrauen ermittelt.
-
-RUECKGABEWERT:
-     Ein Mapping mit den Zustaenden aller Tueren im MorgenGrauen. Als
-     Schluessel dienen die Dateinamen der Start- und Zielraeume in
-     lexikographischer (alphabetischer) Reihenfolge, getrennt durch ":",
-     der Wert des Keys ist der aktuelle Zustand dieser Tuer, z.B.:
-
-    ([ "/d/inseln/schiffe/jolle:/d/inseln/schiffe/jolle/masch" : -1,
-       ...
-     ]);
-
-     Es gibt also eine Tuer zwischen Jolle und Maschinenraum, die
-     momenten geschlossen ist (-1 = D_STATUS_CLOSED).
+QueryAllDoors()
+***************
 
 
-SIEHE AUCH:
-    NewDoor(), QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
-    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), P_DOOR_INFOS
+FUNKTION
+========
 
------------------------------------------------------------------------------
+   mapping QueryAllDoors();
+
+
+DEFINIERT IN
+============
+
+   /obj/doormaster.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Es werden die Zustaende ALLER Tueren im MorgenGrauen ermittelt.
+
+
+RUECKGABEWERT
+=============
+
+    Ein Mapping mit den Zustaenden aller Tueren im MorgenGrauen. Als
+    Schluessel dienen die Dateinamen der Start- und Zielraeume in
+    lexikographischer (alphabetischer) Reihenfolge, getrennt durch ":",
+    der Wert des Keys ist der aktuelle Zustand dieser Tuer, z.B.:
+
+   ([ "/d/inseln/schiffe/jolle:/d/inseln/schiffe/jolle/masch" : -1,
+      ...
+    ]);
+
+    Es gibt also eine Tuer zwischen Jolle und Maschinenraum, die
+    momenten geschlossen ist (-1 = D_STATUS_CLOSED).
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
+   /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), P_DOOR_INFOS
+
 Letzte Aenderung: Don, 08.05.2014, Gabylon
diff --git a/doc/lfun/QueryArmourByType b/doc/lfun/QueryArmourByType
index 22d43e9..20fcab5 100644
--- a/doc/lfun/QueryArmourByType
+++ b/doc/lfun/QueryArmourByType
@@ -1,64 +1,91 @@
+
+QueryArmourByType()
+*******************
+
+
 QyeryArmourByType()
-
-FUNKTION:
-     mixed QueryArmourByType(string type)
-
-DEFINIERT IN:
-     /std/living/combat.c
-
-ARGUMENTE:
-     string type
-        Typ der Ruestung aus /sys/combat.h, auf die getestet werden soll.
-
-BESCHREIBUNG:
-     Abfrage, ob das Lebewesen eine Ruestung des angegebenen Typs traegt.
-
-     Zurueckgegeben wird je nach Tragestatus und <type>:
-     * 0, falls das Lebewesen die gesuchte Ruestungsart nicht traegt
-     * im Erfolgsfall das Ruestungsobjekt
-     * falls <type> AT_MISC ist:
-       * ({}), wenn es keine AT_MISC-Ruestung traegt
-       * ein Array von AT_MISC-Ruestungen
-     * falls <type> 0 ist: ein Mapping, das diese Informationen mit dem
-       Ruestungstypen als Schluessel enthaelt:
-       ([AT_MISC: ({[object], ...}),
-         AT_...: <object>,
-         ... ])
-
-BEMERKUNG:
-     Ist <type> AT_MISC, so wird auf jeden Fall ein Array zurueckgegeben!
-
-BEISPIELE:
-     Wir wollen wissen, ob this_player() Handschuhe traegt:
-
-     if (objectp(this_player()->QueryArmourByType(AT_GLOVE)))
-       ...
+===================
 
 
-     Wir bauen einen Tuersteher, der auf AT_MISC-Kleidung achtet:
+FUNKTION
+========
 
-     if (sizeof(this_player()->QueryArmourByType(AT_MISC)) > 3) {
-       if(this_player()->ReceiveMsg(
-            "Du darfst nicht passieren, Du hast zuviele "
-            "unpassende Dinge an!",
-            MT_LISTEN|MSG_DONT_STORE, MA_TELL,
-            "Der Waechter teilt Dir mit: ")<MSG_DELIVERED && // taub?
+   mixed QueryArmourByType(string type)
+
+
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   string type
+      Typ der Ruestung aus /sys/combat.h, auf die getestet werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Abfrage, ob das Lebewesen eine Ruestung des angegebenen Typs traegt.
+
+   Zurueckgegeben wird je nach Tragestatus und <type>:
+   * 0, falls das Lebewesen die gesuchte Ruestungsart nicht traegt
+   * im Erfolgsfall das Ruestungsobjekt
+   * falls <type> AT_MISC ist:
+     * ({}), wenn es keine AT_MISC-Ruestung traegt
+     * ein Array von AT_MISC-Ruestungen
+   * falls <type> 0 ist: ein Mapping, das diese Informationen mit dem
+     Ruestungstypen als Schluessel enthaelt:
+     ([AT_MISC: ({[object], ...}),
+       AT_...: <object>,
+       ... ])
+
+
+BEMERKUNG
+=========
+
+   Ist <type> AT_MISC, so wird auf jeden Fall ein Array zurueckgegeben!
+
+
+BEISPIELE
+=========
+
+   Wir wollen wissen, ob this_player() Handschuhe traegt:
+
+   if (objectp(this_player()->QueryArmourByType(AT_GLOVE)))
+     ...
+
+
+   Wir bauen einen Tuersteher, der auf AT_MISC-Kleidung achtet:
+
+   if (sizeof(this_player()->QueryArmourByType(AT_MISC)) > 3) {
+     if(this_player()->ReceiveMsg(
+          "Du darfst nicht passieren, Du hast zuviele "
+          "unpassende Dinge an!",
+          MT_LISTEN|MSG_DONT_STORE, MA_TELL,
+          "Der Waechter teilt Dir mit: ")<MSG_DELIVERED && // taub?
+        this_player()->ReceiveMsg(
+          "Der Waechter haelt dich auf.", MT_LOOK)<MSG_DELIVERED) // blind?
           this_player()->ReceiveMsg(
-            "Der Waechter haelt dich auf.", MT_LOOK)<MSG_DELIVERED) // blind?
-            this_player()->ReceiveMsg(
-              "Jemand haelt dich auf.", MT_FEEL); // nu aber!
-       // Aufhalten!
-     } else this_player()->ReceiveMsg(
-              "Du darfst passieren, viel Spass im Casino!",
-              MT_LISTEN|MSG_DONT_STORE, MA_TELL,
-              "Der Waechter teilt Dir mit: ");
-       // im Erfolgsfall ist es uns egal, wenn es der Spieler nicht
-       // liest: er wird dann eben "wortlos" durchgelassen
+            "Jemand haelt dich auf.", MT_FEEL); // nu aber!
+     // Aufhalten!
+   } else this_player()->ReceiveMsg(
+            "Du darfst passieren, viel Spass im Casino!",
+            MT_LISTEN|MSG_DONT_STORE, MA_TELL,
+            "Der Waechter teilt Dir mit: ");
+     // im Erfolgsfall ist es uns egal, wenn es der Spieler nicht
+     // liest: er wird dann eben "wortlos" durchgelassen
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(),
-     UnwearClothing(), FilterClothing(),
-     P_ARMOUR_TYPE, P_CLOTHING, P_ARMOURS,
-     /std/living/combat.c
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour(),
+   UnwearClothing(), FilterClothing(),
+   P_ARMOUR_TYPE, P_CLOTHING, P_ARMOURS,
+   /std/living/combat.c
 
 02.02.2016, Gloinson
diff --git a/doc/lfun/QueryArrived b/doc/lfun/QueryArrived
index 33cf887..9c4de60 100644
--- a/doc/lfun/QueryArrived
+++ b/doc/lfun/QueryArrived
@@ -1,26 +1,45 @@
+
 QueryArrived()
+**************
 
-FUNKTION:
-     mixed QueryArrived();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   mixed QueryArrived();
 
-BESCHREIBUNG:
-     Diese Funktion ermittelt, ob sich der Transporter momentan an einer
-     Haltestelle befindet (und bestiegen oder verlassen werden kann) oder ob
-     er unterwegs ist.
 
-RUeCKGABEWERT:
-     Null, wenn der Transporter unterwegs ist. Liegt der Transporter an
-     einer Haltestelle, so wird der mit AddRoute als name uebergebene String
-     zurueckgegeben.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddRoute(), /std/transport.c
+   /std/transport.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ermittelt, ob sich der Transporter momentan an einer
+   Haltestelle befindet (und bestiegen oder verlassen werden kann) oder ob
+   er unterwegs ist.
+
+
+RUeCKGABEWERT
+=============
+
+   Null, wenn der Transporter unterwegs ist. Liegt der Transporter an
+   einer Haltestelle, so wird der mit AddRoute als name uebergebene String
+   zurueckgegeben.
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), /std/transport.c
+
 Last modified: Wed May 8 10:21:47 1996 by Wargon
diff --git a/doc/lfun/QueryArticle b/doc/lfun/QueryArticle
index 0993b3e..3be5ecc 100644
--- a/doc/lfun/QueryArticle
+++ b/doc/lfun/QueryArticle
@@ -1,92 +1,118 @@
+
 QueryArticle()
+**************
 
-FUNKTION:
-     varargs string QueryArticle(int casus, int dem, int force);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     casus
-          Der Fall, in dem der Artikel gewuenscht wird.
-          (Konstanten aus /sys/thing/language.h: WER, WEM, WESSEN, WEN.)
+   varargs string QueryArticle(int casus, int dem, int force);
 
-     dem
-          Wird ein bestimmter oder ein unbestimmter Artikel verlangt?
-             + dem = 0: Unbestimmter Artikel!
-             + dem = 1: Bestimmter Artikel!
-             + dem = 2: Finde selbst heraus, welcher Artikel passt!
 
-     force
-          Falls ungleich Null, so wird auf jeden Fall ein Artikel
-          zurueckgegeben, trotz P_ARTICLE == 0.
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-     Diese Funktion gibt einen zum Geschlecht des Objektes passenden Artikel
-     zurueck, der in den passenden Fall dekliniert wird.
+   /std/thing/language.c
 
-     Das Herausfinden des passenden Artikels bei 'dem' = 2 bezieht sich auf
-     Situationen, in denen mehrere gleichnamige Objekte im selben Environment
-     sind. Man 'nimmt' dann zB nicht "den Stamm" sondern "einen Stamm".
 
-     Ist P_ARTICLE = 0, so wird ein Leerstring zurueckgegeben, es sei denn,
-     man uebergibt in dem Argument 'force' einen Wert ungleich Null.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     Achtung: bei gueltigem Artikel wird ein Leerzeichen angehaengt!
+   casus
+        Der Fall, in dem der Artikel gewuenscht wird.
+        (Konstanten aus /sys/thing/language.h: WER, WEM, WESSEN, WEN.)
 
-     Name()/name() nutzen bereits QueryArticle(), wenn P_ARTICLE gesetzt
-     ist. Deshalb muss man sich "Eines Orks" nicht selbst aus dem
-     QueryArticle() und dem Namen zusammenbasteln, wenn mehrere Orks
-     im Raum herumstehen und man eine Nachricht wie:
-       "Du haust den Ork." und folgend
-       "[Des|Eines] Orks Nase schwillt an."
-     haben moechte:
-       "Du haust "+ork->name(WEN, 1)+". "
-       ork->Name(WESSEN, 2)+" Nase schwillt an."
+   dem
+        Wird ein bestimmter oder ein unbestimmter Artikel verlangt?
+           + dem = 0: Unbestimmter Artikel!
+           + dem = 1: Bestimmter Artikel!
+           + dem = 2: Finde selbst heraus, welcher Artikel passt!
 
-RUeCKGABEWERT:
-     * gewuenschter Artikel als String plus Leerzeichen (!) ODER
-     * Leerstring
+   force
+        Falls ungleich Null, so wird auf jeden Fall ein Artikel
+        zurueckgegeben, trotz P_ARTICLE == 0.
 
-BEISPIELE:
-     // "X haut Y auf die Nase. [Der|Die|Das] ist nicht beeindruckt."
-     // Man will:
-     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
-     // * nur den bestimmten Artikel
-     send_room(this_object(),
-       pl1->Name(WER)+" haut "+pl2->name(WEM)+" auf die Nase. "+
-       capitalize(pl2->QueryArticle(WER, 1, 1))+"ist nicht beeindruckt.",
-       MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));
 
-     // "X gibt dir Y. [Er|Sie|Es] prueft [den|die|das] ..."
-     // Man will:
-     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
-     // * nur den bestimmten Artikel
-     send_room(this_object(),
-       pl1->Name(WER)+" gibt "+pl2->name(WEM)+" "+obj->name(WER)+". "+
-       capitalize(pl2->QueryPronoun(WER))+" prueft "+
-       ob->QueryArticle(WEN, 1, 1)+"...",
-       MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));
+BESCHREIBUNG
+============
 
-     // "Dir faellt X auf den Kopf. Du siehst [die|den|das|eine|einen|eines "
-     // "auf dem Boden liegen. [Sie|Er|Es] sieht blutig aus. Aua. Ist das "
-     // "von dir?"
-     // Man will:
-     // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
-     // * bestimmte/unbestimmte Artikel, wenn bereits gleiche Gegenstaende
-     //   (zB Kokosnuesse) auf dem Boden liegen ...
-     ob->move(environment(), M_NOCHECK); // vorher machen!
-     pl->ReceiveMsg(
-       "Dir faellt "+ob->name(WER, 0)+" auf den Kopf. Du siehst "+
-       ob->QueryArticle(WEN, 2, 1)+" auf dem Boden liegen. "+
-       capitalize(ob->QueryPronoun(WER))+" sieht blutig ...
+   Diese Funktion gibt einen zum Geschlecht des Objektes passenden Artikel
+   zurueck, der in den passenden Fall dekliniert wird.
 
-SIEHE AUCH:
-     Aehnlich:  SuggestArticle(), query_c_article(), query_g_suffix()
-     Sonstiges: QueryOwn(), QueryDu(),
-                QueryPronoun(), QueryPossPronoun()
-                DeclAdj()
-                name()
+   Das Herausfinden des passenden Artikels bei 'dem' = 2 bezieht sich auf
+   Situationen, in denen mehrere gleichnamige Objekte im selben Environment
+   sind. Man 'nimmt' dann zB nicht "den Stamm" sondern "einen Stamm".
+
+   Ist P_ARTICLE = 0, so wird ein Leerstring zurueckgegeben, es sei denn,
+   man uebergibt in dem Argument 'force' einen Wert ungleich Null.
+
+
+BEMERKUNGEN
+===========
+
+   Achtung: bei gueltigem Artikel wird ein Leerzeichen angehaengt!
+
+   Name()/name() nutzen bereits QueryArticle(), wenn P_ARTICLE gesetzt
+   ist. Deshalb muss man sich "Eines Orks" nicht selbst aus dem
+   QueryArticle() und dem Namen zusammenbasteln, wenn mehrere Orks
+   im Raum herumstehen und man eine Nachricht wie:
+     "Du haust den Ork." und folgend
+     "[Des|Eines] Orks Nase schwillt an."
+   haben moechte:
+     "Du haust "+ork->name(WEN, 1)+". "
+     ork->Name(WESSEN, 2)+" Nase schwillt an."
+
+
+RUeCKGABEWERT
+=============
+
+   * gewuenschter Artikel als String plus Leerzeichen (!) ODER
+   * Leerstring
+
+
+BEISPIELE
+=========
+
+   // "X haut Y auf die Nase. [Der|Die|Das] ist nicht beeindruckt."
+   // Man will:
+   // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
+   // * nur den bestimmten Artikel
+   send_room(this_object(),
+     pl1->Name(WER)+" haut "+pl2->name(WEM)+" auf die Nase. "+
+     capitalize(pl2->QueryArticle(WER, 1, 1))+"ist nicht beeindruckt.",
+     MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));
+
+   // "X gibt dir Y. [Er|Sie|Es] prueft [den|die|das] ..."
+   // Man will:
+   // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
+   // * nur den bestimmten Artikel
+   send_room(this_object(),
+     pl1->Name(WER)+" gibt "+pl2->name(WEM)+" "+obj->name(WER)+". "+
+     capitalize(pl2->QueryPronoun(WER))+" prueft "+
+     ob->QueryArticle(WEN, 1, 1)+"...",
+     MT_LOOK|MT_LISTEN, 0, 0, ({pl1, pl2}));
+
+   // "Dir faellt X auf den Kopf. Du siehst [die|den|das|eine|einen|eines "
+   // "auf dem Boden liegen. [Sie|Er|Es] sieht blutig aus. Aua. Ist das "
+   // "von dir?"
+   // Man will:
+   // * auf jeden Fall einen Artikel, auch wenn kein P_ARTICLE gesetzt ist
+   // * bestimmte/unbestimmte Artikel, wenn bereits gleiche Gegenstaende
+   //   (zB Kokosnuesse) auf dem Boden liegen ...
+   ob->move(environment(), M_NOCHECK); // vorher machen!
+   pl->ReceiveMsg(
+     "Dir faellt "+ob->name(WER, 0)+" auf den Kopf. Du siehst "+
+     ob->QueryArticle(WEN, 2, 1)+" auf dem Boden liegen. "+
+     capitalize(ob->QueryPronoun(WER))+" sieht blutig ...
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  SuggestArticle(), query_c_article(), query_g_suffix()
+   Sonstiges: QueryOwn(), QueryDu(),
+              QueryPronoun(), QueryPossPronoun()
+              DeclAdj()
+              name()
 
 9. Jun 2016, Gloinson
diff --git a/doc/lfun/QueryAttribute b/doc/lfun/QueryAttribute
index 60a68c9..978c6c0 100644
--- a/doc/lfun/QueryAttribute
+++ b/doc/lfun/QueryAttribute
@@ -1,32 +1,59 @@
+
 QueryAttribute()
-FUNKTION:
-     int QueryAttribute(string attr)
+****************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr       - interessierendes Gesamtattribut
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Attribut samt seiner Offsets (Modifier) wird zurueckgegeben.
+   int QueryAttribute(string attr)
 
-RUeCKGABEWERT:
-     Wert des Attributes, bei Spielern nicht groesser als 30.
 
-BEISPIELE:
-     if (this_player()->QueryAttribute(A_CON) > 20)
-       write("Du schaffst es den Berg hoch. Aber nur muehsam.\n");
+DEFINIERT IN
+============
 
-BENERKUNGEN:
-     Wenn es um Attributabfragen geht, bitte diese Methode verwenden!
+   /std/living/attributes.c
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+
+ARGUMENTE
+=========
+
+   attr       - interessierendes Gesamtattribut
+
+
+BESCHREIBUNG
+============
+
+   Das Attribut samt seiner Offsets (Modifier) wird zurueckgegeben.
+
+
+RUeCKGABEWERT
+=============
+
+   Wert des Attributes, bei Spielern nicht groesser als 30.
+
+
+BEISPIELE
+=========
+
+   if (this_player()->QueryAttribute(A_CON) > 20)
+     write("Du schaffst es den Berg hoch. Aber nur muehsam.\n");
+
+
+BENERKUNGEN
+===========
+
+   Wenn es um Attributabfragen geht, bitte diese Methode verwenden!
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/QueryAttributeOffset b/doc/lfun/QueryAttributeOffset
index f938ab8..b16d10c 100644
--- a/doc/lfun/QueryAttributeOffset
+++ b/doc/lfun/QueryAttributeOffset
@@ -1,26 +1,47 @@
+
 QueryAttributeOffset()
-FUNKTION:
-     int QueryAttributeOffset(string attr)
+**********************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr	-	gesuchter AttributOffset
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die Offsets des Attributs (inklusive Modifier) werden zurueckgegeben.
+   int QueryAttributeOffset(string attr)
 
-BEISPIELE:
-     if(this_player()->QueryAttributeOffset(A_STR)<0)
-      write("Du bist geschwaecht.\n");
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   attr       -       gesuchter AttributOffset
+
+
+BESCHREIBUNG
+============
+
+   Die Offsets des Attributs (inklusive Modifier) werden zurueckgegeben.
+
+
+BEISPIELE
+=========
+
+   if(this_player()->QueryAttributeOffset(A_STR)<0)
+    write("Du bist geschwaecht.\n");
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/QueryBuyFact b/doc/lfun/QueryBuyFact
index 435e8be..3f728c3 100644
--- a/doc/lfun/QueryBuyFact
+++ b/doc/lfun/QueryBuyFact
@@ -1,22 +1,41 @@
+
 QueryBuyFact()
+**************
 
-FUNKTION:
-     int QueryBuyFact();
 
-DEFINIERT IN:
-     /std/laden.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int QueryBuyFact();
 
-BESCHREIBUNG:
-     Gibt den mit SetBuyFact() gesetzten Faktor zurueck.
 
-RUeCKGABEWERT:
-     Der Einkaufspreismultiplikator.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     SetBuyFact(), /std/laden.c
+   /std/laden.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Gibt den mit SetBuyFact() gesetzten Faktor zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Einkaufspreismultiplikator.
+
+
+SIEHE AUCH
+==========
+
+   SetBuyFact(), /std/laden.c
+
 Last modified: Wed May 8 10:21:57 1996 by Wargon
diff --git a/doc/lfun/QueryBuyValue b/doc/lfun/QueryBuyValue
index 261a435..cecc57c 100644
--- a/doc/lfun/QueryBuyValue
+++ b/doc/lfun/QueryBuyValue
@@ -1,52 +1,56 @@
-QueryBuyValue()

-

-Funktion:

-    static varargs int QueryBuyValue(mixed ob, object client)

-

-Definiert in:

-    /std/room/shop

-

-Argumente:

-    ob: 

-      Das zu kaufende Objekt (String oder object).

-      Im Normalfall handelt es sich um ein Objekt. Ausnahme sind 

-      Gegenstaende, die mit AddFixedObject() hinzugefuegt wurden.

-    client: 

-      Der Kaeufer.

-

-Beschreibung:

-    Ermittelt den Preis, den <client> fuer <ob> zu bezahlen hat.

-

-Rueckgabewert:

-    Der Preis als Integer.

-

-Beispiel:

-    Ein Haendler, der Spielern die ihm geholfen haben einen Rabatt von 10% 

-    gewaehrt:

-    

-    object *helpers;

-    protected void create()

-    {

-      ::create();

-      helpers=({});

-      ...

-    }

-    

-    static varargs int QueryBuyValue(mixed ob, object client)

-    {

-      if(member(helpers,client)!=-1)

-      {

-        return ::QueryBuyValue(ob,client)*9/10;

-      }

-      return ::QueryBuyValue(ob,client);

-    }

-

-Siehe auch:

-    Funktionen:

-      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(), 

-      QueryStorageRoom(), QueryBuyFact(), sell_obj(), buy_obj()

-    Properties:

-      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME

-

-------------------------------------------------------------------------------

-Letzte Aenderung: 21.05.2014, Bugfix
\ No newline at end of file
+
+QueryBuyValue()
+***************
+
+QueryBuyValue()
+
+Funktion
+   static varargs int QueryBuyValue(mixed ob, object client)
+
+Definiert in
+   /std/room/shop
+
+Argumente
+   ob
+      Das zu kaufende Objekt (String oder object). Im Normalfall
+      handelt es sich um ein Objekt. Ausnahme sind Gegenstaende, die
+      mit AddFixedObject() hinzugefuegt wurden.
+
+   client
+      Der Kaeufer.
+
+Beschreibung
+   Ermittelt den Preis, den <client> fuer <ob> zu bezahlen hat.
+
+Rueckgabewert
+   Der Preis als Integer.
+
+Beispiel
+   Ein Haendler, der Spielern die ihm geholfen haben einen Rabatt von
+   10% gewaehrt
+
+   object >>*<<helpers; protected void create() {
+
+      ::create(); helpers=({}); ...
+
+   }
+
+   static varargs int QueryBuyValue(mixed ob, object client) {
+
+      if(member(helpers,client)!=-1) {
+
+         return ::QueryBuyValue(ob,client)*9/10;
+
+      } return ::QueryBuyValue(ob,client);
+
+   }
+
+Siehe auch:
+   Funktionen:
+      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
+      QueryStorageRoom(), QueryBuyFact(), sell_obj(), buy_obj()
+
+   Properties:
+      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME
+
+Letzte Aenderung: 21.05.2014, Bugfix
diff --git a/doc/lfun/QueryCoinsPerUnits b/doc/lfun/QueryCoinsPerUnits
index 948c1b0..7261758 100644
--- a/doc/lfun/QueryCoinsPerUnits
+++ b/doc/lfun/QueryCoinsPerUnits
@@ -1,31 +1,57 @@
+
+QueryCoinsPerUnits()
+********************
+
+
 QueryCoinsPerUnit()
+===================
 
-FUNKTION:
-     int *QueryCoinsPerUnits();
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int *QueryCoinsPerUnits();
 
-BESCHREIBUNG:
-     Liefert das Wertverhaeltnis fuer die Einheiten zurueck.
 
-RUeCKGABEWERT:
-     Ein Array von zwei Zahlen. Die erste Zahl ist der Wert der in der
-     zweiten Zahl angegebenen Einheiten.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Steht im Unit-Objekt folgende Wertzuweisung:
+   /std/unit.c
 
-       SetCoinsPerUnits(7,2);
 
-     so liefert QueryCoinsPerUnits() als Ergebnis ({7, 2}).
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     SetCoinsPerUnits(), SetGramsPerUnits(), QueryGramsPerUnit(),
-     /std/unit.c
+   keine
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Liefert das Wertverhaeltnis fuer die Einheiten zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array von zwei Zahlen. Die erste Zahl ist der Wert der in der
+   zweiten Zahl angegebenen Einheiten.
+
+
+BEISPIELE
+=========
+
+   Steht im Unit-Objekt folgende Wertzuweisung:
+
+     SetCoinsPerUnits(7,2);
+
+   so liefert QueryCoinsPerUnits() als Ergebnis ({7, 2}).
+
+
+SIEHE AUCH
+==========
+
+   SetCoinsPerUnits(), SetGramsPerUnits(), QueryGramsPerUnit(),
+   /std/unit.c
+
 Last modified: Wed May 8 10:22:02 1996 by Wargon
diff --git a/doc/lfun/QueryDamage b/doc/lfun/QueryDamage
index 99c4fed..812636a 100644
--- a/doc/lfun/QueryDamage
+++ b/doc/lfun/QueryDamage
@@ -1,39 +1,61 @@
+
 QueryDamage()
+*************
 
-FUNKTION:
-     int QueryDamage(object enemy);
 
-DEFINIERT IN:
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     enemy
-          Der Gegner, gegen den die Waffe eingesetzt wird.
+   int QueryDamage(object enemy);
 
-BESCHREIBUNG:
-     Dies ist die zentrale Funktion der Waffe. Sie wird in jeder Kampfrunde
-     von Attack() aus aufgerufen und gibt den Schaden zurueck, den der
-     Gegner abwehren muss.
 
-     In den Schaden gehen sowohl die Staerke der Waffe als auch die Staerke
-     des Traegers der Waffe ein.
+DEFINIERT IN
+============
 
-     Wurde eine HitFunc() angegeben, so wird diese mit den gleichen
-     Parametern wie QueryDamage() aufgerufen.
+   /std/weapon/combat.c
 
-RUeCKGABEWERT:
-     Die Staerke des Schlages fuer diese Kampfrunde. Sie ermittelt sich als
-     Zufallszahl zwischen 0 und einem Wert, der sich aus der Staerke der
-     Waffe und der Staerke ihres Traegers ergibt. Das Ergebnis des
-     HitFunc()-Aufrufs wird zu dieser Zahl hinzugezaehlt.
 
-BEMERKUNGEN:
-     Auch wenn man eine HitFunc() verwendet, darf der Rueckgabewert
-     insgesamt nicht groesser als 200 werden. Im Zweifelsfall sollte 
-     man sich mit der zustaendigen Balance besprechen!
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     HitFunc(), Attack(), /std/weapon.c, grenzwerte
+   enemy
+        Der Gegner, gegen den die Waffe eingesetzt wird.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Dies ist die zentrale Funktion der Waffe. Sie wird in jeder Kampfrunde
+   von Attack() aus aufgerufen und gibt den Schaden zurueck, den der
+   Gegner abwehren muss.
+
+   In den Schaden gehen sowohl die Staerke der Waffe als auch die Staerke
+   des Traegers der Waffe ein.
+
+   Wurde eine HitFunc() angegeben, so wird diese mit den gleichen
+   Parametern wie QueryDamage() aufgerufen.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Staerke des Schlages fuer diese Kampfrunde. Sie ermittelt sich als
+   Zufallszahl zwischen 0 und einem Wert, der sich aus der Staerke der
+   Waffe und der Staerke ihres Traegers ergibt. Das Ergebnis des
+   HitFunc()-Aufrufs wird zu dieser Zahl hinzugezaehlt.
+
+
+BEMERKUNGEN
+===========
+
+   Auch wenn man eine HitFunc() verwendet, darf der Rueckgabewert
+   insgesamt nicht groesser als 200 werden. Im Zweifelsfall sollte
+   man sich mit der zustaendigen Balance besprechen!
+
+
+SIEHE AUCH
+==========
+
+   HitFunc(), Attack(), /std/weapon.c, grenzwerte
+
 Last modified: Fre Feb 16.02.01 12:58:00 von Tilly
diff --git a/doc/lfun/QueryDefend b/doc/lfun/QueryDefend
index 4d3d3e0..fa3fb11 100644
--- a/doc/lfun/QueryDefend
+++ b/doc/lfun/QueryDefend
@@ -1,45 +1,68 @@
+
 QueryDefend()
+*************
 
-FUNKTION:
-     int QueryDefend(string|string* dtyp, int|mapping spell, object enemy);
 
-DEFINIERT IN:
-     /std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     dtyp  - Schadenstypen der Angriffsart
-     spell - 0       bei konventionellem Angriff,
-             != 0    bei Angriff mit einem nichtphysischen Spell,
-             mapping bei genaueren Angaben zur Wirkung
-     enemy - Der angreifende Gegner
+   int QueryDefend(string|string* dtyp, int|mapping spell, object enemy);
 
-BESCHREIBUNG:
-     Dies ist die zentrale Funktion einer Ruestung. Sie wird in jeder
-     Kampfrunde aus /std/living/combat::Defend() fuer jede Ruestung aufgerufen,
-     die der Spieler angezogen hat.
 
-     Der Schutzwert von P_AC entfaltet seine Wirkung nur bei konventionellen
-     Angriffen:
-     * wenn 'spell' 0 ist (bei Aufruf aus der Defend heraus ausgeschlossen)
-     * wenn 'spell' ein Mapping mit dem Flag SP_PHYSICAL_ATTACK != 0 UND
-                    in 'dtyp' mindestens ein physischer Schaden enthalten ist
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Die Ruestungsstaerke in dieser Kampfrunde. Sie ermittelt sich als
-     Zufallszahl zwischen 0 und P_AC, zuzueglich des Ergebnisses des
-     DefendFunc()-Aufrufs.
+   /std/armour/combat.c
 
-BEMERKUNGEN:
-     Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
-     insgesamt nicht groesser werden als der fuer den Ruestungstyp
-     maximal zulaessige!
 
-SIEHE AUCH:
-     Ruestungen: P_ARMOUR_TYPE, P_NR_HANDS, P_ARMOURS, P_WORN
-     Schutz:     P_AC, Defend(), DefendFunc
-     Sonstiges:  P_EQUIP_TIME, P_LAST_USE, P_DAM_TYPE
-     Verwandt:   QueryArmourByType(L), P_WEAPON, FilterClothing(),
-                 FilterArmours()
-     Resistenz:  P_RESISTANCE_STRENGTHS, CheckResistance(L)
+ARGUMENTE
+=========
+
+   dtyp  - Schadenstypen der Angriffsart
+   spell - 0       bei konventionellem Angriff,
+           != 0    bei Angriff mit einem nichtphysischen Spell,
+           mapping bei genaueren Angaben zur Wirkung
+   enemy - Der angreifende Gegner
+
+
+BESCHREIBUNG
+============
+
+   Dies ist die zentrale Funktion einer Ruestung. Sie wird in jeder
+   Kampfrunde aus /std/living/combat::Defend() fuer jede Ruestung aufgerufen,
+   die der Spieler angezogen hat.
+
+   Der Schutzwert von P_AC entfaltet seine Wirkung nur bei konventionellen
+   Angriffen:
+   * wenn 'spell' 0 ist (bei Aufruf aus der Defend heraus ausgeschlossen)
+   * wenn 'spell' ein Mapping mit dem Flag SP_PHYSICAL_ATTACK != 0 UND
+                  in 'dtyp' mindestens ein physischer Schaden enthalten ist
+
+
+RUeCKGABEWERT
+=============
+
+   Die Ruestungsstaerke in dieser Kampfrunde. Sie ermittelt sich als
+   Zufallszahl zwischen 0 und P_AC, zuzueglich des Ergebnisses des
+   DefendFunc()-Aufrufs.
+
+
+BEMERKUNGEN
+===========
+
+   Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
+   insgesamt nicht groesser werden als der fuer den Ruestungstyp
+   maximal zulaessige!
+
+
+SIEHE AUCH
+==========
+
+   Ruestungen: P_ARMOUR_TYPE, P_NR_HANDS, P_ARMOURS, P_WORN
+   Schutz:     P_AC, Defend(), DefendFunc
+   Sonstiges:  P_EQUIP_TIME, P_LAST_USE, P_DAM_TYPE
+   Verwandt:   QueryArmourByType(L), P_WEAPON, FilterClothing(),
+               FilterArmours()
+   Resistenz:  P_RESISTANCE_STRENGTHS, CheckResistance(L)
 
 28.Jul 2014 Gloinson
diff --git a/doc/lfun/QueryDisguise b/doc/lfun/QueryDisguise
index c30aa3f..3cf4b8d 100644
--- a/doc/lfun/QueryDisguise
+++ b/doc/lfun/QueryDisguise
@@ -1,29 +1,51 @@
+
 QueryDisguise()
+***************
 
-FUNKTION:
-     mixed QueryDisguise();
 
-DEFINIERT IN:
-     ???
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   mixed QueryDisguise();
 
-BESCHREIBUNG:
-     Prueft, ob der Spieler durch einen Shadow (meistens der Tarnhelm) 
-     'manipuliert' ist.
 
-RUeCKGABEWERT:
-     0, wenn dies nicht der Fall ist, ansonsten die Beschreibung des Shadow
-     vom Typ string.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     In Waffen / Ruestungen u.ae. die P_RESTRICTIONS gesetzt haben,
-     eruebrigt sich eine Abfrage auf QueryDisguise(), da dies bereits im
-     restriction_checker erledigt wird.
+   ???
 
-SIEHE AUCH:
-     P_RESTRICTIONS, /std/restriction_checker.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Prueft, ob der Spieler durch einen Shadow (meistens der Tarnhelm)
+   'manipuliert' ist.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn dies nicht der Fall ist, ansonsten die Beschreibung des Shadow
+   vom Typ string.
+
+
+BEMERKUNGEN
+===========
+
+   In Waffen / Ruestungen u.ae. die P_RESTRICTIONS gesetzt haben,
+   eruebrigt sich eine Abfrage auf QueryDisguise(), da dies bereits im
+   restriction_checker erledigt wird.
+
+
+SIEHE AUCH
+==========
+
+   P_RESTRICTIONS, /std/restriction_checker.c
+
 Last modified: Mon Mar 26 14:48:20 2001 von Tilly
diff --git a/doc/lfun/QueryDoorKey b/doc/lfun/QueryDoorKey
index cfd6a29..f606c52 100644
--- a/doc/lfun/QueryDoorKey
+++ b/doc/lfun/QueryDoorKey
@@ -1,48 +1,71 @@
-FUNKTION:
-     mixed QueryDoorKey();
 
-DEFINIERT IN:
-     versch. Schluesseln
-
-ARGUMENTE:
-     keine
-
-BESCHREIBUNG:
-     Diese Funktion wird in einem Schluessel aufgerufen, wenn man mit diesem
-     eine Tuer auf- oder abschliessen will. Anhand des Rueckgabewertes wird
-     entschieden, ob der Schluessel passt oder nicht.
-
-RUECKGABEWERT:
-     String oder Array von Strings der Raumpfade, deren gemeinsame Tueren
-     sich mit diesem Schluessel auf- bzw. abschliessen lassen. Die Keys sind
-     dabei die Raumpfade, getrennt durch ein ":". Dabei muessen die Pfade
-     in lexikographischer (alphabetischer) Reihenfolge sortiert sein:
-
-     "<name_raum_1>:<name_raum_2>"
-
-BEISPIELE:
-     Ein Schluessel, mit dem sich eine einzige Tuer oeffnen laesst (falls es
-     jemals eine Tuer zwischen Karate- und Abenteurergilde geben sollte...):
-
-     string QueryDoorKey()
-     {
-       return "/gilden/abenteurer:/gilden/karate";
-     }
-
-     Ein Schluessel, der in mehreren Tueren passt:
-
-     string* QueryDoorKey()
-     {
-       return ({ "/gilden/abenteurer:/players/wargon/workroom",
-                 "/gilden/abenteurer:/gilden/karate",
-                 "/players/jof/workroom:/players/wargon/workroom"
-              });
-     }
+QueryDoorKey()
+**************
 
 
-SIEHE AUCH:
-    NewDoor(), QueryDoorStatus(), SetDoorStatus(), P_DOOR_INFOS,
-    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+FUNKTION
+========
 
------------------------------------------------------------------------------
+   mixed QueryDoorKey();
+
+
+DEFINIERT IN
+============
+
+   versch. Schluesseln
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird in einem Schluessel aufgerufen, wenn man mit diesem
+   eine Tuer auf- oder abschliessen will. Anhand des Rueckgabewertes wird
+   entschieden, ob der Schluessel passt oder nicht.
+
+
+RUECKGABEWERT
+=============
+
+   String oder Array von Strings der Raumpfade, deren gemeinsame Tueren
+   sich mit diesem Schluessel auf- bzw. abschliessen lassen. Die Keys sind
+   dabei die Raumpfade, getrennt durch ein ":". Dabei muessen die Pfade
+   in lexikographischer (alphabetischer) Reihenfolge sortiert sein:
+
+   "<name_raum_1>:<name_raum_2>"
+
+
+BEISPIELE
+=========
+
+   Ein Schluessel, mit dem sich eine einzige Tuer oeffnen laesst (falls es
+   jemals eine Tuer zwischen Karate- und Abenteurergilde geben sollte...):
+
+   string QueryDoorKey()
+   {
+     return "/gilden/abenteurer:/gilden/karate";
+   }
+
+   Ein Schluessel, der in mehreren Tueren passt:
+
+   string* QueryDoorKey()
+   {
+     return ({ "/gilden/abenteurer:/players/wargon/workroom",
+               "/gilden/abenteurer:/gilden/karate",
+               "/players/jof/workroom:/players/wargon/workroom"
+            });
+   }
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorStatus(), SetDoorStatus(), P_DOOR_INFOS,
+   /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+
 Letzte Aenderung: Don, 08.05.2014, Gabylon
diff --git a/doc/lfun/QueryDoorStatus b/doc/lfun/QueryDoorStatus
index c1ee6b8..74f7034 100644
--- a/doc/lfun/QueryDoorStatus
+++ b/doc/lfun/QueryDoorStatus
@@ -1,28 +1,48 @@
-FUNKTION:
-     int QueryDoorStatus(string dest);
 
-DEFINIERT IN:
-     /obj/doormaster.c
-
-ARGUMENTE:
-     <dest> = Zielraum der Tuer.
-
-BESCHREIBUNG:
-     Es wird der Zustand der Tuer, die von diesem Raum nach <dest> fuehrt,
-     ermittelt.
-
-RUeCKGABEWERT:
-     0 bei nicht vorhandene Tuer, ansonsten einer der folgenden Zustaende (aus
-       <doorroom.h>):
-
-       D_STATUS_LOCKED - Tuer abgeschlossen
-       D_STATUS_CLOSED - Tuer geschlossen
-       D_STATUS_OPEN   - Tuer geoeffnet
+QueryDoorStatus()
+*****************
 
 
-SIEHE AUCH:
-    NewDoor(), QueryDoorKey(), SetDoorStatus(), P_DOOR_INFOS,
-    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+FUNKTION
+========
 
------------------------------------------------------------------------------
+   int QueryDoorStatus(string dest);
+
+
+DEFINIERT IN
+============
+
+   /obj/doormaster.c
+
+
+ARGUMENTE
+=========
+
+   <dest> = Zielraum der Tuer.
+
+
+BESCHREIBUNG
+============
+
+   Es wird der Zustand der Tuer, die von diesem Raum nach <dest> fuehrt,
+   ermittelt.
+
+
+RUeCKGABEWERT
+=============
+
+   0 bei nicht vorhandene Tuer, ansonsten einer der folgenden Zustaende (aus
+     <doorroom.h>):
+
+     D_STATUS_LOCKED - Tuer abgeschlossen
+     D_STATUS_CLOSED - Tuer geschlossen
+     D_STATUS_OPEN   - Tuer geoeffnet
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorKey(), SetDoorStatus(), P_DOOR_INFOS,
+   /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+
 Letzte Aenderung: Don, 08.05.2014, Gabylon
diff --git a/doc/lfun/QueryDu b/doc/lfun/QueryDu
index 9be62a8..aa184cc 100644
--- a/doc/lfun/QueryDu
+++ b/doc/lfun/QueryDu
@@ -1,39 +1,61 @@
+
 QueryDu()
+*********
 
-FUNKTION:
-     varargs string QueryDu(int casus, int gender, int anzahl);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     casus
-          Der Fall fuer die Anrede.
+   varargs string QueryDu(int casus, int gender, int anzahl);
 
-     gender
-          Das Geschlecht des anzuredenden Objektes.
 
-     anzahl
-          Ist nur ein Objekt anzusprechen oder mehrere?
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-     Diese Funktion liefert die dem Anlass entsprechende Anrede fuer ein
-     Objekt.
+   /std/thing/language.c
 
-RUeCKGABEWERT:
-     Ein String mit der Anrede.
 
-BEISPIELE:
+ARGUMENTE
+=========
 
-     printf("%s setzt %s auf den Boden.\n",
-           capitalize(QueryDu(WER, TP->QueryProp(P_GENDER), SINGULAR),
-           QueryDu(WEN, TP->QueryProp(P_GENDER), SINGULAR));
+   casus
+        Der Fall fuer die Anrede.
 
-     (In den meisten Faellen kann man hier auch direkt "Du" und "dich"
-     einsetzen.)
+   gender
+        Das Geschlecht des anzuredenden Objektes.
 
-SIEHE AUCH:
-     /std/thing/language.c
-     QueryPossPronoun(), QueryOwn(), QueryPronoun()
-----------------------------------------------------------------------------
+   anzahl
+        Ist nur ein Objekt anzusprechen oder mehrere?
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert die dem Anlass entsprechende Anrede fuer ein
+   Objekt.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein String mit der Anrede.
+
+
+BEISPIELE
+=========
+
+   printf("%s setzt %s auf den Boden.\n",
+         capitalize(QueryDu(WER, TP->QueryProp(P_GENDER), SINGULAR),
+         QueryDu(WEN, TP->QueryProp(P_GENDER), SINGULAR));
+
+   (In den meisten Faellen kann man hier auch direkt "Du" und "dich"
+   einsetzen.)
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/language.c
+   QueryPossPronoun(), QueryOwn(), QueryPronoun()
+
 Last modified: Wed May 8 10:22:27 1996 by Wargon
diff --git a/doc/lfun/QueryEnemies b/doc/lfun/QueryEnemies
index 7c393b4..fc00c0e 100644
--- a/doc/lfun/QueryEnemies
+++ b/doc/lfun/QueryEnemies
@@ -1,33 +1,54 @@
-FUNKTION:
-	mixed QueryEnemies();
 
-DEFINIERT IN:
-	/std/living/combat.c
+QueryEnemies()
+**************
 
-ARGUMENTE:
-	keine
 
-RUeCKGABEWERT:
-	Array mit Array aus bekannten Gegnern und Array aus Zeiten
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Diese Funktion enthaelt ein Array, das zwei Elemente enthaelt, die
-	wiederum Arrays sind:
-	  1. Array: Die bekannten Gegner als Objektpointer.
-	  2. Array: Die zugeordneten Zeiten, wie lange ein Gegner noch als
-	            solcher bekannt sein soll.
-	Im Normalfall wird ein Gegner dann bekannt, wenn man gezielt
-	jemanden atackiert, oder wenn man einen Angriff abwehren muss.
-	Dann wird der Gegner intern abgespeichert, und es wird eine Zeit
-	gesetzt, die dann runtergezaehlt wird. Ist die Zeit auf 0, so wird
-	der Gegner wieder automatisch ausgetragen.
-	(Standardmaessig betraegt diese Zeit 600 Sekunden (300 Heartbeats).)
-	Man kann sich die Gegner auch in Form eines Mappings zurueckgeben
-	lassen. Dies erreicht man mittels der Funktion GetEnemies().
+   mixed QueryEnemies();
 
-SIEHE AUCH:
-	Kill(), Attack(), Defend(), do_my_heart_beat(), PresentEnemies(),
-	GetEnemies(), SelectEnemy(), QueryPreferedEnemy(), P_PREFERED_ENEMY
 
-----------------------------------------------------------------------------
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit Array aus bekannten Gegnern und Array aus Zeiten
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion enthaelt ein Array, das zwei Elemente enthaelt, die
+   wiederum Arrays sind:
+     1. Array: Die bekannten Gegner als Objektpointer.
+     2. Array: Die zugeordneten Zeiten, wie lange ein Gegner noch als
+               solcher bekannt sein soll.
+   Im Normalfall wird ein Gegner dann bekannt, wenn man gezielt
+   jemanden atackiert, oder wenn man einen Angriff abwehren muss.
+   Dann wird der Gegner intern abgespeichert, und es wird eine Zeit
+   gesetzt, die dann runtergezaehlt wird. Ist die Zeit auf 0, so wird
+   der Gegner wieder automatisch ausgetragen.
+   (Standardmaessig betraegt diese Zeit 600 Sekunden (300 Heartbeats).)
+   Man kann sich die Gegner auch in Form eines Mappings zurueckgeben
+   lassen. Dies erreicht man mittels der Funktion GetEnemies().
+
+
+SIEHE AUCH
+==========
+
+   Kill(), Attack(), Defend(), do_my_heart_beat(), PresentEnemies(),
+   GetEnemies(), SelectEnemy(), QueryPreferedEnemy(), P_PREFERED_ENEMY
+
 29.12.2007, Zesstra
diff --git a/doc/lfun/QueryFlaw b/doc/lfun/QueryFlaw
index 8137d81..e12a119 100644
--- a/doc/lfun/QueryFlaw
+++ b/doc/lfun/QueryFlaw
@@ -1,41 +1,63 @@
+
 QueryFlaw()
+***********
 
-FUNKTION:
-     mixed *QueryFlaw();
 
-DEFINIERT IN:
-     /std/armour/combat.c,
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   mixed *QueryFlaw();
 
-BESCHREIBUNG:
-     QueryFlaw() liefert Informationen ueber den Grad der Abnutzung der
-     Waffe bzw. Ruestung. Der Zustand wird als Array mit der Zahl der
-     TakeFlaw()-Aufrufe und dem Datum des ersten TakeFlaw()-Aufrufs
-     zurueckgegeben.
 
-RUeCKGABEWERT:
-     Ein Array mit drei Elementen:
-       1. der aktuelle Zaehlerstand
-       2. Zeit der ersten Benutzung
-       3. die Zeit der ersten Benutzung als String
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Den aktuellen Abnutzungsgrad einer Ruestung kann man sich wie folgt
-     anzeigen lassen:
+   /std/armour/combat.c,
+   /std/weapon/combat.c
 
-     mixed *flaw;
 
-     flaw = ruestung->QueryFlaw();
+ARGUMENTE
+=========
 
-     printf("Zaehlerstand: %d, erster Schlag: %s\n", flaw[0], flaw[2]);
-     // oder analog:
-     printf("Zaehlerstand: %d, erster Schlag: %s\n", flaw[0], dtime(flaw[1]));
+   keine
 
-SIEHE AUCH:
-     TakeFlaw(), /std/armour/combat.c, /std/weapon/combat.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   QueryFlaw() liefert Informationen ueber den Grad der Abnutzung der
+   Waffe bzw. Ruestung. Der Zustand wird als Array mit der Zahl der
+   TakeFlaw()-Aufrufe und dem Datum des ersten TakeFlaw()-Aufrufs
+   zurueckgegeben.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array mit drei Elementen:
+     1. der aktuelle Zaehlerstand
+     2. Zeit der ersten Benutzung
+     3. die Zeit der ersten Benutzung als String
+
+
+BEISPIELE
+=========
+
+   Den aktuellen Abnutzungsgrad einer Ruestung kann man sich wie folgt
+   anzeigen lassen:
+
+   mixed *flaw;
+
+   flaw = ruestung->QueryFlaw();
+
+   printf("Zaehlerstand: %d, erster Schlag: %s\n", flaw[0], flaw[2]);
+   // oder analog:
+   printf("Zaehlerstand: %d, erster Schlag: %s\n", flaw[0], dtime(flaw[1]));
+
+
+SIEHE AUCH
+==========
+
+   TakeFlaw(), /std/armour/combat.c, /std/weapon/combat.c
+
 Last modified: Wed May 8 10:22:32 1996 by Wargon
diff --git a/doc/lfun/QueryGenderString b/doc/lfun/QueryGenderString
index 967a16e..845758f 100644
--- a/doc/lfun/QueryGenderString
+++ b/doc/lfun/QueryGenderString
@@ -1,23 +1,42 @@
+
 QueryGenderString()
+*******************
 
-FUNKTION:
-     string QueryGenderString();
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   string QueryGenderString();
 
-BESCHREIBUNG:
-     Es wird ein String mit dem Geschlecht des Objektes zurueckgegeben
-     ("maennlich", "weiblich", "saechlich").
 
-RUeCKGABEWERT:
-     Der String mit dem Geschlecht.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     /std/thing/language.c
+   /std/thing/language.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein String mit dem Geschlecht des Objektes zurueckgegeben
+   ("maennlich", "weiblich", "saechlich").
+
+
+RUeCKGABEWERT
+=============
+
+   Der String mit dem Geschlecht.
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/language.c
+
 Last modified: Wed May 8 10:23:00 1996 by Wargon
diff --git a/doc/lfun/QueryGramsPerUnits b/doc/lfun/QueryGramsPerUnits
index 3549e54..62d5580 100644
--- a/doc/lfun/QueryGramsPerUnits
+++ b/doc/lfun/QueryGramsPerUnits
@@ -1,31 +1,53 @@
+
 QueryGramsPerUnits()
+********************
 
-FUNKTION:
-     int *QueryGramsPerUnits();
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int *QueryGramsPerUnits();
 
-BESCHREIBUNG:
-     Liefert das Gewichtsverhaeltnis fuer die Einheiten zurueck.
 
-RUeCKGABEWERT:
-     Ein Array von zwei Zahlen. Die erste Zahl ist das Gewicht der in der
-     zweiten Zahl angegebenen Einheiten.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Steht im Unit-Objekt folgende Gewichtszuweisung:
+   /std/unit.c
 
-       SetGramsPerUnits(4,1);
 
-     so liefert QueryGramsPerUnits() als Ergebnis ({4, 1}).
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     SetCoinsPerUnits(), QueryCoinsPerUnits() SetGramsPerUnits(),
-     /std/unit.c
+   keine
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Liefert das Gewichtsverhaeltnis fuer die Einheiten zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array von zwei Zahlen. Die erste Zahl ist das Gewicht der in der
+   zweiten Zahl angegebenen Einheiten.
+
+
+BEISPIELE
+=========
+
+   Steht im Unit-Objekt folgende Gewichtszuweisung:
+
+     SetGramsPerUnits(4,1);
+
+   so liefert QueryGramsPerUnits() als Ergebnis ({4, 1}).
+
+
+SIEHE AUCH
+==========
+
+   SetCoinsPerUnits(), QueryCoinsPerUnits() SetGramsPerUnits(),
+   /std/unit.c
+
 Last modified: Wed May 8 10:22:39 1996 by Wargon
diff --git a/doc/lfun/QueryGroupedKeys b/doc/lfun/QueryGroupedKeys
index ce7e316..5101e8d 100644
--- a/doc/lfun/QueryGroupedKeys
+++ b/doc/lfun/QueryGroupedKeys
@@ -1,26 +1,44 @@
+
 QueryGroupedKeys()
+******************
 
-FUNKTION:
-    mixed *QueryGroupedKeys()
 
-DEFINIERT IN:
-    /secure/questmaster.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   mixed *QueryGroupedKeys()
 
-RUECKGABEWERT:
-    Array mit Arrays mit den Schluesselwoertern der Quests
 
-BESCHREIBUNG:
-    Diese Funktion liefert ein Array mit mehreren Arrays zurueck, die
-    die Schluesselwoerter der Quests enthalten. Dabei enthaelt das 
-    erste Array die Schluesselwoerter der Quests der ersten Gruppe etc.
-    Das letzte Array enthaelt die Gruppe der optionalen Quests.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GiveQuest, QueryQuest, /secure/questmaster.h
+   /secure/questmaster.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUECKGABEWERT
+=============
+
+   Array mit Arrays mit den Schluesselwoertern der Quests
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert ein Array mit mehreren Arrays zurueck, die
+   die Schluesselwoerter der Quests enthalten. Dabei enthaelt das
+   erste Array die Schluesselwoerter der Quests der ersten Gruppe etc.
+   Das letzte Array enthaelt die Gruppe der optionalen Quests.
+
+
+SIEHE AUCH
+==========
+
+   GiveQuest, QueryQuest, /secure/questmaster.h
+
 Zuletzt geaendert: Son, 19. Nov 2000, 13:22:15 von Zook.
-
diff --git a/doc/lfun/QueryGuest b/doc/lfun/QueryGuest
index cc9971b..61cfb04 100644
--- a/doc/lfun/QueryGuest
+++ b/doc/lfun/QueryGuest
@@ -1,33 +1,54 @@
+
 QueryGuest()
-FUNKTION:
-     int QueryGuest();
+************
 
-DEFINIERT IN:
-     /std/player/base
 
-BESCHREIBUNG:
-     Auf der uid basierende Hilfsfunktion, um Gaeste zu identifizieren.
+FUNKTION
+========
 
-RUeCKGABEWERT:
-     1, wenn Spielerobjekt ein Gast ist; 0 sonst
+   int QueryGuest();
 
-BEISPIELE:
-     if(this_interactive()->QueryGuest())
-     {
-       (this_interactive()->ReceiveMsg(
-          "Wir bedienen hier nur ordentliche Charaktere.",
-          MT_LISTEN, MA_SAY,
-          "Der Wirt sagt: ") != MSG_SENSE_BLOCK) ||
-       (this_interactive()->ReceiveMsg(
-          "Der Wirt gestikuliert dich hinaus.",
-          MT_LOOK, MA_LOOK) != MSG_SENSE_BLOCK) ||
-       (this_interactive()->ReceiveMsg(
-          "Irgendwer stupst dich an. Du sollst wohl gehen.",
-          MT_FEEL, MA_FEEL));
-       return 1;
-     }
 
-SIEHE AUCH:
-     getuid()
+DEFINIERT IN
+============
+
+   /std/player/base
+
+
+BESCHREIBUNG
+============
+
+   Auf der uid basierende Hilfsfunktion, um Gaeste zu identifizieren.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn Spielerobjekt ein Gast ist; 0 sonst
+
+
+BEISPIELE
+=========
+
+   if(this_interactive()->QueryGuest())
+   {
+     (this_interactive()->ReceiveMsg(
+        "Wir bedienen hier nur ordentliche Charaktere.",
+        MT_LISTEN, MA_SAY,
+        "Der Wirt sagt: ") != MSG_SENSE_BLOCK) ||
+     (this_interactive()->ReceiveMsg(
+        "Der Wirt gestikuliert dich hinaus.",
+        MT_LOOK, MA_LOOK) != MSG_SENSE_BLOCK) ||
+     (this_interactive()->ReceiveMsg(
+        "Irgendwer stupst dich an. Du sollst wohl gehen.",
+        MT_FEEL, MA_FEEL));
+     return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   getuid()
 
 14. Mai 2015 Gloinson
diff --git a/doc/lfun/QueryHealInfo b/doc/lfun/QueryHealInfo
index 07b7542..cc42fbc 100644
--- a/doc/lfun/QueryHealInfo
+++ b/doc/lfun/QueryHealInfo
@@ -1,26 +1,45 @@
+
 QueryHealInfo()
+***************
 
-FUNKTION:
-     string QueryHealInfo();
 
-DEFINIERT IN:
-     /std/corpse.c,
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   string QueryHealInfo();
 
-BESCHREIBUNG:
-     QueryHealInfo() liefert einen Standardtext zurueck, der grob Auskunft 
-     darueber gibt, welche Auswirkungen das Essen einer Leiche haette. 
-     Diese Info kann z.B. von Gilden verwendet werden, die P_HEAL (s.dort)
-     einer Leiche nicht selbst auswerten wollen.
 
-RUeCKGABEWERT:
-     Ein nicht umbrochener String. Fuer Zeilenumbrueche kann derjenige,
-     der den Text ausliest, selbst sorgen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     /std/corpse.c, P_HEAL
+   /std/corpse.c,
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   QueryHealInfo() liefert einen Standardtext zurueck, der grob Auskunft
+   darueber gibt, welche Auswirkungen das Essen einer Leiche haette.
+   Diese Info kann z.B. von Gilden verwendet werden, die P_HEAL (s.dort)
+   einer Leiche nicht selbst auswerten wollen.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein nicht umbrochener String. Fuer Zeilenumbrueche kann derjenige,
+   der den Text ausliest, selbst sorgen.
+
+
+SIEHE AUCH
+==========
+
+   /std/corpse.c, P_HEAL
+
 Last modified: 31.03.2008, Arathorn
diff --git a/doc/lfun/QueryMaterial b/doc/lfun/QueryMaterial
index 71e3a33..94a5367 100644
--- a/doc/lfun/QueryMaterial
+++ b/doc/lfun/QueryMaterial
@@ -1,34 +1,62 @@
+
+QueryMaterial()
+***************
+
+
 QueryMaterial(L)
-FUNKTION:
-     int QueryMaterial(string mat)
+================
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     string mat -	Material, auf das getestet werden soll
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Testet, ob ein Gegenstand aus dem angegebenen Material besteht
-     und gibt dessen Anteil zurueck.
-     Die Rueckgabe ist im Wertebereich -100 (Antigruppen) bis +100 (%).
+   int QueryMaterial(string mat)
 
-RUECKGABEWERT:
-     Anteil in Prozent.
 
-BEISPIELE:
-     if(ob->QueryMaterial(MAT_IVORY)<=0)
-       write("Daraus kannst Du keine Billiardkugeln schnitzen!\n");
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Methoden:    QueryMaterialGroup(), MaterialList(),
-     Listen:	  AllMaterials(), AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
-     Sonstiges:	  P_MATERIAL_KNOWLEDGE
+   /std/thing/description.c
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   string mat -       Material, auf das getestet werden soll
+
+
+BESCHREIBUNG
+============
+
+   Testet, ob ein Gegenstand aus dem angegebenen Material besteht
+   und gibt dessen Anteil zurueck.
+   Die Rueckgabe ist im Wertebereich -100 (Antigruppen) bis +100 (%).
+
+
+RUECKGABEWERT
+=============
+
+   Anteil in Prozent.
+
+
+BEISPIELE
+=========
+
+   if(ob->QueryMaterial(MAT_IVORY)<=0)
+     write("Daraus kannst Du keine Billiardkugeln schnitzen!\n");
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterialGroup(), MaterialList(),
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/QueryMaterialGroup b/doc/lfun/QueryMaterialGroup
index c3b6860..3365f73 100644
--- a/doc/lfun/QueryMaterialGroup
+++ b/doc/lfun/QueryMaterialGroup
@@ -1,50 +1,81 @@
+
+QueryMaterialGroup()
+********************
+
+
 QueryMaterialGroup(L)
-FUNKTION:
-     int QueryMaterialGroup(string grp)
+=====================
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     string grp		- Materialgruppe, auf die getestet werden soll
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Liefert eine Angabe, zu welchem Anteil das Objekt aus Materialien
-     dieser Gruppe besteht.
-     Die Rueckgabe ist im Wertebereich -100 (Antigruppen) bis +100 (%).
+   int QueryMaterialGroup(string grp)
 
-RUECKGABEWERT:
-     Anteil in Prozent.
 
-BEMERKUNGEN:
-     Ruft MaterialGroup() an der MATERIALDB.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     // kann man damit was anfangen?
-     if(ob->QueryMaterialGroup(MATGROUP_METAL)<50)
-       write("Der Schmied sagt: Daraus kann ich kein Schwert fertigen.\n");
+   /std/thing/description.c
 
-     // verbrennt das Ding?
-     if(ob->QueryMaterialGroup(MATGROUP_INFLAMMABLE)>50) {
-       write(ob->Name(WER)+" geht in Flammen auf.\n");
-       ob->remove();
-     }
 
-     // wie magnetisch ist es denn?
-     if(ob->QueryMaterialGroup(MATGROUP_MAGNETIC)>50)
-      write(break_string(
-       ob->Name(WER)+" flutscht Dir aus der Hand und bleibt am Magneten "
-		     "kleben!",78));
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Konzepte:	  material, materialerkennung
-     Grundlegend: P_MATERIAL, /sys/thing/material.h
-     Methoden:    QueryMaterial(), MaterialList(),
-     Listen:	  AllMaterials(), AllGroups(), Dump()
-		  materialliste, materialgruppen
-     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
-		  GroupName(), MaterialName(),
-		  GetGroupMembers(), GetMatMembership()
-     Sonstiges:	  P_MATERIAL_KNOWLEDGE
+   string grp         - Materialgruppe, auf die getestet werden soll
 
-7. Mai 2004 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Liefert eine Angabe, zu welchem Anteil das Objekt aus Materialien
+   dieser Gruppe besteht.
+   Die Rueckgabe ist im Wertebereich -100 (Antigruppen) bis +100 (%).
+
+
+RUECKGABEWERT
+=============
+
+   Anteil in Prozent.
+
+
+BEMERKUNGEN
+===========
+
+   Ruft MaterialGroup() an der MATERIALDB.
+
+
+BEISPIELE
+=========
+
+   // kann man damit was anfangen?
+   if(ob->QueryMaterialGroup(MATGROUP_METAL)<50)
+     write("Der Schmied sagt: Daraus kann ich kein Schwert fertigen.\n");
+
+   // verbrennt das Ding?
+   if(ob->QueryMaterialGroup(MATGROUP_INFLAMMABLE)>50) {
+     write(ob->Name(WER)+" geht in Flammen auf.\n");
+     ob->remove();
+   }
+
+   // wie magnetisch ist es denn?
+   if(ob->QueryMaterialGroup(MATGROUP_MAGNETIC)>50)
+    write(break_string(
+     ob->Name(WER)+" flutscht Dir aus der Hand und bleibt am Magneten "
+                   "kleben!",78));
+
+
+SIEHE AUCH
+==========
+
+   Konzepte:    material, materialerkennung
+   Grundlegend: P_MATERIAL, /sys/thing/material.h
+   Methoden:    QueryMaterial(), MaterialList(),
+   Listen:      AllMaterials(), AllGroups(), Dump()
+                materialliste, materialgruppen
+   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
+                GroupName(), MaterialName(),
+                GetGroupMembers(), GetMatMembership()
+   Sonstiges:   P_MATERIAL_KNOWLEDGE
+
+7. Mai 2004 Gloinson
diff --git a/doc/lfun/QueryMaxQP b/doc/lfun/QueryMaxQP
index 9fa0f5a..7b5aba2 100644
--- a/doc/lfun/QueryMaxQP
+++ b/doc/lfun/QueryMaxQP
@@ -1,27 +1,45 @@
+
 QueryMaxQP()
+************
 
-FUNKTION:
-    int QueryMaxQP()
 
-DEFINIERT IN:
-    /secure/questmaster.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   int QueryMaxQP()
 
-RUECKGABEWERT:
-    Abenteuerpunkte der Pflichtquests
 
-BESCHREIBUNG:
-    Diese Funktion liefert die Abenteuerpunkte der als Pflichtquest
-    eingetragenen Abenteuer zurueck. Pflichtquest bedeutet entweder,
-    dass die Quest zwingend geloest werden muss oder dass sie zu
-    der 80%-Regel gehoert.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
-    QueryOptQP, QueryTotalQP
+   /secure/questmaster.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUECKGABEWERT
+=============
+
+   Abenteuerpunkte der Pflichtquests
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert die Abenteuerpunkte der als Pflichtquest
+   eingetragenen Abenteuer zurueck. Pflichtquest bedeutet entweder,
+   dass die Quest zwingend geloest werden muss oder dass sie zu
+   der 80%-Regel gehoert.
+
+
+SIEHE AUCH
+==========
+
+   GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
+   QueryOptQP, QueryTotalQP
+
 Zuletzt geaendert: Sam, 25. Nov 2000, 14:04:28 von Zook.
-
diff --git a/doc/lfun/QueryMoney b/doc/lfun/QueryMoney
index 899b50e..775a65c 100644
--- a/doc/lfun/QueryMoney
+++ b/doc/lfun/QueryMoney
@@ -1,28 +1,49 @@
+
 QueryMoney()
-FUNKTION:
-     int QueryMoney()
+************
 
-DEFINIERT IN:
-     /std/player/moneyhandler.c
 
-BESCHREIBUNG:
-     Testet, ob ein Spieler, Objekt, Raum oder Npc ueber eine definierte 
-     Geldmenge verfuegt, oder nicht.
+FUNKTION
+========
 
-RUECKGABEWERT:
-     Geldmenge im Besitz des abgefragten Spielers
+   int QueryMoney()
 
-BEISPIELE:
-     int i;
-     i=50+random(10);
-     if(!this_player()->QueryMoney())
-       write("Du besitzt keine Muenzen!\n");
-     if(this_player()->QueryMoney() < i)
-       write("Du besitzt nicht die erforderlichen "+i+" Muenzen.\n");
 
-SIEHE AUCH:
-     Geldhandling:	AddMoney(L)
-     Zentralbank:	PayIn(L), WithDraw(L), _query_current_money(L)
-     Sonstiges:		/items/money.c
+DEFINIERT IN
+============
+
+   /std/player/moneyhandler.c
+
+
+BESCHREIBUNG
+============
+
+   Testet, ob ein Spieler, Objekt, Raum oder Npc ueber eine definierte
+   Geldmenge verfuegt, oder nicht.
+
+
+RUECKGABEWERT
+=============
+
+   Geldmenge im Besitz des abgefragten Spielers
+
+
+BEISPIELE
+=========
+
+   int i;
+   i=50+random(10);
+   if(!this_player()->QueryMoney())
+     write("Du besitzt keine Muenzen!\n");
+   if(this_player()->QueryMoney() < i)
+     write("Du besitzt nicht die erforderlichen "+i+" Muenzen.\n");
+
+
+SIEHE AUCH
+==========
+
+   Geldhandling:      AddMoney(L)
+   Zentralbank:       PayIn(L), WithDraw(L), _query_current_money(L)
+   Sonstiges:         /items/money.c
 
 Last modified: Die,  1. Aug 2000, 16:39:06 by Tilly
diff --git a/doc/lfun/QueryName b/doc/lfun/QueryName
index d26cd1a..71e65e3 100644
--- a/doc/lfun/QueryName
+++ b/doc/lfun/QueryName
@@ -1,24 +1,43 @@
+
 QueryName()
+***********
 
-FUNKTION:
-     mixed QueryName();
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   mixed QueryName();
 
-BESCHREIBUNG:
-     DIESE FUNKTION SOLLTE NICHT MEHR BENUTZT WERDEN!
-     Es wird der Inhalt der Property P_NAME zuueckgegeben; dies laesst sich
-     jedoch genau so gut mit QueryProp(P_NAME) bewerkstelligen!
 
-RUeCKGABEWERT:
-     String oder Array von Strings mit dem Namen des Objektes.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     QueryProp(), Name(), name(), /std/thing/description.c
+   /std/thing/description.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   DIESE FUNKTION SOLLTE NICHT MEHR BENUTZT WERDEN!
+   Es wird der Inhalt der Property P_NAME zuueckgegeben; dies laesst sich
+   jedoch genau so gut mit QueryProp(P_NAME) bewerkstelligen!
+
+
+RUeCKGABEWERT
+=============
+
+   String oder Array von Strings mit dem Namen des Objektes.
+
+
+SIEHE AUCH
+==========
+
+   QueryProp(), Name(), name(), /std/thing/description.c
+
 Last modified: Sat Aug  3 11:21:05 2002 by Vanion
diff --git a/doc/lfun/QueryOpenMiniQuestsForPlayer b/doc/lfun/QueryOpenMiniQuestsForPlayer
index 40246ae..f43d7cc 100644
--- a/doc/lfun/QueryOpenMiniQuestsForPlayer
+++ b/doc/lfun/QueryOpenMiniQuestsForPlayer
@@ -1,54 +1,80 @@
-FUNKTION:
-    mapping QueryOpenMiniQuestsForPlayer(object player)
 
-DEFINIERT IN:
-    /secure/questmaster
+QueryOpenMiniQuestsForPlayer()
+******************************
 
-BESCHREIBUNG:
-    Diese Funktion gibt die Liste der offenen Miniquests des Spielers als
-    Mapping zurueck.
 
-ARGUMENTE:
-    player - das interessierende Spielerobjekt
+FUNKTION
+========
 
-RUECKGABEWERTE:
-    Mapping mit der Liste der Miniquests, fuer die das abfragende Objekt
-    zustaendig ist, oder leeres Mapping, wenn der Spieler keine MQs mehr
-    offen hat.
+   mapping QueryOpenMiniQuestsForPlayer(object player)
 
-    Die Liste enthaelt die Miniquestnummer als Key. Diesem sind zwei Werte
-    zugeordnet: zum einen ein Miniquest-Aufgabentext, und zum anderen -
-    falls der Spieler eine der Vorbedingungen fuer die Miniquest nicht
-    erfuellt - ein Hinweistext, der Auskunft gibt, welche Bedingung noch
-    zu erfuellen ist ("Seherstatus fehlt"). Diese Hinweistexte entsprechen
-    denen aus check_restrictions() in /std/restriction_checker.c. Der 
-    jeweils andere Text wird auf 0 gesetzt.
 
-    Die Struktur des Mappings ist daher folgende:
-      ([ MQ-Nummer : <Aufgabenstellung> ; <Hinderungsgrund> ])
-    
-    Beispiel: ein Spieler hat die Miniquests 18 und 49 noch nicht geloest,
-    erfuellt aber nur fuer Miniquest 49 die Anforderungen. Miniquest 18
-    erfordert den Seherstatus. Dann saehe das Mapping so aus:
-      ([ 18 : 0                    ; "Dazu musst Du erst Seher werden.\n",
-         49 : "Aufgabentext_zu_49" ; 0 ])
+DEFINIERT IN
+============
 
-    Jedes abfragende Objekt muss daher dieses Mapping zunaecht geeignet
-    auf seinen Inhalt pruefen, um zu ermitteln, welche Meldung jeweils
-    auszugeben ist.
+   /secure/questmaster
 
-BEMERKUNGEN:
-    Das abfragende Objekt muss von einem Erzmagier oder Gott (z.B. dem
-    zustaendigen Quest-EM) im Questmaster als zugriffsberechtigt bei den-
-    jenigen Miniquests eingetragen sein, fuer die es die entsprechenden
-    Miniquest-Hinweise ausgeben darf. Diese Berechtigung ist mit dem 
-    Quest-EM abzustimmen. Anderen Objekten wird ein leeres Mapping zurueck-
-    gegeben.
 
-SIEHE AUCH:
-    AddMiniQuest(L), ChangeMiniQuest(L)
-    P_RESTRICTIONS
-    erzmagier
+BESCHREIBUNG
+============
 
-----------------------------------------------------------------------------
+   Diese Funktion gibt die Liste der offenen Miniquests des Spielers als
+   Mapping zurueck.
+
+
+ARGUMENTE
+=========
+
+   player - das interessierende Spielerobjekt
+
+
+RUECKGABEWERTE
+==============
+
+   Mapping mit der Liste der Miniquests, fuer die das abfragende Objekt
+   zustaendig ist, oder leeres Mapping, wenn der Spieler keine MQs mehr
+   offen hat.
+
+   Die Liste enthaelt die Miniquestnummer als Key. Diesem sind zwei Werte
+   zugeordnet: zum einen ein Miniquest-Aufgabentext, und zum anderen -
+   falls der Spieler eine der Vorbedingungen fuer die Miniquest nicht
+   erfuellt - ein Hinweistext, der Auskunft gibt, welche Bedingung noch
+   zu erfuellen ist ("Seherstatus fehlt"). Diese Hinweistexte entsprechen
+   denen aus check_restrictions() in /std/restriction_checker.c. Der
+   jeweils andere Text wird auf 0 gesetzt.
+
+   Die Struktur des Mappings ist daher folgende:
+     ([ MQ-Nummer : <Aufgabenstellung> ; <Hinderungsgrund> ])
+
+
+
+   Beispiel: ein Spieler hat die Miniquests 18 und 49 noch nicht geloest,
+   erfuellt aber nur fuer Miniquest 49 die Anforderungen. Miniquest 18
+   erfordert den Seherstatus. Dann saehe das Mapping so aus:
+     ([ 18 : 0                    ; "Dazu musst Du erst Seher werden.\n",
+        49 : "Aufgabentext_zu_49" ; 0 ])
+
+   Jedes abfragende Objekt muss daher dieses Mapping zunaecht geeignet
+   auf seinen Inhalt pruefen, um zu ermitteln, welche Meldung jeweils
+   auszugeben ist.
+
+
+BEMERKUNGEN
+===========
+
+   Das abfragende Objekt muss von einem Erzmagier oder Gott (z.B. dem
+   zustaendigen Quest-EM) im Questmaster als zugriffsberechtigt bei den-
+   jenigen Miniquests eingetragen sein, fuer die es die entsprechenden
+   Miniquest-Hinweise ausgeben darf. Diese Berechtigung ist mit dem
+   Quest-EM abzustimmen. Anderen Objekten wird ein leeres Mapping zurueck-
+   gegeben.
+
+
+SIEHE AUCH
+==========
+
+   AddMiniQuest(L), ChangeMiniQuest(L)
+   P_RESTRICTIONS
+   erzmagier
+
 Last modified: 6. Juni 2014, Arathorn.
diff --git a/doc/lfun/QueryOwn b/doc/lfun/QueryOwn
index b1a55f6..22e9e5f 100644
--- a/doc/lfun/QueryOwn
+++ b/doc/lfun/QueryOwn
@@ -1,32 +1,53 @@
+
 QueryOwn()
+**********
 
-FUNKTION:
-     varargs string QueryOwn(int casus)
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     casus
-          Der Fall fuer die Anrede.
+   varargs string QueryOwn(int casus)
 
-BESCHREIBUNG:
-     Diese Funktion liefert das dem Anlass entsprechende Possessiv-
-     pronomen fuer den Spieler selber (Dein/Deine).
 
-RUeCKGABEWERT:
-     Ein String mit dem Pronomen.
+DEFINIERT IN
+============
 
-BEISPIELE:
+   /std/thing/language.c
 
-     printf("%s %s loest sich auf.\n",
-           capitalize(obj->QueryOwn(WER)),obj->name(WER));
 
-     (In den meisten Faellen kann man hier auch direkt "Dein" oder "Deine"
-      einsetzen.)
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     /std/thing/language.c
+   casus
+        Der Fall fuer die Anrede.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert das dem Anlass entsprechende Possessiv-
+   pronomen fuer den Spieler selber (Dein/Deine).
+
+
+RUeCKGABEWERT
+=============
+
+   Ein String mit dem Pronomen.
+
+
+BEISPIELE
+=========
+
+   printf("%s %s loest sich auf.\n",
+         capitalize(obj->QueryOwn(WER)),obj->name(WER));
+
+   (In den meisten Faellen kann man hier auch direkt "Dein" oder "Deine"
+    einsetzen.)
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/language.c
+
 Last modified: Sun Aug 10 23:55:27 2003 by Mandragon
diff --git a/doc/lfun/QueryPassengers b/doc/lfun/QueryPassengers
index a71af67..d6f9331 100644
--- a/doc/lfun/QueryPassengers
+++ b/doc/lfun/QueryPassengers
@@ -1,29 +1,51 @@
+
 QueryPassengers()
+*****************
 
-FUNKTION:
-     object *QueryPassengers();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   object *QueryPassengers();
 
-BESCHREIBUNG:
-     Diese Funktion ermittelt die momentan auf dem Transporter befindlichen
-     Passagiere.
 
-RUeCKGABEWERT:
-     Array von Objekten mit den Passagieren.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Es werden nur die Passagiere zurueckgegeben, die sich in dem
-     eigentlichen Transporterobjekt befinden! Wenn der Transporter noch um
-     zusaetzliche Raeume vergroessert wird, werden unter Umstaenden nicht
-     alle Passagiere erfasst!
+   /std/transport.c
 
-SIEHE AUCH:
-     /std/transport.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ermittelt die momentan auf dem Transporter befindlichen
+   Passagiere.
+
+
+RUeCKGABEWERT
+=============
+
+   Array von Objekten mit den Passagieren.
+
+
+BEMERKUNGEN
+===========
+
+   Es werden nur die Passagiere zurueckgegeben, die sich in dem
+   eigentlichen Transporterobjekt befinden! Wenn der Transporter noch um
+   zusaetzliche Raeume vergroessert wird, werden unter Umstaenden nicht
+   alle Passagiere erfasst!
+
+
+SIEHE AUCH
+==========
+
+   /std/transport.c
+
 Last modified: Wed May 8 10:22:48 1996 by Wargon
diff --git a/doc/lfun/QueryPosition b/doc/lfun/QueryPosition
index 4d5179d..08af6fe 100644
--- a/doc/lfun/QueryPosition
+++ b/doc/lfun/QueryPosition
@@ -1,29 +1,48 @@
+
 QueryPosition()
+***************
 
-FUNKTION:
-     string *QueryPosition();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   string *QueryPosition();
 
-BESCHREIBUNG:
-     Es wird ein Array von zwei Strings mit Kennzeichnern der letzten (oder
-     aktuellen) und der naechsten Station im Fahrplan zurueckgegeben.
 
-     Die Kennzeichner sind dabei die ersten Argumente der entsprechenden
-     AddXXX()-Aufrufen, also der Name der Haltestelle bei AddRoute, der Text
-     der Meldung bei AddMsg() und der Name der Funktion bei AddFun().
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Array mit zwei Strings. Der erste String gibt den Kennzeichner der
-     momentanen Fahrplanstation an, der zweite String den Kennzeichner der
-     naechsten Fahrplanstation.
+   /std/transport.c
 
-SIEHE AUCH:
-     AddRoute(), AddMsg(), AddFun(), /std/transport.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Array von zwei Strings mit Kennzeichnern der letzten (oder
+   aktuellen) und der naechsten Station im Fahrplan zurueckgegeben.
+
+   Die Kennzeichner sind dabei die ersten Argumente der entsprechenden
+   AddXXX()-Aufrufen, also der Name der Haltestelle bei AddRoute, der Text
+   der Meldung bei AddMsg() und der Name der Funktion bei AddFun().
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit zwei Strings. Der erste String gibt den Kennzeichner der
+   momentanen Fahrplanstation an, der zweite String den Kennzeichner der
+   naechsten Fahrplanstation.
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), AddMsg(), AddFun(), /std/transport.c
+
 Last modified: Wed May 8 10:22:52 1996 by Wargon
diff --git a/doc/lfun/QueryPossPronoun b/doc/lfun/QueryPossPronoun
index c3f4106..90af78a 100644
--- a/doc/lfun/QueryPossPronoun
+++ b/doc/lfun/QueryPossPronoun
@@ -1,48 +1,74 @@
+
 QueryPossPronoun()
+******************
 
-FUNKTION:
-     varargs string QueryPossPronoun(mixed what, int casus, int anzahl);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     what
-          Geschlecht des Objektes, das besessen wird, oder das Objekt
-          selbst.
+   varargs string QueryPossPronoun(mixed what, int casus, int anzahl);
 
-     casus
-          Der Fall, in dem das Objekt besessen wird.
 
-     anzahl
-          Handelt es sich um nur ein Objekt oder um mehrere?
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-     Diese Funktion gibt ein Possessivpronomen zurueck, das das
-     Besitzverhaeltnis eines Objektes zu diesem Objekt anzeigt.
+   /std/thing/language.c
 
-RUeCKGABEWERT:
-     Das Possessivpronomen im entsprechenden Fall.
 
-BEMERKUNGEN:
-     what und casus beziehen sich auf das Objekt, welches besessen wird, und
-     nicht auf den Besitzer!!!
+ARGUMENTE
+=========
 
-BEISPIELE:
-     Um eine korrekte Ausgabe beim Haendeklatschen zu erreichen, koennte man
-     zB. folgende Zeile verwenden:
+   what
+        Geschlecht des Objektes, das besessen wird, oder das Objekt
+        selbst.
 
-      printf("%s klatscht in %s Haende.\n",this_player()->name(WER),
-           this_player()->QueryPossPronoun(FEMALE, WEN, PLURAL));
+   casus
+        Der Fall, in dem das Objekt besessen wird.
 
-     FEMALE, da "die Hand" weiblich ist, WEN, da man im Akkusativ klatscht,
-     und PLURAL, da man dazu beide Haende braucht.
+   anzahl
+        Handelt es sich um nur ein Objekt oder um mehrere?
 
-     Ein beliebter Fehler ist es, als Fall WESSEN zu verwenden (in WESSEN
-     Haende klatscht man? => in seine).
-     Die richtige Frage waere aber: WEN klatscht man? (in die Haende)
 
-SIEHE AUCH:
-     QueryOwn(), QueryPronoun(), /std/thing/language.c
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt ein Possessivpronomen zurueck, das das
+   Besitzverhaeltnis eines Objektes zu diesem Objekt anzeigt.
+
+
+RUeCKGABEWERT
+=============
+
+   Das Possessivpronomen im entsprechenden Fall.
+
+
+BEMERKUNGEN
+===========
+
+   what und casus beziehen sich auf das Objekt, welches besessen wird, und
+   nicht auf den Besitzer!!!
+
+
+BEISPIELE
+=========
+
+   Um eine korrekte Ausgabe beim Haendeklatschen zu erreichen, koennte man
+   zB. folgende Zeile verwenden:
+
+    printf("%s klatscht in %s Haende.\n",this_player()->name(WER),
+         this_player()->QueryPossPronoun(FEMALE, WEN, PLURAL));
+
+   FEMALE, da "die Hand" weiblich ist, WEN, da man im Akkusativ klatscht,
+   und PLURAL, da man dazu beide Haende braucht.
+
+   Ein beliebter Fehler ist es, als Fall WESSEN zu verwenden (in WESSEN
+   Haende klatscht man? => in seine).
+   Die richtige Frage waere aber: WEN klatscht man? (in die Haende)
+
+
+SIEHE AUCH
+==========
+
+   QueryOwn(), QueryPronoun(), /std/thing/language.c
+
 Last modified: Wed Jan 11 13:13:35 CET 2006 by Rumata
diff --git a/doc/lfun/QueryPrayRoom b/doc/lfun/QueryPrayRoom
index 0a097d3..b783174 100644
--- a/doc/lfun/QueryPrayRoom
+++ b/doc/lfun/QueryPrayRoom
@@ -1,33 +1,50 @@
+
 QueryPrayRoom()
-
-FUNKTION:
-     public string QueryPrayRoom()
-
-DEFINIERT IN:
-     /std/player/base.c
-
-ARGUMENTE:
-     keine
-
-BESCHREIBUNG:
-    Dies ist der Raum, in den der Spieler nach dem Ende der Todessequenz
-    bewegt wird, d.h. ein Raum, wo er beten kann, um einen neuen Koerper zu
-    erhalten.
-    Der Raum wird als String angegeben (kein Objekt).
-
-    Jede Rasse hat einen Default fuer diese Funktion, welcher mit
-    SetDefaultPrayRoom() gesetzt wird. Dieser Default kann mit der Property
-    P_PRAY_ROOM ueberlagert werden. Wird die Property auf 0 dgesetzt, wird
-    dieser Default aktiv.
-
-RUeCKGABEWERT:
-    Der Objektname des Betraums (string)
+***************
 
 
-SIEHE AUCH:
-     P_PRAY_ROOM
-     SetDefaultPrayRoom
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   public string QueryPrayRoom()
+
+
+DEFINIERT IN
+============
+
+   /std/player/base.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Dies ist der Raum, in den der Spieler nach dem Ende der Todessequenz
+   bewegt wird, d.h. ein Raum, wo er beten kann, um einen neuen Koerper zu
+   erhalten.
+   Der Raum wird als String angegeben (kein Objekt).
+
+   Jede Rasse hat einen Default fuer diese Funktion, welcher mit
+   SetDefaultPrayRoom() gesetzt wird. Dieser Default kann mit der Property
+   P_PRAY_ROOM ueberlagert werden. Wird die Property auf 0 dgesetzt, wird
+   dieser Default aktiv.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Objektname des Betraums (string)
+
+
+SIEHE AUCH
+==========
+
+   P_PRAY_ROOM
+   SetDefaultPrayRoom
+
 21.05.2013, Zesstra
-
diff --git a/doc/lfun/QueryPreferedEnemy b/doc/lfun/QueryPreferedEnemy
index 267d27d..10a8ae0 100644
--- a/doc/lfun/QueryPreferedEnemy
+++ b/doc/lfun/QueryPreferedEnemy
@@ -1,35 +1,56 @@
-FUNKTION:
-	object QueryPreferedEnemy();
 
-DEFINIERT IN:
-	/std/living/combat.c
+QueryPreferedEnemy()
+********************
 
-ARGUMENTE:
-	keine
 
-RUeCKGABEWERT:
-	bevorzugter Gegner
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Diese Funktion liefert unter folgenden Bedingungen zufaellig eines
-	der Lebewesen als bevorzugten Gegner zurueck, welche in der
-	Property P_PREFERED_ENEMY in einem Array eingetragen sind:
-	  (1) Der erste Eintrag des erwaehnten Propertyarrays enthaelt
-	      einen Wert zwischen 0 und 100, der die Wahrscheinlichkeit
-	      dafuer angibt, dass ein Lebewesen als Gegner bevorzugt werden
-	      soll. Es wird also nicht immer bevorzugt, wenn dort ein Wert
-	      kleiner 100 steht! In diesem Fall wird eine 0 zurueckgegeben.
-	  (2) Das per Zufall aus den Arrayelementen ab Element 2 gewaehlte
-	      Lebewesen muss auch wirklich existieren. Ist dies nicht der
-	      Fall, wird das nunmehr leere Element aus dem Array entfernt
-	      und eine 0 zurueckgeliefert.
-	  (3) Das Lebewesen muss derzeit auch wirklich Feind sein! Ist dies
-	      nicht der Fall, wird eine 0 zurueckgegeben.
-	Will man eine andere Bevorzugung von Gegnern erreichen,
-	ueberschreibt man am besten diese Funktion.
+   object QueryPreferedEnemy();
 
-SIEHE AUCH:
-	SelectEnemy(), IsEnemy(), P_PREFERED_ENEMY
 
-----------------------------------------------------------------------------
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUeCKGABEWERT
+=============
+
+   bevorzugter Gegner
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert unter folgenden Bedingungen zufaellig eines
+   der Lebewesen als bevorzugten Gegner zurueck, welche in der
+   Property P_PREFERED_ENEMY in einem Array eingetragen sind:
+     (1) Der erste Eintrag des erwaehnten Propertyarrays enthaelt
+         einen Wert zwischen 0 und 100, der die Wahrscheinlichkeit
+         dafuer angibt, dass ein Lebewesen als Gegner bevorzugt werden
+         soll. Es wird also nicht immer bevorzugt, wenn dort ein Wert
+         kleiner 100 steht! In diesem Fall wird eine 0 zurueckgegeben.
+     (2) Das per Zufall aus den Arrayelementen ab Element 2 gewaehlte
+         Lebewesen muss auch wirklich existieren. Ist dies nicht der
+         Fall, wird das nunmehr leere Element aus dem Array entfernt
+         und eine 0 zurueckgeliefert.
+     (3) Das Lebewesen muss derzeit auch wirklich Feind sein! Ist dies
+         nicht der Fall, wird eine 0 zurueckgegeben.
+   Will man eine andere Bevorzugung von Gegnern erreichen,
+   ueberschreibt man am besten diese Funktion.
+
+
+SIEHE AUCH
+==========
+
+   SelectEnemy(), IsEnemy(), P_PREFERED_ENEMY
+
 Last modified: Wed May 26 16:47:51 1999 by Patryn
diff --git a/doc/lfun/QueryPronoun b/doc/lfun/QueryPronoun
index fd041cb..39088f9 100644
--- a/doc/lfun/QueryPronoun
+++ b/doc/lfun/QueryPronoun
@@ -1,32 +1,54 @@
+
 QueryPronoun()
+**************
 
-FUNKTION:
-     string QueryPronoun(int casus);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     casus
-          Der Fall, in dem das Personalpronomen verlangt wird.
+   string QueryPronoun(int casus);
 
-BESCHREIBUNG:
-     Es wird ein Personalpronomen ("er", "sie", "es") im entsprechenden Fall
-     fuer dieses Objekt berechnet.
 
-RUeCKGABEWERT:
-     Das Pronomen im entsprechenden Fall.
+DEFINIERT IN
+============
 
-BEISPIELE:
+   /std/thing/language.c
 
-     printf("Du versucht, %s zu nehmen, aber %s ist zu schwer.\n",
-           ob->name(WEN), ob->QueryPronoun(WER));
 
-     Hier wird immer das richtige Pronomen verwendet, egal, welches
-     Geschlecht das Objekt ob hat.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     SuggestArticle(), QueryPossPronoun(), /std/thing/language.c
-     QueryOwn()
-----------------------------------------------------------------------------
+   casus
+        Der Fall, in dem das Personalpronomen verlangt wird.
+
+
+BESCHREIBUNG
+============
+
+   Es wird ein Personalpronomen ("er", "sie", "es") im entsprechenden Fall
+   fuer dieses Objekt berechnet.
+
+
+RUeCKGABEWERT
+=============
+
+   Das Pronomen im entsprechenden Fall.
+
+
+BEISPIELE
+=========
+
+   printf("Du versucht, %s zu nehmen, aber %s ist zu schwer.\n",
+         ob->name(WEN), ob->QueryPronoun(WER));
+
+   Hier wird immer das richtige Pronomen verwendet, egal, welches
+   Geschlecht das Objekt ob hat.
+
+
+SIEHE AUCH
+==========
+
+   SuggestArticle(), QueryPossPronoun(), /std/thing/language.c
+   QueryOwn()
+
 Last modified: Wed May 8 10:23:14 1996 by Wargon
diff --git a/doc/lfun/QueryProp b/doc/lfun/QueryProp
index ee752e0..71c4fdf 100644
--- a/doc/lfun/QueryProp
+++ b/doc/lfun/QueryProp
@@ -1,39 +1,63 @@
+
 QueryProp()
-FUNKTION:
-     mixed QueryProp(string name);
+***********
 
-DEFINIERT IN:
-     /std/thing/properties.c
 
-ARGUMENTE:
-     string name	- abzufragende Property
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Datenwert der Property 'name' wird zurueckgegeben.
+   mixed QueryProp(string name);
 
-     Existiert eine F_QUERY_METHOD oder eine _query_'name'()-Methode fuer
-     diese Property, so wird diese aufgerufen und ihr 'Value' uebergeben.
-     Eine F_QUERY_METHOD hat dabei Vorrang vor _query_'name'(), d.h.
-     _query_'name'() wird nach erfolgreicher F_QUERY_METHOD nicht mehr
-     gerufen.
 
-     (Diese Methoden nutzen dann Set(), um auf den Datenwert der Property
-      'name' zurueckzugreifen. Teilweise werden aber auch interne Variablen
-      so oeffentlich gemacht und sind nicht in der ueber Set/Query
-      verfuegbaren Property 'name' abgelegt.)
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Der Datenwert der Property.
-     0, falls diese nicht existiert.
+   /std/thing/properties.c
 
-BEISPIELE:
-     // wie hoch sind die aktuelle LP des Spielers?
-     hp = this_player()->QueryProp(P_HP);
 
-SIEHE AUCH:
-     Aehnliches:	SetProp(L), Set(L), Query(L)
-     Generell:		SetProperties(L), QueryProperties(L)
-     Konzept:		properties, /std/thing/properties.c
-     Sonstiges:		P_AUTOLOADOBJ
+ARGUMENTE
+=========
+
+   string name        - abzufragende Property
+
+
+BESCHREIBUNG
+============
+
+   Der Datenwert der Property 'name' wird zurueckgegeben.
+
+   Existiert eine F_QUERY_METHOD oder eine _query_'name'()-Methode fuer
+   diese Property, so wird diese aufgerufen und ihr 'Value' uebergeben.
+   Eine F_QUERY_METHOD hat dabei Vorrang vor _query_'name'(), d.h.
+   _query_'name'() wird nach erfolgreicher F_QUERY_METHOD nicht mehr
+   gerufen.
+
+   (Diese Methoden nutzen dann Set(), um auf den Datenwert der Property
+    'name' zurueckzugreifen. Teilweise werden aber auch interne Variablen
+    so oeffentlich gemacht und sind nicht in der ueber Set/Query
+    verfuegbaren Property 'name' abgelegt.)
+
+
+RUeCKGABEWERT
+=============
+
+   Der Datenwert der Property.
+   0, falls diese nicht existiert.
+
+
+BEISPIELE
+=========
+
+   // wie hoch sind die aktuelle LP des Spielers?
+   hp = this_player()->QueryProp(P_HP);
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        SetProp(L), Set(L), Query(L)
+   Generell:          SetProperties(L), QueryProperties(L)
+   Konzept:           properties, /std/thing/properties.c
+   Sonstiges:         P_AUTOLOADOBJ
 
 15.Dez 2004 Gloinson
diff --git a/doc/lfun/QueryProperties b/doc/lfun/QueryProperties
index aa740b5..6949e0f 100644
--- a/doc/lfun/QueryProperties
+++ b/doc/lfun/QueryProperties
@@ -1,30 +1,54 @@
+
 QueryProperties()
-FUNKTION:
-     mapping QueryProperties()
+*****************
 
-DEFINIERT IN:
-     /std/thing/properties.c
 
-ARGUMENTE:
-     keine
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion liefert ein Mapping mit allen fuer das Objekt
-     definierten Properties zurueck.
+   mapping QueryProperties()
 
-RUeCKGABEWERT:
-     Ein Mapping mit den Properties. Das Mapping hat folgenden Aufbau:
-	([ name: wert; flags; set_method; query_method,
-	   name2: ... ]);
 
-BEMERKUNGEN:
-     - diese Funktion wird von restore_object() und save_object()
-     - F_QUERY_METHODs und _query_'prop'()-Methoden haben keine Auswirkung
-       auf die Wertefelder!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Aehnliches:	SetProp(L), QueryProp(L), Set(L), Query(L)
-     Generell:		SetProperties(L) 
-     Konzept:		properties, /std/thing/properties.c
+   /std/thing/properties.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert ein Mapping mit allen fuer das Objekt
+   definierten Properties zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Mapping mit den Properties. Das Mapping hat folgenden Aufbau:
+      ([ name: wert; flags; set_method; query_method,
+         name2: ... ]);
+
+
+BEMERKUNGEN
+===========
+
+   - diese Funktion wird von restore_object() und save_object()
+   - F_QUERY_METHODs und _query_'prop'()-Methoden haben keine Auswirkung
+     auf die Wertefelder!
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        SetProp(L), QueryProp(L), Set(L), Query(L)
+   Generell:          SetProperties(L)
+   Konzept:           properties, /std/thing/properties.c
 
 1.Mai 2004 Gloinson
diff --git a/doc/lfun/QueryQuest b/doc/lfun/QueryQuest
index 295ad16..338ed77 100644
--- a/doc/lfun/QueryQuest
+++ b/doc/lfun/QueryQuest
@@ -1,34 +1,53 @@
+
 QueryQuest()
+************
 
-FUNKTION:
-        int QueryQuest(string questname)
 
-DEFINIERT IN:
-        /std/player/quests.c
+FUNKTION
+========
 
-ARGUMENTE:
-        questname
-          Questname, wie er im Questmaster eingetragen wurde.
+   int QueryQuest(string questname)
 
-RUeCKGABEWERT:
-        (Die Defines fuer den Rueckgabewert finden sich in 
-         /secure/questmaster.h)
-         1 : Spieler hat die Quest bereits geloest  (OK)
-         0 : Ungueltiger Questname oder der Spieler
-             hat die Quest noch nicht.              (QQ_KEY_INVALID)
-         2 : Gaeste koennen keine Quest loesen      (QQ_QUEST)
 
-BESCHREIBUNG:
-	Mit dieser Funktion kann getestet werden, ob ein Spieler eine 
-        bestimmte Quest bereits geloest hat. Als Questname wird dazu
-        der Name angegeben, der im Questmaster eingetragen wurde.
+DEFINIERT IN
+============
 
-        Wer sich da nicht sicher ist, kann mit dem Questtool 
-        (/obj/tools/questtool) nachsehen. 
+   /std/player/quests.c
 
-SIEHE AUCH:
-        /secure/questmaster.h, /obj/tools/questtool
-        GiveQuest
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   questname
+     Questname, wie er im Questmaster eingetragen wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   (Die Defines fuer den Rueckgabewert finden sich in
+    /secure/questmaster.h)
+    1 : Spieler hat die Quest bereits geloest  (OK)
+    0 : Ungueltiger Questname oder der Spieler
+        hat die Quest noch nicht.              (QQ_KEY_INVALID)
+    2 : Gaeste koennen keine Quest loesen      (QQ_QUEST)
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann getestet werden, ob ein Spieler eine
+   bestimmte Quest bereits geloest hat. Als Questname wird dazu
+   der Name angegeben, der im Questmaster eingetragen wurde.
+
+   Wer sich da nicht sicher ist, kann mit dem Questtool
+   (/obj/tools/questtool) nachsehen.
+
+
+SIEHE AUCH
+==========
+
+   /secure/questmaster.h, /obj/tools/questtool
+   GiveQuest
+
 Zuletzt geaendert: Mon, 17. Jul 2000, 12:16:41 von Zook.
diff --git a/doc/lfun/QueryQuestTime b/doc/lfun/QueryQuestTime
index 2410d6a..9b93c8d 100644
--- a/doc/lfun/QueryQuestTime
+++ b/doc/lfun/QueryQuestTime
@@ -1,29 +1,48 @@
+
 QueryQuestTime()
+****************
 
-FUNKTION:
-        int QueryQuestTime(string questname)
 
-DEFINIERT IN:
-        /std/player/quests.c
+FUNKTION
+========
 
-ARGUMENTE:
-        questname
-          Questname, wie er im Questmaster eingetragen wurde.
+   int QueryQuestTime(string questname)
 
-RUeCKGABEWERT:
-        Questzeitpunkt in Sekunden seit Epoch als positiver Integer-Wert
-         0 : Tagebuchmaster hat keine Daten in den Logfiles gefunden und
-             macht das auf diese Weise kenntlich
-        -1 : Questzeitpunkt unbekannt
 
-BESCHREIBUNG:
-        Mit dieser Funktion kann der Zeitpunkt abgefragt werden, zu
-        dem ein Spieler eine bestimmte Quest geloest hat. 
-        Als Questname wird dazu der Name angegeben, der im Questmaster 
-        eingetragen ist.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        GiveQuest(L), QueryQuest(L), ModifyQuestTime(L)
+   /std/player/quests.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   questname
+     Questname, wie er im Questmaster eingetragen wurde.
+
+
+RUeCKGABEWERT
+=============
+
+   Questzeitpunkt in Sekunden seit Epoch als positiver Integer-Wert
+    0 : Tagebuchmaster hat keine Daten in den Logfiles gefunden und
+        macht das auf diese Weise kenntlich
+   -1 : Questzeitpunkt unbekannt
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann der Zeitpunkt abgefragt werden, zu
+   dem ein Spieler eine bestimmte Quest geloest hat.
+   Als Questname wird dazu der Name angegeben, der im Questmaster
+   eingetragen ist.
+
+
+SIEHE AUCH
+==========
+
+   GiveQuest(L), QueryQuest(L), ModifyQuestTime(L)
+
 Zuletzt geaendert: 19. Dez. 2015, Arathorn
diff --git a/doc/lfun/QueryRealAttribute b/doc/lfun/QueryRealAttribute
index 7ee9f83..246008f 100644
--- a/doc/lfun/QueryRealAttribute
+++ b/doc/lfun/QueryRealAttribute
@@ -1,26 +1,47 @@
+
 QueryRealAttribute()
-FUNKTION:
-     int QueryRealAttribute(string attr)
+********************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr       -       das interessierende Attribut
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das reale Attribut (ohne Offsets) wird zurueckgegeben.
+   int QueryRealAttribute(string attr)
 
-BEISPIELE:
-     if(this_player()->QueryRealAttribute(A_INT)>15)
-      write("Du bist auch so ganz schoen clever.\n");
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   attr       -       das interessierende Attribut
+
+
+BESCHREIBUNG
+============
+
+   Das reale Attribut (ohne Offsets) wird zurueckgegeben.
+
+
+BEISPIELE
+=========
+
+   if(this_player()->QueryRealAttribute(A_INT)>15)
+    write("Du bist auch so ganz schoen clever.\n");
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/QuerySellValue b/doc/lfun/QuerySellValue
index 544cb29..4d5a518 100644
--- a/doc/lfun/QuerySellValue
+++ b/doc/lfun/QuerySellValue
@@ -1,43 +1,54 @@
-FUNKTION:
 
-      varargs int QuerySellValue(object ob, object client);
+QuerySellValue()
+****************
 
-DEFINIERT IN:
 
-      /std/trading_price.c
+FUNKTION
+========
 
-BESCHREIBUNG:
+   varargs int QuerySellValue(object ob, object client);
 
-      Diese Funktion kann dazu genutzt werden, den Verkaufspreis in einem 
-      Laden global zu veraendern. Sofern dies zugunsten der Spieler geschieht,
-      muss dafuer die Zustimmung des zustaendigen Regionsmagiers und der
-      Balance eingeholt werden. Zudem sollte es nicht in jedem x-beliebigen 
-      Laden genutzt werden, sondern nur in recht abgelegenen Gebieten, in
-      die man nicht einfach skripten kann.
 
-      Ein Beispiel ist der Laden auf dem Kutter in Port Vain, der nur in
-      laengeren Intervallen mal zugaenglich ist.
+DEFINIERT IN
+============
 
-BEISPIEL:
+   /std/trading_price.c
 
-      Ein Laden zahlt 10% ueber dem normalen Verkaufspreis:
 
-      private int sell_factor = 110;
+BESCHREIBUNG
+============
 
-      varargs int QuerySellValue(object ob, object client) {
-        // Es wird nicht naeher geprueft, ob <ob> ein gueltiger Objektpointer
-        // ist, da der Laden selbst sicherstellt, dass das so ist. Wenn 
-        // das doch einmal nicht der Fall sein sollte, liegt der Fehler
-        // woanders. Einen Bug auszuloesen ist dann sinnvoll.
+   Diese Funktion kann dazu genutzt werden, den Verkaufspreis in einem
+   Laden global zu veraendern. Sofern dies zugunsten der Spieler geschieht,
+   muss dafuer die Zustimmung des zustaendigen Regionsmagiers und der
+   Balance eingeholt werden. Zudem sollte es nicht in jedem x-beliebigen
+   Laden genutzt werden, sondern nur in recht abgelegenen Gebieten, in
+   die man nicht einfach skripten kann.
 
-        // Basispreis ermitteln 
-        int preis = ::QuerySellValue(ob, client);
-        // und den Bonus aufschlagen.
-        preis = (sell_factor * preis)/100; 
+   Ein Beispiel ist der Laden auf dem Kutter in Port Vain, der nur in
+   laengeren Intervallen mal zugaenglich ist.
 
-        // Nicht mehr auszahlen, als das Objekt an sich wert ist.
-        return min(preis, ob->QueryProp(P_VALUE));
-      }
 
-----------------------------------------------------------------------------
+BEISPIEL
+========
+
+   Ein Laden zahlt 10% ueber dem normalen Verkaufspreis:
+
+   private int sell_factor = 110;
+
+   varargs int QuerySellValue(object ob, object client) {
+     // Es wird nicht naeher geprueft, ob <ob> ein gueltiger Objektpointer
+     // ist, da der Laden selbst sicherstellt, dass das so ist. Wenn
+     // das doch einmal nicht der Fall sein sollte, liegt der Fehler
+     // woanders. Einen Bug auszuloesen ist dann sinnvoll.
+
+     // Basispreis ermitteln
+     int preis = ::QuerySellValue(ob, client);
+     // und den Bonus aufschlagen.
+     preis = (sell_factor * preis)/100;
+
+     // Nicht mehr auszahlen, als das Objekt an sich wert ist.
+     return min(preis, ob->QueryProp(P_VALUE));
+   }
+
 LETZTE AENDERUNG: 18-Jun-2015, Arathorn
diff --git a/doc/lfun/QuerySkill b/doc/lfun/QuerySkill
index 017b9f9..0978df1 100644
--- a/doc/lfun/QuerySkill
+++ b/doc/lfun/QuerySkill
@@ -1,35 +1,56 @@
+
 QuerySkill()
-FUNKTION:
-    public varargs mapping QuerySkill(string sname, string gilde)
+************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    
-ARGUMENTE:
-    string sname    Name des abzufragenden Skill
-    string gilde    Name der Gilde, unter der der Skill gesucht werden soll
 
-BESCHREIBUNG:
-    Diese Funktion liefert das Skillmappings des Skills 'snme' im Lebewesen
-    zurueck. Diese enthaelt Eintraege, die in der Man-Page skill_info_liste
-    beschrieben sind.
+FUNKTION
+========
 
-    Falls 'gilde' nicht angegeben wird, wird der Skill zuerst fuer die Gilde
-    P_GUILD des Lebewesens gesucht, ansonsten in den allgemeinen Skills
-    "ANY" (es wird NICHT in Gildenobjekt oder Spellbook etwas abgefragt).
+   public varargs mapping QuerySkill(string sname, string gilde)
 
-RUECKGABEWERT:
-    Ein Mapping mit Skillinfos oder 0, falls der Skill nicht vorhanden ist.
-    Das Mapping ist eine Kopie.
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+DEFINIERT IN
+============
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+   /std/living/skills.c
+
+
+ARGUMENTE
+=========
+
+   string sname    Name des abzufragenden Skill
+   string gilde    Name der Gilde, unter der der Skill gesucht werden soll
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert das Skillmappings des Skills 'snme' im Lebewesen
+   zurueck. Diese enthaelt Eintraege, die in der Man-Page skill_info_liste
+   beschrieben sind.
+
+   Falls 'gilde' nicht angegeben wird, wird der Skill zuerst fuer die Gilde
+   P_GUILD des Lebewesens gesucht, ansonsten in den allgemeinen Skills
+   "ANY" (es wird NICHT in Gildenobjekt oder Spellbook etwas abgefragt).
+
+
+RUECKGABEWERT
+=============
+
+   Ein Mapping mit Skillinfos oder 0, falls der Skill nicht vorhanden ist.
+   Das Mapping ist eine Kopie.
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/QuerySkillAbility b/doc/lfun/QuerySkillAbility
index 5cfd815..fd8666f 100644
--- a/doc/lfun/QuerySkillAbility
+++ b/doc/lfun/QuerySkillAbility
@@ -1,29 +1,47 @@
+
 QuerySkillAbility()
-FUNKTION:
-    public varargs int QuerySkillAbility(string sname, string gilde)
+*******************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    
-ARGUMENTE:
-    string sname        Name des abzufragenden Skill
-    string gilde         Gilde, unter der der Skill gesucht werden soll
 
-BESCHREIBUNG:
-    Diese Funktion liefert einen Wert zurueck, der aussagt, wie gut das
-    Lebewesen den Skill 'sname' beherrscht (Key SI_SKILLABILITY im
-    Skillmapping).
-    Dieser Wert kann zwischen -MAX_ABILITY und MAX_ABILITY liegen,
-    normal ist 0 bis MAX_ABILITY (10000 - Skill perfektioniert).
+FUNKTION
+========
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+   public varargs int QuerySkillAbility(string sname, string gilde)
+
+
+DEFINIERT IN
+============
+
+   /std/living/skills.c
+
+
+ARGUMENTE
+=========
+
+   string sname        Name des abzufragenden Skill
+   string gilde         Gilde, unter der der Skill gesucht werden soll
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert einen Wert zurueck, der aussagt, wie gut das
+   Lebewesen den Skill 'sname' beherrscht (Key SI_SKILLABILITY im
+   Skillmapping).
+   Dieser Wert kann zwischen -MAX_ABILITY und MAX_ABILITY liegen,
+   normal ist 0 bis MAX_ABILITY (10000 - Skill perfektioniert).
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 5. Okt 2011 Gloinson
diff --git a/doc/lfun/QuerySkillAttribute b/doc/lfun/QuerySkillAttribute
index d0b1bd1..1b3a71e 100644
--- a/doc/lfun/QuerySkillAttribute
+++ b/doc/lfun/QuerySkillAttribute
@@ -1,58 +1,87 @@
+
 QuerySkillAttribute()
-FUNKTION:
-    public int QuerySkillAttribute(string atrname)
+*********************
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
-    
-ARGUMENTE:
-    string atrname            Name des abzufragenden Attributs
-    
-BESCHREIBUNG:
-    Mit dieser Funktion kann man den Wert bestimmter Attribute
-    abfragen, dabei werden das abgefragte Attribut, Todesfolgen,
-    SA_QUALITY und Werte in P_SKILL_ATTRIBUTE_OFFSETS
-    beruecksichtigt.
-    
-    Momentane Skills siehe ModifySkillAttribute.
 
-RUECKGABEWERT:
-    Der Wert des Attributs. Ist nichts bestimmtes gesetzt, wird
-    der Standardwert 100 zurueckgegeben.
-    Der Rueckgabewert liegt zwischen 10 bis 1000 (Prozent).
-    
-BEMERKUNG:
-    Die Funktion ist zwar als 'varargs' definiert, gibt man allerdings
-    keinen Attributnamen an, wird immer 100 zurueckgegeben.
-    
-BEISPIEL:
-    // ein Spieler kann ein Stueck Kaese stibitzen, wenn er schnell
-    // genug ist ... (15% ueber normal)
-    if(this_player()->QuerySkillAttribute(SA_SPEED)>=115) {
-      tell_object(this_player(),
-        "Du schnappst das Stueck Kaese aus der Falle.\n");
-      obj kaese = clone_object(...);
-      [...]
-    } else {
-      mapping amap=map_indices(VALID_ARMOUR_CLASS,#'!);
-      amap[AT_GLOVE]=100;
-      tell_object(this_player(),
-        "Du bist zu langsam und die Falle schnappt hungrig zu.\n");
-      this_player()->Defend(random(100),
-                           ({DT_PIERCE, DT_SQUEEZE}),
-                           ([SP_PHYSICAL_ATTACK: 1,
-                             SP_REDUCE_ARMOUR: amap,
-                             SP_SHOW_DAMAGE: 0]));
-    }
+FUNKTION
+========
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+   public int QuerySkillAttribute(string atrname)
+
+
+DEFINIERT IN
+============
+
+   /std/living/skill_attributes.c
+
+
+ARGUMENTE
+=========
+
+   string atrname            Name des abzufragenden Attributs
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann man den Wert bestimmter Attribute
+   abfragen, dabei werden das abgefragte Attribut, Todesfolgen,
+   SA_QUALITY und Werte in P_SKILL_ATTRIBUTE_OFFSETS
+   beruecksichtigt.
+
+
+
+   Momentane Skills siehe ModifySkillAttribute.
+
+
+RUECKGABEWERT
+=============
+
+   Der Wert des Attributs. Ist nichts bestimmtes gesetzt, wird
+   der Standardwert 100 zurueckgegeben.
+   Der Rueckgabewert liegt zwischen 10 bis 1000 (Prozent).
+
+
+BEMERKUNG
+=========
+
+   Die Funktion ist zwar als 'varargs' definiert, gibt man allerdings
+   keinen Attributnamen an, wird immer 100 zurueckgegeben.
+
+
+BEISPIEL
+========
+
+   // ein Spieler kann ein Stueck Kaese stibitzen, wenn er schnell
+   // genug ist ... (15% ueber normal)
+   if(this_player()->QuerySkillAttribute(SA_SPEED)>=115) {
+     tell_object(this_player(),
+       "Du schnappst das Stueck Kaese aus der Falle.\n");
+     obj kaese = clone_object(...);
+     [...]
+   } else {
+     mapping amap=map_indices(VALID_ARMOUR_CLASS,#'!);
+     amap[AT_GLOVE]=100;
+     tell_object(this_player(),
+       "Du bist zu langsam und die Falle schnappt hungrig zu.\n");
+     this_player()->Defend(random(100),
+                          ({DT_PIERCE, DT_SQUEEZE}),
+                          ([SP_PHYSICAL_ATTACK: 1,
+                            SP_REDUCE_ARMOUR: amap,
+                            SP_SHOW_DAMAGE: 0]));
+   }
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 5. Okt 2011 Gloinson
diff --git a/doc/lfun/QuerySkillAttributeModifier b/doc/lfun/QuerySkillAttributeModifier
index 507c51b..055815e 100644
--- a/doc/lfun/QuerySkillAttributeModifier
+++ b/doc/lfun/QuerySkillAttributeModifier
@@ -1,90 +1,118 @@
+
 QuerySkillAttributeModifier()
-FUNKTION:
-    public varargs mapping QuerySkillAttributeModifier(object caster, 
-                                                    string *atrnames)
+*****************************
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
 
-ARGUMENTE:
-    <caster>    object
-                Objekt, welches die gesuchten Mods gesetzt hat
+FUNKTION
+========
 
-    <atrnames>  string*
-                Array von Skill-Attributen, welche durchsucht werden sollen.
+   public varargs mapping QuerySkillAttributeModifier(object caster,
+                                                   string *atrnames)
 
-BESCHREIBUNG:
-    Diese Funktion liefert alle Mods von <caster> auf den Skill-
-    Attributen <atrnames> in einem Mapping zurueck.
-    Wird <atrnames> nicht angegeben oder ist ein leeres Array, werden alle
-    Skill-Attribute nach Mods abgesucht.
-    Wird <caster> nicht angeben oder ist 0, so werden alle Mods der 
-    gewuenschten Skill-Attribute geliefert.
-    Dementsprechend bekommt man alle Mods aller Skill-Attribute, wenn keins
-    von beidem angegeben wird.
 
-RUECKGABEWERT:
-    ([]), falls keine Modifikatoren gefunden wurden.
-    In anderen Faellen ist die Datenstruktur des Mappings wie folgt:
-    ([ atrname1: ([ <caster>: <value>; <duration> ]),
-       atrname2: ([ <caster>: <value>; <duration> ]) ])
-    Die Schluessel im Mapping sind die jeweiligen Skill-Attribute, die Werte
-    des Mappings sind erneut Mappings, welche als Schluessel die Objekte
-    haben, welche die Mods gesetzt haben. In diesem Mapping gehoeren zu jedem
-    Schluessel zwei Werte, den Wert des Modifikators und die Ablaufzeit.
-    <value> kann hierbei ein int oder eine closure sein, <duration> ist ein
-    int, <caster> ist ein Objekt.
-    Ggf. kann das innere Mapping natuerlich auch mehrere Modifikatoren
-    enthalten (also caster1, caster2, usw.).
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
+   /std/living/skill_attributes.c
 
-BEISPIELE:
-     Ein Objekt moechte seinen bestehenden Modifikator um 20 und die
-     Gueltigkeit um 13 erhoehen.
-     mapping res = ob->QuerySkillAttributeModifier(this_object(),
-                                                  ({SA_DAMAGE}) );
-     if (member(res, SA_DAMAGE) && member(res[SA_DAMAGE], this_object())) {
-          // alten Mod ueberschreiben und Werte dabei anheben.
-          ob->ModifySkillAttributeModifier(SA_DAMAGE,
-              res[SA_DAMAGE][this_object(),0] + 20,
-              res[SA_DAMAGE][this_object(),1] + 13 );
-     }
-     else
-          // neuen Mod setzen.
-          ob->ModifySkilAttributeModifier(SA_DAMAGE, 20, 13);
-      
-     Ein Objekt hat den Fluch der unpraezisen Schnelligkeit, welcher SA_DAMAGE
-     reduziert, sofern das Lebewesen einen positiven Modifikator auf SA_SPEED
-     hat:
-     mapping res = ob->QuerySkillAttributeModifier(0, ({SA_SPEED}) );
-     if (member(res, SA_SPEED) {
-         int val, int dur;
-         foreach(object caster, int v, int d: res[SA_SPEED]) {
-             // groessten Mod rausfinden, dabei keine closures
-             // beruecksichtigen.
-             if (intp(v) && v>val) {
-                 val=v;
-                 dur=d;
-             }
-         }
-         if (val > 0) {
-             // pos. Mod auf SA_SPEED gefunden, entsprechenden neg. Mod auf
-             // SA_DAMAGE setzen, der zum gleichen Zeitpunkt ungueltig wird
-             // wie der Mod auf SA_SPEED.
-             if (ob->ModifySkillAttribute(SA_DAMAGE, -val, dur) == SA_MOD_OK)
-                tell_object(ob, "tolle Fluchmeldung.");
-         }
-     }
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+ARGUMENTE
+=========
+
+   <caster>    object
+               Objekt, welches die gesuchten Mods gesetzt hat
+
+   <atrnames>  string*
+               Array von Skill-Attributen, welche durchsucht werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert alle Mods von <caster> auf den Skill-
+   Attributen <atrnames> in einem Mapping zurueck.
+   Wird <atrnames> nicht angegeben oder ist ein leeres Array, werden alle
+   Skill-Attribute nach Mods abgesucht.
+   Wird <caster> nicht angeben oder ist 0, so werden alle Mods der
+   gewuenschten Skill-Attribute geliefert.
+   Dementsprechend bekommt man alle Mods aller Skill-Attribute, wenn keins
+   von beidem angegeben wird.
+
+
+RUECKGABEWERT
+=============
+
+   ([]), falls keine Modifikatoren gefunden wurden.
+   In anderen Faellen ist die Datenstruktur des Mappings wie folgt:
+   ([ atrname1: ([ <caster>: <value>; <duration> ]),
+      atrname2: ([ <caster>: <value>; <duration> ]) ])
+   Die Schluessel im Mapping sind die jeweiligen Skill-Attribute, die Werte
+   des Mappings sind erneut Mappings, welche als Schluessel die Objekte
+   haben, welche die Mods gesetzt haben. In diesem Mapping gehoeren zu jedem
+   Schluessel zwei Werte, den Wert des Modifikators und die Ablaufzeit.
+   <value> kann hierbei ein int oder eine closure sein, <duration> ist ein
+   int, <caster> ist ein Objekt.
+   Ggf. kann das innere Mapping natuerlich auch mehrere Modifikatoren
+   enthalten (also caster1, caster2, usw.).
+
+
+BEMERKUNGEN
+===========
+
+
+BEISPIELE
+=========
+
+   Ein Objekt moechte seinen bestehenden Modifikator um 20 und die
+   Gueltigkeit um 13 erhoehen.
+   mapping res = ob->QuerySkillAttributeModifier(this_object(),
+                                                ({SA_DAMAGE}) );
+   if (member(res, SA_DAMAGE) && member(res[SA_DAMAGE], this_object())) {
+        // alten Mod ueberschreiben und Werte dabei anheben.
+        ob->ModifySkillAttributeModifier(SA_DAMAGE,
+            res[SA_DAMAGE][this_object(),0] + 20,
+            res[SA_DAMAGE][this_object(),1] + 13 );
+   }
+   else
+        // neuen Mod setzen.
+        ob->ModifySkilAttributeModifier(SA_DAMAGE, 20, 13);
+
+
+
+   Ein Objekt hat den Fluch der unpraezisen Schnelligkeit, welcher SA_DAMAGE
+   reduziert, sofern das Lebewesen einen positiven Modifikator auf SA_SPEED
+   hat:
+   mapping res = ob->QuerySkillAttributeModifier(0, ({SA_SPEED}) );
+   if (member(res, SA_SPEED) {
+       int val, int dur;
+       foreach(object caster, int v, int d: res[SA_SPEED]) {
+           // groessten Mod rausfinden, dabei keine closures
+           // beruecksichtigen.
+           if (intp(v) && v>val) {
+               val=v;
+               dur=d;
+           }
+       }
+       if (val > 0) {
+           // pos. Mod auf SA_SPEED gefunden, entsprechenden neg. Mod auf
+           // SA_DAMAGE setzen, der zum gleichen Zeitpunkt ungueltig wird
+           // wie der Mod auf SA_SPEED.
+           if (ob->ModifySkillAttribute(SA_DAMAGE, -val, dur) == SA_MOD_OK)
+              tell_object(ob, "tolle Fluchmeldung.");
+       }
+   }
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 14.08.2008, Zesstra
diff --git a/doc/lfun/QuerySkillBonus b/doc/lfun/QuerySkillBonus
index 1a4ef47..1cb82e8 100644
--- a/doc/lfun/QuerySkillBonus
+++ b/doc/lfun/QuerySkillBonus
@@ -1,65 +1,91 @@
+
 QuerySkillBonus()
+*****************
 
-FUNKTION:
-     int QuerySkillBonus(object caster, object target, mapping sinfo)
 
-DEFINIERT IN:
-     beliebigen Objekten
+FUNKTION
+========
 
-ARGUMENTE:
-     object caster
-          der Benutzer eines Skills/Spells (Lebewesen)
-     object target
-          das Ziel eines Skills/Spells (beliebiges Objekt oder 0)
-     mapping sinfo
-          das Skillinfomapping
+   int QuerySkillBonus(object caster, object target, mapping sinfo)
 
-BESCHREIBUNG:
-     Diese Funktion wird von der Gilde des Casters im Environment und ggf.
-     auch im Ziel eines Skills/Spells gerufen.
-     Die Gilde uebergibt neben Caster und Ziel ein Mapping mit Skillinfos (s.
-     SI Konstanten aus new_skills.h fuer Details), welches alle wesentlichen
-     Informationen ueber den benutzten Skill/Spell enthaelt.
 
-     QuerySkillBonus() liefert einen Bonus (oder Malus) zurueck, den der
-     Aufrufer als Faktor in der Berechnung des Effekts des Skills
-     beruecksichtigen kann (aber nicht muss).
-     Der Bonus/Malus wird hierbei als ganzzahliger 0.01-Prozentwert aufgefasst
-     (10000 == 100% == keine Veraenderung, 1 == 0.01%).
+DEFINIERT IN
+============
 
-     Diese Funktion kann in beliebigen Objekten (re-)definiert werden. Im
-     Falle mobiler Objekte oder anhaltender Effekte ist jedoch eine
-     Balancegenehmigung erforderlich, sofern kampfrelevante Skills beeinflusst
-     werden.
-     Eine flaechendeckende Reduzierung von Skills/Gildenfaehigkeiten ist
-     explizit _nicht_ erwuenscht und soll auf einzelne Raeume und Objekte
-     beschraenkt sein.
+   beliebigen Objekten
 
-BEMERKUNGEN:
-     Das Mapping <sinfo> kann in dieser Funktion geaendert werden. Dieses kann
-     allerdings sehr weitreichende Folgen haben, speziell bei mangelnden
-     Kenntnissen ueber Interna des Skillsystems. Daher bitte von Aenderungen
-     absehen bzw. vorher mit dem jeweiligen Gildenmagier und/oder der
-     Gildenbalance abklaeren.
-     Die Bedeutung der Werte in <sinfo> kann je nach Gilde variieren. Im
-     Zweifelsfall bitte bei den jeweiligen Gildenmagiern nachfragen. 
-     Die Gilde kann diese Funktion rufen, muss aber nicht. Ebenso kann sie das
-     Ergebnis beruecksichtigen, muss aber nicht.
 
-BEISPIELE:
-     In einem Raum sollen Heilzauber besonders effizient sein:
-     int QuerySkillBonus(object caster, object target, mapping sinfo) {
-        if (pointerp(sinfo[SI_MAGIC_TYPE])
-            && member(sinfo[SI_MAGIC_TYPE], MT_HEILUNG) > -1)
-        {
-            return 12000 + random(3000); // bonus von 120-150%
-        }
-        return 10000;
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     gilden-doku
-     <new_skills.h>
+   object caster
+        der Benutzer eines Skills/Spells (Lebewesen)
+   object target
+        das Ziel eines Skills/Spells (beliebiges Objekt oder 0)
+   mapping sinfo
+        das Skillinfomapping
 
-LETZTE AeNDERUNG:
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von der Gilde des Casters im Environment und ggf.
+   auch im Ziel eines Skills/Spells gerufen.
+   Die Gilde uebergibt neben Caster und Ziel ein Mapping mit Skillinfos (s.
+   SI Konstanten aus new_skills.h fuer Details), welches alle wesentlichen
+   Informationen ueber den benutzten Skill/Spell enthaelt.
+
+   QuerySkillBonus() liefert einen Bonus (oder Malus) zurueck, den der
+   Aufrufer als Faktor in der Berechnung des Effekts des Skills
+   beruecksichtigen kann (aber nicht muss).
+   Der Bonus/Malus wird hierbei als ganzzahliger 0.01-Prozentwert aufgefasst
+   (10000 == 100% == keine Veraenderung, 1 == 0.01%).
+
+   Diese Funktion kann in beliebigen Objekten (re-)definiert werden. Im
+   Falle mobiler Objekte oder anhaltender Effekte ist jedoch eine
+   Balancegenehmigung erforderlich, sofern kampfrelevante Skills beeinflusst
+   werden.
+   Eine flaechendeckende Reduzierung von Skills/Gildenfaehigkeiten ist
+   explizit _nicht_ erwuenscht und soll auf einzelne Raeume und Objekte
+   beschraenkt sein.
+
+
+BEMERKUNGEN
+===========
+
+   Das Mapping <sinfo> kann in dieser Funktion geaendert werden. Dieses kann
+   allerdings sehr weitreichende Folgen haben, speziell bei mangelnden
+   Kenntnissen ueber Interna des Skillsystems. Daher bitte von Aenderungen
+   absehen bzw. vorher mit dem jeweiligen Gildenmagier und/oder der
+   Gildenbalance abklaeren.
+   Die Bedeutung der Werte in <sinfo> kann je nach Gilde variieren. Im
+   Zweifelsfall bitte bei den jeweiligen Gildenmagiern nachfragen.
+   Die Gilde kann diese Funktion rufen, muss aber nicht. Ebenso kann sie das
+   Ergebnis beruecksichtigen, muss aber nicht.
+
+
+BEISPIELE
+=========
+
+   In einem Raum sollen Heilzauber besonders effizient sein:
+   int QuerySkillBonus(object caster, object target, mapping sinfo) {
+      if (pointerp(sinfo[SI_MAGIC_TYPE])
+          && member(sinfo[SI_MAGIC_TYPE], MT_HEILUNG) > -1)
+      {
+          return 12000 + random(3000); // bonus von 120-150%
+      }
+      return 10000;
+   }
+
+
+SIEHE AUCH
+==========
+
+   gilden-doku
+   <new_skills.h>
+
+
+LETZTE AeNDERUNG
+================
+
 19.08.2013, Zesstra
diff --git a/doc/lfun/QueryStorageRoom b/doc/lfun/QueryStorageRoom
index b62e40d..4442237 100644
--- a/doc/lfun/QueryStorageRoom
+++ b/doc/lfun/QueryStorageRoom
@@ -1,21 +1,27 @@
-QueryStorageRoom()

-

-Funktion:

-    string QueryStorageRoom()

-

-Definiert in:

-    /std/room/shop

-

-Rueckgabewert:

-    Dateiname des Lagers, in dem die aufgekauften Gegenstaende aufbewahrt 

-    werden.

-

-Siehe auch:

-    Funktionen:

-      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(), 

-      QueryBuyValue(), QueryBuyFact(), sell_obj(), buy_obj()

-    Properties:

-      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME

-

-------------------------------------------------------------------------------

-Letzte Aenderung: 21.05.2014, Bugfix

+
+QueryStorageRoom()
+******************
+
+QueryStorageRoom()
+
+Funktion
+   string QueryStorageRoom()
+
+Definiert in
+   /std/room/shop
+
+Rueckgabewert
+   Dateiname des Lagers, in dem die aufgekauften Gegenstaende
+   aufbewahrt werden.
+
+Siehe auch
+   Funktionen
+      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
+      QueryBuyValue(), QueryBuyFact(), sell_obj(), buy_obj()
+
+   Properties
+      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME
+
+
+Letzte Aenderung 21.05.2014, Bugfix
+===================================
diff --git a/doc/lfun/QueryTimedAttrModifier b/doc/lfun/QueryTimedAttrModifier
index 1908608..4d858a8 100644
--- a/doc/lfun/QueryTimedAttrModifier
+++ b/doc/lfun/QueryTimedAttrModifier
@@ -1,42 +1,67 @@
+
 QueryTimedAttrModifier()
-FUNKTION:
-     mapping QueryTimedAttrModifier(string key)
+************************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     key	-	aus P_TIMED_ATTR_MOD abzufragender Eintrag
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der zu key gehoerende Eintrag in P_TIMED_ATTR_MOD wird abgefragt.

-

-RUeCKGABEWERT:

-     Ein leeres Mapping im Falle eines fehlerhaften key-Argumentes oder 
-     eines nicht existenten Keys.

-     

-     Ansonsten wird ein Mapping der Form

-     

-        ([

-           Key : ([ Mapping mit den Modifikatoren ]) ;

-                 Ablaufzeit ; Ablaufobjekt ; Nachrichtenempfaenger 

-        ])    

-

-     zurueckgegeben.Die Ablaufzeit ist hierbei die Zeit in Sekunden seit

-     dem 1. Jan 1970, 0.0:0 GMT, das Ablaufobjekt ist das Objekt an dessen

-     Existenz die Attributveraenderungen gebunden ist und der

-     Nachrichtenempfaenger ist dasjenigen Objekte welches im Falle 

-     durch den Aufruf von "NotifyTimedAttrModExpired" benachrichtigt 

-     wird sobald das Attribut abgelaufen ist. 

-     Der Funktion NotifyTimedAttrModExpired wird als Argument der key

-     der abgelaufenen Attributveraenderung uebergeben.

-     Das Mapping ist eine Kopie der Originaldatenstruktur zu diesem Key.

-    
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+   mapping QueryTimedAttrModifier(string key)
+
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   key        -       aus P_TIMED_ATTR_MOD abzufragender Eintrag
+
+
+BESCHREIBUNG
+============
+
+   Der zu key gehoerende Eintrag in P_TIMED_ATTR_MOD wird abgefragt.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein leeres Mapping im Falle eines fehlerhaften key-Argumentes oder
+   eines nicht existenten Keys.
+
+
+
+   Ansonsten wird ein Mapping der Form
+
+
+
+      ([
+         Key : ([ Mapping mit den Modifikatoren ]) ;
+               Ablaufzeit ; Ablaufobjekt ; Nachrichtenempfaenger
+      ])
+
+   zurueckgegeben.Die Ablaufzeit ist hierbei die Zeit in Sekunden seit
+   dem 1. Jan 1970, 0.0:0 GMT, das Ablaufobjekt ist das Objekt an dessen
+   Existenz die Attributveraenderungen gebunden ist und der
+   Nachrichtenempfaenger ist dasjenigen Objekte welches im Falle
+   durch den Aufruf von "NotifyTimedAttrModExpired" benachrichtigt
+   wird sobald das Attribut abgelaufen ist.
+   Der Funktion NotifyTimedAttrModExpired wird als Argument der key
+   der abgelaufenen Attributveraenderung uebergeben.
+   Das Mapping ist eine Kopie der Originaldatenstruktur zu diesem Key.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/QueryTotalQP b/doc/lfun/QueryTotalQP
index cf15cc0..1471010 100644
--- a/doc/lfun/QueryTotalQP
+++ b/doc/lfun/QueryTotalQP
@@ -1,25 +1,43 @@
+
 QueryTotalQP()
+**************
 
-FUNKTION:
-    int QueryTotalQP()
 
-DEFINIERT IN:
-    /secure/questmaster.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   int QueryTotalQP()
 
-RUECKGABEWERT:
-    Abenteuerpunkte saemtlicher Quests
 
-BESCHREIBUNG:
-    Diese Funktion liefert die Abenteuerpunkte der saemtlicher aktivierter
-    Quests zurueck.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
-    QueryMaxQP, QueryOptQP
+   /secure/questmaster.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUECKGABEWERT
+=============
+
+   Abenteuerpunkte saemtlicher Quests
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert die Abenteuerpunkte der saemtlicher aktivierter
+   Quests zurueck.
+
+
+SIEHE AUCH
+==========
+
+   GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
+   QueryMaxQP, QueryOptQP
+
 Zuletzt geaendert: Sam, 25. Nov 2000, 14:04:28 von Zook.
-
diff --git a/doc/lfun/QueryUser b/doc/lfun/QueryUser
index 129a0a5..ad1e4fa 100644
--- a/doc/lfun/QueryUser
+++ b/doc/lfun/QueryUser
@@ -1,50 +1,77 @@
+
 QueryUser()
+***********
 
-FUNKTION:
-     public object QueryUser()
 
-DEFINIERT IN:
-     /std/npc/combat.c
-     /std/clothing/wear.c
-     /std/weapon/combat.c
-     alle Objekte, in denen es darueber hinaus noetig ist
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   public object QueryUser()
 
-BESCHREIBUNG:
-     Liefert den aktuellen Nutzer (Lebewesen) eines Items oder NPCs.
-     
-     Diese Funktion wird z.B. von get_killing_player() benutzt, um
-     herauszufinden, zu welchem Spieler denn das Objekt gehoert, was den
-     toedlichen Schaden verursacht hat.
 
-     Im Falle eines NPCs ist dies standardmaessig der Spieler, bei dem der
-     NPC als Helfer-NPC eingetragen ist (s. RegisterHelperNPC).
-     Im Falle einer Ruestung ist es das Lebewesen, welches sie gerade traegt.
-     Im Falle einer Waffe ist es das Lebewesen, welches sie gerade gezueckt
-     hat.
-     Alle anderen Objekte enthalten keinen Default fuer diese Funktion.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Das nutzende Lebewesen, falls es ermittelt werden konnte, sonst 0.
+   /std/npc/combat.c
+   /std/clothing/wear.c
+   /std/weapon/combat.c
+   alle Objekte, in denen es darueber hinaus noetig ist
 
-BEMERKUNGEN:
-     Sollte in allen Objekten definiert werden, welche Lebewesen Schaden
-     zufuegen, ohne dass das verursachende Lebewesen dabei als Feind im
-     Defend() angeben wird.
-     Der gelieferte Nutzer muss explizit kein Spieler sein. Es waere z.B.
-     moeglich, dass von einem Spieler kontrollierter NPC einen Bumerang nutzt.
 
-BEISPIELE:
-     Ein von einem Spieler beschworenes Wesen wirft einen Bumerang nach einem
-     Feind.
-     Dann liefert QueryUser() im Bumerang den NPC als Nutzer und
-     QueryUser() im NPC wiederum den Spieler.
-     
-SIEHE AUCH:
-     RegisterHelperNPC(), get_killer_player()
-     P_WORN, P_WIELDED
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Liefert den aktuellen Nutzer (Lebewesen) eines Items oder NPCs.
+
+
+
+   Diese Funktion wird z.B. von get_killing_player() benutzt, um
+   herauszufinden, zu welchem Spieler denn das Objekt gehoert, was den
+   toedlichen Schaden verursacht hat.
+
+   Im Falle eines NPCs ist dies standardmaessig der Spieler, bei dem der
+   NPC als Helfer-NPC eingetragen ist (s. RegisterHelperNPC).
+   Im Falle einer Ruestung ist es das Lebewesen, welches sie gerade traegt.
+   Im Falle einer Waffe ist es das Lebewesen, welches sie gerade gezueckt
+   hat.
+   Alle anderen Objekte enthalten keinen Default fuer diese Funktion.
+
+
+RUeCKGABEWERT
+=============
+
+   Das nutzende Lebewesen, falls es ermittelt werden konnte, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Sollte in allen Objekten definiert werden, welche Lebewesen Schaden
+   zufuegen, ohne dass das verursachende Lebewesen dabei als Feind im
+   Defend() angeben wird.
+   Der gelieferte Nutzer muss explizit kein Spieler sein. Es waere z.B.
+   moeglich, dass von einem Spieler kontrollierter NPC einen Bumerang nutzt.
+
+
+BEISPIELE
+=========
+
+   Ein von einem Spieler beschworenes Wesen wirft einen Bumerang nach einem
+   Feind.
+   Dann liefert QueryUser() im Bumerang den NPC als Nutzer und
+   QueryUser() im NPC wiederum den Spieler.
+
+
+SIEHE AUCH
+==========
+
+   RegisterHelperNPC(), get_killer_player()
+   P_WORN, P_WIELDED
+
 12.11.2013, Zesstra
-
diff --git a/doc/lfun/QueryValidObject b/doc/lfun/QueryValidObject
index 4622d65..649a0b2 100644
--- a/doc/lfun/QueryValidObject
+++ b/doc/lfun/QueryValidObject
@@ -1,47 +1,69 @@
+
 QueryValidObject()
-
-FUNKTION:
-     public int QueryValidObject(string oname);
-
-DEFINIERT IN:
-     /std/virtual/v_compiler.c
-
-ARGUMENTE:
-     oname
-       Objektname, der geprueft werden soll (kompletter Pfad mit / am Anfang) 
-
-RUeCKGABEWERT:
-     <=0 - falls VC nicht zustaendig ist.
-     >0 - falls der VC sich fuer das Objekt zustaendig erklaert.
-
-BESCHREIBUNG:
-     Ueber die Funktion laesst sich herausfinden, ob ein VC sich fuer das
-     gewuenschte Objekt zustaendig fuehlt. Dabei wird Validate(),
-     P_COMPILER_PATH, NoParaObjects() und P_PARA im VC ausgewertet:
-     1. Zuerst wird mit Validate() geprueft, ob der Filename (ohne Pfad) ok ist.
-     2. wird geguckt, ob das angefragte Objekt im richtigen Pfad liegt 
-        (P_COMPILER_PATH).
-     3. wenn das angefragte Objekt ein Para-Objekt ist:
-       a) wird NoParaObjects() geprueft, wenn das !=0 ist, sind gar keine Para-
-          Objekte erlaubt.
-       b) wird P_PARA _im VC_ abgefragt, dort kann man ein Array aller 
-          erlaubten Para-Dimensionen reinschreiben. Fuer alle anderen erklaert 
-          sich der VC fuer nicht zustaendig. Wenn P_PARA nicht gesetzt ist, 
-          sind alle erlaubt. Ein leeres Array ({}) wuerde einem 
-          NoParaObjects() {return 1;} entsprechen.
-
-BEMERKUNGEN:
-     Diese Funktion wird vom move abgefragt. Bitte auf jeden Fall P_PARA oder
-     NoParaObjects() passend definieren, sonst buggts.
-
-     Wenn jemand mit dem oben beschrieben Standardverhalten nicht gluecklich
-     ist, kann man die Funktion passend ueberschreiben.
+******************
 
 
-SIEHE AUCH:
-     virtual_compiler
-     CustomizeObject(), Validate(), NoParaObjects(), 
-     P_COMPILER_PATH, P_PARA
-     /std/virtual/v_compiler.c
-----------------------------------------------------------------------------
+FUNKTION
+========
+
+   public int QueryValidObject(string oname);
+
+
+DEFINIERT IN
+============
+
+   /std/virtual/v_compiler.c
+
+
+ARGUMENTE
+=========
+
+   oname
+     Objektname, der geprueft werden soll (kompletter Pfad mit / am Anfang)
+
+
+RUeCKGABEWERT
+=============
+
+   <=0 - falls VC nicht zustaendig ist.
+   >0 - falls der VC sich fuer das Objekt zustaendig erklaert.
+
+
+BESCHREIBUNG
+============
+
+   Ueber die Funktion laesst sich herausfinden, ob ein VC sich fuer das
+   gewuenschte Objekt zustaendig fuehlt. Dabei wird Validate(),
+   P_COMPILER_PATH, NoParaObjects() und P_PARA im VC ausgewertet:
+   1. Zuerst wird mit Validate() geprueft, ob der Filename (ohne Pfad) ok ist.
+   2. wird geguckt, ob das angefragte Objekt im richtigen Pfad liegt
+      (P_COMPILER_PATH).
+   3. wenn das angefragte Objekt ein Para-Objekt ist:
+     a) wird NoParaObjects() geprueft, wenn das !=0 ist, sind gar keine Para-
+        Objekte erlaubt.
+     b) wird P_PARA _im VC_ abgefragt, dort kann man ein Array aller
+        erlaubten Para-Dimensionen reinschreiben. Fuer alle anderen erklaert
+        sich der VC fuer nicht zustaendig. Wenn P_PARA nicht gesetzt ist,
+        sind alle erlaubt. Ein leeres Array ({}) wuerde einem
+        NoParaObjects() {return 1;} entsprechen.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird vom move abgefragt. Bitte auf jeden Fall P_PARA oder
+   NoParaObjects() passend definieren, sonst buggts.
+
+   Wenn jemand mit dem oben beschrieben Standardverhalten nicht gluecklich
+   ist, kann man die Funktion passend ueberschreiben.
+
+
+SIEHE AUCH
+==========
+
+   virtual_compiler
+   CustomizeObject(), Validate(), NoParaObjects(),
+   P_COMPILER_PATH, P_PARA
+   /std/virtual/v_compiler.c
+
 21.10.2007, Zesstra
diff --git a/doc/lfun/ReceiveMsg b/doc/lfun/ReceiveMsg
index 6443bcd..cd1a34d 100644
--- a/doc/lfun/ReceiveMsg
+++ b/doc/lfun/ReceiveMsg
@@ -1,250 +1,278 @@
+
+ReceiveMsg()
+************
+
 ReceiveMsg()
 
-public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
-                              string msg_prefix, mixed origin)
+public varargs int ReceiveMsg(string msg, int msg_typ, string
+msg_action,
+   string msg_prefix, mixed origin)
 
-DEFINIERT IN:
-    /std/living/comm.c
-    /std/npc/comm.c
-    /std/player/comm.c
-    /std/room/items.c
 
-ARGUMENTE:
-    string msg
-      String mit der uebermittelten Nachricht. Muss nicht umgebrochen sein,
-      da ReceiveMsg() das ebenfalls erledigt.
-    int msg_typ
-      Nachrichtentyp(en) fuer Filterung und Flags fuer Behandlung/Umbruch.
-      Siehe unten fuer mit | kombinierbare Konstanten.
-    string msg_action (optional)
-      Ausloesende Aktion, wird auch fuer Ignorieren verwendet.
-      Default ist query_verb(). Siehe unten fuer alternative Konstanten.
-    string msg_prefix (optional)
-      String, welcher ggf. im break_string() als indent verwendet wird.
-      Default ist 0 (kein Indent)
-    mixed origin (<object>) (optional)
-      Das die Meldung ausloesende Objekt, wird fuer Ignorieren verwendet.
-      Default: previous_object()
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-    ReceiveMsg() wird benutzt, um einem Lebewesen eine Nachricht zu senden.
-    Dabei ruft es das sonst uebliche tell_object() fuer Spieler bzw.
-    catch_tell() im NPC auf.
+   /std/living/comm.c
+   /std/npc/comm.c
+   /std/player/comm.c
+   /std/room/items.c
 
-    Gerade fuer Nachrichten an Spieler bietet die Methode weitere Features,
-    die bisher sonst haendisch zu implementieren waren:
-    1) Pruefung auf Empfangbarkeit, je nach 'msg_typ', zB
-       MT_LOOK nur an Nichtblinde
-       MT_LISTEN nur an Nichttaube
-       MT_DEBUG nur an Magier/Testspieler
-    2) Pruefen auf Ignorieren von
-       - Aktion ('msg_action')
-         - mit 'msg_action' || query_verb()
-       - Urheber ('origin')
-         - fuer sendende Spieler mit origin->query_realname()
-         - fuer sendende NPCs mit origin->Name(RAW))
-    3) Speicherung in der tmhist (Typ MT_COMM)
-    4) Speicherung im Kobold (Typ MT_COMM + aktiver Kobold)
-    5) Umbrechen unter Beruecksichtigung von indent, 'msg_typ'-Flags
-       fuer Umbruch und P_PREPEND_BS
 
-    Raeume definieren standardmaessig ebenfalls ein ReceiveMsg(), welches in
-    jedem Objekt im Raum ReceiveMsg() mit den uebergebenen Argumenten aufruft.
-    In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
-    ReceiveMsg() zurueckgelieferte Wert.
-    
-RUeCKGABEWERT:
-    > 0 fuer Erfolg, < 0 fuer Misserfolg, s.u.
-    MSG_DELIVERED    bei erfolgreicher Zustellung
-    MSG_BUFFERED     bei Zwischenspeicherung durch den Kobold
+ARGUMENTE
+=========
 
-    MSG_FAILED       nicht naeher spezifizierter Fehler bei Zustellung
-    MSG_IGNORED      Nachricht wurde ignoriert (Absender, origin)
-    MSG_VERB_IGN     Nachricht wurde ignoriert (Kommandoverb, msg_action)
-    MSG_MUD_IGN      Absendendes Mud wurde ignoriert.
-    MSG_SENSE_BLOCK  Passende Sinne des Empfaenger sind blockiert (z.B.
-                     blind, taub)
-    MSG_BUFFER_FULL  Kobold kann sich nichts mehr merken
+   string msg
+     String mit der uebermittelten Nachricht. Muss nicht umgebrochen sein,
+     da ReceiveMsg() das ebenfalls erledigt.
+   int msg_typ
+     Nachrichtentyp(en) fuer Filterung und Flags fuer Behandlung/Umbruch.
+     Siehe unten fuer mit | kombinierbare Konstanten.
+   string msg_action (optional)
+     Ausloesende Aktion, wird auch fuer Ignorieren verwendet.
+     Default ist query_verb(). Siehe unten fuer alternative Konstanten.
+   string msg_prefix (optional)
+     String, welcher ggf. im break_string() als indent verwendet wird.
+     Default ist 0 (kein Indent)
+   mixed origin (<object>) (optional)
+     Das die Meldung ausloesende Objekt, wird fuer Ignorieren verwendet.
+     Default: previous_object()
 
-BEMERKUNGEN:
-    Fuer saemtliche Alternativmeldungen im Falle einer nicht erfolgreich
-    zugestellten Nachricht ist der Aufrufer von ReceiveMsg() verantwortlich.
 
-    NPCs:
-    * ReceiveMsg() ruft zwecks Abwaertskompatibilitaet catch_tell() auf
-    * empfohlen ist, in NPCs nun ReceiveMsg() zu ueberschreiben.
-      * catch_tell() muss weiterhin fuer andere tell_object()
-        ueberschrieben  werden
+BESCHREIBUNG
+============
 
-BEISPIELE:
-    #1.1 Nachricht an einen Spieler, zB in der Wueste
-    this_player()->ReceiveMsg("Die Sonne brennt dir auf den Kopf.",
-                              MT_FEEL|MT_LOOK);
+   ReceiveMsg() wird benutzt, um einem Lebewesen eine Nachricht zu senden.
+   Dabei ruft es das sonst uebliche tell_object() fuer Spieler bzw.
+   catch_tell() im NPC auf.
 
-    #1.2 Nachricht an einen Spieler von einem NPC mit Indent
-    // bei aktivem Editor+Kobold landet dieser Text auch im Kobold
-    this_player()->ReceiveMsg("Du haust ja ganz schoen rein!",
+   Gerade fuer Nachrichten an Spieler bietet die Methode weitere Features,
+   die bisher sonst haendisch zu implementieren waren:
+   1) Pruefung auf Empfangbarkeit, je nach 'msg_typ', zB
+      MT_LOOK nur an Nichtblinde
+      MT_LISTEN nur an Nichttaube
+      MT_DEBUG nur an Magier/Testspieler
+   2) Pruefen auf Ignorieren von
+      - Aktion ('msg_action')
+        - mit 'msg_action' || query_verb()
+      - Urheber ('origin')
+        - fuer sendende Spieler mit origin->query_realname()
+        - fuer sendende NPCs mit origin->Name(RAW))
+   3) Speicherung in der tmhist (Typ MT_COMM)
+   4) Speicherung im Kobold (Typ MT_COMM + aktiver Kobold)
+   5) Umbrechen unter Beruecksichtigung von indent, 'msg_typ'-Flags
+      fuer Umbruch und P_PREPEND_BS
+
+   Raeume definieren standardmaessig ebenfalls ein ReceiveMsg(), welches in
+   jedem Objekt im Raum ReceiveMsg() mit den uebergebenen Argumenten aufruft.
+   In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
+   ReceiveMsg() zurueckgelieferte Wert.
+
+
+RUeCKGABEWERT
+=============
+
+   > 0 fuer Erfolg, < 0 fuer Misserfolg, s.u.
+   MSG_DELIVERED    bei erfolgreicher Zustellung
+   MSG_BUFFERED     bei Zwischenspeicherung durch den Kobold
+
+   MSG_FAILED       nicht naeher spezifizierter Fehler bei Zustellung
+   MSG_IGNORED      Nachricht wurde ignoriert (Absender, origin)
+   MSG_VERB_IGN     Nachricht wurde ignoriert (Kommandoverb, msg_action)
+   MSG_MUD_IGN      Absendendes Mud wurde ignoriert.
+   MSG_SENSE_BLOCK  Passende Sinne des Empfaenger sind blockiert (z.B.
+                    blind, taub)
+   MSG_BUFFER_FULL  Kobold kann sich nichts mehr merken
+
+
+BEMERKUNGEN
+===========
+
+   Fuer saemtliche Alternativmeldungen im Falle einer nicht erfolgreich
+   zugestellten Nachricht ist der Aufrufer von ReceiveMsg() verantwortlich.
+
+   NPCs:
+   * ReceiveMsg() ruft zwecks Abwaertskompatibilitaet catch_tell() auf
+   * empfohlen ist, in NPCs nun ReceiveMsg() zu ueberschreiben.
+     * catch_tell() muss weiterhin fuer andere tell_object()
+       ueberschrieben  werden
+
+
+BEISPIELE
+=========
+
+   #1.1 Nachricht an einen Spieler, zB in der Wueste
+   this_player()->ReceiveMsg("Die Sonne brennt dir auf den Kopf.",
+                             MT_FEEL|MT_LOOK);
+
+   #1.2 Nachricht an einen Spieler von einem NPC mit Indent
+   // bei aktivem Editor+Kobold landet dieser Text auch im Kobold
+   this_player()->ReceiveMsg("Du haust ja ganz schoen rein!",
+                             MT_COMM|MT_FAR|MSG_DONT_STORE,
+                             MA_TELL,
+                             "Arkshat teilt dir mit: ");
+
+   #1.3 Nachricht an einen Spieler mit Fallback-Kaskade
+   // Achtung, bei MT_COMM oder Ignorieren gibt es natuerlich auch
+   // Misserfolgs-Rueckgaben. Bei einem normalen Kommando wie diesem
+   // hier ist das unproblematisch und daher sinnvoll:
+   if(this_player()->ReceiveMsg(
+        "Du drueckst den Knopf und es oeffnet sich knirschend "
+        "ein kleines Fach in der Wand.", MT_LOOK) < MSG_DELIVERED &&
+      this_player()->ReceiveMsg(
+        "Du drueckst den Knopf und irgend etwas scheint sich "
+        "knirschend zu oeffnen. Das Geraeusch kam von der Wand.",
+        MT_LISTEN) < MSG_DELIVERED) // leider blind UND taub ... also:
+     this_player()->ReceiveMsg(
+       "Du drueckst den Knopf und irgend etwas scheint zu passieren, "
+       "aber leider siehst und hoerst du nichts.", MT_FEEL);
+
+
+   #2.1 Im NPC als Empfaenger auf ein TM reagieren
+   public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
+                                 string msg_prefix, mixed origin) {
+     int ret = MSG_DELIVERED;  // Default
+
+     // eine OOC-Kommunikation?
+     if(msg_typ&MT_COMM) {
+       if(strstr(msg, "hilfe")>=0)
+         if(environment(origin)==environment()) {
+           origin->ReceiveMsg("Ich werd dir gleich helfen!",
+                              MT_COMM|MSG_DONT_STORE, MA_TELL,
+                              "Arkshat teilt dir mit: ");
+         } else {
+           origin->ReceiveMsg("Hilf dir selbst, dann hilft dir Gott!",
                               MT_COMM|MT_FAR|MSG_DONT_STORE,
                               MA_TELL,
                               "Arkshat teilt dir mit: ");
+         }
+       else if(...)
+       [...]
+     } else if(msg_typ&MT_LISTEN && msg_action==MA_SAY) {
+       [...]
+     }
 
-    #1.3 Nachricht an einen Spieler mit Fallback-Kaskade
-    // Achtung, bei MT_COMM oder Ignorieren gibt es natuerlich auch
-    // Misserfolgs-Rueckgaben. Bei einem normalen Kommando wie diesem
-    // hier ist das unproblematisch und daher sinnvoll:
-    if(this_player()->ReceiveMsg(
-         "Du drueckst den Knopf und es oeffnet sich knirschend "
-         "ein kleines Fach in der Wand.", MT_LOOK) < MSG_DELIVERED &&
-       this_player()->ReceiveMsg(
-         "Du drueckst den Knopf und irgend etwas scheint sich "
-         "knirschend zu oeffnen. Das Geraeusch kam von der Wand.",
-         MT_LISTEN) < MSG_DELIVERED) // leider blind UND taub ... also:
-      this_player()->ReceiveMsg(
-        "Du drueckst den Knopf und irgend etwas scheint zu passieren, "
-        "aber leider siehst und hoerst du nichts.", MT_FEEL);
+     return ret;
+   }
 
 
-    #2.1 Im NPC als Empfaenger auf ein TM reagieren
-    public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
-                                  string msg_prefix, mixed origin) {
-      int ret = MSG_DELIVERED;  // Default
+   #3.1 als Sender an viele, Variante mit eigenem filter
+   // Achtung: siehe 3.3. send_room() loest vieles.
+   // Living nickt nur seinen Nichtgegnern zu
+   object *all = filter(all_inventory(environment(this_player())),
+                        #'living) - ({this_player()});
+   all -= this_player()->PresentEnemies();
+   all->ReceiveMsg(this_player()->Name()+
+                   " nickt dir verstohlen zu und scheint bereit.",
+                   MT_LOOK, MA_EMOTE);
 
-      // eine OOC-Kommunikation?
-      if(msg_typ&MT_COMM) {
-        if(strstr(msg, "hilfe")>=0)
-          if(environment(origin)==environment()) {
-            origin->ReceiveMsg("Ich werd dir gleich helfen!",
-                               MT_COMM|MSG_DONT_STORE, MA_TELL,
-                               "Arkshat teilt dir mit: ");
-          } else {
-            origin->ReceiveMsg("Hilf dir selbst, dann hilft dir Gott!",
-                               MT_COMM|MT_FAR|MSG_DONT_STORE,
-                               MA_TELL,
-                               "Arkshat teilt dir mit: ");
-          }
-        else if(...)
-        [...]
-      } else if(msg_typ&MT_LISTEN && msg_action==MA_SAY) {
-        [...]
-      }
+   #3.2 als Sender an viele, Variante mit einzelnem Iterieren
+   // Achtung: siehe 3.3. send_room() loest vieles.
+   // Living trinkt etwas, jeder im Raum soll es sehen oder hoeren
+   object ob = first_inventory(environment(this_player()));
+   do {
+     if(living(ob) && ob!=this_player())
+       ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
+                      MT_LOOK|MT_LISTEN,
+                      MA_DRINK);
+     ob = next_inventory(ob);
+   } while(ob);
 
-      return ret;
-    }
+   #3.3 als Sender an viele, Variante mit send_room
+   // Living gruesst seine Freunde
+   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
+   object *exclude = this_player()->PresentEnemies();
+   send_room(this_object(),
+             this_player()->Name()+" gruesst dich.",
+             MT_LOOK|MT_LISTEN,
+             MA_EMOTE,
+             0,
+             exclude);
+
+   #3.4 als Sender an viele mit send_room und ReceiveMsg()
+   // Living gruesst seine Freunde, seine Feinde sehen das
+   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
+   object *exclude = this_player()->PresentEnemies();
+   send_room(this_object(),
+             this_player()->Name()+" gruesst dich.",
+             MT_LOOK|MT_LISTEN, MA_EMOTE, 0, exclude);
+   exclude->ReceiveMessage(
+     this_player()->Name()+" gruesst, aber nicht dich.",
+     MT_LOOK|MT_LISTEN, MA_EMOTE);
 
 
-    #3.1 als Sender an viele, Variante mit eigenem filter
-    // Achtung: siehe 3.3. send_room() loest vieles.
-    // Living nickt nur seinen Nichtgegnern zu
-    object *all = filter(all_inventory(environment(this_player())),
-                         #'living) - ({this_player()});
-    all -= this_player()->PresentEnemies();
-    all->ReceiveMsg(this_player()->Name()+
-                    " nickt dir verstohlen zu und scheint bereit.",
-                    MT_LOOK, MA_EMOTE);
+KONSTANTEN FUER PARAMETER
+=========================
 
-    #3.2 als Sender an viele, Variante mit einzelnem Iterieren
-    // Achtung: siehe 3.3. send_room() loest vieles.
-    // Living trinkt etwas, jeder im Raum soll es sehen oder hoeren
-    object ob = first_inventory(environment(this_player()));
-    do {
-      if(living(ob) && ob!=this_player())
-        ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_DRINK);
-      ob = next_inventory(ob);
-    } while(ob);
+   Saemtlich in "/sys/living/comm.h". Hier nicht notwendigerweise
+   immer aktuell oder vollstaendig.
 
-    #3.3 als Sender an viele, Variante mit send_room
-    // Living gruesst seine Freunde
-    // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
-    object *exclude = this_player()->PresentEnemies();
-    send_room(this_object(),
-              this_player()->Name()+" gruesst dich.",
-              MT_LOOK|MT_LISTEN,
-              MA_EMOTE,
-              0,
-              exclude);
+   <msg_typ>
+     MT_UNKNOWN      unspez. Nachrichtentyp (nicht verwenden). Es wird
+                     versucht, aufgrund <msg_action> den Typ zu erraten.
+     MT_LOOK         alles, was man sieht
+     MT_LISTEN       alles, was man hoert
+     MT_FEEL         alles, was man fuehlt
+     MT_TASTE        alles, was man schmeckt
+     MT_SMELL        alles, was man riecht
+     MT_MAGIC        alle sonstigen (uebersinnlichen) Wahrnehmungen
+     MT_NOTIFICATION Statusmeldungen, Kommandobestaetigungen
+     MT_COMM         alle OOC-Kommunikation, d.h. nicht durch o.g. Sinne
+                     abgedeckt.
+     MT_FAR          alles, was aus der Ferne / einem anderen Raum kommt.
+                     muss mit min. einem anderen Typ kombiniert werden
+     MT_DEBUG        Debugmeldungen, sehen nur Magier im Magiermodus
+     MT_NEWS         Mails & MPA
 
-    #3.4 als Sender an viele mit send_room und ReceiveMsg()
-    // Living gruesst seine Freunde, seine Feinde sehen das
-    // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
-    object *exclude = this_player()->PresentEnemies();
-    send_room(this_object(),
-              this_player()->Name()+" gruesst dich.",
-              MT_LOOK|MT_LISTEN, MA_EMOTE, 0, exclude);
-    exclude->ReceiveMessage(
-      this_player()->Name()+" gruesst, aber nicht dich.",
-      MT_LOOK|MT_LISTEN, MA_EMOTE);
+     MSG_DONT_BUFFER Nachricht darf nicht im Kobold gespeichert werden
+     MSG_DONT_STORE  Nachricht darf nicht in die Comm-History
+     MSG_DONT_WRAP   Nachricht nicht per break_string umbrechen
+     MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden
 
-KONSTANTEN FUER PARAMETER:
-    Saemtlich in "/sys/living/comm.h". Hier nicht notwendigerweise
-    immer aktuell oder vollstaendig.
+     MSG_BS_LEAVE_LFS    wie BS_LEAVE_MY_LFS fuer break_string()
+     MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
+     MSG_BS_BLOCK        wie BS_BLOCK fuer break_string()
+     MSG_BS_NO_PARINDENT wie BS_NO_PARINDENT fuer break_string()
+     MSG_BS_INDENT_ONCE  wie BS_INDENT_ONCE fuer break_string()
+     MSG_BS_PREP_INDENT  wie BS_PREPEND_INDENT fuer break_string()
 
-    <msg_typ>
-      MT_UNKNOWN      unspez. Nachrichtentyp (nicht verwenden). Es wird
-                      versucht, aufgrund <msg_action> den Typ zu erraten.
-      MT_LOOK         alles, was man sieht
-      MT_LISTEN       alles, was man hoert
-      MT_FEEL         alles, was man fuehlt
-      MT_TASTE        alles, was man schmeckt
-      MT_SMELL        alles, was man riecht
-      MT_MAGIC        alle sonstigen (uebersinnlichen) Wahrnehmungen
-      MT_NOTIFICATION Statusmeldungen, Kommandobestaetigungen
-      MT_COMM         alle OOC-Kommunikation, d.h. nicht durch o.g. Sinne
-                      abgedeckt.
-      MT_FAR          alles, was aus der Ferne / einem anderen Raum kommt.
-                      muss mit min. einem anderen Typ kombiniert werden
-      MT_DEBUG        Debugmeldungen, sehen nur Magier im Magiermodus
-      MT_NEWS         Mails & MPA
+   <msg_action> (optional)
+     MA_UNKNOWN     Unspez. Aktion. Es wird der Default query_verb()
+                    benutzt bzw. versucht, die Aktion zu erraten.
+     MA_PUT         Jemand legt etwas hin und gibt jemanden etwas
+     MA_TAKE        Jemand nimmt etwas
+     MA_MOVE_IN     Jemand betritt den Raum
+     MA_MOVE_OUT    Jemand verlaesst den Raum
+     MA_MOVE        Jemand bewegt sich
+     MA_FIGHT       Jemand kaempft
+     MA_WIELD       Jemand zueckt eine Waffe
+     MA_UNWIELD     Jemand steckt eine Waffe weg
+     MA_WEAR        Jemand zieht etwas an
+     MA_UNWEAR      Jemand zieht etwas aus
+     MA_EAT         Jemand isst etwas
+     MA_DRINK       Jemand trinkt etwas
+     MA_SPELL       Jemand wirkt einen Spell
+     MA_LOOK        Jemand sieht etwas an, untersucht etwas
+     MA_LISTEN      Jemand horcht oder lauscht an etwas
+     MA_FEEL        Jemand betastet etwas
+     MA_SMELL       Jemand schnueffelt herum
+     MA_SENSE       Jemand macht eine uebersinnliche Wahrnehmung
+     MA_READ        Jemand liest etwas
+     MA_USE         Jemand benutzt etwas
+     MA_SAY         Jemand sagt etwas
+     MA_REMOVE      Etwas verschwindet
+     // MA_CHAT        Chatkrams (z.B. teile-mit, Teamkampfchat)
+     MA_CHANNEL     Ebenen
+     MA_EMOTE       (r)Emotes, Soulverben (remotes mit Typ MT_COMM|MT_FAR)
+     MA_SHOUT       Rufen (nicht: shout()!)
+     MA_SHOUT_SEFUN Rufen ueber shout(SE)
 
-      MSG_DONT_BUFFER Nachricht darf nicht im Kobold gespeichert werden
-      MSG_DONT_STORE  Nachricht darf nicht in die Comm-History
-      MSG_DONT_WRAP   Nachricht nicht per break_string umbrechen
-      MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden
 
-      MSG_BS_LEAVE_LFS    wie BS_LEAVE_MY_LFS fuer break_string()
-      MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
-      MSG_BS_BLOCK        wie BS_BLOCK fuer break_string()
-      MSG_BS_NO_PARINDENT wie BS_NO_PARINDENT fuer break_string()
-      MSG_BS_INDENT_ONCE  wie BS_INDENT_ONCE fuer break_string()
-      MSG_BS_PREP_INDENT  wie BS_PREPEND_INDENT fuer break_string()
+SIEHE AUCH
+==========
 
-    <msg_action> (optional)
-      MA_UNKNOWN     Unspez. Aktion. Es wird der Default query_verb()
-                     benutzt bzw. versucht, die Aktion zu erraten.
-      MA_PUT         Jemand legt etwas hin und gibt jemanden etwas
-      MA_TAKE        Jemand nimmt etwas
-      MA_MOVE_IN     Jemand betritt den Raum
-      MA_MOVE_OUT    Jemand verlaesst den Raum
-      MA_MOVE        Jemand bewegt sich 
-      MA_FIGHT       Jemand kaempft
-      MA_WIELD       Jemand zueckt eine Waffe
-      MA_UNWIELD     Jemand steckt eine Waffe weg
-      MA_WEAR        Jemand zieht etwas an
-      MA_UNWEAR      Jemand zieht etwas aus
-      MA_EAT         Jemand isst etwas
-      MA_DRINK       Jemand trinkt etwas
-      MA_SPELL       Jemand wirkt einen Spell
-      MA_LOOK        Jemand sieht etwas an, untersucht etwas
-      MA_LISTEN      Jemand horcht oder lauscht an etwas
-      MA_FEEL        Jemand betastet etwas
-      MA_SMELL       Jemand schnueffelt herum
-      MA_SENSE       Jemand macht eine uebersinnliche Wahrnehmung
-      MA_READ        Jemand liest etwas
-      MA_USE         Jemand benutzt etwas
-      MA_SAY         Jemand sagt etwas
-      MA_REMOVE      Etwas verschwindet
-      // MA_CHAT        Chatkrams (z.B. teile-mit, Teamkampfchat)
-      MA_CHANNEL     Ebenen
-      MA_EMOTE       (r)Emotes, Soulverben (remotes mit Typ MT_COMM|MT_FAR)
-      MA_SHOUT       Rufen (nicht: shout()!)
-      MA_SHOUT_SEFUN Rufen ueber shout(SE)
-
-SIEHE AUCH:
-    Verwandt: send_room(SE)
-    Lfuns:    TestIgnore(L)
-    Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
-              query_verb(E), query_once_interactive(E), break_string(SE)
+   Verwandt: send_room(SE)
+   Lfuns:    TestIgnore(L)
+   Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
+             query_verb(E), query_once_interactive(E), break_string(SE)
 
 13.03.2016, Zesstra
-
diff --git a/doc/lfun/RegisterEvent b/doc/lfun/RegisterEvent
index 8bc5d8d..a664b3b 100644
--- a/doc/lfun/RegisterEvent
+++ b/doc/lfun/RegisterEvent
@@ -1,82 +1,113 @@
 
-FUNKTION:
-     int RegisterEvent(string eid, string fun, object listener);
-
-DEFINIERT IN:
-     /p/daemon/eventd.c
-DEKLARIERT IN:
-     /sys/events.h
-
-ARGUMENTE:
-     string eid,
-       Die ID des Events, fuer den man sich registrieren will. Da dieser
-       String fuer alle Events jeweils eindeutig sein muss, empfiehlt es sich,
-       fuer eigene Events z.B. als Praefix den eigenen Magiernamen zu nehmen,
-       z.B. "zesstra_vulkanausbruch".
-       ACHTUNG: IDs, die mit '_evt_lib_' beginnen, sind AUSSCHLIESSLICH der
-       Mudlib vorbehalten!
-     string fun,
-       Name der Funktion, die im Objekt listener bei Auftreten des Events
-       gerufen werden soll.
-     object listener,
-       Das Objekt, das als Lauscher fuer diesen Event registriert werden soll.
-
-BESCHREIBUNG:
-     Das Objekt 'listener' wird als Lauscher dieses Events registriert. Ab
-     diesem Moment wird immer dann, wenn ein Event mit der ID 'eid' ausgeloest
-     wird, in 'listener' die Funktion 'fun' aufgerufen (zeitverzoegert, meist
-     0-2s).
-     
-     Die Funktion wird dabei immer mit 3 Argumenten aufgerufen:
-     listener->fun(eid, triggerob, data);
-     Hierbei ist 'eid' die jeweilige Event-ID und 'triggerob' ist das Objekt,
-     welches den Event ausloeste. 
-     'data' kann jeder LPC-Datentyp sein und enthaelt die Daten, die das
-     triggernde Objekt an alle Listener uebermitteln will (damit sind Datentyp
-     und Inhalt komplett abhaengig vom Event!)
-
-     Existiert bisher noch kein Event mit der ID 'eid', wird implizit ein
-     neuer Event erstellt, der erstmal nur das sich gerade registrierende
-     Objekt als Lauscher hat.
+RegisterEvent()
+***************
 
 
-RUeCKGABEWERT:
-     1 fuer Erfolg, <=0 fuer Misserfolg.
-     1   - Erfolg, 'listener' wurde eingetragen.
-     -1  - falsche Argumente wurden uebergeben
-     -2  - nicht-oeffentlicher Event und 'listener' wurde nicht fuer diesen
-           Event freigegeben (momentan gibt es noch keine nicht-oeffentlichen
-           Events)
-     -3  - 'fun' in 'listener' ist nicht vorhanden oder nicht von aussen 
-           aufrufbar (protected, static, private).
-     
-BEMERKUNGEN:
-     Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
-     Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
-     Funktionsname).
-     Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
-     ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
-     Problemen auch jederzeit reduziert werden!
-     Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
-     Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
-     werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
-     unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
-     Clones!
+FUNKTION
+========
 
-BEISPIELE:
-     1. Ein Objekt moechte ueber Spielertode informiert werden:
-          EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot", 
+   int RegisterEvent(string eid, string fun, object listener);
+
+
+DEFINIERT IN
+============
+
+   /p/daemon/eventd.c
+
+
+DEKLARIERT IN
+=============
+
+   /sys/events.h
+
+
+ARGUMENTE
+=========
+
+   string eid,
+     Die ID des Events, fuer den man sich registrieren will. Da dieser
+     String fuer alle Events jeweils eindeutig sein muss, empfiehlt es sich,
+     fuer eigene Events z.B. als Praefix den eigenen Magiernamen zu nehmen,
+     z.B. "zesstra_vulkanausbruch".
+     ACHTUNG: IDs, die mit '_evt_lib_' beginnen, sind AUSSCHLIESSLICH der
+     Mudlib vorbehalten!
+   string fun,
+     Name der Funktion, die im Objekt listener bei Auftreten des Events
+     gerufen werden soll.
+   object listener,
+     Das Objekt, das als Lauscher fuer diesen Event registriert werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Das Objekt 'listener' wird als Lauscher dieses Events registriert. Ab
+   diesem Moment wird immer dann, wenn ein Event mit der ID 'eid' ausgeloest
+   wird, in 'listener' die Funktion 'fun' aufgerufen (zeitverzoegert, meist
+   0-2s).
+
+
+
+   Die Funktion wird dabei immer mit 3 Argumenten aufgerufen:
+   listener->fun(eid, triggerob, data);
+   Hierbei ist 'eid' die jeweilige Event-ID und 'triggerob' ist das Objekt,
+   welches den Event ausloeste.
+   'data' kann jeder LPC-Datentyp sein und enthaelt die Daten, die das
+   triggernde Objekt an alle Listener uebermitteln will (damit sind Datentyp
+   und Inhalt komplett abhaengig vom Event!)
+
+   Existiert bisher noch kein Event mit der ID 'eid', wird implizit ein
+   neuer Event erstellt, der erstmal nur das sich gerade registrierende
+   Objekt als Lauscher hat.
+
+
+RUeCKGABEWERT
+=============
+
+   1 fuer Erfolg, <=0 fuer Misserfolg.
+   1   - Erfolg, 'listener' wurde eingetragen.
+   -1  - falsche Argumente wurden uebergeben
+   -2  - nicht-oeffentlicher Event und 'listener' wurde nicht fuer diesen
+         Event freigegeben (momentan gibt es noch keine nicht-oeffentlichen
+         Events)
+   -3  - 'fun' in 'listener' ist nicht vorhanden oder nicht von aussen
+         aufrufbar (protected, static, private).
+
+
+BEMERKUNGEN
+===========
+
+   Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
+   Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
+   Funktionsname).
+   Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
+   ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
+   Problemen auch jederzeit reduziert werden!
+   Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
+   Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
+   werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
+   unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
+   Clones!
+
+
+BEISPIELE
+=========
+
+   1. Ein Objekt moechte ueber Spielertode informiert werden:
+        EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot",
+                              this_object());
+      Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die
+      Funktion "spieler_ist_tot" aufgerufen.
+
+   2. Ein Objekt will informiert werden, wenn der Event
+      "boing_zwergenkoenig_angriff" ausgeloest wird:
+         EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
                                 this_object());
-        Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die 
-        Funktion "spieler_ist_tot" aufgerufen.
 
-     2. Ein Objekt will informiert werden, wenn der Event
-        "boing_zwergenkoenig_angriff" ausgeloest wird:
-           EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
-                                  this_object());
 
-SIEHE AUCH:
-     events, eventd, UnregisterEvent(), TriggerEvent()
+SIEHE AUCH
+==========
 
-----------------------------------------------------------------------------
+   events, eventd, UnregisterEvent(), TriggerEvent()
+
 Last modified: 15.08.2007, Zesstra
diff --git a/doc/lfun/RegisterHelperNPC b/doc/lfun/RegisterHelperNPC
index 170e8b1..f8b6a2e 100644
--- a/doc/lfun/RegisterHelperNPC
+++ b/doc/lfun/RegisterHelperNPC
@@ -1,87 +1,114 @@
+
 RegisterHelperNPC()
-FUNKTION:
-     public int RegisterHelperNPC(object npc, int flags);
+*******************
 
-DEFINIERT IN:
-     /std/player/combat.c
-     /sys/living/combat.h
 
-ARGUMENTE:
-     object npc
-       Objekt des helfenden NPC, der angemeldet werden soll.
+FUNKTION
+========
 
-     int flags
-       ver-oder-te Konstanten, die die Art des Helfer-NPC beschreiben (s.u.)
+   public int RegisterHelperNPC(object npc, int flags);
 
-BESCHREIBUNG:
-     Mit dieser Funktion wird ein einem Spieler helfender NPC im Spieler
-     angemeldet. Hierdurch kann spaeter herausgefunden werden, welche NPC
-     einem Spieler helfen und ggf. den von diesen verursachten Schaden im
-     Kampf dem Spieler zuzurechnen.
 
-     Die Flags sind eine der folgenden Konstanten oder eine beliebige durch
-     ver-oder-ung gebildete Kombination.
+DEFINIERT IN
+============
 
-     Momentan gibt es 2 Klassen von Helfer-NPC:
-     + GUILD_HELPER: der Helfer-NPC ist ein Gilden-NPC
-     + MISC_HELPER:  der Helfer-NPC ist irgendein NPC, der nicht zu einer Gilde
-                     gehoert.
+   /std/player/combat.c
+   /sys/living/combat.h
 
-     Zusaetzlich zu den Klassen gibt es noch weitere Flags, die etwas ueber
-     den Helfer-NPC sagen:
 
-     + EXCLUSIVE_HELPER: dieser Helfer-NPC duldet keinen weiteren NPC der
-                         gleichen Klasse.
-     + ACTIVE_HELPER: ist dieses Flag gesetzt, ist der NPC mehr als nur reiner
-                      Schlagfaenger.
+ARGUMENTE
+=========
 
-     Wird EXCLUSIVE_HELPER gesetzt und es ist in der gleichen Klasse schon ein
-     NPC angemeldet, schlaegt die Registrierung fehl.
-     Ist in der gleichen Klasse bereits ein NPC mit EXCLUSIVE_HELPER
-     angemeldet, schlaegt die Registierung ebenfalls fehl, auch wenn der neue
-     NPC kein EXCLUSIVE_HELPER setzt.
+   object npc
+     Objekt des helfenden NPC, der angemeldet werden soll.
 
-RUeCKGABEWERT:
-     1, wenn die Registrierung erfolgreich war.
-     0 sonst. In diesem Fall darf der NPC dem Spieler NICHT helfen, weder
-       passiv (Schlagfaenger), noch aktiv.
+   int flags
+     ver-oder-te Konstanten, die die Art des Helfer-NPC beschreiben (s.u.)
 
-BEMERKUNGEN:
-     Diese Funktion setzt bei der Erfolg die Property P_HELPER_NPC in <npc>
-     auf passende Werte.
-     Bitte auf gar keinen Fall die numerischen Werte der Konstanten fuer
-     <flags> nutzen, diese koennen sich jederzeit aendern.
 
-BEISPIELE:
-     1. Ein nicht-exklusiver Gilden-NPC, der dem Spieler folgt.
-     if (spieler->RegisterHelperNPC(this_object(), GUILD_HELPER) == 1) {
-       move(environment(spieler), M_GO);
-       spieler->AddPursuer(this_object());
-       // meldung ausgebene...
-     }
+BESCHREIBUNG
+============
 
-     2a. Ein exklusiver Nicht-Gilden-NPC
-     if (spieler->RegisterHelperNPC(this_object(),
-                                    MISC_HELPER|EXCLUSIVE_HELPER) == 1) {
-       move(environment(spieler), M_GO);
-     }
+   Mit dieser Funktion wird ein einem Spieler helfender NPC im Spieler
+   angemeldet. Hierdurch kann spaeter herausgefunden werden, welche NPC
+   einem Spieler helfen und ggf. den von diesen verursachten Schaden im
+   Kampf dem Spieler zuzurechnen.
 
-     2b. Ein nicht-exklusiver Nicht-Gilde-NPC, der nach 2a. kommt.
-     if (spieler->RegisterHelperNPC(this_object(), MISC_HELPER) == 1) {
-       // ... wenn der NPC aus 2a noch existiert, trifft dies hier nie zu.
-     }
+   Die Flags sind eine der folgenden Konstanten oder eine beliebige durch
+   ver-oder-ung gebildete Kombination.
 
-     3. Ein exklusiver NPC, der weitere Gilden- und sonstige NPC ausschliesst
-        (Solche Kombination bitte mit der Gilden-Balance abstimmen.)
-     if (spieler->RegisterHelperNPC(this_object(), 
-                            MISC_HELPER|GUILD_HELPER|EXCLUSIVE_HELPER) == 1) {
-       move(environment(spieler), M_GO);
-     }
+   Momentan gibt es 2 Klassen von Helfer-NPC:
+   + GUILD_HELPER: der Helfer-NPC ist ein Gilden-NPC
+   + MISC_HELPER:  der Helfer-NPC ist irgendein NPC, der nicht zu einer Gilde
+                   gehoert.
 
-     4. Die Registrierung ohne Klasse schlaegt fehl, z.B.:
-       spieler->RegisterHelperNPC(this_object(), 0);
-       spieler->RegisterHelperNPC(this_object(), EXCLUSIVE_HELPER);
+   Zusaetzlich zu den Klassen gibt es noch weitere Flags, die etwas ueber
+   den Helfer-NPC sagen:
 
-SIEHE AUCH:
-    UnregisterHelperNPC()
-    P_HELPER_NPC
+   + EXCLUSIVE_HELPER: dieser Helfer-NPC duldet keinen weiteren NPC der
+                       gleichen Klasse.
+   + ACTIVE_HELPER: ist dieses Flag gesetzt, ist der NPC mehr als nur reiner
+                    Schlagfaenger.
+
+   Wird EXCLUSIVE_HELPER gesetzt und es ist in der gleichen Klasse schon ein
+   NPC angemeldet, schlaegt die Registrierung fehl.
+   Ist in der gleichen Klasse bereits ein NPC mit EXCLUSIVE_HELPER
+   angemeldet, schlaegt die Registierung ebenfalls fehl, auch wenn der neue
+   NPC kein EXCLUSIVE_HELPER setzt.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn die Registrierung erfolgreich war.
+   0 sonst. In diesem Fall darf der NPC dem Spieler NICHT helfen, weder
+     passiv (Schlagfaenger), noch aktiv.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion setzt bei der Erfolg die Property P_HELPER_NPC in <npc>
+   auf passende Werte.
+   Bitte auf gar keinen Fall die numerischen Werte der Konstanten fuer
+   <flags> nutzen, diese koennen sich jederzeit aendern.
+
+
+BEISPIELE
+=========
+
+   1. Ein nicht-exklusiver Gilden-NPC, der dem Spieler folgt.
+   if (spieler->RegisterHelperNPC(this_object(), GUILD_HELPER) == 1) {
+     move(environment(spieler), M_GO);
+     spieler->AddPursuer(this_object());
+     // meldung ausgebene...
+   }
+
+   2a. Ein exklusiver Nicht-Gilden-NPC
+   if (spieler->RegisterHelperNPC(this_object(),
+                                  MISC_HELPER|EXCLUSIVE_HELPER) == 1) {
+     move(environment(spieler), M_GO);
+   }
+
+   2b. Ein nicht-exklusiver Nicht-Gilde-NPC, der nach 2a. kommt.
+   if (spieler->RegisterHelperNPC(this_object(), MISC_HELPER) == 1) {
+     // ... wenn der NPC aus 2a noch existiert, trifft dies hier nie zu.
+   }
+
+   3. Ein exklusiver NPC, der weitere Gilden- und sonstige NPC ausschliesst
+      (Solche Kombination bitte mit der Gilden-Balance abstimmen.)
+   if (spieler->RegisterHelperNPC(this_object(),
+                          MISC_HELPER|GUILD_HELPER|EXCLUSIVE_HELPER) == 1) {
+     move(environment(spieler), M_GO);
+   }
+
+   4. Die Registrierung ohne Klasse schlaegt fehl, z.B.:
+     spieler->RegisterHelperNPC(this_object(), 0);
+     spieler->RegisterHelperNPC(this_object(), EXCLUSIVE_HELPER);
+
+
+SIEHE AUCH
+==========
+
+   UnregisterHelperNPC()
+   P_HELPER_NPC
diff --git a/doc/lfun/RegisterHelperObject b/doc/lfun/RegisterHelperObject
index aa1cb66..af33a5c 100644
--- a/doc/lfun/RegisterHelperObject
+++ b/doc/lfun/RegisterHelperObject
@@ -1,113 +1,145 @@
 
-FUNKTION:
-     int RegisterHelperObject(object helper, int type, 
-                              string|closure callback);
+RegisterHelperObject()
+**********************
 
-DEFINIERT IN:
-     /std/living/helpers.c
 
-ARGUMENTE:
-     object helper
-       Das Objekt, das bei einem Lebewesen als Hilfsobjekt registriert 
-       werden soll. Das Objekt muss sich dazu nicht im Inventar des
-       Lebewesens befinden.
-     int type
-       Helfertyp, einer der in /sys/living/helpers.h definierten Typen:
-       - HELPER_TYPE_AERIAL fuer die Flug-/Segelunterstuetzung
-       - HELPER_TYPE_AQUATIC fuer Tauchunterstuetzung
-     string|closure callback
-        Closure oder Funktionsname als String; dies ist die Funktion, die im
-        Objekt helper gerufen wird, um abzufragen, ob es sich aktuell fuer
-        zustaendig erklaert oder nicht.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Objekt "helper" wird als Hilfsobjekt fuer bestimmte Aktivitaeten wie
-     zum Beispiel Fliegen oder Tauchen registriert. 
-     
-     Die als Callback uebergebene Funktion wird bei der Abfrage der 
-     P_*_HELPERS-Properties (siehe unten) aufgerufen und deren 
-     Rueckgabewert in der Property vermerkt. 
-     
-     Der Rueckgabewert der Callback-Methode muss im Wertebereich 
-     0..10000 liegen, wobei ein Wert von 0 bedeutet, dass das Hilfsobjekt 
-     sich gerade nicht zustaendig fuehlt. Bei den Werten >0 ist es dem 
-     abfragenden Objekt ueberlassen, wie es diese Daten bewertet.
+   int RegisterHelperObject(object helper, int type,
+                            string|closure callback);
 
-     Die Funktion muss existieren und public sein, d.h. von aussen gerufen 
-     werden koennen.
-     
-     Die Funktion bekommt das Spielerobjekt und das abfragende Objekt als
-     Parameter uebergeben.
 
-HINWEIS:
-     Es ist ein Unterschied, ob sich ein Objekt via UnregisterHelperObject()
-     als Helfer austraegt, oder ob der Aufruf der Callback-Funktion eine
-     0 zurueckgibt. Im letzteren Fall ist das Objekt nach wie vor 
-     registriert und kann trotzdem vom abfragenden Objekt als 
-     funktionsfaehig angesehen werden.
+DEFINIERT IN
+============
 
-RUECKGABEWERTE:
-      1  Objekt wurde erfolgreich registriert (HELPER_SUCCESS)
-     -1  angegebenes Hilfsobjekt existiert nicht (HELPER_NO_CALLBACK_OBJECT)
-     -2  angegebenes Hilfsobjekt ist bereits fuer diese Art der
-         Unterstuetzung registriert (HELPER_ALREADY_LISTED)
+   /std/living/helpers.c
 
-BEISPIELE:
-     a) Eine luftgefuellte Blase will sich als Tauch-Helfer am Spieler
-     anmelden und ist zustaendig, solange sich noch Luft in ihr befindet:
 
-     int luft = 5; // globale Variable z.B. fuer Luftinhalt von 5 Atemzuegen
+ARGUMENTE
+=========
 
-     // Registrierung im Spielerobjekt
-     if ( TP->RegisterHelperObject(ME, HELPER_TYPE_AQUATIC,
-          "DivingCallback") == HELPER_SUCCESS ) {
-       tell_object(TP, "Du kannst jetzt mit Hilfe der Luftblase unter Wasser "
-         "atmen.\n");
+   object helper
+     Das Objekt, das bei einem Lebewesen als Hilfsobjekt registriert
+     werden soll. Das Objekt muss sich dazu nicht im Inventar des
+     Lebewesens befinden.
+   int type
+     Helfertyp, einer der in /sys/living/helpers.h definierten Typen:
+     - HELPER_TYPE_AERIAL fuer die Flug-/Segelunterstuetzung
+     - HELPER_TYPE_AQUATIC fuer Tauchunterstuetzung
+   string|closure callback
+      Closure oder Funktionsname als String; dies ist die Funktion, die im
+      Objekt helper gerufen wird, um abzufragen, ob es sich aktuell fuer
+      zustaendig erklaert oder nicht.
+
+
+BESCHREIBUNG
+============
+
+   Das Objekt "helper" wird als Hilfsobjekt fuer bestimmte Aktivitaeten wie
+   zum Beispiel Fliegen oder Tauchen registriert.
+
+
+
+   Die als Callback uebergebene Funktion wird bei der Abfrage der
+   P_*_HELPERS-Properties (siehe unten) aufgerufen und deren
+   Rueckgabewert in der Property vermerkt.
+
+
+
+   Der Rueckgabewert der Callback-Methode muss im Wertebereich
+   0..10000 liegen, wobei ein Wert von 0 bedeutet, dass das Hilfsobjekt
+   sich gerade nicht zustaendig fuehlt. Bei den Werten >0 ist es dem
+   abfragenden Objekt ueberlassen, wie es diese Daten bewertet.
+
+   Die Funktion muss existieren und public sein, d.h. von aussen gerufen
+   werden koennen.
+
+
+
+   Die Funktion bekommt das Spielerobjekt und das abfragende Objekt als
+   Parameter uebergeben.
+
+
+HINWEIS
+=======
+
+   Es ist ein Unterschied, ob sich ein Objekt via UnregisterHelperObject()
+   als Helfer austraegt, oder ob der Aufruf der Callback-Funktion eine
+   0 zurueckgibt. Im letzteren Fall ist das Objekt nach wie vor
+   registriert und kann trotzdem vom abfragenden Objekt als
+   funktionsfaehig angesehen werden.
+
+
+RUECKGABEWERTE
+==============
+
+    1  Objekt wurde erfolgreich registriert (HELPER_SUCCESS)
+   -1  angegebenes Hilfsobjekt existiert nicht (HELPER_NO_CALLBACK_OBJECT)
+   -2  angegebenes Hilfsobjekt ist bereits fuer diese Art der
+       Unterstuetzung registriert (HELPER_ALREADY_LISTED)
+
+
+BEISPIELE
+=========
+
+   a) Eine luftgefuellte Blase will sich als Tauch-Helfer am Spieler
+   anmelden und ist zustaendig, solange sich noch Luft in ihr befindet:
+
+   int luft = 5; // globale Variable z.B. fuer Luftinhalt von 5 Atemzuegen
+
+   // Registrierung im Spielerobjekt
+   if ( TP->RegisterHelperObject(ME, HELPER_TYPE_AQUATIC,
+        "DivingCallback") == HELPER_SUCCESS ) {
+     tell_object(TP, "Du kannst jetzt mit Hilfe der Luftblase unter Wasser "
+       "atmen.\n");
+   }
+
+   // hier koennen natuerlich auch noch komplexere Dinge ablaufen, z.B.
+   // wenn ein Wert zurueckgegeben werden soll, der nicht nur 0 oder 1 ist.
+   public int DivingCallback(object player, object caller) {
+     return (environment(ME)==player && luft>0);
+   }
+
+   b) Ein Spieler befindet sich in einem Raum mit einem steilen Abhang, den
+   man hinunterspringen kann. Dies geht aber nur dann gefahrlos, wenn es
+   Hilfsobjekte gibt, die den (Segel)flug erlauben:
+
+   // cmd_springen() sei die Funktion, die bei der Eingabe des Befehls durch
+   // den Spieler aufgerufen wird.
+   static int cmd_springen(string str) {
+     [...]
+     // Property abfragen
+     mapping helpers = TP->QueryProp(P_AERIAL_HELPERS);
+     // Liste der Werte fuer die einzelnen Unterstuetzungsobjekte ermitteln
+     int *values = m_values(helpers,0);
+     // Spieler schonmal runterbewegen, die Folgen seines Handelns spuert
+     // er dann, wenn er unten angekommen ist.
+     TP->move(zielraum, M_GO|M_SILENT);
+     // "helpers" ist immer ein Mapping, das pruefen wir nicht extra.
+     // Wenn die Liste der Objekte noch mindestens ein Element enthaelt,
+     // nachdem alle unzustaendigen Hilfsobjekte (Rueckgabewert der
+     // Callback-Funktion == 0) rausgerechnet wurden, existiert mindestens
+     // ein geeignetes Hilfsobjekt.
+     if ( sizeof(values-({0})) ) {
+       tell_object(TP, "Sanft segelst Du den Hang hinab.\n");
      }
-
-     // hier koennen natuerlich auch noch komplexere Dinge ablaufen, z.B.
-     // wenn ein Wert zurueckgegeben werden soll, der nicht nur 0 oder 1 ist.
-     public int DivingCallback(object player, object caller) {
-       return (environment(ME)==player && luft>0);
+     else {
+       tell_object(TP, BS("Todesmutig springst Du den Hang hinab und "
+         "schlaegst hart unten auf. Du haettest vielleicht daran denken "
+         "sollen, Dir geeignete Hilfsmittel fuer so eine Aktion zu "
+         "besorgen.");
+       TP->Defend(800, ({DT_BLUDGEON}), ([SP_NO_ACTIVE_DEFENSE:1]), ME);
      }
+     return 1;
+   }
 
-     b) Ein Spieler befindet sich in einem Raum mit einem steilen Abhang, den
-     man hinunterspringen kann. Dies geht aber nur dann gefahrlos, wenn es
-     Hilfsobjekte gibt, die den (Segel)flug erlauben:
 
-     // cmd_springen() sei die Funktion, die bei der Eingabe des Befehls durch
-     // den Spieler aufgerufen wird.
-     static int cmd_springen(string str) {
-       [...]
-       // Property abfragen
-       mapping helpers = TP->QueryProp(P_AERIAL_HELPERS);
-       // Liste der Werte fuer die einzelnen Unterstuetzungsobjekte ermitteln
-       int *values = m_values(helpers,0);
-       // Spieler schonmal runterbewegen, die Folgen seines Handelns spuert
-       // er dann, wenn er unten angekommen ist.
-       TP->move(zielraum, M_GO|M_SILENT);
-       // "helpers" ist immer ein Mapping, das pruefen wir nicht extra.
-       // Wenn die Liste der Objekte noch mindestens ein Element enthaelt,
-       // nachdem alle unzustaendigen Hilfsobjekte (Rueckgabewert der
-       // Callback-Funktion == 0) rausgerechnet wurden, existiert mindestens
-       // ein geeignetes Hilfsobjekt.
-       if ( sizeof(values-({0})) ) {
-         tell_object(TP, "Sanft segelst Du den Hang hinab.\n");
-       }
-       else {
-         tell_object(TP, BS("Todesmutig springst Du den Hang hinab und "
-           "schlaegst hart unten auf. Du haettest vielleicht daran denken "
-           "sollen, Dir geeignete Hilfsmittel fuer so eine Aktion zu "
-           "besorgen.");
-         TP->Defend(800, ({DT_BLUDGEON}), ([SP_NO_ACTIVE_DEFENSE:1]), ME);
-       }
-       return 1;
-     }
+SIEHE AUCH
+==========
 
-SIEHE AUCH:
-     Funktionen:  UnregisterHelperObject()
-     Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS, P_AQUATIC_HELPERS
-     Sonstiges:   /sys/living/helpers.h
+   Funktionen:  UnregisterHelperObject()
+   Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS, P_AQUATIC_HELPERS
+   Sonstiges:   /sys/living/helpers.h
 
 05.02.2015 Arathorn
-
diff --git a/doc/lfun/RemoveAdjective b/doc/lfun/RemoveAdjective
index 48605dd..bd1796f 100644
--- a/doc/lfun/RemoveAdjective
+++ b/doc/lfun/RemoveAdjective
@@ -1,24 +1,43 @@
+
 RemoveAdjective()
+*****************
 
-FUNKTION:
-     void RemoveAdjective(string|string* adj);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     adj
-          String oder Array von String mit den Adjektiven.
+   void RemoveAdjective(string|string* adj);
 
-BESCHREIBUNG:
-     Falls einige der vorhandenen Adjektive nicht mehr verwendet werden
-     sollen, koennen sie mit dieser Funktion entfernt werden.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddAdjective(), RemoveId(), /std/thing/description.c
+   /std/thing/description.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   adj
+        String oder Array von String mit den Adjektiven.
+
+
+BESCHREIBUNG
+============
+
+   Falls einige der vorhandenen Adjektive nicht mehr verwendet werden
+   sollen, koennen sie mit dieser Funktion entfernt werden.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   AddAdjective(), RemoveId(), /std/thing/description.c
+
 20.01.2015, Zesstra
diff --git a/doc/lfun/RemoveClass b/doc/lfun/RemoveClass
index 3eeda6c..26b0b79 100644
--- a/doc/lfun/RemoveClass
+++ b/doc/lfun/RemoveClass
@@ -1,23 +1,38 @@
+
 RemoveClass()
+*************
 
-FUNKTION:
-     void RemoveClass(string|string* class);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     string/string* class	- String oder Stringarray der Klasse(n)
+   void RemoveClass(string|string* class);
 
-BESCHREIBUNG:
-     Dem Objekt werden einige der mit AddClass() gesetzten Klassen wieder 

-     entzogen.
-     Die allgemein verfuegbaren Klassen sind unter /sys/class.h definiert.
 
-SIEHE AUCH:
-     AddClass(), is_class_member()
-     P_CLASS
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/thing/description.c
+
+
+ARGUMENTE
+=========
+
+   string/string* class       - String oder Stringarray der Klasse(n)
+
+
+BESCHREIBUNG
+============
+
+   Dem Objekt werden einige der mit AddClass() gesetzten Klassen wieder
+   entzogen.
+   Die allgemein verfuegbaren Klassen sind unter /sys/class.h definiert.
+
+
+SIEHE AUCH
+==========
+
+   AddClass(), is_class_member()
+   P_CLASS
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveCmd b/doc/lfun/RemoveCmd
index 25941c6..6adffbf 100644
--- a/doc/lfun/RemoveCmd
+++ b/doc/lfun/RemoveCmd
@@ -1,60 +1,91 @@
+
+RemoveCmd()
+***********
+
+
 RemoveCmd(L)
-FUNKTION:
-    varargs int RemoveCmd(mixed cmd, int norule, mixed id)
+============
 
-DEFINIERT IN:
-    /std/thing/commands.c
 
-ARGUMENTE:
-    com
-         String oder Array von Strings mit den zu entfernenden Kommandos.
-    norule
-         Kommandos mit Regeln werden nicht entfernt (ausser bei cmd==0)
-    id
-         eine ID, mit der man ein vorher mit dieser ID gespeichertes
-         Kommando eindeutig lvschen kann
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Mit AddCmd() hinzugefuegte Kommandos koennen mit diesem Befehl wieder
-    abgemeldet werden. Die entfernten Kommandos sind direkt nach dem
-    RemoveCmd()-Aufruf nicht mehr ansprechbar.
+   varargs int RemoveCmd(mixed cmd, int norule, mixed id)
 
-    Wird ein Regelstring angegeben, so wird die identische AddCmd-
-    Regel entfernt.
 
-BEMERKUNGEN:
-    Uebergibt man fuer com eine 0, so werden alle definierten Kommandos
-    entfernt!
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    Anzahl der entfernten Kommandos.
+   /std/thing/commands.c
 
-BEISPIELE:
-    (1) AddCmd("test");
-    (2) AddCmd("test|teste&mit&parameter");
-    (3) AddCmd(({"test"}),1);
-    (4) AddCmd("test",0,0,"XYZ");
-    (5) AddCmd("test&mit&parameter",0,0,"XYZ");
 
-    RemoveCmd(0);
-    - entfernt alle Kommandos
-    RemoveCmd("test",1);
-    - entfernt (1) und (3)
-    RemoveCmd("test");
-    - entfernt (1), (3) und einen Teil von (2),
-      es verbleibt "teste&mit&parameter"
-    RemoveCmd("test|teste&mit&parameter"
-    - entfernt (2)
-    RemoveCmd("test",0,"XYZ");
-    - entfernt (4) und (5)
-    RemoveCmd("test",1,"XYZ");
-    - entfernt (4), nicht (5)
-    RemoveCmd(0,0,"XYZ");
-    - entfernt (4) und (5)
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-			AddCmd(L), AddCmd_bsp
-    Sonstiges:		replace_personal(E), enable_commands(E), init(E)
-    Alternativen:	AddAction(L), add_action(E)
+   com
+        String oder Array von Strings mit den zu entfernenden Kommandos.
+   norule
+        Kommandos mit Regeln werden nicht entfernt (ausser bei cmd==0)
+   id
+        eine ID, mit der man ein vorher mit dieser ID gespeichertes
+        Kommando eindeutig lvschen kann
+
+
+BESCHREIBUNG
+============
+
+   Mit AddCmd() hinzugefuegte Kommandos koennen mit diesem Befehl wieder
+   abgemeldet werden. Die entfernten Kommandos sind direkt nach dem
+   RemoveCmd()-Aufruf nicht mehr ansprechbar.
+
+   Wird ein Regelstring angegeben, so wird die identische AddCmd-
+   Regel entfernt.
+
+
+BEMERKUNGEN
+===========
+
+   Uebergibt man fuer com eine 0, so werden alle definierten Kommandos
+   entfernt!
+
+
+RUECKGABEWERT
+=============
+
+   Anzahl der entfernten Kommandos.
+
+
+BEISPIELE
+=========
+
+   (1) AddCmd("test");
+   (2) AddCmd("test|teste&mit&parameter");
+   (3) AddCmd(({"test"}),1);
+   (4) AddCmd("test",0,0,"XYZ");
+   (5) AddCmd("test&mit&parameter",0,0,"XYZ");
+
+   RemoveCmd(0);
+   - entfernt alle Kommandos
+   RemoveCmd("test",1);
+   - entfernt (1) und (3)
+   RemoveCmd("test");
+   - entfernt (1), (3) und einen Teil von (2),
+     es verbleibt "teste&mit&parameter"
+   RemoveCmd("test|teste&mit&parameter"
+   - entfernt (2)
+   RemoveCmd("test",0,"XYZ");
+   - entfernt (4) und (5)
+   RemoveCmd("test",1,"XYZ");
+   - entfernt (4), nicht (5)
+   RemoveCmd(0,0,"XYZ");
+   - entfernt (4) und (5)
+
+
+SIEHE AUCH
+==========
+
+                       AddCmd(L), AddCmd_bsp
+   Sonstiges:          replace_personal(E), enable_commands(E), init(E)
+   Alternativen:       AddAction(L), add_action(E)
 
 24.Maerz 2004 Gloinson
diff --git a/doc/lfun/RemoveDefender b/doc/lfun/RemoveDefender
index aad46df..1dec97a 100644
--- a/doc/lfun/RemoveDefender
+++ b/doc/lfun/RemoveDefender
@@ -1,36 +1,52 @@
+
 RemoveDefender()
+****************
 
-FUNKTION:
-	void RemoveDefender(object friend);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	friend
-	  Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
-	  Angriffe informiert werden soll und diese auch nicht mehr abwehrt.
+   void RemoveDefender(object friend);
 
-BESCHREIBUNG:
-	Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
-	einen solchen Angriff per InformDefend() informieren oder ihnen
-	sogar die Moeglichkeit geben, per DefendOther() direkt in den
-	laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
-	Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
-	als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
-	Name der Funktion. Ausserdem besteht die Einschraenkung, dass diese
-	Objekte in der gleichen Umgebung sein muessen, wie das zu
-	verteidigende Lebewesen.
-	Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
-	abgespeichert und koennen dort abgerufen werden. Natuerlich kann
-	man alte Objekte direkt dort loeschen, jedoch sollte man die
-	hierfuer bereitgestellte Funktionen RemoveDefender() verwenden.
-	Zum Hinzufuegen von Eintraegen im Array steht ebenfalls eine
-	Funktion bereit: AddDefender().
 
-SIEHE AUCH:
-	AddDefender(), InformDefend(), DefendOther(),
-	P_DEFENDERS, /std/living/combat.c
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   friend
+     Objekt (normal Lebewesen), welches zukuenftig nicht mehr ueber
+     Angriffe informiert werden soll und diese auch nicht mehr abwehrt.
+
+
+BESCHREIBUNG
+============
+
+   Ein Lebewesen, welches angegriffen wird, kann andere Objekte ueber
+   einen solchen Angriff per InformDefend() informieren oder ihnen
+   sogar die Moeglichkeit geben, per DefendOther() direkt in den
+   laufenden Angriff einzugreifen (Schaeden abwehren oder umwandeln).
+   Im Normalfall handelt es sich hierbei um andere Lebewesen, welche
+   als Verteidiger des angegriffenen Lebewesens auftreten: Daher der
+   Name der Funktion. Ausserdem besteht die Einschraenkung, dass diese
+   Objekte in der gleichen Umgebung sein muessen, wie das zu
+   verteidigende Lebewesen.
+   Die Objekte sind in Form eines Arrays in der Property P_DEFENDERS
+   abgespeichert und koennen dort abgerufen werden. Natuerlich kann
+   man alte Objekte direkt dort loeschen, jedoch sollte man die
+   hierfuer bereitgestellte Funktionen RemoveDefender() verwenden.
+   Zum Hinzufuegen von Eintraegen im Array steht ebenfalls eine
+   Funktion bereit: AddDefender().
+
+
+SIEHE AUCH
+==========
+
+   AddDefender(), InformDefend(), DefendOther(),
+   P_DEFENDERS, /std/living/combat.c
+
 Last modified: Thu Jul 29 18:48:45 1999 by Patryn
diff --git a/doc/lfun/RemoveDetail b/doc/lfun/RemoveDetail
index f73af2a..48a0330 100644
--- a/doc/lfun/RemoveDetail
+++ b/doc/lfun/RemoveDetail
@@ -1,57 +1,80 @@
+
 RemoveDetail()
+**************
 
-FUNKTION:
-    void RemoveDetail(mixed *keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveDetail(mixed *keys);
 
-BESCHREIBUNG:
-    Entfernt die in <keys> angegebenen Details aus der Liste der
-    vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
-    saemtliche Details entfernt!
 
-BEISPIEL:
-    Ein kleines Beispiel, bei dem eine Oeffnung erscheint und wieder
-    verschwindet, je nachdem, ob man eine Luke oeffnet oder schliesst.
-      int oeffneLuke(string str);
-      int schliesseLuke(string str);
-      ...
-      AddCmd("oeffne", #'oeffneLuke);
-      AddCmd("schliesse", #'schliesseLuke);
-      ...
-      int oeffneLuke(string str) {
-        if(str!="luke" || GetDetail("oeffnung"))
-          return 0;
-        AddDetail("oeffnung","Du siehst eine kleine Oeffnung.\n");
-        return 1;
-      }
+DEFINIERT IN
+============
 
-      int schliesseLuke(string str) {
-        if(str!="luke" || !GetDetail("oeffnung"))
-          return 0;
-        RemoveDetail("oeffnung"); // Detail wieder entfernen
-        return 1;
-      }
+   /std/thing/description.c
 
-BEMERKUNGEN:
-    Da intern Details und SpecialDetails im gleichen Mapping verwaltet
-    werden, lassen sich mit dieser Funktion auch SpecialDetails
-    entfernen.
-    Die Funktion RemoveSpecialDetail() sollte also nicht genutzt werden!
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
-               P_TOUCH_DETAILS, P_SPECIAL_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+ARGUMENTE
+=========
 
-8. Juli 2011 Gloinson
\ No newline at end of file
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt die in <keys> angegebenen Details aus der Liste der
+   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
+   saemtliche Details entfernt!
+
+
+BEISPIEL
+========
+
+   Ein kleines Beispiel, bei dem eine Oeffnung erscheint und wieder
+   verschwindet, je nachdem, ob man eine Luke oeffnet oder schliesst.
+     int oeffneLuke(string str);
+     int schliesseLuke(string str);
+     ...
+     AddCmd("oeffne", #'oeffneLuke);
+     AddCmd("schliesse", #'schliesseLuke);
+     ...
+     int oeffneLuke(string str) {
+       if(str!="luke" || GetDetail("oeffnung"))
+         return 0;
+       AddDetail("oeffnung","Du siehst eine kleine Oeffnung.\n");
+       return 1;
+     }
+
+     int schliesseLuke(string str) {
+       if(str!="luke" || !GetDetail("oeffnung"))
+         return 0;
+       RemoveDetail("oeffnung"); // Detail wieder entfernen
+       return 1;
+     }
+
+
+BEMERKUNGEN
+===========
+
+   Da intern Details und SpecialDetails im gleichen Mapping verwaltet
+   werden, lassen sich mit dieser Funktion auch SpecialDetails
+   entfernen.
+   Die Funktion RemoveSpecialDetail() sollte also nicht genutzt werden!
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
+              P_TOUCH_DETAILS, P_SPECIAL_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
+
+8. Juli 2011 Gloinson
diff --git a/doc/lfun/RemoveExit b/doc/lfun/RemoveExit
index edc61f2..6854229 100644
--- a/doc/lfun/RemoveExit
+++ b/doc/lfun/RemoveExit
@@ -1,28 +1,49 @@
+
 RemoveExit()
-FUNKTION:
-     void RemoveExit(string|string* cmd);
+************
 
-DEFINIERT IN:
-     /std/room/exits
 
-ARGUMENTE:
-     string/string* cmd
-          Richtung(en), die entfernt werden sollen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die in cmd angegebenen Ausgaenge werden wieder entfernt.
+   void RemoveExit(string|string* cmd);
 
-     Ist cmd = 0, so werden alle Ausgaenge entfernt.
 
-BEMERKUNGEN:
-     Ausgaenge werden an der gleichen Stelle gespeichert:
-     - RemoveExit() greift auf die gleichen Daten wie RemoveSpecialExit()
-       zu, entfernt also auch spezielle Ausgaenge!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddExit(), AddSpecialExit(), GetExits()
-     RemoveSpecialExit(),
-     H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+   /std/room/exits
+
+
+ARGUMENTE
+=========
+
+   string/string* cmd
+        Richtung(en), die entfernt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Die in cmd angegebenen Ausgaenge werden wieder entfernt.
+
+   Ist cmd = 0, so werden alle Ausgaenge entfernt.
+
+
+BEMERKUNGEN
+===========
+
+   Ausgaenge werden an der gleichen Stelle gespeichert:
+   - RemoveExit() greift auf die gleichen Daten wie RemoveSpecialExit()
+     zu, entfernt also auch spezielle Ausgaenge!
+
+
+SIEHE AUCH
+==========
+
+   AddExit(), AddSpecialExit(), GetExits()
+   RemoveSpecialExit(),
+   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 31.01.2015, Zesstra
diff --git a/doc/lfun/RemoveExtraLook b/doc/lfun/RemoveExtraLook
index af929ea..0369992 100644
--- a/doc/lfun/RemoveExtraLook
+++ b/doc/lfun/RemoveExtraLook
@@ -1,39 +1,65 @@
+
+RemoveExtraLook()
+*****************
+
 RemoveExtraLook()
 
-int RemoveExtraLook(string look);
 
-DEFINIERT IN:
+int RemoveExtraLook(string look);
+=================================
+
+
+DEFINIERT IN
+============
+
    /std/living/description.c
 
-BESCHREIBUNG:
+
+BESCHREIBUNG
+============
+
    Der Extralook erscheint in der Langbeschreibung des Lebewesens.
    Eintraege koennen mit dieser Funktion (vorzeitig) wieder entfernt werden.
 
-ARGUMENTE:
-  - string look:
-    Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
-    AddExtraLook() registriert wurde.
 
-RUECKGABEWERTE:
-  > 0, falls der Eintrag erfolgreich entfernt wurde.
-  < 0 sonst.
-    -1: keinen (gueltigen) <key> uebergeben.
-    -2: kein Eintrag fuer <key> gefunden.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-  Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
-  Eintrages nicht ausgegeben.
+   - string look:
+     Schluesselwort, unter dem der Eintrag, den man entfernen moechte, von
+     AddExtraLook() registriert wurde.
 
-BEISPIELE:
-  # Extralook registrieren.
-  living->AddExtraLook("@WER1 wird von einer Horde Daemonen verfolgt.",
-                       "ennox_daemonenhordenverfolgerlook");
-  # Nun kann der Eintrag auch wieder entfernt werden:
-  living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
 
-SIEHE AUCH:
+RUECKGABEWERTE
+==============
+
+   > 0, falls der Eintrag erfolgreich entfernt wurde.
+   < 0 sonst.
+     -1: keinen (gueltigen) <key> uebergeben.
+     -2: kein Eintrag fuer <key> gefunden.
+
+
+BEMERKUNGEN
+===========
+
+   Beim Entfernen mit dieser Funktion wird die "Endemeldung" des entfernten
+   Eintrages nicht ausgegeben.
+
+
+BEISPIELE
+=========
+
+   # Extralook registrieren.
+   living->AddExtraLook("@WER1 wird von einer Horde Daemonen verfolgt.",
+                        "ennox_daemonenhordenverfolgerlook");
+   # Nun kann der Eintrag auch wieder entfernt werden:
+   living->RemoveExtraLook("ennox_daemonenhordenverfolgerlook");
+
+
+SIEHE AUCH
+==========
+
    AddExtraLook(),
    P_INTERNAL_EXTRA_LOOK
 
 14.05.2007, Zesstra
-
diff --git a/doc/lfun/RemoveFixedObject b/doc/lfun/RemoveFixedObject
index 7616b2b..22179de 100644
--- a/doc/lfun/RemoveFixedObject
+++ b/doc/lfun/RemoveFixedObject
@@ -1,40 +1,62 @@
+
 RemoveFixedObject()
+*******************
 
-FUNKTION:
-	void RemoveFixedObject(string filename);
 
-DEFINIERT IN:
-	/std/laden.c
+FUNKTION
+========
 
-ARGUMENTE:
-	str
-	  Dateiname des Objektes, welches nicht mehr dauerhaft im Laden sein
-	  soll.
+   void RemoveFixedObject(string filename);
 
-RUeCKGABEWERT:
-        keiner
 
-BESCHREIBUNG:
-	Objekte, die mittels der Funktion AddFixedObject() im Laden
-	eingebunden werden, sind dort staendig verfuegbar. Um diesen Zustand
-	wieder aufzuheben, kann man sie mittels dieser Funktion wieder
-	entfernen. Eventuell im Lager befindliche Objekte dieser Art werden
-	hierbei nicht zerstoert und koennen durchaus noch gekauft werden,
-	bis sie alle sind. Danach gibt es sie dort nicht mehr!
+DEFINIERT IN
+============
 
-BEISPIELE:
-	Im allen Laeden gibt es schon ein Objekt, welches dort
-	standardmaessig erhaeltlich ist. Folgende Zeile sorgt dafuer:
-	  AddFixedObject("/obj/boerse",80,({"boerse","geldboerse"}));
-	Wenn man das in seinem Laden nicht wuenscht, kann man die Geldboerse
-	mittels folgender Zeile wieder aus dem Laden loeschen:
-	  RemoveFixedObject("/obj/boerse");
-	Es ist nicht moeglich, keine oder mehrere Objekte anzugeben, um auf
-	diese Weise alle bzw. mehrere Objekte als nicht mehr staendig
-	verfuegbar zu markieren.
+   /std/laden.c
 
-SIEHE AUCH:
-	AddFixedObject(), SetStorageRoom(), /std/store.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   str
+     Dateiname des Objektes, welches nicht mehr dauerhaft im Laden sein
+     soll.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BESCHREIBUNG
+============
+
+   Objekte, die mittels der Funktion AddFixedObject() im Laden
+   eingebunden werden, sind dort staendig verfuegbar. Um diesen Zustand
+   wieder aufzuheben, kann man sie mittels dieser Funktion wieder
+   entfernen. Eventuell im Lager befindliche Objekte dieser Art werden
+   hierbei nicht zerstoert und koennen durchaus noch gekauft werden,
+   bis sie alle sind. Danach gibt es sie dort nicht mehr!
+
+
+BEISPIELE
+=========
+
+   Im allen Laeden gibt es schon ein Objekt, welches dort
+   standardmaessig erhaeltlich ist. Folgende Zeile sorgt dafuer:
+     AddFixedObject("/obj/boerse",80,({"boerse","geldboerse"}));
+   Wenn man das in seinem Laden nicht wuenscht, kann man die Geldboerse
+   mittels folgender Zeile wieder aus dem Laden loeschen:
+     RemoveFixedObject("/obj/boerse");
+   Es ist nicht moeglich, keine oder mehrere Objekte anzugeben, um auf
+   diese Weise alle bzw. mehrere Objekte als nicht mehr staendig
+   verfuegbar zu markieren.
+
+
+SIEHE AUCH
+==========
+
+   AddFixedObject(), SetStorageRoom(), /std/store.c
+
 Last modified: Thu Jun 18 14:19:19 1998 by Patryn
diff --git a/doc/lfun/RemoveFromMenu b/doc/lfun/RemoveFromMenu
index a8326af..fdcb916 100644
--- a/doc/lfun/RemoveFromMenu
+++ b/doc/lfun/RemoveFromMenu
@@ -1,32 +1,55 @@
+
 RemoveFromMenu()
+****************
 
-FUNKTION:
-     int RemoveFromMenu(mixed ids)
 
-DEFINIERT IN:
-     /std/pub.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ids - string oder string*
-	   String oder Array von Strings, mit denen sich die Speise bzw.
-           das Getraenk beim Bestellen ansprechen laesst.
+   int RemoveFromMenu(mixed ids)
 
-RUECKGABEWERT:
-     int - Anzahl entfernter Einzelmenueeintraege
 
-BESCHREIBUNG:
-     Mit dieser Methode kann man id-basiert Speisen und Getraenke
-     wieder von der Karte entfernen (wenn zB nur saisonbasiert
-     bestimmte Dinge angeboten werden sollen).
-     
-BEMERKUNGEN:
-     - sich zwischen zwei Speisen ueberschneidende IDs fuehren zu
-       undefiniertem Verhalten!
-     - bei Benutzung von RemoveFromMenu sollte man in Delay-Speisen oder
-       -Getraenken auf die Nutzung vom ident-Parameter in den
-       Serviernachrichten verzichten (es sei, man weiss was man tut)
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddToMenu(), AddFood(), AddDrink(), /sys/pub.h
+   /std/pub.c
+
+
+ARGUMENTE
+=========
+
+   ids - string oder string*
+         String oder Array von Strings, mit denen sich die Speise bzw.
+         das Getraenk beim Bestellen ansprechen laesst.
+
+
+RUECKGABEWERT
+=============
+
+   int - Anzahl entfernter Einzelmenueeintraege
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Methode kann man id-basiert Speisen und Getraenke
+   wieder von der Karte entfernen (wenn zB nur saisonbasiert
+   bestimmte Dinge angeboten werden sollen).
+
+
+BEMERKUNGEN
+===========
+
+   - sich zwischen zwei Speisen ueberschneidende IDs fuehren zu
+     undefiniertem Verhalten!
+   - bei Benutzung von RemoveFromMenu sollte man in Delay-Speisen oder
+     -Getraenken auf die Nutzung vom ident-Parameter in den
+     Serviernachrichten verzichten (es sei, man weiss was man tut)
+
+
+SIEHE AUCH
+==========
+
+   AddToMenu(), AddFood(), AddDrink(), /sys/pub.h
 
 15. Februar 2009 Gloinson
diff --git a/doc/lfun/RemoveFunc b/doc/lfun/RemoveFunc
index 054abe4..bf01ae9 100644
--- a/doc/lfun/RemoveFunc
+++ b/doc/lfun/RemoveFunc
@@ -1,87 +1,113 @@
+
 RemoveFunc()
+************
 
-FUNKTION:
-     int RemoveFunc(object ruest, int info, object user);
 
-DEFINIERT IN:
-     eigenen Objekten (fuer /std/clothing/wear)
+FUNKTION
+========
 
-ARGUMENTE:
-     ruest (object)
-          Die Ruestung/Kleidung, die ausgezogen werden soll.
-     info (int)
-          Bei (info&M_SILENT) wird keine Meldung ueber das Ausziehen
-          ausgegeben.
-          Bei (info&M_NOCHECK) wird die Kleidung ausgezogen, egal was diese
-          Funktion zurueckgibt. Dies tritt insbesondere dann auf, wenn der
-          Spieler, der die Ruestung traegt, stirbt und die Ruestung in
-          die Leiche bewegt wird.
-     user (object)
-          Das Lebewesen, welches die Ruestung/Kleidung gerade traegt und sie
-          ausziehen will.
+   int RemoveFunc(object ruest, int info, object user);
 
-BESCHREIBUNG:
-     Mit dieser Funktion kann man pruefen, ob sich das Kleidungsstueck bzw.
-     Ruestung <ruest> von this_player() ausziehen laesst oder nicht.
-     Kann die Ruestung ausgezogen werden, so muss ein Wert ungleich 0
-     zurueckgegeben werden.
-     
-     Diese Funktion meldet nur einen _Wunsch_ an. Dieser kann ignoriert
-     werden (z.B. bei bestimmten Bewegungen, Tod des Spielers etc.).
-     Unabhaengig vom Wert dieser Funktion kann das Ausziehen noch Scheitern
-     oder Erzwungen werden.
-     Wenn ihr sicher sein wollt, dass der Spieler ein Objekt angezogen hat,
-     benutzt bitte InformUnwear().
 
-RUeCKGABEWERT:
-     0, wenn sich die Ruestung nicht ausziehen laesst, ansonsten ungleich 0.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Verfluchte Ruestungen, die sich erst nach Entfernung des Fluches wieder
-     ausziehen lassen, sollte man besser mit P_CURSED realisieren (man spart
-     die RemoveFunc() ein).
-     Bitte nicht drauf verlassen, dass this_player() das ausziehende Lebewesen
-     ist.
-     Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
-     erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
-     Objekte zu aendern.
+   eigenen Objekten (fuer /std/clothing/wear)
 
-BEISPIELE:
-     Ein Umhang, den man nur mit guter Einstellung wieder ausziehen kann:
 
-     inherit "std/armour.c";
+ARGUMENTE
+=========
 
-     #include <properties.h>
-     #include <moving.h>
+   ruest (object)
+        Die Ruestung/Kleidung, die ausgezogen werden soll.
+   info (int)
+        Bei (info&M_SILENT) wird keine Meldung ueber das Ausziehen
+        ausgegeben.
+        Bei (info&M_NOCHECK) wird die Kleidung ausgezogen, egal was diese
+        Funktion zurueckgibt. Dies tritt insbesondere dann auf, wenn der
+        Spieler, der die Ruestung traegt, stirbt und die Ruestung in
+        die Leiche bewegt wird.
+   user (object)
+        Das Lebewesen, welches die Ruestung/Kleidung gerade traegt und sie
+        ausziehen will.
 
-     create()
-     {
-       ::create();
 
-       SetProp(P_ARMOUR_TYPE, AT_CLOAK);
-       /* zig weitere SetProp's, um den Umhang zu konfigurieren */
+BESCHREIBUNG
+============
 
-       /* RemoveFunc() ist im Umhang selbst zu finden */
-       SetProp(P_REMOVE_FUNC, this_object());
-     }
+   Mit dieser Funktion kann man pruefen, ob sich das Kleidungsstueck bzw.
+   Ruestung <ruest> von this_player() ausziehen laesst oder nicht.
+   Kann die Ruestung ausgezogen werden, so muss ein Wert ungleich 0
+   zurueckgegeben werden.
 
-     int RemoveFunc(object me, int info, object user)
-     {
-       if (user->QueryProp(P_ALIGN) >= 0 || (info&M_NOCHECK))
-         return 1;   /* gute Charaktere koennen den Umhang ausziehen */
 
-       /* Ansonsten geben wir evtl. einen entsprechenden Hinweis aus: */
-       if (!(info&M_SILENT))
-           write( "Der Umhang wird von Deiner Bosheit so sehr "
-                 +"angezogen, dass Du ihn\nnicht mehr ausziehen kannst!\n");
-       return 0;
-     }
 
-SIEHE AUCH:
-     P_WEAR_MSG, P_UNWEAR_MSG, P_WIELD_MSG, P_UNWIELD_MSG
-     DoUnwear(), DoWear(), InformWear(), InformUnwear()
-     /std/clothing/wear.c
+   Diese Funktion meldet nur einen _Wunsch_ an. Dieser kann ignoriert
+   werden (z.B. bei bestimmten Bewegungen, Tod des Spielers etc.).
+   Unabhaengig vom Wert dieser Funktion kann das Ausziehen noch Scheitern
+   oder Erzwungen werden.
+   Wenn ihr sicher sein wollt, dass der Spieler ein Objekt angezogen hat,
+   benutzt bitte InformUnwear().
 
-----------------------------------------------------------------------------
+
+RUeCKGABEWERT
+=============
+
+   0, wenn sich die Ruestung nicht ausziehen laesst, ansonsten ungleich 0.
+
+
+BEMERKUNGEN
+===========
+
+   Verfluchte Ruestungen, die sich erst nach Entfernung des Fluches wieder
+   ausziehen lassen, sollte man besser mit P_CURSED realisieren (man spart
+   die RemoveFunc() ein).
+   Bitte nicht drauf verlassen, dass this_player() das ausziehende Lebewesen
+   ist.
+   Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
+   erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
+   Objekte zu aendern.
+
+
+BEISPIELE
+=========
+
+   Ein Umhang, den man nur mit guter Einstellung wieder ausziehen kann:
+
+   inherit "std/armour.c";
+
+   #include <properties.h>
+   #include <moving.h>
+
+   create()
+   {
+     ::create();
+
+     SetProp(P_ARMOUR_TYPE, AT_CLOAK);
+     /* zig weitere SetProp's, um den Umhang zu konfigurieren */
+
+     /* RemoveFunc() ist im Umhang selbst zu finden */
+     SetProp(P_REMOVE_FUNC, this_object());
+   }
+
+   int RemoveFunc(object me, int info, object user)
+   {
+     if (user->QueryProp(P_ALIGN) >= 0 || (info&M_NOCHECK))
+       return 1;   /* gute Charaktere koennen den Umhang ausziehen */
+
+     /* Ansonsten geben wir evtl. einen entsprechenden Hinweis aus: */
+     if (!(info&M_SILENT))
+         write( "Der Umhang wird von Deiner Bosheit so sehr "
+               +"angezogen, dass Du ihn\nnicht mehr ausziehen kannst!\n");
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   P_WEAR_MSG, P_UNWEAR_MSG, P_WIELD_MSG, P_UNWIELD_MSG
+   DoUnwear(), DoWear(), InformWear(), InformUnwear()
+   /std/clothing/wear.c
+
 02.07.2013, Zesstra
-
diff --git a/doc/lfun/RemoveId b/doc/lfun/RemoveId
index 85e7099..efd709d 100644
--- a/doc/lfun/RemoveId
+++ b/doc/lfun/RemoveId
@@ -1,26 +1,44 @@
+
 RemoveId()
+**********
 
-FUNKTION:
-     void RemoveId(string|string* ids);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ids
-          String oder Array von Strings mit den Bezeichnungen, die aus der
-          Liste der IDs des Objektes entfernt werden sollen.
+   void RemoveId(string|string* ids);
 
-BESCHREIBUNG:
-     Wenn ein Objekt sich nicht mehr mit gewissen Bezeichnern ansprechen
-     lassen soll, kann man diese mit dieser Funktion entfernen.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddId(), RemoveAdjective(), /std/thing/description.c
+   /std/thing/description.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   ids
+        String oder Array von Strings mit den Bezeichnungen, die aus der
+        Liste der IDs des Objektes entfernt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Objekt sich nicht mehr mit gewissen Bezeichnern ansprechen
+   lassen soll, kann man diese mit dieser Funktion entfernen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   AddId(), RemoveAdjective(), /std/thing/description.c
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveInfo b/doc/lfun/RemoveInfo
index 5ced62c..75485c6 100644
--- a/doc/lfun/RemoveInfo
+++ b/doc/lfun/RemoveInfo
@@ -1,24 +1,45 @@
+
 RemoveInfo()
-FUNKTION:
-     void RemoveInfo(string key)
+************
 
-DEFINIERT IN:
-     /std/npc/info.c
 
-ARGUMENTE:
-     key	zu loeschender Schluessel
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Loescht die Antwort zum entsprechenden Frageschluessel.
+   void RemoveInfo(string key)
 
-BEISPIEL:
-     // erstellen und loeschen
-     AddInfo("gold","sagt: Ich habe keines.\n");
-     RemoveInfo("gold");
 
-SIEHE AUCH:
-     AddInfo(L), AddSpecialInfo(L)
-     P_PRE_INFO, P_DEFAULT_INFO
-     /std/npc/info.c
+DEFINIERT IN
+============
+
+   /std/npc/info.c
+
+
+ARGUMENTE
+=========
+
+   key        zu loeschender Schluessel
+
+
+BESCHREIBUNG
+============
+
+   Loescht die Antwort zum entsprechenden Frageschluessel.
+
+
+BEISPIEL
+========
+
+   // erstellen und loeschen
+   AddInfo("gold","sagt: Ich habe keines.\n");
+   RemoveInfo("gold");
+
+
+SIEHE AUCH
+==========
+
+   AddInfo(L), AddSpecialInfo(L)
+   P_PRE_INFO, P_DEFAULT_INFO
+   /std/npc/info.c
 
 17.Aug.2003 Gloinson
diff --git a/doc/lfun/RemoveItem b/doc/lfun/RemoveItem
index aa454f7..a21cdc2 100644
--- a/doc/lfun/RemoveItem
+++ b/doc/lfun/RemoveItem
@@ -1,41 +1,64 @@
+
 RemoveItem()
+************
 
-FUNKTION:
-	void RemoveItem(mixed file);
 
-DEFINIERT IN:
-	/std/room/items.c
+FUNKTION
+========
 
-ARGUMENTE:
-	file
-	     String oder Array von Strings mit dem Namen des zu entfernenden
-	     Objekts.
+   void RemoveItem(mixed file);
 
-BESCHREIBUNG:
-	Das mit AddItem(file) dem Raum hinzugefuegte Objekt wird wieder aus
-	der Liste der Objekte entfernt.
-	Wurde bei AddItem() ein Array von Dateinamen uebergeben, so muss das
-	selbe Array auch bei RemoveItem() uebergeben werden!
-	Falls das Objekt, das durch den AddItem()-Aufruf erzeugt wurde, sich
-	noch im Raum befindet, wird es durch den RemoveItem()-Aufruf zerstoert.
 
-RUECKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-	Ein muellschluckerfreier Laden laesst sich wie folgt erzeugen:
+   /std/room/items.c
 
-	inherit "/std/laden";
-	#include <properties.h>
 
-	create()
-	{
-	  ::create();  // Hier wird u.a. der Muellschlucker erzeugt
+ARGUMENTE
+=========
 
-	  RemoveItem("/obj/entsorg"); // und weg damit!
+   file
+        String oder Array von Strings mit dem Namen des zu entfernenden
+        Objekts.
 
-	  SetProp(...);  // und die normale Beschreibung...
-	}
 
-SIEHE AUCH:
-	AddItem(), /std/room/items.c
+BESCHREIBUNG
+============
+
+   Das mit AddItem(file) dem Raum hinzugefuegte Objekt wird wieder aus
+   der Liste der Objekte entfernt.
+   Wurde bei AddItem() ein Array von Dateinamen uebergeben, so muss das
+   selbe Array auch bei RemoveItem() uebergeben werden!
+   Falls das Objekt, das durch den AddItem()-Aufruf erzeugt wurde, sich
+   noch im Raum befindet, wird es durch den RemoveItem()-Aufruf zerstoert.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Ein muellschluckerfreier Laden laesst sich wie folgt erzeugen:
+
+   inherit "/std/laden";
+   #include <properties.h>
+
+   create()
+   {
+     ::create();  // Hier wird u.a. der Muellschlucker erzeugt
+
+     RemoveItem("/obj/entsorg"); // und weg damit!
+
+     SetProp(...);  // und die normale Beschreibung...
+   }
+
+
+SIEHE AUCH
+==========
+
+   AddItem(), /std/room/items.c
diff --git a/doc/lfun/RemoveKnownPotion b/doc/lfun/RemoveKnownPotion
index 5b1418c..f7af610 100644
--- a/doc/lfun/RemoveKnownPotion
+++ b/doc/lfun/RemoveKnownPotion
@@ -1,25 +1,45 @@
+
 RemoveKnownPotion()
+*******************
 
-FUNKTION:
-     int RemoveKnownPotion(int nr)
 
-DEFINIERT IN:
-     /std/player/potion.c
+FUNKTION
+========
 
-ARGUMENTE:
-     int nr       Nummer eines ZTs
+   int RemoveKnownPotion(int nr)
 
-BESCHREIBUNG:
-     Entfernt einen bekannten ZT aus einen Spieler. Nur vom Orakel rufbar.
 
-RUeCKGABEWERT:
-     1  Erfolg
-     -1 fehlende Berechtigung
-     -2 Nummer nicht eingetragen
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
-     Verwandt:  FindPotion(), AddKnownPotion(), InList()
-     Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
+   /std/player/potion.c
+
+
+ARGUMENTE
+=========
+
+   int nr       Nummer eines ZTs
+
+
+BESCHREIBUNG
+============
+
+   Entfernt einen bekannten ZT aus einen Spieler. Nur vom Orakel rufbar.
+
+
+RUeCKGABEWERT
+=============
+
+   1  Erfolg
+   -1 fehlende Berechtigung
+   -2 Nummer nicht eingetragen
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges: zaubertraenke, /secure/potionmaster.c, /room/orakel.c
+   Verwandt:  FindPotion(), AddKnownPotion(), InList()
+   Props:     P_POTIONROOMS, P_KNOWN_POTIONROOMS
 
 6.Feb 2016 Gloinson
diff --git a/doc/lfun/RemovePluralId b/doc/lfun/RemovePluralId
index 0960e02..23f394a 100644
--- a/doc/lfun/RemovePluralId
+++ b/doc/lfun/RemovePluralId
@@ -1,28 +1,49 @@
+
 RemovePluralId()
+****************
 
-FUNKTION:
-     void RemovePluralId(mixed id);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     id
-          Identfikationsstring oder Array von Strings
+   void RemovePluralId(mixed id);
 
-BESCHREIBUNG:
-     Es werden ein oder mehrere Bezeichner entfernt, mit denen sich 
-     mehrere Einheiten der Menge ansprechen lassen.
 
-RUECKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     siehe /items/money.c
+   /std/unit.c
 
-SIEHE AUCH:
-     RemoveSingularId(), AddPluralId(), AddId(), id(), /std/unit.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   id
+        Identfikationsstring oder Array von Strings
+
+
+BESCHREIBUNG
+============
+
+   Es werden ein oder mehrere Bezeichner entfernt, mit denen sich
+   mehrere Einheiten der Menge ansprechen lassen.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   siehe /items/money.c
+
+
+SIEHE AUCH
+==========
+
+   RemoveSingularId(), AddPluralId(), AddId(), id(), /std/unit.c
+
 Last modified: Mon Jul 14 11:30:00 1997 by Silvana
-
diff --git a/doc/lfun/RemovePursuer b/doc/lfun/RemovePursuer
index 8ba2358..cf8f0dc 100644
--- a/doc/lfun/RemovePursuer
+++ b/doc/lfun/RemovePursuer
@@ -1,26 +1,53 @@
+
+RemovePursuer()
+***************
+
+
 RemoveRursuer()
+===============
 
-FUNKTION:
-  void RemovePursuer(object pursuer)
 
-ARGUMENTE:
-  pursuer: Objekt, das aus der Verfolgerliste des Objektes, in dem
-           RemovePursuer aufgerufen wurde, ausgetragen werden soll.
+FUNKTION
+========
 
-FUNKTION:
-  Durch den Aufruf von RemovePursuer in einem Objekt, welches living() ist,
-  wird das Object, welches als Argument uebergeben wurde aus der Liste
-  der Verfolger ausgetragen.
+   void RemovePursuer(object pursuer)
 
-RUECKGABEWERT:
-  keiner
 
-BEMERKUNG:
-  keine
+ARGUMENTE
+=========
 
-BEISPIELE:
-  find_player("jof")->RemovePursuer(find_player("kirk"))
-  Danach wird Jof nicht mehr von Kirk verfolgt.
+   pursuer: Objekt, das aus der Verfolgerliste des Objektes, in dem
+            RemovePursuer aufgerufen wurde, ausgetragen werden soll.
 
-SIEHE AUCH:
-  "AddPursuer", "PreventFollow"
+
+FUNKTION
+========
+
+   Durch den Aufruf von RemovePursuer in einem Objekt, welches living() ist,
+   wird das Object, welches als Argument uebergeben wurde aus der Liste
+   der Verfolger ausgetragen.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNG
+=========
+
+   keine
+
+
+BEISPIELE
+=========
+
+   find_player("jof")->RemovePursuer(find_player("kirk"))
+   Danach wird Jof nicht mehr von Kirk verfolgt.
+
+
+SIEHE AUCH
+==========
+
+   "AddPursuer", "PreventFollow"
diff --git a/doc/lfun/RemoveReadDetail b/doc/lfun/RemoveReadDetail
index f357954..495dfe3 100644
--- a/doc/lfun/RemoveReadDetail
+++ b/doc/lfun/RemoveReadDetail
@@ -1,31 +1,50 @@
+
 RemoveReadDetail()
+******************
 
-FUNKTION:
-    void RemoveReadDetail(string|string* keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-         String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveReadDetail(string|string* keys);
 
-BESCHREIBUNG:
-    Entfernt die in keys angegebenen Details aus der Liste der vorhandenen
-    lesbaren Details.
 
-BEMERKUNGEN:
-    Uebergibt man fuer keys eine 0, so werden saemtliche lesbaren Details
-    entfernt!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+   /std/thing/description.c
+
+
+ARGUMENTE
+=========
+
+   keys
+        String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt die in keys angegebenen Details aus der Liste der vorhandenen
+   lesbaren Details.
+
+
+BEMERKUNGEN
+===========
+
+   Uebergibt man fuer keys eine 0, so werden saemtliche lesbaren Details
+   entfernt!
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveResistanceModifier b/doc/lfun/RemoveResistanceModifier
index 0e630fb..ca14c74 100644
--- a/doc/lfun/RemoveResistanceModifier
+++ b/doc/lfun/RemoveResistanceModifier
@@ -1,37 +1,57 @@
+
 RemoveResistanceModifier()
+**************************
 
-FUNKTION:
-     varargs void RemoveResistanceModifier(string add);
 
-DEFINIERT IN:
-     /std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     string add:
-      Ein eventueller Identifikator fuer einen gesetzten Modifikator.
+   varargs void RemoveResistanceModifier(string add);
 
-BESCHREIBUNG:
-     Die von einem Objekt im Zielobjekt gesetzte Resistenz wird geloescht,
-     der Schluessel add wird dazu benutzt, eine bestimmte Resistenz zu
-     loeschen (so kann ein setzendes Objekt mehrere verschiedene Re-
-     sistenzen setzen und selektiv loeschen).
 
-BEISPIELE:
-     // unser Oel aus AddResistanceModifier() verbrennt endgueltig
-     varargs void trigger_sensitive_attack() {
-      ...
-      if(environment() && living(environment())) {
-       environment()->RemoveResistanceModifier("oel");
-       tell_object(environment(),"Das Oel verbrennt endgueltig.\n");
-      }
-      remove();
-     }
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Modifikatoren:	AddResistanceModifier, P_RESISTANCE_MODIFIER
-     simple Resistenz:	P_RESISTANCE, P_VULNERABILITY
-     Hauptmapping:	P_RESISTANCE_STRENGTHS
-     Berechnung:	CheckResistance(), UpdateResistanceStrengths()
-     anderes:		balance, /std/armour/combat.c, /std/living/combat.c
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   string add:
+    Ein eventueller Identifikator fuer einen gesetzten Modifikator.
+
+
+BESCHREIBUNG
+============
+
+   Die von einem Objekt im Zielobjekt gesetzte Resistenz wird geloescht,
+   der Schluessel add wird dazu benutzt, eine bestimmte Resistenz zu
+   loeschen (so kann ein setzendes Objekt mehrere verschiedene Re-
+   sistenzen setzen und selektiv loeschen).
+
+
+BEISPIELE
+=========
+
+   // unser Oel aus AddResistanceModifier() verbrennt endgueltig
+   varargs void trigger_sensitive_attack() {
+    ...
+    if(environment() && living(environment())) {
+     environment()->RemoveResistanceModifier("oel");
+     tell_object(environment(),"Das Oel verbrennt endgueltig.\n");
+    }
+    remove();
+   }
+
+
+SIEHE AUCH
+==========
+
+   Modifikatoren:     AddResistanceModifier, P_RESISTANCE_MODIFIER
+   simple Resistenz:  P_RESISTANCE, P_VULNERABILITY
+   Hauptmapping:      P_RESISTANCE_STRENGTHS
+   Berechnung:        CheckResistance(), UpdateResistanceStrengths()
+   anderes:           balance, /std/armour/combat.c, /std/living/combat.c
 
 29.Apr 2002, Gloinson@MG
diff --git a/doc/lfun/RemoveRoute b/doc/lfun/RemoveRoute
index e301719..61fb082 100644
--- a/doc/lfun/RemoveRoute
+++ b/doc/lfun/RemoveRoute
@@ -1,23 +1,42 @@
+
 RemoveRoute()
+*************
 
-FUNKTION:
-     void RemoveRoute();
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   void RemoveRoute();
 
-BESCHREIBUNG:
-     Der Transporter wird angehalten und der gesamte Fahrplan wird
-     geloescht. Damit lassen sich zum Beispiel variable Routen konstruieren.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddRoute(), AddMsg(), AddFun(), /std/transport.c
+   /std/transport.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Der Transporter wird angehalten und der gesamte Fahrplan wird
+   geloescht. Damit lassen sich zum Beispiel variable Routen konstruieren.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   AddRoute(), AddMsg(), AddFun(), /std/transport.c
+
 Last modified: Wed May 8 10:24:26 1996 by Wargon
diff --git a/doc/lfun/RemoveSensitiveObject b/doc/lfun/RemoveSensitiveObject
index 5f6e0dc..0678e70 100644
--- a/doc/lfun/RemoveSensitiveObject
+++ b/doc/lfun/RemoveSensitiveObject
@@ -1,56 +1,79 @@
+
 RemoveSensitiveObject()
-FUNKTION:
-     void RemoveSensitiveObject(object ob)
+***********************
 
-DEFINIERT IN:
-     /std/container/inventory.c
-     generalizes /std/living/inventory.c
 
-ARGUMENTE:
-     ob - zu entfernendes Objekt
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Entfernt ob aus den Benachrichtigungslisten des Containers.
-     Wird von thing/moving.c im alten Environment gerufen, wenn
-     P_SENSITIVE gesetzt ist.
-     Ruft dazu RemoveSensitiveObjectFromList().
+   void RemoveSensitiveObject(object ob)
 
-BEMERKUNGEN:
-     Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
-     dann muss man auch RemoveSensitiveObject im Environment
-     auch selbst rufen!
 
-BEISPIEL:
-     // Fackel (inheriting lightsource)
-     void create() {
-     ...
-       SetProp(P_SENSITIVE,
-        ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
-     ...
-     }
+DEFINIERT IN
+============
 
-     // wenn die Fackel geloescht wird, verliert sie ihre aktive
-     // Eigenschaft und muss das dem environment() mitteilen
-     static int extinguish(string str) {
-      int i;
-      i=::extinguish(str);
-      if(i && QueryProp(P_LIGHT)<=0) {
-       SetProp(P_SENSITIVE,0);
-       if(environment())
-        environment()->RemoveSensitiveObject(this_object());
-      }
-      return i;
-     }
+   /std/container/inventory.c
+   generalizes /std/living/inventory.c
 
-     - empfindliche Objekte wie Eiszapfen koennen jetzt wieder gefahrlos
-       in das selbe environment() bewegt werden
 
-SIEHE AUCH:
-     P_SENSITIVE
-     InsertSensitiveObject
-     insert_sensitive_inv_trigger, insert_sensitive_inv
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
-     CheckSensitiveAttack
+ARGUMENTE
+=========
+
+   ob - zu entfernendes Objekt
+
+
+BESCHREIBUNG
+============
+
+   Entfernt ob aus den Benachrichtigungslisten des Containers.
+   Wird von thing/moving.c im alten Environment gerufen, wenn
+   P_SENSITIVE gesetzt ist.
+   Ruft dazu RemoveSensitiveObjectFromList().
+
+
+BEMERKUNGEN
+===========
+
+   Setzt man P_SENSITIVE nicht als Default sondern situationsabhaengig,
+   dann muss man auch RemoveSensitiveObject im Environment
+   auch selbst rufen!
+
+
+BEISPIEL
+========
+
+   // Fackel (inheriting lightsource)
+   void create() {
+   ...
+     SetProp(P_SENSITIVE,
+      ({({SENSITIVE_INVENTORY_TRIGGER,DT_FIRE,120})}));
+   ...
+   }
+
+   // wenn die Fackel geloescht wird, verliert sie ihre aktive
+   // Eigenschaft und muss das dem environment() mitteilen
+   static int extinguish(string str) {
+    int i;
+    i=::extinguish(str);
+    if(i && QueryProp(P_LIGHT)<=0) {
+     SetProp(P_SENSITIVE,0);
+     if(environment())
+      environment()->RemoveSensitiveObject(this_object());
+    }
+    return i;
+   }
+
+   - empfindliche Objekte wie Eiszapfen koennen jetzt wieder gefahrlos
+     in das selbe environment() bewegt werden
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   InsertSensitiveObject
+   insert_sensitive_inv_trigger, insert_sensitive_inv
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY, P_SENSITIVE_INVENTORY_TRIGGER
+   CheckSensitiveAttack
 
 25.Apr.2001, Gloinson@MG
-
diff --git a/doc/lfun/RemoveSingularId b/doc/lfun/RemoveSingularId
index 016999c..fcf0c3d 100644
--- a/doc/lfun/RemoveSingularId
+++ b/doc/lfun/RemoveSingularId
@@ -1,28 +1,49 @@
+
 RemoveSingularId()
+******************
 
-FUNKTION:
-     void RemoveSingularId(mixed id);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     id
-          Identifikationsstring oder Array von Strings
+   void RemoveSingularId(mixed id);
 
-BESCHREIBUNG:
-     Es werden ein oder mehrere Bezeichner entfernt, mit denen sich eine
-     einzelne Einheit ansprechen laesst.
 
-RUECKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     siehe /items/money.c
+   /std/unit.c
 
-SIEHE AUCH:
-     AddSingularId(), RemovePluralId(), AddId(), id(), /std/unit.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   id
+        Identifikationsstring oder Array von Strings
+
+
+BESCHREIBUNG
+============
+
+   Es werden ein oder mehrere Bezeichner entfernt, mit denen sich eine
+   einzelne Einheit ansprechen laesst.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   siehe /items/money.c
+
+
+SIEHE AUCH
+==========
+
+   AddSingularId(), RemovePluralId(), AddId(), id(), /std/unit.c
+
 Last modified: Mon Jul 14 11:31:00 1997 by Silvana
-
diff --git a/doc/lfun/RemoveSkillAttributeModifier b/doc/lfun/RemoveSkillAttributeModifier
index 71dfd10..5fa69b2 100644
--- a/doc/lfun/RemoveSkillAttributeModifier
+++ b/doc/lfun/RemoveSkillAttributeModifier
@@ -1,59 +1,83 @@
+
 RemoveSkillAttributeModifier()
-FUNKTION:
-    public int RemoveSkillAttributeModifier(object caster, string atrname)
+******************************
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
 
-ARGUMENTE:
-    <atrname>   string
-                Name des Skill-Attributes, von dem der Modifikator geloescht
-                werden soll.
-                (Definiert in /sys/living/skill_attributes.h)
+FUNKTION
+========
 
-    <caster>    object
-                Objekt, dessen Modifikator wieder entfernt werden soll.
+   public int RemoveSkillAttributeModifier(object caster, string atrname)
 
-BESCHREIBUNG:
-    Entfernt den Modifikator, den Object <caster> gesetzt hat, wieder. Dies
-    ist nur notwendig, wenn der Effekt vor Ablauf der Gueltigkeit des
-    Modifikators aufgehoben werden soll.
 
-RUECKGABEWERT:
-    SA_MOD_REMOVED         wenn der Modifikator geloescht wurde
-    SA_MOD_NOT_FOUND       wenn der Modifikator nicht gefunden wurde
-    Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt es
-    sich, auf == SA_MOD_REMOVED zu pruefen.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    // eine Waffe setzt im InformWield() einen Bonus auf SA_DAMAGE fuer 10min
-    protected void InformWield(object pl, int silent) {
-      if (objectp(pl)) {
-        if (pl->ModifySkillAttribute(SA_DAMAGE, 20, 600) == SA_MOD_OK)
-          // Erfolgsmeldung an Spieler
-        else
-          // Misserfolgsmeldung an Spieler.
-      }
-    }
+   /std/living/skill_attributes.c
 
-    // wenn der Spieler die Waffe vor Ablauf der 600s wegstecken will, muss
-    // der Bonus natuerlich auch wieder raus
-    protected void InformUnwield(object pl, int silent) {
-      if (objectp(pl))
-        pl->RemoveSkillAttributeModifier(this_object(), SA_DAMAGE);
-        // falls kein solcher Mod mehr gesetzt war, liefert RSAM()
-        // SA_MOD_NOT_FOUND zurueck. Auswertung des Rueckgabewertes ist
-        // vernachlaessigt.
-    }
-    
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell, UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
+
+ARGUMENTE
+=========
+
+   <atrname>   string
+               Name des Skill-Attributes, von dem der Modifikator geloescht
+               werden soll.
+               (Definiert in /sys/living/skill_attributes.h)
+
+   <caster>    object
+               Objekt, dessen Modifikator wieder entfernt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt den Modifikator, den Object <caster> gesetzt hat, wieder. Dies
+   ist nur notwendig, wenn der Effekt vor Ablauf der Gueltigkeit des
+   Modifikators aufgehoben werden soll.
+
+
+RUECKGABEWERT
+=============
+
+   SA_MOD_REMOVED         wenn der Modifikator geloescht wurde
+   SA_MOD_NOT_FOUND       wenn der Modifikator nicht gefunden wurde
+   Wenn man nur wissen will, ob die Operation erfolgreich war, empfiehlt es
+   sich, auf == SA_MOD_REMOVED zu pruefen.
+
+
+BEISPIELE
+=========
+
+   // eine Waffe setzt im InformWield() einen Bonus auf SA_DAMAGE fuer 10min
+   protected void InformWield(object pl, int silent) {
+     if (objectp(pl)) {
+       if (pl->ModifySkillAttribute(SA_DAMAGE, 20, 600) == SA_MOD_OK)
+         // Erfolgsmeldung an Spieler
+       else
+         // Misserfolgsmeldung an Spieler.
+     }
+   }
+
+   // wenn der Spieler die Waffe vor Ablauf der 600s wegstecken will, muss
+   // der Bonus natuerlich auch wieder raus
+   protected void InformUnwield(object pl, int silent) {
+     if (objectp(pl))
+       pl->RemoveSkillAttributeModifier(this_object(), SA_DAMAGE);
+       // falls kein solcher Mod mehr gesetzt war, liefert RSAM()
+       // SA_MOD_NOT_FOUND zurueck. Auswertung des Rueckgabewertes ist
+       // vernachlaessigt.
+   }
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell, UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
 
 13.08.2008, Zesstra
diff --git a/doc/lfun/RemoveSmells b/doc/lfun/RemoveSmells
index cc72207..b56fe27 100644
--- a/doc/lfun/RemoveSmells
+++ b/doc/lfun/RemoveSmells
@@ -1,38 +1,57 @@
+
 RemoveSmells()
+**************
 
-FUNKTION:
-    void RemoveSmells(string|string* keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveSmells(string|string* keys);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
-    nur koennen hiermit Gerueche entfernt werden:
-    Entfernt die in <keys> angegebenen Details aus der Liste der
-    vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
-    saemtliche Details entfernt!
 
-BEISPIEL:
-    Zuerst erzeugen wir ein kleines Detail, mit dem wir am Rauch riechen
-    koennen. Das Feuer brennt langsam ab und das Detail wird wieder
-    entfernt:
+DEFINIERT IN
+============
 
-      AddSmells("rauch",* H U S T *\n");
-      call_out(#'RemoveSmells, 100, "rauch");
+   /std/thing/description.c
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
+   nur koennen hiermit Gerueche entfernt werden:
+   Entfernt die in <keys> angegebenen Details aus der Liste der
+   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
+   saemtliche Details entfernt!
+
+
+BEISPIEL
+========
+
+   Zuerst erzeugen wir ein kleines Detail, mit dem wir am Rauch riechen
+   koennen. Das Feuer brennt langsam ab und das Detail wird wieder
+   entfernt:
+
+     AddSmells("rauch",* H U S T *\n");
+     call_out(#'RemoveSmells, 100, "rauch");
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveSounds b/doc/lfun/RemoveSounds
index 50d900a..4ef4263 100644
--- a/doc/lfun/RemoveSounds
+++ b/doc/lfun/RemoveSounds
@@ -1,46 +1,66 @@
+
 RemoveSounds()
+**************
 
-FUNKTION:
-    void RemoveSounds(string|string* keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveSounds(string|string* keys);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,   
-    nur koennen hiermit Gerauesche entfernt werden:
-    Entfernt die in <keys> angegebenen Details aus der Liste der
-    vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
-    saemtliche Details entfernt!
 
-BEISPIEL:
-    Wir lassen etwas Musik spielen und wenn wir den Plattenspieler
-    ausmachen, dann endet sie und man hoert auch nichts mehr:
+DEFINIERT IN
+============
 
-      int ausmachen(string str);
-      ...
-      AddSounds(({"musik","hip-hop"}) ,"Klingt nach Hip-Hop...\n");
-      AddCmd("mach|mache&plattenspieler&aus", #'ausmachen,
-             "Was willst du (aus)machen?|Willst du den ausmachen?^");
-      ...
-      int ausmachen(string str) {
-        if(!GetDetail("musik", 0, SENSE_SOUND)) // existiert Musikdetail ?
-          return("Der Plattenspieler laeuft doch gar nicht!\n", 1);
-        RemoveSounds(0);
-         return 1;
-      }
+   /std/thing/description.c
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
+   nur koennen hiermit Gerauesche entfernt werden:
+   Entfernt die in <keys> angegebenen Details aus der Liste der
+   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
+   saemtliche Details entfernt!
+
+
+BEISPIEL
+========
+
+   Wir lassen etwas Musik spielen und wenn wir den Plattenspieler
+   ausmachen, dann endet sie und man hoert auch nichts mehr:
+
+     int ausmachen(string str);
+     ...
+     AddSounds(({"musik","hip-hop"}) ,"Klingt nach Hip-Hop...\n");
+     AddCmd("mach|mache&plattenspieler&aus", #'ausmachen,
+            "Was willst du (aus)machen?|Willst du den ausmachen?^");
+     ...
+     int ausmachen(string str) {
+       if(!GetDetail("musik", 0, SENSE_SOUND)) // existiert Musikdetail ?
+         return("Der Plattenspieler laeuft doch gar nicht!\n", 1);
+       RemoveSounds(0);
+        return 1;
+     }
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 8. Juli 2011 Gloinson
diff --git a/doc/lfun/RemoveSpecialDetail b/doc/lfun/RemoveSpecialDetail
index ebec4cb..96a7a39 100644
--- a/doc/lfun/RemoveSpecialDetail
+++ b/doc/lfun/RemoveSpecialDetail
@@ -1,37 +1,60 @@
-VERALTET: RemoveSpecialDetail()
 
-FUNKTION:
-    void RemoveSpecialDetail(string|string* keys);
+RemoveSpecialDetail()
+*********************
 
-DEFINIERT IN:
-    /std/thing/description.c
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+VERALTET RemoveSpecialDetail()
+==============================
 
-BESCHREIBUNG:
-    Entfernt die in keys angegebenen Details aus der Liste der
-    vorhandenen SpecialDetails.
 
-    VERALTET: Bitte RemoveDetail() benutzen.
+FUNKTION
+========
 
-BEMERKUNGEN:
-    Uebergibt man fuer keys eine 0, so werden saemtliche SpecialDetails
-    entfernt!
-    Da intern Details und SpecialDetails im gleichen Mapping verwaltet
-    werden, lassen sich mit dieser Funktion auch Details entfernen.
-    Man sollte diese Funktion deshalb nicht mehr verwenden, siehe
-    AddDetail mit Closures.
+   void RemoveSpecialDetail(string|string* keys);
 
-SIEHE AUCH:
-    Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds(), RemoveTouchDetail()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+DEFINIERT IN
+============
+
+   /std/thing/description.c
+
+
+ARGUMENTE
+=========
+
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt die in keys angegebenen Details aus der Liste der
+   vorhandenen SpecialDetails.
+
+   VERALTET: Bitte RemoveDetail() benutzen.
+
+
+BEMERKUNGEN
+===========
+
+   Uebergibt man fuer keys eine 0, so werden saemtliche SpecialDetails
+   entfernt!
+   Da intern Details und SpecialDetails im gleichen Mapping verwaltet
+   werden, lassen sich mit dieser Funktion auch Details entfernen.
+   Man sollte diese Funktion deshalb nicht mehr verwenden, siehe
+   AddDetail mit Closures.
+
+
+SIEHE AUCH
+==========
+
+   Setzen :   AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds(), RemoveTouchDetail()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveSpecialExit b/doc/lfun/RemoveSpecialExit
index 69a18e4..ee2e8e8 100644
--- a/doc/lfun/RemoveSpecialExit
+++ b/doc/lfun/RemoveSpecialExit
@@ -1,29 +1,49 @@
+
 RemoveSpecialExit()
-FUNKTION:
-     void RemoveSpecialExit(string|string* cmd);
+*******************
 
-DEFINIERT IN:
-     /std/room/exits
 
-ARGUMENTE:
-     string/string* cmd
-          Richtung(en), die entfernt werden sollen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die in cmd angegebenen Ausgaenge werden wieder entfernt.
+   void RemoveSpecialExit(string|string* cmd);
 
-     Ist cmd = 0, so werden alle Ausgaenge entfernt.
 
-BEMERKUNGEN:
-     Ausgaenge werden an der gleichen Stelle gespeichert:
-     - RemoveSpecialExit() greift auf die gleichen Daten wie RemoveExit()
-       zu, entfernt also auch normale Ausgaenge!
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddExit(), AddSpecialExit(), AddGuardedExit(), GetExits()
-     RemoveExit(),
-     P_EXITS, P_HIDE_EXITS, /std/room/exits.c
-     ausgaenge
+   /std/room/exits
+
+
+ARGUMENTE
+=========
+
+   string/string* cmd
+        Richtung(en), die entfernt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Die in cmd angegebenen Ausgaenge werden wieder entfernt.
+
+   Ist cmd = 0, so werden alle Ausgaenge entfernt.
+
+
+BEMERKUNGEN
+===========
+
+   Ausgaenge werden an der gleichen Stelle gespeichert:
+   - RemoveSpecialExit() greift auf die gleichen Daten wie RemoveExit()
+     zu, entfernt also auch normale Ausgaenge!
+
+
+SIEHE AUCH
+==========
+
+   AddExit(), AddSpecialExit(), AddGuardedExit(), GetExits()
+   RemoveExit(),
+   P_EXITS, P_HIDE_EXITS, /std/room/exits.c
+   ausgaenge
 
 31.01.2015, Zesstra
-
diff --git a/doc/lfun/RemoveTouchDetail b/doc/lfun/RemoveTouchDetail
index 8b816a4..4f6ace3 100644
--- a/doc/lfun/RemoveTouchDetail
+++ b/doc/lfun/RemoveTouchDetail
@@ -1,54 +1,75 @@
+
 RemoveTouchDetail()
+*******************
 
-FUNKTION:
-    void RemoveTouchDetail(string|string* keys);
 
-DEFINIERT IN:
-    /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keys
-      String oder Array von Strings mit den zu entfernenden Details.
+   void RemoveTouchDetail(string|string* keys);
 
-BESCHREIBUNG:
-    Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
-    nur koennen hiermit (ab)tastbare Details entfernt werden:
-    Entfernt die in <keys> angegebenen Details aus der Liste der
-    vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
-    saemtliche tastbaren/fuehlbaren Details entfernt!
 
-BEISPIEL:
-    Zuerst wird ein Detail "boden" erzeugt, das abgetastet werden kann.
-    Dieses kann durch Betaetigen eines Knopfes, aeh, entfernt werden.
+DEFINIERT IN
+============
 
-      int knopf();
-      void knopf2();
+   /std/thing/description.c
 
-      AddTouchDetail("boden", "Er ist aus Stein.\n");
-      AddCmd("drueck|druecke&knopf", #'knopf, "Was willst du druecken?");
 
-      void knopf() {
-        tell_room(this_object(), break_string(
-          this_player()->Name(WER)+" drueckt einen Knopf, der dabei satt "+
-          "klackt.", 78));
+ARGUMENTE
+=========
 
-        if(find_call_out(#'knopf2)<=0)
-          call_out(#'knopf2, 1);
-      }
-      
-      void knopf2() {
-        tell_room(this_object(), "Uhoh. Der Boden klappt weg. Du faellst.");
-        RemoveTouchDetails("boden");
-      }
+   keys
+     String oder Array von Strings mit den zu entfernenden Details.
 
-SIEHE AUCH:
-    Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
-               AddTouchDetail()
-    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
-               RemoveSounds()
-    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
-    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
-    Sonstiges: GetDetail(), break_string()
+
+BESCHREIBUNG
+============
+
+   Diese Funktion entspricht dem RemoveDetail() fuer Standarddetails,
+   nur koennen hiermit (ab)tastbare Details entfernt werden:
+   Entfernt die in <keys> angegebenen Details aus der Liste der
+   vorhandenen Details. Uebergibt man fuer <keys> eine 0, so werden
+   saemtliche tastbaren/fuehlbaren Details entfernt!
+
+
+BEISPIEL
+========
+
+   Zuerst wird ein Detail "boden" erzeugt, das abgetastet werden kann.
+   Dieses kann durch Betaetigen eines Knopfes, aeh, entfernt werden.
+
+     int knopf();
+     void knopf2();
+
+     AddTouchDetail("boden", "Er ist aus Stein.\n");
+     AddCmd("drueck|druecke&knopf", #'knopf, "Was willst du druecken?");
+
+     void knopf() {
+       tell_room(this_object(), break_string(
+         this_player()->Name(WER)+" drueckt einen Knopf, der dabei satt "+
+         "klackt.", 78));
+
+       if(find_call_out(#'knopf2)<=0)
+         call_out(#'knopf2, 1);
+     }
+
+
+
+     void knopf2() {
+       tell_room(this_object(), "Uhoh. Der Boden klappt weg. Du faellst.");
+       RemoveTouchDetails("boden");
+     }
+
+
+SIEHE AUCH
+==========
+
+   Setzen:    AddDetail(), AddReadDetail(), AddSmells(), AddSounds(),
+              AddTouchDetail()
+   Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+              RemoveSounds()
+   Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS, P_TOUCH_DETAILS
+   Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+   Sonstiges: GetDetail(), break_string()
 
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/ResizeRingBuffer b/doc/lfun/ResizeRingBuffer
index c5a6c08..17c3332 100644
--- a/doc/lfun/ResizeRingBuffer
+++ b/doc/lfun/ResizeRingBuffer
@@ -1,44 +1,66 @@
+
 ResizeRingBuffer()
+******************
 
-FUNKTION:
-    protected struct std_ringbuffer buf RingBufferPut(
-                                                   struct std_ringbuffer buf, 
-                                                   int size);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
-    
-ARGUMENTE:
-    buf  - Ringpuffer, dessen Groesse geaendert werden soll
-    size - neue Groesse (int) 
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion erstellt einen neuen Ringpuffer der Groesse <size>, welcher
-    den gleichen Modus hat wie <buf> und die gleichen Daten enthaelt.
-    Ist der neue Puffer kleiner als <buf>, so kommt es hierbei zu
-    Datenverlust.
-    <buf> wird nicht veraendert. Ist die Groesse von <buf> gleich der
-    neuen gewuenschten Groesse, wird letztendlich der Ringpuffer kopiert. 
-    Je nach Groesse von <buf> und Wert von <size> kann dies eine teure
-    Angelegenheit sein.
+   protected struct std_ringbuffer buf RingBufferPut(
+                                                  struct std_ringbuffer buf,
+                                                  int size);
 
-RUeCKGABEWERT:
-    Der neue Ringpuffer mit Groesse <size>.
 
-BEISPIELE:
-    // Ringpuffer anlegen:
-    struct std_ringbuffer buffer = CreateRingBuffer(5, MODE_FIFO);
-    // 5 Werte reinschreiben:
-    foreach(int i: 5) RingBufferPut(buffer, i);
-    // Groesse aendern
-    buffer = ResizeRingBuffer(buffer, 10);
-    // Daten als Array ermitteln:
-    mixed array = RingBufferGet(buffer);
-    // array enthaelt: ({0,0,0,0,0,0,1,2,3,4})
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    RingBufferGet(), RingBufferPut(), CreateRingBuffer()
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
+
+
+ARGUMENTE
+=========
+
+   buf  - Ringpuffer, dessen Groesse geaendert werden soll
+   size - neue Groesse (int)
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion erstellt einen neuen Ringpuffer der Groesse <size>, welcher
+   den gleichen Modus hat wie <buf> und die gleichen Daten enthaelt.
+   Ist der neue Puffer kleiner als <buf>, so kommt es hierbei zu
+   Datenverlust.
+   <buf> wird nicht veraendert. Ist die Groesse von <buf> gleich der
+   neuen gewuenschten Groesse, wird letztendlich der Ringpuffer kopiert.
+   Je nach Groesse von <buf> und Wert von <size> kann dies eine teure
+   Angelegenheit sein.
+
+
+RUeCKGABEWERT
+=============
+
+   Der neue Ringpuffer mit Groesse <size>.
+
+
+BEISPIELE
+=========
+
+   // Ringpuffer anlegen:
+   struct std_ringbuffer buffer = CreateRingBuffer(5, MODE_FIFO);
+   // 5 Werte reinschreiben:
+   foreach(int i: 5) RingBufferPut(buffer, i);
+   // Groesse aendern
+   buffer = ResizeRingBuffer(buffer, 10);
+   // Daten als Array ermitteln:
+   mixed array = RingBufferGet(buffer);
+   // array enthaelt: ({0,0,0,0,0,0,1,2,3,4})
+
+
+SIEHE AUCH
+==========
+
+   RingBufferGet(), RingBufferPut(), CreateRingBuffer()
 
 23.05.2008, Zesstra
-
diff --git a/doc/lfun/RingBufferGet b/doc/lfun/RingBufferGet
index 8d6b467..128807f 100644
--- a/doc/lfun/RingBufferGet
+++ b/doc/lfun/RingBufferGet
@@ -1,41 +1,63 @@
+
 RingBufferGet()
+***************
 
-FUNKTION:
-    protected mixed RingBufferGet(struct std_ringbuffer buf);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
+FUNKTION
+========
 
-ARGUMENTE:
-    buf - Ringpuffer, welcher ausgeben werden soll
+   protected mixed RingBufferGet(struct std_ringbuffer buf);
 
-BESCHREIBUNG:
-    Diese Funktion liefert die Daten des Ringpuffers in Form eines Arrays
-    zurueck, welches dann weiterverarbeitet werden kann.
-    Die Reihenfolge der Daten ist entsprechend des beim Anlegen des
-    Ringpuffers angebenen Modes:
-    MODE_FIFO: aelteste Daten zuerst
-    MODE_LIFO: neueste Daten zuerst
 
-BEMERKUNGEN:
-    Aenderungen am Array beeinflussen die Daten des Ringpuffers nicht. Aber:
-    Hierbei werden die Daten nicht tief kopiert. D.h. enthaelt der Ringpuffer
-    Referenzen auf weitere Daten, zeigen der Ringpuffer und das hier
-    gelieferte Array auf die gleichen Daten.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    // Ringpuffer anlegen:
-    struct std_ringbuffer buffer = CreateRingBuffer(10, MODE_FIFO);
-    // 15 Werte reinschreiben:
-    foreach(int i: 15) RingBufferPut(buffer, i);
-    // Werte abrufen:
-    mixed array=RingBufferGet(buffer);
-    // array enthaelt nun:
-    // ({5,6,7,8,9,10,11,12,13,14}) 
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
 
-SIEHE AUCH:
-    CreateRingBuffer(), RingBufferPut(), ResizeRingBuffer()
+
+ARGUMENTE
+=========
+
+   buf - Ringpuffer, welcher ausgeben werden soll
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert die Daten des Ringpuffers in Form eines Arrays
+   zurueck, welches dann weiterverarbeitet werden kann.
+   Die Reihenfolge der Daten ist entsprechend des beim Anlegen des
+   Ringpuffers angebenen Modes:
+   MODE_FIFO: aelteste Daten zuerst
+   MODE_LIFO: neueste Daten zuerst
+
+
+BEMERKUNGEN
+===========
+
+   Aenderungen am Array beeinflussen die Daten des Ringpuffers nicht. Aber:
+   Hierbei werden die Daten nicht tief kopiert. D.h. enthaelt der Ringpuffer
+   Referenzen auf weitere Daten, zeigen der Ringpuffer und das hier
+   gelieferte Array auf die gleichen Daten.
+
+
+BEISPIELE
+=========
+
+   // Ringpuffer anlegen:
+   struct std_ringbuffer buffer = CreateRingBuffer(10, MODE_FIFO);
+   // 15 Werte reinschreiben:
+   foreach(int i: 15) RingBufferPut(buffer, i);
+   // Werte abrufen:
+   mixed array=RingBufferGet(buffer);
+   // array enthaelt nun:
+   // ({5,6,7,8,9,10,11,12,13,14})
+
+
+SIEHE AUCH
+==========
+
+   CreateRingBuffer(), RingBufferPut(), ResizeRingBuffer()
 
 23.05.2008, Zesstra
-
diff --git a/doc/lfun/RingBufferPut b/doc/lfun/RingBufferPut
index 82a78bb..00c046c 100644
--- a/doc/lfun/RingBufferPut
+++ b/doc/lfun/RingBufferPut
@@ -1,30 +1,49 @@
+
 RingBufferPut()
+***************
 
-FUNKTION:
-    protected void RingBufferPut(struct std_ringbuffer buf, mixed val);
 
-DEFINIERT IN:
-    /std/util/ringbuffer.c
-    /sys/util/ringbuffer.h
+FUNKTION
+========
 
-ARGUMENTE:
-    buf - Ringpuffer, in den <val> geschrieben werden soll
-    val - neues Datum
+   protected void RingBufferPut(struct std_ringbuffer buf, mixed val);
 
-BESCHREIBUNG:
-    Diese Funktion schreibt <val> in den Ringpuffer <buf>. Hierbei wird ggf.
-    das aelteste im Puffer existierende Datum ueberschrieben. <buf> muss eine
-    von CreateRingBuffer() oder ResizeRingBuffer() zurueckgelieferter
-    Ringpuffer sein.
 
-BEISPIELE:
-    // Ringpuffer anlegen:
-    struct std_ringbuffer buffer = CreateRingBuffer(10, MODE_FIFO);
-    // 15 Werte reinschreiben:
-    foreach(int i: 15) RingBufferPut(buffer, i);
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    RingBufferGet(), CreateRingBuffer(), ResizeRingBuffer()
+   /std/util/ringbuffer.c
+   /sys/util/ringbuffer.h
+
+
+ARGUMENTE
+=========
+
+   buf - Ringpuffer, in den <val> geschrieben werden soll
+   val - neues Datum
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion schreibt <val> in den Ringpuffer <buf>. Hierbei wird ggf.
+   das aelteste im Puffer existierende Datum ueberschrieben. <buf> muss eine
+   von CreateRingBuffer() oder ResizeRingBuffer() zurueckgelieferter
+   Ringpuffer sein.
+
+
+BEISPIELE
+=========
+
+   // Ringpuffer anlegen:
+   struct std_ringbuffer buffer = CreateRingBuffer(10, MODE_FIFO);
+   // 15 Werte reinschreiben:
+   foreach(int i: 15) RingBufferPut(buffer, i);
+
+
+SIEHE AUCH
+==========
+
+   RingBufferGet(), CreateRingBuffer(), ResizeRingBuffer()
 
 23.05.2008, Zesstra
-
diff --git a/doc/lfun/SearchPath b/doc/lfun/SearchPath
index 035fdcb..040965e 100644
--- a/doc/lfun/SearchPath
+++ b/doc/lfun/SearchPath
@@ -1,58 +1,82 @@
-SearchPath
 
-FUNKTION:
-     public int SearchPath(string from, string to, int para,
-                           closure callback)
+SearchPath()
+************
 
-DEFINIERT IN:
-     /p/daemon/pathd.c
-     <sys/path.d>
 
-ARGUMENTE:
-     from     - Der Startpunkt
-     to       - Der Endpunkt
-     para     - Die Parawelt in der gesucht wird (Normalwelt: 0)
-     callback - Closure, die am Ende der Pfadsuche gerufen wird
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion berechnet - sofern moeglich - den kuerzesten Pfad zwischen
-    <from> und <to> in der (Para-)Welt <para>.
-    
-    Die Pfadsuche wird anhand von Daten ueber von Spielern gelaufene Wege
-    durchgefuehrt. D.h. Gebiete, die von Spielern nicht (in letzter Zeit mal)
-    betreten werden, sind auch dem Pfaddaemon nicht bekannt. Auch kann es
-    Gebiete geben, wo zwar gebietsintern Pfade bekannt sind, aber keine Wege
-    in den Rest vom MG.
+   public int SearchPath(string from, string to, int para,
+                         closure callback)
 
-    Da diese Suche im Allgemeinen SEHR aufwendig sein kann, wird sie meistens
-    nicht sofort fertig, sondern dauert eine Weile. Wenn sie fertig ist, wird
-    die Closure <callback> aufgerufen und ihr die Argumente <from>, <to>,
-    <parawelt>, <kosten>, <path> und <cmds> uebergeben. Die Bedeutung
-    dieser Argumente ist unten erklaert.
 
-    Eine Suche nach einem Pfad in einer Parawelt fuehrt durch Raeume der
-    gewuenschen Parawelt und durch Raeume der Normalwelt.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     1      - Suche wurde gestartet
-     2      - Pfad gefunden (und callback gerufen)
-    -1      - es laeuft schon ein Suchauftrage fuer die UID des anfragenden
-              Objektes
-    -2      - es laufen bereits zuviele Suchanfragen
-    -3      - <from> und/oder <to> sind nicht bekannt
-    
-    An <callback> uebergebene Argumente am Ende der Pfadsuche:
-        <from> - Startpunkt des Weges (string)
-        <to>   - Zielpunkt des Weges (string)
-        <para> - Parawelt des Weges (int)
-        <costs>- Kosten des Wege. (int) Je hoeher, desto
-                 laenger/unguenstiger. 0, wenn kein Pfad gefunden
-        <path> - Array mit Raumnamen, die durchlaufen werden (string*)
-                 0, wenn kein Pfad gefunden
-        <cmds> - Array mit Kommandos zum Ablaufen des Weges (string*)
-                 0, wenn kein Pfad gefunden
+   /p/daemon/pathd.c
+   <sys/path.d>
 
-BEMERKUNGEN:
+
+ARGUMENTE
+=========
+
+   from     - Der Startpunkt
+   to       - Der Endpunkt
+   para     - Die Parawelt in der gesucht wird (Normalwelt: 0)
+   callback - Closure, die am Ende der Pfadsuche gerufen wird
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion berechnet - sofern moeglich - den kuerzesten Pfad zwischen
+   <from> und <to> in der (Para-)Welt <para>.
+
+
+
+   Die Pfadsuche wird anhand von Daten ueber von Spielern gelaufene Wege
+   durchgefuehrt. D.h. Gebiete, die von Spielern nicht (in letzter Zeit mal)
+   betreten werden, sind auch dem Pfaddaemon nicht bekannt. Auch kann es
+   Gebiete geben, wo zwar gebietsintern Pfade bekannt sind, aber keine Wege
+   in den Rest vom MG.
+
+   Da diese Suche im Allgemeinen SEHR aufwendig sein kann, wird sie meistens
+   nicht sofort fertig, sondern dauert eine Weile. Wenn sie fertig ist, wird
+   die Closure <callback> aufgerufen und ihr die Argumente <from>, <to>,
+   <parawelt>, <kosten>, <path> und <cmds> uebergeben. Die Bedeutung
+   dieser Argumente ist unten erklaert.
+
+   Eine Suche nach einem Pfad in einer Parawelt fuehrt durch Raeume der
+   gewuenschen Parawelt und durch Raeume der Normalwelt.
+
+
+RUeCKGABEWERT
+=============
+
+    1      - Suche wurde gestartet
+    2      - Pfad gefunden (und callback gerufen)
+   -1      - es laeuft schon ein Suchauftrage fuer die UID des anfragenden
+             Objektes
+   -2      - es laufen bereits zuviele Suchanfragen
+   -3      - <from> und/oder <to> sind nicht bekannt
+
+
+
+   An <callback> uebergebene Argumente am Ende der Pfadsuche:
+       <from> - Startpunkt des Weges (string)
+       <to>   - Zielpunkt des Weges (string)
+       <para> - Parawelt des Weges (int)
+       <costs>- Kosten des Wege. (int) Je hoeher, desto
+                laenger/unguenstiger. 0, wenn kein Pfad gefunden
+       <path> - Array mit Raumnamen, die durchlaufen werden (string*)
+                0, wenn kein Pfad gefunden
+       <cmds> - Array mit Kommandos zum Ablaufen des Weges (string*)
+                0, wenn kein Pfad gefunden
+
+
+BEMERKUNGEN
+===========
+
    Es ist natuerlich nicht dazu gedacht, Spielern fertige Routen zwischen
    Orten zu geben - bzw. nur in Ausnahmefaellen.
    Pfadabfrgen werden geloggt.
@@ -64,7 +88,10 @@
 
    Die Closure <callback> sollte nicht zuviele Ticks verbrauchen.
 
-BEISPIEL:
+
+BEISPIEL
+========
+
    #include <pathd.h>
    void suchergebnis(string from, string to, int para, int costs, string*
         path, string* cmds) {
@@ -78,6 +105,4 @@
                                "/d/ebene/dancer/lucky/room/pova_la3",
                                0, #'suchergebnis);
 
-----------------------------------------------------------------------------
 22.12.2015, Zesstra
-
diff --git a/doc/lfun/SelectEnemy b/doc/lfun/SelectEnemy
index 863e0c0..5a05eab 100644
--- a/doc/lfun/SelectEnemy
+++ b/doc/lfun/SelectEnemy
@@ -1,32 +1,51 @@
+
 SelectEnemy()
+*************
 
-FUNKTION:
-	varargs object SelectEnemy(object*here);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	here
-	  Gegner, aus welchen ausgewaehlt werden soll (optional!)
+   varargs object SelectEnemy(object*here);
 
-RUeCKGABEWERT:
-	Ausgewaehlter Gegner, der angegriffen werden soll.
 
-BESCHREIBUNG:
-	Diese Funktion waehlt einen Gegner aus, der angegriffen werden soll.
-	Werden keine Gegner im Parameter <here> angegeben, so wird der
-	Rueckgabewert der Funktion PresentEnemies() verwandt, welche die
-	aktuell anwesenden Gegner im Raum liefert.
-	Sind keine Gegner anwesend, so wird 0 zurueckgeliefert.
-	Danach wird geschaut, ob Gegner bevorzugt ausgewaehlt werden sollen.
-	Dies geschieht mittels der Funktion QueryPreferedEnemy().
-	Auch dieser bevorzugte Gegner muss im selben Raum sein! Wenn nicht,
-	wird doch irgendein anderer Gegner ausgewaehlt und zurueckgegeben.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	PresentEnemies(), QueryPreferedEnemy(), P_PREFERED_ENEMY,
-	InsertEnemy(), StopHuntFor()
+   /std/living/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   here
+     Gegner, aus welchen ausgewaehlt werden soll (optional!)
+
+
+RUeCKGABEWERT
+=============
+
+   Ausgewaehlter Gegner, der angegriffen werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion waehlt einen Gegner aus, der angegriffen werden soll.
+   Werden keine Gegner im Parameter <here> angegeben, so wird der
+   Rueckgabewert der Funktion PresentEnemies() verwandt, welche die
+   aktuell anwesenden Gegner im Raum liefert.
+   Sind keine Gegner anwesend, so wird 0 zurueckgeliefert.
+   Danach wird geschaut, ob Gegner bevorzugt ausgewaehlt werden sollen.
+   Dies geschieht mittels der Funktion QueryPreferedEnemy().
+   Auch dieser bevorzugte Gegner muss im selben Raum sein! Wenn nicht,
+   wird doch irgendein anderer Gegner ausgewaehlt und zurueckgegeben.
+
+
+SIEHE AUCH
+==========
+
+   PresentEnemies(), QueryPreferedEnemy(), P_PREFERED_ENEMY,
+   InsertEnemy(), StopHuntFor()
+
 Last modified: Thu May 27 15:01:48 1999 by Patryn
diff --git a/doc/lfun/SelectFarEnemy b/doc/lfun/SelectFarEnemy
index d574dcc..c390d42 100644
--- a/doc/lfun/SelectFarEnemy
+++ b/doc/lfun/SelectFarEnemy
@@ -1,45 +1,65 @@
 
 SelectFarEnemy()
+****************
 
 
-FUNKTION:
-        varargs object SelectFarEnemy(object *here, int min, int max,
-                                      int forcefrom)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs object SelectFarEnemy(object *here, int min, int max,
+                                 int forcefrom)
 
-ARGUMENTE:
-        here       - Rueckgabewert von PresentEnemies()
-        min        - minimale Kampfreihe
-        max        - maximale Kampfreihe
-        forcefrom  - Gegner MUSS aus uebergebenem Array ausgewaehlt werden
 
-BESCHREIBUNG:
-        Waehlt einen Feind aus Reihe <min> bis <max> aus.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Der Auserwaehlte :-)
+   /std/living/team.c
 
-BEMERKUNGEN:
-        1. Wenn in den angegeben Reihen kein Feind ist oder <max> kleiner
-           als <min> ist, wird auch keiner zurueckgegeben.
-        2. Aus Effizienzgruenden sollte forcefrom nur benutzt werden, wenn
-           es wirklich noetig ist (s. hierzu auch SelectNearEnemy()).
-        3. 0 <= <min> <= <max> < MAX_TEAMROWS
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   here       - Rueckgabewert von PresentEnemies()
+   min        - minimale Kampfreihe
+   max        - maximale Kampfreihe
+   forcefrom  - Gegner MUSS aus uebergebenem Array ausgewaehlt werden
+
+
+BESCHREIBUNG
+============
+
+   Waehlt einen Feind aus Reihe <min> bis <max> aus.
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   1. Wenn in den angegeben Reihen kein Feind ist oder <max> kleiner
+      als <min> ist, wird auch keiner zurueckgegeben.
+   2. Aus Effizienzgruenden sollte forcefrom nur benutzt werden, wenn
+      es wirklich noetig ist (s. hierzu auch SelectNearEnemy()).
+   3. 0 <= <min> <= <max> < MAX_TEAMROWS
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/SelectNearEnemy b/doc/lfun/SelectNearEnemy
index 998bee8..43ba033 100644
--- a/doc/lfun/SelectNearEnemy
+++ b/doc/lfun/SelectNearEnemy
@@ -1,49 +1,69 @@
 
 SelectNearEnemy()
+*****************
 
 
-FUNKTION:
-        varargs object SelectNearEnemy(object *here, int forcefrom)
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   varargs object SelectNearEnemy(object *here, int forcefrom)
 
-ARGUMENTE:
-        here      - Rueckgabewert von PresentEnemies()
-        forcefrom - Gegner MUSS aus uebergebenem Array ausgewaehlt werden
 
-BESCHREIBUNG:
-        Waehlt einen im Nahkampf erreichbaren Feind aus
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Der Auserwaehlte :-)
+   /std/living/team.c
 
-BEMERKUNGEN:
-        1. Falls der Spieler in einem Team ist und in einer hinteren Reihe
-           steht, wird kein Feind ausgewaehlt, es sei denn, der Spieler hat
-           einen Kampf mit einem Teammitglied angefangen.
-        2. Wenn ein bevorzugter Feind in einer der hinteren Reihen eines
-           Teams steht, wird solange das Team bevorzugt.
-        3. Auch Feinde in den hinteren Reihen koennen im Nahkampf erreichbar
-           sein, wenn die vorderen Reihen nicht genuegend Deckung bieten.
-        4. ACHTUNG: Der Auserwaehlte kommt nicht notwendigerweise aus dem
-           uebergebenen Array, wenn forcefrom=0 ist. Normalerweise ist dieses
-           Verhalten beabsichtigt, damit jemand, der sich in der Reihe vor
-           einen Gegner stellt, angegriffen wird, auch wenn er noch nicht
-           Feind ist.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   here      - Rueckgabewert von PresentEnemies()
+   forcefrom - Gegner MUSS aus uebergebenem Array ausgewaehlt werden
+
+
+BESCHREIBUNG
+============
+
+   Waehlt einen im Nahkampf erreichbaren Feind aus
+
+
+RUECKGABEWERT
+=============
+
+   Der Auserwaehlte :-)
+
+
+BEMERKUNGEN
+===========
+
+   1. Falls der Spieler in einem Team ist und in einer hinteren Reihe
+      steht, wird kein Feind ausgewaehlt, es sei denn, der Spieler hat
+      einen Kampf mit einem Teammitglied angefangen.
+   2. Wenn ein bevorzugter Feind in einer der hinteren Reihen eines
+      Teams steht, wird solange das Team bevorzugt.
+   3. Auch Feinde in den hinteren Reihen koennen im Nahkampf erreichbar
+      sein, wenn die vorderen Reihen nicht genuegend Deckung bieten.
+   4. ACHTUNG: Der Auserwaehlte kommt nicht notwendigerweise aus dem
+      uebergebenen Array, wenn forcefrom=0 ist. Normalerweise ist dieses
+      Verhalten beabsichtigt, damit jemand, der sich in der Reihe vor
+      einen Gegner stellt, angegriffen wird, auch wenn er noch nicht
+      Feind ist.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/Set b/doc/lfun/Set
index 42e6930..d654027 100644
--- a/doc/lfun/Set
+++ b/doc/lfun/Set
@@ -1,137 +1,174 @@
+
 Set()
-FUNKTION:
-     public varargs mixed Set(string name, mixed Value, int Type, int extern);
+*****
 
-DEFINIERT IN:
-     /std/thing/properties.c
-     /sys/thing/properties.h (Prototyp)
 
-ARGUMENTE:
-     name - Property, die manipuliert werden soll
-     Value - der zu setzende/aendernde Wert
-     Type - die Eigenschaft der Property, die manipuliert werden soll
-     extern - Interne Verwendung:
-    Wurde Set ueber SetProp von aussen gerufen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Eine der inneren Eigenschaften der Property 'name' wird veraendert.
-     'Type' ist dabei einer der in /sys/thing/properties.h definierten
-     F_XXX - Werte:
+   public varargs mixed Set(string name, mixed Value, int Type, int extern);
 
-     F_VALUE (==0, default)
-       Setzt den Inhalt der Property auf 'Value'. Aehnlich "SetProp",
-       umgeht jedoch eine etwaige F_SET_METHOD oder _set_'name'()-Methode.
-     F_MODE
-     F_MODE_AS
-     F_MODE_AD
-       Aendert eines der internen Flags der Property. F_MODE negiert den
-       vorherigen Wert vom Flag 'Value', F_MODE_AS setzt und F_MODE_AD
-       loescht ihn.
-       Verfuegbare interne Flags:
-         SAVE 
-           Property wird bei save_object() gespeichert
-         PROTECTED 
-           Flag setzbar durch:   beliebiges Objekt
-           Flag loeschbar durch: this_object(), ROOT, EM+
-           Inhalt der Property veraendern sowie Set- und Query-Methoden
-           setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
-           WARNUNG: Dieses Flag nicht leichtfertig bei Spielern setzen!
-         SECURED  
-           Flag setzbar durch:   this_object(), ROOT, EM+
-           Flag loeschbar durch: Niemanden!
-           Inhalt der Property veraendern sowie Set- und Query-Methoden
-           setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
-         NOSETMETHOD 
-           Property nicht mehr ueber SetProp() aenderbar
-           (damit entfallen auch SET_METHOD, _set_'name')
-     F_SET_METHOD
-       Aendert den Eintrag fuer eine SetMethod - eine Closure, die anstatt
-       des Setzens der Property beim Aufruf von SetProp mit 'Value'
-       aufgerufen wird.
-     F_QUERY_METHOD
-       Aendert den Eintrag fuer eine QueryMethod - eine Closure, die anstatt
-       des Lesens der Property beim Aufruf von QueryProp aufgerufen wird.
 
-RUeCKGABEWERT:
-     Das Ergebnis der Manipulation bzw. einer der definierten
-     Fehlercodes.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - Set() sollte nicht zum regulaeren Manipulieren des Inhalts einer
-       Property verwendet werden, da sowohl F_SET_METHOD als auch libinterne
-       _set_'name'()-Methoden umgangen werden und das Ergebnis fuer so
-       veraenderte Properties undefiniert ist.
-     - eine gesetzte F_SET/F_QUERY_METHOD hat bei SetProp/QueryProp Vorrang
-       vor einer _set/_query_method
-       -> _set/_query wird nach erfolgreichem Ruf von F_XXX_METHOD ignoriert
-     - F_SET/F_QUERY_METHOD sollte normalerweise Vorzug vor einer
-       _set_/_query_* gegeben werden.
+   /std/thing/properties.c
+   /sys/thing/properties.h (Prototyp)
 
-    SetMethods/QueryMethods:
-     - falls ihr Query/SetMethods an oeffentlichen Properties setzen
-       wollt, prueft bitte vorher, ob dort nicht schon eine (fremde) gesetzt
-       ist und brecht ggf. euer Set() ab, um nicht die Arbeit anderer
-       Mitmagier zu sabotieren (z.B. P_HANDS)
-     - Properties sollten mit Query- oder SetMethoden nur so lange wie
-       noetig belegt werden
-       -> manche Properties sollte man als Wert setzen, _auch wenn_ die
-          Spieler sie zuruecksetzen koennten (zB P_MSGIN/P_MSGOUT)
-     - auf keinen Fall den Wert speichern, ueberschreiben, rueckschreiben,
-       das fuehrt fast immer zu Problemen.
-     - Set/QueryMethoden sollten nicht als Trigger/Listener fuer ein
-       Ereignis (z.B. P_DIE_MSG fuer das Ereignis "Tod des Spielers")
-       missbraucht werden
-       -> es gibt sichere und saubere Moeglichkeiten (NotifyPlayerDeath),
-          und wenn nicht, wendet euch an den EM eures Vertrauens
-     - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
-       sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
-       geht nur 'static' (in diesem Fall empfohlen).
 
-BEISPIELE:
-     ### Aendern von Eigenschaften einer Property ###
-     // Setzen des SAVE-Flags (bei save_object() mitzuspeichern)
-     Set(P_XYZ, SAVE, F_MODE_AS);
+ARGUMENTE
+=========
 
-     // Loeschen des SAVE-Flags
-     Set(P_XYZ, SAVE, F_MODE_AD);
-     
-     // Negieren des bisherigen SAVE-Flags
-     Set(P_XYZ, SAVE, F_MODE);
-     // Hinweis: das Setzen des Flags funktioniert mittels F_MODE nur dann,
-     // wenn sichergestellt ist, dass es vorher nicht gesetzt war. Die 
-     // sichere Variante ist daher, F_MODE_AS zu verwenden.
+    name - Property, die manipuliert werden soll
+    Value - der zu setzende/aendernde Wert
+    Type - die Eigenschaft der Property, die manipuliert werden soll
+    extern - Interne Verwendung:
+   Wurde Set ueber SetProp von aussen gerufen.
 
-     // Sperren des SetProp/SET_METHOD-Zugriffs:
-     Set(P_XYZ, NOSETMETHOD, F_MODE_AS);
 
-     // Vorlaeufiger Zugriffsschutz fuer eine Property:
-     Set(P_XYZ, PROTECTED, F_MODE_AS);
+BESCHREIBUNG
+============
 
-     // Permanenter Zugriffsschutz fuer eine Property:
-     Set(P_XYZ, SECURED, F_MODE_AS);
+   Eine der inneren Eigenschaften der Property 'name' wird veraendert.
+   'Type' ist dabei einer der in /sys/thing/properties.h definierten
+   F_XXX - Werte:
 
-     ### Setzen einer SetMethod/QueryMethod ###
-     // Setzen einer internen SetMethod
-     mixed foo(mixed val);
-     ...
-     Set(P_XYZ, #'foo, F_SET_METHOD);
-     ...
+   F_VALUE (==0, default)
+     Setzt den Inhalt der Property auf 'Value'. Aehnlich "SetProp",
+     umgeht jedoch eine etwaige F_SET_METHOD oder _set_'name'()-Methode.
+   F_MODE
+   F_MODE_AS
+   F_MODE_AD
+     Aendert eines der internen Flags der Property. F_MODE negiert den
+     vorherigen Wert vom Flag 'Value', F_MODE_AS setzt und F_MODE_AD
+     loescht ihn.
+     Verfuegbare interne Flags:
 
-     // Setzen einer QueryMethod bei einem anderen Objekt
-     mixed bar();
-     ...
-     other->Set(P_XYZ, #'bar, F_QUERY_METHOD);
-     ...
+       SAVE
 
-     // Der Vollstaendigkeit halber sei das Aendern einer Property unter
-     // Umgehung von Set-Methoden angegeben. Es ist aber aus o.g. Gruenden
-     // zu empfehlen, diese Variante nicht zu verwenden.
-     Set(P_XYZ, "bla", F_VALUE);
+         Property wird bei save_object() gespeichert
 
-SIEHE AUCH:
-     Aehnliches: SetProp(L), QueryProp(L), Query(L)
-     Generell:  SetProperties(L), QueryProperties(L)
-     Konzept:  properties, /std/thing/properties.c
-     Sonstiges:  P_AUTOLOADOBJ
+       PROTECTED
 
-06. Jan 2008 Arathorn
+         Flag setzbar durch:   beliebiges Objekt
+         Flag loeschbar durch: this_object(), ROOT, EM+
+         Inhalt der Property veraendern sowie Set- und Query-Methoden
+         setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
+         WARNUNG: Dieses Flag nicht leichtfertig bei Spielern setzen!
+
+       SECURED
+
+         Flag setzbar durch:   this_object(), ROOT, EM+
+         Flag loeschbar durch: Niemanden!
+         Inhalt der Property veraendern sowie Set- und Query-Methoden
+         setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
+
+       NOSETMETHOD
+
+         Property nicht mehr ueber SetProp() aenderbar
+         (damit entfallen auch SET_METHOD, _set_'name')
+   F_SET_METHOD
+     Aendert den Eintrag fuer eine SetMethod - eine Closure, die anstatt
+     des Setzens der Property beim Aufruf von SetProp mit 'Value'
+     aufgerufen wird.
+   F_QUERY_METHOD
+     Aendert den Eintrag fuer eine QueryMethod - eine Closure, die anstatt
+     des Lesens der Property beim Aufruf von QueryProp aufgerufen wird.
+
+
+RUeCKGABEWERT
+=============
+
+   Das Ergebnis der Manipulation bzw. einer der definierten
+   Fehlercodes.
+
+
+BEMERKUNGEN
+===========
+
+    - Set() sollte nicht zum regulaeren Manipulieren des Inhalts einer
+      Property verwendet werden, da sowohl F_SET_METHOD als auch libinterne
+      _set_'name'()-Methoden umgangen werden und das Ergebnis fuer so
+      veraenderte Properties undefiniert ist.
+    - eine gesetzte F_SET/F_QUERY_METHOD hat bei SetProp/QueryProp Vorrang
+      vor einer _set/_query_method
+      -> _set/_query wird nach erfolgreichem Ruf von F_XXX_METHOD ignoriert
+    - F_SET/F_QUERY_METHOD sollte normalerweise Vorzug vor einer
+      _set_/_query_* gegeben werden.
+
+   SetMethods/QueryMethods:
+    - falls ihr Query/SetMethods an oeffentlichen Properties setzen
+      wollt, prueft bitte vorher, ob dort nicht schon eine (fremde) gesetzt
+      ist und brecht ggf. euer Set() ab, um nicht die Arbeit anderer
+      Mitmagier zu sabotieren (z.B. P_HANDS)
+    - Properties sollten mit Query- oder SetMethoden nur so lange wie
+      noetig belegt werden
+      -> manche Properties sollte man als Wert setzen, _auch wenn_ die
+         Spieler sie zuruecksetzen koennten (zB P_MSGIN/P_MSGOUT)
+    - auf keinen Fall den Wert speichern, ueberschreiben, rueckschreiben,
+      das fuehrt fast immer zu Problemen.
+    - Set/QueryMethoden sollten nicht als Trigger/Listener fuer ein
+      Ereignis (z.B. P_DIE_MSG fuer das Ereignis "Tod des Spielers")
+      missbraucht werden
+      -> es gibt sichere und saubere Moeglichkeiten (NotifyPlayerDeath),
+         und wenn nicht, wendet euch an den EM eures Vertrauens
+    - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
+      sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
+      geht nur 'static' (in diesem Fall empfohlen).
+
+
+BEISPIELE
+=========
+
+   ### Aendern von Eigenschaften einer Property ###
+   // Setzen des SAVE-Flags (bei save_object() mitzuspeichern)
+   Set(P_XYZ, SAVE, F_MODE_AS);
+
+   // Loeschen des SAVE-Flags
+   Set(P_XYZ, SAVE, F_MODE_AD);
+
+
+
+   // Negieren des bisherigen SAVE-Flags
+   Set(P_XYZ, SAVE, F_MODE);
+   // Hinweis: das Setzen des Flags funktioniert mittels F_MODE nur dann,
+   // wenn sichergestellt ist, dass es vorher nicht gesetzt war. Die
+   // sichere Variante ist daher, F_MODE_AS zu verwenden.
+
+   // Sperren des SetProp/SET_METHOD-Zugriffs:
+   Set(P_XYZ, NOSETMETHOD, F_MODE_AS);
+
+   // Vorlaeufiger Zugriffsschutz fuer eine Property:
+   Set(P_XYZ, PROTECTED, F_MODE_AS);
+
+   // Permanenter Zugriffsschutz fuer eine Property:
+   Set(P_XYZ, SECURED, F_MODE_AS);
+
+   ### Setzen einer SetMethod/QueryMethod ###
+   // Setzen einer internen SetMethod
+   mixed foo(mixed val);
+   ...
+   Set(P_XYZ, #'foo, F_SET_METHOD);
+   ...
+
+   // Setzen einer QueryMethod bei einem anderen Objekt
+   mixed bar();
+   ...
+   other->Set(P_XYZ, #'bar, F_QUERY_METHOD);
+   ...
+
+   // Der Vollstaendigkeit halber sei das Aendern einer Property unter
+   // Umgehung von Set-Methoden angegeben. Es ist aber aus o.g. Gruenden
+   // zu empfehlen, diese Variante nicht zu verwenden.
+   Set(P_XYZ, "bla", F_VALUE);
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches: SetProp(L), QueryProp(L), Query(L)
+   Generell:  SetProperties(L), QueryProperties(L)
+   Konzept:  properties, /std/thing/properties.c
+   Sonstiges:  P_AUTOLOADOBJ
+
+6. Jan 2008 Arathorn
diff --git a/doc/lfun/SetAttackChats b/doc/lfun/SetAttackChats
index 87203a1..90e8a66 100644
--- a/doc/lfun/SetAttackChats
+++ b/doc/lfun/SetAttackChats
@@ -1,68 +1,104 @@
+
 SetAttackChats()
+****************
 
-FUNKTION:
-     void SetAttackChats(int chance, mixed strs);
 
-DEFINIERT IN:
-     /std/npc/chat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     chance
-          Prozentuale Wahrscheinlichkeit einer Ausgabe
-     strs
-          Stringarray mit den Monsterchats
+   void SetAttackChats(int chance, mixed strs);
 
-BESCHREIBUNG:
-     Der NPC gibt mit der Wahrscheinlichkeit 'chance' einen zufaellig
-     gewaehlten Text aus 'strs' von sich. Die Arrayelemente koennen 
-     auch Funktionen ("@@func@@") oder Closures enthalten, die dann
-     aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
 
-RUECKGABEWERT:
-     keiner
-     
-BEMERKUNGEN:
-     AttackChats werden nur im Kampf ausgegeben. Ansonsten ist SetChats()
-     zu verwenden.
-     
-     'chance' wird in der Property P_ACHAT_CHANCE abgelegt. Um einen NPC
-     voruebergehend 'stillzulegen', kann man P_ACHAT_CHANCE auf 0 setzen.
-     
-     Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
-     ist es aber, dafuer 'AddSpell' zu verwenden.
-     
-BEISPIELE:
+DEFINIERT IN
+============
 
-     SetAttackChats( 20,
-       ({ "Der Ork tritt Dir in den Hintern.\n",
-          "Der Ork bruellt: Lebend kommst Du hier nicht raus!\n",
-          "Der Ork blutet schon aus mehreren Wunden.\n",
-          "@@knirsch@@" }) );
-          
-     string knirsch()
-     {
-       object *ruestung, *tmp, helm;
-       
-       ruestung = this_player()->QueryProp(P_ARMOURS); // getragene Ruestung
-       tmp = filter_objects(ruestung, "id", AT_HELMET);
-       // Wenn der Spieler einen Helm traegt, enthaelt 'tmp' jetzt
-       // ein Array mit dem Helmobjekt als einzigem Element
-       if (sizeof(tmp)) helm = tmp[0];
-	 if (objectp(helm))
-	 {
-	   // AC nur dann senken, wenn sie nicht schon 0 ist.
-	   if (helm->QueryProp(P_AC)>0) {
-	     helm->Damage(1);
-	     return "Der Ork beschaedigt Deinen Helm!\n";
-	   }
-	   return "";
-	 }
-	 else
-	   return ""; // keine Meldung
-     }
+   /std/npc/chat.c
 
-SIEHE AUCH:
-     P_ACHAT_CHANCE, SetChats(), /std/npc/chat.c, AddSpell()
 
-LETZTE AENDERUNG:
-	Don, 27.12.2007, 16:35:00 von Arathorn
+ARGUMENTE
+=========
+
+   chance
+        Prozentuale Wahrscheinlichkeit einer Ausgabe
+   strs
+        Stringarray mit den Monsterchats
+
+
+BESCHREIBUNG
+============
+
+   Der NPC gibt mit der Wahrscheinlichkeit 'chance' einen zufaellig
+   gewaehlten Text aus 'strs' von sich. Die Arrayelemente koennen
+   auch Funktionen ("@@func@@") oder Closures enthalten, die dann
+   aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   AttackChats werden nur im Kampf ausgegeben. Ansonsten ist SetChats()
+   zu verwenden.
+
+
+
+   'chance' wird in der Property P_ACHAT_CHANCE abgelegt. Um einen NPC
+   voruebergehend 'stillzulegen', kann man P_ACHAT_CHANCE auf 0 setzen.
+
+
+
+   Man kann AttackChats nutzen, um Monsterspells zu realisieren. Besser
+   ist es aber, dafuer 'AddSpell' zu verwenden.
+
+
+BEISPIELE
+=========
+
+   SetAttackChats( 20,
+     ({ "Der Ork tritt Dir in den Hintern.\n",
+        "Der Ork bruellt: Lebend kommst Du hier nicht raus!\n",
+        "Der Ork blutet schon aus mehreren Wunden.\n",
+        "@@knirsch@@" }) );
+
+
+
+   string knirsch()
+   {
+     object *ruestung, *tmp, helm;
+
+
+
+     ruestung = this_player()->QueryProp(P_ARMOURS); // getragene Ruestung
+     tmp = filter_objects(ruestung, "id", AT_HELMET);
+     // Wenn der Spieler einen Helm traegt, enthaelt 'tmp' jetzt
+     // ein Array mit dem Helmobjekt als einzigem Element
+     if (sizeof(tmp)) helm = tmp[0];
+       if (objectp(helm))
+       {
+         // AC nur dann senken, wenn sie nicht schon 0 ist.
+         if (helm->QueryProp(P_AC)>0) {
+           helm->Damage(1);
+           return "Der Ork beschaedigt Deinen Helm!\n";
+         }
+         return "";
+       }
+       else
+         return ""; // keine Meldung
+   }
+
+
+SIEHE AUCH
+==========
+
+   P_ACHAT_CHANCE, SetChats(), /std/npc/chat.c, AddSpell()
+
+
+LETZTE AENDERUNG
+================
+
+   Don, 27.12.2007, 16:35:00 von Arathorn
diff --git a/doc/lfun/SetAttr b/doc/lfun/SetAttr
index 8ed476f..fe5d97b 100644
--- a/doc/lfun/SetAttr
+++ b/doc/lfun/SetAttr
@@ -1,31 +1,55 @@
+
 SetAttr()
-FUNKTION:
-     public int SetAttr(string attr, int val)
+*********
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr       - zu setzendes Attribut
-     val        - Wert
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Filtert den Wert durch _filterattr(). Dadurch werden STR, INT, CON, DEX
-     auf 20 begrenzt. Setzt dann das Attribut.
-     Offsets werden hier nicht beruecksichtigt, QueryAttribute() gibt also
-     val + etwaige Offsets/Modifier zurueck.
+   public int SetAttr(string attr, int val)
 
-RUeCKGABEWERT:
-     Tatsaechlich gesetzter Wert.
 
-BEMERKUNGEN:
-     Wird von SetAttribute() und SetRealAttribute() aufgerufen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     TestAttributeLock(),

-     P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,

-     P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   attr       - zu setzendes Attribut
+   val        - Wert
+
+
+BESCHREIBUNG
+============
+
+   Filtert den Wert durch _filterattr(). Dadurch werden STR, INT, CON, DEX
+   auf 20 begrenzt. Setzt dann das Attribut.
+   Offsets werden hier nicht beruecksichtigt, QueryAttribute() gibt also
+   val + etwaige Offsets/Modifier zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Tatsaechlich gesetzter Wert.
+
+
+BEMERKUNGEN
+===========
+
+   Wird von SetAttribute() und SetRealAttribute() aufgerufen.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   TestAttributeLock(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
 
 Letzte Aenderung: 22.12.2016, Bugfix
diff --git a/doc/lfun/SetAttribute b/doc/lfun/SetAttribute
index bab54f2..139fc99 100644
--- a/doc/lfun/SetAttribute
+++ b/doc/lfun/SetAttribute
@@ -1,28 +1,49 @@
+
 SetAttribute()
-FUNKTION:
-     int SetAttribute(string attr, int val)
+**************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr       - zu setzendes Attribut
-     val        - Wert
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Nimm val als Gesamtwert des Attributes, d.h. zieht etwaige Offsets vor
-     Setzen ab. (QueryAttribute gibt dann also val zurueck)
+   int SetAttribute(string attr, int val)
 
-RUeCKGABEWERT:
-     Den durch SetAttr gefilterten gesetzten Wert.
-     Bitte nicht auf Spieler anwenden!
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   attr       - zu setzendes Attribut
+   val        - Wert
+
+
+BESCHREIBUNG
+============
+
+   Nimm val als Gesamtwert des Attributes, d.h. zieht etwaige Offsets vor
+   Setzen ab. (QueryAttribute gibt dann also val zurueck)
+
+
+RUeCKGABEWERT
+=============
+
+   Den durch SetAttr gefilterten gesetzten Wert.
+   Bitte nicht auf Spieler anwenden!
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/SetBuyFact b/doc/lfun/SetBuyFact
index b5154c7..8994bd3 100644
--- a/doc/lfun/SetBuyFact
+++ b/doc/lfun/SetBuyFact
@@ -1,36 +1,58 @@
+
 SetBuyFact()
+************
 
-FUNKTION:
-     void SetBuyFact(int fact);
 
-DEFINIERT IN:
-     /std/laden.c
+FUNKTION
+========
 
-ARGUMENTE:
-     fact
-          Der Einkaufspreismultiplikator.
+   void SetBuyFact(int fact);
 
-BESCHREIBUNG:
-     Der Preis, der beim Kauf eines Objekts im Laden zu entrichten ist,
-     errechnet sich aus seinem Wert ( P_VALUE), multipliziert mit dem Faktor
-     fact. Dieser Preis ist konstant und nicht von der aktuellen Marktlage
-     abhaengig.
 
-     Der Defaultwert ist 3. Ein hoeherer Wert entspricht einem teuren Laden,
-     waehrend ein kleinerer Wert zu kleinen Preisen fuehrt.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   /std/laden.c
 
-BEMERKUNGEN:
-     Normalerweise kommt man ohne diese Funktion aus: in teuren Laeden wird
-     nicht viel eingekauft (es sei denn, es liegen standardmaessig gute
-     Objekte im Speicher), einem Billigladen wird bald das Geld ausgehen mit
-     der Folge, dass der Ladenbesitzer nichts mehr ankaufen kann und sein
-     Lager gaehnend leer ist.
 
-SIEHE AUCH:
-     QueryBuyFact(), /std/laden.c
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   fact
+        Der Einkaufspreismultiplikator.
+
+
+BESCHREIBUNG
+============
+
+   Der Preis, der beim Kauf eines Objekts im Laden zu entrichten ist,
+   errechnet sich aus seinem Wert ( P_VALUE), multipliziert mit dem Faktor
+   fact. Dieser Preis ist konstant und nicht von der aktuellen Marktlage
+   abhaengig.
+
+   Der Defaultwert ist 3. Ein hoeherer Wert entspricht einem teuren Laden,
+   waehrend ein kleinerer Wert zu kleinen Preisen fuehrt.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Normalerweise kommt man ohne diese Funktion aus: in teuren Laeden wird
+   nicht viel eingekauft (es sei denn, es liegen standardmaessig gute
+   Objekte im Speicher), einem Billigladen wird bald das Geld ausgehen mit
+   der Folge, dass der Ladenbesitzer nichts mehr ankaufen kann und sein
+   Lager gaehnend leer ist.
+
+
+SIEHE AUCH
+==========
+
+   QueryBuyFact(), /std/laden.c
+
 Last modified: Wed May 8 10:24:52 1996 by Wargon
diff --git a/doc/lfun/SetChats b/doc/lfun/SetChats
index 3f425a8..70d312e 100644
--- a/doc/lfun/SetChats
+++ b/doc/lfun/SetChats
@@ -1,69 +1,94 @@
+
 SetChats()
+**********
 
-FUNKTION:
-	void SetChats(int chance,mixed strs);
 
-DEFINIERT IN:
-	/std/npc/chat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	chance
-	  Prozentuale Wahrscheinlichkeit einer Ausgabe
-	strs
-	  Stringarray mit den Monsterchats
+   void SetChats(int chance,mixed strs);
 
-BESCHREIBUNG:
-	Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
-	zufaellig gewaehlten Text aus dem Array <strs> von sich.
-	Die Arrayelemente koennen auch Closures oder
-	process_string()-Funktionen ("@@func@@") enthalten, die dann
-	aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
-	 (Fuer keine Ausgabe dann Leerstring "" zurueckgeben!)
-	In diesen Funktionen ist this_player() das Monster selbst!
-	Fuer Zeilenumbrueche ist immer selbst zu sorgen.
 
-RUECKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-	Ein einfaches Beispiel:
-	  // Prototype fuer Closure.
-	  static string info1();
-	  void create()
-	  { ...
-	    SetChats(20,
-	   ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
-	     "Der Ork grinst Dich unverschaemt an.\n",
-	     "Der Ork wedelt mit seinem Saebel vor Deinem Gesicht herum.\n",
-	     "Der Ork droht Dir mit der Faust.\n",
-             #'info1,
-	     "@@info2@@"}));
-          }
-	  // Funktion als Closure. Prototype notwendig!
-	  static string info1()
-	  { if(QueryProp(P_HP)<QueryProp(P_ALIGN))
-	      return"Gleich werde ich von hier fliehen!\n";
-	    return"";
-	  }
-	  // Funktion als process_string().
-	  string info2()
-	  { return QueryProp(P_HP)==QueryProp(P_MAX_HP)?
-	 "Der Ork grinst: Mir geht es fantastisch!\n":
-	 "Der Ork seufzt: Mir ging es wirklich schon mal besser.\n";
-	  }
+   /std/npc/chat.c
 
-BEMERKUNGEN:
-	Im Kampf werden keine Chats ausgegeben. Es ist dann SetAttackChats()
-	zu verwenden.
-	Funktionen als process_string() sollte man nicht mehr verwenden.
-	<chance> wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
-	voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen.
-  Wenn kein Spieler anwesend ist, haben NPC in der Regel keinen Heartbeat,
-  weswegen dann auch die Chats ausgeschaltet sind.
-  Spieler koennen NPC 'stillen', d.h. Chats und AttackChats abschalten.
 
-SIEHE AUCH:
-	P_CHAT_CHANCE, SetAttackChats(), process_string()
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   chance
+     Prozentuale Wahrscheinlichkeit einer Ausgabe
+   strs
+     Stringarray mit den Monsterchats
+
+
+BESCHREIBUNG
+============
+
+   Der NPC gibt mit der Wahrscheinlichkeit <chance> pro Heartbeat einen
+   zufaellig gewaehlten Text aus dem Array <strs> von sich.
+   Die Arrayelemente koennen auch Closures oder
+   process_string()-Funktionen ("@@func@@") enthalten, die dann
+   aufgerufen werden und deren Rueckgabewerte das Monster dann ausgibt.
+    (Fuer keine Ausgabe dann Leerstring "" zurueckgeben!)
+   In diesen Funktionen ist this_player() das Monster selbst!
+   Fuer Zeilenumbrueche ist immer selbst zu sorgen.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Ein einfaches Beispiel:
+     // Prototype fuer Closure.
+     static string info1();
+     void create()
+     { ...
+       SetChats(20,
+      ({"Der Ork sagt: Hau ab, bevor ich Dich fresse.\n",
+        "Der Ork grinst Dich unverschaemt an.\n",
+        "Der Ork wedelt mit seinem Saebel vor Deinem Gesicht herum.\n",
+        "Der Ork droht Dir mit der Faust.\n",
+        #'info1,
+        "@@info2@@"}));
+     }
+     // Funktion als Closure. Prototype notwendig!
+     static string info1()
+     { if(QueryProp(P_HP)<QueryProp(P_ALIGN))
+         return"Gleich werde ich von hier fliehen!\n";
+       return"";
+     }
+     // Funktion als process_string().
+     string info2()
+     { return QueryProp(P_HP)==QueryProp(P_MAX_HP)?
+    "Der Ork grinst: Mir geht es fantastisch!\n":
+    "Der Ork seufzt: Mir ging es wirklich schon mal besser.\n";
+     }
+
+
+BEMERKUNGEN
+===========
+
+         Im Kampf werden keine Chats ausgegeben. Es ist dann SetAttackChats()
+         zu verwenden.
+         Funktionen als process_string() sollte man nicht mehr verwenden.
+         <chance> wird in der Property P_CHAT_CHANCE abgelegt. Um einen NPC
+         voruebergehend 'stillzulegen', kann man P_CHAT_CHANCE auf 0 setzen.
+   Wenn kein Spieler anwesend ist, haben NPC in der Regel keinen Heartbeat,
+   weswegen dann auch die Chats ausgeschaltet sind.
+   Spieler koennen NPC 'stillen', d.h. Chats und AttackChats abschalten.
+
+
+SIEHE AUCH
+==========
+
+   P_CHAT_CHANCE, SetAttackChats(), process_string()
+
 Last modified: Sat Jan 18 18:48:06 2003 by Patryn
diff --git a/doc/lfun/SetCoinsPerUnits b/doc/lfun/SetCoinsPerUnits
index 07e3879..0533275 100644
--- a/doc/lfun/SetCoinsPerUnits
+++ b/doc/lfun/SetCoinsPerUnits
@@ -1,38 +1,63 @@
+
 SetCoinsPerUnits()
+******************
 
-FUNKTION:
-     void SetCoinsPerUnits(int coins, int units);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     coins
-          Zahl der Muenzen
-     units
-          Zahl der Einheiten
+   void SetCoinsPerUnits(int coins, int units);
 
-BESCHREIBUNG:
-     Es wird festgelegt, wieviel eine bestimmte Menge der Einheiten kostet.
-     Eine einzelne Einheit kostet coins/units Muenzen.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Bei der Preisberechnung wird abgerundet. Hat man also ein Verhaeltnis
-     von einer Muenze pro zwei Einheiten, so ist der Preis einer einzelnen
-     Einheit 0!
+   /std/unit.c
 
-BEISPIELE:
-     Eine Einheit soll 3.5 Muenzen wert sein:
 
-     /* 7 Muenzen / 2 Einheiten = 3.5 Muenzen / Einheit */
-     SetCoinsPerUnits(7,2);
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     QueryCoinsPerUnits(), SetGramsPerUnits(), QueryGramsPerUnits(),
-     /std/unit.c
+   coins
+        Zahl der Muenzen
+   units
+        Zahl der Einheiten
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Es wird festgelegt, wieviel eine bestimmte Menge der Einheiten kostet.
+   Eine einzelne Einheit kostet coins/units Muenzen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Bei der Preisberechnung wird abgerundet. Hat man also ein Verhaeltnis
+   von einer Muenze pro zwei Einheiten, so ist der Preis einer einzelnen
+   Einheit 0!
+
+
+BEISPIELE
+=========
+
+   Eine Einheit soll 3.5 Muenzen wert sein:
+
+   /* 7 Muenzen / 2 Einheiten = 3.5 Muenzen / Einheit */
+   SetCoinsPerUnits(7,2);
+
+
+SIEHE AUCH
+==========
+
+   QueryCoinsPerUnits(), SetGramsPerUnits(), QueryGramsPerUnits(),
+   /std/unit.c
+
 Last modified: Wed May 8 10:24:57 1996 by Wargon
diff --git a/doc/lfun/SetDoorStatus b/doc/lfun/SetDoorStatus
index 1948637..c433c40 100644
--- a/doc/lfun/SetDoorStatus
+++ b/doc/lfun/SetDoorStatus
@@ -1,29 +1,49 @@
-FUNKTION:
-     void SetDoorStatus(string dest, int status);
 
-DEFINIERT IN:
-     /obj/doormaster.c
-
-ARGUMENTE:
-     <dest>   = Zielraum der Tuer.
-     <status> = Der neue Zustand der Tuer.
-
-BESCHREIBUNG:
-     Der Zustand der Tuer, die von diesem Raum nach <dest> fuehrt, wird auf
-     <status> geaendert. Hierbei muss <status> einer der drei folgenden Werte
-     aus <doorroom.h> sein:
-
-       D_STATUS_LOCKED - Tuer abgeschlossen
-       D_STATUS_CLOSED - Tuer geschlossen
-       D_STATUS_OPEN   - Tuer geoeffnet
-
-RUECKGABEWERT:
-     keiner
+SetDoorStatus()
+***************
 
 
-SIEHE AUCH:
-    NewDoor(), QueryDoorKey(), QueryDoorStatus(), P_DOOR_INFOS,
-    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+FUNKTION
+========
 
------------------------------------------------------------------------------
+   void SetDoorStatus(string dest, int status);
+
+
+DEFINIERT IN
+============
+
+   /obj/doormaster.c
+
+
+ARGUMENTE
+=========
+
+   <dest>   = Zielraum der Tuer.
+   <status> = Der neue Zustand der Tuer.
+
+
+BESCHREIBUNG
+============
+
+   Der Zustand der Tuer, die von diesem Raum nach <dest> fuehrt, wird auf
+   <status> geaendert. Hierbei muss <status> einer der drei folgenden Werte
+   aus <doorroom.h> sein:
+
+     D_STATUS_LOCKED - Tuer abgeschlossen
+     D_STATUS_CLOSED - Tuer geschlossen
+     D_STATUS_OPEN   - Tuer geoeffnet
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   NewDoor(), QueryDoorKey(), QueryDoorStatus(), P_DOOR_INFOS,
+   /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
+
 Letzte Aenderung: Don, 08.05.2014, Gabylon
diff --git a/doc/lfun/SetEnemies b/doc/lfun/SetEnemies
index 6c79a56..2c92035 100644
--- a/doc/lfun/SetEnemies
+++ b/doc/lfun/SetEnemies
@@ -1,33 +1,53 @@
+
 SetEnemies()
+************
 
-FUNKTION:
-     mapping SetEnemies(object *myenemies);
 
-DEFINIERT IN:
-     /std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     myenemies
-	  Array: ({Gegnerarray, Zeitenarray})
+   mapping SetEnemies(object *myenemies);
 
-RUeCKGABEWERT:
-     Internes Mapping mit bekannten Gegnern und Zeiten.
 
-BESCHREIBUNG:
-     Normalerweise fuegt man einzelne Gegner mittels InsertEnemy() ein und
-     loescht alte Feinde mittels StopHuntFor().
+DEFINIERT IN
+============
 
-     Um jedoch mit einem Schlag viele Veraenderungen vorzunehmen, kann man
-     die Funktion SetEnemies() nutzen.
+   /std/living/combat.c
 
-     Ihr uebergibt man ein Array mit einem Array mit den gewuenschten Gegnern
-     als und einem zweiten, gleichgrossen Array mit den Zeiten, wie lange
-     diese Gegner aktuell sein sollen, als Eintraege.
 
-     Die Funktion traegt diese Werte als Gegner mit entsprechender
-     Feindeszeit ein.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     InsertEnemy(), StopHuntFor(), SelectEnemy(), PresentEnemies()
+   myenemies
+        Array: ({Gegnerarray, Zeitenarray})
+
+
+RUeCKGABEWERT
+=============
+
+   Internes Mapping mit bekannten Gegnern und Zeiten.
+
+
+BESCHREIBUNG
+============
+
+   Normalerweise fuegt man einzelne Gegner mittels InsertEnemy() ein und
+   loescht alte Feinde mittels StopHuntFor().
+
+   Um jedoch mit einem Schlag viele Veraenderungen vorzunehmen, kann man
+   die Funktion SetEnemies() nutzen.
+
+   Ihr uebergibt man ein Array mit einem Array mit den gewuenschten Gegnern
+   als und einem zweiten, gleichgrossen Array mit den Zeiten, wie lange
+   diese Gegner aktuell sein sollen, als Eintraege.
+
+   Die Funktion traegt diese Werte als Gegner mit entsprechender
+   Feindeszeit ein.
+
+
+SIEHE AUCH
+==========
+
+   InsertEnemy(), StopHuntFor(), SelectEnemy(), PresentEnemies()
 
 10.Feb 2005 Gloinson
diff --git a/doc/lfun/SetGramsPerUnits b/doc/lfun/SetGramsPerUnits
index fcbf9a4..66c1934 100644
--- a/doc/lfun/SetGramsPerUnits
+++ b/doc/lfun/SetGramsPerUnits
@@ -1,32 +1,54 @@
+
 SetGramsPerUnits()
+******************
 
-FUNKTION:
-     void SetGramsPerUnits(int grams, int units);
 
-DEFINIERT IN:
-     /std/unit.c
+FUNKTION
+========
 
-ARGUMENTE:
-     grams
-          Gewicht in Gramm
-     units
-          Zahl der Einheiten
+   void SetGramsPerUnits(int grams, int units);
 
-BESCHREIBUNG:
-     Es wird festgelegt, wieviel eine bestimmte Menge der Einheiten wiegt.
-     Eine einzelne Einheit wiegt grams/units Gramm.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Vier Einheiten sollen 3 Gramm wiegen:
+   /std/unit.c
 
-     SetGramsPerUnits(3,4);
 
-SIEHE AUCH:
-     SetCoinsPerUnits(), QueryCoinsPerUnits(), QueryGramsPerUnits(),
-     /std/unit.c
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   grams
+        Gewicht in Gramm
+   units
+        Zahl der Einheiten
+
+
+BESCHREIBUNG
+============
+
+   Es wird festgelegt, wieviel eine bestimmte Menge der Einheiten wiegt.
+   Eine einzelne Einheit wiegt grams/units Gramm.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Vier Einheiten sollen 3 Gramm wiegen:
+
+   SetGramsPerUnits(3,4);
+
+
+SIEHE AUCH
+==========
+
+   SetCoinsPerUnits(), QueryCoinsPerUnits(), QueryGramsPerUnits(),
+   /std/unit.c
+
 Last modified: Wed May 8 10:25:09 1996 by Wargon
diff --git a/doc/lfun/SetProp b/doc/lfun/SetProp
index b2602fb..9664be8 100644
--- a/doc/lfun/SetProp
+++ b/doc/lfun/SetProp
@@ -1,47 +1,70 @@
+
 SetProp()
-FUNKTION:
-     public mixed SetProp(string name, mixed Value);
+*********
 
-DEFINIERT IN:
-     /std/thing/properties.c
-     /sys/thing/properties.h (Prototyp)
 
-ARGUMENTE:
-     name	- Property, deren Wert veraendert werden soll.
-     Value	- Wert, auf den der Inhalt der Property gesetzt werden soll
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Datenwert der Property 'name' wird auf den Wert 'Value' gesetzt.
+   public mixed SetProp(string name, mixed Value);
 
-     Existiert eine F_SET_METHOD oder eine _set_'name'()-Methode fuer
-     diese Property, so wird diese aufgerufen und ihr 'Value' uebergeben.
-     Eine F_SET_METHOD hat dabei Vorrang vor _set_'name'(), d.h.
-     _set_'name'() wird nach erfolgreicher F_QUERY_METHOD nicht mehr
-     gerufen.
 
-     (Diese Methoden nutzen dann Set(), um den Datenwert der Property
-      'name' zu aendern. Teilweise werden aber auch interne Variablen so
-      oeffentlich gemacht und sind nicht in der ueber Set/Query verfuegbaren
-      Property 'name' abgelegt.)
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Der Wert, der nun in der Property gespeichert ist.
-     In der Regel ist das 'Value'. Wenn die Property ueber eine SET_METHOD
-     oder eine _set_'name'()-Funktion verfuegt und diese 'Value' aendert
-     (zum Beispiel, indem sie 'Value' an einen bestimmten erlaubten
-     Wertebereich anpasst), kann der Rueckgabewert jedoch auch veraendert
-     sein.
+   /std/thing/properties.c
+   /sys/thing/properties.h (Prototyp)
 
-     Wenn die Property nicht veraendert werden darf, wird -1 zurueckgegeben.
 
-BEISPIELE:
-     // geben wir dem Zwerg eine Kurzbeschreibung
-     SetProp(P_SHORT, "Ein kleiner Zwerg");
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Aehnliches:	QueryProp(L), Set(L), Query(L)
-     Generell:		SetProperties(L), QueryProperties(L)
-     Konzept:		properties, /std/thing/properties.c
+   name       - Property, deren Wert veraendert werden soll.
+   Value      - Wert, auf den der Inhalt der Property gesetzt werden soll
+
+
+BESCHREIBUNG
+============
+
+   Der Datenwert der Property 'name' wird auf den Wert 'Value' gesetzt.
+
+   Existiert eine F_SET_METHOD oder eine _set_'name'()-Methode fuer
+   diese Property, so wird diese aufgerufen und ihr 'Value' uebergeben.
+   Eine F_SET_METHOD hat dabei Vorrang vor _set_'name'(), d.h.
+   _set_'name'() wird nach erfolgreicher F_QUERY_METHOD nicht mehr
+   gerufen.
+
+   (Diese Methoden nutzen dann Set(), um den Datenwert der Property
+    'name' zu aendern. Teilweise werden aber auch interne Variablen so
+    oeffentlich gemacht und sind nicht in der ueber Set/Query verfuegbaren
+    Property 'name' abgelegt.)
+
+
+RUeCKGABEWERT
+=============
+
+   Der Wert, der nun in der Property gespeichert ist.
+   In der Regel ist das 'Value'. Wenn die Property ueber eine SET_METHOD
+   oder eine _set_'name'()-Funktion verfuegt und diese 'Value' aendert
+   (zum Beispiel, indem sie 'Value' an einen bestimmten erlaubten
+   Wertebereich anpasst), kann der Rueckgabewert jedoch auch veraendert
+   sein.
+
+   Wenn die Property nicht veraendert werden darf, wird -1 zurueckgegeben.
+
+
+BEISPIELE
+=========
+
+   // geben wir dem Zwerg eine Kurzbeschreibung
+   SetProp(P_SHORT, "Ein kleiner Zwerg");
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        QueryProp(L), Set(L), Query(L)
+   Generell:          SetProperties(L), QueryProperties(L)
+   Konzept:           properties, /std/thing/properties.c
 
 15.Dez 2004 Gloinson
-
diff --git a/doc/lfun/SetProperties b/doc/lfun/SetProperties
index 4a1fa1d..a4ac72a 100644
--- a/doc/lfun/SetProperties
+++ b/doc/lfun/SetProperties
@@ -1,27 +1,48 @@
+
 SetProperties()
-FUNKTION:
-     void SetProperties(mapping props);
+***************
 
-DEFINIERT IN:
-     /std/thing/properties.c
 
-ARGUMENTE:
-     props	- Mapping mit den Daten fuer alle Properties
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion setzt angegebene Properties auf einen Schlag.
-     Mapping muss wie folgt aufgebaut sein:
-	([ name: wert; flags; set_method; query_method,
-	   name2: ... ]);
+   void SetProperties(mapping props);
 
-BEMERKUNGEN:
-     - diese Funktion wird von restore_object() verwendet, um nicht alle
-       restaurierten Properties einzeln setzen zu muessen.
-     - SECURED/PROTECTED/NOSETMETHOD Properties werden beruecksichtigt
 
-SIEHE AUCH:
-     Aehnliches:	SetProp(L), QueryProp(L), Set(L), Query(L)
-     Generell:		QueryProperties(L)
-     Konzept:		properties, /std/thing/properties.c
+DEFINIERT IN
+============
+
+   /std/thing/properties.c
+
+
+ARGUMENTE
+=========
+
+   props      - Mapping mit den Daten fuer alle Properties
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion setzt angegebene Properties auf einen Schlag.
+   Mapping muss wie folgt aufgebaut sein:
+      ([ name: wert; flags; set_method; query_method,
+         name2: ... ]);
+
+
+BEMERKUNGEN
+===========
+
+   - diese Funktion wird von restore_object() verwendet, um nicht alle
+     restaurierten Properties einzeln setzen zu muessen.
+   - SECURED/PROTECTED/NOSETMETHOD Properties werden beruecksichtigt
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        SetProp(L), QueryProp(L), Set(L), Query(L)
+   Generell:          QueryProperties(L)
+   Konzept:           properties, /std/thing/properties.c
 
 1.Mai 2004 Gloinson
diff --git a/doc/lfun/SetRealAttribute b/doc/lfun/SetRealAttribute
index 68ea14c..fc72d9b 100644
--- a/doc/lfun/SetRealAttribute
+++ b/doc/lfun/SetRealAttribute
@@ -1,31 +1,55 @@
+
 SetRealAttribute()
-FUNKTION:
-     int SetRealAttribute(string attr, int val)
+******************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-ARGUMENTE:
-     attr       - zu setzendes Attribut
-     val        - Wert
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Setzt den realen Wert des Attributes, d.h. das reine Attribut,
-     wenn moeglich. Lediglich eine Alias-Methode fuer SetAttr().
-     (QueryAttribute() gibt also val + etwaige Offsets/Modifier zurueck)
+   int SetRealAttribute(string attr, int val)
 
-RUeCKGABEWERT:
-     Den gesetzten Wert.
 
-BEMERKUNGEN:
-     Bitte nicht auf Spieler anwenden!
+DEFINIERT IN
+============
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-Last modified: Tue Jul 27 20:00:20 2004 by Muadib

+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   attr       - zu setzendes Attribut
+   val        - Wert
+
+
+BESCHREIBUNG
+============
+
+   Setzt den realen Wert des Attributes, d.h. das reine Attribut,
+   wenn moeglich. Lediglich eine Alias-Methode fuer SetAttr().
+   (QueryAttribute() gibt also val + etwaige Offsets/Modifier zurueck)
+
+
+RUeCKGABEWERT
+=============
+
+   Den gesetzten Wert.
+
+
+BEMERKUNGEN
+===========
+
+   Bitte nicht auf Spieler anwenden!
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+Last modified: Tue Jul 27 20:00:20 2004 by Muadib
diff --git a/doc/lfun/SetSpellFatigue b/doc/lfun/SetSpellFatigue
index c34627b..f2c5861 100644
--- a/doc/lfun/SetSpellFatigue
+++ b/doc/lfun/SetSpellFatigue
@@ -1,75 +1,99 @@
-SetSpellFatigue
 
-FUNKTION:
-    public varargs int SetSpellFatigue(int duration, string key)
+SetSpellFatigue()
+*****************
 
-DEFINIERT IN:
-    /std/living/skills.c
-    /std/player/skills.c
-    /sys/living/skills.h
 
-ARGUMENTE:
-    int duration: Wie lang soll die Spruchermuedung andauern?
-    string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
-                  oder 0 fuer die globale Spruchermuedung.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion dient zum Verwalten von individuellen Spruchermuedungen
-    (Spellfatigue, Spruchsperren).
-    Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
-    Sprueche oder Gruppen von Spruechen gestalten.
+   public varargs int SetSpellFatigue(int duration, string key)
 
-    <duration> ist die Zeit (in Sekunden), welche die Spruchermuedung
-    anhalten soll (nicht die Endzeit).
 
-    Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
-    gesetzt (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls die
-    unter <key> gespeicherte Spruchermuedung.
-    Setzt man einen Eintrag ohne Angabe von <key> bedeutet dies damit auch,
-    dass der Wert von P_NEXT_SPELL_TIME geaendert wird.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    -1    Der Eintrag <key> ist noch nicht abgelaufen, es wurde _keine_
-          neue Spruchermuedung/-Sperre gespeichert.
+   /std/living/skills.c
+   /std/player/skills.c
+   /sys/living/skills.h
 
-    >0    Eintrag wurde gespeichert, Rueckgabewert ist die Zeit, zu der die
-          Sperre ablaeuft.
 
-BEISPIELE:
-    Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
-    Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
-    Gruppe ausgefuehrt wurde.
-    if (CalculateSpellSuccess(...) > x) {
-      // Spellfatigue setzen (und Erfolg pruefen!)
-      if (ob->SetSpellFatigue(5, "extrasuess") > -1) {
-        tell_object(ob, "Du fuetterst " + enemy->Name(WEN) + " mit einem "
-          "Stueck suesser Schokotorte.\n");
-        ...
-      }
-      else {
-        // Sauerei! Zu ermuedet fuer diesen Spruch. Fehlermdeldung ...
-      }
-    }
-    Dieses setzt natuerlich voraus, dass alle anderen Sprueche der Gruppe
-    "extrasuess" den gleichen <key> pruefen und setzen.
-    (Will man vor CalculateSpellSuccess() wissen, ob der Spruch ueberhaupt
-     gewirkt werden duerfte, sollte man hierzu dann CheckSpellFatigue()
-     verwenden.)
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-    Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
-    unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
-    auf volle 2s aufgerundet werden. (Dies ist nicht der Fall bei NPC.)
-    Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
-    werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
-    ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
-    Wuensche habt, sprecht den/die Mudlib-EM an.
+   int duration: Wie lang soll die Spruchermuedung andauern?
+   string key  : Eindeutiger Name des Spruches, einer Gruppe von Spruechen
+                 oder 0 fuer die globale Spruchermuedung.
 
-SIEHE AUCH:
-    CheckSpellFatigue(L), DeleteSpellFatigue(L)
-    P_NEXT_SPELL_TIME
-    spruchermuedung
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion dient zum Verwalten von individuellen Spruchermuedungen
+   (Spellfatigue, Spruchsperren).
+   Hiermit lassen sich unabhaengige Ermuedungen/Sperren fuer einzelne
+   Sprueche oder Gruppen von Spruechen gestalten.
+
+   <duration> ist die Zeit (in Sekunden), welche die Spruchermuedung
+   anhalten soll (nicht die Endzeit).
+
+   Wird <key> nicht angegeben oder ist 0, wird die globale Spruchsperre
+   gesetzt (identisch zu der Property P_NEXT_SPELL_TIME), anderenfalls die
+   unter <key> gespeicherte Spruchermuedung.
+   Setzt man einen Eintrag ohne Angabe von <key> bedeutet dies damit auch,
+   dass der Wert von P_NEXT_SPELL_TIME geaendert wird.
+
+
+RUeCKGABEWERT
+=============
+
+   -1    Der Eintrag <key> ist noch nicht abgelaufen, es wurde _keine_
+         neue Spruchermuedung/-Sperre gespeichert.
+
+   >0    Eintrag wurde gespeichert, Rueckgabewert ist die Zeit, zu der die
+         Sperre ablaeuft.
+
+
+BEISPIELE
+=========
+
+   Ein Spell gehoert zu einer Gruppe von Spells mit dem Namen 'extrasuess'.
+   Er darf nur ausgefuehrt werden, wenn seit 5s kein anderer Spruch aus der
+   Gruppe ausgefuehrt wurde.
+   if (CalculateSpellSuccess(...) > x) {
+     // Spellfatigue setzen (und Erfolg pruefen!)
+     if (ob->SetSpellFatigue(5, "extrasuess") > -1) {
+       tell_object(ob, "Du fuetterst " + enemy->Name(WEN) + " mit einem "
+         "Stueck suesser Schokotorte.\n");
+       ...
+     }
+     else {
+       // Sauerei! Zu ermuedet fuer diesen Spruch. Fehlermdeldung ...
+     }
+   }
+   Dieses setzt natuerlich voraus, dass alle anderen Sprueche der Gruppe
+   "extrasuess" den gleichen <key> pruefen und setzen.
+   (Will man vor CalculateSpellSuccess() wissen, ob der Spruch ueberhaupt
+    gewirkt werden duerfte, sollte man hierzu dann CheckSpellFatigue()
+    verwenden.)
+
+
+BEMERKUNGEN
+===========
+
+   Die genauen Zeitdauern koennen von Spielern beeinflusst werden, sie
+   unterliegen der jeweiligen Einstellung von 'spruchermuedung', d.h. koennen
+   auf volle 2s aufgerundet werden. (Dies ist nicht der Fall bei NPC.)
+   Auch wenn diese Funktion zum Verwalten von beliebigen Zeitsperren genutzt
+   werden koennen, beschraenkt euch bitte auf Spruchermuedungen und benutzt
+   ansonsten check_and_update_timed_key(). Falls ihr diesbzgl. weitere/andere
+   Wuensche habt, sprecht den/die Mudlib-EM an.
+
+
+SIEHE AUCH
+==========
+
+   CheckSpellFatigue(L), DeleteSpellFatigue(L)
+   P_NEXT_SPELL_TIME
+   spruchermuedung
+
 27.03.2010, Zesstra
-
diff --git a/doc/lfun/SetStorageRoom b/doc/lfun/SetStorageRoom
index 4655a1e..f1d66a5 100644
--- a/doc/lfun/SetStorageRoom
+++ b/doc/lfun/SetStorageRoom
@@ -1,74 +1,108 @@
+
 SetStorageRoom()
+****************
 
-FUNKTION:
-        void SetStorageRoom(string store);
 
-DEFINIERT IN:
-        /std/room/shop.c
+FUNKTION
+========
 
-ARGUMENTE:
-        store
-          Dateiname des Lagers, in dem die aufgekauften Objekte aufbewahrt
-          werden.
+   void SetStorageRoom(string store);
 
-RUeCKGABEWERT:
-        keiner
 
-BESCHREIBUNG:
-        Mit dieser Funktion wird dem Laden bekannt gegeben, welches Objekt
-        als Lager fuer angekaufte Objekte dienen soll. Jeder Laden muss
-        explizit einen eigenen Lagerraum setzen, ansonsten wird ein 
-        Laufzeitfehler ausgeloest und der Laden ist nicht ladbar.
-        
-        Das Speicherobjekt sollte /std/store.c erben, da dort einige
-        Aufraeumfunktionen definiert sind. Entscheidend fuer selbige sind
-        die Properties P_MIN_STOCK und P_STORE_CONSUME.
+DEFINIERT IN
+============
 
-BEISPIELE:
-        Der Raum 'myladen.c' koennte etwa so aussehen:
-          
-          // myladen.c
-          inherit "/std/shop";
-          #include <properties.h>
-          
-          protected void create() {
-            ::create();
-            SetProp(...); // Beschreibung wie bei normalen Raeumen
-            SetStorageRoom("/d/beispiel/mystore");
-            AddFixedObject("/items/fackel");
-          }
+   /std/room/shop.c
 
-        In diesem Laden wird nun die Standardfackel als mengenmaessig 
-        unbegrenzter Artikel verkauft.
 
-        Der zugehoerige Lagerraum 'mystore.c' kann dann im einfachsten Fall
-        so aussehen:
-          
-          // mystore.c
-          inherit "/std/store";
-          #include <rooms.h>  // Fuer AddItem-Konstanten
-          
-          protected void create() {
-            ::create();
-            // KEINE weiteren Beschreibungen!
-            // 1. erbt der Speicher keine Beschreibungsmodule,
-            // 2. sollen da eh nur Sachen und keine Spieler rein!
-            AddItem("/items/schaufel", REFRESH_REMOVE);
-          }
-        
-        Der Laden verkauft nun auch Schaufeln, jedoch nur eine pro Reset.
+ARGUMENTE
+=========
 
-HINWEISE:        
-        Fuer standardmaessig verkaufte Waren beachte man den Unterschied 
-        zwischen den Funktionen AddItem() und AddFixedObject().
-        Die erstgenannte Funktion ist im Lager zu verwenden, letztere jedoch
-        im Laden.
+   store
+     Dateiname des Lagers, in dem die aufgekauften Objekte aufbewahrt
+     werden.
 
-SIEHE AUCH:
-        Allgemeines:  laden
-        Funktionen:   AddItem(L), AddFixedObject(L), RemoveFixedObject(L) 
-        Basisobjekte: /std/store.c
-        Properties:   P_MIN_STOCK, P_STORE_CONSUME
 
-----------------------------------------------------------------------------
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion wird dem Laden bekannt gegeben, welches Objekt
+   als Lager fuer angekaufte Objekte dienen soll. Jeder Laden muss
+   explizit einen eigenen Lagerraum setzen, ansonsten wird ein
+   Laufzeitfehler ausgeloest und der Laden ist nicht ladbar.
+
+
+
+   Das Speicherobjekt sollte /std/store.c erben, da dort einige
+   Aufraeumfunktionen definiert sind. Entscheidend fuer selbige sind
+   die Properties P_MIN_STOCK und P_STORE_CONSUME.
+
+
+BEISPIELE
+=========
+
+   Der Raum 'myladen.c' koennte etwa so aussehen:
+
+
+
+     // myladen.c
+     inherit "/std/shop";
+     #include <properties.h>
+
+
+
+     protected void create() {
+       ::create();
+       SetProp(...); // Beschreibung wie bei normalen Raeumen
+       SetStorageRoom("/d/beispiel/mystore");
+       AddFixedObject("/items/fackel");
+     }
+
+   In diesem Laden wird nun die Standardfackel als mengenmaessig
+   unbegrenzter Artikel verkauft.
+
+   Der zugehoerige Lagerraum 'mystore.c' kann dann im einfachsten Fall
+   so aussehen:
+
+
+
+     // mystore.c
+     inherit "/std/store";
+     #include <rooms.h>  // Fuer AddItem-Konstanten
+
+
+
+     protected void create() {
+       ::create();
+       // KEINE weiteren Beschreibungen!
+       // 1. erbt der Speicher keine Beschreibungsmodule,
+       // 2. sollen da eh nur Sachen und keine Spieler rein!
+       AddItem("/items/schaufel", REFRESH_REMOVE);
+     }
+
+
+
+   Der Laden verkauft nun auch Schaufeln, jedoch nur eine pro Reset.
+
+HINWEISE:
+   Fuer standardmaessig verkaufte Waren beachte man den Unterschied
+   zwischen den Funktionen AddItem() und AddFixedObject(). Die
+   erstgenannte Funktion ist im Lager zu verwenden, letztere jedoch im
+   Laden.
+
+
+SIEHE AUCH
+==========
+
+   Allgemeines:  laden
+   Funktionen:   AddItem(L), AddFixedObject(L), RemoveFixedObject(L)
+   Basisobjekte: /std/store.c
+   Properties:   P_MIN_STOCK, P_STORE_CONSUME
+
 Last modified: 19-Jun-2015, Arathorn
diff --git a/doc/lfun/SetTimedAttrModifier b/doc/lfun/SetTimedAttrModifier
index 5804823..5ab39dd 100644
--- a/doc/lfun/SetTimedAttrModifier
+++ b/doc/lfun/SetTimedAttrModifier
@@ -1,92 +1,113 @@
+
 SetTimedAttrModifier()
-FUNKTION:
-     int SetTimedAttrModifier(string key, mapping modifier, 
-                              int outdated, object dependent, mixed notify) 
-DEFINIERT IN:
-     /std/living/attributes.c
-
-ARGUMENTE:
-     key	-	in P_TIMED_ATTR_MOD vorzunehmender oder zu 
-                        aendernder Eintrag

-     modifier   -       Mapping mit den Attributveraenderungen

-     outdated   -       Zeitpunkt zu dem die Attributveraenderungen

-                        ablaufen sollen in Sekunden seit dem

-                        1. Jan 1970, 0.0:0 GMT oder 0

-     dependent  -       Objekt dessen Existenz eine Bedingung fuer die

-                        Attributveraenderung sein soll oder 0

-     notify     -       Objekt oder File das mittels 
-                        NotifyTimedAttrModExpired ueber

-                        den Attributablauf informiert werden soll

-
-BESCHREIBUNG:
-     Der zu key gehoerende Eintrag wird in P_TIMED_ATTR_MOD angelegt oder

-     modifiziert und update_max_sp_and_hp aufgerufen.

-     Es empfiehlt sich auf die Eindeutigkeit des string-Parameters key
-     besonderes Augenmerk zu legen.
-

-     Unter dem Key key wird in P_TIMED_ATTR_MOD ein Eintrag vorgenommen,

-     welcher die Attribute des Livings um die in modifier stehenden Offsets

-     veraendert.

-

-     Diese Veraenderung ist solange aktiv bis entweder die in outdated

-     stehende Zeit ueberschritten ist oder das in dependent uebergebene

-     Objekt nicht mehr existiert.

-     Sind beide Argumente 0 so laeuft die Attributveraenderung nicht ab

-     und kann durch DeleteTimedAttrModifier geloescht werden.

-     Laeuft die Attributveraenderung ab, so wird der in notify angegebene

-     Empfaenger mittels Aufruf NotifyTimedAttrModExpired davon 
-     benachrichtigt.

-     Der Funktion NotifyTimedAttrModExpired wird als Argument der key

-     der abgelaufenen Attributveraenderung uebergeben.

-

-BEISPIELE:

-     Ein NPC kann einen Spieler auf die folgende Weise solange die

-     Attribute um eins herabsetzen bis entweder eine Stunde verstrichen

-     ist oder der NPC nicht mehr existiert zum Beispiel weil er getoetet

-     wurde.

-

-       player->SetTimedAttrModifier( player->query_real_name(),

-                                     ([A_STR:-1,A_INT:-1,A_DEX:-1,A_CON:-1]),

-                                     time()+3600,

-                                     this_object(),

-                                     this_object()

-                                   );

-

-     Will der NPC nun noch darauf reagieren, dass die Attributmodifikation

-     durch Timeout abgelaufen ist, so koennte dies folgendermassen geschehen.

-

-       void NotifyTimedAttrModExpired(string str)

-       {

-           // Die Funktion wird aus dem Lebewesen gerufen, in welchem der Mod
-           // gerade abgelaufen ist. Also Meldungsausgabe an
-           // previous_object().
-           tell_object(previous_object()
-               ,"Da hast Du aber nochmal Glueck gehabt.\n");

-       }

-

-

-RUeCKGABEWERT:

-     TATTR_INVALID_ARGS      -     Im Falle eines fehlenden key-Arguments,

-                                   eines fehlenden modifier-Arguments oder

-                                   eines bereits abgelaufenen

-                                   outdatet-Arguments

-     TATTR_OK                -     Im Erfolgsfall

-

-     Die Rueckgabewerte sind in /sys/living/attributes.h definiert.

-
-SIEHE AUCH:

-     Attribute:  QueryAttribute(), SetAttribute()

-                 SetRealAttribute(), QueryRealAttribute(),

-                 QueryAttributeOffset(),

-                 UpdateAttributes()

-     Methoden:   QueryTimedAttrModifier(), DeleteTimedAttrModifier()

-     Callback:   NotifyTimedAttrModExpired()

-     Properties: P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS

-		 P_X_ATTR_MOD, P_M_ATTR_MOD

-		 P_TIMED_ATTR_MOD

-     Sonstiges:  /std/living/attributes.c

-
-LETZTE Aenderung:
-15.02.2009, Zesstra
+**********************
 
 
+FUNKTION
+========
+
+   int SetTimedAttrModifier(string key, mapping modifier,
+                            int outdated, object dependent, mixed notify)
+
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+ARGUMENTE
+=========
+
+   key        -       in P_TIMED_ATTR_MOD vorzunehmender oder zu
+                      aendernder Eintrag
+   modifier   -       Mapping mit den Attributveraenderungen
+   outdated   -       Zeitpunkt zu dem die Attributveraenderungen
+                      ablaufen sollen in Sekunden seit dem
+                      1. Jan 1970, 0.0:0 GMT oder 0
+   dependent  -       Objekt dessen Existenz eine Bedingung fuer die
+                      Attributveraenderung sein soll oder 0
+   notify     -       Objekt oder File das mittels
+                      NotifyTimedAttrModExpired ueber
+                      den Attributablauf informiert werden soll
+
+
+BESCHREIBUNG
+============
+
+   Der zu key gehoerende Eintrag wird in P_TIMED_ATTR_MOD angelegt oder
+   modifiziert und update_max_sp_and_hp aufgerufen.
+   Es empfiehlt sich auf die Eindeutigkeit des string-Parameters key
+   besonderes Augenmerk zu legen.
+
+   Unter dem Key key wird in P_TIMED_ATTR_MOD ein Eintrag vorgenommen,
+   welcher die Attribute des Livings um die in modifier stehenden Offsets
+   veraendert.
+
+   Diese Veraenderung ist solange aktiv bis entweder die in outdated
+   stehende Zeit ueberschritten ist oder das in dependent uebergebene
+   Objekt nicht mehr existiert.
+   Sind beide Argumente 0 so laeuft die Attributveraenderung nicht ab
+   und kann durch DeleteTimedAttrModifier geloescht werden.
+   Laeuft die Attributveraenderung ab, so wird der in notify angegebene
+   Empfaenger mittels Aufruf NotifyTimedAttrModExpired davon
+   benachrichtigt.
+   Der Funktion NotifyTimedAttrModExpired wird als Argument der key
+   der abgelaufenen Attributveraenderung uebergeben.
+
+
+BEISPIELE
+=========
+
+   Ein NPC kann einen Spieler auf die folgende Weise solange die
+   Attribute um eins herabsetzen bis entweder eine Stunde verstrichen
+   ist oder der NPC nicht mehr existiert zum Beispiel weil er getoetet
+   wurde.
+
+     player->SetTimedAttrModifier( player->query_real_name(),
+                                   ([A_STR:-1,A_INT:-1,A_DEX:-1,A_CON:-1]),
+                                   time()+3600,
+                                   this_object(),
+                                   this_object()
+                                 );
+
+   Will der NPC nun noch darauf reagieren, dass die Attributmodifikation
+   durch Timeout abgelaufen ist, so koennte dies folgendermassen geschehen.
+
+     void NotifyTimedAttrModExpired(string str)
+     {
+         // Die Funktion wird aus dem Lebewesen gerufen, in welchem der Mod
+         // gerade abgelaufen ist. Also Meldungsausgabe an
+         // previous_object().
+         tell_object(previous_object()
+             ,"Da hast Du aber nochmal Glueck gehabt.\n");
+     }
+
+
+RUeCKGABEWERT
+=============
+
+   TATTR_INVALID_ARGS      -     Im Falle eines fehlenden key-Arguments,
+                                 eines fehlenden modifier-Arguments oder
+                                 eines bereits abgelaufenen
+                                 outdatet-Arguments
+   TATTR_OK                -     Im Erfolgsfall
+
+   Die Rueckgabewerte sind in /sys/living/attributes.h definiert.
+
+
+SIEHE AUCH
+==========
+
+   Attribute:  QueryAttribute(), SetAttribute()
+               SetRealAttribute(), QueryRealAttribute(),
+               QueryAttributeOffset(),
+               UpdateAttributes()
+   Methoden:   QueryTimedAttrModifier(), DeleteTimedAttrModifier()
+   Callback:   NotifyTimedAttrModExpired()
+   Properties: P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS
+               P_X_ATTR_MOD, P_M_ATTR_MOD
+               P_TIMED_ATTR_MOD
+   Sonstiges:  /std/living/attributes.c
+
+LETZTE Aenderung: 15.02.2009, Zesstra
diff --git a/doc/lfun/ShowDoors b/doc/lfun/ShowDoors
index ecd36b0..c315632 100644
--- a/doc/lfun/ShowDoors
+++ b/doc/lfun/ShowDoors
@@ -1,23 +1,46 @@
+
 ShowDoors()
+***********
 
-FUNKTION:
-	void ShowDoors()
 
-ARGUMENTE:
-	Keine.
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Zeigt alle Sehertor an, die der Seher (this_player()) schon kennt.
-	Falls in seiner Umgebung ein Tor steht, so wird dieses eingeklammert.
+   void ShowDoors()
 
-RUECKGABEWERT:
-	Keiner.
 
-BEMERKUNGEN:
-    Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+ARGUMENTE
+=========
 
-BEISPIELE:
-    /d/seher/portale/sehertormaster->ShowDoors()
+   Keine.
 
-SIEHE AUCH:
-    DiscoverDoor, DoorIsKnown, Teleport, GetDoorsMapping
+
+BESCHREIBUNG
+============
+
+   Zeigt alle Sehertor an, die der Seher (this_player()) schon kennt.
+   Falls in seiner Umgebung ein Tor steht, so wird dieses eingeklammert.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+
+
+BEISPIELE
+=========
+
+   /d/seher/portale/sehertormaster->ShowDoors()
+
+
+SIEHE AUCH
+==========
+
+   DiscoverDoor, DoorIsKnown, Teleport, GetDoorsMapping
diff --git a/doc/lfun/ShowPropList b/doc/lfun/ShowPropList
index 64bc4cb..41599d7 100644
--- a/doc/lfun/ShowPropList
+++ b/doc/lfun/ShowPropList
@@ -1,49 +1,74 @@
+
 ShowPropList()
+**************
 
-FUNKTION:
-     void ShowPropList(string *props);
 
-DEFINIERT IN:
-     /std/thing/util.c
+FUNKTION
+========
 
-ARGUMENTE:
-     props
-          Array von Strings mit den Namen der Properties, die ausgegeben
-          werden sollen.
+   void ShowPropList(string *props);
 
-BESCHREIBUNG:
-     Gibt die Inhalte der in props angegebenen Properties aus.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Sei test.c folgendes Programm:
+   /std/thing/util.c
 
-     inherit "std/thing";
-     inherit "std/thing/util";
 
-     create() {
-       ::create();
+ARGUMENTE
+=========
 
-       SetProp(P_SHORT, "Kurz");
-       SetProp(P_NAME, ({ "Name", "Namens", "Namen", "Namen" }));
-       SetProp("me", this_object() );
-     }
+   props
+        Array von Strings mit den Namen der Properties, die ausgegeben
+        werden sollen.
 
-     Mit xcall test->ShowPropList( ({ P_SHORT, P_NAME, "me" }) ); erhielte
-     man dann folgende Ausgabe:
 
-     *short: "Kurz"
-     *name: ({ "Name", "Namens", "Namen", "Namen" })
-     *me: OBJ(/players/wargon/test#12345)
+BESCHREIBUNG
+============
 
-BEMERKUNGEN:
-     Mit dem Befehl xprops des MGtools lassen sich uebrigens saemtliche
-     Properties eines Objekte auf einen Schlag ausgeben.
+   Gibt die Inhalte der in props angegebenen Properties aus.
 
-SIEHE AUCH:
-     /std/ting/util.c
 
-----------------------------------------------------------------------------
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Sei test.c folgendes Programm:
+
+   inherit "std/thing";
+   inherit "std/thing/util";
+
+   create() {
+     ::create();
+
+     SetProp(P_SHORT, "Kurz");
+     SetProp(P_NAME, ({ "Name", "Namens", "Namen", "Namen" }));
+     SetProp("me", this_object() );
+   }
+
+   Mit xcall test->ShowPropList( ({ P_SHORT, P_NAME, "me" }) ); erhielte
+   man dann folgende Ausgabe:
+
+   *short: "Kurz"
+   *name: ({ "Name", "Namens", "Namen", "Namen" })
+   *me: OBJ(/players/wargon/test#12345)
+
+
+BEMERKUNGEN
+===========
+
+   Mit dem Befehl xprops des MGtools lassen sich uebrigens saemtliche
+   Properties eines Objekte auf einen Schlag ausgeben.
+
+
+SIEHE AUCH
+==========
+
+   /std/ting/util.c
+
 Last modified: Wed May 8 10:25:26 1996 by Wargon
diff --git a/doc/lfun/SkillResTransfer b/doc/lfun/SkillResTransfer
index 6983eea..128cea7 100644
--- a/doc/lfun/SkillResTransfer
+++ b/doc/lfun/SkillResTransfer
@@ -1,28 +1,48 @@
+
 SkillResTransfer()
+******************
 
-FUNKTION:
-     protected void SkillResTransfer(mapping from_M, mapping to_M)
 
-DEFINIERT IN:
-     /std/living/skill_utils
+FUNKTION
+========
 
-ARGUMENTE:
-     mapping from_M: Mapping mit zu kopierenden Werten
-     mapping to_M:   Zielmapping
+   protected void SkillResTransfer(mapping from_M, mapping to_M)
 
-BESCHREIBUNG:
-     Interne Methode, die zB (!) waehrend der Ausfuehrung von Attack() durch
-     Skills oder P_TMP_ATTACK_MOD geaenderte Werte selektiert in das
-     Hauptangriffsmapping uebertraegt.
 
-     Derzeit werden folgende Werte kopiert:
-     SI_SKILLDAMAGE, SI_SKILLDAMAGE_MSG, SI_SKILLDAMAGE_MSG2,
-     SI_SKILLDAMAGE_TYPE, SI_SPELL
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     * wird an mehreren Stellen, nicht nur der living/combat verwendet
+   /std/living/skill_utils
 
-SIEHE AUCH:
-     P_TMP_ATTACK_MOD, UseSkill (Waffenfaehigkeiten)
+
+ARGUMENTE
+=========
+
+   mapping from_M: Mapping mit zu kopierenden Werten
+   mapping to_M:   Zielmapping
+
+
+BESCHREIBUNG
+============
+
+   Interne Methode, die zB (!) waehrend der Ausfuehrung von Attack() durch
+   Skills oder P_TMP_ATTACK_MOD geaenderte Werte selektiert in das
+   Hauptangriffsmapping uebertraegt.
+
+   Derzeit werden folgende Werte kopiert:
+   SI_SKILLDAMAGE, SI_SKILLDAMAGE_MSG, SI_SKILLDAMAGE_MSG2,
+   SI_SKILLDAMAGE_TYPE, SI_SPELL
+
+
+BEMERKUNGEN
+===========
+
+   * wird an mehreren Stellen, nicht nur der living/combat verwendet
+
+
+SIEHE AUCH
+==========
+
+   P_TMP_ATTACK_MOD, UseSkill (Waffenfaehigkeiten)
 
 18.Jul 2014 Gloinson
diff --git a/doc/lfun/SpellAttack b/doc/lfun/SpellAttack
index 0e24fd9..ba00347 100644
--- a/doc/lfun/SpellAttack
+++ b/doc/lfun/SpellAttack
@@ -1,71 +1,97 @@
+
 SpellAttack()
+*************
 
-FUNKTION:
-        void SpellAttack(object enemy)
 
-ARGUMENTE:
-        enemy: Der Feind.
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird in jedem Heartbeat eines NPCs ausgefuehrt,
-        falls nicht P_DISABLE_ATTACK gesetzt ist (Paralyse).
-        Standardmaessig tut diese Funktion nichts, aber man kann sie
-        ueberschreiben, damit in jedem Heartbeat Angriffe mit Spells
-        ausgefuehrt werden.
+   void SpellAttack(object enemy)
 
-        Man sollte hierbei ein random() einbauen, damit der NPC nicht
-        in jedem Heartbeat auch wirklich einen Angriff ausfuehrt.
-        Ausserdem sollte man auch fuer eventuelle Ausgaben sorgen.
 
-RUECKGABEWERT:
-        Keiner.
+ARGUMENTE
+=========
 
-BEMERKUNG:
-        Die AttackChats, die mittels SetAttackChats gesetzt werden
-        koennen, macht im Grunde nichts anderes, aber Chats sind halt
-        keine Angriffe. :-)
+   enemy: Der Feind.
 
-BEISPIELE:
-        Im Grunde ist dieses simple Beispiel eine Nachbildung von
-        Attack-Chats und soll dementsprechend nur der Anschauung dienen.
 
-        void SpellAttack(object enemy) 
-        {
-          // mit 80% Wahrscheinlichkeit wird nichts gemacht.
-          switch(random(5))
-          {
-            case 0: 
-              write("Der Ork tritt Dir in den Hintern.\n");
-              return;
-            case 1: 
-              write("Der Ork bruellt: Lebend kommst Du hier nicht raus!\n");
-              return;
-            case 2:
-              write("Der Ork blutet schon aus mehreren Wunden.\n");
-              return;
-            case 3:
-              write(knirsch(enemy));
-              return;
-            default:
-              return;
-          }
-        }
+BESCHREIBUNG
+============
 
-        string knirsch(object enemy)
-        {
-           if (objectp(enemy))
-             helm = enemy->QueryArmourByType(AT_HELMET);
-           if (objectp(helm))
-           {
-             helm->Damage(1);
-             return "Der Ork beschaedigt Deinen Helm!\n";
-           }
-           else
-             return ""; // keine Meldung
-        }
+   Diese Funktion wird in jedem Heartbeat eines NPCs ausgefuehrt,
+   falls nicht P_DISABLE_ATTACK gesetzt ist (Paralyse).
+   Standardmaessig tut diese Funktion nichts, aber man kann sie
+   ueberschreiben, damit in jedem Heartbeat Angriffe mit Spells
+   ausgefuehrt werden.
 
-SIEHE AUCH:
-        "Attack", "SetAttackChats", /std/npc/combat.c
+   Man sollte hierbei ein random() einbauen, damit der NPC nicht
+   in jedem Heartbeat auch wirklich einen Angriff ausfuehrt.
+   Ausserdem sollte man auch fuer eventuelle Ausgaben sorgen.
 
-LETZTE AENDERUNG:
- Don, 27.02.2003, 12:50:00 von Hirudo
+
+RUECKGABEWERT
+=============
+
+   Keiner.
+
+
+BEMERKUNG
+=========
+
+   Die AttackChats, die mittels SetAttackChats gesetzt werden
+   koennen, macht im Grunde nichts anderes, aber Chats sind halt
+   keine Angriffe. :-)
+
+
+BEISPIELE
+=========
+
+   Im Grunde ist dieses simple Beispiel eine Nachbildung von
+   Attack-Chats und soll dementsprechend nur der Anschauung dienen.
+
+   void SpellAttack(object enemy)
+   {
+     // mit 80% Wahrscheinlichkeit wird nichts gemacht.
+     switch(random(5))
+     {
+       case 0:
+         write("Der Ork tritt Dir in den Hintern.\n");
+         return;
+       case 1:
+         write("Der Ork bruellt: Lebend kommst Du hier nicht raus!\n");
+         return;
+       case 2:
+         write("Der Ork blutet schon aus mehreren Wunden.\n");
+         return;
+       case 3:
+         write(knirsch(enemy));
+         return;
+       default:
+         return;
+     }
+   }
+
+   string knirsch(object enemy)
+   {
+      if (objectp(enemy))
+        helm = enemy->QueryArmourByType(AT_HELMET);
+      if (objectp(helm))
+      {
+        helm->Damage(1);
+        return "Der Ork beschaedigt Deinen Helm!\n";
+      }
+      else
+        return ""; // keine Meldung
+   }
+
+
+SIEHE AUCH
+==========
+
+   "Attack", "SetAttackChats", /std/npc/combat.c
+
+
+LETZTE AENDERUNG
+================
+
+   Don, 27.02.2003, 12:50:00 von Hirudo
diff --git a/doc/lfun/SpellDefend b/doc/lfun/SpellDefend
index 79537d5..22b038c 100644
--- a/doc/lfun/SpellDefend
+++ b/doc/lfun/SpellDefend
@@ -1,43 +1,71 @@
+
 SpellDefend()
-FUNKTION:
-     public int SpellDefend(object caster,mapping sinfo);
+*************
 
-DEFINIERT IN:
-     /std/living/combat.c
 
-ARGUMENTE:
-     object caster	- Gegner
-     mapping sinfo	- Zusatzinformationen zum Spell
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Ueber den Skill SK_SPELL_DEFEND mit den Aufrufparametern
-       SI_ENEMY    : <caster>
-     und
-       SI_SKILLARG : <sinfo>
-     wird eine Abwehrchance in 0.01%-Schritten fuer einen
-     Spell ermittelt, also 0% - 100% bzw. als Rueckgabewert
-     0 - 10000.
-     
-     Weiterhin wird automatisch P_MAGIC_RESISTANCE_OFFSET und der Skill
-     SK_SPELL_DEFEND beruecksichtigt.
+   public int SpellDefend(object caster,mapping sinfo);
 
-RUeCKGABEWERT:
-     Die Abwehrchance in 0.01%-Schritten.
-     
-     Fuer Spieler wird dieser Rueckgabewert auf 3333 maximal, also 33,33%
-     Abwehrmoeglichkeit beschraenkt.
 
-BEMERKUNGEN:
-     Die Spellbooks muessen selbst auf die Auswertung dieser Funktion
-     achten! Dies geschieht nur im Falle von TryGlobalAttackSpell()
-     und bei Spells fuer NPCs mittels P_SPELLS automatisch!
+DEFINIERT IN
+============
 
-     Bitte bei NPCs nicht pauschal 100% / 10000 zurueckgeben. Danke.
+   /std/living/combat.c
 
-SIEHE AUCH:
-     Verwandt:     P_MAGIC_RESISTANCE_OFFSET
-     Aehnlich:     P_NOMAGIC
-     Generell:     TryGlobalAttackSpell, /std/spellbook.c
-     Sonstiges:    UseSkill, SK_SPELL_DEFEND
+
+ARGUMENTE
+=========
+
+   object caster      - Gegner
+   mapping sinfo      - Zusatzinformationen zum Spell
+
+
+BESCHREIBUNG
+============
+
+   Ueber den Skill SK_SPELL_DEFEND mit den Aufrufparametern
+     SI_ENEMY    : <caster>
+   und
+     SI_SKILLARG : <sinfo>
+   wird eine Abwehrchance in 0.01%-Schritten fuer einen
+   Spell ermittelt, also 0% - 100% bzw. als Rueckgabewert
+   0 - 10000.
+
+
+
+   Weiterhin wird automatisch P_MAGIC_RESISTANCE_OFFSET und der Skill
+   SK_SPELL_DEFEND beruecksichtigt.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Abwehrchance in 0.01%-Schritten.
+
+
+
+   Fuer Spieler wird dieser Rueckgabewert auf 3333 maximal, also 33,33%
+   Abwehrmoeglichkeit beschraenkt.
+
+
+BEMERKUNGEN
+===========
+
+   Die Spellbooks muessen selbst auf die Auswertung dieser Funktion
+   achten! Dies geschieht nur im Falle von TryGlobalAttackSpell()
+   und bei Spells fuer NPCs mittels P_SPELLS automatisch!
+
+   Bitte bei NPCs nicht pauschal 100% / 10000 zurueckgeben. Danke.
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:     P_MAGIC_RESISTANCE_OFFSET
+   Aehnlich:     P_NOMAGIC
+   Generell:     TryGlobalAttackSpell, /std/spellbook.c
+   Sonstiges:    UseSkill, SK_SPELL_DEFEND
 
 29.Dez 2007 Gloinson
diff --git a/doc/lfun/SpellInform b/doc/lfun/SpellInform
index 369b201..ce8fdbd 100644
--- a/doc/lfun/SpellInform
+++ b/doc/lfun/SpellInform
@@ -1,31 +1,51 @@
-SpellInform
 
-FUNKTION:
-        void SpellInform(caster,spell,sinfo);
+SpellInform()
+*************
 
-DEFINIERT IN:
-        selber zu definieren
 
-ARGUMENTE:
-        pl
-          Das Lebewesen, das erfolgreich gezaubert hat.
-        spell
-          Der Name des gezauberten Spells
-        sinfo
-          Das komplette Spellmapping des gezauberten Spells
+FUNKTION
+========
 
-BESCHREIBUNG:
-        Diese Funktion wird vom Spellbuch einer Gilde in der Umgebung
-        (Environment) eines Lebewesens aufgerufen, wenn immer das Lebewesen
-        einen Spell _erfolgreich_ gezaubert hat.
-        Bemerkung: Bitte vermeiden, aufwaendige Sachen in der Funktion zu
-        machen, da sonst u.U. deswegen Gilden anfangen zu buggen. Falls es
-        sein muss, macht dann lieber einen call_out mit 2s Wartezeit.
+   void SpellInform(caster,spell,sinfo);
 
-RUeCKGABEWERT:
-        keiner
 
-SIEHE AUCH:
-        
-----------------------------------------------------------------------------
+DEFINIERT IN
+============
+
+   selber zu definieren
+
+
+ARGUMENTE
+=========
+
+   pl
+     Das Lebewesen, das erfolgreich gezaubert hat.
+   spell
+     Der Name des gezauberten Spells
+   sinfo
+     Das komplette Spellmapping des gezauberten Spells
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird vom Spellbuch einer Gilde in der Umgebung
+   (Environment) eines Lebewesens aufgerufen, wenn immer das Lebewesen
+   einen Spell _erfolgreich_ gezaubert hat.
+   Bemerkung: Bitte vermeiden, aufwaendige Sachen in der Funktion zu
+   machen, da sonst u.U. deswegen Gilden anfangen zu buggen. Falls es
+   sein muss, macht dann lieber einen call_out mit 2s Wartezeit.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   ----------------------------------------------------------------------------
+
 16.04.2007, Zesstra
diff --git a/doc/lfun/Start b/doc/lfun/Start
index 89f63ef..e0b1070 100644
--- a/doc/lfun/Start
+++ b/doc/lfun/Start
@@ -1,25 +1,44 @@
+
 Start()
+*******
 
-FUNKTION:
-     varargs void Start(int pos);
 
-DEFINIERT IN:
-     /std/transport.c
+FUNKTION
+========
 
-ARGUMENTE:
-     pos
-          Fahrplanstation, an der begonnen werden soll.
+   varargs void Start(int pos);
 
-BESCHREIBUNG:
-     Diese Funktion schickt den Transporter auf die Strecke. Dabei beginnt
-     der Weg an der mit pos bezeichneten Stelle im Fahrplan. Default ist 0,
-     d.h. der Transporter beginnt seinen Weg an der ersten Fahrplanposition.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Halt(), /std/transport.c
+   /std/transport.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   pos
+        Fahrplanstation, an der begonnen werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion schickt den Transporter auf die Strecke. Dabei beginnt
+   der Weg an der mit pos bezeichneten Stelle im Fahrplan. Default ist 0,
+   d.h. der Transporter beginnt seinen Weg an der ersten Fahrplanposition.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   Halt(), /std/transport.c
+
 Last modified: Wed May 8 10:25:30 1996 by Wargon
diff --git a/doc/lfun/StopHuntFor b/doc/lfun/StopHuntFor
index 738b920..e09d9fa 100644
--- a/doc/lfun/StopHuntFor
+++ b/doc/lfun/StopHuntFor
@@ -1,52 +1,77 @@
+
 StopHuntFor()
+*************
 
-FUNKTION:
-  varargs int StopHuntFor(object arg,int silent);
 
-DEFINIERT IN:
-  /std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-  arg
-    Der Gegner, welcher nicht mehr bekaempft werden soll.
-  silent
-    Flag, welches gesetzt anzeigt, dass die beiden Ex-Streithaehne
-    ueber das einseitige Friedensangebot nicht informiert werden
-    sollen.
+   varargs int StopHuntFor(object arg,int silent);
 
-RUeCKGABEWERT:
-  Flag: Bei 0 war der Gegner nicht auffindbar, bei 1 Erfolg.
 
-BESCHREIBUNG:
-  Mit dieser Funktion kann man ein Lebewesen <arg> als Gegner
-  austragen. Im Normalfall erhalten sowohl das aktuelle Objekt, als
-  auch der Gegner eine Information darueber. Dies kann jedoch mit dem
-  gesetzten Flag <silent> unterbunden werden.
-  Es ist auch moeglich, auf diese Meldung Einfluss zu nehmen, indem
-  man die Funktion StopHuntText() ueberschreibt, welche dafuer
-  verantwortlich ist.
-  Achtung: Um zwischen beiden Streithaehnen Frieden zu schliessen,
-  muss der eine Gegner jeweils bei dem anderen ausgetragen werden. Ein
-  einzelnes StopHuntFor() ist sozusagen nur ein einseitiges
-  Friedensangebot.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-  Soll ein Viech unter bestimmten Umstaenden nicht angreifbar sein, ist in
-  keinem Fall StopHuntFor() im Defend() zu verwenden, sondern P_NO_ATTACK.
-  Grund: Stoppt man unliebsame Kaempfe jeweils am Anfang vom Defend, kann ein
-  Gegner gefahrlos Angriffsspells ausfuehren (und ueben), ohne dass die Gefahr
-  besteht, dass der NPC zurueckschlaegt.
+   /std/living/combat.c
 
-BEISPIELE:
-  Man will aus irgendeinem Grund den Kampf zwischen sich und Gegner enemy
-  einstellen:
-  ...
-  StopHuntFor(enemy); // enemy nicht mehr bekaempfen
-  enemy->StopHuntFor(this_object()); // enemy soll mich nicht bekaempfen.
-  ...
 
-SIEHE AUCH:
-  StopHuntText(), SelectEnemy(), QueryEnemies(), IsEnemy()
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
-16.03.2008, Zesstra 
+   arg
+     Der Gegner, welcher nicht mehr bekaempft werden soll.
+   silent
+     Flag, welches gesetzt anzeigt, dass die beiden Ex-Streithaehne
+     ueber das einseitige Friedensangebot nicht informiert werden
+     sollen.
+
+
+RUeCKGABEWERT
+=============
+
+   Flag: Bei 0 war der Gegner nicht auffindbar, bei 1 Erfolg.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion kann man ein Lebewesen <arg> als Gegner
+   austragen. Im Normalfall erhalten sowohl das aktuelle Objekt, als
+   auch der Gegner eine Information darueber. Dies kann jedoch mit dem
+   gesetzten Flag <silent> unterbunden werden.
+   Es ist auch moeglich, auf diese Meldung Einfluss zu nehmen, indem
+   man die Funktion StopHuntText() ueberschreibt, welche dafuer
+   verantwortlich ist.
+   Achtung: Um zwischen beiden Streithaehnen Frieden zu schliessen,
+   muss der eine Gegner jeweils bei dem anderen ausgetragen werden. Ein
+   einzelnes StopHuntFor() ist sozusagen nur ein einseitiges
+   Friedensangebot.
+
+
+BEMERKUNGEN
+===========
+
+   Soll ein Viech unter bestimmten Umstaenden nicht angreifbar sein, ist in
+   keinem Fall StopHuntFor() im Defend() zu verwenden, sondern P_NO_ATTACK.
+   Grund: Stoppt man unliebsame Kaempfe jeweils am Anfang vom Defend, kann ein
+   Gegner gefahrlos Angriffsspells ausfuehren (und ueben), ohne dass die Gefahr
+   besteht, dass der NPC zurueckschlaegt.
+
+
+BEISPIELE
+=========
+
+   Man will aus irgendeinem Grund den Kampf zwischen sich und Gegner enemy
+   einstellen:
+   ...
+   StopHuntFor(enemy); // enemy nicht mehr bekaempfen
+   enemy->StopHuntFor(this_object()); // enemy soll mich nicht bekaempfen.
+   ...
+
+
+SIEHE AUCH
+==========
+
+   StopHuntText(), SelectEnemy(), QueryEnemies(), IsEnemy()
+
+16.03.2008, Zesstra
diff --git a/doc/lfun/StopHuntText b/doc/lfun/StopHuntText
index 1ca8cfb..fca271b 100644
--- a/doc/lfun/StopHuntText
+++ b/doc/lfun/StopHuntText
@@ -1,58 +1,77 @@
+
 StopHuntText()
+**************
 
-FUNKTION:
-	void StopHuntText(object arg);
 
-DEFINIERT IN:
-	/std/living/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	arg
-	  Der Gegner, welcher nicht mehr bekaempft wird.
+   void StopHuntText(object arg);
 
-BESCHREIBUNG:
-	Mit der Funktion StopHuntFor() kann man ein Lebewesen als Gegner
-	austragen. Dabei erhalten sowohl der Gegner, als auch das Lebewesen,
-	welches (einseitig!) Frieden schliesst, jeweils eine Meldung, sofern
-	man dies nicht mittels eines Flags unterbindet.
-	Es ist nun moeglich, auf diese Meldung Einfluss zu nehmen, indem
-	man die Funktion StopHuntText() ueberschreibt, welche dafuer
-	verantwortlich ist.
 
-BEISPIEL:
-	Ein Lebewesen moechte einen Kampf sofort abbrechen, wenn es von
-	einem Frosch angegriffen wird:
-	  int Defend(int dam,mixed dam_type,mixed spell,object enemy)
-	  { if(enemy&&enemy->QueryProp(P_FROG))
-	    { if(StopHuntFor(enemy))
-              { // wenn Frosch angreifen will, der noch kein Gegner war
-                tell_object(arg,
-         this_object()->Name(WER)+" kaempft nicht mit Dir.\n"
-	+"Wahrscheinlich werden Froesche verschont.\n");
-	        tell_object(this_object(),
-	 "Der bloede Frosch wollte Dich doch tatsaechlich angreifen.\n");
-              }
-	      enemy->StopHuntFor(this_object(),1);
-              return 0;
-            }
-	    return::Defend(dam,dam_type,spell,enemy);
-	  }
-	  // wird nur aufgerufen, wenn der Gegner irgendwann Frosch wurde
-	  void StopHuntText(object arg)
-	  { tell_object(arg,
-	 this_object()->Name(WER)+" jagd Dich nicht mehr.\n"
-	+"Wahrscheinlich werden Froesche verschont.\n");
-	    tell_object(this_object(),
-	"Dein Gegner ist doch tatsaechlich ploetzlich Frosch geworden!\n");
-	  }
-	Warum braucht man nun das erste StopHuntFor(), wenn doch Gegner erst
-	in ::Defend() eingetragen werden, welches doch gar nicht ausgefuehrt
-	wird, wenn der Gegner ein Frosch ist? Man beachte hierbei, dass der
-	Gegner ja auch waehrend des Kampfes oder waehrend der Feindschaft
-	irgendwann Frosch werden koennte und dann schon Gegner war.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	StopHuntFor(), SelectEnemy(), QueryEnemies(), IsEnemy()
+   /std/living/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   arg
+     Der Gegner, welcher nicht mehr bekaempft wird.
+
+
+BESCHREIBUNG
+============
+
+   Mit der Funktion StopHuntFor() kann man ein Lebewesen als Gegner
+   austragen. Dabei erhalten sowohl der Gegner, als auch das Lebewesen,
+   welches (einseitig!) Frieden schliesst, jeweils eine Meldung, sofern
+   man dies nicht mittels eines Flags unterbindet.
+   Es ist nun moeglich, auf diese Meldung Einfluss zu nehmen, indem
+   man die Funktion StopHuntText() ueberschreibt, welche dafuer
+   verantwortlich ist.
+
+
+BEISPIEL
+========
+
+   Ein Lebewesen moechte einen Kampf sofort abbrechen, wenn es von
+   einem Frosch angegriffen wird:
+     int Defend(int dam,mixed dam_type,mixed spell,object enemy)
+     { if(enemy&&enemy->QueryProp(P_FROG))
+       { if(StopHuntFor(enemy))
+         { // wenn Frosch angreifen will, der noch kein Gegner war
+           tell_object(arg,
+    this_object()->Name(WER)+" kaempft nicht mit Dir.\n"
+   +"Wahrscheinlich werden Froesche verschont.\n");
+           tell_object(this_object(),
+    "Der bloede Frosch wollte Dich doch tatsaechlich angreifen.\n");
+         }
+         enemy->StopHuntFor(this_object(),1);
+         return 0;
+       }
+       return::Defend(dam,dam_type,spell,enemy);
+     }
+     // wird nur aufgerufen, wenn der Gegner irgendwann Frosch wurde
+     void StopHuntText(object arg)
+     { tell_object(arg,
+    this_object()->Name(WER)+" jagd Dich nicht mehr.\n"
+   +"Wahrscheinlich werden Froesche verschont.\n");
+       tell_object(this_object(),
+   "Dein Gegner ist doch tatsaechlich ploetzlich Frosch geworden!\n");
+     }
+   Warum braucht man nun das erste StopHuntFor(), wenn doch Gegner erst
+   in ::Defend() eingetragen werden, welches doch gar nicht ausgefuehrt
+   wird, wenn der Gegner ein Frosch ist? Man beachte hierbei, dass der
+   Gegner ja auch waehrend des Kampfes oder waehrend der Feindschaft
+   irgendwann Frosch werden koennte und dann schon Gegner war.
+
+
+SIEHE AUCH
+==========
+
+   StopHuntFor(), SelectEnemy(), QueryEnemies(), IsEnemy()
+
 Last modified: Wed May 26 16:47:51 1999 by Patryn
diff --git a/doc/lfun/SuggestArticle b/doc/lfun/SuggestArticle
index 7a4ba5c..31c2047 100644
--- a/doc/lfun/SuggestArticle
+++ b/doc/lfun/SuggestArticle
@@ -1,35 +1,57 @@
+
 SuggestArticle()
+****************
 
-FUNKTION:
-     varargs int SuggestArticle(string name);
 
-DEFINIERT IN:
-     /std/thing/language.c
+FUNKTION
+========
 
-ARGUMENTE:
-     name
-          Der Name zur Entscheidungshilfe.
+   varargs int SuggestArticle(string name);
 
-BESCHREIBUNG:
-     Diese Funktion versucht herauszufinden, ob der Artikel zu diesem Objekt
-     ein unbestimmter oder besser ein bestimmter Artikel sein sollte. Die
-     Vorgehensweise ist folgende: Gibt es in der Umgebung dieses Objektes
-     ein weiteres Objekt, das den Namen name besitzt, so wird ein
-     unbestimmter Artikel vorgeschlagen, ansonsten ein bestimmter.
 
-RUeCKGABEWERT:
-     0, wenn ein unbestimmter Artikel geeignet ist, ansonsten 1.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Der Vergleich erfolgt mittels der Property P_NAME. Um Erfolg zu haben,
-     sollte man diese Funktion daher in der Form
+   /std/thing/language.c
 
-     SuggestArticle(QueryProp(P_NAME))
 
-     aufrufen.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     QueryArticle(), name(), /std/thing/language.c
+   name
+        Der Name zur Entscheidungshilfe.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Diese Funktion versucht herauszufinden, ob der Artikel zu diesem Objekt
+   ein unbestimmter oder besser ein bestimmter Artikel sein sollte. Die
+   Vorgehensweise ist folgende: Gibt es in der Umgebung dieses Objektes
+   ein weiteres Objekt, das den Namen name besitzt, so wird ein
+   unbestimmter Artikel vorgeschlagen, ansonsten ein bestimmter.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn ein unbestimmter Artikel geeignet ist, ansonsten 1.
+
+
+BEMERKUNGEN
+===========
+
+   Der Vergleich erfolgt mittels der Property P_NAME. Um Erfolg zu haben,
+   sollte man diese Funktion daher in der Form
+
+   SuggestArticle(QueryProp(P_NAME))
+
+   aufrufen.
+
+
+SIEHE AUCH
+==========
+
+   QueryArticle(), name(), /std/thing/language.c
+
 Last modified: Wed May 8 10:25:34 1996 by Wargon
diff --git a/doc/lfun/SwapRows b/doc/lfun/SwapRows
index 7d5d928..aa18364 100644
--- a/doc/lfun/SwapRows
+++ b/doc/lfun/SwapRows
@@ -1,40 +1,60 @@
 
 SwapRows()
+**********
 
 
-FUNKTION:
-    int SwapRows( object ob1, object ob2 )
+FUNKTION
+========
 
-DEFINIERT IN:
-    /std/living/team.c
+   int SwapRows( object ob1, object ob2 )
 
-ARGUMENTE:
-    ob1, ob2 - Spieler, die die Reihen tauschen sollen.
 
-BESCHREIBUNG:
-    Die angegebenen Spieler tauschen die Reihen.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    1 bei erfolgreichem Tausch, 0 sonst.
+   /std/living/team.c
 
-BEMERKUNG:
-    Der Tausch wird nur durchgefuehrt, wenn die angegebenen Spieler auch
-    tatsaechlich im Team sind und damit kein NPC vor einen Spieler gestellt
-    wuerde.
-    Moechte man wissen, ob ein Spieler eine Reihe gewechselt hat, muss man
-    sich der Hilfe eines Hooks bedienen: H_HOOK_TEAMROWCHANGE
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_TEAM_LEADER, P_TEAM_ASSOC_MEMBERS,
-                    P_TEAM_NEWMEMBER
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   ob1, ob2 - Spieler, die die Reihen tauschen sollen.
+
+
+BESCHREIBUNG
+============
+
+   Die angegebenen Spieler tauschen die Reihen.
+
+
+RUECKGABEWERT
+=============
+
+   1 bei erfolgreichem Tausch, 0 sonst.
+
+
+BEMERKUNG
+=========
+
+   Der Tausch wird nur durchgefuehrt, wenn die angegebenen Spieler auch
+   tatsaechlich im Team sind und damit kein NPC vor einen Spieler gestellt
+   wuerde.
+   Moechte man wissen, ob ein Spieler eine Reihe gewechselt hat, muss man
+   sich der Hilfe eines Hooks bedienen: H_HOOK_TEAMROWCHANGE
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_TEAM_LEADER, P_TEAM_ASSOC_MEMBERS,
+               P_TEAM_NEWMEMBER
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/TakeFlaw b/doc/lfun/TakeFlaw
index 7bfd03a..40d99a2 100644
--- a/doc/lfun/TakeFlaw
+++ b/doc/lfun/TakeFlaw
@@ -1,75 +1,100 @@
+
 TakeFlaw()
+**********
 
-FUNKTION:
-     varargs void TakeFlaw(object enemy); (Waffen)
-     varargs void TakeFlaw(mixed dam_types,mapping einfos) (Ruestungen)
 
-DEFINIERT IN:
-     /std/armour/combat.c,
-     /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   varargs void TakeFlaw(object enemy); (Waffen)
+   varargs void TakeFlaw(mixed dam_types,mapping einfos) (Ruestungen)
 
-BESCHREIBUNG:
-     Diese Funktion wird in Waffen und Ruestungen waehrend des Kampfes
-     aufgerufen. In einer Waffe erfolgt der Aufruf bei jedem Schlag mit
-     dieser Waffe, bei Ruestungen wird TakeFlaw() in einer zufaellig
-     ausgewaehlten getragenen Ruestung aufgerufen.
-     Waffen bekommen das Gegnerobjekt uebergeben, Ruestungen die erweiterten
-     DefendInfos (s. dort fuer Details). Aufgrund dieser Informationen kann
-     man den Schaden, den ein Gegenstand nimmt, flexibler gestalten (z.B. bei
-     einer Waffe in Abhaengigkeit von P_BODY des Gegners.)
 
-     Soweit man die Funktion nicht ueberlaedt, bewirkt sie nichts weiter als
-     das Erhoehen eines Zaehlers, der mit QueryFlaw() abgefragt werden kann.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   /std/armour/combat.c,
+   /std/weapon/combat.c
 
-BEMERKUNGEN:
-     Die Waffen-/ Ruestungsklasse wird nicht automatisch reduziert! Wenn
-     eine Waffe oder Ruestung sich abnutzen soll, muss man TakeFlaw()
-     ueberladen und dort entsprechend handeln, oder (fuer einfache
-     Faelle) die Property P_QUALITY setzen.
 
-BEISPIELE:
-     Eine Waffe, deren Waffenklasse alle 20 Schlaege um 1 abnimmt:
+ARGUMENTE
+=========
 
-     inherit "std/weapon";
+   keine
 
-     #include <properties.h>
-     #include <combat.h>
 
-     create()
-     {
-       /* Das Uebliche... */
+BESCHREIBUNG
+============
+
+   Diese Funktion wird in Waffen und Ruestungen waehrend des Kampfes
+   aufgerufen. In einer Waffe erfolgt der Aufruf bei jedem Schlag mit
+   dieser Waffe, bei Ruestungen wird TakeFlaw() in einer zufaellig
+   ausgewaehlten getragenen Ruestung aufgerufen.
+   Waffen bekommen das Gegnerobjekt uebergeben, Ruestungen die erweiterten
+   DefendInfos (s. dort fuer Details). Aufgrund dieser Informationen kann
+   man den Schaden, den ein Gegenstand nimmt, flexibler gestalten (z.B. bei
+   einer Waffe in Abhaengigkeit von P_BODY des Gegners.)
+
+   Soweit man die Funktion nicht ueberlaedt, bewirkt sie nichts weiter als
+   das Erhoehen eines Zaehlers, der mit QueryFlaw() abgefragt werden kann.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Die Waffen-/ Ruestungsklasse wird nicht automatisch reduziert! Wenn
+   eine Waffe oder Ruestung sich abnutzen soll, muss man TakeFlaw()
+   ueberladen und dort entsprechend handeln, oder (fuer einfache
+   Faelle) die Property P_QUALITY setzen.
+
+
+BEISPIELE
+=========
+
+   Eine Waffe, deren Waffenklasse alle 20 Schlaege um 1 abnimmt:
+
+   inherit "std/weapon";
+
+   #include <properties.h>
+   #include <combat.h>
+
+   create()
+   {
+     /* Das Uebliche... */
+   }
+
+   TakeFlaw()
+   {
+     int flaw;
+
+     /* erst mal den Zaehler erhoehen... */
+     ::TakeFlaw();
+
+     /* jetzt den aktuellen Zaehlerstand abfragen */
+     flaw = QueryFlaw()[0];
+
+     /* Abzug nur jeden 20. Schlag */
+     if (!(flaw % 20)) {
+       /* So, jetzt fuer den Schaden sorgen. Hierfuer benutzt */
+       /* man am sichersten die eingebaute Funktion Damage() */
+       Damage(1);
      }
+   }
 
-     TakeFlaw()
-     {
-       int flaw;
+   Dieses einfache Beispiel haette natuerlich auch ueber ein
+   SetProp(P_QUALITY,20); im create() realisiert werden koennen.
 
-       /* erst mal den Zaehler erhoehen... */
-       ::TakeFlaw();
 
-       /* jetzt den aktuellen Zaehlerstand abfragen */
-       flaw = QueryFlaw()[0];
+SIEHE AUCH
+==========
 
-       /* Abzug nur jeden 20. Schlag */
-       if (!(flaw % 20)) {
-         /* So, jetzt fuer den Schaden sorgen. Hierfuer benutzt */
-         /* man am sichersten die eingebaute Funktion Damage() */
-         Damage(1);
-       }
-     }
+   QueryFlaw(), Damage(), DefendInfo, P_QUIALITY, /std/armour/combat.c,
+   /std/weapon/combat.c
 
-     Dieses einfache Beispiel haette natuerlich auch ueber ein
-     SetProp(P_QUALITY,20); im create() realisiert werden koennen.
-
-SIEHE AUCH:
-     QueryFlaw(), Damage(), DefendInfo, P_QUIALITY, /std/armour/combat.c,
-     /std/weapon/combat.c
-
-----------------------------------------------------------------------------
 Last modified: Thu May 22 10:30:10 1997 by Paracelsus
diff --git a/doc/lfun/TeamFlee b/doc/lfun/TeamFlee
index fb317a0..216fbbf 100644
--- a/doc/lfun/TeamFlee
+++ b/doc/lfun/TeamFlee
@@ -1,40 +1,60 @@
 
 TeamFlee()
+**********
 
 
-FUNKTION:
-        int TeamFlee()
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   int TeamFlee()
 
-ARGUMENTE:
-        keine
 
-BESCHREIBUNG:
-        Spieler wird zur Flucht in hintere Reihe veranlasst, falls er dies
-        eingestellt hat.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        1, falls der Spieler in eine hintere Reihe fliehen wollte und nach
-        dem Versuch nicht mehr in der ersten Reihe steht, sonst 0.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Beim Teamleiter fuehrt der Fluchtversuch dazu, dass sein Team nicht
-        mehr folgt.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Spieler wird zur Flucht in hintere Reihe veranlasst, falls er dies
+   eingestellt hat.
+
+
+RUECKGABEWERT
+=============
+
+   1, falls der Spieler in eine hintere Reihe fliehen wollte und nach
+   dem Versuch nicht mehr in der ersten Reihe steht, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Beim Teamleiter fuehrt der Fluchtversuch dazu, dass sein Team nicht
+   mehr folgt.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/TeamMembers b/doc/lfun/TeamMembers
index 28ca93b..5971bfb 100644
--- a/doc/lfun/TeamMembers
+++ b/doc/lfun/TeamMembers
@@ -1,38 +1,58 @@
 
 TeamMembers()
+*************
 
 
-FUNKTION:
-        object *TeamMembers()
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   object *TeamMembers()
 
-ARGUMENTE:
-        keine
 
-BESCHREIBUNG:
-        Liefert Teammitglieder des Teams des Spielers.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        Array mit ALLEN Teammitgliedern.
+   /std/living/team.c
 
-BEMERKUNGEN:
-        Falls der Spieler in keinem Team ist, enthaelt das Array nur den
-        Spieler.
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  TeamPrefix, teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Liefert Teammitglieder des Teams des Spielers.
+
+
+RUECKGABEWERT
+=============
+
+   Array mit ALLEN Teammitgliedern.
+
+
+BEMERKUNGEN
+===========
+
+   Falls der Spieler in keinem Team ist, enthaelt das Array nur den
+   Spieler.
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  TeamPrefix, teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/TeamPrefix b/doc/lfun/TeamPrefix
index efbebb7..2cf1582 100644
--- a/doc/lfun/TeamPrefix
+++ b/doc/lfun/TeamPrefix
@@ -1,37 +1,56 @@
 
 TeamPrefix()
+************
 
 
-FUNKTION:
-        string TeamPrefix()
+FUNKTION
+========
 
-DEFINIERT IN:
-        /std/living/team.c
+   string TeamPrefix()
 
-ARGUMENTE:
-        keine
 
-BESCHREIBUNG:
-        Ergibt Team-Prefix eines Spielers.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-        "[Team Teamname] ", falls der Spieler in einem Team ist,
-        ""                  sonst.
+   /std/living/team.c
 
-BEMERKUNGEN:
 
-SIEHE AUCH:
-        Uebersicht: teamkampf
-        Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
-                    P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
-                    P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
-        Bewegung:   IsTeamMove, TeamFlee
-        Mitglieder: IsTeamLeader, TeamMembers
-        Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
-                    SelectNearEnemy, SelectFarEnemy
-        Positionen: PresentPosition, PresentRows, PresentEnemyRows,
-                    PresentTeamPosition, SwapRows
-        Sonstiges:  teamkampf_intern
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Ergibt Team-Prefix eines Spielers.
+
+
+RUECKGABEWERT
+=============
+
+   "[Team Teamname] ", falls der Spieler in einem Team ist,
+   ""                  sonst.
+
+
+BEMERKUNGEN
+===========
+
+
+SIEHE AUCH
+==========
+
+   Uebersicht: teamkampf
+   Properties: P_TEAM, P_ASSOC_MEMBERS, P_TEAM_ATTACK_CMD,
+               P_TEAM_AUTOFOLLOW, P_TEAM_COLORS, P_TEAM_LEADER,
+               P_TEAM_NEWMEMBER, P_TEAM_WANTED_ROW, P_TEAM_WIMPY_ROW
+   Bewegung:   IsTeamMove, TeamFlee
+   Mitglieder: IsTeamLeader, TeamMembers
+   Kampf:      AssocMember, DeAssocMember, InsertEnemyTeam,
+               SelectNearEnemy, SelectFarEnemy
+   Positionen: PresentPosition, PresentRows, PresentEnemyRows,
+               PresentTeamPosition, SwapRows
+   Sonstiges:  teamkampf_intern
+
 Last modified: 16-08-2010, Gabylon
diff --git a/doc/lfun/Teleport b/doc/lfun/Teleport
index b902d07..ddddb89 100644
--- a/doc/lfun/Teleport
+++ b/doc/lfun/Teleport
@@ -1,28 +1,51 @@
+
 Teleport()
+**********
 
-FUNKTION:
-    int Teleport(string ziel)
 
-ARGUMENTE:
-    ziel: Nummer des Sehertors, zu dem teleportiert werden soll.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Teleportiert den Seher (this_player()) zu dem Tor mit der angegebenen
-    Nummer. Falls keine Nummer angegeben wird, wird mit ShowDoors() die
-    Liste der bekannten Tore angezeigt und auf die Eingabe einer Nummer
-    gewartet.
+   int Teleport(string ziel)
 
-RUECKGABEWERT:
-    0, falls der Seher nicht neben einem Tor steht, dass er kennt.
-    1  sonst.
 
-BEMERKUNGEN:
-    Der Seher muss in einem Raum stehen, in dem sich ein Sehertor befindet,
-    dass er kennt. Der Seher muss auch das angegebene Ziel kennen.
-    Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+ARGUMENTE
+=========
 
-BEISPIELE:
-    /d/seher/portale/sehertormaster->Teleport(1)
+   ziel: Nummer des Sehertors, zu dem teleportiert werden soll.
 
-SIEHE AUCH:
-    DiscoverDoor, DoorIsKnown, ShowDoors, GetDoorsMapping
+
+BESCHREIBUNG
+============
+
+   Teleportiert den Seher (this_player()) zu dem Tor mit der angegebenen
+   Nummer. Falls keine Nummer angegeben wird, wird mit ShowDoors() die
+   Liste der bekannten Tore angezeigt und auf die Eingabe einer Nummer
+   gewartet.
+
+
+RUECKGABEWERT
+=============
+
+   0, falls der Seher nicht neben einem Tor steht, dass er kennt.
+   1  sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Der Seher muss in einem Raum stehen, in dem sich ein Sehertor befindet,
+   dass er kennt. Der Seher muss auch das angegebene Ziel kennen.
+   Diese Funktion wird von /d/seher/portale/sehertormaster definiert.
+
+
+BEISPIELE
+=========
+
+   /d/seher/portale/sehertormaster->Teleport(1)
+
+
+SIEHE AUCH
+==========
+
+   DiscoverDoor, DoorIsKnown, ShowDoors, GetDoorsMapping
diff --git a/doc/lfun/TestIgnore b/doc/lfun/TestIgnore
index 3e664c0..d1d2b95 100644
--- a/doc/lfun/TestIgnore
+++ b/doc/lfun/TestIgnore
@@ -1,66 +1,88 @@
+
 TestIgnore()
+************
 
-FUNKTION:
-     public int TestIgnore(string|string* arg)
 
-DEFINIERT IN:
-     /std/player/comm.c
+FUNKTION
+========
 
-ARGUMENTE:
-     arg
-         String oder Array von Strings, die getestet werden sollen,
-         Format jeweils: [spieler].aktion[.qualifizierer]
+   public int TestIgnore(string|string* arg)
 
-RUeCKGABEWERT:
-     0, wenn arg nicht ignoriert wird
-     MSG_IGNORED, wenn (min. ein Element von) arg ignoriert wird
 
-BESCHREIBUNG:
-     Es wird geprueft, ob der Spieler irgendeinen Eintrag auf seiner Liste
-     hat, der dazu fuehrt, dass <arg> ignoriert wird. Hierbei kommen je nach
-     den Angaben in <arg> folgende Regeln zum Tragen:
-     1) spieler
-        Wird der Spieler ignoriert?
-     2) .aktion
-        Ignoriert der Spieler .aktion, d.h. die Aktion komplett (OHNE
-        Qualifizierer)?
-     3) spieler.aktion
-        Ignoriert der Spieler spieler, .aktion oder spieler.aktion?
-     4) spieler.aktion.qualifizierer
-        Ignoriert der Spieler spieler, .aktion, spieler.aktion oder
-        spieler.aktion.qualifizierer?
-     5) .aktion.qualifizierer
-        Ignoriert der Spieler .aktion oder .aktion.qualifizierer?
+DEFINIERT IN
+============
 
-     Da TestIgnore() damit durchaus etwas aufwendiger sein kann, sollte
-     man dies nicht unnoetig oft aufrufen. (Braucht man das Ergebnis z.B.
-     kurz spaeter nochmal, koennte man das Ergebnis speichern.) Wird der
-     Qualifizierer nicht gebraucht, sollte man ihn weglassen.
+   /std/player/comm.c
 
-BEISPIEL:
-     if (!this_player()->TestIgnore("andy"))
-       tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
 
-     // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
-     // Spieler (this_player()) an einem anderen Spieler (target)
-     if (!target->TestIgnore( ({getuid(this_player()) + ".kratze",
-                                   getuid(this_player()) + ".kratz"}) ))
-     {
-       tell_object(target, this_player()->Name()+" kratzt dich.\n");
-       tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
-     }
-     else
-       tell_object(this_player(), target->Name()+" ignoriert dich.\n");
+ARGUMENTE
+=========
 
-     // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
-     // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
-     // an einem zu kurierenden Spieler (target)
-     if (target->TestIgnore(getuid(caster)+".kuriere.klerus"))
-       tell_object(caster, break_string(
-         target->Name()+" ignoriert deinen Versuch.", 78));
+   arg
+       String oder Array von Strings, die getestet werden sollen,
+       Format jeweils: [spieler].aktion[.qualifizierer]
 
-SIEHE AUCH:
-     P_IGNORE, AddIgnore, RemoveIgnore, TestIgnoreSimple, /std/player/comm.c
+
+RUeCKGABEWERT
+=============
+
+   0, wenn arg nicht ignoriert wird
+   MSG_IGNORED, wenn (min. ein Element von) arg ignoriert wird
+
+
+BESCHREIBUNG
+============
+
+   Es wird geprueft, ob der Spieler irgendeinen Eintrag auf seiner Liste
+   hat, der dazu fuehrt, dass <arg> ignoriert wird. Hierbei kommen je nach
+   den Angaben in <arg> folgende Regeln zum Tragen:
+   1) spieler
+      Wird der Spieler ignoriert?
+   2) .aktion
+      Ignoriert der Spieler .aktion, d.h. die Aktion komplett (OHNE
+      Qualifizierer)?
+   3) spieler.aktion
+      Ignoriert der Spieler spieler, .aktion oder spieler.aktion?
+   4) spieler.aktion.qualifizierer
+      Ignoriert der Spieler spieler, .aktion, spieler.aktion oder
+      spieler.aktion.qualifizierer?
+   5) .aktion.qualifizierer
+      Ignoriert der Spieler .aktion oder .aktion.qualifizierer?
+
+   Da TestIgnore() damit durchaus etwas aufwendiger sein kann, sollte
+   man dies nicht unnoetig oft aufrufen. (Braucht man das Ergebnis z.B.
+   kurz spaeter nochmal, koennte man das Ergebnis speichern.) Wird der
+   Qualifizierer nicht gebraucht, sollte man ihn weglassen.
+
+
+BEISPIEL
+========
+
+   if (!this_player()->TestIgnore("andy"))
+     tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
+
+   // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
+   // Spieler (this_player()) an einem anderen Spieler (target)
+   if (!target->TestIgnore( ({getuid(this_player()) + ".kratze",
+                                 getuid(this_player()) + ".kratz"}) ))
+   {
+     tell_object(target, this_player()->Name()+" kratzt dich.\n");
+     tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
+   }
+   else
+     tell_object(this_player(), target->Name()+" ignoriert dich.\n");
+
+   // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
+   // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
+   // an einem zu kurierenden Spieler (target)
+   if (target->TestIgnore(getuid(caster)+".kuriere.klerus"))
+     tell_object(caster, break_string(
+       target->Name()+" ignoriert deinen Versuch.", 78));
+
+
+SIEHE AUCH
+==========
+
+   P_IGNORE, AddIgnore, RemoveIgnore, TestIgnoreSimple, /std/player/comm.c
 
 26.04.2014 Zesstra
-
diff --git a/doc/lfun/TestIgnoreSimple b/doc/lfun/TestIgnoreSimple
index 542632e..c0ec76e 100644
--- a/doc/lfun/TestIgnoreSimple
+++ b/doc/lfun/TestIgnoreSimple
@@ -1,55 +1,77 @@
+
 TestIgnoreSimple()
+******************
 
-FUNKTION:
-     public int TestIgnoreSimple(string *arg)
 
-DEFINIERT IN:
-     /std/player/comm.c
+FUNKTION
+========
 
-ARGUMENTE:
-     arg
-         Liste von Strings, die getestet werden sollen
+   public int TestIgnoreSimple(string *arg)
 
-BESCHREIBUNG:
-     TestIgnoreSimple() prueft, ob der Spieler min. einen der uebergebenen
-     Eintraege auf seiner Ignoriereliste hat.
-     Falls man mehrere Eintraege pruefen muss/moechte, ist es schneller, alle
-     Eintraege in einem zu uebergeben anstatt fuer jeden einzeln 
-     TestIgnoreSimple() aufzurufen.
 
-RUeCKGABEWERT:
-     1, falls es mindestens eine Uebereinstimmungen von arg und der
-     Ignoriere-Liste des Spielers gibt.
-     0, sonst.
+DEFINIERT IN
+============
 
-BEISPIEL:
-     if (!this_player()->TestIgnoreSimple(({"andy"})))
-       tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
+   /std/player/comm.c
 
-     // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
-     // Spieler (this_player()) an einem anderen Spieler (target)
-     if (!target->TestIgnoreSimple(getuid(this_player()),
-                             getuid(this_player())+".kratz",
-                             getuid(this_player())+".kratze",
-                             ".kratz", ".kratze"}))) {
-       tell_object(target, this_player()->Name()+" kratzt dich.\n");
-       tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
-     } else
-       tell_object(this_player(), target->Name()+" ignoriert dich.\n");
 
-     // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
-     // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
-     // an einem zu kurierenden Spieler (target)
-     if (target->TestIgnoreSimple(({getuid(caster),
-                              getuid(caster)+".kuriere",
-                              getuid(caster)+".kuriere.klerus",
-                              ".kuriere",
-                              ".kuriere.klerus"})))
-       tell_object(caster, break_string(
-         target->Name()+" ignoriert deinen Versuch.", 78));
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     P_IGNORE, AddIgnore, RemoveIgnore, TestIgnore, /std/player/comm.c
+   arg
+       Liste von Strings, die getestet werden sollen
+
+
+BESCHREIBUNG
+============
+
+   TestIgnoreSimple() prueft, ob der Spieler min. einen der uebergebenen
+   Eintraege auf seiner Ignoriereliste hat.
+   Falls man mehrere Eintraege pruefen muss/moechte, ist es schneller, alle
+   Eintraege in einem zu uebergeben anstatt fuer jeden einzeln
+   TestIgnoreSimple() aufzurufen.
+
+
+RUeCKGABEWERT
+=============
+
+   1, falls es mindestens eine Uebereinstimmungen von arg und der
+   Ignoriere-Liste des Spielers gibt.
+   0, sonst.
+
+
+BEISPIEL
+========
+
+   if (!this_player()->TestIgnoreSimple(({"andy"})))
+     tell_object(this_player(), "Andy teilt Dir mit: Hallo!\n");
+
+   // Beispiel fuer eine Ignore-Check fuer Aktion (kratzen) fuer einen
+   // Spieler (this_player()) an einem anderen Spieler (target)
+   if (!target->TestIgnoreSimple(getuid(this_player()),
+                           getuid(this_player())+".kratz",
+                           getuid(this_player())+".kratze",
+                           ".kratz", ".kratze"}))) {
+     tell_object(target, this_player()->Name()+" kratzt dich.\n");
+     tell_object(this_player(), "Du kratzt "+target->Name()+".\n");
+   } else
+     tell_object(this_player(), target->Name()+" ignoriert dich.\n");
+
+   // allumfassender Ignorier-Check in einer Gilde (Klerus) auf
+   // eine Aktion (kurieren) fuer einen bestimmten Spieler (den caster)
+   // an einem zu kurierenden Spieler (target)
+   if (target->TestIgnoreSimple(({getuid(caster),
+                            getuid(caster)+".kuriere",
+                            getuid(caster)+".kuriere.klerus",
+                            ".kuriere",
+                            ".kuriere.klerus"})))
+     tell_object(caster, break_string(
+       target->Name()+" ignoriert deinen Versuch.", 78));
+
+
+SIEHE AUCH
+==========
+
+   P_IGNORE, AddIgnore, RemoveIgnore, TestIgnore, /std/player/comm.c
 
 26.04.2014 Zesstra
-
diff --git a/doc/lfun/TestLimitViolation b/doc/lfun/TestLimitViolation
index 9344299..df9f7b2 100644
--- a/doc/lfun/TestLimitViolation
+++ b/doc/lfun/TestLimitViolation
@@ -1,21 +1,39 @@
+
 TestLimitViolation()
-FUNKTION:
-      status TestLimitViolation(mapping check)
+********************
 
-DEFINIERT IN:
-     /std/living/attributes.c
-

-PARAMETER:

-     check	- Mapping mit Attributen: ([<attr>:<wert>])

 
-BESCHREIBUNG:
-     Prueft, ob die Summe der in check enthaltenen Modifikatoren die Summe
-     aller Modifikatoren im Spieler ueber den zugelassenen Grenzwert hebt.
-     
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,

-     P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

+FUNKTION
+========
 
-13.Jun.2004, Muadib
\ No newline at end of file
+   status TestLimitViolation(mapping check)
+
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+PARAMETER
+=========
+
+   check      - Mapping mit Attributen: ([<attr>:<wert>])
+
+
+BESCHREIBUNG
+============
+
+   Prueft, ob die Summe der in check enthaltenen Modifikatoren die Summe
+   aller Modifikatoren im Spieler ueber den zugelassenen Grenzwert hebt.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+13.Jun.2004, Muadib
diff --git a/doc/lfun/TriggerEvent b/doc/lfun/TriggerEvent
index 7b0089f..44dd2e4 100644
--- a/doc/lfun/TriggerEvent
+++ b/doc/lfun/TriggerEvent
@@ -1,59 +1,87 @@
 
-FUNKTION:
-     varargs int TriggerEvent(string eid, mixed data);
-
-DEFINIERT IN:
-     /p/daemon/eventd.c
-DEKLARIERT IN:
-     /sys/events.h
-
-ARGUMENTE:
-     string eid,
-       Die ID des Events, der ausgeloest werden soll.
-       Da dieser String fuer alle Events jeweils eindeutig sein muss, 
-       empfiehlt es sich, fuer eigene Events z.B. als Praefix den eigenen 
-       Magiernamen zu nehmen, z.B. "zesstra_vulkanausbruch".
-       ACHTUNG: IDs, die mit 'evt_lib_' beginnen, sind AUSSCHLIESSLICH der
-       Mudlib vorbehalten!
-
-     mixed data,
-       Daten, die jeder Lauscher uebergeben bekommt. Kann ein beliebiger
-       Datentyp sein. Ggf. ein Mapping oder Array benutzen.
-
-BESCHREIBUNG:
-     Der Event mit der ID 'eid' wird ausgeloest. Mit kurzer Verzoegerung
-     (meist 0-2s) werden alle fuer 'eid' registrierten Lauscher durch Aufruf
-     einer Funktion in ihnen informiert:
-     listener->fun(eid, triggerob, data);
-     'triggerob' ist hierbei das Objekt, welche TriggerEvent() gerufen hat,
-     'data' das, was das triggernde Objekte als Daten weiterverteilen moechte.
-     Die einzelnen fun() in den lauschenden Objekten muessen wissen, was sie
-     mit 'data' anfangen sollen. ;-)
-
-RUeCKGABEWERT:
-     1 fuer Erfolg, <=0 fuer Misserfolg.
-     1   - Erfolg, Event 'eid' wurde ausgeloest.
-     -1  - falsche Argumente wurden uebergeben
-     -2  - nicht-oeffentlicher Event und das triggernde Objekt wurde nicht
-           fuer diesen Event freigegeben (momentan gibt es noch keine
-           nicht-oeffentlichen Events)
-     -3  - Event 'eid' existiert nicht, d.h. es gibt keine Lauscher.
-     -4  - Es gibt zuviele nicht verarbeitete Events.
-
-BEMERKUNGEN:
+TriggerEvent()
+**************
 
 
-BEISPIELE:
-     1. Ein Waechter wird angegriffen:
-        EVENTD->TriggerEvent("xand_holzfaellerlager_angriff", 
-                             (["angreifer": enemy,
-                               "ort": environment(this_object()) ]) );
-        Alle anderen angemeldeten Waechter der Lagers werden nun informiert
-        und koennen ihrerseits reagieren (dem ersten Waechter zuhilfe kommen
-        oder auch die Lagertore schliessen).
+FUNKTION
+========
 
-SIEHE AUCH:
-     events, eventd, UnregisterEvent(), RegisterEvent()
+   varargs int TriggerEvent(string eid, mixed data);
 
-----------------------------------------------------------------------------
+
+DEFINIERT IN
+============
+
+   /p/daemon/eventd.c
+
+
+DEKLARIERT IN
+=============
+
+   /sys/events.h
+
+
+ARGUMENTE
+=========
+
+   string eid,
+     Die ID des Events, der ausgeloest werden soll.
+     Da dieser String fuer alle Events jeweils eindeutig sein muss,
+     empfiehlt es sich, fuer eigene Events z.B. als Praefix den eigenen
+     Magiernamen zu nehmen, z.B. "zesstra_vulkanausbruch".
+     ACHTUNG: IDs, die mit 'evt_lib_' beginnen, sind AUSSCHLIESSLICH der
+     Mudlib vorbehalten!
+
+   mixed data,
+     Daten, die jeder Lauscher uebergeben bekommt. Kann ein beliebiger
+     Datentyp sein. Ggf. ein Mapping oder Array benutzen.
+
+
+BESCHREIBUNG
+============
+
+   Der Event mit der ID 'eid' wird ausgeloest. Mit kurzer Verzoegerung
+   (meist 0-2s) werden alle fuer 'eid' registrierten Lauscher durch Aufruf
+   einer Funktion in ihnen informiert:
+   listener->fun(eid, triggerob, data);
+   'triggerob' ist hierbei das Objekt, welche TriggerEvent() gerufen hat,
+   'data' das, was das triggernde Objekte als Daten weiterverteilen moechte.
+   Die einzelnen fun() in den lauschenden Objekten muessen wissen, was sie
+   mit 'data' anfangen sollen. ;-)
+
+
+RUeCKGABEWERT
+=============
+
+   1 fuer Erfolg, <=0 fuer Misserfolg.
+   1   - Erfolg, Event 'eid' wurde ausgeloest.
+   -1  - falsche Argumente wurden uebergeben
+   -2  - nicht-oeffentlicher Event und das triggernde Objekt wurde nicht
+         fuer diesen Event freigegeben (momentan gibt es noch keine
+         nicht-oeffentlichen Events)
+   -3  - Event 'eid' existiert nicht, d.h. es gibt keine Lauscher.
+   -4  - Es gibt zuviele nicht verarbeitete Events.
+
+
+BEMERKUNGEN
+===========
+
+
+BEISPIELE
+=========
+
+   1. Ein Waechter wird angegriffen:
+      EVENTD->TriggerEvent("xand_holzfaellerlager_angriff",
+                           (["angreifer": enemy,
+                             "ort": environment(this_object()) ]) );
+      Alle anderen angemeldeten Waechter der Lagers werden nun informiert
+      und koennen ihrerseits reagieren (dem ersten Waechter zuhilfe kommen
+      oder auch die Lagertore schliessen).
+
+
+SIEHE AUCH
+==========
+
+   events, eventd, UnregisterEvent(), RegisterEvent()
+
 Last modified: 15.08.2007, Zesstra
diff --git a/doc/lfun/UnregisterEvent b/doc/lfun/UnregisterEvent
index 0de361a..6d9bfb7 100644
--- a/doc/lfun/UnregisterEvent
+++ b/doc/lfun/UnregisterEvent
@@ -1,49 +1,79 @@
 
-FUNKTION:
-     int UnregisterEvent(string eid, object listener);
+UnregisterEvent()
+*****************
 
-DEFINIERT IN:
-     /p/daemon/eventd.c
-DEKLARIERT IN:
-     /sys/events.h
 
-ARGUMENTE:
-     string eid,
-       Die ID des Events, vom dem man sich abmelden will.
-     object listener,
-       Das Objekt, das als Lauscher ausgetragen werden soll.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Objekt 'listener' wird als Lauscher dieses Events ausgetragen. Ab
-     diesem Moment wird es bei Events vom Typ 'eid' nicht mehr informiert.     
+   int UnregisterEvent(string eid, object listener);
 
-     Hat der Event 'eid' im Anschluss keine Lauscher mehr, wird er implizit
-     geloescht.
 
-RUeCKGABEWERT:
-     1 fuer Erfolg, <=0 fuer Misserfolg.
-     1   - Erfolg, 'listener' wurde eingetragen.
-     -1  - falsche Argumente uebergeben
-     -2  - 'listener' ist nicht fuer 'eid' registriert.
-    
-BEMERKUNGEN:
-     Wenn sich ein Objekt vor Zerstoerung nicht abmeldet, wird es ggf. beim
-     naechsten Auftreten von 'eid' automatisch ausgetragen.
-     Falls Blueprints nach Neuladen nicht automatisch angemeldet sein sollen,
-     sollten sie sich im remove() explizit abmelden.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     1. Ein Objekt moechte nicht mehr ueber Spielertode informiert werden:
-          EVENTD->UnregisterEvent(EVT_LIB_PLAYER_DEATH, this_object());
+   /p/daemon/eventd.c
 
-     2. Ein Objekt moechte sich bei Zerstoerung abmelden:
-       varargs int remove(int silent) {
-           ...
-           EVENTD->UnregisterEvent("zesstra_vulkanausbruch",this_object());
-       }
 
-SIEHE AUCH:
-     events, eventd, UnregisterEvent(), RegisterEvent()
+DEKLARIERT IN
+=============
 
-----------------------------------------------------------------------------
+   /sys/events.h
+
+
+ARGUMENTE
+=========
+
+   string eid,
+     Die ID des Events, vom dem man sich abmelden will.
+   object listener,
+     Das Objekt, das als Lauscher ausgetragen werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Das Objekt 'listener' wird als Lauscher dieses Events ausgetragen. Ab
+   diesem Moment wird es bei Events vom Typ 'eid' nicht mehr informiert.
+
+   Hat der Event 'eid' im Anschluss keine Lauscher mehr, wird er implizit
+   geloescht.
+
+
+RUeCKGABEWERT
+=============
+
+   1 fuer Erfolg, <=0 fuer Misserfolg.
+   1   - Erfolg, 'listener' wurde eingetragen.
+   -1  - falsche Argumente uebergeben
+   -2  - 'listener' ist nicht fuer 'eid' registriert.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn sich ein Objekt vor Zerstoerung nicht abmeldet, wird es ggf. beim
+   naechsten Auftreten von 'eid' automatisch ausgetragen.
+   Falls Blueprints nach Neuladen nicht automatisch angemeldet sein sollen,
+   sollten sie sich im remove() explizit abmelden.
+
+
+BEISPIELE
+=========
+
+   1. Ein Objekt moechte nicht mehr ueber Spielertode informiert werden:
+        EVENTD->UnregisterEvent(EVT_LIB_PLAYER_DEATH, this_object());
+
+   2. Ein Objekt moechte sich bei Zerstoerung abmelden:
+     varargs int remove(int silent) {
+         ...
+         EVENTD->UnregisterEvent("zesstra_vulkanausbruch",this_object());
+     }
+
+
+SIEHE AUCH
+==========
+
+   events, eventd, UnregisterEvent(), RegisterEvent()
+
 Last modified: 15.08.2007, Zesstra
diff --git a/doc/lfun/UnregisterHelperNPC b/doc/lfun/UnregisterHelperNPC
index de384fd..79c18f6 100644
--- a/doc/lfun/UnregisterHelperNPC
+++ b/doc/lfun/UnregisterHelperNPC
@@ -1,45 +1,72 @@
+
 UnregisterHelperNPC()
-FUNKTION:
-     public int UnregisterHelperNPC(object npc);
+*********************
 
-DEFINIERT IN:
-     /std/player/combat.c
 
-ARGUMENTE:
-     object npc
-       Objekt des helfenden NPC, der abgemeldet werden soll.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Mit dieser Funktion wird ein einem Spieler helfender NPC im Spieler
-     wieder abgemeldet, wenn dieser dem Spieler ab jetzt nicht mehr hilft.
+   public int UnregisterHelperNPC(object npc);
 
-     Wenn ein Helfer-NPC zerstoert wird, ist der Aufruf nicht noetig.
-     Bleibt das Objekt des NPC aber existent, bitte auf jeden Fall wieder
-     ordentlich abmelden, da ansonsten ggf. der Spieler unnoetig blockiert
-     wird.
 
-RUeCKGABEWERT:
-     1, wenn die Abmeldung erfolgreich war.
-     0 sonst, z.B. wenn der NPC gar nicht als Helfer registriert war.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Diese Funktion setzt bei der Erfolg die Property P_HELPER_NPC in <npc>
-     auf 0.
+   /std/player/combat.c
 
-BEISPIELE:
-     1. Ein NPC, der dem Spieler nicht mehr helfen will und normalerweisen im
-        Raum verbleiben soll:
-     tell_object(spieler, "Ich mag Dich nicht mehr, Du bist doof!\n");
-     if (spieler->UnregisterHelperNPC(this_object()) != 1) {
-       // das ist ja bloed...
-       remove(0);
-     }
-     else {
-       tell_room(environment(),
-           Name()+" dreht " +spieler->Name(WEM) + " schmollend den Ruecken "
-           "zu.\n");
-     }
 
-SIEHE AUCH:
-    UnregisterHelperNPC()
-    P_HELPER_NPC
+ARGUMENTE
+=========
+
+   object npc
+     Objekt des helfenden NPC, der abgemeldet werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion wird ein einem Spieler helfender NPC im Spieler
+   wieder abgemeldet, wenn dieser dem Spieler ab jetzt nicht mehr hilft.
+
+   Wenn ein Helfer-NPC zerstoert wird, ist der Aufruf nicht noetig.
+   Bleibt das Objekt des NPC aber existent, bitte auf jeden Fall wieder
+   ordentlich abmelden, da ansonsten ggf. der Spieler unnoetig blockiert
+   wird.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn die Abmeldung erfolgreich war.
+   0 sonst, z.B. wenn der NPC gar nicht als Helfer registriert war.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion setzt bei der Erfolg die Property P_HELPER_NPC in <npc>
+   auf 0.
+
+
+BEISPIELE
+=========
+
+   1. Ein NPC, der dem Spieler nicht mehr helfen will und normalerweisen im
+      Raum verbleiben soll:
+   tell_object(spieler, "Ich mag Dich nicht mehr, Du bist doof!\n");
+   if (spieler->UnregisterHelperNPC(this_object()) != 1) {
+     // das ist ja bloed...
+     remove(0);
+   }
+   else {
+     tell_room(environment(),
+         Name()+" dreht " +spieler->Name(WEM) + " schmollend den Ruecken "
+         "zu.\n");
+   }
+
+
+SIEHE AUCH
+==========
+
+   UnregisterHelperNPC()
+   P_HELPER_NPC
diff --git a/doc/lfun/UnregisterHelperObject b/doc/lfun/UnregisterHelperObject
index eefd84e..d6242c9 100644
--- a/doc/lfun/UnregisterHelperObject
+++ b/doc/lfun/UnregisterHelperObject
@@ -1,47 +1,71 @@
-FUNKTION:
-     int UnregisterHelperObject(object helper, int type);
 
-DEFINIERT IN:
-     /std/living/helpers.c
+UnregisterHelperObject()
+************************
 
-ARGUMENTE:
-     object helper
-       Das Objekt, das als Hilfsobjekt deregistriert werden soll.
-     int type
-       Helfertyp, einer der in /sys/living/helpers.h definierten Typen:
-       - HELPER_TYPE_AERIAL fuer die Flug-/Segelunterstuetzung
-       - HELPER_TYPE_AQUATIC fuer Tauchunterstuetzung
 
-BESCHREIBUNG:
-     Das als Hilfsobjekt fuer bestimmte Aktivitaeten wie zum Beispiel Tauchen
-     oder Fliegen bei einem Lebewesen registrierte Objekt "helper" meldet
-     sich bei diesem ab.
-     Hinweis: fuer eine temporaer gueltige "Nicht-Zustaendigkeit" kaeme auch
-     in Frage, in dieser Zeit einfach "0" zurueckzugeben, statt sich
-     komplett abzumelden.
+FUNKTION
+========
 
-RUECKGABEWERTE:
-      1  Objekt wurde erfolgreich ausgetragen (HELPER_SUCCESS)
-     -1  angegebenes Hilfsobjekt existiert nicht (HELPER_NO_CALLBACK_OBJECT)
-     -3  angegebenes Hilfsobjekt war gar nicht angemeldet
-         (HELPER_NOTHING_TO_UNREGISTER)
+   int UnregisterHelperObject(object helper, int type);
 
-BEISPIEL:
-     Eine luftgefuellte Blase hatte sich als Tauch-Helfer am Spieler
-     angemeldet, ist jetzt aber verbraucht und meldet sich daher ab:
 
-     // Austragen im Spielerobjekt
-     void BlaseAustragen() {
-       [...]
-       if ( TP->UnregisterHelperObject(ME, HELPER_TYPE_AQUATIC)
-            == HELPER_SUCCESS )
-         remove();
-     }
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Funktionen:  RegisterHelperObject()
-     Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS, P_AQUATIC_HELPERS
-     Sonstiges:   /sys/living/helpers.h
+   /std/living/helpers.c
+
+
+ARGUMENTE
+=========
+
+   object helper
+     Das Objekt, das als Hilfsobjekt deregistriert werden soll.
+   int type
+     Helfertyp, einer der in /sys/living/helpers.h definierten Typen:
+     - HELPER_TYPE_AERIAL fuer die Flug-/Segelunterstuetzung
+     - HELPER_TYPE_AQUATIC fuer Tauchunterstuetzung
+
+
+BESCHREIBUNG
+============
+
+   Das als Hilfsobjekt fuer bestimmte Aktivitaeten wie zum Beispiel Tauchen
+   oder Fliegen bei einem Lebewesen registrierte Objekt "helper" meldet
+   sich bei diesem ab.
+   Hinweis: fuer eine temporaer gueltige "Nicht-Zustaendigkeit" kaeme auch
+   in Frage, in dieser Zeit einfach "0" zurueckzugeben, statt sich
+   komplett abzumelden.
+
+
+RUECKGABEWERTE
+==============
+
+    1  Objekt wurde erfolgreich ausgetragen (HELPER_SUCCESS)
+   -1  angegebenes Hilfsobjekt existiert nicht (HELPER_NO_CALLBACK_OBJECT)
+   -3  angegebenes Hilfsobjekt war gar nicht angemeldet
+       (HELPER_NOTHING_TO_UNREGISTER)
+
+
+BEISPIEL
+========
+
+   Eine luftgefuellte Blase hatte sich als Tauch-Helfer am Spieler
+   angemeldet, ist jetzt aber verbraucht und meldet sich daher ab:
+
+   // Austragen im Spielerobjekt
+   void BlaseAustragen() {
+     [...]
+     if ( TP->UnregisterHelperObject(ME, HELPER_TYPE_AQUATIC)
+          == HELPER_SUCCESS )
+       remove();
+   }
+
+
+SIEHE AUCH
+==========
+
+   Funktionen:  RegisterHelperObject()
+   Properties:  P_HELPER_OBJECTS, P_AERIAL_HELPERS, P_AQUATIC_HELPERS
+   Sonstiges:   /sys/living/helpers.h
 
 19.02.2013 Arathorn
-
diff --git a/doc/lfun/Unwear b/doc/lfun/Unwear
index 624c7fc..0ef0a2a 100644
--- a/doc/lfun/Unwear
+++ b/doc/lfun/Unwear
@@ -1,38 +1,65 @@
+
 Unwear()
-FUNKTION:
-     public int Unwear(object ob) 
+********
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Die Ruestung oder Kleidung, die ausgezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
-     oder das Kleidungsstueck <ob> aus.
-     ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung aus P_ARMOURS bzw. P_CLOTHING ausgetragen wird. Es
-     finden zur Zeit keine Pruefungen statt, ob das Lebewesen den Gegenstand
-     ueberhaupt ausziehen kann. Genausowenig werden Funktionen wie
-     InformUnwear()/RemoveFunc() gerufen oder etwaige Stat-Boni deaktiviert.
+   public int Unwear(object ob)
 
-     Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
 
-RUeCKGABEWERT:
-     1, wenn das Ausziehen erfolgreich war.
-     0 sonst.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+   /std/living/clothing.c
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), UnwearArmour(), UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
 
-ZULETZT GEAeNDERT:
+ARGUMENTE
+=========
+
+   object ob
+     Die Ruestung oder Kleidung, die ausgezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
+   oder das Kleidungsstueck <ob> aus.
+   ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung aus P_ARMOURS bzw. P_CLOTHING ausgetragen wird. Es
+   finden zur Zeit keine Pruefungen statt, ob das Lebewesen den Gegenstand
+   ueberhaupt ausziehen kann. Genausowenig werden Funktionen wie
+   InformUnwear()/RemoveFunc() gerufen oder etwaige Stat-Boni deaktiviert.
+
+   Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Ausziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), UnwearArmour(), UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/UnwearArmour b/doc/lfun/UnwearArmour
index 86b55da..b3c7d77 100644
--- a/doc/lfun/UnwearArmour
+++ b/doc/lfun/UnwearArmour
@@ -1,38 +1,65 @@
+
 UnwearArmour()
-FUNKTION:
-     public int UnwearArmour(object ob) 
+**************
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Die Ruestung, die ausgezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
-     <ob> aus.
-     ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung aus P_ARMOURS ausgetragen wird. Es finden zur Zeit
-     keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
-     ausziehen kann. Genausowenig werden Funktionen wie
-     InformUnwear()/RemoveFunc() gerufen oder etwaige Stat-Boni deaktiviert.
+   public int UnwearArmour(object ob)
 
-     Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
 
-RUeCKGABEWERT:
-     1, wenn das Ausziehen erfolgreich war.
-     0 sonst.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+   /std/living/clothing.c
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), Unwear(), UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
 
-ZULETZT GEAeNDERT:
+ARGUMENTE
+=========
+
+   object ob
+     Die Ruestung, die ausgezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
+   <ob> aus.
+   ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung aus P_ARMOURS ausgetragen wird. Es finden zur Zeit
+   keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
+   ausziehen kann. Genausowenig werden Funktionen wie
+   InformUnwear()/RemoveFunc() gerufen oder etwaige Stat-Boni deaktiviert.
+
+   Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Ausziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), Unwear(), UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/UnwearClothing b/doc/lfun/UnwearClothing
index 0556654..fe0372b 100644
--- a/doc/lfun/UnwearClothing
+++ b/doc/lfun/UnwearClothing
@@ -1,38 +1,65 @@
+
 UnwearClothing()
-FUNKTION:
-     public int UnwearClothing(object ob) 
+****************
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Das Kleidungsstuck, das ausgezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht das
-     Kleidungsstueck <ob> aus.
-     ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung aus P_CLOTHING ausgetragen wird. Es finden zur Zeit
-     keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
-     ausziehen kann. Genausowenig werden Funktionen wie
-     InformUnwear()/RemoveFunc() gerufen.
+   public int UnwearClothing(object ob)
 
-     Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
 
-RUeCKGABEWERT:
-     1, wenn das Ausziehen erfolgreich war.
-     0 sonst.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+   /std/living/clothing.c
 
-SIEHE AUCH:
-     Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
 
-ZULETZT GEAeNDERT:
+ARGUMENTE
+=========
+
+   object ob
+     Das Kleidungsstuck, das ausgezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht das
+   Kleidungsstueck <ob> aus.
+   ABER: 'Ausziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung aus P_CLOTHING ausgetragen wird. Es finden zur Zeit
+   keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
+   ausziehen kann. Genausowenig werden Funktionen wie
+   InformUnwear()/RemoveFunc() gerufen.
+
+   Die Funktion ist nur dazu gedacht, im Zuge des Ausziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Ausziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), WearClothing(), Unwear(), UnwearArmour()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/UnwieldFunc b/doc/lfun/UnwieldFunc
index 9e4929c..0301182 100644
--- a/doc/lfun/UnwieldFunc
+++ b/doc/lfun/UnwieldFunc
@@ -1,52 +1,74 @@
+
 UnwieldFunc()
+*************
 
-FUNKTION:
-     int UnwieldFunc(object weapon, int info, object user);
 
-DEFINIERT IN:
-     eigenen Objekten, fuer /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     weapon (object)
-          Die Waffe, die weggesteckt werden soll.
-     info (int)
-          Bei (info&M_SILENT) wird keine Meldung ueber das Wegstecken
-          ausgegeben.
-          Bei (info&M_NOCHECK) wird die Waffe auch weggesteckt, wenn
-          sie verflucht ist. Die tritt insbesondere dann auf, wenn der
-          Spieler, der die Waffe benutzt, stirbt und die Waffe in
-          die Leiche bewegt wird.
-     user (object)
-          Das Lebewesen, welches die Waffe gerade gezueckt hat und sie nun
-          ausziehen will.
+   int UnwieldFunc(object weapon, int info, object user);
 
-BESCHREIBUNG:
-     Hier koennen zusaetzliche Abfragen vorgenommen werden, ob sich die
-     Waffe <weapon> wegstecken laesst oder nicht.
 
-RUeCKGABEWERT:
-     0, wenn sich die Waffe nicht wegstecken laesst, ansonsten ungleich 0.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Verfluchte Waffen, die sich erst nach Entfernung des Fluches wegstecken
-     lassen, sollte man besser mit P_CURSED realisieren.
-     Selbst wenn man einen Wert ungleich Null zurueckgibt, ist das noch
-     keine Garantie, dass sich die Waffe auch wirklich zuecken laesst! Der
-     Spieler koennte zum Beispiel noch eine Waffe gezueckt haben, die sich
-     nicht wegstecken laesst, etc.
-     Wenn ihr sicher sein wollt, dass der Spieler ein Objekt gezueckt hat,
-     benutzt bitte InformWear().
-     Bitte nicht drauf verlassen, dass this_player() das Lebewesen ist,
-     welches die Waffe gezueckt und wegstecken will.
-     Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
-     erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
-     Objekte zu aendern.
+   eigenen Objekten, fuer /std/weapon/combat.c
+
+
+ARGUMENTE
+=========
+
+   weapon (object)
+        Die Waffe, die weggesteckt werden soll.
+   info (int)
+        Bei (info&M_SILENT) wird keine Meldung ueber das Wegstecken
+        ausgegeben.
+        Bei (info&M_NOCHECK) wird die Waffe auch weggesteckt, wenn
+        sie verflucht ist. Die tritt insbesondere dann auf, wenn der
+        Spieler, der die Waffe benutzt, stirbt und die Waffe in
+        die Leiche bewegt wird.
+   user (object)
+        Das Lebewesen, welches die Waffe gerade gezueckt hat und sie nun
+        ausziehen will.
+
+
+BESCHREIBUNG
+============
+
+   Hier koennen zusaetzliche Abfragen vorgenommen werden, ob sich die
+   Waffe <weapon> wegstecken laesst oder nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   0, wenn sich die Waffe nicht wegstecken laesst, ansonsten ungleich 0.
+
+
+BEMERKUNGEN
+===========
+
+   Verfluchte Waffen, die sich erst nach Entfernung des Fluches wegstecken
+   lassen, sollte man besser mit P_CURSED realisieren.
+   Selbst wenn man einen Wert ungleich Null zurueckgibt, ist das noch
+   keine Garantie, dass sich die Waffe auch wirklich zuecken laesst! Der
+   Spieler koennte zum Beispiel noch eine Waffe gezueckt haben, die sich
+   nicht wegstecken laesst, etc.
+   Wenn ihr sicher sein wollt, dass der Spieler ein Objekt gezueckt hat,
+   benutzt bitte InformWear().
+   Bitte nicht drauf verlassen, dass this_player() das Lebewesen ist,
+   welches die Waffe gezueckt und wegstecken will.
+   Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
+   erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
+   Objekte zu aendern.
+
 
 SIEHE AUCH
-     P_WIELD_MSG, P_UNWIELD_MSG, P_WEAR_MSG, P_UNWEAR_MSG
-     DoWield(), DoUnwield(), InformWield(), InformUnwield(), 
-     UnwieldFunc, WieldFunc() 
-     /std/weapon/combat.c
+==========
 
-----------------------------------------------------------------------------
+   P_WIELD_MSG, P_UNWIELD_MSG, P_WEAR_MSG, P_UNWEAR_MSG
+   DoWield(), DoUnwield(), InformWield(), InformUnwield(),
+   UnwieldFunc, WieldFunc()
+   /std/weapon/combat.c
+
 02.02.2009, Zesstra
diff --git a/doc/lfun/UpdateAttributes b/doc/lfun/UpdateAttributes
index ef5a24f..cdebaa7 100644
--- a/doc/lfun/UpdateAttributes
+++ b/doc/lfun/UpdateAttributes
@@ -1,32 +1,52 @@
+
 UpdateAttributes()
-FUNKTION:
-     void UpdateAttributes()
+******************
 
-DEFINIERT IN:
-     /std/living/attributes.c
 
-BESCHREIBUNG:
-     Rechnet damit alle Attributmodifier der im Inventory befindlichen 

-     (P_X_ATTR_MOD, P_X_HEALTH_MOD) und getragenen/gezueckten 

-     (P_M_HEALTH_MOD, P_M_ATTR_MOD) Objekte und aller Attributoffsets 

-     zusammen und speichert sie in einer intern fuer Attribute 

-     verwendete Variablen.
-     Berechnet darauf basierend HP und SP neu.
-     

-     Die Bedingungen fuer die ueber P_TIMED_ATTR_MOD gesetzten 

-     Attributveraenderungen werden im Heartbeat in der Funktion

-     attribute_hb ueberprueft.

+FUNKTION
+========
 
-BEMERKUNGEN:
-     Sollte nach Einbringen neuer Modifikatorobjekte am Living gerufen
-     werden.
+   void UpdateAttributes()
 
-SIEHE AUCH:

-	QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-	SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-	SetTimedAttrModifier(), QueryTimedAttrModifier(), 

-	DeleteTimedAttrModifier(),

-	P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,

-	P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

-----------------------------------------------------------------------------

-09.05.2007 by Zesstra

+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+BESCHREIBUNG
+============
+
+   Rechnet damit alle Attributmodifier der im Inventory befindlichen
+   (P_X_ATTR_MOD, P_X_HEALTH_MOD) und getragenen/gezueckten
+   (P_M_HEALTH_MOD, P_M_ATTR_MOD) Objekte und aller Attributoffsets
+   zusammen und speichert sie in einer intern fuer Attribute
+   verwendete Variablen.
+   Berechnet darauf basierend HP und SP neu.
+
+
+
+   Die Bedingungen fuer die ueber P_TIMED_ATTR_MOD gesetzten
+   Attributveraenderungen werden im Heartbeat in der Funktion
+   attribute_hb ueberprueft.
+
+
+BEMERKUNGEN
+===========
+
+   Sollte nach Einbringen neuer Modifikatorobjekte am Living gerufen
+   werden.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   SetTimedAttrModifier(), QueryTimedAttrModifier(),
+   DeleteTimedAttrModifier(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
+
+09.05.2007 by Zesstra
diff --git a/doc/lfun/UpdateResistanceStrengths b/doc/lfun/UpdateResistanceStrengths
index 48747b3..8ae9198 100644
--- a/doc/lfun/UpdateResistanceStrengths
+++ b/doc/lfun/UpdateResistanceStrengths
@@ -1,26 +1,43 @@
+
 UpdateResistanceStrengths()
+***************************
 
-FUNKTION:
-     public void UpdateResistanceStrengths()
 
-DEFINIERT IN:
-     /std/living/combat.c
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die Funktion wird intern mehrmals (durch Defend, AddResistanceModifier
-     und RemoveResistanceModifier) aufgerufen. In ihr wird das Resistenz-
-     mapping zusammengerechnet und Eintraege geloescht, deren Eintraege
-     invalid sind oder deren setzende Objekte geloescht wurden.
+   public void UpdateResistanceStrengths()
 
-RUeCKGABEWERT:
-     keiner
 
-SIEHE AUCH:
-     Berechnung:	CheckResistance(), Defend()
-     Modifikatoren:	AddResistanceModifier, RemoveResistanceModifier(),
-			P_RESISTANCE_MODIFIER
-     simple Resistenz:	P_RESISTANCE, P_VULNERABILITY
-     Hauptmapping:	P_RESISTANCE_STRENGTHS
-     anderes:		balance, /std/armour/combat.c, /std/living/combat.c
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion wird intern mehrmals (durch Defend, AddResistanceModifier
+   und RemoveResistanceModifier) aufgerufen. In ihr wird das Resistenz-
+   mapping zusammengerechnet und Eintraege geloescht, deren Eintraege
+   invalid sind oder deren setzende Objekte geloescht wurden.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   Berechnung:        CheckResistance(), Defend()
+   Modifikatoren:     AddResistanceModifier, RemoveResistanceModifier(),
+                      P_RESISTANCE_MODIFIER
+   simple Resistenz:  P_RESISTANCE, P_VULNERABILITY
+   Hauptmapping:      P_RESISTANCE_STRENGTHS
+   anderes:           balance, /std/armour/combat.c, /std/living/combat.c
 
 29.Apr 2002, Gloinson@MG
diff --git a/doc/lfun/UseHands b/doc/lfun/UseHands
index a4fbc8d..d11723c 100644
--- a/doc/lfun/UseHands
+++ b/doc/lfun/UseHands
@@ -1,37 +1,61 @@
-UseHands
-FUNKTION:
-     public varargs int UseHands(object ob, int num)
 
-DEFINIERT IN:
-     /std/living/combat.c
+UseHands()
+**********
 
-ARGUMENTE:
-     ob  - das Objekt, das die Haende belegen soll
-     num - die Anzahl der zu belegenden Haende    
 
-RUECKGABEWERT:
-     1, fuer Erfolg
-     0, sonst     
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Belegt, wenn moeglich Haende eines Livings durch ein bestimmtes
-     Objekt. Wenn die Anzahl der freien Haende (P_MAX_HANDS-P_USED_HANDS)
-     kleiner ist als "num", dann schlaegt diese Belegung fehl.
+   public varargs int UseHands(object ob, int num)
 
-BEISPIELE:
-     > halte seil fest
-     ...
-     this_player()->UseHands(this_object(),2);
-     ...
 
-     > lasse seil los
-     ...
-     this_player()->FreeHands(this_object());
-     ...
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     P_HANDS, P_HANDS_USED_BY
-     P_MAX_HANDS, P_USED_HANDS, P_FREE_HANDS
-     FreeHands
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   ob  - das Objekt, das die Haende belegen soll
+   num - die Anzahl der zu belegenden Haende
+
+
+RUECKGABEWERT
+=============
+
+   1, fuer Erfolg
+   0, sonst
+
+
+BESCHREIBUNG
+============
+
+   Belegt, wenn moeglich Haende eines Livings durch ein bestimmtes
+   Objekt. Wenn die Anzahl der freien Haende (P_MAX_HANDS-P_USED_HANDS)
+   kleiner ist als "num", dann schlaegt diese Belegung fehl.
+
+
+BEISPIELE
+=========
+
+   > halte seil fest
+   ...
+   this_player()->UseHands(this_object(),2);
+   ...
+
+   > lasse seil los
+   ...
+   this_player()->FreeHands(this_object());
+   ...
+
+
+SIEHE AUCH
+==========
+
+   P_HANDS, P_HANDS_USED_BY
+   P_MAX_HANDS, P_USED_HANDS, P_FREE_HANDS
+   FreeHands
 
 1.Feb.2004 Gloinson
diff --git a/doc/lfun/UseSkill b/doc/lfun/UseSkill
index 3b12bd8..4f3398d 100644
--- a/doc/lfun/UseSkill
+++ b/doc/lfun/UseSkill
@@ -1,48 +1,74 @@
+
 UseSkill()
-FUNKTION:
-    public varargs mixed UseSkill(string skill, mapping args)
+**********
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    string skill     Skill-Name
-    mapping args     Argumente (veraenderte Skillmapping-Informationen)
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Benutzt einen Skill. Dieser Skill sollte (als grossgeschriebener Skill)
-    im Living vorliegen und das Living darf kein Geist sein.
-    
-    Die Argumente 'args' werden temporaer auf das Skillmapping des Living
-    addiert (also nur fuer diesen Aufruf und SI_INHERIT gueltig).
-    
-    Eine ausfuehrbare Skill-Funktion zum Skill wird in folgender
-    Reihenfolge bestimmt:
-    - eine gesetzte SI_CLOSURE nutzen
-    - ein gesetztes SI_SKILLFUNC in der gesetzten Gilde nutzen
-    - im Living die Funktion "StdSkill_"+skill (zB Waffenskills) nutzen
-    - QuerySkillAbility() nutzen
-    Die so bestimmte Skill-Funktion wird dann als SI_CLOSURE im Spieler
-    gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
-    Die Methode wird dann gerufen (der Skill also angewandt).
-    
-    Standardmaessig gibt ein UseSkill() also einfach den SI_SKILLABILITY-Wert
-    eines Skills zurueck, es sei denn, eine Funktion wurde fuer den Skill
-    an einer der oben genannten Stellen implementiert.
-    
-    Ein eventuell uebergeordneter Skill (SI_INHERIT) wird mit dem durch den
-    Aufruf der Skill-Funktion veraenderten Mapping mit UseSkill(skill, args)
-    ebenfalls noch ausgefuehrt, bevor das Resultat zurueckgegeben wird.
+   public varargs mixed UseSkill(string skill, mapping args)
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSpell
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
-    Spellbook:      Learn, SpellSuccess, Erfolg, Misserfolg
 
-4. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/living/skills.c
+
+
+ARGUMENTE
+=========
+
+   string skill     Skill-Name
+   mapping args     Argumente (veraenderte Skillmapping-Informationen)
+
+
+BESCHREIBUNG
+============
+
+   Benutzt einen Skill. Dieser Skill sollte (als grossgeschriebener Skill)
+   im Living vorliegen und das Living darf kein Geist sein.
+
+
+
+   Die Argumente 'args' werden temporaer auf das Skillmapping des Living
+   addiert (also nur fuer diesen Aufruf und SI_INHERIT gueltig).
+
+
+
+   Eine ausfuehrbare Skill-Funktion zum Skill wird in folgender
+   Reihenfolge bestimmt:
+   - eine gesetzte SI_CLOSURE nutzen
+   - ein gesetztes SI_SKILLFUNC in der gesetzten Gilde nutzen
+   - im Living die Funktion "StdSkill_"+skill (zB Waffenskills) nutzen
+   - QuerySkillAbility() nutzen
+   Die so bestimmte Skill-Funktion wird dann als SI_CLOSURE im Spieler
+   gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
+   Die Methode wird dann gerufen (der Skill also angewandt).
+
+
+
+   Standardmaessig gibt ein UseSkill() also einfach den SI_SKILLABILITY-Wert
+   eines Skills zurueck, es sei denn, eine Funktion wurde fuer den Skill
+   an einer der oben genannten Stellen implementiert.
+
+
+
+   Ein eventuell uebergeordneter Skill (SI_INHERIT) wird mit dem durch den
+   Aufruf der Skill-Funktion veraenderten Mapping mit UseSkill(skill, args)
+   ebenfalls noch ausgefuehrt, bevor das Resultat zurueckgegeben wird.
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSpell
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
+   Spellbook:      Learn, SpellSuccess, Erfolg, Misserfolg
+
+4. Okt 2011 Gloinson
diff --git a/doc/lfun/UseSpell b/doc/lfun/UseSpell
index ddf1c4d..b5cfbf7 100644
--- a/doc/lfun/UseSpell
+++ b/doc/lfun/UseSpell
@@ -1,77 +1,105 @@
+
 UseSpell()
-FUNKTION:
-    public varargs int UseSpell(string str, string spell)
+**********
 
-DEFINIERT IN:
-    /std/living/skills.c
 
-ARGUMENTE:
-    string str       Spell-Optionen
-    string spell     optionaler Spellname
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Benutzt einen Spell, dessen Spellname 'spell' ggf ueber query_verb()
-    ermittelt wird. Dieser Spell sollte (als kleingeschriebener
-    Skill/Spell) im Living vorliegen.
-    
-    Die Argumente 'str' werden als SI_SKILLARG temporaer in das
-    Skillmapping eingetragen (also nur fuer diesen Aufruf gueltig).
-    
-    Eine ausfuehrbare Spell-Funktion zum Spell wird in folgender
-    Reihenfolge bestimmt:
-    - eine gesetzte SI_CLOSURE nutzen
-    - "UseSpell" an einem gesetzten SI_SPELLBOOK nutzen
-    - "UseSpell" an der gesetzten P_GUILD nutzen
-      - [UseSpell der Gilde sucht iA ebenfalls nur den Spell am Spellbook]
-    - eine Closure mit Rueckgabewert 0 erstellen
-    Die so bestimmte Spell-Funktion wird dann als SI_CLOSURE im Spieler
-    gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
-    Die Methode wird dann gerufen (der Spell also angewandt).
+   public varargs int UseSpell(string str, string spell)
 
-    Standardmaessig gibt ein UseSpell() also 0 zurueck, es sei denn, eine
-    Funktion wurde fuer den Spell an einer der oben genannten Stellen
-    implementiert.
 
-    SI_INHERIT ist fuer Spells beim Aufruf wirkungslos (gilt aber bei
-    LearnSkill normal).
+DEFINIERT IN
+============
 
-    Ein Durchlauf von UseSpell durch den Spieler sieht in etwa so aus:
-      1) Die Methode wird als Empfaenger fuer Kommandos bekannt gemacht.
-         Das passiert mit der Anweisung
-         'add_action("UseSpell", "", 1);' in den Dateien player/base.c und
-         in living/npc.c.
+   /std/living/skills.c
 
-      2) /std/living/skills::UseSpell wird durch Kommando oder Heartbeat
-         gerufen.
-      
-      3) UseSpell() ermittelt eine SI_CLOSURE oder delegiert diesen Aufruf
-         an die gueltige Gilde/das Spellbook weiter.
-      
-      4) Eine gueltige Closure wird ausgefuehrt. UseSpell() uebergibt dabei
-         die Spell/Skill-Informationen und SI_SKILLARG.
-      
-      4.1.) Im Normalfall einer Gilde/Spellbook landet der Aufruf ueber
-            /std/gilden_ob::UseSpell() in /std/spellbook::UseSpell() und
-            dieses ruft eine Spellfunktion im Spellbook auf.
-            Die Spellfunktion arbeitet mit den Spell-Informationen und
-            gibt ein ERFOLG, MISSERFOLG oder 0 dafuer zurueck, ob das
-            Spellbook Lernen/Fehlermeldung oder nichts machen soll.
-            Dementsprechend werden P_SP, P_ATTACK_BUSY und
-            P_NEXT_SPELL_TIME im Spellbook geaendert.
 
-      5.) Der Aufruf der Closure kehrt zurueck und wird zurueckgegeben.
-          Damit ist der 0-Rueckgabewert der Spellfunktion im Spellbook
-          aequivalent einem nicht ausgefuehrten Kommando.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:      UseSkill
-    * Abfragen:     QuerySkill, QuerySkillAbility
-    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
-                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
-      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
-    * sonstig:      spruchermuedung, skill_info_liste
-    * Properties:   P_NEWSKILLS
-    Spellbook:      UseSpell (spellbook), Learn, SpellSuccess
+   string str       Spell-Optionen
+   string spell     optionaler Spellname
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Benutzt einen Spell, dessen Spellname 'spell' ggf ueber query_verb()
+   ermittelt wird. Dieser Spell sollte (als kleingeschriebener
+   Skill/Spell) im Living vorliegen.
+
+
+
+   Die Argumente 'str' werden als SI_SKILLARG temporaer in das
+   Skillmapping eingetragen (also nur fuer diesen Aufruf gueltig).
+
+
+
+   Eine ausfuehrbare Spell-Funktion zum Spell wird in folgender
+   Reihenfolge bestimmt:
+   - eine gesetzte SI_CLOSURE nutzen
+   - "UseSpell" an einem gesetzten SI_SPELLBOOK nutzen
+   - "UseSpell" an der gesetzten P_GUILD nutzen
+     - [UseSpell der Gilde sucht iA ebenfalls nur den Spell am Spellbook]
+   - eine Closure mit Rueckgabewert 0 erstellen
+   Die so bestimmte Spell-Funktion wird dann als SI_CLOSURE im Spieler
+   gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
+   Die Methode wird dann gerufen (der Spell also angewandt).
+
+   Standardmaessig gibt ein UseSpell() also 0 zurueck, es sei denn, eine
+   Funktion wurde fuer den Spell an einer der oben genannten Stellen
+   implementiert.
+
+   SI_INHERIT ist fuer Spells beim Aufruf wirkungslos (gilt aber bei
+   LearnSkill normal).
+
+   Ein Durchlauf von UseSpell durch den Spieler sieht in etwa so aus:
+     1) Die Methode wird als Empfaenger fuer Kommandos bekannt gemacht.
+        Das passiert mit der Anweisung
+        'add_action("UseSpell", "", 1);' in den Dateien player/base.c und
+        in living/npc.c.
+
+     2) /std/living/skills::UseSpell wird durch Kommando oder Heartbeat
+        gerufen.
+
+
+
+     3) UseSpell() ermittelt eine SI_CLOSURE oder delegiert diesen Aufruf
+        an die gueltige Gilde/das Spellbook weiter.
+
+
+
+     4) Eine gueltige Closure wird ausgefuehrt. UseSpell() uebergibt dabei
+        die Spell/Skill-Informationen und SI_SKILLARG.
+
+
+
+     4.1.) Im Normalfall einer Gilde/Spellbook landet der Aufruf ueber
+           /std/gilden_ob::UseSpell() in /std/spellbook::UseSpell() und
+           dieses ruft eine Spellfunktion im Spellbook auf.
+           Die Spellfunktion arbeitet mit den Spell-Informationen und
+           gibt ein ERFOLG, MISSERFOLG oder 0 dafuer zurueck, ob das
+           Spellbook Lernen/Fehlermeldung oder nichts machen soll.
+           Dementsprechend werden P_SP, P_ATTACK_BUSY und
+           P_NEXT_SPELL_TIME im Spellbook geaendert.
+
+     5.) Der Aufruf der Closure kehrt zurueck und wird zurueckgegeben.
+         Damit ist der 0-Rueckgabewert der Spellfunktion im Spellbook
+         aequivalent einem nicht ausgefuehrten Kommando.
+
+
+SIEHE AUCH
+==========
+
+   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:      UseSkill
+   * Abfragen:     QuerySkill, QuerySkillAbility
+   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
+                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
+     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
+   * sonstig:      spruchermuedung, skill_info_liste
+   * Properties:   P_NEWSKILLS
+   Spellbook:      UseSpell (spellbook), Learn, SpellSuccess
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/Validate b/doc/lfun/Validate
index 10f4791..ddfceef 100644
--- a/doc/lfun/Validate
+++ b/doc/lfun/Validate
@@ -1,36 +1,60 @@
-Validate()
 
-FUNKTION:
+Validate()
+**********
+
+
+FUNKTION
+========
+
    string Validate(string oname);
 
-DEFINIERT IN:
+
+DEFINIERT IN
+============
+
    /std/virtual/v_compiler.c
 
-ARGUMENTE:
-   oname
-       Objektname, der geprueft werden soll 
 
-RUeCKGABEWERT:
-   
-BESCHREIBUNG:
+ARGUMENTE
+=========
+
+   oname
+       Objektname, der geprueft werden soll
+
+
+RUeCKGABEWERT
+=============
+
+
+BESCHREIBUNG
+============
+
    Diese Funktion hat die Aufgabe zu ueberpruefen ob ein Objekt welches
-   geladen werden soll, in dem VC  ueberhaupt erlaubt ist. Dieser 
+   geladen werden soll, in dem VC  ueberhaupt erlaubt ist. Dieser
    Funktion wird nur der reine Filename uebergeben, ohne Pfad!
    Diese Funktion macht im Standard-VC in /std/ nichts weiter, als
    das '.c' am File Namen abzuschneiden.
    Sollte der Dateiname gueltig sein liefert die Funktion als Rueckgabewert
    den Filenamen ohne .c und sonst 0.
 
-BEMERKUNGEN:
+
+BEMERKUNGEN
+===========
+
    Am besten ruft man in seinem Validate() das ::Validate(), was einem die
    Arbeit abnimmt, ein .c am Ende zu entfernen.
 
-BEISPIEL:
+
+BEISPIEL
+========
+
    string Validate(string oname) {
      string raum, spieler;
      //.c abschneiden
      oname=::Validate(oname);
-     
+
+
+
      // folgt der Raum dem Muster "arena|name"? Wenn nein -> ungueltig,
      // 0 zureckgeben, sonst den Filenamen.
      if(sscanf(oname,"%s|%s",raum,spieler)<2 || raum!="arena")
@@ -38,10 +62,13 @@
      return oname;
    }
 
-SIEHE AUCH:
-     virtual_compiler
-     CustomizeObject(), Validate(), NoParaObjects(), 
-     P_COMPILER_PATH, P_PARA
-     /std/virtual/v_compiler.c
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   virtual_compiler
+   CustomizeObject(), Validate(), NoParaObjects(),
+   P_COMPILER_PATH, P_PARA
+   /std/virtual/v_compiler.c
+
 27.10.2007, Zesstra
diff --git a/doc/lfun/Wear b/doc/lfun/Wear
index bfc8ad2..6a46903 100644
--- a/doc/lfun/Wear
+++ b/doc/lfun/Wear
@@ -1,37 +1,64 @@
+
 Wear()
-FUNKTION:
-     public int Wear(object ob) 
+******
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Die Ruestung oder Kleidung, die angezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
-     oder das Kleidungsstueck <ob> an.
-     ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung in P_ARMOURS bzw. P_CLOTHING eingetragen wird. Es
-     finden zur Zeit keine Pruefungen statt, ob das Lebewesen den Gegenstand
-     ueberhaupt anziehen kann. Genausowenig werden Funktionen wie InformWear()
-     gerufen oder etwaige Stat-Boni aktiviert.
-     Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
+   public int Wear(object ob)
 
-RUeCKGABEWERT:
-     1, wenn das Anziehen erfolgreich war.
-     0 sonst.
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     WearArmour(), WearClothing(), Unwear(), UnwearArmour(), UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
+   /std/living/clothing.c
 
-ZULETZT GEAeNDERT:
+
+ARGUMENTE
+=========
+
+   object ob
+     Die Ruestung oder Kleidung, die angezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
+   oder das Kleidungsstueck <ob> an.
+   ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung in P_ARMOURS bzw. P_CLOTHING eingetragen wird. Es
+   finden zur Zeit keine Pruefungen statt, ob das Lebewesen den Gegenstand
+   ueberhaupt anziehen kann. Genausowenig werden Funktionen wie InformWear()
+   gerufen oder etwaige Stat-Boni aktiviert.
+   Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Anziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   WearArmour(), WearClothing(), Unwear(), UnwearArmour(), UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/WearArmour b/doc/lfun/WearArmour
index 9fd8e95..a6961b2 100644
--- a/doc/lfun/WearArmour
+++ b/doc/lfun/WearArmour
@@ -1,37 +1,64 @@
+
 WearArmour()
-FUNKTION:
-     public int WearArmour(object ob) 
+************
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Die Ruestung, die angezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
-     <ob> an.
-     ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung in P_ARMOURS eingetragen wird. Es finden zur Zeit keine
-     Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt anziehen
-     kann. Genausowenig werden Funktionen wie InformWear() gerufen oder
-     etwaige Stat-Boni aktiviert.
-     Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
+   public int WearArmour(object ob)
 
-RUeCKGABEWERT:
-     1, wenn das Anziehen erfolgreich war.
-     0 sonst.
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Wear(), WearClothing(), Unwear(), UnwearArmour(), UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
+   /std/living/clothing.c
 
-ZULETZT GEAeNDERT:
+
+ARGUMENTE
+=========
+
+   object ob
+     Die Ruestung, die angezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht die Ruestung
+   <ob> an.
+   ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung in P_ARMOURS eingetragen wird. Es finden zur Zeit keine
+   Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt anziehen
+   kann. Genausowenig werden Funktionen wie InformWear() gerufen oder
+   etwaige Stat-Boni aktiviert.
+   Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Anziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearClothing(), Unwear(), UnwearArmour(), UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/WearClothing b/doc/lfun/WearClothing
index 17c0280..51cc015 100644
--- a/doc/lfun/WearClothing
+++ b/doc/lfun/WearClothing
@@ -1,37 +1,64 @@
+
 WearClothing()
-FUNKTION:
-     public int WearClothing(object ob) 
+**************
 
-DEFINIERT IN:
-     /std/living/clothing.c
 
-ARGUMENTE:
-     object ob
-       Das Kleidungsstuck, das angezogen wird.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Das Lebewesen, in dem diese Funktion gerufen wird, zieht das
-     Kleidungsstueck <ob> an.
-     ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
-     Ruestung/Kleidung in P_CLOTHING eingetragen wird. Es finden zur Zeit
-     keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
-     anziehen kann. Genausowenig werden Funktionen wie InformWear() gerufen.
+   public int WearClothing(object ob)
 
-     Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
-     von diesem im Lebewesen gerufen zu werden.
 
-RUeCKGABEWERT:
-     1, wenn das Anziehen erfolgreich war.
-     0 sonst.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
-     besten auch dann nicht.
+   /std/living/clothing.c
 
-SIEHE AUCH:
-     Wear(), WearArmour(), Unwear(), UnwearArmour(), UnwearClothing()
-     P_CLOTHING, P_ARMOURS
-     FilterClothing(), FilterArmours()
 
-ZULETZT GEAeNDERT:
+ARGUMENTE
+=========
+
+   object ob
+     Das Kleidungsstuck, das angezogen wird.
+
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion gerufen wird, zieht das
+   Kleidungsstueck <ob> an.
+   ABER: 'Anziehen' bedeutet in diesem Kontext lediglich, dass die
+   Ruestung/Kleidung in P_CLOTHING eingetragen wird. Es finden zur Zeit
+   keine Pruefungen statt, ob das Lebewesen den Gegenstand ueberhaupt
+   anziehen kann. Genausowenig werden Funktionen wie InformWear() gerufen.
+
+   Die Funktion ist nur dazu gedacht, im Zuge des Anziehens eines Objekts
+   von diesem im Lebewesen gerufen zu werden.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Anziehen erfolgreich war.
+   0 sonst.
+
+
+BEMERKUNGEN
+===========
+
+   Nicht von Hand aufrufen, es sei denn man weiss genau, was man tut. Und am
+   besten auch dann nicht.
+
+
+SIEHE AUCH
+==========
+
+   Wear(), WearArmour(), Unwear(), UnwearArmour(), UnwearClothing()
+   P_CLOTHING, P_ARMOURS
+   FilterClothing(), FilterArmours()
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2009, Zesstra
diff --git a/doc/lfun/WearFunc b/doc/lfun/WearFunc
index 626fd64..d1d0121 100644
--- a/doc/lfun/WearFunc
+++ b/doc/lfun/WearFunc
@@ -1,80 +1,105 @@
+
 WearFunc()
+**********
 
-FUNKTION:
-     int WearFunc(object ruest, int silent, object user);
 
-DEFINIERT IN:
-     eigenen Objekten (fuer /std/clothing/wear)
+FUNKTION
+========
 
-ARGUMENTE:
-     ruest (object)
-          Die Ruestung/Kleidung, die angezogen werden soll.
-     silent (int)
-          Ob dabei eine Meldung ausgegeben wird.
-     user (object)
-          Das Lebewesen, welches die Ruestung/Kleidung anziehen will.
+   int WearFunc(object ruest, int silent, object user);
 
-BESCHREIBUNG:
-     Mit dieser Funktion kann man pruefen, ob sich das Kleidungsstueck bzw.
-     Ruestung <ruest> von this_player() anziehen laesst oder nicht.
-     Kann die Ruestung angezogen werden, so muss ein Wert ungleich 0
-     zurueckgegeben werden.
 
-RUeCKGABEWERT:
-     0, wenn sich die Ruestung nicht anziehen laesst, ansonsten ungleich 0.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Bitte nicht darauf verlassen, dass der Spieler das Objekt auch wirklich
-     anzieht, wenn man hier 1 zurueckgibt.
-     Speziell bei Schilden kann das Anziehen trotz eines Rueckgabewertes 
-     != 0 immer noch schief gehen, wenn der Spieler keine Hand mehr frei hat.
-     Wenn ihr sicher sein wollt, dass der Spieler ein Objekt angezogen hat,
-     benutzt bitte InformWear().
-     Bitte nicht drauf verlassen, dass this_player() das ausziehende Lebewesen
-     ist.
-     Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
-     erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
-     Objekte zu aendern.
+   eigenen Objekten (fuer /std/clothing/wear)
 
-BEISPIELE:
-     Ein Helm, der nur von Elfen getragen werden kann:
 
-     inherit "std/armour.c";
+ARGUMENTE
+=========
 
-     #include <properties.h>
+   ruest (object)
+        Die Ruestung/Kleidung, die angezogen werden soll.
+   silent (int)
+        Ob dabei eine Meldung ausgegeben wird.
+   user (object)
+        Das Lebewesen, welches die Ruestung/Kleidung anziehen will.
 
-     create()
-     {
-       ::create();
 
-       SetProp(P_ARMOUR_TYPE, AT_HELMET);
-       /* zig weitere SetProp's, um den Helm zu konfigurieren */
+BESCHREIBUNG
+============
 
-       /* WearFunc() ist im Helm selbst zu finden */
-       SetProp(P_WEAR_FUNC, this_object());
-     }
+   Mit dieser Funktion kann man pruefen, ob sich das Kleidungsstueck bzw.
+   Ruestung <ruest> von this_player() anziehen laesst oder nicht.
+   Kann die Ruestung angezogen werden, so muss ein Wert ungleich 0
+   zurueckgegeben werden.
 
-     int WearFunc(object me, int silent, object user)
-     {
-       if (user->QueryProp(P_RACE) == "Elf")
-         return 1;   /* Elfen duerfen den Helm tragen */
 
-       /* Die anderen Rassen sollten zumindest erfahren koennen, wieso
-          sie den Helm nicht tragen koennen... */
-       if (!silent)
-           write( "Der Helm rutscht Dir immer ueber Deine runden "
-                 +"Ohren.\n" );
-       return 0;
-     }
+RUeCKGABEWERT
+=============
 
-     Gibt jetzt ein Nicht-Elf "trage helm" ein, so bekommt er die Meldung
-     "Der Helm rutscht Dir immer ueber Deine runden Ohren.", Elfen dagegen
-     passt das Teil wie angegossen.
+   0, wenn sich die Ruestung nicht anziehen laesst, ansonsten ungleich 0.
 
-SIEHE AUCH:
-     P_WEAR_MSG, P_UNWEAR_MSG, P_WIELD_MSG, P_UNWIELD_MSG
-     DoWear(), DoUnwear(), InformUnwear(), InformWear()
-     /std/clothing/wear.c
 
-----------------------------------------------------------------------------
+BEMERKUNGEN
+===========
+
+   Bitte nicht darauf verlassen, dass der Spieler das Objekt auch wirklich
+   anzieht, wenn man hier 1 zurueckgibt.
+   Speziell bei Schilden kann das Anziehen trotz eines Rueckgabewertes
+   != 0 immer noch schief gehen, wenn der Spieler keine Hand mehr frei hat.
+   Wenn ihr sicher sein wollt, dass der Spieler ein Objekt angezogen hat,
+   benutzt bitte InformWear().
+   Bitte nicht drauf verlassen, dass this_player() das ausziehende Lebewesen
+   ist.
+   Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
+   erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
+   Objekte zu aendern.
+
+
+BEISPIELE
+=========
+
+   Ein Helm, der nur von Elfen getragen werden kann:
+
+   inherit "std/armour.c";
+
+   #include <properties.h>
+
+   create()
+   {
+     ::create();
+
+     SetProp(P_ARMOUR_TYPE, AT_HELMET);
+     /* zig weitere SetProp's, um den Helm zu konfigurieren */
+
+     /* WearFunc() ist im Helm selbst zu finden */
+     SetProp(P_WEAR_FUNC, this_object());
+   }
+
+   int WearFunc(object me, int silent, object user)
+   {
+     if (user->QueryProp(P_RACE) == "Elf")
+       return 1;   /* Elfen duerfen den Helm tragen */
+
+     /* Die anderen Rassen sollten zumindest erfahren koennen, wieso
+        sie den Helm nicht tragen koennen... */
+     if (!silent)
+         write( "Der Helm rutscht Dir immer ueber Deine runden "
+               +"Ohren.\n" );
+     return 0;
+   }
+
+   Gibt jetzt ein Nicht-Elf "trage helm" ein, so bekommt er die Meldung
+   "Der Helm rutscht Dir immer ueber Deine runden Ohren.", Elfen dagegen
+   passt das Teil wie angegossen.
+
+
+SIEHE AUCH
+==========
+
+   P_WEAR_MSG, P_UNWEAR_MSG, P_WIELD_MSG, P_UNWIELD_MSG
+   DoWear(), DoUnwear(), InformUnwear(), InformWear()
+   /std/clothing/wear.c
+
 02.02.2009, Zesstra
diff --git a/doc/lfun/WieldFunc b/doc/lfun/WieldFunc
index 23e299f..7c607e4 100644
--- a/doc/lfun/WieldFunc
+++ b/doc/lfun/WieldFunc
@@ -1,77 +1,102 @@
+
 WieldFunc()
+***********
 
-FUNKTION:
-     int WieldFunc(object weapon, int silent, object user);
 
-DEFINIERT IN:
-     eigenen Objekten (fuer /std/weapon/combat)
+FUNKTION
+========
 
-ARGUMENTE:
-     weapon (object)
-          Die Waffe, die gezueckt werden soll.
-     silent (int)
-          Ob dabei eine Meldung ausgegeben werden soll.
-     user (object)
-          Das Lebewesen, welches die Waffe zuecken will.
+   int WieldFunc(object weapon, int silent, object user);
 
-BESCHREIBUNG:
-     In dieser Funktion kann man zusaetzliche Abfragen vornehmen, ob sich
-     die Waffe <weapon> von <user> zuecken laesst oder nicht.
 
-RUeCKGABEWERT:
-     0, wenn die Waffe nicht gezueckt werden kann, sonst ungleich 0.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Selbst wenn man einen Wert ungleich Null zurueckgibt, ist das noch
-     keine Garantie, dass sich die Waffe auch wirklich zuecken laesst! Der
-     Spieler koennte zum Beispiel noch eine Waffe gezueckt haben, die sich
-     nicht wegstecken laesst, etc.
-     Wenn ihr sicher sein wollt, dass der Spieler ein Objekt gezueckt hat,
-     benutzt bitte InformWield().
-     Bitte nicht drauf verlassen, dass this_player() das Lebewesen ist,
-     welches die Waffe zuecke will.
-     Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
-     erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
-     Objekte zu aendern.
+   eigenen Objekten (fuer /std/weapon/combat)
 
-BEISPIELE:
-     Eine Waffe, die sich nicht von Zwergen zuecken laesst:
 
-     inherit "std/weapon";
+ARGUMENTE
+=========
 
-     #include <properties.h>
-     #include <combat.h>
+   weapon (object)
+        Die Waffe, die gezueckt werden soll.
+   silent (int)
+        Ob dabei eine Meldung ausgegeben werden soll.
+   user (object)
+        Das Lebewesen, welches die Waffe zuecken will.
 
-     create()
-     {
-       ::create();
 
-       ... /* zig SetProp's, um die Waffe zu konfigurieren */
+BESCHREIBUNG
+============
 
-       /* WieldFunc() ist in der Waffe selbst zu finden */
-       SetProp(P_WIELD_FUNC, this_object());
-     }
+   In dieser Funktion kann man zusaetzliche Abfragen vornehmen, ob sich
+   die Waffe <weapon> von <user> zuecken laesst oder nicht.
 
-     int WieldFunc(object weapon, int silent, object user)
-     {
-       /* Nicht-Zwerge duerfen die Waffe zuecken */
-       if (user->QueryProp(P_RACE) != "Zwerg")
-         return 1;
 
-       /* Ansonsten sagen wir evtl., warum das Zuecken nicht klappt... */
-       if (!silent)
-         write( "Deine kleinen Haendchen koennen den Griff nicht "+
-                "umklammern.\n");
+RUeCKGABEWERT
+=============
 
-       /* ...und brechen das Zuecken ab. */
-       return 0;
-     }
+   0, wenn die Waffe nicht gezueckt werden kann, sonst ungleich 0.
 
-SIEHE AUCH:
-     P_WIELD_MSG, P_UNWIELD_MSG, P_WEAR_MSG, P_UNWEAR_MSG
-     DoWield(), DoUnwield(), InformUnwield(), InformWield() 
-     UnwieldFunc, WieldFunc 
-     /std/weapon/combat.c
 
----------------------------------------------------------------------------
+BEMERKUNGEN
+===========
+
+   Selbst wenn man einen Wert ungleich Null zurueckgibt, ist das noch
+   keine Garantie, dass sich die Waffe auch wirklich zuecken laesst! Der
+   Spieler koennte zum Beispiel noch eine Waffe gezueckt haben, die sich
+   nicht wegstecken laesst, etc.
+   Wenn ihr sicher sein wollt, dass der Spieler ein Objekt gezueckt hat,
+   benutzt bitte InformWield().
+   Bitte nicht drauf verlassen, dass this_player() das Lebewesen ist,
+   welches die Waffe zuecke will.
+   Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
+   erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
+   Objekte zu aendern.
+
+
+BEISPIELE
+=========
+
+   Eine Waffe, die sich nicht von Zwergen zuecken laesst:
+
+   inherit "std/weapon";
+
+   #include <properties.h>
+   #include <combat.h>
+
+   create()
+   {
+     ::create();
+
+     ... /* zig SetProp's, um die Waffe zu konfigurieren */
+
+     /* WieldFunc() ist in der Waffe selbst zu finden */
+     SetProp(P_WIELD_FUNC, this_object());
+   }
+
+   int WieldFunc(object weapon, int silent, object user)
+   {
+     /* Nicht-Zwerge duerfen die Waffe zuecken */
+     if (user->QueryProp(P_RACE) != "Zwerg")
+       return 1;
+
+     /* Ansonsten sagen wir evtl., warum das Zuecken nicht klappt... */
+     if (!silent)
+       write( "Deine kleinen Haendchen koennen den Griff nicht "+
+              "umklammern.\n");
+
+     /* ...und brechen das Zuecken ab. */
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   P_WIELD_MSG, P_UNWIELD_MSG, P_WEAR_MSG, P_UNWEAR_MSG
+   DoWield(), DoUnwield(), InformUnwield(), InformWield()
+   UnwieldFunc, WieldFunc
+   /std/weapon/combat.c
+
 02.02.2009, Zesstra
diff --git a/doc/lfun/WithDraw b/doc/lfun/WithDraw
index d1532a2..1bff547 100644
--- a/doc/lfun/WithDraw
+++ b/doc/lfun/WithDraw
@@ -1,42 +1,69 @@
+
 WithDraw()
-FUNKTION:
-     int WithDraw(int amount);
+**********
 
-DEFINIERT IN:
-     /p/daemon/zentralbank.c
 
-ARGUMENTE:
-     int amount	- angeforderte Geldmenge
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Damit wird bei der Zentralbank eine bestimmte Menge Geld angefordert.
-     Der Rueckgabewert haengt vom Kassenstand der Zentralbank ab und ist
-     entweder amount oder amount/3.
+   int WithDraw(int amount);
 
-RUeCKGABEWERT:
-     Menge des bei der Zentralbank "abgehobenen" Geldes.
 
-BEISPIELE:
-     #include <bank.h>
-     ...
-     if(ZENTRALBANK->WithDraw(50000)<50000)
-      write(break_string(
-       "Leider koennen wir ihnen keinen vollen Zuschuss zu ihrem Hotelbau "
-       "geben!",
-       "Der Beamte sagt: ",78));
-      say(break_string(
-       "Leider koennen wir ihnen keinen vollen Zuschuss zu ihrem Hotelbau "
-       "geben!",
-       "Der Beamte sagt zu "+this_player()->name(WEM)+": ",78));
-      ...
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
-     an anderen Stellen Geld erzeugt wird.
+   /p/daemon/zentralbank.c
 
-SIEHE AUCH:
-     Geldhandling:	AddMoney(L), QueryMoney(L)
-     Zentralbank:	PayIn(L), _query_current_money(L)
-     Sonstiges:		/items/money.c, /sys/bank.h
+
+ARGUMENTE
+=========
+
+   int amount - angeforderte Geldmenge
+
+
+BESCHREIBUNG
+============
+
+   Damit wird bei der Zentralbank eine bestimmte Menge Geld angefordert.
+   Der Rueckgabewert haengt vom Kassenstand der Zentralbank ab und ist
+   entweder amount oder amount/3.
+
+
+RUeCKGABEWERT
+=============
+
+   Menge des bei der Zentralbank "abgehobenen" Geldes.
+
+
+BEISPIELE
+=========
+
+   #include <bank.h>
+   ...
+   if(ZENTRALBANK->WithDraw(50000)<50000)
+    write(break_string(
+     "Leider koennen wir ihnen keinen vollen Zuschuss zu ihrem Hotelbau "
+     "geben!",
+     "Der Beamte sagt: ",78));
+    say(break_string(
+     "Leider koennen wir ihnen keinen vollen Zuschuss zu ihrem Hotelbau "
+     "geben!",
+     "Der Beamte sagt zu "+this_player()->name(WEM)+": ",78));
+    ...
+
+
+BEMERKUNGEN
+===========
+
+   Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
+   an anderen Stellen Geld erzeugt wird.
+
+
+SIEHE AUCH
+==========
+
+   Geldhandling:      AddMoney(L), QueryMoney(L)
+   Zentralbank:       PayIn(L), _query_current_money(L)
+   Sonstiges:         /items/money.c, /sys/bank.h
 
 27. Apr 2004 Gloinson
diff --git a/doc/lfun/__INIT b/doc/lfun/__INIT
index 208b655..3ba4793 100644
--- a/doc/lfun/__INIT
+++ b/doc/lfun/__INIT
@@ -1,12 +1,25 @@
-SYNOPSIS:
-	__INIT
 
-DESCRIPTION:
-	This function is constructed automagically by the parser at
-	compiler, if the parser was compiled with #define
-	INITIALISATION__INIT. This function is not intended to be
-	defined by the lpc objects, and never to be called from lpc
-	objects. This man page is here just for completeness.
+__INIT()
+********
 
-SEE ALSO:
-	initialisation(LPC)
+
+SYNOPSIS
+========
+
+   __INIT
+
+
+DESCRIPTION
+===========
+
+   This function is constructed automagically by the parser at
+   compiler, if the parser was compiled with #define
+   INITIALISATION__INIT. This function is not intended to be
+   defined by the lpc objects, and never to be called from lpc
+   objects. This man page is here just for completeness.
+
+
+SEE ALSO
+========
+
+   initialisation(LPC)
diff --git a/doc/lfun/_query_current_money b/doc/lfun/_query_current_money
index 16b7ee5..db3663f 100644
--- a/doc/lfun/_query_current_money
+++ b/doc/lfun/_query_current_money
@@ -1,32 +1,53 @@
+
 _query_current_money()
-FUNKTION:
-     int _query_current_money()
+**********************
 
-DEFINIERT IN:
-     /p/daemon/zentralbank.c
 
-BESCHREIBUNG:
-     Es wird zurueckgegeben, wieviel Geld die Zentralbank besitzt.
+FUNKTION
+========
 
-BEISPIELE:
-     #include <bank.h>
-     ...
-     if(ZENTRALBANK->_query_current_money()<30000) {
-      write(break_string(
-       "Leider koennen wir ihren Bausparvertrag derzeit nicht einloesen.",
-       "Der Beamte sagt: ",78));
-      say(break_string(
-       "Leider koennen wir ihren Bausparvertrag derzeit nicht einloesen.",
-       "Der Beamte sagt zu "+this_player()->name(WEM)+": ",78));
-     }
+   int _query_current_money()
 
-BEMERKUNGEN:
-     Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
-     an anderen Stellen Geld erzeugt wird.
 
-SIEHE AUCH:
-     Geldhandling:	AddMoney(L), QueryMoney(L)
-     Zentralbank:	WithDraw(L), PayIn(L)
-     Sonstiges:		/items/money.c, /sys/bank.h
+DEFINIERT IN
+============
+
+   /p/daemon/zentralbank.c
+
+
+BESCHREIBUNG
+============
+
+   Es wird zurueckgegeben, wieviel Geld die Zentralbank besitzt.
+
+
+BEISPIELE
+=========
+
+   #include <bank.h>
+   ...
+   if(ZENTRALBANK->_query_current_money()<30000) {
+    write(break_string(
+     "Leider koennen wir ihren Bausparvertrag derzeit nicht einloesen.",
+     "Der Beamte sagt: ",78));
+    say(break_string(
+     "Leider koennen wir ihren Bausparvertrag derzeit nicht einloesen.",
+     "Der Beamte sagt zu "+this_player()->name(WEM)+": ",78));
+   }
+
+
+BEMERKUNGEN
+===========
+
+   Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
+   an anderen Stellen Geld erzeugt wird.
+
+
+SIEHE AUCH
+==========
+
+   Geldhandling:      AddMoney(L), QueryMoney(L)
+   Zentralbank:       WithDraw(L), PayIn(L)
+   Sonstiges:         /items/money.c, /sys/bank.h
 
 27. Apr 2004 Gloinson
diff --git a/doc/lfun/_unparsed_args b/doc/lfun/_unparsed_args
index cbac1bb..caf3653 100644
--- a/doc/lfun/_unparsed_args
+++ b/doc/lfun/_unparsed_args
@@ -1,28 +1,49 @@
+
 _unparsed_args()
-FUNKTION:
-     varargs string _unparsed_args(int level)
+****************
 
-DEFINIERT IN:
-     /std/player/command.c:
 
-ARGUMENTE:
-     level
-          Gibt an, wieviel des Textes "weggeparsed" werden soll.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Gibt den Text des letzten Befehls des Spielers (ohne das Befehlswort
-     selbst) zurueck. "level" gibt dabei an, wieviel geparsed wird:
-     level = 0 : Gar kein Parsing.
-     level = 1 : Der Text wird in Kleinbuchstaben umgewandelt, doppelte
-                 Leerzeichen werden entfernt.
-     level = 2 : Semikoli, Kommata und Doppelpunkte werden in Leerzeichen
-		 umgewandelt, doppelte Leerzeichen und Artikel (der, die,
-		 das, ein,...) werden entfernt.
+   varargs string _unparsed_args(int level)
 
-RUeCKGABEWERT:
-     Der geparste Text.
 
-SIEHE AUCH:
-     query_command(), query_verb(), modify_command()
+DEFINIERT IN
+============
+
+   /std/player/command.c:
+
+
+ARGUMENTE
+=========
+
+   level
+        Gibt an, wieviel des Textes "weggeparsed" werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Gibt den Text des letzten Befehls des Spielers (ohne das Befehlswort
+   selbst) zurueck. "level" gibt dabei an, wieviel geparsed wird:
+   level = 0 : Gar kein Parsing.
+   level = 1 : Der Text wird in Kleinbuchstaben umgewandelt, doppelte
+               Leerzeichen werden entfernt.
+   level = 2 : Semikoli, Kommata und Doppelpunkte werden in Leerzeichen
+               umgewandelt, doppelte Leerzeichen und Artikel (der, die,
+               das, ein,...) werden entfernt.
+
+
+RUeCKGABEWERT
+=============
+
+   Der geparste Text.
+
+
+SIEHE AUCH
+==========
+
+   query_command(), query_verb(), modify_command()
 
 25.08.2016, Arathorn
diff --git a/doc/lfun/access_rights b/doc/lfun/access_rights
index 9859761..7a99a99 100644
--- a/doc/lfun/access_rights
+++ b/doc/lfun/access_rights
@@ -1,75 +1,98 @@
+
 access_rights()
+***************
 
-FUNKTION:
-    int access_rights(string euid, string file);
 
-DEFINIERT IN:
-    access_rights.c (muss man selber schreiben)
+FUNKTION
+========
 
-PARAMETER:
-    euid
-        Die euid desjenigen, der auf das Verzeichnis schreiben will
-    file
-        Name der Datei, auf die zugegriffen werden soll
+   int access_rights(string euid, string file);
 
-BESCHREIBUNG:
-    access_rights() wird immer dann aufgerufen, wenn jemand, der nicht
-    sowieso schon schreibberechtigt ist, in die Datei/das Verzeichnis file
-    schreiben oder loeschen will.
 
-    Anhand von euid kann man dann entscheiden, ob der Schreibzugriff erlaubt
-    wird oder nicht.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    0, wenn der Zugriff verweigert wird,
-    1, wenn der Zugriff erlaubt wird.
+   access_rights.c (muss man selber schreiben)
 
-BEISPIELE:
-    /* /d/inseln/wargon/access_rights.c */
 
-    int access_rights(string euid, string file)
-    {
-      string dir, rest;
+PARAMETER
+=========
 
-      // Catweazle darf auf alles zugreifen (*argl* ;^)
-      if (euid == "catweazle")
-        return 1;
+   euid
+       Die euid desjenigen, der auf das Verzeichnis schreiben will
+   file
+       Name der Datei, auf die zugegriffen werden soll
 
-      // Rechte auf einzelne Verzeichnisse ermitteln:
-      if (sscanf(file, "%s/%s", dir, rest) != 2)
-        rest = file;
 
-      // Jof und Boing duerfen an Tarko Reub rumpfuschen:
-      if (dir == "tarko" && (euid == "jof" || euid == "boing"))
-        return 1;
+BESCHREIBUNG
+============
 
-      // Anthea darf die Karten von Aurora und der Piratenhoehle bearbeiten:
-      if (dir == "MAPS" && 
-          member( ({"Aurora", "Piratenhoehle" }), rest) >= 0 && 
-          euid == "anthea")
-        return 1;
+   access_rights() wird immer dann aufgerufen, wenn jemand, der nicht
+   sowieso schon schreibberechtigt ist, in die Datei/das Verzeichnis file
+   schreiben oder loeschen will.
 
-      // alle anderen duerfen nicht!
-      return 0;
-    }
+   Anhand von euid kann man dann entscheiden, ob der Schreibzugriff erlaubt
+   wird oder nicht.
 
-BEMERKUNGEN:
-    file ist immer relativ zu dem Verzeichnis, in dem das access_rights.c
-    liegt! Will also jemand auf /d/inseln/wargon/tarko/macros.h schreiben,
-    wird file "tarko/macros.h" uebergeben.
 
-    In Verzeichnissen von Magiern mit einem Level >= ELDER_LVL wird das
-    access_rights.c NICHT ausgewertet (da damit andere Magier zB. an
-    Erzmagierrechte gelangen koennten).
+RUECKGABEWERT
+=============
 
-    Es wird immer nur EIN access_rights.c ausgewertet, naemlich das in der
-    tiefsten Verzeichnisebene.
+   0, wenn der Zugriff verweigert wird,
+   1, wenn der Zugriff erlaubt wird.
 
-    Man kann sowohl in seinen Regionsverzeichnissen als auch in seinen
-    Homeverzeichnissen access_rights.c-Dateien anlegen.
 
-    GANZ WICHTIG!!!
-    Fuer die Dateien, die evtl. von anderen angelegt werden, ist man immer
-    noch selbst verantwortlich! Wenn jemand also ein Gebiet bei Dir an-
-    schliesst, muss es erst von den verantwortlichen Regionsmagiern abgesegnet
-    sein!
+BEISPIELE
+=========
+
+   /* /d/inseln/wargon/access_rights.c */
+
+   int access_rights(string euid, string file)
+   {
+     string dir, rest;
+
+     // Catweazle darf auf alles zugreifen (*argl* ;^)
+     if (euid == "catweazle")
+       return 1;
+
+     // Rechte auf einzelne Verzeichnisse ermitteln:
+     if (sscanf(file, "%s/%s", dir, rest) != 2)
+       rest = file;
+
+     // Jof und Boing duerfen an Tarko Reub rumpfuschen:
+     if (dir == "tarko" && (euid == "jof" || euid == "boing"))
+       return 1;
+
+     // Anthea darf die Karten von Aurora und der Piratenhoehle bearbeiten:
+     if (dir == "MAPS" &&
+         member( ({"Aurora", "Piratenhoehle" }), rest) >= 0 &&
+         euid == "anthea")
+       return 1;
+
+     // alle anderen duerfen nicht!
+     return 0;
+   }
+
+
+BEMERKUNGEN
+===========
+
+   file ist immer relativ zu dem Verzeichnis, in dem das access_rights.c
+   liegt! Will also jemand auf /d/inseln/wargon/tarko/macros.h schreiben,
+   wird file "tarko/macros.h" uebergeben.
+
+   In Verzeichnissen von Magiern mit einem Level >= ELDER_LVL wird das
+   access_rights.c NICHT ausgewertet (da damit andere Magier zB. an
+   Erzmagierrechte gelangen koennten).
+
+   Es wird immer nur EIN access_rights.c ausgewertet, naemlich das in der
+   tiefsten Verzeichnisebene.
+
+   Man kann sowohl in seinen Regionsverzeichnissen als auch in seinen
+   Homeverzeichnissen access_rights.c-Dateien anlegen.
+
+   GANZ WICHTIG!!!
+   Fuer die Dateien, die evtl. von anderen angelegt werden, ist man immer
+   noch selbst verantwortlich! Wenn jemand also ein Gebiet bei Dir an-
+   schliesst, muss es erst von den verantwortlichen Regionsmagiern abgesegnet
+   sein!
diff --git a/doc/lfun/buffer_hp b/doc/lfun/buffer_hp
index c3e7b1b..181751c 100644
--- a/doc/lfun/buffer_hp
+++ b/doc/lfun/buffer_hp
@@ -1,76 +1,104 @@
-FUNKTION:
-    int buffer_hp( int val, int rate );
 
-DEFINIERT IN:
-    /std/living/life.c
+buffer_hp()
+***********
 
-ARGUMENTE:
-    val:  Gesamte Heilung.
-    rate: LP-Rate.
-        
-BESCHREIBUNG:
-    Erhoeht die LP eines Spielers automatisch insgesamt um den Wert "val".
-    Pro heart_beat() wird ihm dabei der Wert "rate" zugefuehrt.
-    Sollen neben P_HP noch weitere Props manipuliert werden - bspw. zur
-    P_FOOD - bietet sich die Funktion consume() an.
 
-RUECKGABEWERTE:
-    Der getankte Wert pro heart_beat().
+FUNKTION
+========
 
-BEMERKUNG:
-    Sollte von jeder tragbaren Heilung genutzt werden, welche den Spieler
-    darauf schliessen lassen kann, auf natuerlichem und nichtmagischem Weg
-    (Essen, Trinken) geheilt worden zu sein.
+   int buffer_hp( int val, int rate );
 
-BEISPIEL:
-    #define TP this_player()
+
+DEFINIERT IN
+============
+
+   /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   val:  Gesamte Heilung.
+   rate: LP-Rate.
+
+
+BESCHREIBUNG
+============
+
+   Erhoeht die LP eines Spielers automatisch insgesamt um den Wert "val".
+   Pro heart_beat() wird ihm dabei der Wert "rate" zugefuehrt.
+   Sollen neben P_HP noch weitere Props manipuliert werden - bspw. zur
+   P_FOOD - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERTE
+==============
+
+   Der getankte Wert pro heart_beat().
+
+
+BEMERKUNG
+=========
+
+   Sollte von jeder tragbaren Heilung genutzt werden, welche den Spieler
+   darauf schliessen lassen kann, auf natuerlichem und nichtmagischem Weg
+   (Essen, Trinken) geheilt worden zu sein.
+
+
+BEISPIEL
+========
+
+   #define TP this_player()
+   ...
+
+   int heilung=1;
+   ...
+
+   create()
+   {
+    ::create();
+    SetProp(P_NAME,"Heilpflanze");
     ...
 
-    int heilung=1;
-    ...
+    AddCmd("iss","eat");
+   }
 
-    create()
-    {
-     ::create();
-     SetProp(P_NAME,"Heilpflanze");
+   int eat(string str)
+   {
+     notify_fail("WAS willst Du essen?\n");
+     if ( !str || !id(str) )
+      return 0;
      ...
 
-     AddCmd("iss","eat");
-    }
-
-    int eat(string str)
-    {
-      notify_fail("WAS willst Du essen?\n");
-      if ( !str || !id(str) )
-       return 0;
-      ...
-
-      if ( !TP->eat_food(25) )
-       return 1;
-
-      TP->buffer_hp(20,5);
-      TP->buffer_sp(80,10);
-      heilung--;
-      write(BS("Du fuehlst langsam, wie Deine Kraefte zurueckkehren."));
-
+     if ( !TP->eat_food(25) )
       return 1;
-    }
 
-    reset()
-    {
-      heilung=1;
-      ::reset();
-    }
+     TP->buffer_hp(20,5);
+     TP->buffer_sp(80,10);
+     heilung--;
+     write(BS("Du fuehlst langsam, wie Deine Kraefte zurueckkehren."));
 
-    Es wird durch eat_food getestet, ob der Spieler noch genuegend essen kann.
-    Wenn ja, kriegt unser Held die 25 automatisch oben drauf und ausserdem
-    20 LP in 5-LP-Schritten und 80 KP in 10-LP-Schritten gutgeschrieben.
+     return 1;
+   }
 
-SIEHE AUCH:
-     Aehnlich:  heal_self, restore_spell_points, restore_hit_points, 
-                buffer_sp
-     Tanken:    consume, drink_alcohol, drink_soft, eat_food
-     Props:     P_SP, P_HP,
-     Konzepte:  heilung
+   reset()
+   {
+     heilung=1;
+     ::reset();
+   }
+
+   Es wird durch eat_food getestet, ob der Spieler noch genuegend essen kann.
+   Wenn ja, kriegt unser Held die 25 automatisch oben drauf und ausserdem
+   20 LP in 5-LP-Schritten und 80 KP in 10-LP-Schritten gutgeschrieben.
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  heal_self, restore_spell_points, restore_hit_points,
+              buffer_sp
+   Tanken:    consume, drink_alcohol, drink_soft, eat_food
+   Props:     P_SP, P_HP,
+   Konzepte:  heilung
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/buffer_sp b/doc/lfun/buffer_sp
index dc7341c..09cad72 100644
--- a/doc/lfun/buffer_sp
+++ b/doc/lfun/buffer_sp
@@ -1,36 +1,63 @@
-FUNKTION:
-    int buffer_sp( int val, int rate );
 
-DEFINIERT IN:
-    /std/living/life.c
+buffer_sp()
+***********
 
-ARGUMENTE:
-    val:  Gesamte Heilung.
-    rate: KP-Rate.
-        
-BESCHREIBUNG:
-    Erhoeht die KP eines Spielers automatisch insgesamt um den Wert "val".
-    Pro heart_beat() wird ihm dabei der Wert "rate" zugefuehrt.
-    Sollen neben P_SP noch weitere Props manipuliert werden - bspw. zur
-    P_FOOD - bietet sich die Funktion consume() an.
 
-RUECKGABEWERTE:
-    Der getankte Wert pro heart_beat().
+FUNKTION
+========
 
-BEMERKUNG:
-    Sollte von jeder tragbaren Heilung genutzt werden, welche den Spieler
-    darauf schliessen lassen kann, auf natuerlichem und nichtmagischem Weg
-    (Essen, Trinken) geheilt worden zu sein.
+   int buffer_sp( int val, int rate );
 
-BEISPIEL:
-    s. Bsp. zu "buffer_hp"
 
-SIEHE AUCH:
-     Aehnlich:  heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp
-     Tanken:    consume, drink_alcohol, drink_soft, eat_food
-     Props:     P_SP, P_HP,
-     Konzepte:  heilung
+DEFINIERT IN
+============
+
+   /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   val:  Gesamte Heilung.
+   rate: KP-Rate.
+
+
+BESCHREIBUNG
+============
+
+   Erhoeht die KP eines Spielers automatisch insgesamt um den Wert "val".
+   Pro heart_beat() wird ihm dabei der Wert "rate" zugefuehrt.
+   Sollen neben P_SP noch weitere Props manipuliert werden - bspw. zur
+   P_FOOD - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERTE
+==============
+
+   Der getankte Wert pro heart_beat().
+
+
+BEMERKUNG
+=========
+
+   Sollte von jeder tragbaren Heilung genutzt werden, welche den Spieler
+   darauf schliessen lassen kann, auf natuerlichem und nichtmagischem Weg
+   (Essen, Trinken) geheilt worden zu sein.
+
+
+BEISPIEL
+========
+
+   s. Bsp. zu "buffer_hp"
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp
+   Tanken:    consume, drink_alcohol, drink_soft, eat_food
+   Props:     P_SP, P_HP,
+   Konzepte:  heilung
 
 9. August 2015 Gloinson
-
diff --git a/doc/lfun/buy_obj b/doc/lfun/buy_obj
index bf1995b..0f0b965 100644
--- a/doc/lfun/buy_obj
+++ b/doc/lfun/buy_obj
@@ -1,42 +1,65 @@
+
 buy_obj()
+*********
 
-FUNKTION:
-	static string buy_obj(mixed ob, int short);
 
-DEFINIERT IN:
-	/std/shop.c
+FUNKTION
+========
 
-ARGUMENTE:
-	ob - der Gegenstand bei dem geprueft werden soll, ob der Laden ihn
-	     an this_player() verkauft. Sollte es sich hierbei um ein
-	     FixedObject handeln, wird ein String uebergeben, ansonsten ein
-	     object.
-        short - Bisher noch nicht in Benutzung. Aber fuer die Zukunft
-             vorgesehn, falls man mehrere Objekte auf einmal kauft.
-             Ein auswerten ist keine Pflicht, waere aber praktisch, damit
-             der Scroll dabei nicht zu gross wird.
+   static string buy_obj(mixed ob, int short);
 
-RUeCKGABEWERT:
-        Ein String was der Haendler sagen soll wieso der Gegenstand nicht
-	verkauft wird. Der String wird dabei wie folgt umgebrochen:
-        break_string(str, 78, Name(WER, 1)+" sagt: ")
-BESCHREIBUNG:
-	Durch ueberschreiben dieser Funktion ist es moeglich bestimmte
-	Objekte (wie z.b. Questobjekte) nur an ausgewaehlte Spieler zu
-	verkaufen). Aber auch abfragen ob der Laden ueberhaupt mit
-	this_player() handelt, sind moeglich.
 
-BEISPIELE:
-	static string buy_obj(mixed ob, int short)
-	{
-	   if (PL->QueryProp(P_RACE)=="Zwerg")
-	      return "Ich verkaufe nichts an Zwerge!";
-	   return ::buy_obj(ob, short);
-	}
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	sell_obj(), AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
-        /std/shop.c
+   /std/shop.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   ob - der Gegenstand bei dem geprueft werden soll, ob der Laden ihn
+        an this_player() verkauft. Sollte es sich hierbei um ein
+        FixedObject handeln, wird ein String uebergeben, ansonsten ein
+        object.
+   short - Bisher noch nicht in Benutzung. Aber fuer die Zukunft
+        vorgesehn, falls man mehrere Objekte auf einmal kauft.
+        Ein auswerten ist keine Pflicht, waere aber praktisch, damit
+        der Scroll dabei nicht zu gross wird.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein String was der Haendler sagen soll wieso der Gegenstand nicht
+   verkauft wird. Der String wird dabei wie folgt umgebrochen:
+   break_string(str, 78, Name(WER, 1)+" sagt: ")
+
+
+BESCHREIBUNG
+============
+
+   Durch ueberschreiben dieser Funktion ist es moeglich bestimmte
+   Objekte (wie z.b. Questobjekte) nur an ausgewaehlte Spieler zu
+   verkaufen). Aber auch abfragen ob der Laden ueberhaupt mit
+   this_player() handelt, sind moeglich.
+
+
+BEISPIELE
+=========
+
+   static string buy_obj(mixed ob, int short)
+   {
+      if (PL->QueryProp(P_RACE)=="Zwerg")
+         return "Ich verkaufe nichts an Zwerge!";
+      return ::buy_obj(ob, short);
+   }
+
+
+SIEHE AUCH
+==========
+
+   sell_obj(), AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
+   /std/shop.c
+
 Last modified: Thu Mar 4 15:26:13 1999 by Padreic
diff --git a/doc/lfun/catch_msg b/doc/lfun/catch_msg
index 3bf09c9..42d1950 100644
--- a/doc/lfun/catch_msg
+++ b/doc/lfun/catch_msg
@@ -1,15 +1,26 @@
+
 catch_msg()
+***********
 
-SYNOPSIS:
-    void catch_msg(mixed *arr, object obj)
 
-DESCRIPTION:
-    When say(), tell_object()  or tell_room() are used with an array 
-    as message, the array will be passed to catch_message() in all living
-    objects that can hear it, instead of writing to the user resp.
-    sending to catch_tell(). This can be used to implement
-    communication protocols between livings. The second denotes
-    the object that has sent the message.
+SYNOPSIS
+========
 
-SEE ALSO:
- say(E), tell_room(E), tell_object(E), catch_tell(L)
+   void catch_msg(mixed *arr, object obj)
+
+
+DESCRIPTION
+===========
+
+   When say(), tell_object()  or tell_room() are used with an array
+   as message, the array will be passed to catch_message() in all living
+   objects that can hear it, instead of writing to the user resp.
+   sending to catch_tell(). This can be used to implement
+   communication protocols between livings. The second denotes
+   the object that has sent the message.
+
+
+SEE ALSO
+========
+
+   say(E), tell_room(E), tell_object(E), catch_tell(L)
diff --git a/doc/lfun/catch_tell b/doc/lfun/catch_tell
index b64832b..ff4e030 100644
--- a/doc/lfun/catch_tell
+++ b/doc/lfun/catch_tell
@@ -1,25 +1,36 @@
+
 catch_tell()
+************
 
-SYNOPSIS:
-	void catch_tell(string)
 
-DESCRIPTION:
-	When a message is sent to a noninteractive player, via say(),
-	tell_object, tell_room(), printf() or write(), it will get to the
-	function catch_tell(string). This will enable communications between
-	NPCs and from a player to an NPC.
+SYNOPSIS
+========
 
-	Also, if an interactive object is being shadowed and the
-	shadow has catch_tell() defined, it will receive all output
-	that would otherwise be written to the user.
+   void catch_tell(string)
 
-	If a message is sent by an interactive object, catch_tell() is
-	not called in that object, to prevent recursive calls. Thus
-	catch_tell() in interactive objects can be used to filter the
-	output that goes to the users.
 
-	The efun shout() sends to interactive objects only.
+DESCRIPTION
+===========
 
-SEE ALSO:
-	enable_commands(E), say(E), tell_object(E), tell_room(E),
-	write(E), catch_msg(L) 
+   When a message is sent to a noninteractive player, via say(),
+   tell_object, tell_room(), printf() or write(), it will get to the
+   function catch_tell(string). This will enable communications between
+   NPCs and from a player to an NPC.
+
+   Also, if an interactive object is being shadowed and the
+   shadow has catch_tell() defined, it will receive all output
+   that would otherwise be written to the user.
+
+   If a message is sent by an interactive object, catch_tell() is
+   not called in that object, to prevent recursive calls. Thus
+   catch_tell() in interactive objects can be used to filter the
+   output that goes to the users.
+
+   The efun shout() sends to interactive objects only.
+
+
+SEE ALSO
+========
+
+   enable_commands(E), say(E), tell_object(E), tell_room(E),
+   write(E), catch_msg(L)
diff --git a/doc/lfun/check_and_update_timed_key b/doc/lfun/check_and_update_timed_key
index 513c261..aa96667 100644
--- a/doc/lfun/check_and_update_timed_key
+++ b/doc/lfun/check_and_update_timed_key
@@ -1,93 +1,114 @@
+
 check_and_update_timed_key()
+****************************
 
-FUNKTION:
-       public int check_and_update_timed_key(int duration, string key)
-       
-DEFINIERT IN:
-       /std/living/life.c    
 
-ARGUMENTE:
-       int duration: In wieviel Sekunden wird <key> wieder freigebeben,
-                     (z.B. wann kann der Spieler an dieser Stelle eine neue 
-                     Heilung bekommen).
-       string key  : Eindeutiger Name, wird zusammen mit <duration>
-                     gespeichert.
+FUNKTION
+========
 
-BESCHREIBUNG:
-       Diese Funktion hat die Aufgabe, Zeitsperren verschiedenster Art
-       einfach zu ermoeglichen (z.B. die Realisierung charakter-abhaengiger
-       Heilstellen u.ae.).
+   public int check_and_update_timed_key(int duration, string key)
 
-       <key> muss eindeutig sein, am besten verwendet man den eigenen
-       Magiernamen (und ggf. nen Gebietsnamen) als Teil des Strings.
 
-       Die Funktion ist definiert in /std/living/life.c. Somit funktioniert
-       sie auch bei NPCs. Die Daten werden in P_TIMING_MAP gespeichert, sind
-       also gegen "ende" resistent. (werden allerdings nach Ablauf ggf.
-       'aufgeraeumt')
+DEFINIERT IN
+============
 
-       Das Mapping P_TIMING_MAP ist NICHT zur Abfrage und / oder Manipulation
-       'per Hand' vorgesehen.
+   /std/living/life.c
 
-RUeCKGABEWERT:
-       0    Irgendein Fehler im Aufruf, evtl. existiert die Funktion (noch)
-            nicht im jew. Objekt.
 
-      -1    Alles okay. Neuer Zeitpunkt wird automatisch gespeichert. In
-            diesem Fall darf der Spieler geheilt werden.
+ARGUMENTE
+=========
 
-      >0    Key noch gesperrt, in dem Fall darf also nicht geheilt werden. 
-            Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
-            laesst sich daher dazu nutzen, um dem Spieler einen Anhaltspunkt
-            zu geben, wann er die Stelle wieder nutzen kann, etwa:
+   int duration: In wieviel Sekunden wird <key> wieder freigebeben,
+                 (z.B. wann kann der Spieler an dieser Stelle eine neue
+                 Heilung bekommen).
+   string key  : Eindeutiger Name, wird zusammen mit <duration>
+                 gespeichert.
 
-            "Die Schale ist erst halb voll, Du musst noch etwas warten."
 
-BEISPIELE:
-       Eine Heilstelle soll jedem Spieler alle 5min zur Verfuegung stehen:
+BESCHREIBUNG
+============
 
-       AddCmd(({"trink","trinke"}),"trink_cmd");
+   Diese Funktion hat die Aufgabe, Zeitsperren verschiedenster Art
+   einfach zu ermoeglichen (z.B. die Realisierung charakter-abhaengiger
+   Heilstellen u.ae.).
 
-       int trink_cmd(string str){
-         ...
-         ...
-         /*
-         Der key sollte natuerlich eine etwas eindeutigere Kennzeichnung
-         wie etwa "tilly_trinken" bekommen, auch wenn er durch einen
-         anderen (gleichnamigen) nicht ueberschrieben werden kann.
+   <key> muss eindeutig sein, am besten verwendet man den eigenen
+   Magiernamen (und ggf. nen Gebietsnamen) als Teil des Strings.
 
-         Trifft diese Abfrage hier zu, kann dem Spieler Heilung o.ae. zu-
-         gefuehrt werden. Die neue Zeit (duration) wird automatisch gesetzt.
-         */
-         if(this_player()->check_and_update_timed_key(300,"jof_trinken")==-1){
-           if(this_player()->drink_soft(2)){
-             this_player()->heal_self(50);
-             write("Du fuehlst Dich sichtlich erfrischt.\n");
-             return 1;
-            }
-           else{
-             write("Du hast schon zuviel getrunken.\n");
-             return 1;
-            }
-          }
-         else {
-           write("Du trinkst und denkst . o O (Hmm, nicht schlecht).\n");
-           return 1;
-          }
-         return 0;
+   Die Funktion ist definiert in /std/living/life.c. Somit funktioniert
+   sie auch bei NPCs. Die Daten werden in P_TIMING_MAP gespeichert, sind
+   also gegen "ende" resistent. (werden allerdings nach Ablauf ggf.
+   'aufgeraeumt')
+
+   Das Mapping P_TIMING_MAP ist NICHT zur Abfrage und / oder Manipulation
+   'per Hand' vorgesehen.
+
+
+RUeCKGABEWERT
+=============
+
+    0    Irgendein Fehler im Aufruf, evtl. existiert die Funktion (noch)
+         nicht im jew. Objekt.
+
+   -1    Alles okay. Neuer Zeitpunkt wird automatisch gespeichert. In
+         diesem Fall darf der Spieler geheilt werden.
+
+   >0    Key noch gesperrt, in dem Fall darf also nicht geheilt werden.
+         Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
+         laesst sich daher dazu nutzen, um dem Spieler einen Anhaltspunkt
+         zu geben, wann er die Stelle wieder nutzen kann, etwa:
+
+         "Die Schale ist erst halb voll, Du musst noch etwas warten."
+
+
+BEISPIELE
+=========
+
+   Eine Heilstelle soll jedem Spieler alle 5min zur Verfuegung stehen:
+
+   AddCmd(({"trink","trinke"}),"trink_cmd");
+
+   int trink_cmd(string str){
+     ...
+     ...
+     /*
+     Der key sollte natuerlich eine etwas eindeutigere Kennzeichnung
+     wie etwa "tilly_trinken" bekommen, auch wenn er durch einen
+     anderen (gleichnamigen) nicht ueberschrieben werden kann.
+
+     Trifft diese Abfrage hier zu, kann dem Spieler Heilung o.ae. zu-
+     gefuehrt werden. Die neue Zeit (duration) wird automatisch gesetzt.
+     */
+     if(this_player()->check_and_update_timed_key(300,"jof_trinken")==-1){
+       if(this_player()->drink_soft(2)){
+         this_player()->heal_self(50);
+         write("Du fuehlst Dich sichtlich erfrischt.\n");
+         return 1;
         }
+       else{
+         write("Du hast schon zuviel getrunken.\n");
+         return 1;
+        }
+      }
+     else {
+       write("Du trinkst und denkst . o O (Hmm, nicht schlecht).\n");
+       return 1;
+      }
+     return 0;
+    }
 
-BEMERKUNGEN: 
-       Auch bei dieser Funktion ist darauf zu achten, dass Properties wie
-       P_FOOD, P_DRINK und P_ALCOHOL beruecksichtigt werden.
-       Heilstellen sind dem zustaendigen Magier fuer Heilungs-Balance zu 
-       melden. Wer dies momentan ist, kann dem Mailalias heilungs_balance
-       entnommen werden.
+BEMERKUNGEN:
+   Auch bei dieser Funktion ist darauf zu achten, dass Properties wie
+   P_FOOD, P_DRINK und P_ALCOHOL beruecksichtigt werden. Heilstellen
+   sind dem zustaendigen Magier fuer Heilungs-Balance zu melden. Wer
+   dies momentan ist, kann dem Mailalias heilungs_balance entnommen
+   werden.
 
-SIEHE AUCH:
-       check_timed_key, eat_food, drink_alcohol, drink_soft, heal_self,
-       restore_spell_points, reduce_hit_point
 
-----------------------------------------------------------------------------
+SIEHE AUCH
+==========
+
+   check_timed_key, eat_food, drink_alcohol, drink_soft, heal_self,
+   restore_spell_points, reduce_hit_point
+
 08.01.2012, Zesstra
-
diff --git a/doc/lfun/check_restrictions b/doc/lfun/check_restrictions
index 2c815cd..e173e8f 100644
--- a/doc/lfun/check_restrictions
+++ b/doc/lfun/check_restrictions
@@ -1,149 +1,202 @@
+
 check_restrictions()
-FUNKTION:
-    string check_restrictions(object pl, mapping restr)
+********************
 
-DEFINIERT IN:
-    /std/restriction_checker.c
 
-ARGUMENTE:
-    object pl        geprueftes Lebewesen
-    mapping restr    Mapping mit Restriktionen, s.u.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Die Methode wird verwendet, um Restriktionen (zum Beispiel fuer das
-    Casten eines Spells) zu pruefen. Sie wird von Spellbook und
-    Gildenobjekt direkt genutzt.
+   string check_restrictions(object pl, mapping restr)
 
-    Ihr wird dabei ein Spielerobjekt sowie ein Mapping mit den jeweiligen
-    Restriktionen uebergeben. Die aktuell moeglichen Keys des Mappings sind
-    weiter unten gelistet.
 
-BEMERKUNGEN:
-    Es wird bei der Rasse P_REAL_RACE geprueft. Der Tarnhelm funktioniert
-    also nicht.
+DEFINIERT IN
+============
 
-    Bei Erweiterungsvorschlaegen wendet euch bitte an einen EM oder
-    inheritet im Zweifelsfall nach Absprache.
-    NIEMALS solchen Code einfach KOPIEREN. Spaeter muss nur irgendwer
-    eurem alten Code hinterherraeumen.
+   /std/restriction_checker.c
+
+
+ARGUMENTE
+=========
+
+   object pl        geprueftes Lebewesen
+   mapping restr    Mapping mit Restriktionen, s.u.
+
+
+BESCHREIBUNG
+============
+
+   Die Methode wird verwendet, um Restriktionen (zum Beispiel fuer das
+   Casten eines Spells) zu pruefen. Sie wird von Spellbook und
+   Gildenobjekt direkt genutzt.
+
+   Ihr wird dabei ein Spielerobjekt sowie ein Mapping mit den jeweiligen
+   Restriktionen uebergeben. Die aktuell moeglichen Keys des Mappings sind
+   weiter unten gelistet.
+
+
+BEMERKUNGEN
+===========
+
+   Es wird bei der Rasse P_REAL_RACE geprueft. Der Tarnhelm funktioniert
+   also nicht.
+
+   Bei Erweiterungsvorschlaegen wendet euch bitte an einen EM oder
+   inheritet im Zweifelsfall nach Absprache.
+   NIEMALS solchen Code einfach KOPIEREN. Spaeter muss nur irgendwer
+   eurem alten Code hinterherraeumen.
 
 Aktuelle Liste der pruefbaren Parameter:
-    P_LEVEL
+   P_LEVEL
       Mindeststufe, die das Lebewesen besitzen muss, um die Aktion
       auszufuehren.
-    P_GUILD_LEVEL
-      Gildenlevel, das das Lebewesen mindestens erreicht haben muss, um die
-      Aktion auszufuehren.
-    SR_SEER
-      Ist gesetzt, wenn das Lebewesen Seher sein muss.
-      Auswertung nur fuer Interactives, NSC ignorieren das Flag.
-    P_XP
-      Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen muss,
+
+   P_GUILD_LEVEL
+      Gildenlevel, das das Lebewesen mindestens erreicht haben muss,
       um die Aktion auszufuehren.
-    P_QP
+
+   SR_SEER
+      Ist gesetzt, wenn das Lebewesen Seher sein muss. Auswertung nur
+      fuer Interactives, NSC ignorieren das Flag.
+
+   P_XP
+      Mindestmenge an Erfahrungspunkten, die ein Lebewesen besitzen
+      muss, um die Aktion auszufuehren.
+
+   P_QP
       Mindestmenge an Abenteuerpunkten, die das Lebewesen haben muss.
-    P_ALCOHOL
-      Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen liegen
-      muss, um die Aktion noch ausfuehren zu koennen.
-    P_DRINK
+
+   P_ALCOHOL
+      Menge an Alkohol, unter der der Alkoholspiegel des Lebewesen
+      liegen muss, um die Aktion noch ausfuehren zu koennen.
+
+   P_DRINK
       Menge an Fluessigkeit, unter der der Fluessigkeitsspiegel des
       Lebewesen liegen muss, um die Aktion noch ausfuehren zu koennen.
-    P_FOOD
-      Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel des
-      Spielers liegen muss, um die Aktion noch ausfuehren zu koennen.
-    P_DEAF
-      Ist gesetzt, falls der Spieler nicht taub sein darf.
-    P_FROG
-      Ist gesetzt, falls der Spieler kein Frosch sein darf.
-    P_BLIND
-      Ist gesetzt, falls der Spieler nicht blind sein darf.
-      Achtung: das ist nicht gleichbedeutend mit dem Umstand, dass er evtl.
-      nichts mehr sehen kann. Auch andere Gruende (zum Beispiel Dunkelheit)
-      koennen bewirken, dass ein Spieler nichts mehr sieht.
-    A_INT, A_DEX, A_CON, A_STR
-      Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren zu
+
+   P_FOOD
+      Beinhaltet die Menge an Nahrung, unter der der Nahrungsspiegel
+      des Spielers liegen muss, um die Aktion noch ausfuehren zu
       koennen.
-    SR_BAD, SR_GOOD
-      Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein Charakter sein
-      darf, um eine Aktion ausfuehren zu koennen.
-    SR_MIN_SIZE, SR_MAX_SIZE
-      Gibt die minimale, bzw. die maximale Groesse an, die ein Charakter
-      maximal haben darf, um eine Aktion ausfuehren zu koennen.
-    SR_FREE_HANDS
+
+   P_DEAF
+      Ist gesetzt, falls der Spieler nicht taub sein darf.
+
+   P_FROG
+      Ist gesetzt, falls der Spieler kein Frosch sein darf.
+
+   P_BLIND
+      Ist gesetzt, falls der Spieler nicht blind sein darf. Achtung:
+      das ist nicht gleichbedeutend mit dem Umstand, dass er evtl.
+      nichts mehr sehen kann. Auch andere Gruende (zum Beispiel
+      Dunkelheit) koennen bewirken, dass ein Spieler nichts mehr
+      sieht.
+
+   A_INT, A_DEX, A_CON, A_STR
+      Jeweilige Mindesthoehe eines Attribut, um eine Aktion ausfuehren
+      zu koennen.
+
+   SR_BAD, SR_GOOD
+      Gibt an, wie [minimal] boese bzw. wie [maximal] gut ein
+      Charakter sein darf, um eine Aktion ausfuehren zu koennen.
+
+   SR_MIN_SIZE, SR_MAX_SIZE
+      Gibt die minimale, bzw. die maximale Groesse an, die ein
+      Charakter maximal haben darf, um eine Aktion ausfuehren zu
+      koennen.
+
+   SR_FREE_HANDS
       Gibt an, wieviele freie Haende ein Charakter fuer diese Aktion
       besitzen muss.
-    SR_EXCLUDE_RACE
+
+   SR_EXCLUDE_RACE
       Mitglieder aller in dieser Liste aufgefuehrten Rassen koennen
       diese Aktion nicht ausfuehren.
-    SR_INCLUDE_RACE
-      Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen koennen
-      diese Aktion nicht ausfuehren.
-    SM_RACE
-      Hier kann pro Rasse ein Mapping mit besonderen (nur) fuer diese Rasse
-      geltenden Einschraenkungen vorgenommen werden. Als Keys sind die
-      in dieser Manpage beschriebenen Keys erlaubt, wobei SM_RACE nicht
-      rekursiv ausgewertet wird.
-      Der Rassenname ist gross geschrieben und "*" steht fuer alle Rassen.
-    SR_EXCLUDE_GUILD
-    SR_INCLUDE_GUILD
-      Diese beiden Keys verhalten sich wie SR_*_RACE, nur dass hier Gilden
-      genannt werden.
-    SR_FUN
+
+   SR_INCLUDE_RACE
+      Mitglieder aller NICHT in dieser Liste aufgefuehrten Rassen
+      koennen diese Aktion nicht ausfuehren.
+
+   SM_RACE
+      Hier kann pro Rasse ein Mapping mit besonderen (nur) fuer diese
+      Rasse geltenden Einschraenkungen vorgenommen werden. Als Keys
+      sind die in dieser Manpage beschriebenen Keys erlaubt, wobei
+      SM_RACE nicht rekursiv ausgewertet wird. Der Rassenname ist
+      gross geschrieben und "*" steht fuer alle Rassen.
+
+   SR_EXCLUDE_GUILD SR_INCLUDE_GUILD
+
+      Diese beiden Keys verhalten sich wie SR_*_RACE, nur dass hier
+      Gilden genannt werden.
+
+   SR_FUN
       Hier kann eine Funktion in verschiedenen Formen zum Pruefen der
-      Restriktionen angegeben werden, siehe execute_anything().
-      Das kann nuetzlich sein, um andere Restriktionen zu pruefen,
-      wie das Bestehen von Miniquests oder andere Faehigkeiten/Flags.
-      Ist der Test nicht bestanden, gibt die Funktion einen String zurueck.
-    SR_PROP
-      Hier kann ein Mapping mit Properties und zugehoerigen Werten angegeben
-      werden, die jeweils auf Identitaet geprueft werden. Zusaetzlich sollte
-      eine Meldung angegeben werden, die als Fehlermeldung ausgegeben wird,
-      wenn der Spieler die Bedingung nicht erfuellt. Es sollte immer eine
-      passende Meldung fuer den Spieler eingebaut werden. Beispiel:
-      ([ SR_PROP: ([P_AUSGANG_ENTDECKT: 1; "Dein Schwert fluestert "
-          "veraergert: Ich werde Dir erst dann zu Diensten sein, wenn Du "
-          "Dich als wuerdig erwiesen hast!"]) ])
-      Aufgrund der Meldung wird empfohlen, SR_PROP nicht in Restriktionen
-      einzusetzen, die massenweise in Savefiles landen (z.B.
-      Spielersavefiles).
-    SR_QUEST
-      Hier kann ein String-Array mit den Namen (Keys) der Quest(s) angegeben
-      werden, die der Spieler bestanden haben muss, um die Aktion ausfuehren
-      zu koennen.
-    SQ_MINIQUEST
-      Hier kann entweder ein String-Array mit den Ladenamen der vergebenden
-      Objekte oder ein Int-Array mit den Index-Nummern (IDs) der
-      Miniquest(s) (empfohlen!) angegeben werden, die der Spieler bestanden
-      haben muss, um die Aktion ausfuehren zu koennen.
+      Restriktionen angegeben werden, siehe execute_anything(). Das
+      kann nuetzlich sein, um andere Restriktionen zu pruefen, wie das
+      Bestehen von Miniquests oder andere Faehigkeiten/Flags. Ist der
+      Test nicht bestanden, gibt die Funktion einen String zurueck.
 
-BEISPIELE:
-    // #1 Levelbeschraenkung in der Abenteurergilde
-    AddSpell("feuerball",20,
-             ([SI_SKILLRESTR_LEARN:([P_LEVEL:15]), ...
+   SR_PROP
+      Hier kann ein Mapping mit Properties und zugehoerigen Werten
+      angegeben werden, die jeweils auf Identitaet geprueft werden.
+      Zusaetzlich sollte eine Meldung angegeben werden, die als
+      Fehlermeldung ausgegeben wird, wenn der Spieler die Bedingung
+      nicht erfuellt. Es sollte immer eine passende Meldung fuer den
+      Spieler eingebaut werden. Beispiel: ([ SR_PROP:
+      ([P_AUSGANG_ENTDECKT: 1; "Dein Schwert fluestert "
 
-    // #2 Glaubenstest im Klerus
-    AddSpell("bete",
-             ([SI_SKILLRESTR_LEARN: ([P_GUILD_LEVEL : LVL_NOVIZE,
-                                      SR_FUN : #'glaubensTest ]), ...
-    // mit
-    static string glaubensTest(object pl) {
-      if (pl->QueryProp(K_STRENGTH) < 8000)
-        return ("Deine Glaubensstaerke laesst zu wuenschen uebrig!\n");
-      return 0;
-    }
+         "veraergert: Ich werde Dir erst dann zu Diensten sein, wenn
+         Du " "Dich als wuerdig erwiesen hast!"]) ])
 
-    // #3 SM_RACE-Modifikation der Restriktionen:
-    //    haertere Restriktionen fuer Zwerge
-    //    - hoeheres Level
-    //    - zusaetzlich A_STR pruefen
-    ([P_LEVEL:15,
-      A_INT:10,
-      SM_RACE: (["Zwerg": ([P_LEVEL:17, A_STR:20])])])
-    // ist identisch zu
-    ([SM_RACE: (["*":     ([P_LEVEL:15, A_INT:10]),
-                 "Zwerg": ([P_LEVEL:17, A_INT:10, A_STR:20])])])
+      Aufgrund der Meldung wird empfohlen, SR_PROP nicht in
+      Restriktionen einzusetzen, die massenweise in Savefiles landen
+      (z.B. Spielersavefiles).
 
-SIEHE AUCH:
-    execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
+   SR_QUEST
+      Hier kann ein String-Array mit den Namen (Keys) der Quest(s)
+      angegeben werden, die der Spieler bestanden haben muss, um die
+      Aktion ausfuehren zu koennen.
 
-03. Januar 2014, Arathorn
+   SQ_MINIQUEST
+      Hier kann entweder ein String-Array mit den Ladenamen der
+      vergebenden Objekte oder ein Int-Array mit den Index-Nummern
+      (IDs) der Miniquest(s) (empfohlen!) angegeben werden, die der
+      Spieler bestanden haben muss, um die Aktion ausfuehren zu
+      koennen.
+
+
+BEISPIELE
+=========
+
+   // #1 Levelbeschraenkung in der Abenteurergilde
+   AddSpell("feuerball",20,
+            ([SI_SKILLRESTR_LEARN:([P_LEVEL:15]), ...
+
+   // #2 Glaubenstest im Klerus
+   AddSpell("bete",
+            ([SI_SKILLRESTR_LEARN: ([P_GUILD_LEVEL : LVL_NOVIZE,
+                                     SR_FUN : #'glaubensTest ]), ...
+   // mit
+   static string glaubensTest(object pl) {
+     if (pl->QueryProp(K_STRENGTH) < 8000)
+       return ("Deine Glaubensstaerke laesst zu wuenschen uebrig!\n");
+     return 0;
+   }
+
+   // #3 SM_RACE-Modifikation der Restriktionen:
+   //    haertere Restriktionen fuer Zwerge
+   //    - hoeheres Level
+   //    - zusaetzlich A_STR pruefen
+   ([P_LEVEL:15,
+     A_INT:10,
+     SM_RACE: (["Zwerg": ([P_LEVEL:17, A_STR:20])])])
+   // ist identisch zu
+   ([SM_RACE: (["*":     ([P_LEVEL:15, A_INT:10]),
+                "Zwerg": ([P_LEVEL:17, A_INT:10, A_STR:20])])])
+
+
+SIEHE AUCH
+==========
+
+   execute_anything(L), AddSpell (Gilde), P_RESTRICTIONS
+
+3. Januar 2014, Arathorn
diff --git a/doc/lfun/check_timed_key b/doc/lfun/check_timed_key
index 81baff7..58c70ab 100644
--- a/doc/lfun/check_timed_key
+++ b/doc/lfun/check_timed_key
@@ -1,34 +1,52 @@
+
 check_timed_key()
+*****************
 
-FUNKTION:
-       public int check_timed_key(string key)
-       
-DEFINIERT IN:
-       /std/living/life.c    
 
-ARGUMENTE:
-       string key  : Eindeutiger Name
+FUNKTION
+========
 
-BESCHREIBUNG:
-       Diese Funktion hat die Aufgabe, mittels check_and_update_timed_key()
-       gespeicherte Zeitsperren zu pruefen, aber dabei nicht zu veraendern.
+   public int check_timed_key(string key)
 
-       Es MUSS bei der eigentlichen Aktion (z.B. Heilung des Spielers) der
-       Rueckgabewert von check_and_update_timed_key() beruecksichtigt werden,
-       sollte dieses nicht -1 geliefert haben, MUSS <key> als gesperrt
-       betrachtet werden, d.h. check_timed_key() hat nur informativen
-       Charakter.
 
-RUeCKGABEWERT:
-       0    Die Zeitsperre <key> ist abgelaufen.
+DEFINIERT IN
+============
 
-       >0   <key> ist noch gesperrt.
-            Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
+   /std/living/life.c
 
-SIEHE AUCH:
-       check_and_update_timed_key, eat_food, drink_alcohol, drink_soft,
-       heal_self, restore_spell_points, reduce_hit_point
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   string key  : Eindeutiger Name
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion hat die Aufgabe, mittels check_and_update_timed_key()
+   gespeicherte Zeitsperren zu pruefen, aber dabei nicht zu veraendern.
+
+   Es MUSS bei der eigentlichen Aktion (z.B. Heilung des Spielers) der
+   Rueckgabewert von check_and_update_timed_key() beruecksichtigt werden,
+   sollte dieses nicht -1 geliefert haben, MUSS <key> als gesperrt
+   betrachtet werden, d.h. check_timed_key() hat nur informativen
+   Charakter.
+
+
+RUeCKGABEWERT
+=============
+
+   0    Die Zeitsperre <key> ist abgelaufen.
+
+   >0   <key> ist noch gesperrt.
+        Der Rueckgabewert ist der Zeitpunkt, ab dem <key> wieder frei ist,
+
+
+SIEHE AUCH
+==========
+
+   check_and_update_timed_key, eat_food, drink_alcohol, drink_soft,
+   heal_self, restore_spell_points, reduce_hit_point
+
 08.01.2012, Zesstra
-
diff --git a/doc/lfun/clean_up b/doc/lfun/clean_up
index 97ddf09..7c124fb 100644
--- a/doc/lfun/clean_up
+++ b/doc/lfun/clean_up
@@ -1,43 +1,67 @@
+
 clean_up()
-FUNKTION:
-     int clean_up(int ref);
+**********
 
-DEFINIERT IN:
-     /std/room.c
-     man kann die Funktion jedoch auch in beliebigen Objekten selbst
-     definieren.
 
-ARGUMENTE:
-     ref
-             + 0 bei gecloneten Objekten
-             + 1 bei einfachen geladenen Objekten
-             + >1 bei Objekten, die geerbt wurden oder als Blueprint dienen
-             + <0, wenn clean_up() von aussen aufgerufen wurde (das muss man
-               selbst beachten!)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Wenn ein Objekt seit langer Zeit nicht mehr benutzt wurde, kann es sich
-     hier selbst zerstoeren. Das sollte das Objekt allerdings nur tun, wenn
-     ref kleiner oder gleich 1 ist.
+   int clean_up(int ref);
 
-RUeCKGABEWERT:
-     Der Rueckgabewert hat nur dann eine Bedeutung, wenn sich das Objekt
-     nicht selbst zerstoert hat. Wird 0 zurueckgegeben, so wird clean_up()
-     erst dann wieder aufgerufen, nachdem das Objekt aus- und wieder
-     eingeswappt wurde.
 
-     Ein Rueckgabewert ungleich 0 zeigt an, dass das Objekt sich
-     wahrscheinlich in der naechsten clean_up()-Runde zerstoeren kann, wenn
-     in der Zwischenzeit zB. noch einmal reset() aufgerufen wurde.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Standardmaessig definieren nur Raeume clean_up().
+   /std/room.c
+   man kann die Funktion jedoch auch in beliebigen Objekten selbst
+   definieren.
 
-     Die Zeiten zwischen zwei Aufrufen von clean_up() betragen momentan
-     einen Tag (86400 Sekunden).
 
-SIEHE AUCH:
-     reset(), P_NEVER_CLEAN
-     memory
+ARGUMENTE
+=========
+
+   ref
+           + 0 bei gecloneten Objekten
+           + 1 bei einfachen geladenen Objekten
+           + >1 bei Objekten, die geerbt wurden oder als Blueprint dienen
+           + <0, wenn clean_up() von aussen aufgerufen wurde (das muss man
+             selbst beachten!)
+
+
+BESCHREIBUNG
+============
+
+   Wenn ein Objekt seit langer Zeit nicht mehr benutzt wurde, kann es sich
+   hier selbst zerstoeren. Das sollte das Objekt allerdings nur tun, wenn
+   ref kleiner oder gleich 1 ist.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Rueckgabewert hat nur dann eine Bedeutung, wenn sich das Objekt
+   nicht selbst zerstoert hat. Wird 0 zurueckgegeben, so wird clean_up()
+   erst dann wieder aufgerufen, nachdem das Objekt aus- und wieder
+   eingeswappt wurde.
+
+   Ein Rueckgabewert ungleich 0 zeigt an, dass das Objekt sich
+   wahrscheinlich in der naechsten clean_up()-Runde zerstoeren kann, wenn
+   in der Zwischenzeit zB. noch einmal reset() aufgerufen wurde.
+
+
+BEMERKUNGEN
+===========
+
+   Standardmaessig definieren nur Raeume clean_up().
+
+   Die Zeiten zwischen zwei Aufrufen von clean_up() betragen momentan
+   einen Tag (86400 Sekunden).
+
+
+SIEHE AUCH
+==========
+
+   reset(), P_NEVER_CLEAN
+   memory
 
 21. Maerz 2004 Gloinson
diff --git a/doc/lfun/cmd_shoot b/doc/lfun/cmd_shoot
index ccd52ce..9cbc9b9 100644
--- a/doc/lfun/cmd_shoot
+++ b/doc/lfun/cmd_shoot
@@ -1,31 +1,54 @@
+
 cmd_shoot()
+***********
 
-FUNKTION:
-    static int cmd_shoot(string str)
 
-DEFINIERT IN:
-    /std/ranged_weapon.c
+FUNKTION
+========
 
-ARGUMENTE:
-    string str    - Schusssyntax
+   static int cmd_shoot(string str)
 
-BESCHREIBUNG:
-    Kommandofunktion der Fernwaffe. Enthaelt die Vorbereitung und den Schuss.
 
-BEMERKUNGEN:
-    Ist in der Fernwaffe mit AddCmd( ({"schiess", "schiesse"}), "cmd_shoot");
-    angebunden. Will man eine andere Syntax haben, kann man mit
-    AddCmd/RemoveCmd diese umsetzen.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    RemoveCmd(({"schiess", "schiesse"})); // entferne Default-Kommando
-    AddCmd(({"schleuder", "schleudere"}), #'cmd_shoot);
+   /std/ranged_weapon.c
 
-SIEHE AUCH:
-    Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
-    Methoden:  shoot_dam(L), cmd_shoot(L)
-    Kommandos: AddCmd(L), RemoveCmd(L)
-    Syntax:    _unparsed_args(L)
-    Sonstiges: fernwaffen
 
-28.Jul 2014 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   string str    - Schusssyntax
+
+
+BESCHREIBUNG
+============
+
+   Kommandofunktion der Fernwaffe. Enthaelt die Vorbereitung und den Schuss.
+
+
+BEMERKUNGEN
+===========
+
+   Ist in der Fernwaffe mit AddCmd( ({"schiess", "schiesse"}), "cmd_shoot");
+   angebunden. Will man eine andere Syntax haben, kann man mit
+   AddCmd/RemoveCmd diese umsetzen.
+
+
+BEISPIELE
+=========
+
+   RemoveCmd(({"schiess", "schiesse"})); // entferne Default-Kommando
+   AddCmd(({"schleuder", "schleudere"}), #'cmd_shoot);
+
+
+SIEHE AUCH
+==========
+
+   Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
+   Methoden:  shoot_dam(L), cmd_shoot(L)
+   Kommandos: AddCmd(L), RemoveCmd(L)
+   Syntax:    _unparsed_args(L)
+   Sonstiges: fernwaffen
+
+28.Jul 2014 Gloinson
diff --git a/doc/lfun/command_me b/doc/lfun/command_me
index cdb1ef2..77a3cc5 100644
--- a/doc/lfun/command_me
+++ b/doc/lfun/command_me
@@ -1,81 +1,110 @@
+
 command_me()
-FUNKTION:
-    int command_me(string str)
+************
 
-ARGUMENTE:
-    string str - auszufuehrendes Kommando
 
-DEFINIERT IN:
-    /std/npc.c, /std/player/command.c
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Fuehrt 'str' wie ein Kommando aus, welches direkt vom Living
-    abgegeben wurde.
+   int command_me(string str)
 
-    Der Rueckgabewert ist >=1 fuer Erfolg und 0 fuer Misserfolg. 
-    Rueckgabewert ist im Erfolgsfall die Hoehe der EvalCost in Ticks. 
 
-    command_me() leitet den Befehl an command()(E) weiter und erlaubt
-    dadurch auch den Aufruf von sonst durch "static", "protected" oder
-    "private" vor externem Aufruf geschuetzten Kommando-Funktionen.
+ARGUMENTE
+=========
 
-    Kommandos mit oeffentlichen Kommandofunktionen (also damit alle mit
-    AddCmd definierten Kommandos) koennen auch durch command()(E)
-    von aussen ausgeloest werden.
+   string str - auszufuehrendes Kommando
 
-BEMERKUNGEN:    
-    - beruecksichtigt Aliase, d.h. wenn man Aliase eines Spielers
-      ignorieren will, muss man ein \\ (fuer ein \ im Eingabestring)
-      vor den Befehl stellen
-    - fuer objektinterne Kommandos funktioniert also auch command()(E)
 
-BEISPIEL:
-    (Code des Testraum ist in /doc/beispiele/testobjekte/command_me_testraum)
-    // #1: Testraum, zwinge Spieler bei "schleiche heran" zum Furzen
-    //     command_me() ist hier noetig, da das Furzen eine geschuetzte
-    //     Kommandofunktion hat
-    inherit "/std/room";
+DEFINIERT IN
+============
 
-    void create() {
-      ::create();
-      AddCmd("schleiche&heran|herum", "action_schleichen");
-    }
-    
-    void init() {
-      ::init();
-      add_action("action_kriechen", "kriech", 1);
-    }
+   /std/npc.c, /std/player/command.c
 
-    static int action_schleichen(string str) {
-      string tmp = this_player()->QueryProp(P_RACE);
-      // ... 
-      if(tmp[<1]=='e') tmp=tmp[0..<2];
-      write(break_string("Du versuchst leise zu schleichen, dabei passiert "
-        "dir aber ein allzu "+
-        (tmp=="Mensch"?"menschliches":lower_case(tmp)+"isches")+
-        " Missgeschick. Verflucht!", 78));
-      this_player()->command_me("\\furze");
-      return 1;
-    }
-    
-    static int action_kriechen(string str) {
-      write(break_string("Deine Knie tun zu sehr weh dafuer.", 78));
-      tell_room(this_object(), break_string(this_player()->Name(WER)+
-        " knackt mit den Knien.", 78));
-      return 1;
-    }
-    
-    // #2 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
-    //    Beide Kommandos gelingen, da Kommando mit AddCmd definiert.
-    find_player("naddl")->command_me("schleiche herum")
-    command("schleiche herum", find_player("naddl")); 
 
-    // #3 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
-    find_player("naddl")->command_me("krieche")
-    //    Folgendes Kommando schlaegt fehl, da Kommandofunktion static ist.
-    command("krieche", find_player("naddl"));
-    
-SIEHE AUCH:
-     enable_commands(E), command(E)
+BESCHREIBUNG
+============
+
+   Fuehrt 'str' wie ein Kommando aus, welches direkt vom Living
+   abgegeben wurde.
+
+   Der Rueckgabewert ist >=1 fuer Erfolg und 0 fuer Misserfolg.
+   Rueckgabewert ist im Erfolgsfall die Hoehe der EvalCost in Ticks.
+
+   command_me() leitet den Befehl an command()(E) weiter und erlaubt
+   dadurch auch den Aufruf von sonst durch "static", "protected" oder
+   "private" vor externem Aufruf geschuetzten Kommando-Funktionen.
+
+   Kommandos mit oeffentlichen Kommandofunktionen (also damit alle mit
+   AddCmd definierten Kommandos) koennen auch durch command()(E)
+   von aussen ausgeloest werden.
+
+BEMERKUNGEN:
+   * beruecksichtigt Aliase, d.h. wenn man Aliase eines Spielers
+     ignorieren will, muss man ein \ (fuer ein im Eingabestring) vor
+     den Befehl stellen
+
+   * fuer objektinterne Kommandos funktioniert also auch
+     command()(E)
+
+
+BEISPIEL
+========
+
+   (Code des Testraum ist in /doc/beispiele/testobjekte/command_me_testraum)
+   // #1: Testraum, zwinge Spieler bei "schleiche heran" zum Furzen
+   //     command_me() ist hier noetig, da das Furzen eine geschuetzte
+   //     Kommandofunktion hat
+   inherit "/std/room";
+
+   void create() {
+     ::create();
+     AddCmd("schleiche&heran|herum", "action_schleichen");
+   }
+
+
+
+   void init() {
+     ::init();
+     add_action("action_kriechen", "kriech", 1);
+   }
+
+   static int action_schleichen(string str) {
+     string tmp = this_player()->QueryProp(P_RACE);
+     // ...
+     if(tmp[<1]=='e') tmp=tmp[0..<2];
+     write(break_string("Du versuchst leise zu schleichen, dabei passiert "
+       "dir aber ein allzu "+
+       (tmp=="Mensch"?"menschliches":lower_case(tmp)+"isches")+
+       " Missgeschick. Verflucht!", 78));
+     this_player()->command_me("\\furze");
+     return 1;
+   }
+
+
+
+   static int action_kriechen(string str) {
+     write(break_string("Deine Knie tun zu sehr weh dafuer.", 78));
+     tell_room(this_object(), break_string(this_player()->Name(WER)+
+       " knackt mit den Knien.", 78));
+     return 1;
+   }
+
+
+
+   // #2 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
+   //    Beide Kommandos gelingen, da Kommando mit AddCmd definiert.
+   find_player("naddl")->command_me("schleiche herum")
+   command("schleiche herum", find_player("naddl"));
+
+   // #3 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
+   find_player("naddl")->command_me("krieche")
+   //    Folgendes Kommando schlaegt fehl, da Kommandofunktion static ist.
+   command("krieche", find_player("naddl"));
+
+
+SIEHE AUCH
+==========
+
+   enable_commands(E), command(E)
 
 06 Sep 2012 Gloinson
diff --git a/doc/lfun/consume b/doc/lfun/consume
index 9979ec4..f07ece3 100644
--- a/doc/lfun/consume
+++ b/doc/lfun/consume
@@ -1,22 +1,38 @@
+
+consume()
+*********
+
 public varargs int consume(mapping cinfo, int testonly)
 
-FUNKTION:
-    public varargs int consume(mapping cinfo, int testonly);
 
-    Aenderung der Gesundheit eines Lebewesens durch etwas Konsumierbares.
+FUNKTION
+========
 
-DEFINIERT IN:
-    /std/living/life.c
+   public varargs int consume(mapping cinfo, int testonly);
 
-ARGUMENTE:
-    cinfo
-        Mapping mit Informationen ueber die Gesundheitsaenderung
-        Heilung.
-    testonly
-        Gibt an, ob nur die Bedingungen abgetestet werden sollen,
-        oder auch die Wirkung eintreten soll.
+   Aenderung der Gesundheit eines Lebewesens durch etwas Konsumierbares.
 
-RUECKGABEWERT:
+
+DEFINIERT IN
+============
+
+   /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   cinfo
+       Mapping mit Informationen ueber die Gesundheitsaenderung
+       Heilung.
+   testonly
+       Gibt an, ob nur die Bedingungen abgetestet werden sollen,
+       oder auch die Wirkung eintreten soll.
+
+
+RUECKGABEWERT
+=============
+
     1 erfolgreich konsumiert
     0 keine oder falsche Aenderungsdaten in cinfo (nicht benutzbar)
    <0 Bedingung fuer konsumieren nicht erfuellt, Bitset aus:
@@ -25,61 +41,75 @@
       HC_MAX_ALCOHOL_REACHED - Kann nichts mehr saufen
       HC_HOOK_CANCELLETION   - durch H_HOOK_CONSUME abgebrochen
 
-BESCHREIBUNG:
-    Die Funktion stellt eine Moeglichkeit zur Verfuegung, die Aenderung
-    der Gesundheit eines Lebewesens beim Konsumieren von irgendetwas (z.B in
-    einer Kneipe, durch eine Heilstellte oder tragbare Tanke, ...) zentral zu
-    erledigen. Sie vereint in sich die Pruefung auf Durchfuerbarkeit der
-    Aenderung und Anwendung der Aenderung.
 
-    Der erste Parameter gibt die Eigenschaften der Aenderung an, der zweite ob
-    ausschliesslich die Pruefung auf Anwendbarkeit erfolgen soll.
+BESCHREIBUNG
+============
 
-    Das Mapping cinfo hat folgende Struktur:
-    a) Einfache Angabe der betroffenen Properties. In neuem Code bitte nicht
-       machen, dort ein Mapping wie unter b) beschrieben nutzen!
+   Die Funktion stellt eine Moeglichkeit zur Verfuegung, die Aenderung
+   der Gesundheit eines Lebewesens beim Konsumieren von irgendetwas (z.B in
+   einer Kneipe, durch eine Heilstellte oder tragbare Tanke, ...) zentral zu
+   erledigen. Sie vereint in sich die Pruefung auf Durchfuerbarkeit der
+   Aenderung und Anwendung der Aenderung.
 
-    b) Strukturiert in Effekte und Bedingungen mit folgenden Schluesseln:
-      H_EFFECTS - Mapping der zu aendernden Properties mit dem Umfang der
-                  Aenderung, erlaubte Properties siehe H_ALLOWED_EFFECTS
+   Der erste Parameter gibt die Eigenschaften der Aenderung an, der zweite ob
+   ausschliesslich die Pruefung auf Anwendbarkeit erfolgen soll.
 
-      H_CONDITIONS - Mapping der zu pruefenden Properties mit dem Umfang der
-                     Aenderung, erlaubte Properties siehe H_ALLOWED_CONDITIONS
+   Das Mapping cinfo hat folgende Struktur:
+   a) Einfache Angabe der betroffenen Properties. In neuem Code bitte nicht
+      machen, dort ein Mapping wie unter b) beschrieben nutzen!
 
-      H_DISTRIBUTION - Verteilung der Aenderung fuer P_SP, P_HP
-                       HD_INSTANT bzw. 0: instante Heilung
-                       1 - 50: angebene Zahl pro Heartbeat
-                       HD_STANDARD: 5 pro Heartbeat
+   b) Strukturiert in Effekte und Bedingungen mit folgenden Schluesseln:
+     H_EFFECTS - Mapping der zu aendernden Properties mit dem Umfang der
+                 Aenderung, erlaubte Properties siehe H_ALLOWED_EFFECTS
 
-    Aenderungen koennen sowohl positiv als auch negativ sein.
+     H_CONDITIONS - Mapping der zu pruefenden Properties mit dem Umfang der
+                    Aenderung, erlaubte Properties siehe H_ALLOWED_CONDITIONS
 
-BEMERKUNGEN:
-    Hierbei aber bitte beachten, dass Tanken/Entanken sowie Heilungen ggf. von
-    der (Heilungs-)Balance genehmigt werden muessen!
+     H_DISTRIBUTION - Verteilung der Aenderung fuer P_SP, P_HP
+                      HD_INSTANT bzw. 0: instante Heilung
+                      1 - 50: angebene Zahl pro Heartbeat
+                      HD_STANDARD: 5 pro Heartbeat
 
-BEISPIELE:
-    Heilung um 100 KP, 50 LP, aber nur wenn 30 P_FOOD gegessen werden kann:
+   Aenderungen koennen sowohl positiv als auch negativ sein.
 
-    consume( ([H_EFFECTS: ([P_HP:50, P_SP:100]),
-               H_CONDITIONS: ([P_FOOD:30]) ]) );
 
-    Heilung um 100 KP und Vergiftung um 2, wenn 15 Alkohol getrunken werden
-    koennen. Die SP werden zeitverzoegert mit 10 pro Heartbeat zugefuehrt.
+BEMERKUNGEN
+===========
 
-    consume(([H_EFFECTS: ([P_SP: 100, P_POISON: 2]),
-              H_CONDITIONS: ([P_ALCOHOL: 15]),
-              H_DISTRIBUTION: 10]) )
+   Hierbei aber bitte beachten, dass Tanken/Entanken sowie Heilungen ggf. von
+   der (Heilungs-)Balance genehmigt werden muessen!
 
-SIEHE AUCH:
-     Aehnlich:  drink_alcohol, eat_food, drink_soft
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Enttanken: defuel_drink, defuel_food
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
 
-LETZTE AeNDERUNG:
-    29.05.2015, Boing
+BEISPIELE
+=========
 
+   Heilung um 100 KP, 50 LP, aber nur wenn 30 P_FOOD gegessen werden kann:
+
+   consume( ([H_EFFECTS: ([P_HP:50, P_SP:100]),
+              H_CONDITIONS: ([P_FOOD:30]) ]) );
+
+   Heilung um 100 KP und Vergiftung um 2, wenn 15 Alkohol getrunken werden
+   koennen. Die SP werden zeitverzoegert mit 10 pro Heartbeat zugefuehrt.
+
+   consume(([H_EFFECTS: ([P_SP: 100, P_POISON: 2]),
+             H_CONDITIONS: ([P_ALCOHOL: 15]),
+             H_DISTRIBUTION: 10]) )
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  drink_alcohol, eat_food, drink_soft
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Enttanken: defuel_drink, defuel_food
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
+
+
+LETZTE AeNDERUNG
+================
+
+   29.05.2015, Boing
diff --git a/doc/lfun/create b/doc/lfun/create
index 9582609..03fc91a 100644
--- a/doc/lfun/create
+++ b/doc/lfun/create
@@ -1,78 +1,104 @@
+
 create()
+********
 
-FUNKTION:
-     protected void create();
-     void create();
 
-DEFINIERT IN:
-     allen Standardobjekten
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   protected void create();
+   void create();
 
-BESCHREIBUNG:
-     Diese Funktion wird aufgerufen, wenn ein Objekt geladen oder geclont
-     wird.
-     In dieser Funktion wird das Objekt initialisiert und konfiguriert.
-     Waehrend des create() kann es einen this_player()/this_interactive()
-     geben, muss aber nicht!
-     Im create() hat das Objekt noch kein environment().
-     create() wird nur gerufen, wenn das Objekte geclont oder explizit geladen
-     wird. Wenn es aufgrund eines inherit in einem anderen Objekt vom Driver
-     geladen wird, wird das create() nicht ausgefuehrt (s. create_super()).
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Erbt man von anderen Objekten, so besteht die erste Aktion innerhalb
-     von create() normalerweise darin, in diesen Objekten create()
-     aufzurufen.
-     Die Funktion kann protected oder static sein (aber nicht private). Es
-     duerfte fuer die meisten Objekte sinnvoll sein, create() protected zu
-     deklarieren.
+   allen Standardobjekten
 
-     Um Speicher zu sparen, kann man bei Blueprints von der Konfigurierung
-     absehen (siehe Beispiel). Dies sollte man allerdings nicht bei Objekten
-     machen, von denen keine Clones erzeugt werden sollen (zB. bei Raeumen). 
 
-     Man sollte bei Abbruch des create() in BP unbedingt set_next_reset(-1);
-     rufen, da sonst die (nicht konfigurierte) BP resetten kann und dann
-     buggt.
+ARGUMENTE
+=========
 
-BEISPIELE:
-     Ein Gegenstand wuerde wie folgt konfiguriert:
+   keine
 
-     inherit "std/thing";
 
-     #include <properties.h>
+BESCHREIBUNG
+============
 
-     create()
-     {
-       // Wenn wir die Blueprint sind: NICHT konfigurieren!
-       // Bei normalen Raeumen oder Transportern sind diese beiden
-       // Zeilen wegzulassen!!!
-       if (!clonep(this_object())) {
-           set_next_reset(-1);    // wichtig, damit die BP nicht resettet.
-           return;
-       }
+   Diese Funktion wird aufgerufen, wenn ein Objekt geladen oder geclont
+   wird.
+   In dieser Funktion wird das Objekt initialisiert und konfiguriert.
+   Waehrend des create() kann es einen this_player()/this_interactive()
+   geben, muss aber nicht!
+   Im create() hat das Objekt noch kein environment().
+   create() wird nur gerufen, wenn das Objekte geclont oder explizit geladen
+   wird. Wenn es aufgrund eines inherit in einem anderen Objekt vom Driver
+   geladen wird, wird das create() nicht ausgefuehrt (s. create_super()).
 
-       // Ansonsten die allgemeinen Eigenschaften von /std/thing
-       // konfigurieren...
-       ::create();
 
-       // ...und nun unsere speziellen Eigenschaften:
-       SetProp(P_NAME, "Muell");
-       SetProp(P_SHORT, "Muell");
-       SetProp(P_LONG, "Voellig unnuetzer Muell!\n");
-       SetProp(P_ARTICLE, 0);
-       SetProp(P_VALUE, 0);
-       SetProp(P_GENDER, MALE);
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Erbt man von anderen Objekten, so besteht die erste Aktion innerhalb
+   von create() normalerweise darin, in diesen Objekten create()
+   aufzurufen.
+   Die Funktion kann protected oder static sein (aber nicht private). Es
+   duerfte fuer die meisten Objekte sinnvoll sein, create() protected zu
+   deklarieren.
+
+   Um Speicher zu sparen, kann man bei Blueprints von der Konfigurierung
+   absehen (siehe Beispiel). Dies sollte man allerdings nicht bei Objekten
+   machen, von denen keine Clones erzeugt werden sollen (zB. bei Raeumen).
+
+   Man sollte bei Abbruch des create() in BP unbedingt set_next_reset(-1);
+   rufen, da sonst die (nicht konfigurierte) BP resetten kann und dann
+   buggt.
+
+
+BEISPIELE
+=========
+
+   Ein Gegenstand wuerde wie folgt konfiguriert:
+
+   inherit "std/thing";
+
+   #include <properties.h>
+
+   create()
+   {
+     // Wenn wir die Blueprint sind: NICHT konfigurieren!
+     // Bei normalen Raeumen oder Transportern sind diese beiden
+     // Zeilen wegzulassen!!!
+     if (!clonep(this_object())) {
+         set_next_reset(-1);    // wichtig, damit die BP nicht resettet.
+         return;
      }
 
-SIEHE AUCH:
-     create(L), reset(L)
-     hook(C), create(H), create_ob(H), create_super(H, reset(H)
-     create(A), reset(A)
-----------------------------------------------------------------------------
+     // Ansonsten die allgemeinen Eigenschaften von /std/thing
+     // konfigurieren...
+     ::create();
+
+     // ...und nun unsere speziellen Eigenschaften:
+     SetProp(P_NAME, "Muell");
+     SetProp(P_SHORT, "Muell");
+     SetProp(P_LONG, "Voellig unnuetzer Muell!\n");
+     SetProp(P_ARTICLE, 0);
+     SetProp(P_VALUE, 0);
+     SetProp(P_GENDER, MALE);
+   }
+
+
+SIEHE AUCH
+==========
+
+   create(L), reset(L)
+   hook(C), create(H), create_ob(H), create_super(H, reset(H)
+   create(A), reset(A)
+
 22.10.2007, Zesstra
diff --git a/doc/lfun/create_default_npc b/doc/lfun/create_default_npc
index b331c5c..09c3a14 100644
--- a/doc/lfun/create_default_npc
+++ b/doc/lfun/create_default_npc
@@ -1,55 +1,76 @@
+
 create_default_npc()
-FUNKTION:
-     varargs void create_default_npc( int level, int maxhp );
+********************
 
-BENUTZUNG:
-     inherit "std/npc";
 
-FUNKTION:
-     Setze die Daten eines Monsters auf einen gewissen Level.
+FUNKTION
+========
 
-     Der Level sollte zwischen 1 und 20 liegen. Die Stats werden auf diesen
-     Level gesetzt und mehrere andere Werte, so dass das Monster von der
-     Staerke her einem Spieler gleichen Levels entspricht.
+   varargs void create_default_npc( int level, int maxhp );
 
-     Wird der (optionale) Parameter maxhp weggelassen, wird dieser berechnet
-     nach:
-          maxhp = 42 + 8 * level
 
-     Die genauen Werte sind:
-          P_LEVEL : level
-          P_MAX_HP: maxhp
-          P_MAX_SP: maxhp
-          P_HANDS : 10 * level
-          P_BODY  : (20/3) * level
-          P_XP    : 50 * level * maxhp (== 5 * P_HANDS * max_hp)
+BENUTZUNG
+=========
 
-          A_STR, A_INT, A_DEX, A_CON : level
+   inherit "std/npc";
 
-BEMERKUNG:
-     Diese Funktion sollte nur im create() eines Monsters benutzt werden.
-     Oben beschriebene Werte, die vor dem Aufruf der Funktion gesetzt
-     wurden, werden durch die neuen Werte ersetzt.
 
-     Ab einem Aufruf mit Level 20 werden P_XP = 202000 gesetzt, also ein
-     Kill-Stup vergeben (siehe P_XP).
+FUNKTION
+========
 
-BEISPIEL:
-     create_default_npc(17) ergibt:
+   Setze die Daten eines Monsters auf einen gewissen Level.
 
-          P_LEVEL : 17
-          P_MAX_HP: 178
-          P_MAX_SP: 178
-          P_HANDS : 170
-          P_BODY  : 113
-          P_XP    : 151300
+   Der Level sollte zwischen 1 und 20 liegen. Die Stats werden auf diesen
+   Level gesetzt und mehrere andere Werte, so dass das Monster von der
+   Staerke her einem Spieler gleichen Levels entspricht.
 
-          A_STR, A_INT, A_DEX, A_CON : 17
+   Wird der (optionale) Parameter maxhp weggelassen, wird dieser berechnet
+   nach:
+        maxhp = 42 + 8 * level
 
-SIEHE AUCH:
-     Funktionen:  AddExp(), GiveKillScore()
-     Properties:  P_XP
-                  P_LEVEL, P_MAX_HP, P_MAX_SP, P_HANDS, P_BODY
-     Sonstiges:   npcs
+   Die genauen Werte sind:
+        P_LEVEL : level
+        P_MAX_HP: maxhp
+        P_MAX_SP: maxhp
+        P_HANDS : 10 * level
+        P_BODY  : (20/3) * level
+        P_XP    : 50 * level * maxhp (== 5 * P_HANDS * max_hp)
 
-14.Feb 2007 Gloinson
\ No newline at end of file
+        A_STR, A_INT, A_DEX, A_CON : level
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion sollte nur im create() eines Monsters benutzt werden.
+   Oben beschriebene Werte, die vor dem Aufruf der Funktion gesetzt
+   wurden, werden durch die neuen Werte ersetzt.
+
+   Ab einem Aufruf mit Level 20 werden P_XP = 202000 gesetzt, also ein
+   Kill-Stup vergeben (siehe P_XP).
+
+
+BEISPIEL
+========
+
+   create_default_npc(17) ergibt:
+
+        P_LEVEL : 17
+        P_MAX_HP: 178
+        P_MAX_SP: 178
+        P_HANDS : 170
+        P_BODY  : 113
+        P_XP    : 151300
+
+        A_STR, A_INT, A_DEX, A_CON : 17
+
+
+SIEHE AUCH
+==========
+
+   Funktionen:  AddExp(), GiveKillScore()
+   Properties:  P_XP
+                P_LEVEL, P_MAX_HP, P_MAX_SP, P_HANDS, P_BODY
+   Sonstiges:   npcs
+
+14.Feb 2007 Gloinson
diff --git a/doc/lfun/create_super b/doc/lfun/create_super
index 14725a6..101531f 100644
--- a/doc/lfun/create_super
+++ b/doc/lfun/create_super
@@ -1,49 +1,75 @@
+
 create_super()
+**************
 
-FUNKTION:
-     protected void create_super();
 
-DEFINIERT IN:
-     allen Standardobjekten
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   protected void create_super();
 
-BESCHREIBUNG:
-     Diese Funktion wird immer dann aufgerufen, wenn ein Objekt implizit durch
-     ein 'inherit' in einem erbenden Objekte geladen wird.
-     Normalweise muss man dieses so geladene Objekte nicht konfigurieren, weil
-     nur das Programm dieses Objektes fuer die erbenden Objekte interessant
-     ist, nicht seine Daten.
-     Was hier aber z.B. sinnvoll ist, ist das Abschalten des Resets, denn ein
-     Objekt, was nur dazu dient, dass es von anderen geerbt wird, braucht
-     keinen Reset, auch wenn es ein reset() definiert (was in erbenden Objekte
-     benutzt wird).
-     Die create_super() in den Standardobjekten tun momentan genau dieses.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn ihr von /std/ erbt, braucht ihr euch in aller Regel um diese
-     Funktion keine Gedanken machen.
-     Ihr koennt diese Funktion aber in Objekten selber definieren, die nur zum
-     Erben gedacht sind. Dies kann sinnvoll ein, wenn ihr nicht von /std/ erbt
-     und ein reset() im Objekt habt oder was machen wollt, was ueber das
-     Abschalten des Resets hinausgeht.
+   allen Standardobjekten
 
-BEISPIELE:
-     Gegeben sei folgende Vererbungskette:
-     /std/room -> /d/inseln/zesstra/stdraum -> /d/inseln/zesstra/raum
 
-     Wird nun 'raum' geladen und 'stdraum' ist noch nicht geladen, wird der
-     Driver implizit von selbst 'stdraum' laden (weil 'raum' das Programm von
-     'stdraum' braucht). Bei diesem Laden wird das create() in 'stdraum' nicht
-     ausgefuehrt, sondern stattdessen create_super().
-    
-SIEHE AUCH:
-     create(L), reset(L)
-     hook(C), create(H), create_ob(H), create_super(H, reset(H)
-     create(A), reset(A)
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird immer dann aufgerufen, wenn ein Objekt implizit durch
+   ein 'inherit' in einem erbenden Objekte geladen wird.
+   Normalweise muss man dieses so geladene Objekte nicht konfigurieren, weil
+   nur das Programm dieses Objektes fuer die erbenden Objekte interessant
+   ist, nicht seine Daten.
+   Was hier aber z.B. sinnvoll ist, ist das Abschalten des Resets, denn ein
+   Objekt, was nur dazu dient, dass es von anderen geerbt wird, braucht
+   keinen Reset, auch wenn es ein reset() definiert (was in erbenden Objekte
+   benutzt wird).
+   Die create_super() in den Standardobjekten tun momentan genau dieses.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Wenn ihr von /std/ erbt, braucht ihr euch in aller Regel um diese
+   Funktion keine Gedanken machen.
+   Ihr koennt diese Funktion aber in Objekten selber definieren, die nur zum
+   Erben gedacht sind. Dies kann sinnvoll ein, wenn ihr nicht von /std/ erbt
+   und ein reset() im Objekt habt oder was machen wollt, was ueber das
+   Abschalten des Resets hinausgeht.
+
+
+BEISPIELE
+=========
+
+   Gegeben sei folgende Vererbungskette:
+   /std/room -> /d/inseln/zesstra/stdraum -> /d/inseln/zesstra/raum
+
+   Wird nun 'raum' geladen und 'stdraum' ist noch nicht geladen, wird der
+   Driver implizit von selbst 'stdraum' laden (weil 'raum' das Programm von
+   'stdraum' braucht). Bei diesem Laden wird das create() in 'stdraum' nicht
+   ausgefuehrt, sondern stattdessen create_super().
+
+
+SIEHE AUCH
+==========
+
+   create(L), reset(L)
+   hook(C), create(H), create_ob(H), create_super(H, reset(H)
+   create(A), reset(A)
+
 22.10.2007, Zesstra
diff --git a/doc/lfun/defuel_drink b/doc/lfun/defuel_drink
index 67e834d..266907e 100644
--- a/doc/lfun/defuel_drink
+++ b/doc/lfun/defuel_drink
@@ -1,59 +1,87 @@
-FUNKTION:
-    int defuel_drink();
 
-DEFINIERT IN:
-    /std/living/life.c
+defuel_drink()
+**************
 
-ARGUMENTE:
-    Keine.
-        
-BESCHREIBUNG:
-    Enttankt den Spieler automatisch um einen gewissen Fluessigkeits-Wert,
-    sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
-    seinem letzten Enttanken eine gewisse Zeit vergangen ist.
-    Alle diese Werte sind rassenabhaengig.
-    Ausserdem wird dem Spieler eine gewisse Menge Alkohol entzogen. Er wird
-    also mit jedem fluessigen Enttanken etwas nuechterner.
 
-    Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
-    zu nehmen. Das ist hier so gewollt.
+FUNKTION
+========
 
-    Hat der Spieler mindestens 
-    * P_DEFUEL_LIMIT_DRINK in P_DRINK
-    kann er alle
-    * P_DEFUEL_TIME_DRINK
-    um
-    * (x=P_DRINK*P_DEFUEL_AMOUNT_DRINK/2) + random(x)
-      (also um (50 bis 100 * P_DRINK) Prozent)
-    enttanken.
+   int defuel_drink();
 
-RUECKGABEWERTE:
-    DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
-    DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
-    NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
-    >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
 
-    (Konstanten kommen aus /sys/defuel.h)
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Bitte defuel_drink() benutzen und nicht P_DRINK oder P_MAX_DRINK des
-    manipulieren!
+   /std/living/life.c
 
-    Es gibt keine eigene Methode fuer die Verringerung von P_ALCOHOL.
 
-    Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+ARGUMENTE
+=========
 
-BEISPIEL:
-    s. Bsp. zu defuel_food()
+   Keine.
 
-SIEHE AUCH:
-     Aehnlich:  defuel_food
-     Tanken:    consume, drink_alcohol, drink_soft, eat_food
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+
+BESCHREIBUNG
+============
+
+   Enttankt den Spieler automatisch um einen gewissen Fluessigkeits-Wert,
+   sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
+   seinem letzten Enttanken eine gewisse Zeit vergangen ist.
+   Alle diese Werte sind rassenabhaengig.
+   Ausserdem wird dem Spieler eine gewisse Menge Alkohol entzogen. Er wird
+   also mit jedem fluessigen Enttanken etwas nuechterner.
+
+   Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
+   zu nehmen. Das ist hier so gewollt.
+
+   Hat der Spieler mindestens
+   * P_DEFUEL_LIMIT_DRINK in P_DRINK
+   kann er alle
+   * P_DEFUEL_TIME_DRINK
+   um
+   * (x=P_DRINK*P_DEFUEL_AMOUNT_DRINK/2) + random(x)
+     (also um (50 bis 100 * P_DRINK) Prozent)
+   enttanken.
+
+
+RUECKGABEWERTE
+==============
+
+   DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
+   DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
+   NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
+   >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
+
+   (Konstanten kommen aus /sys/defuel.h)
+
+
+BEMERKUNG
+=========
+
+   Bitte defuel_drink() benutzen und nicht P_DRINK oder P_MAX_DRINK des
+   manipulieren!
+
+   Es gibt keine eigene Methode fuer die Verringerung von P_ALCOHOL.
+
+   Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+
+
+BEISPIEL
+========
+
+   s. Bsp. zu defuel_food()
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  defuel_food
+   Tanken:    consume, drink_alcohol, drink_soft, eat_food
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/defuel_food b/doc/lfun/defuel_food
index 1e89110..380c2bc 100644
--- a/doc/lfun/defuel_food
+++ b/doc/lfun/defuel_food
@@ -1,85 +1,113 @@
-FUNKTION:
-    int defuel_food();
 
-DEFINIERT IN:
-    /std/living/life.c
+defuel_food()
+*************
 
-ARGUMENTE:
-    Keine.
 
-BESCHREIBUNG:
-    Enttankt den Spieler automatisch um einen gewissen Essens-Wert,
-    sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
-    seinem letzten Enttanken eine gewisse Zeit vergangen ist.
-    Alle diese Werte sind rassenabhaengig.
+FUNKTION
+========
 
-    Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
-    zu nehmen. Das ist hier so gewollt.
+   int defuel_food();
 
-    Hat der Spieler mindestens 
-    * P_DEFUEL_LIMIT_FOOD in P_FOOD
-    kann er alle
-    * P_DEFUEL_TIME_FOOD
-    um
-    * (x=P_DRINK*P_DEFUEL_AMOUNT_FOOD/2) + random(x)
-      (also um (50 bis 100 * P_FOOD) Prozent)
-    enttanken.
 
-RUECKGABEWERTE:
-    DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
-    DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
-    NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
-    >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
+DEFINIERT IN
+============
 
-    (Konstanten kommen aus /sys/defuel.h)
+   /std/living/life.c
 
-BEMERKUNG:
-    Bitte defuel_food() benutzen und nicht P_FOOD oder P_MAX_FOOD des
-    Spielers manipulieren!
 
-    Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+ARGUMENTE
+=========
 
-BEISPIEL:
-    int action_enttanken() {
-      string msg;
-      int val = this_player()->defuel_food();
+   Keine.
 
-      switch (val) {
-        case DEFUEL_TOO_SOON:
-          msg = "Du warst doch erst vor kurzem auf Toilette...";
-          break;
-        case DEFUEL_TOO_LOW:
-          msg = "Du versuchst Dich zu entleeren, aber irgendwie will "
-                "das nicht so recht klappen.";
-          break;
-        case NO_DEFUEL:
-          msg = "Du hast seit langem nichts gegessen, wie willst Du dann "
-                "was loswerden koennen?";
-          break;
-        default:
-          string qualifier;
-          int fuzzypercent = (90+random(20)) *
-                             val/this_player()->QueryProp(P_MAX_FOOD);
-          switch(fuzzypercent) {
-            case 0..50:  qualifier = "etwas"; break;
-            case 51..75: qualifier = "enorm"; break;
-            default:     qualifier = "unglaublich"; break;
-          }
-          msg = "Du entleerst Dich "+qualifier"+. Puh, das tat gut!";
-          break;
-      }
-      tell_object(this_player(), break_string(msg, 78));
-      return 1;
-    }
 
-SIEHE AUCH:
-     Aehnlich:  defuel_drink
-     Tanken:    consume, drink_alcohol, drink_soft, eat_food
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+BESCHREIBUNG
+============
+
+   Enttankt den Spieler automatisch um einen gewissen Essens-Wert,
+   sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
+   seinem letzten Enttanken eine gewisse Zeit vergangen ist.
+   Alle diese Werte sind rassenabhaengig.
+
+   Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
+   zu nehmen. Das ist hier so gewollt.
+
+   Hat der Spieler mindestens
+   * P_DEFUEL_LIMIT_FOOD in P_FOOD
+   kann er alle
+   * P_DEFUEL_TIME_FOOD
+   um
+   * (x=P_DRINK*P_DEFUEL_AMOUNT_FOOD/2) + random(x)
+     (also um (50 bis 100 * P_FOOD) Prozent)
+   enttanken.
+
+
+RUECKGABEWERTE
+==============
+
+   DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
+   DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
+   NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
+   >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).
+
+   (Konstanten kommen aus /sys/defuel.h)
+
+
+BEMERKUNG
+=========
+
+   Bitte defuel_food() benutzen und nicht P_FOOD oder P_MAX_FOOD des
+   Spielers manipulieren!
+
+   Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!
+
+
+BEISPIEL
+========
+
+   int action_enttanken() {
+     string msg;
+     int val = this_player()->defuel_food();
+
+     switch (val) {
+       case DEFUEL_TOO_SOON:
+         msg = "Du warst doch erst vor kurzem auf Toilette...";
+         break;
+       case DEFUEL_TOO_LOW:
+         msg = "Du versuchst Dich zu entleeren, aber irgendwie will "
+               "das nicht so recht klappen.";
+         break;
+       case NO_DEFUEL:
+         msg = "Du hast seit langem nichts gegessen, wie willst Du dann "
+               "was loswerden koennen?";
+         break;
+       default:
+         string qualifier;
+         int fuzzypercent = (90+random(20)) *
+                            val/this_player()->QueryProp(P_MAX_FOOD);
+         switch(fuzzypercent) {
+           case 0..50:  qualifier = "etwas"; break;
+           case 51..75: qualifier = "enorm"; break;
+           default:     qualifier = "unglaublich"; break;
+         }
+         msg = "Du entleerst Dich "+qualifier"+. Puh, das tat gut!";
+         break;
+     }
+     tell_object(this_player(), break_string(msg, 78));
+     return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  defuel_drink
+   Tanken:    consume, drink_alcohol, drink_soft, eat_food
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/deregister_modifier b/doc/lfun/deregister_modifier
index cbb541e..eb0c160 100644
--- a/doc/lfun/deregister_modifier
+++ b/doc/lfun/deregister_modifier
@@ -1,24 +1,42 @@
+
 deregister_modifier()
-FUNKTION:
-     void deregister_modifier(object modifier)
+*********************
 
-DEFINIERT IN:
-     /std/living/attributes.c
-

-PARAMETER:

-     modifier	- Objekt mit P_X_ATTR_MOD oder P_M_ATTR_MOD

 
-BESCHREIBUNG:
-     Meldet einen Modifier im Spieler ab. Wird durch RemoveSensitiveObject
-     beziehungsweise beim Ausziehen oder Wegstecken gerufen.
-     Muss nicht direkt gerufen werden. Bei Veraenderungen von Modifikatoren
-     sollte stattdessen UpdateAttributes gerufen werden.     
+FUNKTION
+========
 
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     register_modifier(),P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, 
-     P_ATTRIBUTES_MODIFIER, P_X_ATTR_MOD, P_M_ATTR_MOD, 
-     /std/living/attributes.c

+   void deregister_modifier(object modifier)
 
-13.Jun.2004, Muadib
\ No newline at end of file
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+PARAMETER
+=========
+
+   modifier   - Objekt mit P_X_ATTR_MOD oder P_M_ATTR_MOD
+
+
+BESCHREIBUNG
+============
+
+   Meldet einen Modifier im Spieler ab. Wird durch RemoveSensitiveObject
+   beziehungsweise beim Ausziehen oder Wegstecken gerufen.
+   Muss nicht direkt gerufen werden. Bei Veraenderungen von Modifikatoren
+   sollte stattdessen UpdateAttributes gerufen werden.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   register_modifier(),P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS,
+   P_ATTRIBUTES_MODIFIER, P_X_ATTR_MOD, P_M_ATTR_MOD,
+   /std/living/attributes.c
+
+13.Jun.2004, Muadib
diff --git a/doc/lfun/die b/doc/lfun/die
index ce055f8..a76a1aa 100644
--- a/doc/lfun/die
+++ b/doc/lfun/die
@@ -1,45 +1,67 @@
+
 die()
+*****
 
-FUNKTION:
-     public varargs void die(int poisondeath,int extern);
 
-DEFINIERT IN:
-     /std/living/life.c
+FUNKTION
+========
 
-ARGUMENTE:
-     int poisondeath
-	  Dieses Flag sollte bei einem Gifttod (P_POISON) gesetzt sein.
-     int extern
-	  Intern.
+   public varargs void die(int poisondeath,int extern);
 
-BESCHREIBUNG:
-     Das Lebewesen stirbt, meist automatisch von do_damage() ausgeloest, wenn
-     0 HP unterschritten werden. In diesem Fall wird der Kampf beendet, Gift,
-     Alkohol, Trink- und Esswerte, Blindheit, Taubheit u.s.w. auf Null
-     gesetzt oder geloescht.
 
-     Es wird automatisch eine Leiche (siehe auch P_CORPSE, P_NOCORPSE) nebst
-     Todesmeldungen (siehe auch P_DIE_MSG) erzeugt, und fuer Spieler werden
-     Killstupse vergeben, sofern notwendig.
+DEFINIERT IN
+============
 
-     Ueber den Hook P_TMP_DIE_HOOK kann man jedoch auf den Automatismus
-     Einfluss nehmen, z.B. koennte ein temporaerer Todesbann-Zauber das
-     Sterben fuer kurze Zeit verhindern.
+   /std/living/life.c
 
-RUeCKGABEWERT:
-     keiner
 
-BEMERKUNGEN:
-     Diese Funktion sollte nur selten direkt verwendet werden. Meist ist der
-     uebliche Weg ueber Defend() -> do_damage() -> die() die logisch bessere
-     und balancetechnisch guenstigere Loesung.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Todesursachen:	Defend(L), do_damage(L), P_POISON
-     Verwandt:		P_TMP_DIE_HOOK, P_DEADS
-     Todesmeldungen:	P_KILL_NAME, P_KILL_MSG, P_MURDER_MSG, P_DIE_MSG
-			P_ZAP_MSG, P_ENEMY_DEATH_SEQUENCE
-     Sonstiges:		P_CORPSE, P_NOCORPSE, /std/corpse.c
+   int poisondeath
+        Dieses Flag sollte bei einem Gifttod (P_POISON) gesetzt sein.
+   int extern
+        Intern.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Das Lebewesen stirbt, meist automatisch von do_damage() ausgeloest, wenn
+   0 HP unterschritten werden. In diesem Fall wird der Kampf beendet, Gift,
+   Alkohol, Trink- und Esswerte, Blindheit, Taubheit u.s.w. auf Null
+   gesetzt oder geloescht.
+
+   Es wird automatisch eine Leiche (siehe auch P_CORPSE, P_NOCORPSE) nebst
+   Todesmeldungen (siehe auch P_DIE_MSG) erzeugt, und fuer Spieler werden
+   Killstupse vergeben, sofern notwendig.
+
+   Ueber den Hook P_TMP_DIE_HOOK kann man jedoch auf den Automatismus
+   Einfluss nehmen, z.B. koennte ein temporaerer Todesbann-Zauber das
+   Sterben fuer kurze Zeit verhindern.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion sollte nur selten direkt verwendet werden. Meist ist der
+   uebliche Weg ueber Defend() -> do_damage() -> die() die logisch bessere
+   und balancetechnisch guenstigere Loesung.
+
+
+SIEHE AUCH
+==========
+
+   Todesursachen:     Defend(L), do_damage(L), P_POISON
+   Verwandt:          P_TMP_DIE_HOOK, P_DEADS
+   Todesmeldungen:    P_KILL_NAME, P_KILL_MSG, P_MURDER_MSG, P_DIE_MSG
+                      P_ZAP_MSG, P_ENEMY_DEATH_SEQUENCE
+   Sonstiges:         P_CORPSE, P_NOCORPSE, /std/corpse.c
+
 Last modified: Mon May 14 16:20:34 2001 by Patryn
diff --git a/doc/lfun/doUnwearMessage b/doc/lfun/doUnwearMessage
index e029ea2..b6128ce 100644
--- a/doc/lfun/doUnwearMessage
+++ b/doc/lfun/doUnwearMessage
@@ -1,28 +1,46 @@
+
 doUnwearMessage()
+*****************
 
-FUNKTION:
-	void doUnwearMessage(object worn_by, int all);
 
-DEFINIERT IN:
-	/std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	worn_by
-          Das Lebewesen, dass die Ruestung bisher getragen hat
-        all
-          Wurde "ziehe alles aus"/"ziehe alle ruestungen aus" eingegeben,
-          so ist all gesetzt, ansonsten nicht.
+   void doUnwearMessage(object worn_by, int all);
 
-BESCHREIBUNG:
-        Diese Funktion gibt beim Ausziehen einer Ruestung die entspr.
-        Meldung an den Traeger und die Umgebung aus.
 
-RUeCKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        doWearMessage(), doWieldMessage(), doUnwieldMessage()
+   /std/armour/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   worn_by
+     Das Lebewesen, dass die Ruestung bisher getragen hat
+   all
+     Wurde "ziehe alles aus"/"ziehe alle ruestungen aus" eingegeben,
+     so ist all gesetzt, ansonsten nicht.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt beim Ausziehen einer Ruestung die entspr.
+   Meldung an den Traeger und die Umgebung aus.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   doWearMessage(), doWieldMessage(), doUnwieldMessage()
+
 Last modified: Sat Jun 26 15:41:00 1999 by Paracelsus
-
diff --git a/doc/lfun/doUnwieldMessage b/doc/lfun/doUnwieldMessage
index dbf07ce..f2245b6 100644
--- a/doc/lfun/doUnwieldMessage
+++ b/doc/lfun/doUnwieldMessage
@@ -1,25 +1,43 @@
+
 doUnwieldMessage()
+******************
 
-FUNKTION:
-	void doUnwieldMessage(object wielded_by);
 
-DEFINIERT IN:
-	/std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	wielded_by
-          Das Lebewesen, dass die (Parier)Waffe bisher gezueckt hatte.
+   void doUnwieldMessage(object wielded_by);
 
-BESCHREIBUNG:
-        Diese Funktion gibt beim Wegstecken einer Waffe die entspr.
-        Meldung an den Benutzer und die Umgebung aus.
 
-RUeCKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        doWearMessage(), doUnwearMessage(), doWieldMessage()
+   /std/weapon/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   wielded_by
+     Das Lebewesen, dass die (Parier)Waffe bisher gezueckt hatte.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt beim Wegstecken einer Waffe die entspr.
+   Meldung an den Benutzer und die Umgebung aus.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   doWearMessage(), doUnwearMessage(), doWieldMessage()
+
 Last modified: Sat Jun 26 15:32:00 1999 by Paracelsus
-
diff --git a/doc/lfun/doWearMessage b/doc/lfun/doWearMessage
index 1962d5c..6770180 100644
--- a/doc/lfun/doWearMessage
+++ b/doc/lfun/doWearMessage
@@ -1,26 +1,44 @@
+
 doWearMessage()
+***************
 
-FUNKTION:
-	varargs void doWearMessage(int all);
 
-DEFINIERT IN:
-	/std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	all
-          Wurde "trage alles"/"trage alle ruestungen" eingegeben, so
-          ist all gesetzt, ansonsten nicht.
+   varargs void doWearMessage(int all);
 
-BESCHREIBUNG:
-        Diese Funktion gibt beim Anziehen einer Ruestung die entspr.
-        Meldung an den Traeger und die Umgebung aus.
 
-RUeCKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        doUnwearMessage(), doWieldMessage(), doUnwieldMessage()
+   /std/armour/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   all
+     Wurde "trage alles"/"trage alle ruestungen" eingegeben, so
+     ist all gesetzt, ansonsten nicht.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt beim Anziehen einer Ruestung die entspr.
+   Meldung an den Traeger und die Umgebung aus.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   doUnwearMessage(), doWieldMessage(), doUnwieldMessage()
+
 Last modified: Sat Jun 26 15:30:00 1999 by Paracelsus
-
diff --git a/doc/lfun/doWieldMessage b/doc/lfun/doWieldMessage
index 2315faa..a3b737f 100644
--- a/doc/lfun/doWieldMessage
+++ b/doc/lfun/doWieldMessage
@@ -1,24 +1,42 @@
+
 doWieldMessage()
+****************
 
-FUNKTION:
-	void doWieldMessage();
 
-DEFINIERT IN:
-	/std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-	keine
+   void doWieldMessage();
 
-BESCHREIBUNG:
-        Diese Funktion gibt beim Zuecken einer Waffe die entspr.
-        Meldung an den Benutzer und die Umgebung aus.
 
-RUeCKGABEWERT:
-	keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-        doWearMessage(), doUnwearMessage(), doUnwieldMessage()
+   /std/weapon/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt beim Zuecken einer Waffe die entspr.
+   Meldung an den Benutzer und die Umgebung aus.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   doWearMessage(), doUnwearMessage(), doUnwieldMessage()
+
 Last modified: Sat Jun 26 15:33:00 1999 by Paracelsus
-
diff --git a/doc/lfun/do_damage b/doc/lfun/do_damage
index 2d58839..91c6bc8 100644
--- a/doc/lfun/do_damage
+++ b/doc/lfun/do_damage
@@ -1,44 +1,70 @@
+
+do_damage()
+***********
+
 do_damage(L)
-FUNKTION:
-     int do_damage(int dam,mixed enemy);
 
-DEFINIERT IN:
-     /std/living/life.c
 
-ARGUMENTE:
-     int dam
-	  Die abzuziehenden Lebenspunkte (HP).
-     object enemy
-	  Das Objekt, welches den Schaden zufuegt.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Dem Lebewesen werden <dam> HP abgezogen. Falls weniger als 0 HP uebrig
-     bleiben, so stirbt es automatisch mittels die().
-     Ein Lebewesen, welches sich bewegt hat, trifft die ersten Kampfrunden
-     sehr viel schlechter, um Rein-Raus-Attacken zu verhindern. Dieses
-     Vorgehen kann man mittels P_ENABLE_IN_ATTACK_OUT deaktivieren.
-     Lebewesen, welche P_NO_ATTACK gesetzt haben, kann man mit dieser
-     Funktion nicht schaden.
+   int do_damage(int dam,mixed enemy);
 
-RUeCKGABEWERT:
-     Der tatsaechlich verursachte Schaden.
 
-BEMERKUNGEN:
-     Beim Gegner <enemy>, falls vorhanden, werden XP und ALIGN entsprechend
-     angepasst, im Opfer wird der Gegner in P_KILLER vermerkt, der Kampf wird
-     beendet.
-     Diese Funktion sollte nur selten direkt verwendet werden. Meist ist der
-     uebliche Weg ueber Defend() -> do_damage() -> die() die logisch bessere
-     und balancetechnisch guenstigere Loesung, da Defend() magische
-     Verteidigungen, die der Spieler bei sich hat beruecksichtigt.
-     Es sollte also allein schon aus Fairness gegenueber den Objekten
-     anderer Magier Defend() immer dem direkten reduce_hit_points() oder
-     do_damage() vorgezogen werden. Mittels der Flags in 'spell' kann man
-     sehr viele Parameter beeinflussen.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Verwandt:	Defend(L), reduce_hit_points(L), die(L)
-     Props:	P_NO_ATTACK, P_ENABLE_IN_ATTACK_OUT, P_KILLER
-		P_XP, P_ALIGN
+   /std/living/life.c
 
-23.Feb.2004 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   int dam
+        Die abzuziehenden Lebenspunkte (HP).
+   object enemy
+        Das Objekt, welches den Schaden zufuegt.
+
+
+BESCHREIBUNG
+============
+
+   Dem Lebewesen werden <dam> HP abgezogen. Falls weniger als 0 HP uebrig
+   bleiben, so stirbt es automatisch mittels die().
+   Ein Lebewesen, welches sich bewegt hat, trifft die ersten Kampfrunden
+   sehr viel schlechter, um Rein-Raus-Attacken zu verhindern. Dieses
+   Vorgehen kann man mittels P_ENABLE_IN_ATTACK_OUT deaktivieren.
+   Lebewesen, welche P_NO_ATTACK gesetzt haben, kann man mit dieser
+   Funktion nicht schaden.
+
+
+RUeCKGABEWERT
+=============
+
+   Der tatsaechlich verursachte Schaden.
+
+
+BEMERKUNGEN
+===========
+
+   Beim Gegner <enemy>, falls vorhanden, werden XP und ALIGN entsprechend
+   angepasst, im Opfer wird der Gegner in P_KILLER vermerkt, der Kampf wird
+   beendet.
+   Diese Funktion sollte nur selten direkt verwendet werden. Meist ist der
+   uebliche Weg ueber Defend() -> do_damage() -> die() die logisch bessere
+   und balancetechnisch guenstigere Loesung, da Defend() magische
+   Verteidigungen, die der Spieler bei sich hat beruecksichtigt.
+   Es sollte also allein schon aus Fairness gegenueber den Objekten
+   anderer Magier Defend() immer dem direkten reduce_hit_points() oder
+   do_damage() vorgezogen werden. Mittels der Flags in 'spell' kann man
+   sehr viele Parameter beeinflussen.
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:  Defend(L), reduce_hit_points(L), die(L)
+   Props:     P_NO_ATTACK, P_ENABLE_IN_ATTACK_OUT, P_KILLER
+              P_XP, P_ALIGN
+
+23.Feb.2004 Gloinson
diff --git a/doc/lfun/do_frage b/doc/lfun/do_frage
index dc08610..6c848b8 100644
--- a/doc/lfun/do_frage
+++ b/doc/lfun/do_frage
@@ -1,21 +1,42 @@
+
 do_frage()
-FUNKTION:
-     int do_frage(string text)
+**********
 
-DEFINIERT IN:
-     /std/npc/info.c
 
-ARGUMENTE:
-     string str	 - Schluesselwort der Frage
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Bearbeitet ein Schluesselwort, das mit "frage <wen> nach " uebergeben
-     wurde. Gibt entsprechende Antworten formatiert aus.
+   int do_frage(string text)
 
-BEMERKUNGEN:
-     Recht komplex, besser nicht ueberschreiben wenn man es nicht versteht.
 
-SIEHE AUCH:
-     Verwandt:  GetInfoArr, AddInfo
+DEFINIERT IN
+============
+
+   /std/npc/info.c
+
+
+ARGUMENTE
+=========
+
+   string str  - Schluesselwort der Frage
+
+
+BESCHREIBUNG
+============
+
+   Bearbeitet ein Schluesselwort, das mit "frage <wen> nach " uebergeben
+   wurde. Gibt entsprechende Antworten formatiert aus.
+
+
+BEMERKUNGEN
+===========
+
+   Recht komplex, besser nicht ueberschreiben wenn man es nicht versteht.
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:  GetInfoArr, AddInfo
 
 31.Mar 2007 Gloinson
diff --git a/doc/lfun/do_unwear b/doc/lfun/do_unwear
index cecfa34..dd91478 100644
--- a/doc/lfun/do_unwear
+++ b/doc/lfun/do_unwear
@@ -1,34 +1,56 @@
+
 do_unwear()
+***********
 
-FUNKTION:
-     varargs int do_unwear(string str, int silent);
 
-DEFINIERT IN:
-     /std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     str
-          String der normalerweise dem Parameter des "ziehe"-Kommandos
-          entspricht.
+   varargs int do_unwear(string str, int silent);
 
-     silent
-          1, wenn das Ausziehen ohne Meldungen durchgefuehrt werden soll.
 
-BESCHREIBUNG:
-     Diese Funktion stellt fest, ob die Ruestung sich durch str
-     identifizieren laesst und angezogen ist und ruft im Erfolgsfall
-     UnWear(silent) auf.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     1, wenn alles gut ging, ansonsten 0.
+   /std/armour/combat.c
 
-BEMERKUNGEN:
-     Wenn man Ruestungen "von aussen" ausziehen will, sollte man direkt
-     UnWear() verwenden!
 
-SIEHE AUCH:
-     do_wear(), UnWear(), RemoveFunc(), InformUnwear(),
-     /std/armour/combat.c
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   str
+        String der normalerweise dem Parameter des "ziehe"-Kommandos
+        entspricht.
+
+   silent
+        1, wenn das Ausziehen ohne Meldungen durchgefuehrt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion stellt fest, ob die Ruestung sich durch str
+   identifizieren laesst und angezogen ist und ruft im Erfolgsfall
+   UnWear(silent) auf.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn alles gut ging, ansonsten 0.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn man Ruestungen "von aussen" ausziehen will, sollte man direkt
+   UnWear() verwenden!
+
+
+SIEHE AUCH
+==========
+
+   do_wear(), UnWear(), RemoveFunc(), InformUnwear(),
+   /std/armour/combat.c
+
 Last modified: Sun Jun 27 22:29:00 1999 by Paracelsus
diff --git a/doc/lfun/do_wear b/doc/lfun/do_wear
index fe227d6..abf7051 100644
--- a/doc/lfun/do_wear
+++ b/doc/lfun/do_wear
@@ -1,27 +1,46 @@
+
 do_wear()
+*********
 
-FUNKTION:
-     varargs int do_wear(string str, int silent);
 
-DEFINIERT IN:
-     /std/armour/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     str
-          String, der normalerweise dem Parameter des
-          "ziehe/trage"-Kommandos entspricht.
-     silent
-          1, wenn das Anziehen ohne Meldungen durchgefuehrt werden soll.
+   varargs int do_wear(string str, int silent);
 
-BESCHREIBUNG:
-     Wenn sich die Ruestung mit "str" identifizieren laesst, wird versucht,
-     sie mittels DoWear() anzuziehen.
 
-RUeCKGABEWERT:
-     1, wenn sich die Ruestung anziehen liess, sonst 0.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     do_unwear(), DoWear(), WearFunc(), InformWear(), /std/armour/combat.c
+   /std/armour/combat.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   str
+        String, der normalerweise dem Parameter des
+        "ziehe/trage"-Kommandos entspricht.
+   silent
+        1, wenn das Anziehen ohne Meldungen durchgefuehrt werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Wenn sich die Ruestung mit "str" identifizieren laesst, wird versucht,
+   sie mittels DoWear() anzuziehen.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn sich die Ruestung anziehen liess, sonst 0.
+
+
+SIEHE AUCH
+==========
+
+   do_unwear(), DoWear(), WearFunc(), InformWear(), /std/armour/combat.c
+
 Last modified: Sun Jun 27 22:31:00 1999 by Paracelsus
diff --git a/doc/lfun/drink_alcohol b/doc/lfun/drink_alcohol
index 28ed1dd..01d0a77 100644
--- a/doc/lfun/drink_alcohol
+++ b/doc/lfun/drink_alcohol
@@ -1,83 +1,112 @@
-FUNKTION:
-    public varargs int drink_alcohol(int strength, int testonly, string mytext)
 
-DEFINIERT IN:
-    /std/living/life.c
+drink_alcohol()
+***************
 
-ARGUMENTE:
-    strength: wird zur aktuellen Saettigung P_ALCOHOL dazu addiert
-    testonly: Ist das Flag gesetzt, wird dem Spieler kein ALCOHOL zugefuehrt.
-              Darf nur zum Testen der Heilstelle verwendet werden und muss
-              im normalen Betrieb auf '0' stehen!
-    mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
-            darf sich hier was nettes ausdenken.
-            Achtung: Das unterdrueckt nicht die "Nuechtern"-Meldung, die bei
-            negativem strength auftreten kann, wenn P_ALCOHOL wieder 0 ist.
 
-BESCHREIBUNG:
-    Es wird geprueft, ob dem Spieler der angegebene Wert fuer 'strength'
-    auf seine aktuelle P_ALCOHOL addiert werden kann oder nicht. Falls
-    das moeglich ist und testonly = 0, wird P_ALCOHOL entsprechend
-    aktualisiert.
+FUNKTION
+========
 
-    Sollen neben P_ALCOHOL noch weitere Props manipuliert werden - bspw. zur
-    Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+   public varargs int drink_alcohol(int strength, int testonly, string mytext)
 
-RUECKGABEWERT:
-    0 bei [potentiellem] Misserfolg (strength + P_ALCOHOL > P_MAX_ALCOHOL)
-    1 bei [potentiellem] Erfolg
-    * potentiell bezieht sich hier auf Nutzung mit 'testonly' != 0
 
-BEMERKUNG:
-    drink_alocohol() bitte anstatt eigener Manipulationen von P_ALCOHOL und
-    P_MAX_ALCOHOL verwenden.
+DEFINIERT IN
+============
 
-    Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+   /std/living/life.c
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
 
-BEISPIEL:
-    int heilstelle() {
-      if(this_player()->drink_alcohol(10, 0,
-                                      "Du prustest in den Schnaps. "
-                                      "Der passt nicht mehr rein.\n")) {
-        // Platz fuer 10 "Alkohol" war noch, diese sind jetzt bereits addiert
-        // Nachricht an den Spieler:
-        tell_object(this_player(),
-                    break_string("Du trinkst den Schnaps aus.", 78));
+ARGUMENTE
+=========
 
-        // Nachricht an andere Livings im Raum
-        object ob = first_inventory(environment(this_player()));
-        do {
-          if(living(ob) && ob!=this_player())
-            ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
-                           MT_LOOK|MT_LISTEN,
-                           MA_DRINK);
-          ob = next_inventory(ob);
-        } while(ob);
+   strength: wird zur aktuellen Saettigung P_ALCOHOL dazu addiert
+   testonly: Ist das Flag gesetzt, wird dem Spieler kein ALCOHOL zugefuehrt.
+             Darf nur zum Testen der Heilstelle verwendet werden und muss
+             im normalen Betrieb auf '0' stehen!
+   mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
+           darf sich hier was nettes ausdenken.
+           Achtung: Das unterdrueckt nicht die "Nuechtern"-Meldung, die bei
+           negativem strength auftreten kann, wenn P_ALCOHOL wieder 0 ist.
 
-        // Rassenabhaengige Heilung: Sofort oder in Schritten
-        // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
-        if(this_player()->QueryProp(P_REAL_RACE)=="Schnapsdrossel")
-          this_player()->heal_self(30);
-        else {
-          this_player()->buffer_hp(30,5);
-          this_player()->buffer_sp(30,5);
-        }
-      }
 
-      return 1;
+BESCHREIBUNG
+============
+
+   Es wird geprueft, ob dem Spieler der angegebene Wert fuer 'strength'
+   auf seine aktuelle P_ALCOHOL addiert werden kann oder nicht. Falls
+   das moeglich ist und testonly = 0, wird P_ALCOHOL entsprechend
+   aktualisiert.
+
+   Sollen neben P_ALCOHOL noch weitere Props manipuliert werden - bspw. zur
+   Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERT
+=============
+
+   0 bei [potentiellem] Misserfolg (strength + P_ALCOHOL > P_MAX_ALCOHOL)
+   1 bei [potentiellem] Erfolg
+   * potentiell bezieht sich hier auf Nutzung mit 'testonly' != 0
+
+
+BEMERKUNG
+=========
+
+   drink_alocohol() bitte anstatt eigener Manipulationen von P_ALCOHOL und
+   P_MAX_ALCOHOL verwenden.
+
+   Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+
+
+BEISPIEL
+========
+
+   int heilstelle() {
+     if(this_player()->drink_alcohol(10, 0,
+                                     "Du prustest in den Schnaps. "
+                                     "Der passt nicht mehr rein.\n")) {
+       // Platz fuer 10 "Alkohol" war noch, diese sind jetzt bereits addiert
+       // Nachricht an den Spieler:
+       tell_object(this_player(),
+                   break_string("Du trinkst den Schnaps aus.", 78));
+
+       // Nachricht an andere Livings im Raum
+       object ob = first_inventory(environment(this_player()));
+       do {
+         if(living(ob) && ob!=this_player())
+           ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
+                          MT_LOOK|MT_LISTEN,
+                          MA_DRINK);
+         ob = next_inventory(ob);
+       } while(ob);
+
+       // Rassenabhaengige Heilung: Sofort oder in Schritten
+       // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
+       if(this_player()->QueryProp(P_REAL_RACE)=="Schnapsdrossel")
+         this_player()->heal_self(30);
+       else {
+         this_player()->buffer_hp(30,5);
+         this_player()->buffer_sp(30,5);
+       }
      }
-SIEHE AUCH:
-     Aehnlich:  consume, eat_food, drink_soft
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Enttanken: defuel_drink, defuel_food
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+
+     return 1;
+    }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  consume, eat_food, drink_soft
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Enttanken: defuel_drink, defuel_food
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/drink_soft b/doc/lfun/drink_soft
index 4ab6e07..0f030f6 100644
--- a/doc/lfun/drink_soft
+++ b/doc/lfun/drink_soft
@@ -1,83 +1,111 @@
-FUNKTION:
-    public varargs int drink_soft(int strength, int testonly, string mytext)
 
-DEFINIERT IN:
-    /std/living/life.c
+drink_soft()
+************
 
-ARGUMENTE:
-    strength: Wird zu dem augenblicklichen Saettigungsgrad (P_DRINK) addiert.
-    testonly: Ist das Flag gesetzt, wird dem Spieler kein DRINK zugefuehrt.
-              Darf nur zum Testen der Heilstelle verwendet werden und muss
-              im normalen Betrieb auf '0' stehen!
-    mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
-            darf sich hier was nettes ausdenken.
-            Achtung: Das unterdrueckt nicht die "Durst"-Meldung, die bei
-            negativem strength auftritt, wenn P_DRINK wieder 0 ist.
 
-BESCHREIBUNG:
-    Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf
-    aktuelle P_DRINK addiert werden kann oder nicht. Ist dies moeglich,
-    wird es gemacht, es sei denn das testonly != 0.
+FUNKTION
+========
 
-    Sollen neben P_DRINK noch weitere Props manipuliert werden - bspw. zur
-    Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+   public varargs int drink_soft(int strength, int testonly, string mytext)
 
-RUECKGABEWERT:
-     0, wenn strength + P_DRINK > P_MAX_DRINK
-    >0, wenn Erfolg
 
-BEMERKUNG:
-    drink_soft() bitte anstatt eigener Manipulationen von P_DRINK und
-    P_MAX_DRINK verwenden.
+DEFINIERT IN
+============
 
-    Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+   /std/living/life.c
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
 
-BEISPIEL:
-    int heilstelle() {
-      if(this_player()->drink_soft(10, 0, "Du blubberst nicht ueberzeugt "
-                                   "in der Limonade. Das ist zu viel.\n")) {
-        // Platz fuer 10 "Trinken" war noch, diese sind jetzt bereits addiert
-        // Nachricht an den Spieler:
-        tell_object(this_player(), break_string("Du nimmst einen grossen "
-                    "Schluck zuckersuesse Limonade.", 78));
+ARGUMENTE
+=========
 
-        // alle anderen im Raum bekommen es ggf auch mit:
-        // 1) filter(..., #'living) ergibt die Lebewesen im Raum
-        // 2) filter_objects(..., "ReceiveMsg") ruft ReceiveMsg an jedem
-        // 3) ReceiveMsg(...) bekommt die Folgeparameter
-        filter_objects(filter(all_inventory(environment(this_player())),
-                              #'living) - ({this_player()}),
-                       "ReceiveMsg",
-                       this_player()->Name()+
-                         " trinkt einen Schluck Limonade.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_DRINK);
+   strength: Wird zu dem augenblicklichen Saettigungsgrad (P_DRINK) addiert.
+   testonly: Ist das Flag gesetzt, wird dem Spieler kein DRINK zugefuehrt.
+             Darf nur zum Testen der Heilstelle verwendet werden und muss
+             im normalen Betrieb auf '0' stehen!
+   mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
+           darf sich hier was nettes ausdenken.
+           Achtung: Das unterdrueckt nicht die "Durst"-Meldung, die bei
+           negativem strength auftritt, wenn P_DRINK wieder 0 ist.
 
-        // Rassenabhaengige Heilung: Sofort oder in Schritten
-        // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
-        if(this_player()->QueryProp(P_REAL_RACE)=="Saufziege")
-          this_player()->heal_self(30);
-        else {
-          this_player()->buffer_hp(30,5);
-          this_player()->buffer_sp(30,5);
-        }
-      }
 
-      return 1;
+BESCHREIBUNG
+============
+
+   Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf
+   aktuelle P_DRINK addiert werden kann oder nicht. Ist dies moeglich,
+   wird es gemacht, es sei denn das testonly != 0.
+
+   Sollen neben P_DRINK noch weitere Props manipuliert werden - bspw. zur
+   Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERT
+=============
+
+    0, wenn strength + P_DRINK > P_MAX_DRINK
+   >0, wenn Erfolg
+
+
+BEMERKUNG
+=========
+
+   drink_soft() bitte anstatt eigener Manipulationen von P_DRINK und
+   P_MAX_DRINK verwenden.
+
+   Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+
+
+BEISPIEL
+========
+
+   int heilstelle() {
+     if(this_player()->drink_soft(10, 0, "Du blubberst nicht ueberzeugt "
+                                  "in der Limonade. Das ist zu viel.\n")) {
+       // Platz fuer 10 "Trinken" war noch, diese sind jetzt bereits addiert
+       // Nachricht an den Spieler:
+       tell_object(this_player(), break_string("Du nimmst einen grossen "
+                   "Schluck zuckersuesse Limonade.", 78));
+
+       // alle anderen im Raum bekommen es ggf auch mit:
+       // 1) filter(..., #'living) ergibt die Lebewesen im Raum
+       // 2) filter_objects(..., "ReceiveMsg") ruft ReceiveMsg an jedem
+       // 3) ReceiveMsg(...) bekommt die Folgeparameter
+       filter_objects(filter(all_inventory(environment(this_player())),
+                             #'living) - ({this_player()}),
+                      "ReceiveMsg",
+                      this_player()->Name()+
+                        " trinkt einen Schluck Limonade.",
+                      MT_LOOK|MT_LISTEN,
+                      MA_DRINK);
+
+       // Rassenabhaengige Heilung: Sofort oder in Schritten
+       // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
+       if(this_player()->QueryProp(P_REAL_RACE)=="Saufziege")
+         this_player()->heal_self(30);
+       else {
+         this_player()->buffer_hp(30,5);
+         this_player()->buffer_sp(30,5);
+       }
      }
 
-SIEHE AUCH:
-     Aehnlich:  consume, drink_alcohol, eat_food
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Enttanken: defuel_drink, defuel_food
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+     return 1;
+    }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  consume, drink_alcohol, eat_food
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Enttanken: defuel_drink, defuel_food
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/drop b/doc/lfun/drop
index ab8dd19..cdd372b 100644
--- a/doc/lfun/drop
+++ b/doc/lfun/drop
@@ -1,45 +1,70 @@
+
 drop()
+******
 
-FUNKTION:
-    public varargs int drop(object o, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object o
-        Das Objekt, das fallengelassen werden soll.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_DROP_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int drop(object o, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC laesst das Objekt fallen. Gibt o->move() keinen
-    positiven Wert zurueck, beispielsweise weil das Objekt verflucht ist,
-    bekommt er eine entsprechende Fehlermeldung.
 
-RUECKGABEWERT:
-    Wenn das Fallenlassen geklappt hat, 1, ansonsten 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
-    fallenlassen lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
-    moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
-    manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+   /std/living/put_and_get.c
 
-    Die Funktion prueft nicht, ob der Spieler/NPC das Objekt ueberhaupt hat,
-    das muss man ggf. selbst ermitteln.
 
-BEISPIEL:
-    if (this_player()->drop(obj, ({
-            "Du wirfst @WEN2 in den Saeureteich.\n",
-            "@WER1 wirft @WENU2 in den Saeureteich.\n" })))
-        obj->remove();
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    move(L), P_DROP_MSG, drop_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
-    P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NODROP
+   object o
+       Das Objekt, das fallengelassen werden soll.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_DROP_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC laesst das Objekt fallen. Gibt o->move() keinen
+   positiven Wert zurueck, beispielsweise weil das Objekt verflucht ist,
+   bekommt er eine entsprechende Fehlermeldung.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn das Fallenlassen geklappt hat, 1, ansonsten 0.
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
+   fallenlassen lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
+   moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
+   manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+
+   Die Funktion prueft nicht, ob der Spieler/NPC das Objekt ueberhaupt hat,
+   das muss man ggf. selbst ermitteln.
+
+
+BEISPIEL
+========
+
+   if (this_player()->drop(obj, ({
+           "Du wirfst @WEN2 in den Saeureteich.\n",
+           "@WER1 wirft @WENU2 in den Saeureteich.\n" })))
+       obj->remove();
+
+
+SIEHE AUCH
+==========
+
+   move(L), P_DROP_MSG, drop_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
+   P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NODROP
+
 Last modified: Thu Aug 28 22:20:37 2008 by Amynthor
diff --git a/doc/lfun/drop_obj b/doc/lfun/drop_obj
index 2f25e0f..3e1057f 100644
--- a/doc/lfun/drop_obj
+++ b/doc/lfun/drop_obj
@@ -1,28 +1,44 @@
+
 drop_obj()
+**********
+
 
 FUNKTION
-    int drop_obj(object ob);
+========
 
-DEFINIERT IN:
+   int drop_obj(object ob);
 
-    /std/living/put_and_get.c
 
-ARGUMENTE:
+DEFINIERT IN
+============
 
-    ob  Das Objekt, das von dem Lebewesen, in dem diese Funktion aufgerufen
-        wird, fallengelassen werden soll.
+   /std/living/put_and_get.c
 
-BESCHREIBUNG:
 
-    Das Lebewesen, in dem diese Funktion aufgerufen werden soll, laesst
-    den angegebenen Gegenstand fallen, wenn dies moeglich ist.
+ARGUMENTE
+=========
 
-RUeCKGABEWERT:
-    1, wenn das Objekt fallen gelassen wurde oder dies nicht moeglich war.
-    (in diesem Fall wird auch direkt eine Textausgabe ausgegeben)
-    0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
-    plaziert.
+   ob  Das Objekt, das von dem Lebewesen, in dem diese Funktion aufgerufen
+       wird, fallengelassen werden soll.
 
-SIEHE AUCH:
 
-    find_obs(), give_obj(), pick_obj(), put_obj(), /std/living/put_and_get.c
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion aufgerufen werden soll, laesst
+   den angegebenen Gegenstand fallen, wenn dies moeglich ist.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Objekt fallen gelassen wurde oder dies nicht moeglich war.
+   (in diesem Fall wird auch direkt eine Textausgabe ausgegeben)
+   0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
+   plaziert.
+
+
+SIEHE AUCH
+==========
+
+   find_obs(), give_obj(), pick_obj(), put_obj(), /std/living/put_and_get.c
diff --git a/doc/lfun/drop_objects b/doc/lfun/drop_objects
index c1045f4..93cbee5 100644
--- a/doc/lfun/drop_objects
+++ b/doc/lfun/drop_objects
@@ -1,48 +1,73 @@
+
 drop_objects()
+**************
 
-FUNKTION:
-    public varargs int drop_objects(string str, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    string str
-        Was fallengelassen werden soll.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_DROP_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int drop_objects(string str, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC laesst die in <str> benannten Sachen fallen.
-    Kann er ein Objekt nicht fallenlassen, bekommt er eine entsprechende
-    Fehlermeldung. Wenn keine Objekte auf <str> passen, wird per
-    _notify_fail() eine Meldung gesetzt, aber noch nicht ausgegeben.
 
-RUECKGABEWERT:
-    Wenn <str> irgendwelche vorhandenen Sachen sind, 1, sonst 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Wenn die Funktion 1 zurueckgibt, heisst das noch nicht, dass der Spieler
-    etwas fallengelassen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
-    Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.
+   /std/living/put_and_get.c
 
-BEISPIEL:
-    private int cmd_opfern(string str)
-    {
-        notify_fail("WAS moechtest Du opfern?\n");
 
-        if (!this_player()->drop_objects(str, ({ "Du opferst @WEN2.",
-                                                 "@WER1 opfert @WENU2.\n" })))
-            return 0;
+ARGUMENTE
+=========
 
-        filter_objects(this_player()->moved_objects(), "remove");
-        return 1;
-    }
+   string str
+       Was fallengelassen werden soll.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_DROP_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
 
-SIEHE AUCH:
-    move(L), drop(L), P_DROP_MSG, find_objects(L), moved_objects(L)
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC laesst die in <str> benannten Sachen fallen.
+   Kann er ein Objekt nicht fallenlassen, bekommt er eine entsprechende
+   Fehlermeldung. Wenn keine Objekte auf <str> passen, wird per
+   _notify_fail() eine Meldung gesetzt, aber noch nicht ausgegeben.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn <str> irgendwelche vorhandenen Sachen sind, 1, sonst 0.
+
+
+BEMERKUNG
+=========
+
+   Wenn die Funktion 1 zurueckgibt, heisst das noch nicht, dass der Spieler
+   etwas fallengelassen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
+   Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.
+
+
+BEISPIEL
+========
+
+   private int cmd_opfern(string str)
+   {
+       notify_fail("WAS moechtest Du opfern?\n");
+
+       if (!this_player()->drop_objects(str, ({ "Du opferst @WEN2.",
+                                                "@WER1 opfert @WENU2.\n" })))
+           return 0;
+
+       filter_objects(this_player()->moved_objects(), "remove");
+       return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   move(L), drop(L), P_DROP_MSG, find_objects(L), moved_objects(L)
+
 Last modified: Fri Jul 25 10:59:37 2008 by Amynthor
diff --git a/doc/lfun/eat_food b/doc/lfun/eat_food
index ec0102d..32327e2 100644
--- a/doc/lfun/eat_food
+++ b/doc/lfun/eat_food
@@ -1,86 +1,114 @@
-FUNKTION:
-    public varargs int eat_food(int food, int testonly, string mytext)
 
-DEFINIERT IN:
-    /std/living/life.c
+eat_food()
+**********
 
-ARGUMENTE:
-    food: Wird zu dem augenblicklichen Saettigungsgrad (P_FOOD) addiert.
-    testonly: Ist das Flag gesetzt, wird dem Spieler kein FOOD zugefuehrt.
-              Darf nur zum Testen der Heilstelle verwendet werden und muss
-              im normalen Betrieb auf '0' stehen!
-    mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
-            darf sich hier was nettes ausdenken.
-            Achtung: Das unterdrueckt nicht die "Hunger"-Meldung, die bei
-            negativem food auftreten kann, wenn P_FOOD wieder 0 ist.
 
-BESCHREIBUNG:
-    Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf seine
-    aktuelle P_FOOD addiert werden kann oder nicht. Ist dies moeglich, wird
-    wird es gemacht, es sei denn das testonly != 0.
+FUNKTION
+========
 
-    Sollen neben P_FOOD noch weitere Props manipuliert werden - bspw. zur
-    Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+   public varargs int eat_food(int food, int testonly, string mytext)
 
-RUECKGABEWERT:
-     0, wenn strength + P_FOOD > P_MAX_FOOD.
-    >0, wenn Erfolg.
 
-BEMERKUNG:
-    eat_food() bitte anstatt eigener Manipulationen von P_FOOD und
-    P_MAX_FOOD verwenden.
+DEFINIERT IN
+============
 
-    Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+   /std/living/life.c
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
 
-BEISPIEL:
-    int heilstelle() {
-      // Wenn auf das P_FOOD des Spielers die angegebenen 10 nicht mehr addiert
-      // addiert werden koennen (weil sonst P_MAX_FOOD ueberschritten wird),
-      // wird die Fehlermeldung ausgegeben, dass der Spieler nichts mehr
-      // essen/trinken kann.
-      // Bei gesetztem 'mytext' wird 'mytext' an den Spieler ausgegeben.
-      // Ansonsten wird die Standardmeldung ausgegeben.
-      if (!this_player()->eat_food(10, 0, "Der Keks ist einfach "
-                                          "zuviel fuer Dich.\n") )
-        return 1;
+ARGUMENTE
+=========
 
-      // Spieler hatte noch ausreichend Spielraum bei P_FOOD. Die 10 sind 
-      // schon addiert worden. Jetzt Nachricht ausgeben:
-      tell_object(this_player(), break_string("Du knabberst ein bisschen an "
-                  "dem Keks herum und fuehlst Dich gleich viel besser.", 78));
+   food: Wird zu dem augenblicklichen Saettigungsgrad (P_FOOD) addiert.
+   testonly: Ist das Flag gesetzt, wird dem Spieler kein FOOD zugefuehrt.
+             Darf nur zum Testen der Heilstelle verwendet werden und muss
+             im normalen Betrieb auf '0' stehen!
+   mytext: Wer selber einen Text bei Misserfolg ausgeben lassen moechte,
+           darf sich hier was nettes ausdenken.
+           Achtung: Das unterdrueckt nicht die "Hunger"-Meldung, die bei
+           negativem food auftreten kann, wenn P_FOOD wieder 0 ist.
 
-      // alle Lebewesen im Raum bekommen das auch mit
-      foreach(object ob:
-              (filter(all_inventory(environment(this_player())), #'living) -
-               ({this_player()})))
-        ob->ReceiveMsg(this_player()->Name()+" knuspert einen Keks weg.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_EAT);
 
-      // Rassenabhaengige Heilung: Sofort oder in Schritten
-      // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
-      if(this_player()->QueryProp(P_REAL_RACE)=="Kruemelmonster")
-        this_player()->heal_self(30);
-      else {
-        this_player()->buffer_hp(30,5);
-        this_player()->buffer_sp(30,5);
-      }
+BESCHREIBUNG
+============
 
-      return 1;
-    }
+   Es wird geprueft, ob dem Spieler der angebene Wert "strength" auf seine
+   aktuelle P_FOOD addiert werden kann oder nicht. Ist dies moeglich, wird
+   wird es gemacht, es sei denn das testonly != 0.
 
-SIEHE AUCH:
-     Aehnlich:  consume, drink_alcohol, drink_soft
-     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
-                buffer_hp, buffer_sp
-     Timing:    check_and_update_timed_key
-     Enttanken: defuel_drink, defuel_food
-     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
-                P_DEFUEL_TIME_DRINK
-     Konzepte:  heilung, enttanken, food
+   Sollen neben P_FOOD noch weitere Props manipuliert werden - bspw. zur
+   Heilung eines Lebewesens - bietet sich die Funktion consume() an.
+
+
+RUECKGABEWERT
+=============
+
+    0, wenn strength + P_FOOD > P_MAX_FOOD.
+   >0, wenn Erfolg.
+
+
+BEMERKUNG
+=========
+
+   eat_food() bitte anstatt eigener Manipulationen von P_FOOD und
+   P_MAX_FOOD verwenden.
+
+   Achtung: Immer erst VOR einer Heilung ausfuehren und bei Erfolg heilen.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+
+
+BEISPIEL
+========
+
+   int heilstelle() {
+     // Wenn auf das P_FOOD des Spielers die angegebenen 10 nicht mehr addiert
+     // addiert werden koennen (weil sonst P_MAX_FOOD ueberschritten wird),
+     // wird die Fehlermeldung ausgegeben, dass der Spieler nichts mehr
+     // essen/trinken kann.
+     // Bei gesetztem 'mytext' wird 'mytext' an den Spieler ausgegeben.
+     // Ansonsten wird die Standardmeldung ausgegeben.
+     if (!this_player()->eat_food(10, 0, "Der Keks ist einfach "
+                                         "zuviel fuer Dich.\n") )
+       return 1;
+
+     // Spieler hatte noch ausreichend Spielraum bei P_FOOD. Die 10 sind
+     // schon addiert worden. Jetzt Nachricht ausgeben:
+     tell_object(this_player(), break_string("Du knabberst ein bisschen an "
+                 "dem Keks herum und fuehlst Dich gleich viel besser.", 78));
+
+     // alle Lebewesen im Raum bekommen das auch mit
+     foreach(object ob:
+             (filter(all_inventory(environment(this_player())), #'living) -
+              ({this_player()})))
+       ob->ReceiveMsg(this_player()->Name()+" knuspert einen Keks weg.",
+                      MT_LOOK|MT_LISTEN,
+                      MA_EAT);
+
+     // Rassenabhaengige Heilung: Sofort oder in Schritten
+     // Tragbare Heilungen sollten auch eher buffer_hp/_sp benutzen.
+     if(this_player()->QueryProp(P_REAL_RACE)=="Kruemelmonster")
+       this_player()->heal_self(30);
+     else {
+       this_player()->buffer_hp(30,5);
+       this_player()->buffer_sp(30,5);
+     }
+
+     return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnlich:  consume, drink_alcohol, drink_soft
+   Heilung:   heal_self, restore_spell_points, restore_hit_points,
+              buffer_hp, buffer_sp
+   Timing:    check_and_update_timed_key
+   Enttanken: defuel_drink, defuel_food
+   Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
+              P_DEFUEL_TIME_DRINK
+   Konzepte:  heilung, enttanken, food
 
 9. August 2015 Gloinson
diff --git a/doc/lfun/execute_anything b/doc/lfun/execute_anything
index 9c889f0..39ec45a 100644
--- a/doc/lfun/execute_anything
+++ b/doc/lfun/execute_anything
@@ -1,42 +1,64 @@
+
 execute_anything()
-FUNKTION:
-    protected mixed execute_anything(mixed fun, mixed args, ...)
+******************
 
-DEFINIERT IN:
-    /std/util/executer.c
 
-ARGUMENTE:
-    mixed fun        auszufuehrende Funktion/Array/Closure ... anything
-    mixed args       weitere Argumente, werden weiter uebergeben
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Fuehrt "alles" aus:
-    
-    'fun' kann sein:
-    - eine Closure
-      [funcall(fun, args, ...)]
-    - einen String als Funktion im Objekt
-      [call_other(this_object(), fun, args, ...)]
-    - ein Array mit Objekt/Objektnamen + Funktion als Aufruf der Funktion am
-      Objekt/Objektnamen:
-      [call_other(array[0], array[1], args...)]
+   protected mixed execute_anything(mixed fun, mixed args, ...)
 
-    Wird execute_anything() aus dem restriction_checker gerufen, wird als
-    erster Parameter immer das gepruefte Living uebergeben.
 
-BEMERKUNGEN:
-    Es kann sich anbieten, die gerufene Funktion mit varargs-Argumenten zu
-    gestalten, damit ihr mehr Argumente uebergeben werden koennen als in der
-    Funktionsdefinition angegeben sind. 
+DEFINIERT IN
+============
 
-    Der Restriktionspruefer (/std/restriction_checker) versteht im Falle eines
-    Arrays mit Objekt/Objektnamen + Funktion auch ein Array mit mehr als 2
-    Elementen. Die weiteren Elemente werden dann zu weiteren Argumenten der
-    gerufenen Funktion. Hierbei wird <pl> ggf. aber als erstes Argument vor
-    alle anderen eingefuegt.
+   /std/util/executer.c
 
-SIEHE AUCH:
-    check_restrictions, varargs
+
+ARGUMENTE
+=========
+
+   mixed fun        auszufuehrende Funktion/Array/Closure ... anything
+   mixed args       weitere Argumente, werden weiter uebergeben
+
+
+BESCHREIBUNG
+============
+
+   Fuehrt "alles" aus:
+
+
+
+   'fun' kann sein:
+   - eine Closure
+     [funcall(fun, args, ...)]
+   - einen String als Funktion im Objekt
+     [call_other(this_object(), fun, args, ...)]
+   - ein Array mit Objekt/Objektnamen + Funktion als Aufruf der Funktion am
+     Objekt/Objektnamen:
+     [call_other(array[0], array[1], args...)]
+
+   Wird execute_anything() aus dem restriction_checker gerufen, wird als
+   erster Parameter immer das gepruefte Living uebergeben.
+
+
+BEMERKUNGEN
+===========
+
+   Es kann sich anbieten, die gerufene Funktion mit varargs-Argumenten zu
+   gestalten, damit ihr mehr Argumente uebergeben werden koennen als in der
+   Funktionsdefinition angegeben sind.
+
+   Der Restriktionspruefer (/std/restriction_checker) versteht im Falle eines
+   Arrays mit Objekt/Objektnamen + Funktion auch ein Array mit mehr als 2
+   Elementen. Die weiteren Elemente werden dann zu weiteren Argumenten der
+   gerufenen Funktion. Hierbei wird <pl> ggf. aber als erstes Argument vor
+   alle anderen eingefuegt.
+
+
+SIEHE AUCH
+==========
+
+   check_restrictions, varargs
 
 31.12.2013, Zesstra
-
diff --git a/doc/lfun/exit b/doc/lfun/exit
index 190db91..f2d0b00 100644
--- a/doc/lfun/exit
+++ b/doc/lfun/exit
@@ -1,33 +1,56 @@
+
 exit()
+******
 
-FUNKTION:
-  varargs void exit(object liv, object dest);
 
-DEFINIERT IN:
-  /std/room/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-  liv - (object) Das bewegte Lebewesen.
-  dest - (object) Das Environment, in welches bewegt wird.
+   varargs void exit(object liv, object dest);
 
-BESCHREIBUNG:
-  Diese Funktion wird immer dann aufgerufen, wenn ein Lebewesen den
-  Raum verlaesst. Standardmaessig werden hier ggf. die Raummeldungen
-  abgestellt, man kann aber auch eigene Checks einhaengen. In dem Fall MUSS
-  man aber das geerbte exit() auf jeden Fall aufrufen.
 
-RUeCKGABEWERT:
-  keiner
+DEFINIERT IN
+============
 
-BEMERKUNG:
-  Man beachte, dass this_player() 0 sein kann, wenn z.B. ein netztoter Spieler
-  Spieler den Raum verlaesst.
-  Man beachte ausserdem, dass this_player() nicht unbedingt das bewegte Living
-  sein muss. Wenn z.B. jemand ein Lebewesen bewegt, ist TP der, der die
-  Bewegung durchfuehrt, nicht das Lebewesen.
+   /std/room/description.c
 
-SIEHE AUCH:
-  init(), this_player(), previous_object(), caller_stack(),
-  NotfiyLeave(), NotifyRemove(), NotifyDestruct()
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   liv - (object) Das bewegte Lebewesen.
+   dest - (object) Das Environment, in welches bewegt wird.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird immer dann aufgerufen, wenn ein Lebewesen den
+   Raum verlaesst. Standardmaessig werden hier ggf. die Raummeldungen
+   abgestellt, man kann aber auch eigene Checks einhaengen. In dem Fall MUSS
+   man aber das geerbte exit() auf jeden Fall aufrufen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNG
+=========
+
+   Man beachte, dass this_player() 0 sein kann, wenn z.B. ein netztoter Spieler
+   Spieler den Raum verlaesst.
+   Man beachte ausserdem, dass this_player() nicht unbedingt das bewegte Living
+   sein muss. Wenn z.B. jemand ein Lebewesen bewegt, ist TP der, der die
+   Bewegung durchfuehrt, nicht das Lebewesen.
+
+
+SIEHE AUCH
+==========
+
+   init(), this_player(), previous_object(), caller_stack(),
+   NotfiyLeave(), NotifyRemove(), NotifyDestruct()
+
 Last modified: 25.02.2009, Zesstra
diff --git a/doc/lfun/find_obs b/doc/lfun/find_obs
index 8f44384..994ac6f 100644
--- a/doc/lfun/find_obs
+++ b/doc/lfun/find_obs
@@ -1,38 +1,53 @@
+
 find_obs()
+**********
+
 
 FUNKTION
-    object* find_obs(string str, int meth)
+========
 
-DEFINIERT IN:
+   object* find_obs(string str, int meth)
 
-    /std/living/put_and_get.c
 
-ARGUMENTE:
+DEFINIERT IN
+============
 
-    str     Der String der geparsed werden soll.
-    meth    Mit Hilfe dieses Parameters koennen bestimmte Bereichs-
-            eingrenzungen vorgenommen werden (definiert in moving.h):
+   /std/living/put_and_get.c
 
-            PUT_GET_NONE - keinerlei Bereichseingrenzung.
-            PUT_GET_TAKE - es handelt sich um ein Nehmen von Gegenstaenden
-                           also wird das inventory ausgenommen.
-            PUT_GET_DROP - es handelt sich um das Entfernen von Gegenstaenden
-                           also wird das environment ausgenommen.           
-                                                                            
-BESCHREIBUNG:                                                               
-                                                                            
-    Der String (str) muss folgendes Format haben damit Objekte gefunden
-    werden.
 
-    <gegenstand> [aus container] [in mir|im raum]
+ARGUMENTE
+=========
 
-    <gegenstand> kann hierbei sowohl eine Objekt-ID als auch ein
-    Gruppenbezeichner wie z.b. "alles" sein.
+   str     Der String der geparsed werden soll.
+   meth    Mit Hilfe dieses Parameters koennen bestimmte Bereichs-
+           eingrenzungen vorgenommen werden (definiert in moving.h):
 
-RUeCKGABEWERT:
+           PUT_GET_NONE - keinerlei Bereichseingrenzung.
+           PUT_GET_TAKE - es handelt sich um ein Nehmen von Gegenstaenden
+                          also wird das inventory ausgenommen.
+           PUT_GET_DROP - es handelt sich um das Entfernen von Gegenstaenden
+                          also wird das environment ausgenommen.
 
-    Ein Array mit allen Objekten die sich angesprochen fuehlen, oder aber 0.
 
-SIEHE AUCH:
+BESCHREIBUNG
+============
 
-    drop_obj(), give_obj(), pick_obj(), put_obj(), /std/living/put_and_get.c
+   Der String (str) muss folgendes Format haben damit Objekte gefunden
+   werden.
+
+   <gegenstand> [aus container] [in mir|im raum]
+
+   <gegenstand> kann hierbei sowohl eine Objekt-ID als auch ein
+   Gruppenbezeichner wie z.b. "alles" sein.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array mit allen Objekten die sich angesprochen fuehlen, oder aber 0.
+
+
+SIEHE AUCH
+==========
+
+   drop_obj(), give_obj(), pick_obj(), put_obj(), /std/living/put_and_get.c
diff --git a/doc/lfun/get_killing_player b/doc/lfun/get_killing_player
index 16685b9..3500be1 100644
--- a/doc/lfun/get_killing_player
+++ b/doc/lfun/get_killing_player
@@ -1,39 +1,61 @@
+
 get_killing_player()
+********************
 
-FUNKTION:
-     protected object get_killing_player()
 
-DEFINIERT IN:
-     /std/living/life.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   protected object get_killing_player()
 
-BESCHREIBUNG:
-     Liefert im Tod (nach dem toetenden do_damage()) das Spielerobjekt, was
-     den Tod wohl zu verantworten hat, falls es ermittelt werden kann. Es
-     werden registrierte Helfer-NPC und einige schadenverursachende Objekte
-     beruecksichtigt. Hierbei wird QueryUser() in den Objekten abgefragt.
 
-     Es benoetigt ein gueltiges P_KILLER, d.h. falls das Lebewesen vergiftet
-     wurde oder das toetende Objekt aus sonstigen Gruenden nicht in P_KILLER
-     steht, funktioniert es nicht.
-     Auch gibt es bestimmt Objekte, die fuer Spieler toeten koennen, die die
-     diese Funktion nicht kennt.
-     (Dies gilt beides ebenso fuer /p/service/mupfel/getkill.c, ist also kein
-      Grund, jenes statt dieser Funktion zu nutzen.)
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     Das Objekt des Spielers, falls es ermittelt werden konnte, sonst 0.
+   /std/living/life.c
 
-BEMERKUNGEN:
-    Der Name des Spieler ist mittel Name() ermittelbar. Will man die Info, 
-    womit ein Spieler den Kill ggf. gemacht hat, kann man P_KILLER
-    auswerten/nutzen.
 
-SIEHE AUCH:
-     QueryUser
-     P_KILLER
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Liefert im Tod (nach dem toetenden do_damage()) das Spielerobjekt, was
+   den Tod wohl zu verantworten hat, falls es ermittelt werden kann. Es
+   werden registrierte Helfer-NPC und einige schadenverursachende Objekte
+   beruecksichtigt. Hierbei wird QueryUser() in den Objekten abgefragt.
+
+   Es benoetigt ein gueltiges P_KILLER, d.h. falls das Lebewesen vergiftet
+   wurde oder das toetende Objekt aus sonstigen Gruenden nicht in P_KILLER
+   steht, funktioniert es nicht.
+   Auch gibt es bestimmt Objekte, die fuer Spieler toeten koennen, die die
+   diese Funktion nicht kennt.
+   (Dies gilt beides ebenso fuer /p/service/mupfel/getkill.c, ist also kein
+    Grund, jenes statt dieser Funktion zu nutzen.)
+
+
+RUeCKGABEWERT
+=============
+
+   Das Objekt des Spielers, falls es ermittelt werden konnte, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Der Name des Spieler ist mittel Name() ermittelbar. Will man die Info,
+   womit ein Spieler den Kill ggf. gemacht hat, kann man P_KILLER
+   auswerten/nutzen.
+
+
+SIEHE AUCH
+==========
+
+   QueryUser
+   P_KILLER
+
 11.11.2013, Zesstra
-
diff --git a/doc/lfun/gilde/AddSkill b/doc/lfun/gilde/AddSkill
index 21db504..6be310b 100644
--- a/doc/lfun/gilde/AddSkill
+++ b/doc/lfun/gilde/AddSkill
@@ -1,33 +1,57 @@
+
 AddSkill()
-FUNKTION:
-    varargs int AddSkill(string sname, mapping ski)
+**********
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string sname       Name des Skills
-    mapping ski        Skill-Mapping
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Fuegt den Skill zur Liste der in dieser Gilde lernbaren Skills
-    hinzu. Das Mapping enthaelt Informationen, die der Gildenraum
-    bzw. das Gildenobjekt zum Skill herausgeben und die das Lernen
-    des Skills beeinflussen.
+   varargs int AddSkill(string sname, mapping ski)
 
-RUECKGABWERT:
-    1 fuer Erfolg
 
-BEISPIEL:
-    AddSkill( FIGHT(WT_CLUB), ([ OFFSET(SI_SKILLLEARN) : 1 ]) );
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+   /std/gilden_ob.c
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   string sname       Name des Skills
+   mapping ski        Skill-Mapping
+
+
+BESCHREIBUNG
+============
+
+   Fuegt den Skill zur Liste der in dieser Gilde lernbaren Skills
+   hinzu. Das Mapping enthaelt Informationen, die der Gildenraum
+   bzw. das Gildenobjekt zum Skill herausgeben und die das Lernen
+   des Skills beeinflussen.
+
+
+RUECKGABWERT
+============
+
+   1 fuer Erfolg
+
+
+BEISPIEL
+========
+
+   AddSkill( FIGHT(WT_CLUB), ([ OFFSET(SI_SKILLLEARN) : 1 ]) );
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/AddSpell b/doc/lfun/gilde/AddSpell
index c0ca935..027b4d6 100644
--- a/doc/lfun/gilde/AddSpell
+++ b/doc/lfun/gilde/AddSpell
@@ -1,47 +1,74 @@
+
 AddSpell()
-FUNKTION:
-    varargs int AddSpell(string verb, mapping ski)
+**********
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string verb        Name des Spells
-    mapping ski        Skill-Mapping
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Fuegt den Spell zur Liste der in dieser Gilde lernbaren Spells
-    hinzu. Das Mapping enthaelt Informationen, die der Gildenraum
-    bzw. das Gildenobjekt zum Spell herausgeben und die das Lernen
-    des Spells beeinflussen.
+   varargs int AddSpell(string verb, mapping ski)
 
-RUECKGABWERT:
-    1 fuer Erfolg
 
-BEMERKUNGEN:
-    Siehe das Verhalten von QuerySpell (gilde) zum Zusammenfuegen
-    der AddSpell-Informationen aus Gilde und Spellbook. Relevant
-    zB fuer Lernrestriktionen.
+DEFINIERT IN
+============
 
-BEISPIEL:
-    AddSpell("entfluche",
-      ([SI_SKILLRESTR_LEARN :
-        ([P_GUILD_LEVEL: LVL_WANDER,
-          SR_FUN:        #'glaubensTest]),
-        SI_DIFFICULTY: 100,
-        SI_SKILLINFO:  "Wanderprediger ab Stufe 7",
-        SI_SKILLINFO_LONG: break_string(
-          "Um jemanden von einem laestigen Sprachfluch zu befreien, "
-          "sollte man diese Anrufung benutzen [...]", 78),
-        SI_GOD:        LEMBOLD]));
+   /std/gilden_ob.c
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSkill, QuerySpell, QuerySkill, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+ARGUMENTE
+=========
+
+   string verb        Name des Spells
+   mapping ski        Skill-Mapping
+
+
+BESCHREIBUNG
+============
+
+   Fuegt den Spell zur Liste der in dieser Gilde lernbaren Spells
+   hinzu. Das Mapping enthaelt Informationen, die der Gildenraum
+   bzw. das Gildenobjekt zum Spell herausgeben und die das Lernen
+   des Spells beeinflussen.
+
+
+RUECKGABWERT
+============
+
+   1 fuer Erfolg
+
+
+BEMERKUNGEN
+===========
+
+   Siehe das Verhalten von QuerySpell (gilde) zum Zusammenfuegen
+   der AddSpell-Informationen aus Gilde und Spellbook. Relevant
+   zB fuer Lernrestriktionen.
+
+
+BEISPIEL
+========
+
+   AddSpell("entfluche",
+     ([SI_SKILLRESTR_LEARN :
+       ([P_GUILD_LEVEL: LVL_WANDER,
+         SR_FUN:        #'glaubensTest]),
+       SI_DIFFICULTY: 100,
+       SI_SKILLINFO:  "Wanderprediger ab Stufe 7",
+       SI_SKILLINFO_LONG: break_string(
+         "Um jemanden von einem laestigen Sprachfluch zu befreien, "
+         "sollte man diese Anrufung benutzen [...]", 78),
+       SI_GOD:        LEMBOLD]));
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSkill, QuerySpell, QuerySkill, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
 
 3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/GuildRating b/doc/lfun/gilde/GuildRating
index 7bfb6b2..ca4ec1b 100644
--- a/doc/lfun/gilde/GuildRating
+++ b/doc/lfun/gilde/GuildRating
@@ -1,27 +1,47 @@
+
 GuildRating()
-FUNKTION:
-    int GuildRating(object pl)
+*************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    object pl          Spieler, der geratet werden soll
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Gibt das Guild-Rating des Spielers im Bereich 0-MAX_ABILITY zurueck
-    und schreibt sie in P_GUILD_RATING. Wichtig fuer Levelbestimmung!
-    
-    Normalerweise ist das der Mittelwert der Skill-Abilities aller Skills
-    und Spells, das Verhalten kann aber ueberschrieben werden.
+   int GuildRating(object pl)
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS, P_GUILD_RATING
-    Gildenfkt.:
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
 
-10. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   object pl          Spieler, der geratet werden soll
+
+
+BESCHREIBUNG
+============
+
+   Gibt das Guild-Rating des Spielers im Bereich 0-MAX_ABILITY zurueck
+   und schreibt sie in P_GUILD_RATING. Wichtig fuer Levelbestimmung!
+
+
+
+   Normalerweise ist das der Mittelwert der Skill-Abilities aller Skills
+   und Spells, das Verhalten kann aber ueberschrieben werden.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS, P_GUILD_RATING
+   Gildenfkt.:
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+10. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/InitialSkillAbility b/doc/lfun/gilde/InitialSkillAbility
index 28a2689..afea3e9 100644
--- a/doc/lfun/gilde/InitialSkillAbility
+++ b/doc/lfun/gilde/InitialSkillAbility
@@ -1,31 +1,52 @@
+
 InitialSkillAbility()
-FUNKTION:
-    static int InitialSkillAbility(mapping ski, object pl)
+*********************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    mapping ski     Der zu lernende Skill
-    object  pl      Spieler
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Gibt den initialen Ability-Wert fuer einen neu zu lernenden Skill (Spell)
-    zurueck. Die Standardformel benutzt nur Intelligenz und SI_SKILLLEARN und
-    kann in der Gilde ueberschrieben werden.
+   static int InitialSkillAbility(mapping ski, object pl)
 
-BEMERKUNGEN:
-    Der zurueckgegebene Wert wird noch in das Spieler-Skillsystem eingegeben
-    und daher kann der real gelernte Wert abweichen
 
-SIEHE AUCH:
-    Skills:         LimitAbility, ModifySkill
-    GObj Lernen:    LearnSkill, LearnSpell
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+DEFINIERT IN
+============
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   mapping ski     Der zu lernende Skill
+   object  pl      Spieler
+
+
+BESCHREIBUNG
+============
+
+   Gibt den initialen Ability-Wert fuer einen neu zu lernenden Skill (Spell)
+   zurueck. Die Standardformel benutzt nur Intelligenz und SI_SKILLLEARN und
+   kann in der Gilde ueberschrieben werden.
+
+
+BEMERKUNGEN
+===========
+
+   Der zurueckgegebene Wert wird noch in das Spieler-Skillsystem eingegeben
+   und daher kann der real gelernte Wert abweichen
+
+
+SIEHE AUCH
+==========
+
+   Skills:         LimitAbility, ModifySkill
+   GObj Lernen:    LearnSkill, LearnSpell
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/LearnSkill b/doc/lfun/gilde/LearnSkill
index c381959..07a4dc9 100644
--- a/doc/lfun/gilde/LearnSkill
+++ b/doc/lfun/gilde/LearnSkill
@@ -1,35 +1,59 @@
+
 LearnSkill()
-FUNKTION:
-    int LearnSkill(string skill)
+************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string skill     Der zu lernende Skill
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion ueberprueft den Spieler auf Gildenzugehoerigkeit
-    und ruft, falls kein 'skill' angegeben ist die SkillListe()
-    fuer Skills auf.
+   int LearnSkill(string skill)
 
-    Falls ein Argument angegeben wird, wird bei dem Spieler dieser Skill
-    initialisiert, sofern er die notwendigen Anforderungen erfuellt hat.
 
-RUECKGABEWERT:
-    0 bei Fehler, 1 bei Erfolg.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    Fuer die Lebewesen-Skills gibt es eine gleichnamige Funktion.
-    Siehe dafuer LearnSkill.
+   /std/gilden_ob.c
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   string skill     Der zu lernende Skill
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ueberprueft den Spieler auf Gildenzugehoerigkeit
+   und ruft, falls kein 'skill' angegeben ist die SkillListe()
+   fuer Skills auf.
+
+   Falls ein Argument angegeben wird, wird bei dem Spieler dieser Skill
+   initialisiert, sofern er die notwendigen Anforderungen erfuellt hat.
+
+
+RUECKGABEWERT
+=============
+
+   0 bei Fehler, 1 bei Erfolg.
+
+
+BEMERKUNGEN
+===========
+
+   Fuer die Lebewesen-Skills gibt es eine gleichnamige Funktion.
+   Siehe dafuer LearnSkill.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/LearnSpell b/doc/lfun/gilde/LearnSpell
index 55c5840..385da3e 100644
--- a/doc/lfun/gilde/LearnSpell
+++ b/doc/lfun/gilde/LearnSpell
@@ -1,32 +1,53 @@
+
 LearnSpell()
-FUNKTION:
-    varargs int LearnSpell(string spell, object pl)
+************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string spell     Der zu lernende Spell
-    object pl        lernender Spieler, wenn 0, wird this_player() genommen
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion ueberprueft den Spieler auf Gildenzugehoerigkeit
-    und ruft, falls kein 'spell' angegeben ist die SkillListe()
-    fuer Spells auf.
+   varargs int LearnSpell(string spell, object pl)
 
-    Falls ein Argument angegeben wird, wird bei dem Spieler dieser Spell
-    initialisiert, sofern er die notwendigen Anforderungen erfuellt hat.
 
-RUECKGABEWERT:
-    0 bei Fehler, 1 bei Erfolg.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+   /std/gilden_ob.c
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   string spell     Der zu lernende Spell
+   object pl        lernender Spieler, wenn 0, wird this_player() genommen
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ueberprueft den Spieler auf Gildenzugehoerigkeit
+   und ruft, falls kein 'spell' angegeben ist die SkillListe()
+   fuer Spells auf.
+
+   Falls ein Argument angegeben wird, wird bei dem Spieler dieser Spell
+   initialisiert, sofern er die notwendigen Anforderungen erfuellt hat.
+
+
+RUECKGABEWERT
+=============
+
+   0 bei Fehler, 1 bei Erfolg.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/QuerySkill b/doc/lfun/gilde/QuerySkill
index 59dce12..ee3e68a 100644
--- a/doc/lfun/gilde/QuerySkill
+++ b/doc/lfun/gilde/QuerySkill
@@ -1,33 +1,54 @@
+
 QuerySkill()
-FUNKTION:
-    mapping QuerySkill(string skill)
+************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string skill       Name des Skills
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Liefert fuer diesen Skill die Gildeninformationen in einem
-    Mapping zurueck.
+   mapping QuerySkill(string skill)
 
-BEISPIEL:
-    // /gilden/klerus->QuerySkill(FIGHT(WT_CLUB)) gibt zB zurueck:
-    ([SI_FUN:                "Fight_club",
-      OFFSET(SI_SKILLLEARN): 1
-      SI_SKILLRESTR_USE:     ([SR_FUN:#'gilden/klerus->spellTest()]),
-      OFFSET(SI_SKILLLEARN): #'gilden/klerus->learnOffset,
-      OFFSET(SI_SPELLCOST):  #'gilden/klerus->costOffset,
-      FACTOR(SI_SPELLCOST):  #'gilden/klerus->costFactor])
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSkill, AddSpell, QuerySpell
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+DEFINIERT IN
+============
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   string skill       Name des Skills
+
+
+BESCHREIBUNG
+============
+
+   Liefert fuer diesen Skill die Gildeninformationen in einem
+   Mapping zurueck.
+
+
+BEISPIEL
+========
+
+   // /gilden/klerus->QuerySkill(FIGHT(WT_CLUB)) gibt zB zurueck:
+   ([SI_FUN:                "Fight_club",
+     OFFSET(SI_SKILLLEARN): 1
+     SI_SKILLRESTR_USE:     ([SR_FUN:#'gilden/klerus->spellTest()]),
+     OFFSET(SI_SKILLLEARN): #'gilden/klerus->learnOffset,
+     OFFSET(SI_SPELLCOST):  #'gilden/klerus->costOffset,
+     FACTOR(SI_SPELLCOST):  #'gilden/klerus->costFactor])
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSkill, AddSpell, QuerySpell
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/QuerySpell b/doc/lfun/gilde/QuerySpell
index 22f1965..32eff3a 100644
--- a/doc/lfun/gilde/QuerySpell
+++ b/doc/lfun/gilde/QuerySpell
@@ -1,54 +1,75 @@
+
 QuerySpell()
-FUNKTION:
-    mapping QuerySpell(string spell)
+************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    string spell       Name des Spells
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Liefert fuer diesen Spell die Gilden- und Spellbookinformationen
-    zusammengefasst in ein Mapping zurueck.
-    Die Gildeninformationen haben dabei Vorrang (d.h. eine Lernrestriktion
-    im Spellbook wird benutzt, bei unterschiedlichen Werten fuer das gleiche
-    Attribut geht der Wert in der Gilde vor).
+   mapping QuerySpell(string spell)
 
-BEISPIEL:
-    // /gilden/klerus->QuerySpell("entfluche") gibt zB zurueck:
-    ([SI_SPELLFATIGUE: 2,
-      SI_SP_LOW_MSG:   "Deine Konzentration reicht nicht aus, das Interesse "
-                       "der Goetter zu "wecken.\n",
-      SI_TIME_MSG:     "So schnell koennen sich die Goetter nicht wieder um "
-                       "Dich kuemmern!\n",
-      SI_SKILLLEARN:   5,
-      OFFSET(SI_SKILLLEARN):15
-      SI_SKILLRESTR_LEARN:
-      ([P_LEVEL:       7,
-        P_GUILD_LEVEL: LVL_WANDER,
-        SR_FUN:        #'gilden/klerus->glaubensTest]),
-      SI_DIFFICULTY:   100,
-      SI_SKILLINFO:    "Wanderprediger ab Stufe 7",
-      SI_SKILLINFO_LONG:
-        "Um jemanden von einem laestigen Sprachfluch zu befreien, "
-        "sollte man diese Anrufung benutzen [...]",
-      SP_NAME:         "entfluche",
-      SI_SKILLRESTR_USE: ([ SR_FREE_HANDS : 0 ]),
-      SI_MAGIC_TYPE:   ({MT_SAKRAL})
-      SI_GOD:          LEMBOLD,
-      SI_SKILLRESTR_USE:     ([SR_FUN:#'gilden/klerus->spellTest()]),
-      OFFSET(SI_SKILLLEARN): #'gilden/klerus->learnOffset,
-      OFFSET(SI_SPELLCOST):  #'gilden/klerus->costOffset,
-      FACTOR(SI_SPELLCOST):  #'gilden/klerus->costFactor])
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSkill, AddSpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   string spell       Name des Spells
+
+
+BESCHREIBUNG
+============
+
+   Liefert fuer diesen Spell die Gilden- und Spellbookinformationen
+   zusammengefasst in ein Mapping zurueck.
+   Die Gildeninformationen haben dabei Vorrang (d.h. eine Lernrestriktion
+   im Spellbook wird benutzt, bei unterschiedlichen Werten fuer das gleiche
+   Attribut geht der Wert in der Gilde vor).
+
+
+BEISPIEL
+========
+
+   // /gilden/klerus->QuerySpell("entfluche") gibt zB zurueck:
+   ([SI_SPELLFATIGUE: 2,
+     SI_SP_LOW_MSG:   "Deine Konzentration reicht nicht aus, das Interesse "
+                      "der Goetter zu "wecken.\n",
+     SI_TIME_MSG:     "So schnell koennen sich die Goetter nicht wieder um "
+                      "Dich kuemmern!\n",
+     SI_SKILLLEARN:   5,
+     OFFSET(SI_SKILLLEARN):15
+     SI_SKILLRESTR_LEARN:
+     ([P_LEVEL:       7,
+       P_GUILD_LEVEL: LVL_WANDER,
+       SR_FUN:        #'gilden/klerus->glaubensTest]),
+     SI_DIFFICULTY:   100,
+     SI_SKILLINFO:    "Wanderprediger ab Stufe 7",
+     SI_SKILLINFO_LONG:
+       "Um jemanden von einem laestigen Sprachfluch zu befreien, "
+       "sollte man diese Anrufung benutzen [...]",
+     SP_NAME:         "entfluche",
+     SI_SKILLRESTR_USE: ([ SR_FREE_HANDS : 0 ]),
+     SI_MAGIC_TYPE:   ({MT_SAKRAL})
+     SI_GOD:          LEMBOLD,
+     SI_SKILLRESTR_USE:     ([SR_FUN:#'gilden/klerus->spellTest()]),
+     OFFSET(SI_SKILLLEARN): #'gilden/klerus->learnOffset,
+     OFFSET(SI_SPELLCOST):  #'gilden/klerus->costOffset,
+     FACTOR(SI_SPELLCOST):  #'gilden/klerus->costFactor])
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSkill, AddSpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
 
 3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/SkillListe b/doc/lfun/gilde/SkillListe
index 8cc2b39..200650b 100644
--- a/doc/lfun/gilde/SkillListe
+++ b/doc/lfun/gilde/SkillListe
@@ -1,27 +1,49 @@
+
 SkillListe()
-FUNKTION:
-    int SkillListe(int what)
+************
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    int what        Rueckgabeoption:
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Gibt eine Text mit Liste mit lernbaren Skills/Spells zurueck:
-    
-    Fuer 'what': 0 - alle; 1 - Spells; 2 - Skills.
-    
-    Zeigt Eintraege aus SI_SKILLINFO.
+   int SkillListe(int what)
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
-    Skills:         skill_info_liste
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   int what        Rueckgabeoption:
+
+
+BESCHREIBUNG
+============
+
+   Gibt eine Text mit Liste mit lernbaren Skills/Spells zurueck:
+
+
+
+   Fuer 'what': 0 - alle; 1 - Spells; 2 - Skills.
+
+
+
+   Zeigt Eintraege aus SI_SKILLINFO.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+   Skills:         skill_info_liste
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/UseSpell b/doc/lfun/gilde/UseSpell
index 96823cc..4f3724c 100644
--- a/doc/lfun/gilde/UseSpell
+++ b/doc/lfun/gilde/UseSpell
@@ -1,32 +1,53 @@
+
 UseSpell()
-FUNKTION:
-    varargs int UseSpell(object caster, string spell, mapping sinfo)
+**********
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-ARGUMENTE:
-    object caster      Spieler, der Spell nutzt
-    string spell       Spell-Name
-    mapping sinfo      Spell-Informationen
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Prueft, ob der Spell in der Gilde definiert ist und ruft ihn dann
-    ggf in aus dem Spell-Mapping gelesenen Gilden-SI_SPELLBOOK auf.
+   varargs int UseSpell(object caster, string spell, mapping sinfo)
 
-    Wird von living/skills::UseSpell gerufen, wenn dieses die SI_CLOSURE,
-    also die Funktion eines Spells sucht, fuer den kein SI_SPELLBOOK
-    explizit angegeben wurde.
 
-RUECKGABWERT:
-    Rueckgabewert des Spells aus dem Spellbook oder 0.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:     GuildRating
-    * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+   /std/gilden_ob.c
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   object caster      Spieler, der Spell nutzt
+   string spell       Spell-Name
+   mapping sinfo      Spell-Informationen
+
+
+BESCHREIBUNG
+============
+
+   Prueft, ob der Spell in der Gilde definiert ist und ruft ihn dann
+   ggf in aus dem Spell-Mapping gelesenen Gilden-SI_SPELLBOOK auf.
+
+   Wird von living/skills::UseSpell gerufen, wenn dieses die SI_CLOSURE,
+   also die Funktion eines Spells sucht, fuer den kein SI_SPELLBOOK
+   explizit angegeben wurde.
+
+
+RUECKGABWERT
+============
+
+   Rueckgabewert des Spells aus dem Spellbook oder 0.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:     GuildRating
+   * Ein/Austritt: beitreten, bei_oder_aus_treten, austreten
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/austreten b/doc/lfun/gilde/austreten
index 4770bef..cde77e2 100644
--- a/doc/lfun/gilde/austreten
+++ b/doc/lfun/gilde/austreten
@@ -1,34 +1,52 @@
+
 austreten()
-FUNKTION:
-    varargs int austreten(int loss)
+***********
 
-ARGUMENTE:
-    int loss       Prozentsatz, um den sich die Gildenskills verschlechtern
 
-DEFINIERT IN:
-    /std/gilden_ob.c
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Austrittsfunktion der Gilde. Prueft die Restriktionen der Gilde und
-    laesst this_player() ggf austreten. Das Austreten aus der Standard-
-    gilde ist dabei nicht moeglich.
+   varargs int austreten(int loss)
 
-    Der Gildenmaster loest ggf ein EVT_GUILD_CHANGE aus. Dabei werden
-    E_OBJECT, E_GUILDNAME, E_LAST_GUILDNAME entsprechend gesetzt.
 
-    Der Gildenmaster senkt auch die Skill/Spell-Faehigkeiten um 'loss' bzw.
-    normalerweise mindestens 20%.
+ARGUMENTE
+=========
 
-    Durch Ueberschreiben koennen hier zB Abschiedsmeldungen gesendet werden.
+   int loss       Prozentsatz, um den sich die Gildenskills verschlechtern
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:
-    * Ein/Austritt: beitreten, bei_oder_aus_treten
-    * Props dafuer: P_GUILD_RESTRICTIONS
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+BESCHREIBUNG
+============
+
+   Austrittsfunktion der Gilde. Prueft die Restriktionen der Gilde und
+   laesst this_player() ggf austreten. Das Austreten aus der Standard-
+   gilde ist dabei nicht moeglich.
+
+   Der Gildenmaster loest ggf ein EVT_GUILD_CHANGE aus. Dabei werden
+   E_OBJECT, E_GUILDNAME, E_LAST_GUILDNAME entsprechend gesetzt.
+
+   Der Gildenmaster senkt auch die Skill/Spell-Faehigkeiten um 'loss' bzw.
+   normalerweise mindestens 20%.
+
+   Durch Ueberschreiben koennen hier zB Abschiedsmeldungen gesendet werden.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:
+   * Ein/Austritt: beitreten, bei_oder_aus_treten
+   * Props dafuer: P_GUILD_RESTRICTIONS
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/bei_oder_aus_treten b/doc/lfun/gilde/bei_oder_aus_treten
index 0a5de78..abed024 100644
--- a/doc/lfun/gilde/bei_oder_aus_treten
+++ b/doc/lfun/gilde/bei_oder_aus_treten
@@ -1,25 +1,43 @@
+
 bei_oder_aus_treten()
-FUNKTION:
-    int bei_oder_aus_treten(string str)
+*********************
 
-ARGUMENTE:
-    string str       Spielerparameter
 
-DEFINIERT IN:
-    /std/gilden_ob.c
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Aus- oder Eintrittsfunktion, ruft beitreten() bzw. austreten() auf.
-    Wird im Std-Gildenraum per AddCmd zur Verfuegung gestellt.
+   int bei_oder_aus_treten(string str)
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:
-    * Ein/Austritt: beitreten, austreten
-    * Props dafuer: P_GUILD_RESTRICTIONS
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   string str       Spielerparameter
+
+
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+BESCHREIBUNG
+============
+
+   Aus- oder Eintrittsfunktion, ruft beitreten() bzw. austreten() auf.
+   Wird im Std-Gildenraum per AddCmd zur Verfuegung gestellt.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell, QuerySkill
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:
+   * Ein/Austritt: beitreten, austreten
+   * Props dafuer: P_GUILD_RESTRICTIONS
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/gilde/beitreten b/doc/lfun/gilde/beitreten
index 3938f7b..6e5a957 100644
--- a/doc/lfun/gilde/beitreten
+++ b/doc/lfun/gilde/beitreten
@@ -1,28 +1,43 @@
+
 beitreten()
-FUNKTION:
-    int beitreten()
+***********
 
-DEFINIERT IN:
-    /std/gilden_ob.c
 
-BESCHREIBUNG:
-    Beitrittsfunktion der Gilde. Prueft die Gilde selbst im Gildenmaster,
-    dann die Restriktionen der Gilde und laesst this_player() ggf eintreten.
+FUNKTION
+========
 
-    Der Gildenmaster loest ggf ein EVT_GUILD_CHANGE aus. Dabei werden
-    E_OBJECT, E_GUILDNAME, E_LAST_GUILDNAME entsprechend gesetzt.
+   int beitreten()
 
-    Durch Ueberschreiben koennen hier zB Standard-Skills und Spells den
-    Spieler bei Eintritt gelehrt werden.
 
-SIEHE AUCH:
-    GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
-    * Anzeigen:     SkillListe
-    * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell
-    * Nutzen:       UseSpell (gilde)
-    * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
-    Gildenfkt.:
-    * Ein/Austritt: bei_oder_aus_treten, austreten
-    * Props dafuer: P_GUILD_RESTRICTIONS
+DEFINIERT IN
+============
 
-3. Okt 2011 Gloinson
\ No newline at end of file
+   /std/gilden_ob.c
+
+
+BESCHREIBUNG
+============
+
+   Beitrittsfunktion der Gilde. Prueft die Gilde selbst im Gildenmaster,
+   dann die Restriktionen der Gilde und laesst this_player() ggf eintreten.
+
+   Der Gildenmaster loest ggf ein EVT_GUILD_CHANGE aus. Dabei werden
+   E_OBJECT, E_GUILDNAME, E_LAST_GUILDNAME entsprechend gesetzt.
+
+   Durch Ueberschreiben koennen hier zB Standard-Skills und Spells den
+   Spieler bei Eintritt gelehrt werden.
+
+
+SIEHE AUCH
+==========
+
+   GObj Lernen:    LearnSkill, LearnSpell, InitialSkillAbility
+   * Anzeigen:     SkillListe
+   * Verwalten:    AddSpell (gilde), AddSkill, QuerySpell
+   * Nutzen:       UseSpell (gilde)
+   * Properties:   P_GUILD_SKILLS, P_GLOBAL_SKILLPROPS
+   Gildenfkt.:
+   * Ein/Austritt: bei_oder_aus_treten, austreten
+   * Props dafuer: P_GUILD_RESTRICTIONS
+
+3. Okt 2011 Gloinson
diff --git a/doc/lfun/give b/doc/lfun/give
index 39a2624..866c1e3 100644
--- a/doc/lfun/give
+++ b/doc/lfun/give
@@ -1,43 +1,65 @@
+
 give()
+******
 
-FUNKTION:
-    public varargs int give(object o, object dest, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object o
-        Das Objekt, das uebergeben werden soll.
-    object dest
-        Der Spieler oder NPC, der das Objekt bekommen soll.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_GIVE_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int give(object o, object dest, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC uebergibt dem Empfaenger das Objekt. Gibt o->move()
-    keinen positiven Wert zurueck, beispielsweise weil das Objekt verflucht
-    ist oder der Empfaenger es nicht mehr tragen kann, bekommt er eine
-    entsprechende Fehlermeldung.
 
-RUECKGABEWERT:
-    Wenn die Uebergabe geklappt hat, 1, ansonsten 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
-    weitergeben lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
-    moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
-    manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+   /std/living/put_and_get.c
 
-    Die Funktion prueft nicht, ob der Spieler/NPC der Objekt ueberhaupt hat,
-    das muss man ggf. selbst ermitteln.
 
-SIEHE AUCH:
-    move(L), P_GIVE_MSG, give_objects(L), give_notify(L),
-    P_NOINSERT_MSG, P_NOLEAVE_MSG, P_TOO_MANY_MSG,
-    P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NODROP
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   object o
+       Das Objekt, das uebergeben werden soll.
+   object dest
+       Der Spieler oder NPC, der das Objekt bekommen soll.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_GIVE_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
+
+
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC uebergibt dem Empfaenger das Objekt. Gibt o->move()
+   keinen positiven Wert zurueck, beispielsweise weil das Objekt verflucht
+   ist oder der Empfaenger es nicht mehr tragen kann, bekommt er eine
+   entsprechende Fehlermeldung.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn die Uebergabe geklappt hat, 1, ansonsten 0.
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
+   weitergeben lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
+   moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
+   manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+
+   Die Funktion prueft nicht, ob der Spieler/NPC der Objekt ueberhaupt hat,
+   das muss man ggf. selbst ermitteln.
+
+
+SIEHE AUCH
+==========
+
+   move(L), P_GIVE_MSG, give_objects(L), give_notify(L),
+   P_NOINSERT_MSG, P_NOLEAVE_MSG, P_TOO_MANY_MSG,
+   P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NODROP
+
 Last modified: Thu Aug 28 22:21:19 2008 by Amynthor
diff --git a/doc/lfun/give_notify b/doc/lfun/give_notify
index 010d68e..ef316cb 100644
--- a/doc/lfun/give_notify
+++ b/doc/lfun/give_notify
@@ -1,59 +1,87 @@
+
 give_notify()
-FUNKTION:
-     void give_notify(object obj);
+*************
 
-DEFINIERT IN:
-     /std/npc/put_and_get.c
 
-ARGUMENTE:
-     obj
-       an den NPC uebergebenes Objekt
-RUeCKGABEWERT:
-     keiner
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird automatisch immer dann aufgerufen, wenn ein
-     Lebewesen (welches kein Spielercharakter ist) ein Objekt uebergeben
-     bekommt. Dies muss jedoch ueber die Funktionalitaet von
-     put_and_get.c geschehen sein, innerhalb von move() wird die Funktion
-     nicht aufgerufen!
+   void give_notify(object obj);
 
-BEISPIEL:
-     Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
-     Item als Beweis der Erfuellung einer bestimmten Aufgabe ueberbracht
-     wird. Folgendermasse kann dies realisiert werden:
-     void create() {
-       ::create();
-       ...
-       SetProp(P_REJECT,({REJECT_GIVE,
-         Name(WER)+" sagt: Das brauche ich nicht!\n"}));
-       ...
-     }
 
-     void quest_ok(object obj) { ...
-       // Vernichtung des Questobjektes und Questtexte
-       // Questbelohnung und Questanerkennung
-     }
+DEFINIERT IN
+============
 
-     void give_notify(object obj) {
-       if(obj->id("\nquestitem")) // Questitem bekommen?
-         quest_ok(obj);
-       else
-         ::give_notify(obj);  // P_REJECT soll sonst greifen
-     }
-     Der Aufruf von ::give_notify() stellt sicher, dass ein Objekt
-     zurueckgegeben wird, sofern es nicht das gesuchte ist. Erreicht wird
-     dies ueber P_REJECT (siehe Bemerkungen).
+   /std/npc/put_and_get.c
 
-BEMERKUNGEN:
-     Speziell in NPCs ist diese Funktion normalerweise dafuer
-     verantwortlich, dass mittels der Property P_REJECT die Annahme von
-     Objekten verweigert werden kann. Ueberschreibt man sie, so sollte
-     man gegebenenfalls darauf achten, dass diese Standardfunktion
-     ebenfalls aufgerufen wird.
 
-SIEHE AUCH:
-     P_REJECT, show_notify(), 
-     /std/npc/put_and_get.c, /std/living/put_and_get.c
+ARGUMENTE
+=========
+
+   obj
+     an den NPC uebergebenes Objekt
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird automatisch immer dann aufgerufen, wenn ein
+   Lebewesen (welches kein Spielercharakter ist) ein Objekt uebergeben
+   bekommt. Dies muss jedoch ueber die Funktionalitaet von
+   put_and_get.c geschehen sein, innerhalb von move() wird die Funktion
+   nicht aufgerufen!
+
+
+BEISPIEL
+========
+
+   Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
+   Item als Beweis der Erfuellung einer bestimmten Aufgabe ueberbracht
+   wird. Folgendermasse kann dies realisiert werden:
+   void create() {
+     ::create();
+     ...
+     SetProp(P_REJECT,({REJECT_GIVE,
+       Name(WER)+" sagt: Das brauche ich nicht!\n"}));
+     ...
+   }
+
+   void quest_ok(object obj) { ...
+     // Vernichtung des Questobjektes und Questtexte
+     // Questbelohnung und Questanerkennung
+   }
+
+   void give_notify(object obj) {
+     if(obj->id("\nquestitem")) // Questitem bekommen?
+       quest_ok(obj);
+     else
+       ::give_notify(obj);  // P_REJECT soll sonst greifen
+   }
+   Der Aufruf von ::give_notify() stellt sicher, dass ein Objekt
+   zurueckgegeben wird, sofern es nicht das gesuchte ist. Erreicht wird
+   dies ueber P_REJECT (siehe Bemerkungen).
+
+
+BEMERKUNGEN
+===========
+
+   Speziell in NPCs ist diese Funktion normalerweise dafuer
+   verantwortlich, dass mittels der Property P_REJECT die Annahme von
+   Objekten verweigert werden kann. Ueberschreibt man sie, so sollte
+   man gegebenenfalls darauf achten, dass diese Standardfunktion
+   ebenfalls aufgerufen wird.
+
+
+SIEHE AUCH
+==========
+
+   P_REJECT, show_notify(),
+   /std/npc/put_and_get.c, /std/living/put_and_get.c
 
 22. Oktober 2013, Arathorn.
diff --git a/doc/lfun/give_obj b/doc/lfun/give_obj
index 59f8c99..753fd09 100644
--- a/doc/lfun/give_obj
+++ b/doc/lfun/give_obj
@@ -1,27 +1,43 @@
+
 give_obj()
+**********
+
 
 FUNKTION
-    int give_obj(object ob, object where)
+========
 
-DEFINIERT IN:
+   int give_obj(object ob, object where)
 
-    /std/living/put_and_get.c
 
-ARGUMENTE:
+DEFINIERT IN
+============
 
-    ob      Das Objekt, das abgegeben werden soll.
-    where   Das Lebewesen, dass das Objekt erhaelt.
+   /std/living/put_and_get.c
 
-BESCHREIBUNG:
 
-    Das Lebewesen, in dem diese Funktion aufgerufen werden soll, gibt
-    den angegebenen Gegenstand (ob) an das angegebene Lebewesen (where).
+ARGUMENTE
+=========
 
-RUeCKGABEWERT:
-    1, wenn das Objekt uebergeben wurde oder die Uebergabe nicht moeglich war.
-    (in diesem Fall wird auch direkt eine Textausgabe ausgegeben)
-    0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe plaziert.
+   ob      Das Objekt, das abgegeben werden soll.
+   where   Das Lebewesen, dass das Objekt erhaelt.
 
-SIEHE AUCH:
 
-    pick_obj(), drop_obj(), put_obj(), find_obs(), /std/living/put_and_get.c
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion aufgerufen werden soll, gibt
+   den angegebenen Gegenstand (ob) an das angegebene Lebewesen (where).
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Objekt uebergeben wurde oder die Uebergabe nicht moeglich war.
+   (in diesem Fall wird auch direkt eine Textausgabe ausgegeben)
+   0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe plaziert.
+
+
+SIEHE AUCH
+==========
+
+   pick_obj(), drop_obj(), put_obj(), find_obs(), /std/living/put_and_get.c
diff --git a/doc/lfun/heal_self b/doc/lfun/heal_self
index 5f60547..53697a2 100644
--- a/doc/lfun/heal_self
+++ b/doc/lfun/heal_self
@@ -1,49 +1,68 @@
+
 heal_self()
+***********
 
-FUNKTION:
-    void heal_self(int points);
 
-ARGUMENTE:
-    points: Die dem Lebewesen zukommende Heilung.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Dem Lebewesen werden points Lebens- und Konzentrationspunkte 
-    gutgeschrieben und auf die aktuellen addiert. Es werden aber nicht
-    die maximalen Werte ueberschritten.
+   void heal_self(int points);
 
-RUECKGABEWERT:
-    Keiner
 
-BEISPIELE:
-    
-    AddCmd("pflueck&beere","pfluecke_cmd","Was moechtest Du pfluecken?");
+ARGUMENTE
+=========
 
-    int pfluecke_cmd(string str){
-        write("Du pflueckst eine Beere, isst sie und fuehlst Dich gleich "
-             +"viel besser.\n");
-        this_player()->heal_self(30);
-        return 1;
-    }
+   points: Die dem Lebewesen zukommende Heilung.
 
-    Der Spieler bekommt hier pro Beere die er pflueckt und isst je 30 LP/KP
-    zu seinen momentanen.
 
-BEMERKUNGEN: 
-    heal_self wird gerne fuer Heilstellen in Gebieten genommen, in denen ein
-    Spieler diese Heilung auch wirklich braucht. Dennoch ist der Einsatz un-
-    bedingt mit der Heilungsbalance abzusprechen und darauf zu achten, dass
-    pro reset() nur eine bestimmte Anzahl an Heilungen ausgegeben werden.
+BESCHREIBUNG
+============
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
+   Dem Lebewesen werden points Lebens- und Konzentrationspunkte
+   gutgeschrieben und auf die aktuellen addiert. Es werden aber nicht
+   die maximalen Werte ueberschritten.
 
-SIEHE AUCH:
-    Verwandt:   restore_spell_points, restore_hit_points, buffer_hp
-		buffer_sp, check_and_update_timed_key
-    Gegenparts: do_damage, reduce_hit_points, reduce_spell_points
-    Props:      P_HP, P_SP
-    Konzept:    heilung
 
-----------------------------------------------------------------------------
+RUECKGABEWERT
+=============
+
+   Keiner
+
+
+BEISPIELE
+=========
+
+   AddCmd("pflueck&beere","pfluecke_cmd","Was moechtest Du pfluecken?");
+
+   int pfluecke_cmd(string str){
+       write("Du pflueckst eine Beere, isst sie und fuehlst Dich gleich "
+            +"viel besser.\n");
+       this_player()->heal_self(30);
+       return 1;
+   }
+
+   Der Spieler bekommt hier pro Beere die er pflueckt und isst je 30 LP/KP
+   zu seinen momentanen.
+
+BEMERKUNGEN:
+   heal_self wird gerne fuer Heilstellen in Gebieten genommen, in
+   denen ein Spieler diese Heilung auch wirklich braucht. Dennoch ist
+   der Einsatz un- bedingt mit der Heilungsbalance abzusprechen und
+   darauf zu achten, dass pro reset() nur eine bestimmte Anzahl an
+   Heilungen ausgegeben werden.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der
+   eigens dafuer eingerichteten Funktion check_and_update_timed_key
+   realisiert werden.
+
+
+SIEHE AUCH
+==========
+
+   Verwandt:   restore_spell_points, restore_hit_points, buffer_hp
+               buffer_sp, check_and_update_timed_key
+   Gegenparts: do_damage, reduce_hit_points, reduce_spell_points
+   Props:      P_HP, P_SP
+   Konzept:    heilung
+
 Last modified: 27.05.2007 by Ennox
diff --git a/doc/lfun/heart_beat b/doc/lfun/heart_beat
index 6a314bd..475a781 100644
--- a/doc/lfun/heart_beat
+++ b/doc/lfun/heart_beat
@@ -1,42 +1,57 @@
+
 heart_beat()
+************
 
-FUNKTION:
-     protected void heart_beat();
 
-DEFINIERT IN:
-     /std/living/life.c
-     /std/living/combat.c
-     und anderen...
-     kann auch in beliebigen Objekten selbst definiert werden.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Diese Funktion wird alle zwei Sekunden vom GameDriver aufgerufen. Sie
-     regelt in der MG-MudLib das Heilen von Spielern und Monstern, den
-     Ablauf von Kampfrunden, die Verdauung etc.
+   protected void heart_beat();
 
-     Da heart_beat() ziemlich viele Ressourcen des GameDrivers verbraet,
-     sollte man Objekte mit heart_beat() nur so selten wie moeglich
-     benutzen! Und selbst dann sollte der heart_beat() nicht die ganze Zeit
-     ueber laufen, sondern sich so bald wie moeglich abschalten.
 
-     Das Ein- und Ausschalten des heart_beat()s erfolgt mit
-     set_heart_beat().
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     1. Teuer, teuer, teuer!
-     2. Soll euer Viech pro "echtem" Heartbeat mehrere Kampfrunden haben,
-        benutzt dafuer SA_SPEED und ruft auf gar keinen Fall mehrfach 
-        ::heart_beat() auf. Also _NICHT_
-        void heart_beat() {
-            ::heart_beat();
-            ::heart_beat(); }
-        sondern:
-        SetProp(P_SKILL_ATTRIBUTE_OFFSETS, ([SA_SPEED: 200]) );
+   /std/living/life.c
+   /std/living/combat.c
+   und anderen...
+   kann auch in beliebigen Objekten selbst definiert werden.
 
-SIEHE AUCH:
-     Efuns:     set_heart_beat(), absolute_hb_count(), set_next_reset()
-     Fehler:    make_immortal(L)
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Diese Funktion wird alle zwei Sekunden vom GameDriver aufgerufen. Sie
+   regelt in der MG-MudLib das Heilen von Spielern und Monstern, den
+   Ablauf von Kampfrunden, die Verdauung etc.
+
+   Da heart_beat() ziemlich viele Ressourcen des GameDrivers verbraet,
+   sollte man Objekte mit heart_beat() nur so selten wie moeglich
+   benutzen! Und selbst dann sollte der heart_beat() nicht die ganze Zeit
+   ueber laufen, sondern sich so bald wie moeglich abschalten.
+
+   Das Ein- und Ausschalten des heart_beat()s erfolgt mit
+   set_heart_beat().
+
+
+BEMERKUNGEN
+===========
+
+   1. Teuer, teuer, teuer!
+   2. Soll euer Viech pro "echtem" Heartbeat mehrere Kampfrunden haben,
+      benutzt dafuer SA_SPEED und ruft auf gar keinen Fall mehrfach
+      ::heart_beat() auf. Also _NICHT_
+      void heart_beat() {
+          ::heart_beat();
+          ::heart_beat(); }
+      sondern:
+      SetProp(P_SKILL_ATTRIBUTE_OFFSETS, ([SA_SPEED: 200]) );
+
+
+SIEHE AUCH
+==========
+
+   Efuns:     set_heart_beat(), absolute_hb_count(), set_next_reset()
+   Fehler:    make_immortal(L)
+
 22.3.2008, Zesstra
-
diff --git a/doc/lfun/id b/doc/lfun/id
index 7cf5aed..4921395 100644
--- a/doc/lfun/id
+++ b/doc/lfun/id
@@ -1,76 +1,99 @@
+
 id()
+****
 
-FUNKTION:
-     varargs int id(string str, int lvl);
 
-DEFINIERT IN:
-     /std/thing/description.c
-     /std/player/base.c
+FUNKTION
+========
 
-ARGUMENTE:
-     string str
-          String, auf den getestet werden soll.
-     int lvl
-          In /std/player/base.c benutzt. Wenn der Spieler unsichtbar ist
-          und lvl kleiner ist als sein Level, wird 0 zurueckgegeben.
+   varargs int id(string str, int lvl);
 
-BESCHREIBUNG:
-     Es wird geprueft, ob sich das Objekt mit str ansprechen laesst. Dazu
-     wird str mit dem Inhalt der Property P_IDS verglichen. Falls
-     P_ADJECTIVES gesetzt ist, werden auch alle Adjektivkombinationen mit
-     den Bezeichnern geprueft.
 
-     Besondere Bedeutung hat diese Funktion bei Mengenobjekten: Anhand von
-     str wird vermerkt, welche Menge des Objektes angesprochen wird. Es
-     werden dabei mehrere Faelle unterschieden:
-     o str ist einer der mit AddId() angegebener Bezeichner. In diesem
-       Fall ist die angesprochene Menge die Gesamtmenge.
-     o str ist einer der mit AddSingularId() angegebenen Bezeichner. Die
-       angesprochene Menge ist in diesem Fall 1.
-     o str ist einer der mit AddPluralId() angegebenen Bezeichner. Die
-       angesprochene Menge ist in diesem Fall . die Gesamtmenge.
-     o Hat str die Form "<n> <id>", wobei <n>=1 und <id> eine SingularId
-       oder 1 < <n> <= der Gesamtmenge und <id> eine PluralId, so ist die
-       angesprochene Menge = <n>.
-     Wie gesagt, gilt dies einzig und allein bei Mengenobjekten!
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     1, wenn sich das Objekt von str angesprochen fuehlt, ansonsten 0.
+   /std/thing/description.c
+   /std/player/base.c
 
-BEISPIELE:
-     Angenommen, ein Objekt habe folgende Bezeichner:
 
-     AddId( "murmel" );
-     AddAdjective( "runde" );
+ARGUMENTE
+=========
 
-     Dann liefern die angegebenen id()-Aufrufe folgende Ergebnisse:
+   string str
+        String, auf den getestet werden soll.
+   int lvl
+        In /std/player/base.c benutzt. Wenn der Spieler unsichtbar ist
+        und lvl kleiner ist als sein Level, wird 0 zurueckgegeben.
 
-     id( "murmel" );         => 1
-     id( "runde murmel" );   => 1
-     id( "kleine murmel" );  => 0
-     id( "runder ball" );    => 0
-     id( "runde murmel 2" ); => 1, wenn dies die zweite Murmel in der
-                                   gleichen Umgebung ist, ansonsten 0
 
-     Bei einem Haufen von 100 Muenzen haette man zB.:
+BESCHREIBUNG
+============
 
-     AddId( "geld" );
-     AddSingularId( "muenze" );
-     AddPluralId( "muenzen" );
+   Es wird geprueft, ob sich das Objekt mit str ansprechen laesst. Dazu
+   wird str mit dem Inhalt der Property P_IDS verglichen. Falls
+   P_ADJECTIVES gesetzt ist, werden auch alle Adjektivkombinationen mit
+   den Bezeichnern geprueft.
 
-     Nach fuehlen sich nach den folgenden id()-Aufrufen folgende Anzahlen
-     angesprochen:
+   Besondere Bedeutung hat diese Funktion bei Mengenobjekten: Anhand von
+   str wird vermerkt, welche Menge des Objektes angesprochen wird. Es
+   werden dabei mehrere Faelle unterschieden:
+   o str ist einer der mit AddId() angegebener Bezeichner. In diesem
+     Fall ist die angesprochene Menge die Gesamtmenge.
+   o str ist einer der mit AddSingularId() angegebenen Bezeichner. Die
+     angesprochene Menge ist in diesem Fall 1.
+   o str ist einer der mit AddPluralId() angegebenen Bezeichner. Die
+     angesprochene Menge ist in diesem Fall . die Gesamtmenge.
+   o Hat str die Form "<n> <id>", wobei <n>=1 und <id> eine SingularId
+     oder 1 < <n> <= der Gesamtmenge und <id> eine PluralId, so ist die
+     angesprochene Menge = <n>.
+   Wie gesagt, gilt dies einzig und allein bei Mengenobjekten!
 
-     id( "geld" );       => 100 Muenzen
-     id( "muenze" );     => 1 Muenze
-     id( "muenzen" );    => 100 Muenzen
-     id( "1 muenze" );   => 1 Muenze
-     id( "42 muenzen" ); => 42 Muenzen
 
-     id() liefert in all diesen Faellen 1 zurueck.
+RUeCKGABEWERT
+=============
 
-SIEHE AUCH:
-     AddId(), AddAdjective(), AddSingularId(), AddPluralId(), present(),
-     match_ids(), /std/thing/description.c, /std/unit.c
+   1, wenn sich das Objekt von str angesprochen fuehlt, ansonsten 0.
 
-6. Sep 2012 Gloinson
\ No newline at end of file
+
+BEISPIELE
+=========
+
+   Angenommen, ein Objekt habe folgende Bezeichner:
+
+   AddId( "murmel" );
+   AddAdjective( "runde" );
+
+   Dann liefern die angegebenen id()-Aufrufe folgende Ergebnisse:
+
+   id( "murmel" );         => 1
+   id( "runde murmel" );   => 1
+   id( "kleine murmel" );  => 0
+   id( "runder ball" );    => 0
+   id( "runde murmel 2" ); => 1, wenn dies die zweite Murmel in der
+                                 gleichen Umgebung ist, ansonsten 0
+
+   Bei einem Haufen von 100 Muenzen haette man zB.:
+
+   AddId( "geld" );
+   AddSingularId( "muenze" );
+   AddPluralId( "muenzen" );
+
+   Nach fuehlen sich nach den folgenden id()-Aufrufen folgende Anzahlen
+   angesprochen:
+
+   id( "geld" );       => 100 Muenzen
+   id( "muenze" );     => 1 Muenze
+   id( "muenzen" );    => 100 Muenzen
+   id( "1 muenze" );   => 1 Muenze
+   id( "42 muenzen" ); => 42 Muenzen
+
+   id() liefert in all diesen Faellen 1 zurueck.
+
+
+SIEHE AUCH
+==========
+
+   AddId(), AddAdjective(), AddSingularId(), AddPluralId(), present(),
+   match_ids(), /std/thing/description.c, /std/unit.c
+
+6. Sep 2012 Gloinson
diff --git a/doc/lfun/init b/doc/lfun/init
index f9d0cad..481eec2 100644
--- a/doc/lfun/init
+++ b/doc/lfun/init
@@ -1,65 +1,91 @@
+
 init()
+******
 
-FUNKTION:
-	void init();
 
-DEFINIERT IN:
-	/std/room/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-	keine
+   void init();
 
-BESCHREIBUNG:
-	init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
-	Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
-	in die Naehe von Lebewesen gelangt. init() wird dabei in allen
-	Objekten aufgerufen, bei denen es notwendig ist.
 
-	Der Hauptzweck dieser Funktion besteht darin, den Objekten
-	untereinander ihre jeweiligen Befehle zugaenglich zu machen.
-	Waehrend dies in anderen MudLibs durch eine Reihe von
-	add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies in
-	der MG-MudLib bei Objekten, die /std/thing/commands.c erben
-	 (das sind zB. alle Standardobjekte) quasi automatisch
-	 (dort werden die Befehle dann per AddCmd() im create() angemeldet,
-	  man spart sich die Implementierung von init() und dem Mud somit
-	  Speicher). Der andere Weg ist aber natuerlich immer noch moeglich.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-	keiner
+   /std/room/description.c
 
-BEMERKUNGEN:
-	Der Ablauf der init()-Kette ist wie folgt:
-	o Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
-	  Lebewesen, so wird in D init() aufgerufen, wobei this_player() auf
-	  X gesetzt ist.
-	o Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
-	  + Ist C ein Lebewesen, dann wird init() in X aufgerufen, wobei
-	    this_player() auf C gesetzt ist.
-	  + Ist X ein Lebewesen, dann wird init() in C aufgerufen, wobei
-	  this_player() auf X gesetzt ist.
-	o Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
-	  aufgerufen, wobei this_player() auf D gesetzt ist.
 
-BEISPIELE:
-	D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
-	N1 und N2 befinden.
-	Betritt ein Spieler X diesen Raum, so werden folgende init()s
-	aufgerufen:
+ARGUMENTE
+=========
 
-	  D->init();  // this_player() == X
-	  X->init();  // this_player() == L1
-	  L1->init(); // this_player() == X
-	  N1->init(); // this_player() == X
-	  N2->init(); // this_player() == X
+   keine
 
-	Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
-	wie folgt aus:
 
-	  X->init();    // this_player() == L1
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-	exit(), AddCmd(), add_action(),
-  NotifyInsert()
-----------------------------------------------------------------------------
+   init() wird immer dann aufgerufen, wenn ein lebendes Objekt in die
+   Naehe anderer Objekte bewegt wird oder ein nicht lebendiges Objekt
+   in die Naehe von Lebewesen gelangt. init() wird dabei in allen
+   Objekten aufgerufen, bei denen es notwendig ist.
+
+   Der Hauptzweck dieser Funktion besteht darin, den Objekten
+   untereinander ihre jeweiligen Befehle zugaenglich zu machen.
+   Waehrend dies in anderen MudLibs durch eine Reihe von
+   add_action()-Aufrufen im Rumpf von init() geschah, geschieht dies in
+   der MG-MudLib bei Objekten, die /std/thing/commands.c erben
+    (das sind zB. alle Standardobjekte) quasi automatisch
+    (dort werden die Befehle dann per AddCmd() im create() angemeldet,
+     man spart sich die Implementierung von init() und dem Mud somit
+     Speicher). Der andere Weg ist aber natuerlich immer noch moeglich.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Der Ablauf der init()-Kette ist wie folgt:
+   o Ist das Objekt X, welches ins Zielobjekt D bewegt wurde, ein
+     Lebewesen, so wird in D init() aufgerufen, wobei this_player() auf
+     X gesetzt ist.
+   o Dann wird fuer jedes Objekt C in D folgendes ausgefuehrt:
+     + Ist C ein Lebewesen, dann wird init() in X aufgerufen, wobei
+       this_player() auf C gesetzt ist.
+     + Ist X ein Lebewesen, dann wird init() in C aufgerufen, wobei
+     this_player() auf X gesetzt ist.
+   o Schliesslich wird in dem Fall, dass D lebendig ist, in X init()
+     aufgerufen, wobei this_player() auf D gesetzt ist.
+
+
+BEISPIELE
+=========
+
+   D sei ein Raum, in dem sich das Lebewesen L1 sowie die Gegenstaende
+   N1 und N2 befinden.
+   Betritt ein Spieler X diesen Raum, so werden folgende init()s
+   aufgerufen:
+
+     D->init();  // this_player() == X
+     X->init();  // this_player() == L1
+     L1->init(); // this_player() == X
+     N1->init(); // this_player() == X
+     N2->init(); // this_player() == X
+
+   Gelangt dagegen ein nichtlebendiges Objekt nach D, so sieht das Ganze
+   wie folgt aus:
+
+     X->init();    // this_player() == L1
+
+
+SIEHE AUCH
+==========
+
+         exit(), AddCmd(), add_action(),
+   NotifyInsert()
+
 Last modified: 04.08.2007, Zesstra
diff --git a/doc/lfun/insert_sensitive_inv b/doc/lfun/insert_sensitive_inv
index 5b54df4..513632a 100644
--- a/doc/lfun/insert_sensitive_inv
+++ b/doc/lfun/insert_sensitive_inv
@@ -1,21 +1,36 @@
-insert_sensitive_inv
-FUNKTION:
-     void insert_sensitive_inv(object ob, string key,
-			       int threshold, mixed *opt)
 
-DEFINIERT IN:
-     /std/container/inventory.c
+insert_sensitive_inv()
+**********************
 
-BESCHREIBUNG:
-     Diese Funktion sucht, ob beim Hinzufuegen eines sensitiven Objekts
-     schon ein Objekt da ist, dass dieses ausloest.
 
-SIEHE AUCH:
-     P_SENSITIVE
-     InsertSensitiveObject, RemoveSensitiveObject
-     insert_sensitive_inv_trigger
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
-     P_SENSITIVE_INVENTORY_TRIGGER
-     CheckSensitiveAttack
+FUNKTION
+========
+
+   void insert_sensitive_inv(object ob, string key,
+                             int threshold, mixed *opt)
+
+
+DEFINIERT IN
+============
+
+   /std/container/inventory.c
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion sucht, ob beim Hinzufuegen eines sensitiven Objekts
+   schon ein Objekt da ist, dass dieses ausloest.
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   InsertSensitiveObject, RemoveSensitiveObject
+   insert_sensitive_inv_trigger
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
+   P_SENSITIVE_INVENTORY_TRIGGER
+   CheckSensitiveAttack
 
 28.Jan.2001, Gloinson@MG
diff --git a/doc/lfun/insert_sensitive_inv_trigger b/doc/lfun/insert_sensitive_inv_trigger
index 766f0f5..edb78f8 100644
--- a/doc/lfun/insert_sensitive_inv_trigger
+++ b/doc/lfun/insert_sensitive_inv_trigger
@@ -1,21 +1,36 @@
-insert_sensitive_inv_trigger
-FUNKTION:
-     void insert_sensitive_inv_trigger(object ob, string key,
-				       int threshold, mixed *opt)
 
-DEFINIERT IN:
-     /std/container/inventory.c
+insert_sensitive_inv_trigger()
+******************************
 
-BESCHREIBUNG:
-     Diese Funktion sucht, ob ein sensitives Objekt im Inventory ist,
-     das durch dieses (soeben eingefuegte) Objekt ausgeloest wird.
 
-SIEHE AUCH:
-     P_SENSITIVE
-     InsertSensitiveObject, RemoveSensitiveObject
-     insert_sensitive_inv
-     P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
-     P_SENSITIVE_INVENTORY_TRIGGER
-     CheckSensitiveAttack
+FUNKTION
+========
+
+   void insert_sensitive_inv_trigger(object ob, string key,
+                                     int threshold, mixed *opt)
+
+
+DEFINIERT IN
+============
+
+   /std/container/inventory.c
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion sucht, ob ein sensitives Objekt im Inventory ist,
+   das durch dieses (soeben eingefuegte) Objekt ausgeloest wird.
+
+
+SIEHE AUCH
+==========
+
+   P_SENSITIVE
+   InsertSensitiveObject, RemoveSensitiveObject
+   insert_sensitive_inv
+   P_SENSITIVE_ATTACK, P_SENSITIVE_INVENTORY,
+   P_SENSITIVE_INVENTORY_TRIGGER
+   CheckSensitiveAttack
 
 28.Jan.2001, Gloinson@MG
diff --git a/doc/lfun/int_long b/doc/lfun/int_long
index 7513e87..931e132 100644
--- a/doc/lfun/int_long
+++ b/doc/lfun/int_long
@@ -1,64 +1,91 @@
+
 int_long()
-FUNKTION:
-     varargs string int_long(mixed viewer, mixed viewpoint, int flags)
+**********
 
-DEFINIERT IN:
-     /std/room/description.c
 
-ARGUMENTE:
-     mixed viewer	- der Betrachter des Raumes
-     mixed viewpoint	- 0/Objekt/Array der/die Ausgangspunkt(e) des
-			  Betrachtens (und damit nicht sichtbar!)
-     int flags		- Modifikatoren fuer die Anzeige
-			  (siehe "man make_invlist", wird mit 3 verUNDet!)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird die Beschreibung des Rauminneren erstellt. Dabei wird die
-     Langbeschreibung des Raumes, die enthaltenen Objekte (exklusive
-     aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
-     wenn vom Viewer eingeschaltet dargestellt.
-     Falls der Raum innerhalb eines anderen Raumes liegt und selbst
-     transparent ist, wie zusaetzlich die Kurzbeschreibung des Aussen-
-     raumes angezeigt.
+   varargs string int_long(mixed viewer, mixed viewpoint, int flags)
 
-     Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
-     Beschreibung der Dateiname des Raumes vorangestellt.
 
-RUeCKGABEWERT:
-     Die Langbeschreibung des Raumes von innen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
-     es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
-     betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+   /std/room/description.c
 
-BEISPIELE:
-     // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
-     // Betreten (vielleicht ist es zu neblig)
-     // dazu werden einfach alle Interactives zu den viewpoints addiert
-     string int_long(object viewer, mixed viewpoints, int flags) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_long(&viewer,
-			viewpoints+
-			filter(all_inventory(this_object()),
-				     #'interactive),
-			&flags);
-     }
 
-     string int_short(object viewer, mixed viewpoints) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_short(&viewer,
-			 viewpoints+
-			 filter(all_inventory(this_object()),
-				      #'interactive));
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Aehnliches:	int_short()
-     Properties:	P_INT_LONG, P_SHORT
-			P_HIDE_EXITS, P_SHOW_EXITS
-			P_TRANSPARENT
-     Kommandokette:	make_invlist(), short()
-     Sonstiges:		P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
+   mixed viewer       - der Betrachter des Raumes
+   mixed viewpoint    - 0/Objekt/Array der/die Ausgangspunkt(e) des
+                        Betrachtens (und damit nicht sichtbar!)
+   int flags          - Modifikatoren fuer die Anzeige
+                        (siehe "man make_invlist", wird mit 3 verUNDet!)
+
+
+BESCHREIBUNG
+============
+
+   Es wird die Beschreibung des Rauminneren erstellt. Dabei wird die
+   Langbeschreibung des Raumes, die enthaltenen Objekte (exklusive
+   aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
+   wenn vom Viewer eingeschaltet dargestellt.
+   Falls der Raum innerhalb eines anderen Raumes liegt und selbst
+   transparent ist, wie zusaetzlich die Kurzbeschreibung des Aussen-
+   raumes angezeigt.
+
+   Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
+   Beschreibung der Dateiname des Raumes vorangestellt.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Langbeschreibung des Raumes von innen.
+
+
+BEMERKUNGEN
+===========
+
+   Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
+   es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
+   betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+
+
+BEISPIELE
+=========
+
+   // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
+   // Betreten (vielleicht ist es zu neblig)
+   // dazu werden einfach alle Interactives zu den viewpoints addiert
+   string int_long(object viewer, mixed viewpoints, int flags) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_long(&viewer,
+                      viewpoints+
+                      filter(all_inventory(this_object()),
+                                   #'interactive),
+                      &flags);
+   }
+
+   string int_short(object viewer, mixed viewpoints) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_short(&viewer,
+                       viewpoints+
+                       filter(all_inventory(this_object()),
+                                    #'interactive));
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        int_short()
+   Properties:        P_INT_LONG, P_SHORT
+                      P_HIDE_EXITS, P_SHOW_EXITS
+                      P_TRANSPARENT
+   Kommandokette:     make_invlist(), short()
+   Sonstiges:         P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
 
 11. Mai 2004 Gloinson
diff --git a/doc/lfun/int_short b/doc/lfun/int_short
index e4a8d3a..aabd547 100644
--- a/doc/lfun/int_short
+++ b/doc/lfun/int_short
@@ -1,58 +1,85 @@
+
 int_short()
-FUNKTION:
-     string int_short(mixed viewer, mixed viewpoint);
+***********
 
-DEFINIERT IN:
-     /std/room/description.c
 
-ARGUMENTE:
-     mixed viewer	- der Betrachter des Raumes
-     mixed viewpoint	- 0/Objekt/Array der/die Ausgangspunkt(e) des
-			  Betrachtens (und damit nicht sichtbar!)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird eine kurze  Beschreibung des Rauminneren erstellt. Dabei wird
-     die Kurzbeschreibung des Raumes, die enthaltenen Objekte (exklusive
-     aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
-     wenn vom Viewer eingeschaltet dargestellt.
+   string int_short(mixed viewer, mixed viewpoint);
 
-     Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
-     Beschreibung der Dateiname des Raumes vorangestellt.
 
-RUeCKGABEWERT:
-     Die Kurzbeschreibung des Raumes von innen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
-     es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
-     betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+   /std/room/description.c
 
-BEISPIELE:
-     // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
-     // Betreten (vielleicht ist es zu neblig)
-     // dazu werden einfach alle Interactives zu den viewpoints addiert
-     string int_long(object viewer, mixed viewpoints, int flags) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_long(&viewer,
-			viewpoints+
-			filter(all_inventory(this_object()),
-				     #'interactive),
-			&flags);
-     }
 
-     string int_short(object viewer, mixed viewpoints) {
-      if(!pointerp(viewpoints)) viewpoints=({viewpoints});
-      return ::int_short(&viewer,
-			 viewpoints+
-			 filter(all_inventory(this_object()),
-				      #'interactive));
-     }
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     Aehnliches:	int_long()
-     Properties:	P_INT_SHORT, P_SHORT
-			P_HIDE_EXITS, P_SHOW_EXITS
-     Kommandokette:	make_invlist(), short()
-     Sonstiges:		P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
+   mixed viewer       - der Betrachter des Raumes
+   mixed viewpoint    - 0/Objekt/Array der/die Ausgangspunkt(e) des
+                        Betrachtens (und damit nicht sichtbar!)
+
+
+BESCHREIBUNG
+============
+
+   Es wird eine kurze  Beschreibung des Rauminneren erstellt. Dabei wird
+   die Kurzbeschreibung des Raumes, die enthaltenen Objekte (exklusive
+   aller viewpoints (normalerweise nur der Betrachter)) und Ausgaenge,
+   wenn vom Viewer eingeschaltet dargestellt.
+
+   Ist Viewer ein Magier mit eingeschaltetem Magiermodus, so wird der
+   Beschreibung der Dateiname des Raumes vorangestellt.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Kurzbeschreibung des Raumes von innen.
+
+
+BEMERKUNGEN
+===========
+
+   Die Trennung von viewer und viewpoint hat durchaus ihren Sinn. So ist
+   es zum Beispiel moeglich, einen Raum "mit den Augen eines Anderen" zu
+   betrachten. Dabei saehe man sich selbst, wenn man im Raum waere.
+
+
+BEISPIELE
+=========
+
+   // in diesem Raum sieht man keine Mitspieler im "schau" oder beim
+   // Betreten (vielleicht ist es zu neblig)
+   // dazu werden einfach alle Interactives zu den viewpoints addiert
+   string int_long(object viewer, mixed viewpoints, int flags) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_long(&viewer,
+                      viewpoints+
+                      filter(all_inventory(this_object()),
+                                   #'interactive),
+                      &flags);
+   }
+
+   string int_short(object viewer, mixed viewpoints) {
+    if(!pointerp(viewpoints)) viewpoints=({viewpoints});
+    return ::int_short(&viewer,
+                       viewpoints+
+                       filter(all_inventory(this_object()),
+                                    #'interactive));
+   }
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        int_long()
+   Properties:        P_INT_SHORT, P_SHORT
+                      P_HIDE_EXITS, P_SHOW_EXITS
+   Kommandokette:     make_invlist(), short()
+   Sonstiges:         P_REFERENCE_OBJECT, P_WANTS_TO_LEARN
 
 11. Mai 2004 Gloinson
diff --git a/doc/lfun/is_class_member b/doc/lfun/is_class_member
index 7019447..1018e71 100644
--- a/doc/lfun/is_class_member
+++ b/doc/lfun/is_class_member
@@ -1,155 +1,174 @@
+
 is_class_member()
-FUNKTION:
-     int is_class_member(string|string* class);
+*****************
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     string/string* class	- String oder Stringarray der Klasse(n)
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Es wird getestet, ob das Objekt in eine der in class angegebenen
-     Klassen faellt. In diesen Test werden die folgenden Eigenschaften des
-     Objektes einbezogen:
+   int is_class_member(string|string* class);
 
-       1. Die Rasse des Objektes (bei Lebewesen),
-       2. die IDs des Objektes und
-       3. die explizit angegebenen Klassen des Objektes.
-       4. einigen impliziten Klassen, die sich aus den Klassen in 3 ergeben.
 
-     Die moeglichen Klassen sind in /sys/class.h definiert. Momentan stehen
-     folgende Klassen zur Verfuegung:
+DEFINIERT IN
+============
 
-     CL_AMMUNITION
-          Das Objekt eignet sich als Munition.
-     CL_ANIMAL
-          Das Objekt ist ein Tier.
-     CL_ARACHNID
-          Das Objekt in ein Spinnenwesen.
-     CL_BIGBANG
-          Dieses Objekt kann mehreren Lebewesen auf einmal Schaden zufuegen.
-     CL_BIRD
-          Ein Vogel.
-     CL_CRAWLING
-          Dieses Wesen bewegt sich kriechend.
-     CL_CURSE
-          Das Objekt ist ein Fluch (zB. ein Sprachfluch).
-     CL_DEMON
-          Bei dem Objekt handelt es sich um einen Daemon.
-     CL_DISEASE
-          Eine Krankheit.
-     CL_DRAGON
-          Ein Drache.
-     CL_DWARF
-          Fuer unsere kleinen Gaeste...
-     CL_ELF
-          Elfen aller Art.
-     CL_ELEMENTAL
-          Ein Elementar irgendeiner Art. Material setzen waere angebracht.
-     CL_EXPLOSIVE
-          Bei dem Objekt handelt es sich um einen Sprengstoff.
-     CL_FELINE
-          Felinen und andere katzenartigen Lebewesen.
-     CL_FISH
-          Fische - keine Meeressaeuger!
-     CL_FLYING
-          Dieses Wesen bewegt sich fliegend.
-     CL_FROG
-          Froesche - auch gefroschte Spieler.
-     CL_GHOST
-          Geister und geisterhafte Wesen.
-     CL_GHOUL
-          Ein Ghoul. Er faellt automatisch in die Klasse CL_UNDEAD.
-     CL_GIANT
-          Ein riesiges Lebewesen.
-     CL_GNOME
-          Ein Gnom.
-     CL_GOBLIN
-          Ein Goblin.
-     CL_HOBBIT
-          Ein Hobbit.
-     CL_HOBGOBLIN
-          Ein Hobgoblin. Er faellt automatisch auch in die Klasse CL_GOBLIN.
-     CL_HUMAN
-          Ein Mensch.
-     CL_INORGANIC
-          Anorganische Lebewesen wie Metallmonster
-     CL_INSECT
-          Insekten (Nicht mit Spinnen verwechseln)
-     CL_LIVING
-          Lebewesen im allgemeinen.
-     CL_MAMMAL
-          Saeugetiere.
-     CL_MAMMAL_LAND
-          Landsaeugetiere
-     CL_MAMMAL_WATER
-          Meeressaeuger.
-     CL_ORC
-          Ein Ork.
-     CL_PLANT
-          Pflanzen und pflanzenartige Monster.
-     CL_POISON
-          Das Objekt ist selbst ein Gift
-     CL_POISONOUS
-          Das Objekt kann einen Spieler/NPC vergiften.
-     CL_REPTILE
-          Reptilien.
-     CL_SHADOW
-          Schattenwesen.
-     CL_SKELETON
-          Ein Skelett. Es faellt automatisch in die Klasse CL_UNDEAD.
-     CL_SLIME
-          Fuer Einzeller und aehnliches Schleimgetier
-     CL_SNAKE
-          Schlangen.
-     CL_SWIMMING
-          Dieses Wesen bewegt sich schwimmend.
-     CL_TROLL
-          Ein Troll.
-     CL_UNDEAD
-          Ein untotes Lebewesen.
-     CL_WALKING
-          Dieses Wesen bewegt sich gehend.
-     CL_VAMPIRE
-          Ein Vampir. Er faellt automatisch in die Klasse CL_UNDEAD.
-     CL_ZOMBIE
-          Ein Zombie. Er faellt automatisch in die Klasse CL_UNDEAD.
+   /std/thing/description.c
 
-     Implizite Klassen:
-     Bei einigen Klassen wird im AddClass() automatisch eine oder mehrere
-     weiterer Klassen hinzugefuegt und im RemoveClass() die entsprechenden
-     impliziten Klassen auch automatisch entfernt.
-     Wuenscht man diese impliziten Klassen nicht, muss man nach dem AddClass()
-     diese mittels eines entsprechenden RemoveClass() entfernen.
-     Die impliziten Klassen einer Klasse lassen sich mit Hilfe der Funktion
-     QueryImplicitClasses() in CLASSDB herausfinden:
-       CLASSDB->QueryImplicitClasses(...)
-     Momentan sind dies:
-     CL_ZOMBIE:       CL_UNDEAD
-     CL_SKELETON:     CL_UNDEAD
-     CL_GHOUL:        CL_UNDEAD
-     CL_VAMPIRE:      CL_UNDEAD
-     CL_HOBGOBLIN:    CL_GOBLIN
-     CL_MAMMAL_LAND:  CL_MAMMAL, CL_ANIMAL
-     CL_MAMMAL_WATER: CL_MAMMAL, CL_ANIMAL
-     CL_SNAKE:        CL_REPTILE
-     CL_ARACHNID:     CL_ANIMAL
-     CL_BIRD:         CL_ANIMAL
-     CL_FISH:         CL_ANIMAL
-     CL_FROG:         CL_ANIMAL
-     CL_INSECT:       CL_ANIMAL
-     CL_MAMMAL:       CL_ANIMAL
-     CL_REPTILE:      CL_ANIMAL
-     CL_SNAKE:        CL_ANIMAL
 
-RUeCKGABEWERT:
-     1, wenn das Objekt in eine der angegebenen Klassen faellt, ansonsten 0.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     AddClass(), RemoveClass(), /std/thing/description.c
-     P_CLASS
+   string/string* class       - String oder Stringarray der Klasse(n)
 
-----------------------------------------------------------------------------
+
+BESCHREIBUNG
+============
+
+   Es wird getestet, ob das Objekt in eine der in class angegebenen
+   Klassen faellt. In diesen Test werden die folgenden Eigenschaften des
+   Objektes einbezogen:
+
+     1. Die Rasse des Objektes (bei Lebewesen),
+     2. die IDs des Objektes und
+     3. die explizit angegebenen Klassen des Objektes.
+     4. einigen impliziten Klassen, die sich aus den Klassen in 3 ergeben.
+
+   Die moeglichen Klassen sind in /sys/class.h definiert. Momentan stehen
+   folgende Klassen zur Verfuegung:
+
+   CL_AMMUNITION
+        Das Objekt eignet sich als Munition.
+   CL_ANIMAL
+        Das Objekt ist ein Tier.
+   CL_ARACHNID
+        Das Objekt in ein Spinnenwesen.
+   CL_BIGBANG
+        Dieses Objekt kann mehreren Lebewesen auf einmal Schaden zufuegen.
+   CL_BIRD
+        Ein Vogel.
+   CL_CRAWLING
+        Dieses Wesen bewegt sich kriechend.
+   CL_CURSE
+        Das Objekt ist ein Fluch (zB. ein Sprachfluch).
+   CL_DEMON
+        Bei dem Objekt handelt es sich um einen Daemon.
+   CL_DISEASE
+        Eine Krankheit.
+   CL_DRAGON
+        Ein Drache.
+   CL_DWARF
+        Fuer unsere kleinen Gaeste...
+   CL_ELF
+        Elfen aller Art.
+   CL_ELEMENTAL
+        Ein Elementar irgendeiner Art. Material setzen waere angebracht.
+   CL_EXPLOSIVE
+        Bei dem Objekt handelt es sich um einen Sprengstoff.
+   CL_FELINE
+        Felinen und andere katzenartigen Lebewesen.
+   CL_FISH
+        Fische - keine Meeressaeuger!
+   CL_FLYING
+        Dieses Wesen bewegt sich fliegend.
+   CL_FROG
+        Froesche - auch gefroschte Spieler.
+   CL_GHOST
+        Geister und geisterhafte Wesen.
+   CL_GHOUL
+        Ein Ghoul. Er faellt automatisch in die Klasse CL_UNDEAD.
+   CL_GIANT
+        Ein riesiges Lebewesen.
+   CL_GNOME
+        Ein Gnom.
+   CL_GOBLIN
+        Ein Goblin.
+   CL_HOBBIT
+        Ein Hobbit.
+   CL_HOBGOBLIN
+        Ein Hobgoblin. Er faellt automatisch auch in die Klasse CL_GOBLIN.
+   CL_HUMAN
+        Ein Mensch.
+   CL_INORGANIC
+        Anorganische Lebewesen wie Metallmonster
+   CL_INSECT
+        Insekten (Nicht mit Spinnen verwechseln)
+   CL_LIVING
+        Lebewesen im allgemeinen.
+   CL_MAMMAL
+        Saeugetiere.
+   CL_MAMMAL_LAND
+        Landsaeugetiere
+   CL_MAMMAL_WATER
+        Meeressaeuger.
+   CL_ORC
+        Ein Ork.
+   CL_PLANT
+        Pflanzen und pflanzenartige Monster.
+   CL_POISON
+        Das Objekt ist selbst ein Gift
+   CL_POISONOUS
+        Das Objekt kann einen Spieler/NPC vergiften.
+   CL_REPTILE
+        Reptilien.
+   CL_SHADOW
+        Schattenwesen.
+   CL_SKELETON
+        Ein Skelett. Es faellt automatisch in die Klasse CL_UNDEAD.
+   CL_SLIME
+        Fuer Einzeller und aehnliches Schleimgetier
+   CL_SNAKE
+        Schlangen.
+   CL_SWIMMING
+        Dieses Wesen bewegt sich schwimmend.
+   CL_TROLL
+        Ein Troll.
+   CL_UNDEAD
+        Ein untotes Lebewesen.
+   CL_WALKING
+        Dieses Wesen bewegt sich gehend.
+   CL_VAMPIRE
+        Ein Vampir. Er faellt automatisch in die Klasse CL_UNDEAD.
+   CL_ZOMBIE
+        Ein Zombie. Er faellt automatisch in die Klasse CL_UNDEAD.
+
+   Implizite Klassen:
+   Bei einigen Klassen wird im AddClass() automatisch eine oder mehrere
+   weiterer Klassen hinzugefuegt und im RemoveClass() die entsprechenden
+   impliziten Klassen auch automatisch entfernt.
+   Wuenscht man diese impliziten Klassen nicht, muss man nach dem AddClass()
+   diese mittels eines entsprechenden RemoveClass() entfernen.
+   Die impliziten Klassen einer Klasse lassen sich mit Hilfe der Funktion
+   QueryImplicitClasses() in CLASSDB herausfinden:
+     CLASSDB->QueryImplicitClasses(...)
+   Momentan sind dies:
+   CL_ZOMBIE:       CL_UNDEAD
+   CL_SKELETON:     CL_UNDEAD
+   CL_GHOUL:        CL_UNDEAD
+   CL_VAMPIRE:      CL_UNDEAD
+   CL_HOBGOBLIN:    CL_GOBLIN
+   CL_MAMMAL_LAND:  CL_MAMMAL, CL_ANIMAL
+   CL_MAMMAL_WATER: CL_MAMMAL, CL_ANIMAL
+   CL_SNAKE:        CL_REPTILE
+   CL_ARACHNID:     CL_ANIMAL
+   CL_BIRD:         CL_ANIMAL
+   CL_FISH:         CL_ANIMAL
+   CL_FROG:         CL_ANIMAL
+   CL_INSECT:       CL_ANIMAL
+   CL_MAMMAL:       CL_ANIMAL
+   CL_REPTILE:      CL_ANIMAL
+   CL_SNAKE:        CL_ANIMAL
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Objekt in eine der angegebenen Klassen faellt, ansonsten 0.
+
+
+SIEHE AUCH
+==========
+
+   AddClass(), RemoveClass(), /std/thing/description.c
+   P_CLASS
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/lfun b/doc/lfun/lfun
index eadd45a..6e35081 100644
--- a/doc/lfun/lfun
+++ b/doc/lfun/lfun
@@ -1,12 +1,25 @@
-NAME:
-	lfun()
 
-DESCRIPTION:
-	This directory contains descriptions for the lfuns used by
-	Amylaar's version of the LPC parser.
+lfun()
+******
 
-	These are functions that are applied by the parser to the LPC
-	objects on various occasions.
 
-SEE ALSO:
-	efun(E), master(M), concepts(C), lpc(LPC), driver(D)
+NAME
+====
+
+   lfun()
+
+
+DESCRIPTION
+===========
+
+   This directory contains descriptions for the lfuns used by
+   Amylaar's version of the LPC parser.
+
+   These are functions that are applied by the parser to the LPC
+   objects on various occasions.
+
+
+SEE ALSO
+========
+
+   efun(E), master(M), concepts(C), lpc(LPC), driver(D)
diff --git a/doc/lfun/locate_objects b/doc/lfun/locate_objects
index 1d56e9a..5854980 100644
--- a/doc/lfun/locate_objects
+++ b/doc/lfun/locate_objects
@@ -1,54 +1,79 @@
+
 locate_objects()
+****************
 
-FUNKTION:
-     object *locate_objects(string desc, int info);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     desc
-          Die Umschreibung des gesuchten Objektes.
+   object *locate_objects(string desc, int info);
 
-     info
-          Ist ungleich 0, wenn diese Funktion von /std/living/put_and_get.c
-          aus aufgerufen wurde.
 
-BESCHREIBUNG:
-     Diese Funktion erweitert die Funktionalitaet von present_objects()
-     insofern, als dass es moeglich ist, auch noch Behaelter innerhalb des
-     Behaelters zu durchsuchen. Das genaue Verhalten haengt von desc ab:
+DEFINIERT IN
+============
 
-     Ist desc von der Form "<id>", so wird das Ergebnis von
-     present_objects(desc) zurueckgegeben.
+   /std/container/restrictions.c
 
-     Ist desc von der Form "<gesucht> in <id>", so wird in allen Objekten,
-     die von present_objects("<id>") erfasst wurden,
-     locate_objects("<desc>") aufgerufen. Zurueckgegeben werden alle auf
-     diese Weise gefundenen Objekte.
 
-RUeCKGABEWERT:
-     Array von Objekten, die auf die oben geschilderte Art und Weise
-     ermittelt wurden. Konnte kein Objekt ermittelt werden, wird ein leeres
-     Array zurueckgegeben.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     Theoretisch sollte es moeglich sein, ueber desc rekursiv mehrere
-     Behaelterebenen erfassen zu koennen (etwa mit "schwert in beutel in
-     beutel in wargon"). In der aktuellen Implementierung klappt das jedoch
-     nicht; nach dem ersten "in" ist Schluss!
+   desc
+        Die Umschreibung des gesuchten Objektes.
 
-BEISPIELE:
-     Was steckt alles dem Beutel, den der Spieler bei sich traegt?
+   info
+        Ist ungleich 0, wenn diese Funktion von /std/living/put_and_get.c
+        aus aufgerufen wurde.
 
-     object *obs;
-     obs = this_player()->locate_objects("alles in beutel");
 
-     Traegt der Spieler keinen Beutel bei sich oder ist dieser leer, so wird
-     ein leeres Array zurueckgegeben.
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-     present_objects(), /std/container/restrictions.c
+   Diese Funktion erweitert die Funktionalitaet von present_objects()
+   insofern, als dass es moeglich ist, auch noch Behaelter innerhalb des
+   Behaelters zu durchsuchen. Das genaue Verhalten haengt von desc ab:
 
-----------------------------------------------------------------------------
+   Ist desc von der Form "<id>", so wird das Ergebnis von
+   present_objects(desc) zurueckgegeben.
+
+   Ist desc von der Form "<gesucht> in <id>", so wird in allen Objekten,
+   die von present_objects("<id>") erfasst wurden,
+   locate_objects("<desc>") aufgerufen. Zurueckgegeben werden alle auf
+   diese Weise gefundenen Objekte.
+
+
+RUeCKGABEWERT
+=============
+
+   Array von Objekten, die auf die oben geschilderte Art und Weise
+   ermittelt wurden. Konnte kein Objekt ermittelt werden, wird ein leeres
+   Array zurueckgegeben.
+
+
+BEMERKUNGEN
+===========
+
+   Theoretisch sollte es moeglich sein, ueber desc rekursiv mehrere
+   Behaelterebenen erfassen zu koennen (etwa mit "schwert in beutel in
+   beutel in wargon"). In der aktuellen Implementierung klappt das jedoch
+   nicht; nach dem ersten "in" ist Schluss!
+
+
+BEISPIELE
+=========
+
+   Was steckt alles dem Beutel, den der Spieler bei sich traegt?
+
+   object *obs;
+   obs = this_player()->locate_objects("alles in beutel");
+
+   Traegt der Spieler keinen Beutel bei sich oder ist dieser leer, so wird
+   ein leeres Array zurueckgegeben.
+
+
+SIEHE AUCH
+==========
+
+   present_objects(), /std/container/restrictions.c
+
 Last modified: Wed May 8 10:20:36 1996 by Wargon
diff --git a/doc/lfun/logon b/doc/lfun/logon
index 700f1e0..4fb7117 100644
--- a/doc/lfun/logon
+++ b/doc/lfun/logon
@@ -1,15 +1,26 @@
+
 logon()
+*******
 
-SYNOPSIS:
-	int logon(void)
 
-DESCRIPTION:
-	When the parser accepts a new connection, it first calls
-	connect() in the master object and then applies logon() to
-	the object that is returned by the master. That will usually be
-	a special login object, that is expected to clone and get going
-	a user shell or player object.
-	Should return 0 on failure, everything else means success.
+SYNOPSIS
+========
 
-SEE ALSO:
-	connect(M)
+   int logon(void)
+
+
+DESCRIPTION
+===========
+
+   When the parser accepts a new connection, it first calls
+   connect() in the master object and then applies logon() to
+   the object that is returned by the master. That will usually be
+   a special login object, that is expected to clone and get going
+   a user shell or player object.
+   Should return 0 on failure, everything else means success.
+
+
+SEE ALSO
+========
+
+   connect(M)
diff --git a/doc/lfun/long b/doc/lfun/long
index 34ac4f9..a186cf9 100644
--- a/doc/lfun/long
+++ b/doc/lfun/long
@@ -1,31 +1,55 @@
+
 long()
-FUNKTION:
-     varargs string long(int mode);
+******
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     int mode		- Modifikatoren fuer die Anzeige, falls this_object()
-			  ein Container ist
-			  (siehe "man make_invlist")
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Inhalt der Property P_LONG wird ausgewertet und zurueckgegeben.
-     Falls das Objekt ein Container und transparent (offen) ist, wird
-     zudem make_invlist() auf den Inhalt zurueckgegeben.
+   varargs string long(int mode);
 
-RUeCKGABEWERT:
-     Die Langbeschreibung des Objektes.
 
-BEMERKUNGEN:
-     Durch Ueberladen von long() lassen sich noch weitere Eigenschaften des
-     Objektes anzeigen. Behaelter koennen zum Beispiel noch ihren Inhalt
-     anzeigen, Lebewesen ihren Gesundheitszustand, o.ae.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Aehnliches:	short()
-     Properties:	P_LONG, P_INVIS, P_TRANSPARENT
-     Sonstiges:		make_invlist()
+   /std/thing/description.c
 
-11. Mai 2004 Gloinson
\ No newline at end of file
+
+ARGUMENTE
+=========
+
+   int mode           - Modifikatoren fuer die Anzeige, falls this_object()
+                        ein Container ist
+                        (siehe "man make_invlist")
+
+
+BESCHREIBUNG
+============
+
+   Der Inhalt der Property P_LONG wird ausgewertet und zurueckgegeben.
+   Falls das Objekt ein Container und transparent (offen) ist, wird
+   zudem make_invlist() auf den Inhalt zurueckgegeben.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Langbeschreibung des Objektes.
+
+
+BEMERKUNGEN
+===========
+
+   Durch Ueberladen von long() lassen sich noch weitere Eigenschaften des
+   Objektes anzeigen. Behaelter koennen zum Beispiel noch ihren Inhalt
+   anzeigen, Lebewesen ihren Gesundheitszustand, o.ae.
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        short()
+   Properties:        P_LONG, P_INVIS, P_TRANSPARENT
+   Sonstiges:         make_invlist()
+
+11. Mai 2004 Gloinson
diff --git a/doc/lfun/make_immortal b/doc/lfun/make_immortal
index a567229..9d0f402 100644
--- a/doc/lfun/make_immortal
+++ b/doc/lfun/make_immortal
@@ -1,27 +1,44 @@
-make_immortal()

-

-FUNKTION:

-     void make_immortal();

-

-DEFINIERT IN:

-     /std/npc/combat.c

-

-BESCHREIBUNG:

-     Macht den NPC fuer 5 Minuten unangreifbar und heilt ihn.

-

-     Wird bei Fehlern im Herzschlag des NPCs gerufen um Bugnutzung

-     zu unterbinden.

-

-     Ausschrift:

-     "... versteckt sich hinter einem Fehler im Raum-Zeit-Gefuege und

-      entgeht so voruebergehend allen Angriffen."

-

-BEMERKUNGEN:

-     Nicht missbrauchen.

-

-SIEHE AUCH:

-     Methoden:       heart_beat(), static _check_immortality()

-     Master:         heart_beat_error()

-     Properties:     "time_to_mortality"

-

-1.Juni 2007 Gloinson

+
+make_immortal()
+***************
+
+
+FUNKTION
+========
+
+   void make_immortal();
+
+
+DEFINIERT IN
+============
+
+   /std/npc/combat.c
+
+
+BESCHREIBUNG
+============
+
+   Macht den NPC fuer 5 Minuten unangreifbar und heilt ihn.
+
+   Wird bei Fehlern im Herzschlag des NPCs gerufen um Bugnutzung
+   zu unterbinden.
+
+   Ausschrift:
+   "... versteckt sich hinter einem Fehler im Raum-Zeit-Gefuege und
+    entgeht so voruebergehend allen Angriffen."
+
+
+BEMERKUNGEN
+===========
+
+   Nicht missbrauchen.
+
+
+SIEHE AUCH
+==========
+
+   Methoden:       heart_beat(), static _check_immortality()
+   Master:         heart_beat_error()
+   Properties:     "time_to_mortality"
+
+1.Juni 2007 Gloinson
diff --git a/doc/lfun/make_invlist b/doc/lfun/make_invlist
index effbcca..379b47c 100644
--- a/doc/lfun/make_invlist
+++ b/doc/lfun/make_invlist
@@ -1,38 +1,59 @@
+
 make_invlist()
-FUNKTION:
-     varargs mixed make_invlist(object viewer, mixed inv, int flags)
+**************
 
-DEFINIERT IN:
-     /std/container/description.c
 
-ARGUMENTE:
-     object viewer	- das Objekt, welches sich den Inhalt ansieht (in
-			  der Regel this_player())
-     mixed inv		- ein Array von Objekten, die in die Liste
-			  aufgenommen werden sollen
-     int flags		- Folgende Werte koennen verODERt werden:
-			  1: das Inv nicht als String, sondern als ein
-			     Array zurueckgeben
-			  2: gleiche Objekte nicht zusammengefassen
-			  4: unterdrueckt die Ausgabe des Dateinamens hinter
-			     jedem trotz eingeschaltetem Magiermodus
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Die Kurzbeschreibungen der Objekte in inv werden zu einer Liste
-     zusammengefasst (eine Zeile pro Objekt). Unsichtbare Objekte tauchen in
-     dieser Liste nicht auf.
+   varargs mixed make_invlist(object viewer, mixed inv, int flags)
 
-     Ist viewer ein Magier mit eingeschaltetem Magiermodus, so wird hinter
-     die Kurzbeschreibungen noch der Dateiname des jeweiligen Objektes in
-     eckigen Klammern angegeben. Unsichtbare Objekte erscheinen in diesem
-     Fall als Filenamen.
 
-RUeCKGABEWERT:
-     Ein String oder ein Array, die das inv beschreiben.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Kommandokette:	short()
-     Properties:	P_SHORT, P_INVIS, P_WANTS_TO_LEARN
-     Sonstiges:		P_REFERENCE_OBJECT
+   /std/container/description.c
+
+
+ARGUMENTE
+=========
+
+   object viewer      - das Objekt, welches sich den Inhalt ansieht (in
+                        der Regel this_player())
+   mixed inv          - ein Array von Objekten, die in die Liste
+                        aufgenommen werden sollen
+   int flags          - Folgende Werte koennen verODERt werden:
+                        1: das Inv nicht als String, sondern als ein
+                           Array zurueckgeben
+                        2: gleiche Objekte nicht zusammengefassen
+                        4: unterdrueckt die Ausgabe des Dateinamens hinter
+                           jedem trotz eingeschaltetem Magiermodus
+
+
+BESCHREIBUNG
+============
+
+   Die Kurzbeschreibungen der Objekte in inv werden zu einer Liste
+   zusammengefasst (eine Zeile pro Objekt). Unsichtbare Objekte tauchen in
+   dieser Liste nicht auf.
+
+   Ist viewer ein Magier mit eingeschaltetem Magiermodus, so wird hinter
+   die Kurzbeschreibungen noch der Dateiname des jeweiligen Objektes in
+   eckigen Klammern angegeben. Unsichtbare Objekte erscheinen in diesem
+   Fall als Filenamen.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein String oder ein Array, die das inv beschreiben.
+
+
+SIEHE AUCH
+==========
+
+   Kommandokette:     short()
+   Properties:        P_SHORT, P_INVIS, P_WANTS_TO_LEARN
+   Sonstiges:         P_REFERENCE_OBJECT
 
 Last modified: Tue Oct 15 10:10:00 2002 by Rikus
diff --git a/doc/lfun/master/AddWizardForUID b/doc/lfun/master/AddWizardForUID
index c58463b..249e27c 100644
--- a/doc/lfun/master/AddWizardForUID
+++ b/doc/lfun/master/AddWizardForUID
@@ -1,47 +1,74 @@
+
 AddWizardForUID()
+*****************
 
-FUNKTION:
-    string* AddWizardForUID(string uid, string wizard);
 
-DEFINIERT IN:
-    /secure/master/userinfo.c
+FUNKTION
+========
 
-ARGUMENTE:
-    uid
-      Die UID, fuer die man einen (weiteren) verantwortlichen Magier
-      explizit eintragen moechte.
-    wizard
-      Der Magier, den man eintragen moechte.
+   string* AddWizardForUID(string uid, string wizard);
 
-BESCHREIBUNG:
-    Die Funktion traegt einen Magier 'wizard' explizit als verantwortlichen
-    Magier fuer die UID 'uid' ein. Hierbei kann 'uid' sogar der Name eines
-		anderen Magiers sein, dessen UIDs 'wizard' sozusagen "adoptiert".
 
-		Berechtigt zum Eintragen von Magiern fuer bestimmte UIDs sind alle Magier,
-    die (implizit oder explizit) verantwortlich fuer die jeweilige UID sind.
-    Z.B. kann Zesstra ohne weiteres jemand weiteren als verantwortlich fuer
-    d.inseln.zesstra eintragen.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID,
-    fuer die dier Magier jetzt explizit eingetragen ist.
+   /secure/master/userinfo.c
 
-BEMERKUNGEN:
-    Es ist nicht noetig, z.B. Zesstra als verantwortlich fuer d.inseln.zesstra
-    einzutragen, da sie ohnehin schon implizit dafuer zustaendig ist. Auch
-    fuer RMs bzw. GMs muss ihre Region bzw. Gilde nicht explizit eingetragen 
-    werden.
 
-BEISPIELE:
-    master()->AddWizardForUID("p.waterluh","zook");
-		
-		string *uids = master()->AddWizardForUID("jof","zook");
-    printf("Zook ist nun explizit zustaendig fuer: %s\n",CountUp(uids));
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    QueryWizardsForUID(), QueryUIDsForWizard,
-		RemoveWizardFromUID()
+   uid
+     Die UID, fuer die man einen (weiteren) verantwortlichen Magier
+     explizit eintragen moechte.
+   wizard
+     Der Magier, den man eintragen moechte.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion traegt einen Magier 'wizard' explizit als verantwortlichen
+   Magier fuer die UID 'uid' ein. Hierbei kann 'uid' sogar der Name eines
+               anderen Magiers sein, dessen UIDs 'wizard' sozusagen "adoptiert".
+
+               Berechtigt zum Eintragen von Magiern fuer bestimmte UIDs sind alle Magier,
+   die (implizit oder explizit) verantwortlich fuer die jeweilige UID sind.
+   Z.B. kann Zesstra ohne weiteres jemand weiteren als verantwortlich fuer
+   d.inseln.zesstra eintragen.
+
+
+RUeCKGABEWERT
+=============
+
+   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID,
+   fuer die dier Magier jetzt explizit eingetragen ist.
+
+
+BEMERKUNGEN
+===========
+
+   Es ist nicht noetig, z.B. Zesstra als verantwortlich fuer d.inseln.zesstra
+   einzutragen, da sie ohnehin schon implizit dafuer zustaendig ist. Auch
+   fuer RMs bzw. GMs muss ihre Region bzw. Gilde nicht explizit eingetragen
+   werden.
+
+
+BEISPIELE
+=========
+
+   master()->AddWizardForUID("p.waterluh","zook");
+
+
+
+               string *uids = master()->AddWizardForUID("jof","zook");
+   printf("Zook ist nun explizit zustaendig fuer: %s\n",CountUp(uids));
+
+
+SIEHE AUCH
+==========
+
+   QueryWizardsForUID(), QueryUIDsForWizard,
+               RemoveWizardFromUID()
 
 20.02.2007, Zesstra
-
diff --git a/doc/lfun/master/QueryUIDAlias b/doc/lfun/master/QueryUIDAlias
index 0ea844c..8f58509 100644
--- a/doc/lfun/master/QueryUIDAlias
+++ b/doc/lfun/master/QueryUIDAlias
@@ -1,43 +1,65 @@
+
 QueryUIDAlias()
+***************
 
-FUNKTION:
-    varargs string* QueryUIDsForWizard(string uidalias, int recursive);
 
-DEFINIERT IN:
-    /secure/master/userinfo.c
+FUNKTION
+========
 
-ARGUMENTE:
-    uidalias
-      UID, die expandiert werden soll.
-    recursive (optional)
-      Gibt an, ob QueryUIDAlias() (indirekt) rekursiv aufgerufen wurde.
-      Sollte normalerweise nicht per Hand gesetzt werden.
+   varargs string* QueryUIDsForWizard(string uidalias, int recursive);
 
-BESCHREIBUNG:
-    Die Funktion ermittelt aus einer "Alias-UID" die UID, fuer die sie steht.
-    Hierbei werden folgende UID-Aliase beruecksichtigt:
-    "region":    d.region.* + region + d.region
-    "gilde":     GUILD.gilde, GUILD.gildenspellbook, p.gilde
-    "p":         p.* (ohne p.service)
-    "p.service": p.service.*
-    "magierid":  QueryUIDsForWizard()
 
-    Das Ergebnis dieser Funktion wird laengere Zeit gecachet (bis zu 24h).
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID.
-    Sollte uidaliase keines der o.g. sein, wird ein ({uidalias}) geliefert.
+   /secure/master/userinfo.c
 
-BEISPIELE:
-    string *uids = master()->QueryUIDAlias("schattenwelt");
-    // uids enthaelt nun:
-    // ({"d.anfaenger","anfaenger","d.anfaenger.ark","d.anfaenger.ennox",
-    //   "d.anfaenger.humni","d.anfaenger.kiria","d.anfaenger.konzepte",
-    //   "d.anfaenger.miril"})
 
-SIEHE AUCH:
-    QueryWizardsForUID(), 
-		AddWizardForUID(), RemoveWizardFromUID()
+ARGUMENTE
+=========
+
+   uidalias
+     UID, die expandiert werden soll.
+   recursive (optional)
+     Gibt an, ob QueryUIDAlias() (indirekt) rekursiv aufgerufen wurde.
+     Sollte normalerweise nicht per Hand gesetzt werden.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion ermittelt aus einer "Alias-UID" die UID, fuer die sie steht.
+   Hierbei werden folgende UID-Aliase beruecksichtigt:
+   "region":    d.region.* + region + d.region
+   "gilde":     GUILD.gilde, GUILD.gildenspellbook, p.gilde
+   "p":         p.* (ohne p.service)
+   "p.service": p.service.*
+   "magierid":  QueryUIDsForWizard()
+
+   Das Ergebnis dieser Funktion wird laengere Zeit gecachet (bis zu 24h).
+
+
+RUeCKGABEWERT
+=============
+
+   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID.
+   Sollte uidaliase keines der o.g. sein, wird ein ({uidalias}) geliefert.
+
+
+BEISPIELE
+=========
+
+   string *uids = master()->QueryUIDAlias("schattenwelt");
+   // uids enthaelt nun:
+   // ({"d.anfaenger","anfaenger","d.anfaenger.ark","d.anfaenger.ennox",
+   //   "d.anfaenger.humni","d.anfaenger.kiria","d.anfaenger.konzepte",
+   //   "d.anfaenger.miril"})
+
+
+SIEHE AUCH
+==========
+
+   QueryWizardsForUID(),
+               AddWizardForUID(), RemoveWizardFromUID()
 
 16.12.2007, Zesstra
-
diff --git a/doc/lfun/master/QueryUIDsForWizard b/doc/lfun/master/QueryUIDsForWizard
index a4028c1..e0d5816 100644
--- a/doc/lfun/master/QueryUIDsForWizard
+++ b/doc/lfun/master/QueryUIDsForWizard
@@ -1,42 +1,64 @@
+
 QueryUIDsForWizard()
+********************
 
-FUNKTION:
-    varargs string* QueryUIDsForWizard(string wizname, int recursive);
 
-DEFINIERT IN:
-    /secure/master/userinfo.c
+FUNKTION
+========
 
-ARGUMENTE:
-    wizname
-      Der Magier, fuer den man die UIDs ermitteln will, fuer die er
-      zustaendig ist.
-    recursive (optional)
-      Gibt an, ob QueryUIDsForWizard() (indirekt) rekursiv aufgerufen wurde.
-      Sollte normalerweise nicht per Hand gesetzt werden.
+   varargs string* QueryUIDsForWizard(string wizname, int recursive);
 
-BESCHREIBUNG:
-    Die Funktion ermittelt die UIDs, fuer die dieser Magier zustaendig ist.
-    Dabei wird impliziert beruecksichtigt, wenn der Magier RM einer Region
-    oder Gildenmagier einer Gilde ist, ebenso wie Verzeichnisse in den
-    Regionen oder in /p/service.
-    Ausserdem wird nachgeschaut, fuer welche UIDs dieser Magier explizit
-    eingetragen worden ist.
-    Wenn z.B. Magier A auch fuer alle UIDs von Magier B zustaendig sein
-    sollte, liefert die Funktion auch die UIDs von B zurueck.
 
-RUeCKGABEWERT:
-    Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID.
-    Sollte fuer einen Namen keine UID ermittelbar sein, ist das Arrays leer.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    string *uids = master()->QueryUIDsForWizard("ennox");
-    // uids enthaelt nun:
-    // ({"ennox","d.anfaenger.ennox","d.schattenwelt.ennox",
-    //   "p.service.ennox","GUILD.chaos","p.chaos"})
+   /secure/master/userinfo.c
 
-SIEHE AUCH:
-    QueryWizardsForUID(), 
-		AddWizardForUID(), RemoveWizardFromUID()
+
+ARGUMENTE
+=========
+
+   wizname
+     Der Magier, fuer den man die UIDs ermitteln will, fuer die er
+     zustaendig ist.
+   recursive (optional)
+     Gibt an, ob QueryUIDsForWizard() (indirekt) rekursiv aufgerufen wurde.
+     Sollte normalerweise nicht per Hand gesetzt werden.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion ermittelt die UIDs, fuer die dieser Magier zustaendig ist.
+   Dabei wird impliziert beruecksichtigt, wenn der Magier RM einer Region
+   oder Gildenmagier einer Gilde ist, ebenso wie Verzeichnisse in den
+   Regionen oder in /p/service.
+   Ausserdem wird nachgeschaut, fuer welche UIDs dieser Magier explizit
+   eingetragen worden ist.
+   Wenn z.B. Magier A auch fuer alle UIDs von Magier B zustaendig sein
+   sollte, liefert die Funktion auch die UIDs von B zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID.
+   Sollte fuer einen Namen keine UID ermittelbar sein, ist das Arrays leer.
+
+
+BEISPIELE
+=========
+
+   string *uids = master()->QueryUIDsForWizard("ennox");
+   // uids enthaelt nun:
+   // ({"ennox","d.anfaenger.ennox","d.schattenwelt.ennox",
+   //   "p.service.ennox","GUILD.chaos","p.chaos"})
+
+
+SIEHE AUCH
+==========
+
+   QueryWizardsForUID(),
+               AddWizardForUID(), RemoveWizardFromUID()
 
 16.12.2007, Zesstra
-
diff --git a/doc/lfun/master/QueryWizardsForUID b/doc/lfun/master/QueryWizardsForUID
index 93095b6..6ddbdc3 100644
--- a/doc/lfun/master/QueryWizardsForUID
+++ b/doc/lfun/master/QueryWizardsForUID
@@ -1,46 +1,71 @@
+
 QueryWizardsForUID()
+********************
 
-FUNKTION:
-    varargs string* QueryWizardsForUID(string uid, int recursive);
 
-DEFINIERT IN:
-    /secure/master/userinfo.c
+FUNKTION
+========
 
-ARGUMENTE:
-    uid
-      Die UID, fuer die man die Magier ermitteln will, die fuer sie
-      zustaendig sind.
-    recursive (optional)
-      gibt an, ob das QueryWizardsForUID() (indirekt) aus einem 
-      QueryWizardsForUID() heraus gerufen wurde. Sollte nicht manuell gesetzt
-      werden.
+   varargs string* QueryWizardsForUID(string uid, int recursive);
 
-BESCHREIBUNG:
-    Die Funktion ermittelt die Magier, die fuer diese UID zustaendig sind.
 
-RUeCKGABEWERT:
-    Zurueckgeliefert wird ein Array von Strings, jedes Element ist ein Magier.
-    Sollte fuer eine UID kein Magier ermittelbar sein, ist das Array leer.
-    Wenn z.B. fuer die UID der Magier "Atamur" gefunden wird, aber fuer alle 
-    UIDs von "Atamur" auch der Magier "Rumata" zustaendig sein sollte, wird 
-    "Rumata" ueber eine rekursive Suche gefunden.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    Wenn die UID den Magier nicht implizit enthaelt (z.B. GUILD.gilde, im 
-    Gegensatz zu d.region.magier), findet diese Funktion nur Magier, fuer die 
-    seit Laden des Master bereits einmal get_userinfo() oder 
-    QueryUIDsForWizard() im Master gerufen wurde, was z.B. Einloggen passiert.
-    Magier, die lang nicht einloggten, werden also manchmal nicht gefunden,
-    was in der Regel nicht schlimm sein sollte, da sie ja ohnehin den
-    entsprechenden Code gerade nicht warten...
+   /secure/master/userinfo.c
 
-BEISPIELE:
-    string *wiz = master()->QueryWizards("GUILD.klerus");
-    // wiz enthaelt nun: ({"morgoth","magdalena"})
 
-SIEHE AUCH:
-    QueryUIDsForWizard(), 
-		AddWizardForUID(), RemoveWizardFromUID()
+ARGUMENTE
+=========
+
+   uid
+     Die UID, fuer die man die Magier ermitteln will, die fuer sie
+     zustaendig sind.
+   recursive (optional)
+     gibt an, ob das QueryWizardsForUID() (indirekt) aus einem
+     QueryWizardsForUID() heraus gerufen wurde. Sollte nicht manuell gesetzt
+     werden.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion ermittelt die Magier, die fuer diese UID zustaendig sind.
+
+
+RUeCKGABEWERT
+=============
+
+   Zurueckgeliefert wird ein Array von Strings, jedes Element ist ein Magier.
+   Sollte fuer eine UID kein Magier ermittelbar sein, ist das Array leer.
+   Wenn z.B. fuer die UID der Magier "Atamur" gefunden wird, aber fuer alle
+   UIDs von "Atamur" auch der Magier "Rumata" zustaendig sein sollte, wird
+   "Rumata" ueber eine rekursive Suche gefunden.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn die UID den Magier nicht implizit enthaelt (z.B. GUILD.gilde, im
+   Gegensatz zu d.region.magier), findet diese Funktion nur Magier, fuer die
+   seit Laden des Master bereits einmal get_userinfo() oder
+   QueryUIDsForWizard() im Master gerufen wurde, was z.B. Einloggen passiert.
+   Magier, die lang nicht einloggten, werden also manchmal nicht gefunden,
+   was in der Regel nicht schlimm sein sollte, da sie ja ohnehin den
+   entsprechenden Code gerade nicht warten...
+
+
+BEISPIELE
+=========
+
+   string *wiz = master()->QueryWizards("GUILD.klerus");
+   // wiz enthaelt nun: ({"morgoth","magdalena"})
+
+
+SIEHE AUCH
+==========
+
+   QueryUIDsForWizard(),
+               AddWizardForUID(), RemoveWizardFromUID()
 
 16.12.2007, Zesstra
-
diff --git a/doc/lfun/master/RemoveWizardFromUID b/doc/lfun/master/RemoveWizardFromUID
index da97132..1fdeba5 100644
--- a/doc/lfun/master/RemoveWizardFromUID
+++ b/doc/lfun/master/RemoveWizardFromUID
@@ -1,38 +1,62 @@
+
 RemoveWizardFromUID()
+*********************
 
-FUNKTION:
-    string* RemoveWizardFromUID(string uid, string wizard);
 
-DEFINIERT IN:
-    /secure/master/userinfo.c
+FUNKTION
+========
 
-ARGUMENTE:
-    uid
-      Die UID, fuer die man einen zustaendigen Magier austragen will.
-    wizard
-      Der Magier, den man austragen moechte.
+   string* RemoveWizardFromUID(string uid, string wizard);
 
-BESCHREIBUNG:
-    Die Funktion loescht die UID 'uid' aus der Liste der UIDs, fuer die
-    'wizard' explizit zustaendig ist.
 
-    Berechtigt zum Austragen von Magiern fuer bestimmte UIDs sind alle Magier,
-    die (implizit oder explizit) verantwortlich fuer die jeweilige UID sind.
-    Man kann sich auch selber austragen. ;-)
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-    Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID,
-    fuer die dier Magier jetzt explizit eingetragen ist.
+   /secure/master/userinfo.c
 
-BEISPIELE:
-    master()->RemoveWizardFromUID("p.waterluh","zook");
-		
-    string *uids = master()->RemoveWizardFromUID("jof","zook");
-    printf("Zook ist nun explizit zustaendig fuer: %s\n",CountUp(uids));
 
-SIEHE AUCH:
-    QueryWizardsForUID(), QueryUIDsForWizard()
-		AddWizardForUID()
+ARGUMENTE
+=========
+
+   uid
+     Die UID, fuer die man einen zustaendigen Magier austragen will.
+   wizard
+     Der Magier, den man austragen moechte.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion loescht die UID 'uid' aus der Liste der UIDs, fuer die
+   'wizard' explizit zustaendig ist.
+
+   Berechtigt zum Austragen von Magiern fuer bestimmte UIDs sind alle Magier,
+   die (implizit oder explizit) verantwortlich fuer die jeweilige UID sind.
+   Man kann sich auch selber austragen. ;-)
+
+
+RUeCKGABEWERT
+=============
+
+   Zurueckgeliefert wird ein Array von Strings, jedes Element ist eine UID,
+   fuer die dier Magier jetzt explizit eingetragen ist.
+
+
+BEISPIELE
+=========
+
+   master()->RemoveWizardFromUID("p.waterluh","zook");
+
+
+
+   string *uids = master()->RemoveWizardFromUID("jof","zook");
+   printf("Zook ist nun explizit zustaendig fuer: %s\n",CountUp(uids));
+
+
+SIEHE AUCH
+==========
+
+   QueryWizardsForUID(), QueryUIDsForWizard()
+               AddWizardForUID()
 
 20.02.2007, Zesstra
-
diff --git a/doc/lfun/match_ids b/doc/lfun/match_ids
index d2c985b..48f368f 100644
--- a/doc/lfun/match_ids
+++ b/doc/lfun/match_ids
@@ -1,47 +1,69 @@
+
 match_ids()
+***********
 
-FUNKTION:
-     int match_ids(string *list);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     *list	String-Array mit zu testenden IDs
+   int match_ids(string *list);
 
-BESCHREIBUNG:
-     Die Liste der uebergebenen IDs wird mit den IDs des Objektes
-     UND-Verknuepft. Die Groesse des resultierenden Arrays wird
-     zurueckgegeben.
-     Diese Funktion erlaubt also das gleichzeitige Pruefen auf
-     mehrere IDs. Allerdings werden - im Gegensatz zu id() -
-     Adjektive und Ausdruecke der Art "<ID> <nummer>" nicht
-     beruecksichtigt.
-     Ebenso werden Spezialitaeten wie Unitobjekte und Objekte mit
-     ueberschriebenem id() nicht beruecksichtigt! Im Zweifelsfall ist daher
-     doch die Nutzung von id() zu empfehlen.
 
-RUeCKGABEWERT:
-     Anzahl der zutreffenden IDs.
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Angenommen, ein Objekt habe folgende Bezeichner:
+   /std/thing/description.c
 
-     AddId( ({"murmel","kugel","glasmurmel","glaskugel"}) );
-     AddAdjective( "rund" );
 
-     Dann liefern die angegebenen match_ids()-Aufrufe folgende Ergebnisse:
+ARGUMENTE
+=========
 
-     match_ids( ({"murmel","stein"}) );         => 1
-     match_ids( ({"murmel","kugel"}) );         => 2
-     match_ids( ({"runde murmel"}) );           => 0
-     match_ids( ({"murmel 2"}) );               => 0, auch wenn dies die 
-                                               zweite Murmel in der
-                                               gleichen Umgebung ist
+   *list      String-Array mit zu testenden IDs
 
-SIEHE AUCH:
-     AddId(), AddAdjective(), AddSingularId(), AddPluralId(), present(),
-     id(), /std/thing/description.c, /std/unit.c
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Die Liste der uebergebenen IDs wird mit den IDs des Objektes
+   UND-Verknuepft. Die Groesse des resultierenden Arrays wird
+   zurueckgegeben.
+   Diese Funktion erlaubt also das gleichzeitige Pruefen auf
+   mehrere IDs. Allerdings werden - im Gegensatz zu id() -
+   Adjektive und Ausdruecke der Art "<ID> <nummer>" nicht
+   beruecksichtigt.
+   Ebenso werden Spezialitaeten wie Unitobjekte und Objekte mit
+   ueberschriebenem id() nicht beruecksichtigt! Im Zweifelsfall ist daher
+   doch die Nutzung von id() zu empfehlen.
+
+
+RUeCKGABEWERT
+=============
+
+   Anzahl der zutreffenden IDs.
+
+
+BEISPIELE
+=========
+
+   Angenommen, ein Objekt habe folgende Bezeichner:
+
+   AddId( ({"murmel","kugel","glasmurmel","glaskugel"}) );
+   AddAdjective( "rund" );
+
+   Dann liefern die angegebenen match_ids()-Aufrufe folgende Ergebnisse:
+
+   match_ids( ({"murmel","stein"}) );         => 1
+   match_ids( ({"murmel","kugel"}) );         => 2
+   match_ids( ({"runde murmel"}) );           => 0
+   match_ids( ({"murmel 2"}) );               => 0, auch wenn dies die
+                                             zweite Murmel in der
+                                             gleichen Umgebung ist
+
+
+SIEHE AUCH
+==========
+
+   AddId(), AddAdjective(), AddSingularId(), AddPluralId(), present(),
+   id(), /std/thing/description.c, /std/unit.c
+
 Last modified: Sat Mar 15 21:40:00 2000 by Paracelsus
diff --git a/doc/lfun/move b/doc/lfun/move
index b323c34..bd9d924 100644
--- a/doc/lfun/move
+++ b/doc/lfun/move
@@ -1,212 +1,242 @@
+
+move()
+******
+
 move()
 
-FUNKTION: 
-     Fuer unbelebte Gegenstaende (/std/thing):
-       varargs int move(object|string dest, int method);
+FUNKTION:
+   Fuer unbelebte Gegenstaende (/std/thing):
+      varargs int move(object|string dest, int method);
 
-     Fuer Lebewesen (/std/living, /std/npc, usw.):
-       varargs int move(object|string dest, int method, string dir, 
-                        string textout, string textin);
+   Fuer Lebewesen (/std/living, /std/npc, usw.):
+      varargs int move(object|string dest, int method, string dir,
+         string textout, string textin);
 
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
 
-ARGUMENTE:
-     dest
-          Das Zielobjekt (entweder der Dateiname oder das Objekt selbst).
+DEFINIERT IN
+============
 
-     method
-          Die Art der Bewegung (eine der unten aufgefuehrten Arten; es
-          koennen auch mehrere zusammenge-ODER-t werden).
+   /std/thing/moving.c
+   /std/living/moving.c
 
-     dir
-          Die Richtung, in die ein Lebewesen geht. Normalerweise ist das die
-          eingeschlagene Laufrichtung (zB. "nach Norden").
 
-     textout
-          Verlaesst ein Lebewesen einen Raum, so wird diese Meldung in den
-          Raum geschickt. Ist bei dir ein String angegeben, so wird dieser
-          noch an textout angehaengt. Der Name des Lebewesens wird der
-          Meldung in jedem Fall vorangestellt.
+ARGUMENTE
+=========
 
-     textin
-          Dieser Text wird im Zielraum ausgegeben, wenn ein Lebewesen ihn
-          betritt. Bei normaler Fortbewegung ist das "kommt an". Dem Text
-          wird noch der Name des Spielers vorangestellt.
+   dest
+        Das Zielobjekt (entweder der Dateiname oder das Objekt selbst).
 
-BESCHREIBUNG:
-     Es wird versucht, das Objekt in das Zielobjekt dest zu bewegen.
-     Abhaengig vom momentanen Aufenthaltsort und dem Zielobjekt ist die
-     Bewegungsmethode method zu waehlen.
+   method
+        Die Art der Bewegung (eine der unten aufgefuehrten Arten; es
+        koennen auch mehrere zusammenge-ODER-t werden).
 
-     In <moving.h> sind folgende Konstanten fuer die Art der Bewegung
-     definiert:
-     M_NOCHECK
-          Es werden keine Abfragen durchgefuehrt, ob das Objekt ueberhaupt
-          in das Zielobjekt hineinpasst (was zB. aus Gewichtsgruenden der
-          Fall sein koennte).
+   dir
+        Die Richtung, in die ein Lebewesen geht. Normalerweise ist das die
+        eingeschlagene Laufrichtung (zB. "nach Norden").
 
-     M_GO
-          Ein Lebewesen bewegt sich gehend von einem Raum in den naechsten.
-          Bei normalem Gehen wird diese Methode benutzt; man sollte sie auch
-          benutzen, wenn man Spieler ueber einen SpecialExit in einen
-          benachbarten Raum bewegt.
+   textout
+        Verlaesst ein Lebewesen einen Raum, so wird diese Meldung in den
+        Raum geschickt. Ist bei dir ein String angegeben, so wird dieser
+        noch an textout angehaengt. Der Name des Lebewesens wird der
+        Meldung in jedem Fall vorangestellt.
 
-     M_TPORT
-          Ein Lebewesen wird von einem Raum in einen anderen teleportiert.
-          Im Gegensatz zu M_GO kann ein Raum verhindern, dass man ihn
-          mittels M_TPORT verlaesst oder betritt.
+   textin
+        Dieser Text wird im Zielraum ausgegeben, wenn ein Lebewesen ihn
+        betritt. Bei normaler Fortbewegung ist das "kommt an". Dem Text
+        wird noch der Name des Spielers vorangestellt.
 
-     M_NO_SHOW
-          Beim Bewegen von Lebewesen bekommen diese die Beschreibung des
-          Zielraumes nicht ausgegeben.
 
-     M_NO_ATTACK
-          Beim Bewegen von Lebewesen bekommen diese keinen
-          Begruessungsschlag, wenn ein Feind im Zielraum steht.
+BESCHREIBUNG
+============
 
-     M_SILENT
-          Es werden beim Bewegen keine Meldungen ausgegeben. Dieser
-          Parameter wirkt sich nur auf das Bewegen von Lebenwesen aus.
+   Es wird versucht, das Objekt in das Zielobjekt dest zu bewegen.
+   Abhaengig vom momentanen Aufenthaltsort und dem Zielobjekt ist die
+   Bewegungsmethode method zu waehlen.
 
-     M_GET
-          Das Objekt wird von einem unbelebten Objekt (zB. einem Raum, einer
-          Leiche, einem Beutel) in ein lebendes Objekt (Spieler oder NPC)
-          bewegt.
+   In <moving.h> sind folgende Konstanten fuer die Art der Bewegung
+   definiert:
+   M_NOCHECK
+        Es werden keine Abfragen durchgefuehrt, ob das Objekt ueberhaupt
+        in das Zielobjekt hineinpasst (was zB. aus Gewichtsgruenden der
+        Fall sein koennte).
 
-     M_PUT
-          Das Objekt wird von einem lebenden Objekt in ein unbelebtes Objekt
-          bewegt.
+   M_GO
+        Ein Lebewesen bewegt sich gehend von einem Raum in den naechsten.
+        Bei normalem Gehen wird diese Methode benutzt; man sollte sie auch
+        benutzen, wenn man Spieler ueber einen SpecialExit in einen
+        benachbarten Raum bewegt.
 
-     M_GIVE
-          Das Objekt wird von einem Lebewesen an ein anderes Lebewesen
-          weitergereicht.
+   M_TPORT
+        Ein Lebewesen wird von einem Raum in einen anderen teleportiert.
+        Im Gegensatz zu M_GO kann ein Raum verhindern, dass man ihn
+        mittels M_TPORT verlaesst oder betritt.
 
-     M_MOVE_ALL (Nur fuer Objekte, die /std/unit.c erben)
-          Es wird die gesamte Menge bewegt, nicht nur ein Teil.
+   M_NO_SHOW
+        Beim Bewegen von Lebewesen bekommen diese die Beschreibung des
+        Zielraumes nicht ausgegeben.
 
-     Soll das Objekt auf jeden Fall und ohne jede Abfrage bewegt werden, so
-     reicht es, als method M_NOCHECK zu uebergeben.
+   M_NO_ATTACK
+        Beim Bewegen von Lebewesen bekommen diese keinen
+        Begruessungsschlag, wenn ein Feind im Zielraum steht.
 
-     Waffen und Ruestungen werden, soweit sie gezueckt bzw. angezogen sind,
-     beim Bewegen auf jeden Fall weggesteckt bzw. ausgezogen. Ist in method
-     M_SILENT enthalten, so geschieht dies ohne Meldungen.
+   M_SILENT
+        Es werden beim Bewegen keine Meldungen ausgegeben. Dieser
+        Parameter wirkt sich nur auf das Bewegen von Lebenwesen aus.
 
-     Die erste Art des Funktionsaufrufs ist sowohl beim Bewegen von
-     Lebewesen als auch von unbelebten Objekten moeglich. Die zweite Art
-     laesst sich nur bei Lebewesen anwenden.
+   M_GET
+        Das Objekt wird von einem unbelebten Objekt (zB. einem Raum, einer
+        Leiche, einem Beutel) in ein lebendes Objekt (Spieler oder NPC)
+        bewegt.
 
-ANMERKUNG:
-     Diese Funktion sollte nicht (mehr) ueberschrieben werden. Stattdessen
-     greift bitte auf PreventMove() und NotifyMove() zurueck. RMs sind
-     aufgerufen, Objekt mit ueberschriebenen move() nur noch dann
-     anzuschliessen, wenn der Zweck sonst nicht erreicht werden kann. Solltet
-     ihr move() ueberschreiben: Seid euch sehr genau im klaren, was move()
-     genau macht. ;-)
-     
-     Wenn Livings bewegt werden, sorgt move() automatisch in Abhaengigkeit
-     von P_PARA dafuer, dass das Lebewesen in der korrekten (Parallel-)Welt
-     landet.
+   M_PUT
+        Das Objekt wird von einem lebenden Objekt in ein unbelebtes Objekt
+        bewegt.
 
-     Bei Gegenstaenden wird ebenfalls versucht, die richtige Zielwelt
-     auszuwaehlen (damit z.B. in der Parallelwelt geworfene Bumerangs auch nur
-     innerhalb der Parallelwelt fliegen). Um Rechenzeit zu sparen, wird das
-     allerdings nur versucht, wenn 'dest' ein Filename ist und kein Objekt.
+   M_GIVE
+        Das Objekt wird von einem Lebewesen an ein anderes Lebewesen
+        weitergereicht.
 
-     Grund: bei Zielobjekten handelt es sich meist um Bewegungen in das Inv
-     oder Env eines Spielers - und die sind uninteressant. Raumwechsel dagegen
-     erfolgen fast immer unter Angabe eines Filenamens anstatt eines Objektes.
+   M_MOVE_ALL (Nur fuer Objekte, die /std/unit.c erben)
+        Es wird die gesamte Menge bewegt, nicht nur ein Teil.
 
-RUeCKGABEWERT:
-     Alle Rueckgabewerte sind als symbolische Konstanten in <moving.h>
-     definiert. (MOVE_OK ist 1, alle anderen sind <0 und symbolisieren Fehler.
-     Traditionell erfolgt die Pruefung auf erfolgreiches Move mit == 1, in
-     Zukunft wird == MOVE_OK empfohlen.)
-     
-     MOVE_OK
-          Die Bewegung wurde erfolgreich abgeschlossen.
+   Soll das Objekt auf jeden Fall und ohne jede Abfrage bewegt werden, so
+   reicht es, als method M_NOCHECK zu uebergeben.
 
-     ME_PLAYER
-          Lebewesen lassen sich nicht ohne weiteres bewegen. Es muss
-          mindestens eine der Methoden M_NOCHECK, M_GO oder M_TPORT
-          angegeben werden.
+   Waffen und Ruestungen werden, soweit sie gezueckt bzw. angezogen sind,
+   beim Bewegen auf jeden Fall weggesteckt bzw. ausgezogen. Ist in method
+   M_SILENT enthalten, so geschieht dies ohne Meldungen.
 
-     ME_TOO_HEAVY
-          Das Zielobjekt kann dieses Objekt aus Gewichtsgruenden nicht mehr
-          aufnehmen.
+   Die erste Art des Funktionsaufrufs ist sowohl beim Bewegen von
+   Lebewesen als auch von unbelebten Objekten moeglich. Die zweite Art
+   laesst sich nur bei Lebewesen anwenden.
 
-     ME_CANT_TPORT_IN
-          Das Zielobjekt verbietet das Teleportieren in sich hinein (nur bei
-          M_TPORT ohne M_NOCHECK).
 
-     ME_CANT_TPORT_OUT
-          Der Raum, in dem sich das Lebewesen befindet, verbietet das
-          Teleportieren aus sich hinaus (nur bei M_TPORT ohne M_NOCHECK).
+ANMERKUNG
+=========
 
-     ME_CANT_BE_DROPPED
-          Das Objekt kann nicht fallen gelassen werden (zB. weil P_NODROP
-          gesetzt ist).
+   Diese Funktion sollte nicht (mehr) ueberschrieben werden. Stattdessen
+   greift bitte auf PreventMove() und NotifyMove() zurueck. RMs sind
+   aufgerufen, Objekt mit ueberschriebenen move() nur noch dann
+   anzuschliessen, wenn der Zweck sonst nicht erreicht werden kann. Solltet
+   ihr move() ueberschreiben: Seid euch sehr genau im klaren, was move()
+   genau macht. ;-)
 
-     ME_CANT_BE_TAKEN
-          Das Objekt kann nicht genommen werden (zB. weil P_NOGET gesetzt
-          ist).
 
-     ME_CANT_BE_INSERTED
-          Das Zielobjekt verhindert das Einfuegen aus bestimmten Gruenden.
 
-     ME_CANT_LEAVE_ENV
-          Der Container verhindert ein verlassen des Objektes
+   Wenn Livings bewegt werden, sorgt move() automatisch in Abhaengigkeit
+   von P_PARA dafuer, dass das Lebewesen in der korrekten (Parallel-)Welt
+   landet.
 
-     ME_TOO_HEAVY_FOR_ENV
-          Ein Objekt kann einen Behaelter nicht verlassen, da es dem 
-          Lebewesen sonst zu schwer wuerde.
+   Bei Gegenstaenden wird ebenfalls versucht, die richtige Zielwelt
+   auszuwaehlen (damit z.B. in der Parallelwelt geworfene Bumerangs auch nur
+   innerhalb der Parallelwelt fliegen). Um Rechenzeit zu sparen, wird das
+   allerdings nur versucht, wenn 'dest' ein Filename ist und kein Objekt.
 
-     TOO_MANY_OBJECTS
-          Das Zielobjekt kann soviele Objekte nicht mehr aufnehmen.
+   Grund: bei Zielobjekten handelt es sich meist um Bewegungen in das Inv
+   oder Env eines Spielers - und die sind uninteressant. Raumwechsel dagegen
+   erfolgen fast immer unter Angabe eines Filenamens anstatt eines Objektes.
 
-     ME_NOT_ALLOWED
-          Raeume mit gesetzter Property P_NO_PLAYERS koennen nur von
-          Testspielern und Magiern betreten werden. Bei Spielern oder
-          Gildentesties gibt es diese Fehlermeldung.
-     ME_WAS_DESTRUCTED
-          Das Objekt hat sich entweder im Verlaufe der Bewegung selbst
-          zerstoert oder wurde zerstoert, sodass move() nicht erfolgreich
-          beendet werden konnte. (Bsp: sensitive Objekte)
 
-     ME_DONT_WANT_TO_BE_MOVED
-          Das Objekt moechte nicht bewegt werden.
+RUeCKGABEWERT
+=============
 
-BEISPIELE:
-        o Ein Objekt "gibt sich" dem Spieler:
+   Alle Rueckgabewerte sind als symbolische Konstanten in <moving.h>
+   definiert. (MOVE_OK ist 1, alle anderen sind <0 und symbolisieren Fehler.
+   Traditionell erfolgt die Pruefung auf erfolgreiches Move mit == 1, in
+   Zukunft wird == MOVE_OK empfohlen.)
 
-          move(this_player(), M_GET);
 
-        o Ein Lebewesen wird in die Abenteurergilde teleportiert:
 
-          lv->move("/gilden/abenteurer", M_TPORT);
+   MOVE_OK
+        Die Bewegung wurde erfolgreich abgeschlossen.
 
-        o Ein Spieler "wird in die Gilde gegangen":
+   ME_PLAYER
+        Lebewesen lassen sich nicht ohne weiteres bewegen. Es muss
+        mindestens eine der Methoden M_NOCHECK, M_GO oder M_TPORT
+        angegeben werden.
 
-          this_player()->move("/gilden/abenteurer", M_GO, "in die Gilde");
+   ME_TOO_HEAVY
+        Das Zielobjekt kann dieses Objekt aus Gewichtsgruenden nicht mehr
+        aufnehmen.
 
-          Spieler, die mit ihm im gleichen Raum stehen, sehen folgende
-          Meldung:
-          "<name> geht in die Gilde."
+   ME_CANT_TPORT_IN
+        Das Zielobjekt verbietet das Teleportieren in sich hinein (nur bei
+        M_TPORT ohne M_NOCHECK).
 
-        o Ein Spieler schwimmt durchs Meer:
+   ME_CANT_TPORT_OUT
+        Der Raum, in dem sich das Lebewesen befindet, verbietet das
+        Teleportieren aus sich hinaus (nur bei M_TPORT ohne M_NOCHECK).
 
-          this_player()->move("meer_xy", M_GO, "nach Norden", "schwimmt",
-                              "schwimmt herein");
+   ME_CANT_BE_DROPPED
+        Das Objekt kann nicht fallen gelassen werden (zB. weil P_NODROP
+        gesetzt ist).
 
-          Spieler in seinem Startraum sehen "<name> schwimmt nach Norden.",
-          Spieler in seinem Zielraum sehen "<name> schwimmt herein."
+   ME_CANT_BE_TAKEN
+        Das Objekt kann nicht genommen werden (zB. weil P_NOGET gesetzt
+        ist).
 
-SIEHE AUCH:
-     move_object(), remove(), setmin, setmmin, setmout, setmmout, review,
-     PreventInsert(), PreventLeave(), PreventInsertLiving(),
-     PreventLeaveLiving(), PreventMove(), NotifyInsert(), NotifyLeave(),
-     NotifyMove(), NotifyRemove(), init(), exit(),
-     P_NO_PLAYERS, P_PARA, /std/thing/moving.c, /std/living/moving.c
-     -----------------------------------------------------------------------
+   ME_CANT_BE_INSERTED
+        Das Zielobjekt verhindert das Einfuegen aus bestimmten Gruenden.
+
+   ME_CANT_LEAVE_ENV
+        Der Container verhindert ein verlassen des Objektes
+
+   ME_TOO_HEAVY_FOR_ENV
+        Ein Objekt kann einen Behaelter nicht verlassen, da es dem
+        Lebewesen sonst zu schwer wuerde.
+
+   TOO_MANY_OBJECTS
+        Das Zielobjekt kann soviele Objekte nicht mehr aufnehmen.
+
+   ME_NOT_ALLOWED
+        Raeume mit gesetzter Property P_NO_PLAYERS koennen nur von
+        Testspielern und Magiern betreten werden. Bei Spielern oder
+        Gildentesties gibt es diese Fehlermeldung.
+   ME_WAS_DESTRUCTED
+        Das Objekt hat sich entweder im Verlaufe der Bewegung selbst
+        zerstoert oder wurde zerstoert, sodass move() nicht erfolgreich
+        beendet werden konnte. (Bsp: sensitive Objekte)
+
+   ME_DONT_WANT_TO_BE_MOVED
+        Das Objekt moechte nicht bewegt werden.
+
+
+BEISPIELE
+=========
+
+   o Ein Objekt "gibt sich" dem Spieler:
+
+     move(this_player(), M_GET);
+
+   o Ein Lebewesen wird in die Abenteurergilde teleportiert:
+
+     lv->move("/gilden/abenteurer", M_TPORT);
+
+   o Ein Spieler "wird in die Gilde gegangen":
+
+     this_player()->move("/gilden/abenteurer", M_GO, "in die Gilde");
+
+     Spieler, die mit ihm im gleichen Raum stehen, sehen folgende
+     Meldung:
+     "<name> geht in die Gilde."
+
+   o Ein Spieler schwimmt durchs Meer:
+
+     this_player()->move("meer_xy", M_GO, "nach Norden", "schwimmt",
+                         "schwimmt herein");
+
+     Spieler in seinem Startraum sehen "<name> schwimmt nach Norden.",
+     Spieler in seinem Zielraum sehen "<name> schwimmt herein."
+
+
+SIEHE AUCH
+==========
+
+   move_object(), remove(), setmin, setmmin, setmout, setmmout, review,
+   PreventInsert(), PreventLeave(), PreventInsertLiving(),
+   PreventLeaveLiving(), PreventMove(), NotifyInsert(), NotifyLeave(),
+   NotifyMove(), NotifyRemove(), init(), exit(),
+   P_NO_PLAYERS, P_PARA, /std/thing/moving.c, /std/living/moving.c
+   -----------------------------------------------------------------------
+
 2015-Jan-19, Arathorn
diff --git a/doc/lfun/moved_objects b/doc/lfun/moved_objects
index edcbd6e..8a5b536 100644
--- a/doc/lfun/moved_objects
+++ b/doc/lfun/moved_objects
@@ -1,30 +1,52 @@
+
 moved_objects()
+***************
 
-FUNKTION:
-    public object *moved_objects(void);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   public object *moved_objects(void);
 
-BESCHREIBUNG:
-    Mit dieser Funktion lassen sich die Objekte ermitteln, die das Lebewesen
-    beim letzten Aufruf von drop_objects(L) oder einer aehnlichen Funktion
-    bewegt hat.
 
-RUECKGABEWERT:
-    Array mit den zuletzt bewegten Objekten, oder ein leeres Array, falls
-    keine Objekte auf die Beschreibung des letzten drop_objects() / 
-    pick_objects() / put_objects() / give_objects() passten.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    siehe drop_objects() und give_objects()
+   /std/living/put_and_get.c
 
-SIEHE AUCH:
-    drop_objects(L), give_objects(L), pick_objects(L), put_objects(L),
-    show_objects(L), NotifyMove(L)
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion lassen sich die Objekte ermitteln, die das Lebewesen
+   beim letzten Aufruf von drop_objects(L) oder einer aehnlichen Funktion
+   bewegt hat.
+
+
+RUECKGABEWERT
+=============
+
+   Array mit den zuletzt bewegten Objekten, oder ein leeres Array, falls
+   keine Objekte auf die Beschreibung des letzten drop_objects() /
+   pick_objects() / put_objects() / give_objects() passten.
+
+
+BEISPIELE
+=========
+
+   siehe drop_objects() und give_objects()
+
+
+SIEHE AUCH
+==========
+
+   drop_objects(L), give_objects(L), pick_objects(L), put_objects(L),
+   show_objects(L), NotifyMove(L)
+
 Last modified: Thu Aug 28 22:19:26 2008 by Amynthor
diff --git a/doc/lfun/moved_where b/doc/lfun/moved_where
index 8bb7e9c..640acae 100644
--- a/doc/lfun/moved_where
+++ b/doc/lfun/moved_where
@@ -1,28 +1,50 @@
+
 moved_where()
+*************
 
-FUNKTION:
-    public object moved_where(void);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   public object moved_where(void);
 
-BESCHREIBUNG:
-    Mit dieser Funktion laesst sich ermitteln, wohin das Lebewesen zuletzt
-    mittels put_objects(L) oder give_objects(L) etwas bewegt oder wem es mit
-    show_objects(L) etwas gezeigt hat.
 
-RUECKGABEWERT:
-    Der Container oder das Lebewesen, wohin die Gegenstaende bewegt wurden.
+DEFINIERT IN
+============
 
-BEISPIEL:
-    siehe give_objects()
+   /std/living/put_and_get.c
 
-SIEHE AUCH:
-    put_objects(L), give_objects(L), show_objects(L), NotifyInsert(L),
-    P_LAST_CONTENT_CHANGE
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Mit dieser Funktion laesst sich ermitteln, wohin das Lebewesen zuletzt
+   mittels put_objects(L) oder give_objects(L) etwas bewegt oder wem es mit
+   show_objects(L) etwas gezeigt hat.
+
+
+RUECKGABEWERT
+=============
+
+   Der Container oder das Lebewesen, wohin die Gegenstaende bewegt wurden.
+
+
+BEISPIEL
+========
+
+   siehe give_objects()
+
+
+SIEHE AUCH
+==========
+
+   put_objects(L), give_objects(L), show_objects(L), NotifyInsert(L),
+   P_LAST_CONTENT_CHANGE
+
 Last modified: Thu Aug 28 22:16:15 2008 by Amynthor
diff --git a/doc/lfun/muster b/doc/lfun/muster
index d519f69..aa7279c 100644
--- a/doc/lfun/muster
+++ b/doc/lfun/muster
@@ -1,16 +1,33 @@
+
 muster()
+********
 
-FUNKTION:
-	type muster(...)
-	
-ARGUMENTE:
-	
-BESCHREIBUNG:
 
-RUECKGABEWERT:
-	
-BEMERKUNG:
-	
-BEISPIEL:
+FUNKTION
+========
 
-SIEHE AUCH:
+   type muster(...)
+
+
+ARGUMENTE
+=========
+
+
+BESCHREIBUNG
+============
+
+
+RUECKGABEWERT
+=============
+
+
+BEMERKUNG
+=========
+
+
+BEISPIEL
+========
+
+
+SIEHE AUCH
+==========
diff --git a/doc/lfun/name b/doc/lfun/name
index 74eac45..3509366 100644
--- a/doc/lfun/name
+++ b/doc/lfun/name
@@ -1,54 +1,81 @@
+
+name()
+******
+
 name()|Name()
 
-FUNKTION:
-     varargs string name(int casus, int demon);
-     varargs string Name(int casus, int demon);
 
-DEFINIERT IN:
-     /std/thing/description.c
+FUNKTION
+========
 
-ARGUMENTE:
-     casus
-          Der Fall, in dem der Name dekliniert werden soll.
-     demon
-          Gibt an, ob der Name mit bestimmtem oder unbestimmtem Artikel
-          versehen werden soll:
-             + demon = 0: Unbestimmter Artikel.
-             + demon = 1: Bestimmter Artikel.
-             + demon = 2: Finde selbst heraus, ob ein bestimmter oder ein
-               unbestimmter Artikel verwendet werden soll.
+   varargs string name(int casus, int demon);
+   varargs string Name(int casus, int demon);
 
-BESCHREIBUNG:
-     Diese Funktion ermittelt den Namen des Objektes im gewuenschten Fall
-     und mit dem angegebenen Artikel. Moegliche Werte fuer casus sind in
-     <thing/language.h> definiert. Weiterhin werden auch (falls angegeben)
-     die Namensadjektive dekliniert und in den Namen eingebaut.
 
-     Name() ist ein Alias fuer capitalize(name()), der Artikel wird also
-     gross geschrieben.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     String mit dem Namen des Objektes.
+   /std/thing/description.c
 
-BEMERKUNGEN:
-     Falls P_ARTICLE gesetzt ist, werden weder Artikel noch Namensadjektive
-     in den Namen eingebaut.
 
-     Wenn man als casus RAW angibt, wird der Name im Nominativ ohne Artikel
-     und Namensadjektive zurueckgegeben.
+ARGUMENTE
+=========
 
-BEISPIELE:
-     Wenn das Objekt ein Ball mit P_NAME="Ball" und P_NAME_ADJ="klein" ist,
-     so liefern die folgenden Aufrufe die angegebenen Ergebnisse:
+   casus
+        Der Fall, in dem der Name dekliniert werden soll.
+   demon
+        Gibt an, ob der Name mit bestimmtem oder unbestimmtem Artikel
+        versehen werden soll:
+           + demon = 0: Unbestimmter Artikel.
+           + demon = 1: Bestimmter Artikel.
+           + demon = 2: Finde selbst heraus, ob ein bestimmter oder ein
+             unbestimmter Artikel verwendet werden soll.
 
-     name(WER,0);    => "ein kleiner Ball"
-     name(WESSEN,1); => "des kleinen Balls"
-     name(RAW);      => "Ball"
-     name(WEM,2);    => "einem kleinen Ball" oder "dem kleinen Ball",
-                        abhaengig davon, wieviele Baelle gerade da sind.
 
-SIEHE AUCH:
-     /std/thing/description.c, Name()
+BESCHREIBUNG
+============
 
-----------------------------------------------------------------------------
+   Diese Funktion ermittelt den Namen des Objektes im gewuenschten Fall
+   und mit dem angegebenen Artikel. Moegliche Werte fuer casus sind in
+   <thing/language.h> definiert. Weiterhin werden auch (falls angegeben)
+   die Namensadjektive dekliniert und in den Namen eingebaut.
+
+   Name() ist ein Alias fuer capitalize(name()), der Artikel wird also
+   gross geschrieben.
+
+
+RUeCKGABEWERT
+=============
+
+   String mit dem Namen des Objektes.
+
+
+BEMERKUNGEN
+===========
+
+   Falls P_ARTICLE gesetzt ist, werden weder Artikel noch Namensadjektive
+   in den Namen eingebaut.
+
+   Wenn man als casus RAW angibt, wird der Name im Nominativ ohne Artikel
+   und Namensadjektive zurueckgegeben.
+
+
+BEISPIELE
+=========
+
+   Wenn das Objekt ein Ball mit P_NAME="Ball" und P_NAME_ADJ="klein" ist,
+   so liefern die folgenden Aufrufe die angegebenen Ergebnisse:
+
+   name(WER,0);    => "ein kleiner Ball"
+   name(WESSEN,1); => "des kleinen Balls"
+   name(RAW);      => "Ball"
+   name(WEM,2);    => "einem kleinen Ball" oder "dem kleinen Ball",
+                      abhaengig davon, wieviele Baelle gerade da sind.
+
+
+SIEHE AUCH
+==========
+
+   /std/thing/description.c, Name()
+
 Letzte Aenderung: 29.07.2016, Bugfix
diff --git a/doc/lfun/notify_player_change b/doc/lfun/notify_player_change
index 1765af6..34c4024 100644
--- a/doc/lfun/notify_player_change
+++ b/doc/lfun/notify_player_change
@@ -1,56 +1,82 @@
+
+notify_player_change()
+**********************
+
 void notify_player_change(string/object who, int rein [, int invis])
 
-FUNKTION:
-    void /notify_player_change(object who, int rein)
-    void /std/player/base::notify_player_change(string who, int rein,
-                                                int invis)
-  
-GERUFEN VON:
-    /std/player/base.c (d.h. alle Spielershells/-Objekte)
 
-ARGUMENTE:
-    string who
-      getuid() eines Spielers
-    object who
-      Spieler-Objekt
-    int rein
-      0 fuer das MUD verlassende, 1 fuer hereinkommende Spieler
-    int invis
-      1 fuer unsichtbare Spieler (Magier)
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion wird von Lebewesen fuer hereinkommende und das Spiel
-    verlassende Spieler an verschiedenen Stellen aufgerufen:
-    
-    * in anderen Spielern mit notify_player_change() mit drei Parametern
-      - dies dient fuer die "erwarte"-Funktionalitaet
-    * in der Gilde des Spielern mit zwei Parameter
-      - damit koennen Gilden notwendige Anpassungen vornehmen
+   void /notify_player_change(object who, int rein)
+   void /std/player/base::notify_player_change(string who, int rein,
+                                               int invis)
 
-    Diese Funktionen werden auch gerufen, wenn Magier "invis -e" bzw.
-    "vis e" benutzen.
 
-BEISPIELE:
-    // in einer Gilde:
-    void notify_player_change(object pl, int rein) {
-      if (rein && objectp(pl)) {
-        // Checks, ob Spielerskills in Ordnung sind
-        mapping bete = pl->QuerySkill("bete");
-        
-        if (!mappingp(bete)) {
-          if (IS_LEARNER(pl) || pl->QueryProp(P_TESTPLAYER)) {
-            tell_object(pl, break_string(
-              "Du bist ein kaputter Test-Kleriker ...", 78,
-              "Arkshat teilt dir mit: "));
-            // notduerftige Reparaturen
-          } else
-            raise_error("Klerus: Kaputter oder gesetzer Kleriker!\n");
-        }
-      }
-    }
+GERUFEN VON
+===========
 
-SIEHE AUCH:
-    RegisterEvent mit (EVT_LIB_LOGIN, EVT_LIB_LOGOUT)
-    erwarte
+   /std/player/base.c (d.h. alle Spielershells/-Objekte)
+
+
+ARGUMENTE
+=========
+
+   string who
+     getuid() eines Spielers
+   object who
+     Spieler-Objekt
+   int rein
+     0 fuer das MUD verlassende, 1 fuer hereinkommende Spieler
+   int invis
+     1 fuer unsichtbare Spieler (Magier)
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von Lebewesen fuer hereinkommende und das Spiel
+   verlassende Spieler an verschiedenen Stellen aufgerufen:
+
+
+
+   * in anderen Spielern mit notify_player_change() mit drei Parametern
+     - dies dient fuer die "erwarte"-Funktionalitaet
+   * in der Gilde des Spielern mit zwei Parameter
+     - damit koennen Gilden notwendige Anpassungen vornehmen
+
+   Diese Funktionen werden auch gerufen, wenn Magier "invis -e" bzw.
+   "vis e" benutzen.
+
+
+BEISPIELE
+=========
+
+   // in einer Gilde:
+   void notify_player_change(object pl, int rein) {
+     if (rein && objectp(pl)) {
+       // Checks, ob Spielerskills in Ordnung sind
+       mapping bete = pl->QuerySkill("bete");
+
+
+
+       if (!mappingp(bete)) {
+         if (IS_LEARNER(pl) || pl->QueryProp(P_TESTPLAYER)) {
+           tell_object(pl, break_string(
+             "Du bist ein kaputter Test-Kleriker ...", 78,
+             "Arkshat teilt dir mit: "));
+           // notduerftige Reparaturen
+         } else
+           raise_error("Klerus: Kaputter oder gesetzer Kleriker!\n");
+       }
+     }
+   }
+
+
+SIEHE AUCH
+==========
+
+   RegisterEvent mit (EVT_LIB_LOGIN, EVT_LIB_LOGOUT)
+   erwarte
 
 1. Sep 2011 Gloinson
diff --git a/doc/lfun/obsolete/AddHpHook b/doc/lfun/obsolete/AddHpHook
index e227951..5a2adce 100644
--- a/doc/lfun/obsolete/AddHpHook
+++ b/doc/lfun/obsolete/AddHpHook
@@ -1,29 +1,52 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 AddHpHook()
-FUNKTION:
-     int AddHpHook(object ob)
+***********
 
-DEFINIERT IN:
-     /std/player/life.c
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** AddHpHook()
 
-ARGUMENTE:
-     ob - das Objekt, das sich eintragen moechte.
 
-BESCHREIBUNG:
-     Traegt ein Objekt in P_HP_HOOKS ein, wenn es nicht schon darin steht.
+FUNKTION
+========
 
-     Aendern sich beim Spieler dann HP oder KP (nicht durch Set()), wird
-     an allen eingetragenen Objekten NotifyHpChange() gerufen.
+   int AddHpHook(object ob)
 
-RUECKGABEWERT:
-     1, wenn Erfolg, 0 sonst
 
-SIEHE AUCH:
-     Gegenpart:	RemoveHpHook()
-     Props:	P_HP_HOOKS, P_HP
-     Verwandt:	reduce_hit_points(), do_damage(), buffer_hp()
+DEFINIERT IN
+============
+
+   /std/player/life.c
+
+
+ARGUMENTE
+=========
+
+   ob - das Objekt, das sich eintragen moechte.
+
+
+BESCHREIBUNG
+============
+
+   Traegt ein Objekt in P_HP_HOOKS ein, wenn es nicht schon darin steht.
+
+   Aendern sich beim Spieler dann HP oder KP (nicht durch Set()), wird
+   an allen eingetragenen Objekten NotifyHpChange() gerufen.
+
+
+RUECKGABEWERT
+=============
+
+   1, wenn Erfolg, 0 sonst
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart: RemoveHpHook()
+   Props:     P_HP_HOOKS, P_HP
+   Verwandt:  reduce_hit_points(), do_damage(), buffer_hp()
 
 23.Feb.2004 Gloinson
diff --git a/doc/lfun/obsolete/AddInsertHook b/doc/lfun/obsolete/AddInsertHook
index 5e80272..9a372ba 100644
--- a/doc/lfun/obsolete/AddInsertHook
+++ b/doc/lfun/obsolete/AddInsertHook
@@ -1,59 +1,85 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 AddInsertHook()
+***************
 
-FUNKTION:
-     void AddInsertHook(object ob);
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** AddInsertHook()
 
-DEFINIERT IN:
-     /std/player/restrictions.c
 
-ARGUMENTE:
-     ob - Das Objekt, das informiert werden soll, wenn ein Objekt dem
-          Spielerinventar hinzugefuegt wurde.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
-      H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
-      vorhanden.)
+   void AddInsertHook(object ob);
 
-     Diese Funktion wird im Spielerobjekt aufgerufen, um das Objekt ob als
-     Hook-Listener anzumelden. Auf diese Weise eingetragene Listener
-     werden informiert, wenn ein Objekt ins Spielerinventar bewegt wurde.
-     Technisch wird die Bewegung ueber NotifyInsert() im Spielerobjekt
-     detektiert, und im Listener-Objekt wird die Funktion InsertNotify()
-     gerufen, die als Parameter das neu ins Spielerinventar bewegte Objekt
-     uebergeben bekommt.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Das Listener-Objekt muss sich ebenfalls im Spielerinventar befinden,
-     ansonsten wird der eingetragene Hook wieder geloescht.
+   /std/player/restrictions.c
 
-BEISPIEL:
-     
-     a) Objekt "ob" wird im Spieler als Listener angemeldet:
-        this_player()->AddInsertHook(ob);
 
-     b) Objekt "new" wird ins Spielerinventar bewegt, das Spielerobjekt
-        informiert "ob" darueber:
-        ob->InsertNotify(new);
+ARGUMENTE
+=========
 
-     c) Das Listener-Objekt "ob" reagiert darauf, z.B. indem es die Fackel
-        loescht, sofern sie vorher brannte:
-        void InsertNotify(object new) {
-          if ( objectp(new) && new->id("\nfackel") && 
-               new->QueryProp(P_LIGHTED) )
-            new->unlight();
-          return;
-        }
+   ob - Das Objekt, das informiert werden soll, wenn ein Objekt dem
+        Spielerinventar hinzugefuegt wurde.
 
-SIEHE AUCH:
-    NotifyInsert(), RemoveInsertHook(), QueryInsertHooks()
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
+    H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
+    vorhanden.)
+
+   Diese Funktion wird im Spielerobjekt aufgerufen, um das Objekt ob als
+   Hook-Listener anzumelden. Auf diese Weise eingetragene Listener
+   werden informiert, wenn ein Objekt ins Spielerinventar bewegt wurde.
+   Technisch wird die Bewegung ueber NotifyInsert() im Spielerobjekt
+   detektiert, und im Listener-Objekt wird die Funktion InsertNotify()
+   gerufen, die als Parameter das neu ins Spielerinventar bewegte Objekt
+   uebergeben bekommt.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Das Listener-Objekt muss sich ebenfalls im Spielerinventar befinden,
+   ansonsten wird der eingetragene Hook wieder geloescht.
+
+
+BEISPIEL
+========
+
+   a) Objekt "ob" wird im Spieler als Listener angemeldet:
+      this_player()->AddInsertHook(ob);
+
+   b) Objekt "new" wird ins Spielerinventar bewegt, das Spielerobjekt
+      informiert "ob" darueber:
+      ob->InsertNotify(new);
+
+   c) Das Listener-Objekt "ob" reagiert darauf, z.B. indem es die Fackel
+      loescht, sofern sie vorher brannte:
+      void InsertNotify(object new) {
+        if ( objectp(new) && new->id("\nfackel") &&
+             new->QueryProp(P_LIGHTED) )
+          new->unlight();
+        return;
+      }
+
+
+SIEHE AUCH
+==========
+
+   NotifyInsert(), RemoveInsertHook(), QueryInsertHooks()
+
 Last modified: 14.04.2010, Arathorn
diff --git a/doc/lfun/obsolete/ModifySkillAttributeOld b/doc/lfun/obsolete/ModifySkillAttributeOld
index 65d9afc..b0b81ab 100644
--- a/doc/lfun/obsolete/ModifySkillAttributeOld
+++ b/doc/lfun/obsolete/ModifySkillAttributeOld
@@ -1,90 +1,118 @@
+
 ModifySkillAttributeOld()
+*************************
 
-FUNKTION:
-    varargs int ModifySkillAttributeOld(object caster, string atrname, 
-                                        int value, int duration, mixed fun)
 
-DEFINIERT IN:
-    /std/living/skill_attributes.c
+FUNKTION
+========
 
-ARGUMENTE:
-    <caster>    IGNORIERT
-                frueher Objekt, das die Modifikation vornimmt, heute ist
-                dieses Argument ohne Bedeutung und wird ignoriert.
+   varargs int ModifySkillAttributeOld(object caster, string atrname,
+                                       int value, int duration, mixed fun)
 
-    <atrname>   STRING
-                Name des zu veraendernden Attributes
-                (Definiert in /sys/living/skill_attributes.h)
 
-    <value>     INT
-                Neuer Wert des Attributs (Standard: 100)
+DEFINIERT IN
+============
 
-    <duration>  INT
-                Dauer in Sekunden
+   /std/living/skill_attributes.c
 
-    <fun>       NICHT MEHR UNTERSTUETZT - ModifySkillAttribute() nutzen!!
 
-BESCHREIBUNG:
-    Diese Funktion existiert nur aus Kompatibilitaetsgruenden. Bitte in neuen
-    Objekten NICHT mehr verwenden und in alten nach Moeglichkeit ausbauen!
+ARGUMENTE
+=========
 
-    Aendert ein Skill-Attribut eines Living.
-    
-    Fuer <value> ist folgendes zu beachten:
-    Frueher handelte es sich um einen multiplikativen Faktor. 100 hatte die
-    Bedeutung von 1 und veraenderte nichts. Heute sind die Modifikatoren
-    additiv. Diese Funktion macht eine einfache Umrechnung, indem sie vom hier
-    uebergeben Wert 100 abzieht. (In der Annahme, dass frueher meist eh nur 
-    ein Modifikator zur gleichen Zeit aktiv war.)
-    Gibt man hier also hier eine 100 an, wird ein Modifikator von 0 einge-
-    tragen, der nichts aendert, bei 200 wird ein Modifikator von 100 einge-
-    tragen, bei 50 einer von -50, welcher das Skillattribute folglich 
-    reduziert.
+   <caster>    IGNORIERT
+               frueher Objekt, das die Modifikation vornimmt, heute ist
+               dieses Argument ohne Bedeutung und wird ignoriert.
 
-    Es sind momentan max. 5 gleichzeitige Skillattribute-Modifikatoren pro SA
-    zulaessig.
+   <atrname>   STRING
+               Name des zu veraendernden Attributes
+               (Definiert in /sys/living/skill_attributes.h)
 
-RUECKGABEWERT:
-     0  wenn der Wert ungueltig ist oder aus sonstigem Grunde nicht gesetzt
-        werden konnte (fuer bessere Diagnostik -> ModifySkillAttribute()).
-    >0  wenn alles okay war
+   <value>     INT
+               Neuer Wert des Attributs (Standard: 100)
 
-BEMERKUNGEN:
-    Frueher musste ein setzendes Objekt ein groesseres P_LEVEL haben als das
-    Objekt, welches einen vorherigen Modifikator gesetzt hat, um diesen zu
-    ueberschreiben. Dies ist inzwischen ohne Bedeutung.
+   <duration>  INT
+               Dauer in Sekunden
 
-BEISPIELE:
-    Ein NPC:
+   <fun>       NICHT MEHR UNTERSTUETZT - ModifySkillAttribute() nutzen!!
 
-    void
-    create() {
-    .
-    .
-    .
-    AddSpell(1, 1,
-      "Der fuerchterliche NPC haut Dir auf den Kopf.\n",
-      "Der fuerchterliche NPC haut @WEN auf den Kopf.\n",
-      DT_MAGIC, "schwaechen");
-    .
-    .
-    }
 
-    schwaechen(object enemy, int damage, mixed *dam_type) {
-      int ergebnis;
-      ergebnis = enemy->ModifySkillAttributeOld(this_object(), SA_QUALITY, 50, 5);
-      if (ergebnis > 0)
-          tell_object(enenmy, "Du fuehlst Dich ganz schwach.\n");
-    }
-    
-    Der NPC schwaecht seinen Gegner erheblich! Alles wird fuer 5 Sekunden um
-    50, d.h. 0.5 Skillattribute reduziert (50 - 100 => -50 als Modifikator).
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-    P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS,
-    ModifySkillAttribute, QuerySkillAttribute(),
-    RemoveSkillAttributeModifer(), QuerySkillAttributeModifier()
+   Diese Funktion existiert nur aus Kompatibilitaetsgruenden. Bitte in neuen
+   Objekten NICHT mehr verwenden und in alten nach Moeglichkeit ausbauen!
 
------------------------------------------------------------------------------
+   Aendert ein Skill-Attribut eines Living.
+
+
+
+   Fuer <value> ist folgendes zu beachten:
+   Frueher handelte es sich um einen multiplikativen Faktor. 100 hatte die
+   Bedeutung von 1 und veraenderte nichts. Heute sind die Modifikatoren
+   additiv. Diese Funktion macht eine einfache Umrechnung, indem sie vom hier
+   uebergeben Wert 100 abzieht. (In der Annahme, dass frueher meist eh nur
+   ein Modifikator zur gleichen Zeit aktiv war.)
+   Gibt man hier also hier eine 100 an, wird ein Modifikator von 0 einge-
+   tragen, der nichts aendert, bei 200 wird ein Modifikator von 100 einge-
+   tragen, bei 50 einer von -50, welcher das Skillattribute folglich
+   reduziert.
+
+   Es sind momentan max. 5 gleichzeitige Skillattribute-Modifikatoren pro SA
+   zulaessig.
+
+
+RUECKGABEWERT
+=============
+
+    0  wenn der Wert ungueltig ist oder aus sonstigem Grunde nicht gesetzt
+       werden konnte (fuer bessere Diagnostik -> ModifySkillAttribute()).
+   >0  wenn alles okay war
+
+
+BEMERKUNGEN
+===========
+
+   Frueher musste ein setzendes Objekt ein groesseres P_LEVEL haben als das
+   Objekt, welches einen vorherigen Modifikator gesetzt hat, um diesen zu
+   ueberschreiben. Dies ist inzwischen ohne Bedeutung.
+
+
+BEISPIELE
+=========
+
+   Ein NPC:
+
+   void
+   create() {
+   .
+   .
+   .
+   AddSpell(1, 1,
+     "Der fuerchterliche NPC haut Dir auf den Kopf.\n",
+     "Der fuerchterliche NPC haut @WEN auf den Kopf.\n",
+     DT_MAGIC, "schwaechen");
+   .
+   .
+   }
+
+   schwaechen(object enemy, int damage, mixed *dam_type) {
+     int ergebnis;
+     ergebnis = enemy->ModifySkillAttributeOld(this_object(), SA_QUALITY, 50, 5);
+     if (ergebnis > 0)
+         tell_object(enenmy, "Du fuehlst Dich ganz schwach.\n");
+   }
+
+
+
+   Der NPC schwaecht seinen Gegner erheblich! Alles wird fuer 5 Sekunden um
+   50, d.h. 0.5 Skillattribute reduziert (50 - 100 => -50 als Modifikator).
+
+
+SIEHE AUCH
+==========
+
+   P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS,
+   ModifySkillAttribute, QuerySkillAttribute(),
+   RemoveSkillAttributeModifer(), QuerySkillAttributeModifier()
+
 07.08.2008 Zesstra
-
diff --git a/doc/lfun/obsolete/NotifyGiveQuest b/doc/lfun/obsolete/NotifyGiveQuest
index 7e29798..220942b 100644
--- a/doc/lfun/obsolete/NotifyGiveQuest
+++ b/doc/lfun/obsolete/NotifyGiveQuest
@@ -1,37 +1,62 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Events (siehe "man events").                                        *
-***********************************************************************
+
+NotifyGiveQuest()
+*****************
+
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Events (siehe "man
+events").                                        * ******************
+*****************************************************
 
 NotifyGiveQuest()
 
-FUNKTION:
-     void NotifyGiveQuest(object pl, string key);
-     
-DEFINIERT IN:
-     /std/gilden_ob.c
-     
-ARGUMENTE:
-     pl     Der Spieler, der eine Quest geloest hat.
-     key    Name der geloesten Quest.
-     
-BESCHREIBUNG:
-     Die Funktion wird in der Gilde des Spielers aufgerufen, wenn der 
-     Spieler eine gueltige Quest besteht - und zwar unabhaengig davon,
-     ob er sie bereits geloest hat, oder nicht.
-     
-RUECKGABEWERT:
-     keiner
-     
-BEMERKUNGEN:
-     Die Funktion ist dafuer gedacht, von Gildenprogrammierern ueberschrieben
-     zu werden, wenn beispielsweise bestimmte Quests als Aufstiegsbedingung
-     verlangt werden, diese aber in der entsprechenden Gilde geloest sein
-     muessen (z.B. Obergladiator als Level-5-Zauberer).
-     
-SIEHE AUCH:
-     /std/gilden_ob.c
-     /std/player/quests.c
 
-----------------------------------------------------------------------------
+FUNKTION
+========
+
+   void NotifyGiveQuest(object pl, string key);
+
+
+DEFINIERT IN
+============
+
+   /std/gilden_ob.c
+
+
+ARGUMENTE
+=========
+
+   pl     Der Spieler, der eine Quest geloest hat.
+   key    Name der geloesten Quest.
+
+
+BESCHREIBUNG
+============
+
+   Die Funktion wird in der Gilde des Spielers aufgerufen, wenn der
+   Spieler eine gueltige Quest besteht - und zwar unabhaengig davon,
+   ob er sie bereits geloest hat, oder nicht.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Die Funktion ist dafuer gedacht, von Gildenprogrammierern ueberschrieben
+   zu werden, wenn beispielsweise bestimmte Quests als Aufstiegsbedingung
+   verlangt werden, diese aber in der entsprechenden Gilde geloest sein
+   muessen (z.B. Obergladiator als Level-5-Zauberer).
+
+
+SIEHE AUCH
+==========
+
+   /std/gilden_ob.c
+   /std/player/quests.c
+
 Last modified: Fri Oct 4 10:17:00 1996 by Silvana
diff --git a/doc/lfun/obsolete/NotifyHpChange b/doc/lfun/obsolete/NotifyHpChange
index 6f82b03..3c96222 100644
--- a/doc/lfun/obsolete/NotifyHpChange
+++ b/doc/lfun/obsolete/NotifyHpChange
@@ -1,47 +1,71 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 NotifyHpChange()
+****************
 
-FUNKTION:
-	void NotifyHpChange();
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** NotifyHpChange()
 
-DEFINIERT IN:
-	/std/player/life.c
 
-ARGUMENTE:
-	keine
+FUNKTION
+========
 
-BESCHREIBUNG:
-	Wenn sich die Lebenspunkte eines Spielers aendern, so werden davon
-	auch andere Objekte unterrichtet, sofern diese mittels der Funktion
-	AddHpHook() bei eben diesem Spieler angemeldet wurden.
-	Fortan wird dann die Funktion NotifyHpChange() in diesen
-	angemeldeten Objekten aufgerufen, wenn sich die Property P_HP des
-	Spielers aendert. Es werden hierbei keine Argumente an
-	NotifyHpChange() uebergeben, die aktuellen Lebenspunkte kann man ja
-	auch ohne weiteres ueber die Property P_HP in Erfahrung bringen und
-	aeltere Werte muss man sich gesondert merken. Zu beachten ist, dass
-	die Property P_HP bei Aufruf der Funktion NotifyHpChange() bereits
-	den neuen Wert enthaelt.
-	Bei dem Spieler angemeldete Objekte, die von Lebenspunkteaenderungen
-	informiert werden sollen, werden automatisch aus der Liste entfernt,
-	wenn sie zerstoert wurden. Diese Liste ist in der Property
-	P_HP_HOOKS zu finden. Per Hand kann man sie auch explizit mittels
-	der Funktion RemoveHpHook() entfernen.
-	Stirbt ein Spieler, so wird die Funktion NotifyPlayerDeath()
-	aufgerufen und nicht NotifyHpChange()!
+   void NotifyHpChange();
 
-RUeCKGABEWERT:
-	keiner
 
-BEISPIELE:
-	ist in Arbeit
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-	P_HP, P_HP_HOOKS, AddHpHook(), RemoveHpHook(),
-	Defend(), do_damage(), NotifyPlayerDeath()
+   /std/player/life.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Wenn sich die Lebenspunkte eines Spielers aendern, so werden davon
+   auch andere Objekte unterrichtet, sofern diese mittels der Funktion
+   AddHpHook() bei eben diesem Spieler angemeldet wurden.
+   Fortan wird dann die Funktion NotifyHpChange() in diesen
+   angemeldeten Objekten aufgerufen, wenn sich die Property P_HP des
+   Spielers aendert. Es werden hierbei keine Argumente an
+   NotifyHpChange() uebergeben, die aktuellen Lebenspunkte kann man ja
+   auch ohne weiteres ueber die Property P_HP in Erfahrung bringen und
+   aeltere Werte muss man sich gesondert merken. Zu beachten ist, dass
+   die Property P_HP bei Aufruf der Funktion NotifyHpChange() bereits
+   den neuen Wert enthaelt.
+   Bei dem Spieler angemeldete Objekte, die von Lebenspunkteaenderungen
+   informiert werden sollen, werden automatisch aus der Liste entfernt,
+   wenn sie zerstoert wurden. Diese Liste ist in der Property
+   P_HP_HOOKS zu finden. Per Hand kann man sie auch explizit mittels
+   der Funktion RemoveHpHook() entfernen.
+   Stirbt ein Spieler, so wird die Funktion NotifyPlayerDeath()
+   aufgerufen und nicht NotifyHpChange()!
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   ist in Arbeit
+
+
+SIEHE AUCH
+==========
+
+   P_HP, P_HP_HOOKS, AddHpHook(), RemoveHpHook(),
+   Defend(), do_damage(), NotifyPlayerDeath()
+
 Last modified: Thu Nov 19 13:54:33 1998 by Patryn
diff --git a/doc/lfun/obsolete/QueryEnemy b/doc/lfun/obsolete/QueryEnemy
index bf0b583..2613f53 100644
--- a/doc/lfun/obsolete/QueryEnemy
+++ b/doc/lfun/obsolete/QueryEnemy
@@ -1,24 +1,51 @@
-********************* OBSOLETE LFUN ***********************************
-FUNKTION:
-	object QueryEnemy();
 
-DEFINIERT IN:
-	/std/living/combat.c
+QueryEnemy()
+************
 
-ARGUMENTE:
-	keine
+********************* OBSOLETE LFUN
+***********************************
 
-RUeCKGABEWERT:
-	gefundener Gegner
 
-BESCHREIBUNG:
-	Diese Funktion liefert zufaellig einen der anwesenden Gegner
-	zurueck, sofern keine Gegner bevorzugt ausgewaehlt werden.
+FUNKTION
+========
 
-BEMERKUNGEN:
-  Diese Lfun existiert nicht mehr. Bitte SelectEnemy() benutzen.
+   object QueryEnemy();
 
-SIEHE AUCH:
-	SelectEnemy(), QueryPreferedEnemy(), P_PREFERED_ENEMY
-----------------------------------------------------------------------------
+
+DEFINIERT IN
+============
+
+   /std/living/combat.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUeCKGABEWERT
+=============
+
+   gefundener Gegner
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert zufaellig einen der anwesenden Gegner
+   zurueck, sofern keine Gegner bevorzugt ausgewaehlt werden.
+
+
+BEMERKUNGEN
+===========
+
+   Diese Lfun existiert nicht mehr. Bitte SelectEnemy() benutzen.
+
+
+SIEHE AUCH
+==========
+
+   SelectEnemy(), QueryPreferedEnemy(), P_PREFERED_ENEMY
+
 07.02.2009, Zesstra
diff --git a/doc/lfun/obsolete/QueryInsertHooks b/doc/lfun/obsolete/QueryInsertHooks
index c43d036..317104c 100644
--- a/doc/lfun/obsolete/QueryInsertHooks
+++ b/doc/lfun/obsolete/QueryInsertHooks
@@ -1,31 +1,52 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 QueryInsertHooks()
+******************
 
-FUNKTION:
-     object *QueryInsertHooks();
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** QueryInsertHooks()
 
-DEFINIERT IN:
-     /std/player/restrictions.c
 
-ARGUMENTE:
-     keine
+FUNKTION
+========
 
-BESCHREIBUNG:
-     (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
-      H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
-      vorhanden.)
+   object *QueryInsertHooks();
 
-     Diese Funktion gibt die aktuell beim Spielerobjekt angemeldeten
-     Listener-Objekte zurueck.
 
-RUeCKGABEWERT:
-     Array aus Objektpointern oder leeres Array
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    NotifyInsert(), AddInsertHook(), RemoveInsertHook()
+   /std/player/restrictions.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
+    H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
+    vorhanden.)
+
+   Diese Funktion gibt die aktuell beim Spielerobjekt angemeldeten
+   Listener-Objekte zurueck.
+
+
+RUeCKGABEWERT
+=============
+
+   Array aus Objektpointern oder leeres Array
+
+
+SIEHE AUCH
+==========
+
+   NotifyInsert(), AddInsertHook(), RemoveInsertHook()
+
 Last modified: 14.04.2010, Arathorn
diff --git a/doc/lfun/obsolete/QueryOptQP b/doc/lfun/obsolete/QueryOptQP
index f6f72c5..77404ad 100644
--- a/doc/lfun/obsolete/QueryOptQP
+++ b/doc/lfun/obsolete/QueryOptQP
@@ -1,25 +1,43 @@
+
 QueryOptQP()
+************
 
-FUNKTION:
-    int QueryOptQP()
 
-DEFINIERT IN:
-    /secure/questmaster.c
+FUNKTION
+========
 
-ARGUMENTE:
-    keine
+   int QueryOptQP()
 
-RUECKGABEWERT:
-    Abenteuerpunkte der optionalen Quests
 
-BESCHREIBUNG:
-    Diese Funktion liefert die Abenteuerpunkte der optionalen
-    Abenteuer zurueck. 
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
-    QueryMaxQP, QueryTotalQP
+   /secure/questmaster.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+RUECKGABEWERT
+=============
+
+   Abenteuerpunkte der optionalen Quests
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert die Abenteuerpunkte der optionalen
+   Abenteuer zurueck.
+
+
+SIEHE AUCH
+==========
+
+   GiveQuest, QueryQuest, /secure/questmaster.h, QueryGroupedKeys,
+   QueryMaxQP, QueryTotalQP
+
 Zuletzt geaendert: Sam, 25. Nov 2000, 14:04:28 von Zook.
-
diff --git a/doc/lfun/obsolete/RemoveHpHook b/doc/lfun/obsolete/RemoveHpHook
index d3177f1..54c93ec 100644
--- a/doc/lfun/obsolete/RemoveHpHook
+++ b/doc/lfun/obsolete/RemoveHpHook
@@ -1,25 +1,48 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 RemoveHpHook()
-FUNKTION:
-     int RemoveHpHook(object ob)
+**************
 
-DEFINIERT IN:
-     /std/player/life.c
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** RemoveHpHook()
 
-ARGUMENTE:
-     ob - das Objekt, das sich austragen moechte.
 
-BESCHREIBUNG:
-     Entfernt den Eintrag fuer dieses Objekt in P_HP_HOOKS.
+FUNKTION
+========
 
-RUECKGABEWERT:
-     1, wenn Erfolg, 0 sonst
+   int RemoveHpHook(object ob)
 
-SIEHE AUCH:
-     Gegenpart:	AddHpHook()
-     Props:	P_HP_HOOKS, P_HP
+
+DEFINIERT IN
+============
+
+   /std/player/life.c
+
+
+ARGUMENTE
+=========
+
+   ob - das Objekt, das sich austragen moechte.
+
+
+BESCHREIBUNG
+============
+
+   Entfernt den Eintrag fuer dieses Objekt in P_HP_HOOKS.
+
+
+RUECKGABEWERT
+=============
+
+   1, wenn Erfolg, 0 sonst
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart: AddHpHook()
+   Props:     P_HP_HOOKS, P_HP
 
 23.Feb.2004 Gloinson
diff --git a/doc/lfun/obsolete/RemoveInsertHook b/doc/lfun/obsolete/RemoveInsertHook
index f232eed..6c77edf 100644
--- a/doc/lfun/obsolete/RemoveInsertHook
+++ b/doc/lfun/obsolete/RemoveInsertHook
@@ -1,31 +1,52 @@
-********************* OBSOLETE LFUN ***********************************
-* Diese Efun bitte nicht mehr benutzen, sondern stattdessen die       *
-* Hooks (s. /doc/std/hooks).                                          *
-***********************************************************************
+
 RemoveInsertHook()
+******************
 
-FUNKTION:
-     void RemoveInsertHook(object ob);
+********************* OBSOLETE LFUN
+*********************************** * Diese Efun bitte nicht mehr
+benutzen, sondern stattdessen die       * * Hooks (s. /doc/std/hooks).
+* *******************************************************************
+**** RemoveInsertHook()
 
-DEFINIERT IN:
-     /std/player/restrictions.c
 
-ARGUMENTE:
-     ob - Das Objekt, das als Listener aus der Liste ausgetragen werden soll
+FUNKTION
+========
 
-BESCHREIBUNG:
-     (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
-      H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
-      vorhanden.)
+   void RemoveInsertHook(object ob);
 
-     Diese Funktion wird im Spielerobjekt aufgerufen, um ein als Listener
-     eingetragenes Hook-Objekt ob wieder auszutragen.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    NotifyInsert(), AddInsertHook(), QueryInsertHooks()
+   /std/player/restrictions.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   ob - Das Objekt, das als Listener aus der Liste ausgetragen werden soll
+
+
+BESCHREIBUNG
+============
+
+   (Diese Funktionalitaet wurde ersetzt durch den allgemeinen Hook
+    H_HOOK_INSERT und ist nur noch aus Gruenden der Kompatibilitaet
+    vorhanden.)
+
+   Diese Funktion wird im Spielerobjekt aufgerufen, um ein als Listener
+   eingetragenes Hook-Objekt ob wieder auszutragen.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+SIEHE AUCH
+==========
+
+   NotifyInsert(), AddInsertHook(), QueryInsertHooks()
+
 Last modified: 14.04.2010, Arathorn
diff --git a/doc/lfun/obsolete/TestAttributeLock b/doc/lfun/obsolete/TestAttributeLock
index 126e931..3d5d54d 100644
--- a/doc/lfun/obsolete/TestAttributeLock
+++ b/doc/lfun/obsolete/TestAttributeLock
@@ -1,25 +1,47 @@
-********************* OBSOLETE LFUN ***********************************
+
 TestAttributeLock()
-FUNKTION:
-     string TestAttributeLock(mapping check)
+*******************
 
-DEFINIERT IN:
-     /std/living/attributes.c
-

-PARAMETER:

-     check	- Mapping mit Attributen: ([<attr>:<wert>])

+********************* OBSOLETE LFUN
+*********************************** TestAttributeLock()
 
-BESCHREIBUNG:
-     Prueft, ob eines der im Mapping enthaltenen Attribute blockiert

-     ist (bereits durch einen anderen Modifier belegt wurde).
-     
-     Da Modifier nicht mehr direkt blockieren ist diese Funktion obsolet
-     und in Livings inzwischen nicht mehr existent.
 
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,

-     P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

+FUNKTION
+========
+
+   string TestAttributeLock(mapping check)
+
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+PARAMETER
+=========
+
+   check      - Mapping mit Attributen: ([<attr>:<wert>])
+
+
+BESCHREIBUNG
+============
+
+   Prueft, ob eines der im Mapping enthaltenen Attribute blockiert
+   ist (bereits durch einen anderen Modifier belegt wurde).
+
+
+
+   Da Modifier nicht mehr direkt blockieren ist diese Funktion obsolet
+   und in Livings inzwischen nicht mehr existent.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_ATTRIBUTES_MODIFIER,
+   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c
 
 11.05.2007, Zesstra
diff --git a/doc/lfun/obsolete/extra_look b/doc/lfun/obsolete/extra_look
index 753a8ed..d8e9703 100644
--- a/doc/lfun/obsolete/extra_look
+++ b/doc/lfun/obsolete/extra_look
@@ -1,19 +1,32 @@
-********************* VERALTETE LFUN ******************************
-* Diese LFUN ist veraltet. Bitte benutzt sie NICHT mehr, sondern  *
-* stattdessden AddExtraLook().                                    *
+
+extra_look()
+************
+
+********************* VERALTETE LFUN ****************************** *
+Diese LFUN ist veraltet. Bitte benutzt sie NICHT mehr, sondern  * *
+stattdessden AddExtraLook().                                    *
 *******************************************************************
 
 extra_look()
 
-FUNKTION:
-    string extra_look();
 
-BESCHREIBUNG:
-    Kann in Objekt definiert sein. Wenn ein Living (std/living/description)
-    das Objekt enthaelt, wird zu dessen long() der zurueckgegebene String
-    hinzugefuegt.
+FUNKTION
+========
 
-SIEHE AUCH:
-    AddExtraLook()
+   string extra_look();
+
+
+BESCHREIBUNG
+============
+
+   Kann in Objekt definiert sein. Wenn ein Living (std/living/description)
+   das Objekt enthaelt, wird zu dessen long() der zurueckgegebene String
+   hinzugefuegt.
+
+
+SIEHE AUCH
+==========
+
+   AddExtraLook()
 
 25.Jan 2015 Gloinson
diff --git a/doc/lfun/obsolete/paramove b/doc/lfun/obsolete/paramove
index 96686a2..25ce252 100644
--- a/doc/lfun/obsolete/paramove
+++ b/doc/lfun/obsolete/paramove
@@ -1,45 +1,66 @@
-****************************************************************************
-************************* VERALTETE LFUN ***********************************
-************************* DO NOT USE!    ***********************************
-****************************************************************************
+
 paramove()
+**********
 
-FUNKTION:
-     int paramove();
 
-DEFINIERT IN:
-     /std/room/para.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int paramove();
 
-BESCHREIBUNG:
-     Bewegt den Spieler ggf. in eine Paralleldimension.
 
-RUeCKGABEWERT:
-     1, wenn der Spieler die Dimension gewechselt hat.
+DEFINIERT IN
+============
 
-BEISPIEL:
-     init(){
-       if(!paramove()) ::init();
-      }
+   /std/room/para.c
 
-BEMERKUNGEN:
-     DIESE FUNKTION NICHT MEHR BENUTZEN!
 
-     Diese Funktion sollte nur aus einem init() aufgerufen werden!
+ARGUMENTE
+=========
 
-     Fuer die Entscheidung, in welchem Raum ein Spieler in Abhaengigkeit 
-     von P_PARA landet, ist die Funktion move() zustaendig. Als Magier 
-     muss man sich darum nicht gesondert kuemmern. Das heisst aber auch, 
-     dass beim Anschluss eines Normalweltraumes automatisch alle in dem 
-     Verzeichnis mit gleichem Namen vorhandenen Parallelweltraeume mit 
-     angeschlossen werden.
+   keine
 
-     Deswegen ist paramove() veraltet und sollte nicht mehr genutzt werden.
 
-SIEHE AUCH:
-     /std/room/para.c, P_PARA, P_NO_PLAYERS, move
+BESCHREIBUNG
+============
 
-----------------------------------------------------------------------------
+   Bewegt den Spieler ggf. in eine Paralleldimension.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn der Spieler die Dimension gewechselt hat.
+
+
+BEISPIEL
+========
+
+   init(){
+     if(!paramove()) ::init();
+    }
+
+
+BEMERKUNGEN
+===========
+
+   DIESE FUNKTION NICHT MEHR BENUTZEN!
+
+   Diese Funktion sollte nur aus einem init() aufgerufen werden!
+
+   Fuer die Entscheidung, in welchem Raum ein Spieler in Abhaengigkeit
+   von P_PARA landet, ist die Funktion move() zustaendig. Als Magier
+   muss man sich darum nicht gesondert kuemmern. Das heisst aber auch,
+   dass beim Anschluss eines Normalweltraumes automatisch alle in dem
+   Verzeichnis mit gleichem Namen vorhandenen Parallelweltraeume mit
+   angeschlossen werden.
+
+   Deswegen ist paramove() veraltet und sollte nicht mehr genutzt werden.
+
+
+SIEHE AUCH
+==========
+
+   /std/room/para.c, P_PARA, P_NO_PLAYERS, move
+
 Last modified: 05.08.2007, Zesstra
diff --git a/doc/lfun/pick b/doc/lfun/pick
index 59bf51f..5063ee6 100644
--- a/doc/lfun/pick
+++ b/doc/lfun/pick
@@ -1,48 +1,73 @@
+
 pick()
+******
 
-FUNKTION:
-    public varargs int pick(object o, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object o
-        Das Objekt, das aufgehoben werden soll.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_PICK_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int pick(object o, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC nimmt das Objekt auf. Gibt o->move() keinen positiven
-    Wert zurueck, beispielsweise weil das Objekt zu schwer ist oder nicht
-    genommen werden darf, bekommt er eine entsprechende Fehlermeldung.
 
-RUECKGABEWERT:
-    Wenn das Aufnehmen geklappt hat, 1, ansonsten 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
-    aufnehmen lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
-    moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
-    manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+   /std/living/put_and_get.c
 
-    Die Funktion prueft nicht, ob sich das Objekt ueberhaupt in der Reichweite
-    des Spielers/NPC befindet, das muss man ggf. selbst ermitteln.
 
-BEISPIEL:
-    ob = clone_object(WEINGUMMI);
+ARGUMENTE
+=========
 
-    if (this_player()->pick(ob, ({ "Du nimmst @WENU2 aus dem Regal.",
-                                   "@WER1 nimmt @WENU2 aus dem Regal." })))
-        weingummi--;
-    else
-        ob->remove();
+   object o
+       Das Objekt, das aufgehoben werden soll.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_PICK_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
 
-SIEHE AUCH:
-    move(L), P_PICK_MSG, pick_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
-    P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NOGET
 
-----------------------------------------------------------------------------
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC nimmt das Objekt auf. Gibt o->move() keinen positiven
+   Wert zurueck, beispielsweise weil das Objekt zu schwer ist oder nicht
+   genommen werden darf, bekommt er eine entsprechende Fehlermeldung.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn das Aufnehmen geklappt hat, 1, ansonsten 0.
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt
+   aufnehmen lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
+   moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
+   manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+
+   Die Funktion prueft nicht, ob sich das Objekt ueberhaupt in der Reichweite
+   des Spielers/NPC befindet, das muss man ggf. selbst ermitteln.
+
+
+BEISPIEL
+========
+
+   ob = clone_object(WEINGUMMI);
+
+   if (this_player()->pick(ob, ({ "Du nimmst @WENU2 aus dem Regal.",
+                                  "@WER1 nimmt @WENU2 aus dem Regal." })))
+       weingummi--;
+   else
+       ob->remove();
+
+
+SIEHE AUCH
+==========
+
+   move(L), P_PICK_MSG, pick_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
+   P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NOGET
+
 Last modified: Thu Aug 28 22:21:41 2008 by Amynthor
diff --git a/doc/lfun/pick_obj b/doc/lfun/pick_obj
index a4c7c17..6557cee 100644
--- a/doc/lfun/pick_obj
+++ b/doc/lfun/pick_obj
@@ -1,27 +1,43 @@
+
 pick_obj()
+**********
+
 
 FUNKTION
-    int pick_obj(object ob)
+========
 
-DEFINIERT IN:
+   int pick_obj(object ob)
 
-    /std/living/put_and_get.c
 
-ARGUMENTE:
+DEFINIERT IN
+============
 
-    ob      Das Objekt, das genommen werden soll.
+   /std/living/put_and_get.c
 
-BESCHREIBUNG:
 
-    Das Lebewesen, in dem diese Funktion aufgerufen werden soll, hebt
-    den angegebenen Gegenstand (ob) auf, falls es ihm moeglich ist.
+ARGUMENTE
+=========
 
-RUeCKGABEWERT:
-    1, wenn das Objekt genommen wurde oder dies nicht moeglich war. (in diesem
-    Fall wird auch direkt eine Textausgabe ausgegeben)
-    0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
-    plaziert
+   ob      Das Objekt, das genommen werden soll.
 
-SIEHE AUCH:
 
-    drop_obj(), find_obs(), give_obj(), put_obj(), /std/living/put_and_get.c
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion aufgerufen werden soll, hebt
+   den angegebenen Gegenstand (ob) auf, falls es ihm moeglich ist.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Objekt genommen wurde oder dies nicht moeglich war. (in diesem
+   Fall wird auch direkt eine Textausgabe ausgegeben)
+   0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
+   plaziert
+
+
+SIEHE AUCH
+==========
+
+   drop_obj(), find_obs(), give_obj(), put_obj(), /std/living/put_and_get.c
diff --git a/doc/lfun/pick_objects b/doc/lfun/pick_objects
index 92c083d..ac70415 100644
--- a/doc/lfun/pick_objects
+++ b/doc/lfun/pick_objects
@@ -1,39 +1,61 @@
+
 pick_objects()
+**************
 
-FUNKTION:
-    public varargs int pick_objects(string str, int flag, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    string str
-        Was aufgehoben werden soll.
-    int flag
-        Muss das Objekt irgendwo drinstecken (flag = 1), oder darf es einfach
-        so herumliegen (flag = 0)? Dieses Argument ist hauptsaechlich fuer das
-        Kommando "hole" gedacht, in der Regel braucht man es nicht anzugeben.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_PICK_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int pick_objects(string str, int flag, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC nimmt die in <str> benannten Sachen. Kann er ein
-    Objekt nicht nehmen, bekommt er eine entsprechende Fehlermeldung. Wenn
-    keine Objekte auf <str> passen, wird per _notify_fail() eine Meldung
-    gesetzt, aber noch nicht ausgegeben.
 
-RUECKGABEWERT:
-    Wenn <str> irgendwelche vorhandenen Sachen sind, 1, sonst 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Wenn die Funktion 1 zurueckgibt, heisst das noch nicht, dass der Spieler
-    etwas genommen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
-    Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.
+   /std/living/put_and_get.c
 
-SIEHE AUCH:
-    move(L), pick(L), P_PICK_MSG, find_objects(L), moved_objects(L)
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   string str
+       Was aufgehoben werden soll.
+   int flag
+       Muss das Objekt irgendwo drinstecken (flag = 1), oder darf es einfach
+       so herumliegen (flag = 0)? Dieses Argument ist hauptsaechlich fuer das
+       Kommando "hole" gedacht, in der Regel braucht man es nicht anzugeben.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_PICK_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
+
+
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC nimmt die in <str> benannten Sachen. Kann er ein
+   Objekt nicht nehmen, bekommt er eine entsprechende Fehlermeldung. Wenn
+   keine Objekte auf <str> passen, wird per _notify_fail() eine Meldung
+   gesetzt, aber noch nicht ausgegeben.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn <str> irgendwelche vorhandenen Sachen sind, 1, sonst 0.
+
+
+BEMERKUNG
+=========
+
+   Wenn die Funktion 1 zurueckgibt, heisst das noch nicht, dass der Spieler
+   etwas genommen hat! Er hat es nur versucht, d.h. auf jeden Fall eine
+   Meldung bekommen. Gibt die Funktion 0 zurueck, hat er noch keine bekommen.
+
+
+SIEHE AUCH
+==========
+
+   move(L), pick(L), P_PICK_MSG, find_objects(L), moved_objects(L)
+
 Last modified: Fri Jul 25 10:58:43 2008 by Amynthor
diff --git a/doc/lfun/present_objects b/doc/lfun/present_objects
index 15cf4be..77f31fa 100644
--- a/doc/lfun/present_objects
+++ b/doc/lfun/present_objects
@@ -1,32 +1,50 @@
+
 present_objects()
+*****************
 
-FUNKTION:
-     object *present_objects(string desc);
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     desc
-          Umschreibung des gesuchten Objektes oder "alles" oder "alle".
+   object *present_objects(string desc);
 
-BESCHREIBUNG:
-     Diese Funktion gibt die Objekte im Inneren des Behaelters zurueck, die
-     sich mit desc ansprechen lassen. In dem Fall, dass "alle(s)"
-     angefordert wird, sind das alle sichtbaren Objekte, ansonsten das erste
-     Objekt, das sich mit desc ansprechen laesst.
-     Objekte, die P_INVIS gesetzt haben, zaehlen als nicht ansprechbar, im
-     Gegensatz zu solchen Objekten, die keine P_SHORT haben.
 
-RUeCKGABEWERT:
-     Ein Array von Objekten mit den geforderten Eigenschaften.
+DEFINIERT IN
+============
 
-     Befindet sich kein Objekt im Behaelter, das sich durch desc ansprechen
-     laesst, so wird ein leeres Array zurueckgegeben.
+   /std/container/restrictions.c
 
-SIEHE AUCH:
-     locate_objects(), /std/container/restrictions.c
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   desc
+        Umschreibung des gesuchten Objektes oder "alles" oder "alle".
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion gibt die Objekte im Inneren des Behaelters zurueck, die
+   sich mit desc ansprechen lassen. In dem Fall, dass "alle(s)"
+   angefordert wird, sind das alle sichtbaren Objekte, ansonsten das erste
+   Objekt, das sich mit desc ansprechen laesst.
+   Objekte, die P_INVIS gesetzt haben, zaehlen als nicht ansprechbar, im
+   Gegensatz zu solchen Objekten, die keine P_SHORT haben.
+
+
+RUeCKGABEWERT
+=============
+
+   Ein Array von Objekten mit den geforderten Eigenschaften.
+
+   Befindet sich kein Objekt im Behaelter, das sich durch desc ansprechen
+   laesst, so wird ein leeres Array zurueckgegeben.
+
+
+SIEHE AUCH
+==========
+
+   locate_objects(), /std/container/restrictions.c
+
 03.03.2013, Zesstra
-
diff --git a/doc/lfun/put b/doc/lfun/put
index 33e7eaf..9b1d5eb 100644
--- a/doc/lfun/put
+++ b/doc/lfun/put
@@ -1,43 +1,65 @@
+
 put()
+*****
 
-FUNKTION:
-    public varargs int put(object o, object dest, mixed msg);
 
-DEFINIERT IN:
-    /std/living/put_and_get.c
+FUNKTION
+========
 
-ARGUMENTE:
-    object o
-        Das Objekt, das irgendwo hingesteckt werden soll.
-    object dest
-        Der Behaelter, in den das Objekt gesteckt werden soll.
-    mixed msg
-        Eine optionale Meldung, die anstelle von P_PUT_MSG oder der
-        Standardmeldung verwendet wird, oder -1, um die Meldung zu
-        unterdruecken.
+   public varargs int put(object o, object dest, mixed msg);
 
-BESCHREIBUNG:
-    Der Spieler oder NPC steckt das Objekt in einen Behaelter. Gibt o->move()
-    keinen positiven Wert zurueck, beispielsweise weil er das Objekt nicht
-    weggeben darf oder der Behaelter schon voll ist, bekommt er eine
-    entsprechende Fehlermeldung.
 
-RUECKGABEWERT:
-    Wenn das Bewegen geklappt hat, 1, ansonsten 0.
+DEFINIERT IN
+============
 
-BEMERKUNG:
-    Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt irgendwo
-    hinstecken lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
-    moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
-    manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+   /std/living/put_and_get.c
 
-    Die Funktion prueft nicht, ob sich das Objekt und der Behaelter ueberhaupt
-    in der Reichweite des Spielers/NPC befinden, das muss man ggf. selbst
-    ermitteln.
 
-SIEHE AUCH:
-    move(L), P_PUT_MSG, put_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
-    P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NOGET, P_NODROP
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   object o
+       Das Objekt, das irgendwo hingesteckt werden soll.
+   object dest
+       Der Behaelter, in den das Objekt gesteckt werden soll.
+   mixed msg
+       Eine optionale Meldung, die anstelle von P_PUT_MSG oder der
+       Standardmeldung verwendet wird, oder -1, um die Meldung zu
+       unterdruecken.
+
+
+BESCHREIBUNG
+============
+
+   Der Spieler oder NPC steckt das Objekt in einen Behaelter. Gibt o->move()
+   keinen positiven Wert zurueck, beispielsweise weil er das Objekt nicht
+   weggeben darf oder der Behaelter schon voll ist, bekommt er eine
+   entsprechende Fehlermeldung.
+
+
+RUECKGABEWERT
+=============
+
+   Wenn das Bewegen geklappt hat, 1, ansonsten 0.
+
+
+BEMERKUNG
+=========
+
+   Diese Funktion ist dann sinnvoll, wenn man den Spieler ein Objekt irgendwo
+   hinstecken lassen und sich nicht selbst um die Fehlerbehandlung kuemmern
+   moechte - und da unzaehlige verschiedene Dinge schiefgehen koennen und
+   manche Objekte eigene Fehlermeldungen definieren, eigentlich immer.
+
+   Die Funktion prueft nicht, ob sich das Objekt und der Behaelter ueberhaupt
+   in der Reichweite des Spielers/NPC befinden, das muss man ggf. selbst
+   ermitteln.
+
+
+SIEHE AUCH
+==========
+
+   move(L), P_PUT_MSG, put_objects(L), P_NOINSERT_MSG, P_NOLEAVE_MSG,
+   P_TOO_MANY_MSG, P_TOO_HEAVY_MSG, P_ENV_TOO_HEAVY_MSG, P_NOGET, P_NODROP
+
 Last modified: Thu Aug 28 22:21:58 2008 by Amynthor
diff --git a/doc/lfun/put_obj b/doc/lfun/put_obj
index 1f1b299..ff4dd91 100644
--- a/doc/lfun/put_obj
+++ b/doc/lfun/put_obj
@@ -1,30 +1,46 @@
+
 put_obj()
+*********
+
 
 FUNKTION
-    int put_obj(object ob, object where)
+========
 
-DEFINIERT IN:
+   int put_obj(object ob, object where)
 
-    /std/living/put_and_get.c
 
-ARGUMENTE:
+DEFINIERT IN
+============
 
-    ob      Das Objekt, das irgendwo hineingelegt werden soll.
-    where   Das (tote) Objekt, in das etwas hineingelegt werden soll.
+   /std/living/put_and_get.c
 
-BESCHREIBUNG:
 
-    Das Lebewesen, in dem diese Funktion aufgerufen werden soll, legt
-    den angegebenen Gegenstand (ob) in das angegebene Zielobjekt (where).
-    Dabei sollte es sich bei where um einen Container/Raum handeln.
-    Ist where ein Lebewesen, verwendet man besser give_obj().
+ARGUMENTE
+=========
 
-RUeCKGABEWERT:
-    1, wenn das Objekt weggelegt wurde oder dies nicht moeglich war. (in diesem
-    Fall wird auch direkt eine Textausgabe ausgegeben)
-    0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
-    plaziert
+   ob      Das Objekt, das irgendwo hineingelegt werden soll.
+   where   Das (tote) Objekt, in das etwas hineingelegt werden soll.
 
-SIEHE AUCH:
 
-    drop_obj(), find_obs(), give_obj(), pick_obj(), /std/living/put_and_get.c
+BESCHREIBUNG
+============
+
+   Das Lebewesen, in dem diese Funktion aufgerufen werden soll, legt
+   den angegebenen Gegenstand (ob) in das angegebene Zielobjekt (where).
+   Dabei sollte es sich bei where um einen Container/Raum handeln.
+   Ist where ein Lebewesen, verwendet man besser give_obj().
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Objekt weggelegt wurde oder dies nicht moeglich war. (in diesem
+   Fall wird auch direkt eine Textausgabe ausgegeben)
+   0 sonst, in diesem Fall wird in notify_fail eine passende Ausgabe
+   plaziert
+
+
+SIEHE AUCH
+==========
+
+   drop_obj(), find_obs(), give_obj(), pick_obj(), /std/living/put_and_get.c
diff --git a/doc/lfun/query_prevent_shadow b/doc/lfun/query_prevent_shadow
index 80b0c7d..2c8d2f3 100644
--- a/doc/lfun/query_prevent_shadow
+++ b/doc/lfun/query_prevent_shadow
@@ -1,34 +1,54 @@
+
+query_prevent_shadow()
+**********************
+
 query_prevent_shadow(L)
-FUNKTION:
-     varargs int query_prevent_shadow(object shadower)
 
-PARAMETER:
-     object shadower	- da Objekt, das eine Beschattung beantragt
 
-BESCHREIBUNG:
-     Diese Methode kann in Objekten definiert werden, die nicht beschattet
-     werden wollen oder anhand des Objektes shadower entscheiden wollen ob
-     sie beschattet werden wollen.
+FUNKTION
+========
 
-     Gibt die Funktion 0 zurueck, wird ein Shadow auf das Objekt erlaubt,
-     sonst schlaegt es fehl.
+   varargs int query_prevent_shadow(object shadower)
 
-BEISPIEL:
-     // generell keine Beschattung
-     int query_prevent_shadow(object who) {
-      return 1;
-     }
 
-     // Beschattung durch offizielle Objekte erlaubt
-     int query_prevent_shadow(object who) {
-      if(who && !strstr(object_name(who),"/std/player"))
-       return 0;
-      return 1;
-     }
+PARAMETER
+=========
 
-SIEHE AUCH:
-     Rechte:	     query_allow_shadow(M)
-     Generell:	     shadow(E), unshadow(E)
-     Informationen:  query_shadowing(E)
+   object shadower    - da Objekt, das eine Beschattung beantragt
 
-20. Mai 2004 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Diese Methode kann in Objekten definiert werden, die nicht beschattet
+   werden wollen oder anhand des Objektes shadower entscheiden wollen ob
+   sie beschattet werden wollen.
+
+   Gibt die Funktion 0 zurueck, wird ein Shadow auf das Objekt erlaubt,
+   sonst schlaegt es fehl.
+
+
+BEISPIEL
+========
+
+   // generell keine Beschattung
+   int query_prevent_shadow(object who) {
+    return 1;
+   }
+
+   // Beschattung durch offizielle Objekte erlaubt
+   int query_prevent_shadow(object who) {
+    if(who && !strstr(object_name(who),"/std/player"))
+     return 0;
+    return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Rechte:         query_allow_shadow(M)
+   Generell:       shadow(E), unshadow(E)
+   Informationen:  query_shadowing(E)
+
+20. Mai 2004 Gloinson
diff --git a/doc/lfun/query_real_name b/doc/lfun/query_real_name
index d7633de..1ebc69f 100644
--- a/doc/lfun/query_real_name
+++ b/doc/lfun/query_real_name
@@ -1,15 +1,26 @@
+
 query_real_name()
+*****************
 
-SYNOPSIS:
-	string query_real_name(void)
 
-DESCRIPTION:
-	The result of this_player()->query_real_name() is used as
-	default argument for the efun wizlist().
+SYNOPSIS
+========
 
-	If LOG_SHOUT was #defined in the parser at compile time, the
-	efun shout will use query_real_name() to log the shouter's
-	name.
+   string query_real_name(void)
 
-SEE ALSO:
-	shout(E), wizlist(E)
+
+DESCRIPTION
+===========
+
+   The result of this_player()->query_real_name() is used as
+   default argument for the efun wizlist().
+
+   If LOG_SHOUT was #defined in the parser at compile time, the
+   efun shout will use query_real_name() to log the shouter's
+   name.
+
+
+SEE ALSO
+========
+
+   shout(E), wizlist(E)
diff --git a/doc/lfun/query_weight_contents b/doc/lfun/query_weight_contents
index 13980f8..bd644f5 100644
--- a/doc/lfun/query_weight_contents
+++ b/doc/lfun/query_weight_contents
@@ -1,20 +1,36 @@
+
 query_weight_contents()
+***********************
 
-FUNKTION:
-     int query_weight_contents()
 
-DEFINIERT IN:
-     /std/container/restrictions.c
+FUNKTION
+========
 
-ARGUMENTE:
-     keine
+   int query_weight_contents()
 
-BESCHREIBUNG:
-     Gibt das Gewicht des Inhaltes des Behaelters zurueck (ohne
-     Beruecksichtigung von P_WEIGHT_PERCENT!)
 
-RUeCKGABEWERT:
-     Das Gewicht des Behaelterinhaltes.
+DEFINIERT IN
+============
 
-----------------------------------------------------------------------------
+   /std/container/restrictions.c
+
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Gibt das Gewicht des Inhaltes des Behaelters zurueck (ohne
+   Beruecksichtigung von P_WEIGHT_PERCENT!)
+
+
+RUeCKGABEWERT
+=============
+
+   Das Gewicht des Behaelterinhaltes.
+
 Last modified: Wed May 8 10:23:32 1996 by Wargon
diff --git a/doc/lfun/reduce_hit_points b/doc/lfun/reduce_hit_points
index 39b3368..7a1dcf0 100644
--- a/doc/lfun/reduce_hit_points
+++ b/doc/lfun/reduce_hit_points
@@ -1,43 +1,69 @@
+
 reduce_hit_points()
-FUNKTION:
-    int reduce_hit_points(int damage)
+*******************
 
-DEFINIERT IN:
-    /std/living/life.c
 
-ARGUMENTE:
-    int damage	- der zugefuegte Schaden
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Dem Lebewesen werden damage Lebenspunkte abgezogen, aber der
-    Wert wird hinterher nicht kleiner als 1 sein und das Lebewesen
-    wird dadurch nicht sterben.
+   int reduce_hit_points(int damage)
 
-RUECKGABEWERT:
-    Die verbleibenden Lebenspunkte.
 
-BEISPIELE:
-    write("Ploetzlich schiesst eine scheussliche Kreatur aus der Pfuetze "+
-          "heraus und\nbeisst Dich ins Bein, sie verschwindet so schnell, "+
-          "wie sie gekommen ist.\n");
-    this_player()->reduce_hit_points(50);
-    (Auszug aus /players/boing/friedhof/room/cat1x9)
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    damage kann auch ein negativer Wert sein, dann werden dem Lebewesen
-    diese Lebenspunkte gutgeschrieben und auf die aktuellen Lebenspunkte
-    addiert. Da dies eine Form der Heilung ist, nur nach Ruecksprache mit
-    dem Regionsmagier verwenden.
+   /std/living/life.c
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
 
-SIEHE AUCH:
-    Gegenpart:	restore_hit_points()
-    Verwandt:	do_damage(), Defend(), reduce_spell_points()
-    Props:	P_HP
-    Konzept:	heilung
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   int damage  - der zugefuegte Schaden
+
+
+BESCHREIBUNG
+============
+
+   Dem Lebewesen werden damage Lebenspunkte abgezogen, aber der
+   Wert wird hinterher nicht kleiner als 1 sein und das Lebewesen
+   wird dadurch nicht sterben.
+
+
+RUECKGABEWERT
+=============
+
+   Die verbleibenden Lebenspunkte.
+
+
+BEISPIELE
+=========
+
+   write("Ploetzlich schiesst eine scheussliche Kreatur aus der Pfuetze "+
+         "heraus und\nbeisst Dich ins Bein, sie verschwindet so schnell, "+
+         "wie sie gekommen ist.\n");
+   this_player()->reduce_hit_points(50);
+   (Auszug aus /players/boing/friedhof/room/cat1x9)
+
+
+BEMERKUNGEN
+===========
+
+   damage kann auch ein negativer Wert sein, dann werden dem Lebewesen
+   diese Lebenspunkte gutgeschrieben und auf die aktuellen Lebenspunkte
+   addiert. Da dies eine Form der Heilung ist, nur nach Ruecksprache mit
+   dem Regionsmagier verwenden.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart:  restore_hit_points()
+   Verwandt:   do_damage(), Defend(), reduce_spell_points()
+   Props:      P_HP
+   Konzept:    heilung
+
 Last modified: Sat Dec 13 01:00:47 1999 by Tilly
diff --git a/doc/lfun/reduce_spell_points b/doc/lfun/reduce_spell_points
index 13c0630..cddb7da 100644
--- a/doc/lfun/reduce_spell_points
+++ b/doc/lfun/reduce_spell_points
@@ -1,27 +1,48 @@
+
 reduce_spell_points()
-FUNKTION:
-    void reduce_spell_points(int points)
+*********************
 
-DEFINIERT IN:
-    /std/living/life.c
 
-ARGUMENTE:
-    points: Anzahl der Konzentrationspunkte die abgezogen werden sollen.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Dem Lebewesen werden points Konzentrationspunkte abgezogen. Falls
-    das Lebewesen weniger Konzentrationspunkte hat, als abgezogen werden
-    sollen, werden sie auf 0 gesetzt.
+   void reduce_spell_points(int points)
 
-BEISPIELE:
-    write("Das boese boese Monster schaut Dich grimmig an und labt sich an "
-         +"Deiner Konzentration.\n");
-    this_player()->reduce_spell_points(50);
 
-SIEHE AUCH:
-    Gegenpart:	restore_spell_points(L)
-    Verwandt:	reduce_hit_points(L), buffer_sp(L)
-    Props:	P_SP
-    Konzept:	heilung
+DEFINIERT IN
+============
 
-23.Feb.2004 Gloinson
\ No newline at end of file
+   /std/living/life.c
+
+
+ARGUMENTE
+=========
+
+   points: Anzahl der Konzentrationspunkte die abgezogen werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   Dem Lebewesen werden points Konzentrationspunkte abgezogen. Falls
+   das Lebewesen weniger Konzentrationspunkte hat, als abgezogen werden
+   sollen, werden sie auf 0 gesetzt.
+
+
+BEISPIELE
+=========
+
+   write("Das boese boese Monster schaut Dich grimmig an und labt sich an "
+        +"Deiner Konzentration.\n");
+   this_player()->reduce_spell_points(50);
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart:  restore_spell_points(L)
+   Verwandt:   reduce_hit_points(L), buffer_sp(L)
+   Props:      P_SP
+   Konzept:    heilung
+
+23.Feb.2004 Gloinson
diff --git a/doc/lfun/register_modifier b/doc/lfun/register_modifier
index 359a050..afe086c 100644
--- a/doc/lfun/register_modifier
+++ b/doc/lfun/register_modifier
@@ -1,24 +1,42 @@
+
 register_modifier()
-FUNKTION:
-     void register_modifier(object modifier)
+*******************
 
-DEFINIERT IN:
-     /std/living/attributes.c
-

-PARAMETER:

-     modifier	- Objekt mit P_X_ATTR_MOD oder P_M_ATTR_MOD

 
-BESCHREIBUNG:
-     Registriert einen Modifier im Spieler. Wird durch InsertSensitiveObject
-     beziehungsweise beim Anziehen oder Zuecken gerufen.
-     Muss nicht direkt gerufen werden. Bei Veraenderungen von Modifikatoren
-     sollte stattdessen UpdateAttributes gerufen werden.     
+FUNKTION
+========
 
-SIEHE AUCH:
-     QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),

-     SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),

-     deregister_modifier(), P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, 
-     P_ATTRIBUTES_MODIFIER,P_X_ATTR_MOD, P_M_ATTR_MOD, 
-     /std/living/attributes.c

+   void register_modifier(object modifier)
 
-13.Jun.2004, Muadib
\ No newline at end of file
+
+DEFINIERT IN
+============
+
+   /std/living/attributes.c
+
+
+PARAMETER
+=========
+
+   modifier   - Objekt mit P_X_ATTR_MOD oder P_M_ATTR_MOD
+
+
+BESCHREIBUNG
+============
+
+   Registriert einen Modifier im Spieler. Wird durch InsertSensitiveObject
+   beziehungsweise beim Anziehen oder Zuecken gerufen.
+   Muss nicht direkt gerufen werden. Bei Veraenderungen von Modifikatoren
+   sollte stattdessen UpdateAttributes gerufen werden.
+
+
+SIEHE AUCH
+==========
+
+   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
+   SetAttr(), SetAttribute(), SetRealAttribute(), UpdateAttributes(),
+   deregister_modifier(), P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS,
+   P_ATTRIBUTES_MODIFIER,P_X_ATTR_MOD, P_M_ATTR_MOD,
+   /std/living/attributes.c
+
+13.Jun.2004, Muadib
diff --git a/doc/lfun/remove b/doc/lfun/remove
index 21fc59a..914c1e1 100644
--- a/doc/lfun/remove
+++ b/doc/lfun/remove
@@ -1,34 +1,56 @@
+
 remove()
+********
 
-FUNKTION:
-     varargs int remove(int silent);
 
-DEFINIERT IN:
-     /std/thing/moving.c
-     /std/living/moving.c
-     /std/room/moving.c
+FUNKTION
+========
 
-ARGUMENTE:
-     silent
-          Falls ungleich 0, so werden beim Zerstoeren keine Meldungen
-          ausgegeben.
+   varargs int remove(int silent);
 
-BESCHREIBUNG:
-     Beim Aufruf dieser Funktion entfernt sich das Objekt selbst. Durch
-     Ueberladen dieser Funktion kann man diesen Vorgang noch durch die
-     Ausgabe von Meldungen kommentieren, oder irgendwelche Daten
-     abspeichern, oder das Zerstoeren ganz verhindern (auf diesem Weg... Mit
-     destruct() kann das Objekt immer noch direkt zerstoert werden!)
 
-RUeCKGABEWERT:
-     1, wenn sich das Objekt erfolgreich selbst zerstoert hat, sonst 0.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Nach einem erfolgreichen ::remove() gelten die selben Einschraenkungen
-     wie nach einem destruct()!
+   /std/thing/moving.c
+   /std/living/moving.c
+   /std/room/moving.c
 
-SIEHE AUCH:
-     destruct()
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   silent
+        Falls ungleich 0, so werden beim Zerstoeren keine Meldungen
+        ausgegeben.
+
+
+BESCHREIBUNG
+============
+
+   Beim Aufruf dieser Funktion entfernt sich das Objekt selbst. Durch
+   Ueberladen dieser Funktion kann man diesen Vorgang noch durch die
+   Ausgabe von Meldungen kommentieren, oder irgendwelche Daten
+   abspeichern, oder das Zerstoeren ganz verhindern (auf diesem Weg... Mit
+   destruct() kann das Objekt immer noch direkt zerstoert werden!)
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn sich das Objekt erfolgreich selbst zerstoert hat, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Nach einem erfolgreichen ::remove() gelten die selben Einschraenkungen
+   wie nach einem destruct()!
+
+
+SIEHE AUCH
+==========
+
+   destruct()
+
 Last modified: Wed May 8 10:23:40 1996 by Wargon
diff --git a/doc/lfun/remove_multiple b/doc/lfun/remove_multiple
index 6340fd1..9e60d55 100644
--- a/doc/lfun/remove_multiple
+++ b/doc/lfun/remove_multiple
@@ -1,58 +1,86 @@
+
 remove_multiple()
-FUNKTION:
-     public varargs int remove_multiple(int limit, mixed fun);
+*****************
 
-DEFINIERT IN:
-     /std/container/items.c
 
-ARGUMENTE:
-     limit: Anzahl gleicher Objekte, die verbleiben sollen.
-     fun:   Funktionsname (string) oder Closure.
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Wird diese Funktion aufgerufen, werden alle gleichen Objekte
-     (standardmaessig definiert als gleicher Ladename, gleiche
-      Kurzbeschreibung und gleiche Langbeschreibung), deren Anzahl <limit>
-     ueberschreitet, entfernt.
-     
-     Ausnahmen: Lebewesen und per AddItem() hinzugefuegte Objekte.
+   public varargs int remove_multiple(int limit, mixed fun);
 
-     Mit dem Argument <fun> lassen sich die Kriterien fuer die "Gleichheit"
-     aendern.
-     Ist <fun> ein Funktionsname, wird diese Funktion an allen in Frage
-     kommenenden Objekten im Container gerufen.
-     Ist <fun> eine Closure, werden sie fuer jedes in Frage kommende Objekt
-     einmal gerufen und ihr das Objekt uebergeben.
-     Als 'gleich' werden alle Objekte betrachtet, fuer die <fun> den gleichen
-     Wert zurueckliefert.
-     Objekte, fuer die <fun> 0 zurueckliefert, werden ignoriert.
 
-BEMERKUNGEN:
-     1) Raeume rufen remove_multiple(3) standardmaessig im reset(), jedoch
-        nur, wenn kein Spieler anwesend ist und mehr als 10 Objekte im Raum
-        sind.
-     2) remove_multipe(0) entfernt alle entfernbaren Objekte (s. Ausnahmen).
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Ein Container enthaelt 5 Fackeln. Im reset() ruft man nun
-     remove_multiple(3) auf. Anschliessend sind noch 3 Fackeln uebrig.
-     
-     Alle verbleibenden Objekte im Container sollen unterschiedliche Namen
-     haben:
-     remove_multiple(1, "name");
+   /std/container/items.c
 
-     Ein Container soll nur ein Objekt behalten, welches groesser als 70 cm
-     ist:
-     int groessen_filter(object ob) {
-       if (ob->QueryProp(P_SIZE > 70)) return 1;
-       return 0; // damit das Objekt ignoriert wird.
-       // Alternativ koennte man statt 0 auch object_name(ob) zurueckliefern,
-       // dann sind diese Objekte alle unterschiedlich.
-     }
-     ...
-     remove_multiple(1, #'groessen_filter);
 
-SIEHE AUCH:
-     reset()
+ARGUMENTE
+=========
+
+   limit: Anzahl gleicher Objekte, die verbleiben sollen.
+   fun:   Funktionsname (string) oder Closure.
+
+
+BESCHREIBUNG
+============
+
+   Wird diese Funktion aufgerufen, werden alle gleichen Objekte
+   (standardmaessig definiert als gleicher Ladename, gleiche
+    Kurzbeschreibung und gleiche Langbeschreibung), deren Anzahl <limit>
+   ueberschreitet, entfernt.
+
+
+
+   Ausnahmen: Lebewesen und per AddItem() hinzugefuegte Objekte.
+
+   Mit dem Argument <fun> lassen sich die Kriterien fuer die "Gleichheit"
+   aendern.
+   Ist <fun> ein Funktionsname, wird diese Funktion an allen in Frage
+   kommenenden Objekten im Container gerufen.
+   Ist <fun> eine Closure, werden sie fuer jedes in Frage kommende Objekt
+   einmal gerufen und ihr das Objekt uebergeben.
+   Als 'gleich' werden alle Objekte betrachtet, fuer die <fun> den gleichen
+   Wert zurueckliefert.
+   Objekte, fuer die <fun> 0 zurueckliefert, werden ignoriert.
+
+
+BEMERKUNGEN
+===========
+
+   1) Raeume rufen remove_multiple(3) standardmaessig im reset(), jedoch
+      nur, wenn kein Spieler anwesend ist und mehr als 10 Objekte im Raum
+      sind.
+   2) remove_multipe(0) entfernt alle entfernbaren Objekte (s. Ausnahmen).
+
+
+BEISPIELE
+=========
+
+   Ein Container enthaelt 5 Fackeln. Im reset() ruft man nun
+   remove_multiple(3) auf. Anschliessend sind noch 3 Fackeln uebrig.
+
+
+
+   Alle verbleibenden Objekte im Container sollen unterschiedliche Namen
+   haben:
+   remove_multiple(1, "name");
+
+   Ein Container soll nur ein Objekt behalten, welches groesser als 70 cm
+   ist:
+   int groessen_filter(object ob) {
+     if (ob->QueryProp(P_SIZE > 70)) return 1;
+     return 0; // damit das Objekt ignoriert wird.
+     // Alternativ koennte man statt 0 auch object_name(ob) zurueckliefern,
+     // dann sind diese Objekte alle unterschiedlich.
+   }
+   ...
+   remove_multiple(1, #'groessen_filter);
+
+
+SIEHE AUCH
+==========
+
+   reset()
 
 31.01.2009, Zesstra
diff --git a/doc/lfun/reset b/doc/lfun/reset
index 07a22ee..5959b3f 100644
--- a/doc/lfun/reset
+++ b/doc/lfun/reset
@@ -1,88 +1,106 @@
+
 reset()
-FUNKTION:
-     void reset();
-     protected void reset();
+*******
 
-BESCHREIBUNG:
-     reset() wird vom GameDriver in jedem Objekt aufgerufen, um dem Objekt
-     die Gelegenheit zu geben, sich wieder in einen definierten Zustand zu
-     versetzen: Raeume und Monster erzeugen per AddItem() eingefuegte und
-     zwischenzeitlich entfernte Objekte neu, Tueren schliessen sich ...
 
-     Solange das Objekt "benutzt" wird, wird reset() regelmaessig alle
-     45 Minuten (+/-15 Minuten) mit einer Aufloesung von 2s aufgerufen
-     (d.h. der Driver prueft und ruft nur alle 2 Sekunden reset() auf
-     allen Objekten).
+FUNKTION
+========
 
-     Wird eine Objekt nicht mehr "benutzt", d.h. wird an einem Objekt nicht
-     von aussen (durch call_other etc.) _nach_ einem reset() eine Methode
-     bzw. LFun gerufen, so bekommt dieses Objekt keinen weiteren reset().
+   void reset();
+   protected void reset();
 
-     Ein Funktionsaufruf am Objekt schaltet den reset() wieder ein.
-     Bei einem Objekt in einem Container waere das zB das Benutzen des
-     Containers (Hineinlegen/Herausnehmen/Hineinsehen). Das kann
-     sehr lange dauern.
 
-     Die Abschaltung kann man verhindern, indem man im reset() per call_out()
-     eine Funktion im Objekt ruft. Dies aber bitte _nur_ machen, wenn das
-     Objekt _unbedingt_ auf einen staendigen Reset angewiesen ist, auch wenn
-     es nicht "benutzt" wird.
+BESCHREIBUNG
+============
 
-     Aendern laesst sich die Zeit zwischen den Aufrufen von reset() mit
-     set_next_reset(). Die Aufloesung von 2s kann man nicht aendern.
+   reset() wird vom GameDriver in jedem Objekt aufgerufen, um dem Objekt
+   die Gelegenheit zu geben, sich wieder in einen definierten Zustand zu
+   versetzen: Raeume und Monster erzeugen per AddItem() eingefuegte und
+   zwischenzeitlich entfernte Objekte neu, Tueren schliessen sich ...
 
-BEMERKUNGEN:
-     - man kann reset() nutzen, um Ereignisse auszuloesen:
-       - es ist billiger als lange call_out()
-       - siehe Warnung bezueglich Abschalten des reset
-     - man kann reset() als protected oder static definieren, wenn man nicht
-       moechte, dass die Funktion von aussen gerufen werden kann. Dies
-       verhindert Einflussnahme von aussen, kann aber auch Debugmassnahmen
-       erschweren. Es ist aber dennoch fuer einige Objekte sinnvoll.
-     - der Driver ruft reset() unabhaengig von zusaetzlichen, "manuellen"
-       Rufen von reset()
-       - keine Rufe von reset() mit call_out() aus reset() (Callout-Ketten-
-         bildung droht), fuer solche Faelle ist set_next_reset(E) da!
-     - bei Blueprints sollte der reset() in der Regel abgeschaltet werden,
-       sofern er nicht auf wichtige Aufgaben in der BP zu tun hat:
-       protected void create() {
-         if(!clonep(ME)) {
-             set_next_reset(-1);
-             return;
-         }
-         ::create();
-         ...
+   Solange das Objekt "benutzt" wird, wird reset() regelmaessig alle
+   45 Minuten (+/-15 Minuten) mit einer Aufloesung von 2s aufgerufen
+   (d.h. der Driver prueft und ruft nur alle 2 Sekunden reset() auf
+   allen Objekten).
+
+   Wird eine Objekt nicht mehr "benutzt", d.h. wird an einem Objekt nicht
+   von aussen (durch call_other etc.) _nach_ einem reset() eine Methode
+   bzw. LFun gerufen, so bekommt dieses Objekt keinen weiteren reset().
+
+   Ein Funktionsaufruf am Objekt schaltet den reset() wieder ein.
+   Bei einem Objekt in einem Container waere das zB das Benutzen des
+   Containers (Hineinlegen/Herausnehmen/Hineinsehen). Das kann
+   sehr lange dauern.
+
+   Die Abschaltung kann man verhindern, indem man im reset() per call_out()
+   eine Funktion im Objekt ruft. Dies aber bitte _nur_ machen, wenn das
+   Objekt _unbedingt_ auf einen staendigen Reset angewiesen ist, auch wenn
+   es nicht "benutzt" wird.
+
+   Aendern laesst sich die Zeit zwischen den Aufrufen von reset() mit
+   set_next_reset(). Die Aufloesung von 2s kann man nicht aendern.
+
+
+BEMERKUNGEN
+===========
+
+   - man kann reset() nutzen, um Ereignisse auszuloesen:
+     - es ist billiger als lange call_out()
+     - siehe Warnung bezueglich Abschalten des reset
+   - man kann reset() als protected oder static definieren, wenn man nicht
+     moechte, dass die Funktion von aussen gerufen werden kann. Dies
+     verhindert Einflussnahme von aussen, kann aber auch Debugmassnahmen
+     erschweren. Es ist aber dennoch fuer einige Objekte sinnvoll.
+   - der Driver ruft reset() unabhaengig von zusaetzlichen, "manuellen"
+     Rufen von reset()
+     - keine Rufe von reset() mit call_out() aus reset() (Callout-Ketten-
+       bildung droht), fuer solche Faelle ist set_next_reset(E) da!
+   - bei Blueprints sollte der reset() in der Regel abgeschaltet werden,
+     sofern er nicht auf wichtige Aufgaben in der BP zu tun hat:
+     protected void create() {
+       if(!clonep(ME)) {
+           set_next_reset(-1);
+           return;
        }
-
-BEISPIELE:
-     // ein NPC, der bei jedem reset() schaut, ob um ihn herum bessere
-     // Ausruestung liegt als die, die er selbst gerade traegt:
-
-     ...
-     void reset() {
-       ::reset();
-
-       if(clonep(this_object()) && environment()) {
-         object o;
-         o=first_inventory(environment());
-         while(o) {
-             look_for_good_weapons_and_use_them_if_better(o);
-             o=next_inventory(o);
-         }
-       }
+       ::create();
+       ...
      }
 
-     // ein reset fuer einen Gegenstand, der vielleicht in
-     // in einem Container landet und dann weiter einen reset
-     // bekommen muss/soll
 
-     void reset() {
-       // irgend ein Code hier
-       call_other(this_object(), "???"); // einfach nur was aufrufen
+BEISPIELE
+=========
+
+   // ein NPC, der bei jedem reset() schaut, ob um ihn herum bessere
+   // Ausruestung liegt als die, die er selbst gerade traegt:
+
+   ...
+   void reset() {
+     ::reset();
+
+     if(clonep(this_object()) && environment()) {
+       object o;
+       o=first_inventory(environment());
+       while(o) {
+           look_for_good_weapons_and_use_them_if_better(o);
+           o=next_inventory(o);
+       }
      }
+   }
 
-SIEHE AUCH:
-     clean_up(), set_next_reset(E), query_next_reset(E)
-     memory
+   // ein reset fuer einen Gegenstand, der vielleicht in
+   // in einem Container landet und dann weiter einen reset
+   // bekommen muss/soll
+
+   void reset() {
+     // irgend ein Code hier
+     call_other(this_object(), "???"); // einfach nur was aufrufen
+   }
+
+
+SIEHE AUCH
+==========
+
+   clean_up(), set_next_reset(E), query_next_reset(E)
+   memory
 
 letzte Aenderung: 2009-01-14 Rumata
diff --git a/doc/lfun/restore_hit_points b/doc/lfun/restore_hit_points
index 7ae3457..b4917cf 100644
--- a/doc/lfun/restore_hit_points
+++ b/doc/lfun/restore_hit_points
@@ -1,33 +1,57 @@
+
 restore_hit_points()
-FUNKTION:
-    int restore_hit_points(int heal)
+********************
 
-ARGUMENTE:
-    int heal	- der zu heilende Betrag
 
-BESCHREIBUNG:
-    Dem Lebewesen werden heal Lebenspunkte aufgeschlagen. Die HP
-    steigen nicht ueber P_MAX_HP.
+FUNKTION
+========
 
-RUECKGABEWERT:
-    Die verbleibenden Lebenspunkte.
+   int restore_hit_points(int heal)
 
-BEISPIELE:
-    write("Ploetzlich schiesst eine scheussliche Kreatur aus der Pfuetze "+
-          "heraus und\nschleimt dich heilend voll, sie verschwindet so, "+
-          "wie sie gekommen ist.\n");
-    this_player()->restore_hit_points(50);
 
-BEMERKUNGEN:
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
-    Ansonsten bitte buffer_hp() benutzen und die Konzeptseite lesen!
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-    Gegenpart:	reduce_hit_points()
-    Verwandt:	buffer_hp(), heal_self(), restore_spell_points()
-    Props:	P_HP
-    Konzept:	heilung
+   int heal    - der zu heilende Betrag
 
-23.Feb.2004 Gloinson
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Dem Lebewesen werden heal Lebenspunkte aufgeschlagen. Die HP
+   steigen nicht ueber P_MAX_HP.
+
+
+RUECKGABEWERT
+=============
+
+   Die verbleibenden Lebenspunkte.
+
+
+BEISPIELE
+=========
+
+   write("Ploetzlich schiesst eine scheussliche Kreatur aus der Pfuetze "+
+         "heraus und\nschleimt dich heilend voll, sie verschwindet so, "+
+         "wie sie gekommen ist.\n");
+   this_player()->restore_hit_points(50);
+
+
+BEMERKUNGEN
+===========
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+   Ansonsten bitte buffer_hp() benutzen und die Konzeptseite lesen!
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart:  reduce_hit_points()
+   Verwandt:   buffer_hp(), heal_self(), restore_spell_points()
+   Props:      P_HP
+   Konzept:    heilung
+
+23.Feb.2004 Gloinson
diff --git a/doc/lfun/restore_spell_points b/doc/lfun/restore_spell_points
index 87c2a6c..2c8e42c 100644
--- a/doc/lfun/restore_spell_points
+++ b/doc/lfun/restore_spell_points
@@ -1,37 +1,61 @@
+
 restore_spell_points()
-FUNKTION:
-    void restore_spell_points(int points)
+**********************
 
-ARGUMENTE:
-    points: Anzahl der Konzentrationspunkte die gutgeschrieben werden sollen.
 
-BESCHREIBUNG:
-    Dem Lebewesen werden points Konzentrationspunkte gutgeschrieben. Falls
-    Punkte abgezogen werden sollen und das Lebewesen nicht ueber <points>
-    Konzentrationspunkte verfuegt, werden sie auf 0 gesetzt.
+FUNKTION
+========
 
-RUECKGABEWERT:
-    Keiner
+   void restore_spell_points(int points)
 
-BEISPIELE:
-    write("Das boese boese Monster schaut Dich suess an und gibt dir mehr "
-         +"Konzentration.\n");
-    this_player()->restore_spell_points(50);
 
-BEMERKUNGEN:
-    Da das Benutzen der Funktion eine Heilung bedeutet, sollte man bei
-    Verwendung auf jeden Fall Ruecksprache mit seinem RM nehmen, bzw
-    die Heilstelle bei der Heilungsbalance genehmigen lassen.
+ARGUMENTE
+=========
 
-    Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
-    dafuer eingerichteten Funktion check_and_update_timed_key realisiert
-    werden.
-    Ansonsten bitte buffer_sp() benutzen und die Konzeptseite lesen!
+   points: Anzahl der Konzentrationspunkte die gutgeschrieben werden sollen.
 
-SIEHE AUCH:
-    Gegenpart:	reduce_spell_points(L)
-    Verwandt:	buffer_sp(L), restore_hit_points(L)
-    Props:	P_SP
-    Konzept:	heilung
 
-23.Feb.2004 Gloinson
\ No newline at end of file
+BESCHREIBUNG
+============
+
+   Dem Lebewesen werden points Konzentrationspunkte gutgeschrieben. Falls
+   Punkte abgezogen werden sollen und das Lebewesen nicht ueber <points>
+   Konzentrationspunkte verfuegt, werden sie auf 0 gesetzt.
+
+
+RUECKGABEWERT
+=============
+
+   Keiner
+
+
+BEISPIELE
+=========
+
+   write("Das boese boese Monster schaut Dich suess an und gibt dir mehr "
+        +"Konzentration.\n");
+   this_player()->restore_spell_points(50);
+
+
+BEMERKUNGEN
+===========
+
+   Da das Benutzen der Funktion eine Heilung bedeutet, sollte man bei
+   Verwendung auf jeden Fall Ruecksprache mit seinem RM nehmen, bzw
+   die Heilstelle bei der Heilungsbalance genehmigen lassen.
+
+   Bei Heilstellen sollte eine evtl. Heilung des Spielers mit der eigens
+   dafuer eingerichteten Funktion check_and_update_timed_key realisiert
+   werden.
+   Ansonsten bitte buffer_sp() benutzen und die Konzeptseite lesen!
+
+
+SIEHE AUCH
+==========
+
+   Gegenpart:  reduce_spell_points(L)
+   Verwandt:   buffer_sp(L), restore_hit_points(L)
+   Props:      P_SP
+   Konzept:    heilung
+
+23.Feb.2004 Gloinson
diff --git a/doc/lfun/save_me b/doc/lfun/save_me
index d7f9e0a..cbce90a 100644
--- a/doc/lfun/save_me
+++ b/doc/lfun/save_me
@@ -1,21 +1,41 @@
+
+save_me()
+*********
+
 save_me(L)
-FUNKTION:
-    void save_me(mixed value_items)
 
-DEFINIERT IN:
-    /std/player/base.c
 
-ARGUMENTE:
-    value_items
-       Ungleich 0, wenn Wert der Gegenstaende berechnet werden soll.
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Speichert einen Spieler, seine Autoloader, bestimmt sein GuildRating
-    und berechnet/speichert auf Anforderung den Wert der getragenen
-    Gegenstaende.
+   void save_me(mixed value_items)
 
-SIEHE AUCH:
-    Props:       P_CARRIED_VALUE, P_AUTOLOADOBJ, P_LAST_LOGOUT
-    Kommandos:   save, ende
+
+DEFINIERT IN
+============
+
+   /std/player/base.c
+
+
+ARGUMENTE
+=========
+
+   value_items
+      Ungleich 0, wenn Wert der Gegenstaende berechnet werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Speichert einen Spieler, seine Autoloader, bestimmt sein GuildRating
+   und berechnet/speichert auf Anforderung den Wert der getragenen
+   Gegenstaende.
+
+
+SIEHE AUCH
+==========
+
+   Props:       P_CARRIED_VALUE, P_AUTOLOADOBJ, P_LAST_LOGOUT
+   Kommandos:   save, ende
 
 1.September 2008 Gloinson
diff --git a/doc/lfun/second_life b/doc/lfun/second_life
index b5abfd5..1c3fc8b 100644
--- a/doc/lfun/second_life
+++ b/doc/lfun/second_life
@@ -1,30 +1,52 @@
+
 second_life()
+*************
 
-FUNKTION:
-	varargs int second_life(object obj);
 
-DEFINIERT IN:
-	/std/player/life.c
+FUNKTION
+========
 
-ARGUMENTE:
-	obj
-	  Leiche des Lebewesens.
+   varargs int second_life(object obj);
 
-BESCHREIBUNG:
-        Diese Funktion wird im die() des Lebewesens aufgerufen, wenn sicher
-        ist, dass es stirbt. Ueblicherweise ist diese Funktion nur im Spieler
-        definiert und regelt EP-Verlust und dergleichen. Ein Shadow wuerde
-        diese Funktion ueberlagern, um zu verhindern, dass ein Spieler stirbt.
 
-RUeCKGABEWERT:
-        1, wenn das Lebewesen nicht stirbt, sonst 0
+DEFINIERT IN
+============
 
-BEMERKUNG:
-        Bei NPCs sollte man direkt die() ueberschreiben, wenn man nicht
-        moechte, dass sie sterben.
+   /std/player/life.c
 
-SIEHE AUCH:
-        die()
 
-----------------------------------------------------------------------------
-Last modified: 2015-Jan-19, Arathorn 
+ARGUMENTE
+=========
+
+   obj
+     Leiche des Lebewesens.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird im die() des Lebewesens aufgerufen, wenn sicher
+   ist, dass es stirbt. Ueblicherweise ist diese Funktion nur im Spieler
+   definiert und regelt EP-Verlust und dergleichen. Ein Shadow wuerde
+   diese Funktion ueberlagern, um zu verhindern, dass ein Spieler stirbt.
+
+
+RUeCKGABEWERT
+=============
+
+   1, wenn das Lebewesen nicht stirbt, sonst 0
+
+
+BEMERKUNG
+=========
+
+   Bei NPCs sollte man direkt die() ueberschreiben, wenn man nicht
+   moechte, dass sie sterben.
+
+
+SIEHE AUCH
+==========
+
+   die()
+
+Last modified: 2015-Jan-19, Arathorn
diff --git a/doc/lfun/sell_obj b/doc/lfun/sell_obj
index 8c362f1..580fd87 100644
--- a/doc/lfun/sell_obj
+++ b/doc/lfun/sell_obj
@@ -1,52 +1,59 @@
-sell_obj()

-

-Funktion:

-    static string sell_obj(object ob, int short)

-

-Definiert in:

-    /std/room/shop

-

-Argumente:

-    ob:

-      Das anzukaufende Objekt

-    short:

-      Gibt an, ob der Verkaeufer nur ein Objekt (0) oder mehrere (1) 

-      verkauft. (Verkaufe alles etc.)

-

-Beschreibung:

-    Ermittelt ob der Laden bereit ist, <ob> anzukaufen.

-

-Rueckgabewert:

-    Meldung die ausgegeben wird, wenn ein Objekt abgelehnt wird oder 0.

-

-Bemerkung:

-    Man sollte im normalfall _niemals_ einfach 0 zurueckgeben, sondern das 

-    geerbte sell_obj() aus /std/room/shop, damit beispielsweise P_NOBUY 

-    beachtet wird.

-

-Beispiel:

-    Ein Schmied, der nur Waffen ankauft:

-    

-    protected void create()

-    {

-      ...

-    }

-    

-    static string sell_obj(object ob, int short)

-    {

-      if(!ob->QueryProp(P_WEAPON_TYPE))

-      {

-        return "Ich bin nur an Waffen interessiert.";

-      }

-      return ::sell_obj(ob,short);

-    }

-

-Siehe auch:

-    Funktionen:

-      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(), 

-      QueryStorageRoom(), QueryBuyValue(), QueryBuyFact(), buy_obj()

-    Properties:

-      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME

-

-------------------------------------------------------------------------------

-Letzte Aenderung: 21.05.2014, Bugfix

+
+sell_obj()
+**********
+
+sell_obj()
+
+Funktion:
+   static string sell_obj(object ob, int short)
+
+Definiert in:
+   /std/room/shop
+
+Argumente:
+   ob:
+      Das anzukaufende Objekt
+
+   short:
+      Gibt an, ob der Verkaeufer nur ein Objekt (0) oder mehrere (1)
+      verkauft. (Verkaufe alles etc.)
+
+Beschreibung:
+   Ermittelt ob der Laden bereit ist, <ob> anzukaufen.
+
+Rueckgabewert:
+   Meldung die ausgegeben wird, wenn ein Objekt abgelehnt wird oder 0.
+
+Bemerkung:
+   Man sollte im normalfall _niemals_ einfach 0 zurueckgeben, sondern
+   das geerbte sell_obj() aus /std/room/shop, damit beispielsweise
+   P_NOBUY beachtet wird.
+
+Beispiel:
+   Ein Schmied, der nur Waffen ankauft:
+
+   protected void create() {
+
+      ...
+
+   }
+
+   static string sell_obj(object ob, int short) {
+
+      if(!ob->QueryProp(P_WEAPON_TYPE)) {
+
+         return "Ich bin nur an Waffen interessiert.";
+
+      } return ::sell_obj(ob,short);
+
+   }
+
+Siehe auch:
+   Funktionen:
+      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
+      QueryStorageRoom(), QueryBuyValue(), QueryBuyFact(), buy_obj()
+
+   Properties:
+      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME
+
+Letzte Aenderung: 21.05.2014, Bugfix
diff --git a/doc/lfun/set_object_next_reset b/doc/lfun/set_object_next_reset
index 68dfa2f..9b77a9e 100644
--- a/doc/lfun/set_object_next_reset
+++ b/doc/lfun/set_object_next_reset
@@ -1,25 +1,41 @@
-set_object_next_reset()
 
-FUNKTION:
-	int set_object_next_reset(object ob, int zeit );
+set_object_next_reset()
+***********************
+
+
+FUNKTION
+========
+
+   int set_object_next_reset(object ob, int zeit );
 
 DEFINIERT IN: /secure/debug.c
 
-ARGUMENTE:
-	ob: Das Objekt, dess Reset gesetzt werden soll.
-  zeit: Zeit bis zum naechsten Reset von ob.
 
-FUNKTION:
-  Die Funktion ruft letztendlich set_next_reset() in <ob> auf und setzt daher
-  dessen Resetzeit auf einen neuen Wert. Dies ist zu Debugzwecken gedacht.
+ARGUMENTE
+=========
 
-  Die Benutzung ist nur fuer EM+ moeglich.
+         ob: Das Objekt, dess Reset gesetzt werden soll.
+   zeit: Zeit bis zum naechsten Reset von ob.
 
-RUECKGABEWERT:
-	Gibt den Rueckgabewert des set_next_reset()-Aufrufs in <ob> zurueck.
 
-SIEHE AUCH:
-	set_next_reset(E)
+FUNKTION
+========
+
+   Die Funktion ruft letztendlich set_next_reset() in <ob> auf und setzt daher
+   dessen Resetzeit auf einen neuen Wert. Dies ist zu Debugzwecken gedacht.
+
+   Die Benutzung ist nur fuer EM+ moeglich.
+
+
+RUECKGABEWERT
+=============
+
+   Gibt den Rueckgabewert des set_next_reset()-Aufrufs in <ob> zurueck.
+
+
+SIEHE AUCH
+==========
+
+   set_next_reset(E)
 
 10.10.2007, Zesstra
-
diff --git a/doc/lfun/shoot_dam b/doc/lfun/shoot_dam
index 5d82d02..f66be19 100644
--- a/doc/lfun/shoot_dam
+++ b/doc/lfun/shoot_dam
@@ -1,40 +1,63 @@
+
 shoot_dam()
+***********
 
-FUNKTION:
-    static int shoot_dam(mapping shoot)
 
-DEFINIERT IN:
-    /std/ranged_weapon.c
+FUNKTION
+========
 
-ARGUMENTE:
-    mapping shoot - Schussdaten
+   static int shoot_dam(mapping shoot)
 
-BESCHREIBUNG:
-    Erhaelt von /std/ranged_weapon::cmd_shoot() die Schussdaten und berechnet
-    den Schaden der Waffe, basierend auf den P_SHOOTING_WC von Waffe und
-    Munition sowie der Geschicklichkeit des Schuetzen. HitFuncs der Munition
-    und Skills werden hier ebenfalls beruecksichtigt.
 
-RUECKGABEWERT:
-    Schaden. Ebenfalls in 'shoot' unter SI_SKILLDAMAGE aktualisiert.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    'shoot' enthaelt normalerweise folgende Eintraege:
-    * Key P_WEAPON:       die Schusswaffe
-    * Key P_WEAPON_TYPE:  P_AMMUNITION, also die Munitions-ID
-    * Key P_STRETCH_TIME: P_STRETCH_TIME der Waffe
-    * Key P_WC:           P_SHOOTING_WC der Waffe
-    * Key P_SHOOTING_WC:  P_SHOOTING_WC der Munition
-    * Key P_AMMUNITION:   Munitionsobjekt (eventuell Unit)
-    * Key SI_ENEMY:       gueltigen Gegner
-    * Key SI_SKILLDAMAGE_TYPE:  Schaden (aus P_DAM_TYPE der Munition)
-    * Key SI_SKILLDAMAGE_MSG/2: Munitionsname
+   /std/ranged_weapon.c
 
-SIEHE AUCH:
-    Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
-    Methoden:  FindRangedTarget(L), cmd_shoot(L)
-    Skills:    UseSkill(L), SkillResTransfer(L)
-    Attribute: QueryAttribute
-    Sonstiges: fernwaffen, HitFunc
 
-28.Jul 2014 Gloinson
\ No newline at end of file
+ARGUMENTE
+=========
+
+   mapping shoot - Schussdaten
+
+
+BESCHREIBUNG
+============
+
+   Erhaelt von /std/ranged_weapon::cmd_shoot() die Schussdaten und berechnet
+   den Schaden der Waffe, basierend auf den P_SHOOTING_WC von Waffe und
+   Munition sowie der Geschicklichkeit des Schuetzen. HitFuncs der Munition
+   und Skills werden hier ebenfalls beruecksichtigt.
+
+
+RUECKGABEWERT
+=============
+
+   Schaden. Ebenfalls in 'shoot' unter SI_SKILLDAMAGE aktualisiert.
+
+
+BEMERKUNGEN
+===========
+
+   'shoot' enthaelt normalerweise folgende Eintraege:
+   * Key P_WEAPON:       die Schusswaffe
+   * Key P_WEAPON_TYPE:  P_AMMUNITION, also die Munitions-ID
+   * Key P_STRETCH_TIME: P_STRETCH_TIME der Waffe
+   * Key P_WC:           P_SHOOTING_WC der Waffe
+   * Key P_SHOOTING_WC:  P_SHOOTING_WC der Munition
+   * Key P_AMMUNITION:   Munitionsobjekt (eventuell Unit)
+   * Key SI_ENEMY:       gueltigen Gegner
+   * Key SI_SKILLDAMAGE_TYPE:  Schaden (aus P_DAM_TYPE der Munition)
+   * Key SI_SKILLDAMAGE_MSG/2: Munitionsname
+
+
+SIEHE AUCH
+==========
+
+   Generell:  P_AMMUNITION, P_SHOOTING_WC, P_STRETCH_TIME
+   Methoden:  FindRangedTarget(L), cmd_shoot(L)
+   Skills:    UseSkill(L), SkillResTransfer(L)
+   Attribute: QueryAttribute
+   Sonstiges: fernwaffen, HitFunc
+
+28.Jul 2014 Gloinson
diff --git a/doc/lfun/short b/doc/lfun/short
index a9734c2..f7bb169 100644
--- a/doc/lfun/short
+++ b/doc/lfun/short
@@ -1,31 +1,53 @@
+
 short()
-FUNKTION:
-     public varargs string short();
+*******
 
-DEFINIERT IN:
-     /std/thing/description.c
 
-ARGUMENTE:
-     keine
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Inhalt der Property P_SHORT wird ausgewertet, mit ".\n"
-     abgeschlossen und zurueckgegeben.
+   public varargs string short();
 
-RUeCKGABEWERT:
-     Die Kurzbeschreibung als String oder 0, falls das Objekt unsichtbar
-     ist.
 
-BEMERKUNGEN:
-     Durch Ueberladen von short() lassen sich noch weitere Eigenschaften des
-     Objektes zeigen. Fackeln zeigen zum Beispiel an, ob sie brennen,
-     Ruestungen, ob sie angezogen sind und Waffen, ob sie gezueckt sind.
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     Aehnliches:	long()
-     Properties:	P_SHORT, P_INVIS
-     Sonstiges:		make_invlist()
+   /std/thing/description.c
 
-----------------------------------------------------------------------------
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Der Inhalt der Property P_SHORT wird ausgewertet, mit ".\n"
+   abgeschlossen und zurueckgegeben.
+
+
+RUeCKGABEWERT
+=============
+
+   Die Kurzbeschreibung als String oder 0, falls das Objekt unsichtbar
+   ist.
+
+
+BEMERKUNGEN
+===========
+
+   Durch Ueberladen von short() lassen sich noch weitere Eigenschaften des
+   Objektes zeigen. Fackeln zeigen zum Beispiel an, ob sie brennen,
+   Ruestungen, ob sie angezogen sind und Waffen, ob sie gezueckt sind.
+
+
+SIEHE AUCH
+==========
+
+   Aehnliches:        long()
+   Properties:        P_SHORT, P_INVIS
+   Sonstiges:         make_invlist()
+
 20.01.2015, Zesstra
-
diff --git a/doc/lfun/show_notify b/doc/lfun/show_notify
index ae09adc..0ce99ac 100644
--- a/doc/lfun/show_notify
+++ b/doc/lfun/show_notify
@@ -1,44 +1,73 @@
+
+show_notify()
+*************
+
 give_notify()
-FUNKTION:
-     void show_notify(object obj)
 
-DEFINIERT IN:
-     /std/living/put_and_get.c
 
-ARGUMENTE:
-     obj - dem Lebewesen gezeigtes Objekt
+FUNKTION
+========
 
-RUeCKGABEWERT:
-     keiner
+   void show_notify(object obj)
 
-BESCHREIBUNG:
-     Diese Funktion wird automatisch immer dann aufgerufen, wenn einem
-     Lebewesen (welches kein Spielercharakter ist) ein Objekt gezeigt wird.
-     Dies funktioniert nur dann, wenn der Standardbefehl der Spielershell
-     verwendet wird ("zeige <name> <gegenstand>"). Selbstgebautes "zeige"
-     funktioniert nicht.
 
-BEISPIEL:
-     Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
-     Item als Beweis der Erfuellung einer bestimmten Aufgabe vorgezeigt
-     wird. Folgendermassen kann dies realisiert werden:
+DEFINIERT IN
+============
 
-     void quest_ok(object obj) { ...
-       // z.B. Vernichtung des Questobjektes und Questtexte
-       // Questbelohnung und Questanerkennung, etc.
-     }
+   /std/living/put_and_get.c
 
-     void show_notify(object obj) {
-       if(obj->id("\nquestitem")) // Ist das das geforderte Questobjekt?
-         quest_ok(obj);
-     }
 
-BEMERKUNGEN:
-     Da es nur um das Vorzeigen von Gegenstaenden geht, die nicht den 
-     Besitzer wechseln, sind Mechanismen wie P_REJECT in diesem Fall 
-     nicht erforderlich.
+ARGUMENTE
+=========
 
-SIEHE AUCH:
-     give_notify(), /std/npc/put_and_get.c, /std/living/put_and_get.c
+   obj - dem Lebewesen gezeigtes Objekt
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird automatisch immer dann aufgerufen, wenn einem
+   Lebewesen (welches kein Spielercharakter ist) ein Objekt gezeigt wird.
+   Dies funktioniert nur dann, wenn der Standardbefehl der Spielershell
+   verwendet wird ("zeige <name> <gegenstand>"). Selbstgebautes "zeige"
+   funktioniert nicht.
+
+
+BEISPIEL
+========
+
+   Oftmals will man in Quests erreichen, dass einem NPC ein bestimmtes
+   Item als Beweis der Erfuellung einer bestimmten Aufgabe vorgezeigt
+   wird. Folgendermassen kann dies realisiert werden:
+
+   void quest_ok(object obj) { ...
+     // z.B. Vernichtung des Questobjektes und Questtexte
+     // Questbelohnung und Questanerkennung, etc.
+   }
+
+   void show_notify(object obj) {
+     if(obj->id("\nquestitem")) // Ist das das geforderte Questobjekt?
+       quest_ok(obj);
+   }
+
+
+BEMERKUNGEN
+===========
+
+   Da es nur um das Vorzeigen von Gegenstaenden geht, die nicht den
+   Besitzer wechseln, sind Mechanismen wie P_REJECT in diesem Fall
+   nicht erforderlich.
+
+
+SIEHE AUCH
+==========
+
+   give_notify(), /std/npc/put_and_get.c, /std/living/put_and_get.c
 
 22. Oktober 2013 Arathorn
diff --git a/doc/lfun/spellbook/AddSpell b/doc/lfun/spellbook/AddSpell
index 78686d1..65f0df8 100644
--- a/doc/lfun/spellbook/AddSpell
+++ b/doc/lfun/spellbook/AddSpell
@@ -1,54 +1,78 @@
+
 AddSpell()
-FUNKTION:
-    varargs int AddSpell(string verb, int kosten, mixed ski) 
+**********
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    string verb     Name des Spells
-    int kosten      normale Kosten (Grundkosten)
-    mixed ski       Skillmapping mit allen Eintraegen zum Spell
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Addiert einen Eintrag fuer den Spell im Spellbook. Wenn dieser
-    Spell direkt vom Spieler (SI_SPELLBOOK) oder (normalerweise)
-    ueber ein Gildenobjekt aufgerufen wird, wird das Mapping auf
-    die Skillinformationen aus Spieler und Gilde addiert und
-    beeinflusst damit den Aufruf der letztlichen Spellfunktion.
+   varargs int AddSpell(string verb, int kosten, mixed ski)
 
-BEMERKUNGEN:
-    Siehe das Verhalten von QuerySpell (gilde) zum Zusammenfuegen
-    der AddSpell-Informationen aus Gilde und Spellbook. Relevant
-    zB fuer Lernrestriktionen.
 
-BEISPIEL:
-    AddSpell("kampfschrei", 30,
-         ([SI_SKILLRESTR_LEARN:([P_LEVEL:13]),
-           SI_MAGIC_TYPE: ({MT_PSYCHO}),
-           SI_SPELL:      ([
-             SP_NAME: "Kampfschrei",
-             SP_SHOW_DAMAGE:
-               ({({ -1, "Dir geschieht jedoch nichts.",
-                   "@WEM1 geschieht jedoch nichts.",
-                   "@WEM1 geschieht jedoch nichts." }),
-                 ({  0, "Du kannst darueber aber nur lachen.",
-                   "@WER1 kann darueber aber nur lachen.",
-                   "@WER1 kann darueber aber nur lachen." }),
-                 ({ 10, "Dir droehnen die Ohren.",
-                   "@WEM1 droehnen die Ohren.",
-                   "@WEM1 droehnen die Ohren." })
-               })])
-         ]));
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-    Spellbook Lernen: Learn, SpellSuccess, Erfolg, Misserfolg
-    * Verwalten:      QuerySpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   string verb     Name des Spells
+   int kosten      normale Kosten (Grundkosten)
+   mixed ski       Skillmapping mit allen Eintraegen zum Spell
+
+
+BESCHREIBUNG
+============
+
+   Addiert einen Eintrag fuer den Spell im Spellbook. Wenn dieser
+   Spell direkt vom Spieler (SI_SPELLBOOK) oder (normalerweise)
+   ueber ein Gildenobjekt aufgerufen wird, wird das Mapping auf
+   die Skillinformationen aus Spieler und Gilde addiert und
+   beeinflusst damit den Aufruf der letztlichen Spellfunktion.
+
+
+BEMERKUNGEN
+===========
+
+   Siehe das Verhalten von QuerySpell (gilde) zum Zusammenfuegen
+   der AddSpell-Informationen aus Gilde und Spellbook. Relevant
+   zB fuer Lernrestriktionen.
+
+
+BEISPIEL
+========
+
+   AddSpell("kampfschrei", 30,
+        ([SI_SKILLRESTR_LEARN:([P_LEVEL:13]),
+          SI_MAGIC_TYPE: ({MT_PSYCHO}),
+          SI_SPELL:      ([
+            SP_NAME: "Kampfschrei",
+            SP_SHOW_DAMAGE:
+              ({({ -1, "Dir geschieht jedoch nichts.",
+                  "@WEM1 geschieht jedoch nichts.",
+                  "@WEM1 geschieht jedoch nichts." }),
+                ({  0, "Du kannst darueber aber nur lachen.",
+                  "@WER1 kann darueber aber nur lachen.",
+                  "@WER1 kann darueber aber nur lachen." }),
+                ({ 10, "Dir droehnen die Ohren.",
+                  "@WEM1 droehnen die Ohren.",
+                  "@WEM1 droehnen die Ohren." })
+              })])
+        ]));
+
+
+SIEHE AUCH
+==========
+
+   Spellbook Lernen: Learn, SpellSuccess, Erfolg, Misserfolg
+   * Verwalten:      QuerySpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
 
 5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/Erfolg b/doc/lfun/spellbook/Erfolg
index 625bf4f..6338e6d 100644
--- a/doc/lfun/spellbook/Erfolg
+++ b/doc/lfun/spellbook/Erfolg
@@ -1,28 +1,46 @@
+
 Erfolg()
-FUNKTION:
-    void Erfolg(object caster, string spell, mapping sinfo)
+********
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    object caster    Spell sprechender Spieler
-    string spell     Spellname
-    mapping sinfo    Spell-Info-Mapping mit allen Informationen
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Wird bei Erfolg eines Spells gerufen. Ruft SpellInform() am
-    Environment.
+   void Erfolg(object caster, string spell, mapping sinfo)
 
-SIEHE AUCH:
-    Sonstiges:        SpellInform
-    Spellbook Lernen: Learn, SpellSuccess, Misserfolg
-    * Verwalten:      AddSpell, QuerySpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   object caster    Spell sprechender Spieler
+   string spell     Spellname
+   mapping sinfo    Spell-Info-Mapping mit allen Informationen
+
+
+BESCHREIBUNG
+============
+
+   Wird bei Erfolg eines Spells gerufen. Ruft SpellInform() am
+   Environment.
+
+
+SIEHE AUCH
+==========
+
+   Sonstiges:        SpellInform
+   Spellbook Lernen: Learn, SpellSuccess, Misserfolg
+   * Verwalten:      AddSpell, QuerySpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/Learn b/doc/lfun/spellbook/Learn
index 4e2431a..8de112e 100644
--- a/doc/lfun/spellbook/Learn
+++ b/doc/lfun/spellbook/Learn
@@ -1,33 +1,54 @@
+
 Learn()
-FUNKTION:
-    void Learn(object caster, string spell, mapping sinfo)
+*******
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    object caster   Derjenige, der den Spruch spricht.
-    string spell    Der gesprochene Spell
-    mapping sinfo   Mapping mit allen moeglichen Informationen zum Spell
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Diese Funktion wird von der Funktion "Misserfolg" aus dem 
-    Spellbook aufgerufen. Hier lernt der Spieler den Spruch, der 
-    nicht geglueckt ist.
+   void Learn(object caster, string spell, mapping sinfo)
 
-BEMERKUNGEN:
-    Kann auch ueberschrieben werden, wenn man komplexe Lern-Aenderungen
-    vornehmen will. Andere Attribute sind ueber SI_LEARN_ATTRIBUTE
-    setzbar.
 
-SIEHE AUCH:
-    Spellbook Lernen: SpellSuccess, Erfolg, Misserfolg
-    * Verwalten:      AddSpell, QuerySpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
+DEFINIERT IN
+============
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   object caster   Derjenige, der den Spruch spricht.
+   string spell    Der gesprochene Spell
+   mapping sinfo   Mapping mit allen moeglichen Informationen zum Spell
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird von der Funktion "Misserfolg" aus dem
+   Spellbook aufgerufen. Hier lernt der Spieler den Spruch, der
+   nicht geglueckt ist.
+
+
+BEMERKUNGEN
+===========
+
+   Kann auch ueberschrieben werden, wenn man komplexe Lern-Aenderungen
+   vornehmen will. Andere Attribute sind ueber SI_LEARN_ATTRIBUTE
+   setzbar.
+
+
+SIEHE AUCH
+==========
+
+   Spellbook Lernen: SpellSuccess, Erfolg, Misserfolg
+   * Verwalten:      AddSpell, QuerySpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/Misserfolg b/doc/lfun/spellbook/Misserfolg
index 7ad530b..5ffe8de 100644
--- a/doc/lfun/spellbook/Misserfolg
+++ b/doc/lfun/spellbook/Misserfolg
@@ -1,53 +1,78 @@
+
 Misserfolg()
-FUNKTION:
-    void Misserfolg(object caster, string spell, mapping sinfo) 
+************
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    object caster    Spell sprechender Spieler
-    string spell     Spellname
-    mapping sinfo    Spell-Info-Mapping mit allen Informationen
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Wird bei Misserfolg eines Spells im Spellbook aufgerufen und
-    ruft die Lernfunktion Learn() nach einer Fehlermeldung.
-    
-    Kann ueberschrieben werden, um die Meldungen anzupassen.
+   void Misserfolg(object caster, string spell, mapping sinfo)
 
-BEISPIEL:
-    // Misserfolge im Klerus mit angepassten Meldungen
-    void Misserfolg(object caster, string spell, mapping sinfo) {
-      switch(spell) {
-        case "begrabe":
-          tell_object(caster, BS(
-            "Du begraebst Deine Hoffnungen, dass Du diese Anrufung jemals "
-            "perfekt beherrschen wirst."));
-          tell_room(environment(caster),
-            caster->Name(WER)+" tritt die Leiche lustlos.\n", ({caster}));
-          break;
-        case "blitz":
-        [...]
-      }
-        
-      int old_abil = sinfo[SI_SKILLABILITY];
-      Learn(caster, spell, sinfo);
-      int new_abil = caster->QuerySkillAbility(spell);
-      if (old_abil < new_abil)
-        tell_object(caster, "Die Goetter schenken Dir eine Erleuchtung.\n");
-      else
-        tell_object(caster, "Leider lernst Du nicht aus Deinem Fehler.\n"); 
-    }
 
-SIEHE AUCH:
-    Spellbook Lernen: Learn, SpellSuccess, Erfolg
-    * Verwalten:      AddSpell, QuerySpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
+DEFINIERT IN
+============
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   object caster    Spell sprechender Spieler
+   string spell     Spellname
+   mapping sinfo    Spell-Info-Mapping mit allen Informationen
+
+
+BESCHREIBUNG
+============
+
+   Wird bei Misserfolg eines Spells im Spellbook aufgerufen und
+   ruft die Lernfunktion Learn() nach einer Fehlermeldung.
+
+
+
+   Kann ueberschrieben werden, um die Meldungen anzupassen.
+
+
+BEISPIEL
+========
+
+   // Misserfolge im Klerus mit angepassten Meldungen
+   void Misserfolg(object caster, string spell, mapping sinfo) {
+     switch(spell) {
+       case "begrabe":
+         tell_object(caster, BS(
+           "Du begraebst Deine Hoffnungen, dass Du diese Anrufung jemals "
+           "perfekt beherrschen wirst."));
+         tell_room(environment(caster),
+           caster->Name(WER)+" tritt die Leiche lustlos.\n", ({caster}));
+         break;
+       case "blitz":
+       [...]
+     }
+
+
+
+     int old_abil = sinfo[SI_SKILLABILITY];
+     Learn(caster, spell, sinfo);
+     int new_abil = caster->QuerySkillAbility(spell);
+     if (old_abil < new_abil)
+       tell_object(caster, "Die Goetter schenken Dir eine Erleuchtung.\n");
+     else
+       tell_object(caster, "Leider lernst Du nicht aus Deinem Fehler.\n");
+   }
+
+
+SIEHE AUCH
+==========
+
+   Spellbook Lernen: Learn, SpellSuccess, Erfolg
+   * Verwalten:      AddSpell, QuerySpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/QuerySpell b/doc/lfun/spellbook/QuerySpell
index 0cadec2..963d30c 100644
--- a/doc/lfun/spellbook/QuerySpell
+++ b/doc/lfun/spellbook/QuerySpell
@@ -1,26 +1,46 @@
+
 QuerySpell()
-FUNKTION:
-    mapping QuerySpell(string spell)
+************
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    string spell    Name des Spells
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Gibt das Spellmapping aus P_SB_SPELLS fuer diesen Spell zurueck.
-    
-    Hier enthaelt QuerySpell nur die Spellbook-Informationen.
+   mapping QuerySpell(string spell)
 
-SIEHE AUCH:
-    Spellbook Lernen: Learn, SpellSuccess, Erfolg, Misserfolg
-    * Verwalten:      AddSpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+DEFINIERT IN
+============
+
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   string spell    Name des Spells
+
+
+BESCHREIBUNG
+============
+
+   Gibt das Spellmapping aus P_SB_SPELLS fuer diesen Spell zurueck.
+
+
+
+   Hier enthaelt QuerySpell nur die Spellbook-Informationen.
+
+
+SIEHE AUCH
+==========
+
+   Spellbook Lernen: Learn, SpellSuccess, Erfolg, Misserfolg
+   * Verwalten:      AddSpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/SpellSuccess b/doc/lfun/spellbook/SpellSuccess
index ec44884..564c948 100644
--- a/doc/lfun/spellbook/SpellSuccess
+++ b/doc/lfun/spellbook/SpellSuccess
@@ -1,31 +1,52 @@
+
 SpellSuccess()
-FUNKTION:
-    int SpellSuccess(object caster, mapping sinfo)
+**************
 
-DEFINIERT IN:
-    /std/spellbook.c
 
-ARGUMENTE:
-    object caster    Spell sprechender Spieler
-    mapping sinfo    Spell-Info-Mapping mit allen Informationen
+FUNKTION
+========
 
-BESCHREIBUNG:
-    Berechnet den Erfolg der Anwendung eines Spells aus seiner
-    SI_SKILLABILITY und dem Skill SK_CASTING im Spieler. Laesst
-    den Spieler bei besonders gutem Gelingen SK_CASTING lernen.
+   int SpellSuccess(object caster, mapping sinfo)
 
-BEMERKUNGEN:
-    SK_CASTING muss fuer die SK_CASTING-Boni beherrscht werden.
-    Das ist zB im Klerus ab bestimmtem Level der Fall.
 
-SIEHE AUCH:
-    Spellbook Lernen: Learn, Erfolg, Misserfolg
-    * Verwalten:      AddSpell, QuerySpell
-    * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
-                      TryGlobalAttackSpell
-    * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
-    Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
-    * Nutzung:        UseSpell, UseSkill
-    * sonstig:        spruchermuedung, skill_info_liste
+DEFINIERT IN
+============
 
-5. Okt 2011 Gloinson
\ No newline at end of file
+   /std/spellbook.c
+
+
+ARGUMENTE
+=========
+
+   object caster    Spell sprechender Spieler
+   mapping sinfo    Spell-Info-Mapping mit allen Informationen
+
+
+BESCHREIBUNG
+============
+
+   Berechnet den Erfolg der Anwendung eines Spells aus seiner
+   SI_SKILLABILITY und dem Skill SK_CASTING im Spieler. Laesst
+   den Spieler bei besonders gutem Gelingen SK_CASTING lernen.
+
+
+BEMERKUNGEN
+===========
+
+   SK_CASTING muss fuer die SK_CASTING-Boni beherrscht werden.
+   Das ist zB im Klerus ab bestimmtem Level der Fall.
+
+
+SIEHE AUCH
+==========
+
+   Spellbook Lernen: Learn, Erfolg, Misserfolg
+   * Verwalten:      AddSpell, QuerySpell
+   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
+                     TryGlobalAttackSpell
+   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
+   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
+   * Nutzung:        UseSpell, UseSkill
+   * sonstig:        spruchermuedung, skill_info_liste
+
+5. Okt 2011 Gloinson
diff --git a/doc/lfun/spellbook/TryAttackSpell b/doc/lfun/spellbook/TryAttackSpell
index 76d75b8..d66684e 100644
--- a/doc/lfun/spellbook/TryAttackSpell
+++ b/doc/lfun/spellbook/TryAttackSpell
@@ -1,48 +1,57 @@
-** gilden-doku
- o TryAttackSpell(opfer,schaden,typen,is_spell,caster,info)
-   Versucht den Angriffs-Spruch auf den Gegner anzuwenden. Die
-   mittleren 4 Werte sind die, die auch bei Defend uebergeben werden.
-   Dabei wird die Abwehrfaehigkeit des Gegners gegen Magie und das
-   Skill-Attribut SA_DAMAGE automatisch beruecksichtigt. 
 
-FUNKTION:
+TryAttackSpell()
+****************
+
+** gilden-doku
+   o TryAttackSpell(opfer,schaden,typen,is_spell,caster,info)
+      Versucht den Angriffs-Spruch auf den Gegner anzuwenden. Die
+      mittleren 4 Werte sind die, die auch bei Defend uebergeben
+      werden. Dabei wird die Abwehrfaehigkeit des Gegners gegen Magie
+      und das Skill-Attribut SA_DAMAGE automatisch beruecksichtigt.
+
+
+FUNKTION
+========
 
 int TryAttackSpell(object victim, int damage, mixed dtypes,
-                   mixed is_spell, object caster, mapping sinfo)
+   mixed is_spell, object caster, mapping sinfo)
 
 
-ARGUMENTE:
+ARGUMENTE
+=========
 
-        victim   : Das arme Opfer.
-        damage   : Der Schaden.
-        dtypes   : Die Schadensarten.
-	      is_spell : Ist es ein Spell? Werden noch Spezielle Parameter 
-	           uebergeben (als mapping) ?
-        caster   : Derjenige, der den Spruch spricht.
-        sinfo    : Mapping mit allen moeglichen Informationen zum Spell
+   victim   : Das arme Opfer.
+   damage   : Der Schaden.
+   dtypes   : Die Schadensarten.
+         is_spell : Ist es ein Spell? Werden noch Spezielle Parameter
+              uebergeben (als mapping) ?
+   caster   : Derjenige, der den Spruch spricht.
+   sinfo    : Mapping mit allen moeglichen Informationen zum Spell
 
 
-BESCHREIBUNG:
+BESCHREIBUNG
+============
 
-	Diese Funktion wird vom Spellbook aufgerufen, wenn der Spieler
-	einen Angriffsspell gemacht hat und damit Schaden anrichten will.
+   Diese Funktion wird vom Spellbook aufgerufen, wenn der Spieler
+   einen Angriffsspell gemacht hat und damit Schaden anrichten will.
 
 
-RUECKGABEWERT:
+RUECKGABEWERT
+=============
 
-	Der Wert, der vom Defend() des Gegners zurueckgeliefert wird.
+   Der Wert, der vom Defend() des Gegners zurueckgeliefert wird.
 
 
-BEMERKUNGEN:
+BEMERKUNGEN
+===========
 
-	Zu erst wird ueberprueft, ob das Ziel ueberhaupt angreifbar ist. Dies
-	verhindert das ueben von Spells an unangreifbaren NPCs.
-	Als naechstes wird die Faehigkeit, Spells abzuwehren ueberprueft.
-	Falls beide Abfragen ok sind, wird Defend aufgerufen.
-
+   Zu erst wird ueberprueft, ob das Ziel ueberhaupt angreifbar ist. Dies
+   verhindert das ueben von Spells an unangreifbaren NPCs.
+   Als naechstes wird die Faehigkeit, Spells abzuwehren ueberprueft.
+   Falls beide Abfragen ok sind, wird Defend aufgerufen.
 
 Siehe auch:
 
 TryDefaultAttackSpell (to be written)
-------------------------------------------------------------------------------
+
 07.10.2007, Zesstra
diff --git a/doc/lfun/trigger_sensitive_attack b/doc/lfun/trigger_sensitive_attack
index 129b38c..f290fc8 100644
--- a/doc/lfun/trigger_sensitive_attack
+++ b/doc/lfun/trigger_sensitive_attack
@@ -1,75 +1,97 @@
+
 trigger_sensitive_attack()
+**************************
 
-FUNKTION:
-     varargs void trigger_sensitive_attack(object enemy, string key, int
-     dam, mixed spell, mixed *options);
 
-DEFINIERT IN:
-     eigenen sensitiven Objekten, wird aufgerufen von
-     /std/living/inventory.c
+FUNKTION
+========
 
-ARGUMENTE:
-     enemy
-          Der Gegner, der die Aktion ausgeloest hat.
-     key
-          Der ausloesende Schadenstyp.
-     dam
-          Der angerichtete Schaden.
-     spell
-          Wie bei Defend().
-     options
-          Array mit den in P_SENSITIVE angegebenen Optionen fuer diese
-          Aktion.
+   varargs void trigger_sensitive_attack(object enemy, string key, int
+   dam, mixed spell, mixed *options);
 
-BESCHREIBUNG:
-     Wenn der bei einem Angriff zugefuegte Schaden den in P_SENSITIVE
-     angegebenen Grenzwert uebersteigt sowie der als Schluessel angegebene
-     Schadenstyp in den Schaedenstypen des Angriffes vorkommt, wird diese
-     Funktion aufgerufen und kann entsprechend reagieren.
 
-RUeCKGABEWERT:
-     keiner
+DEFINIERT IN
+============
 
-BEISPIELE:
-     Eine Fackel, die sich bei Feuerattacken selbst entzuendet und bei
-     Wasserattacken verloescht, koennte man wie folgt implementieren:
+   eigenen sensitiven Objekten, wird aufgerufen von
+   /std/living/inventory.c
 
-     inherit "/std/lightsource.c"
 
-     #include <properties.h>
-     #include <sensitive.h>
-     #include <combat.h>
+ARGUMENTE
+=========
 
-     create()
-     {
-       ::create();
+   enemy
+        Der Gegner, der die Aktion ausgeloest hat.
+   key
+        Der ausloesende Schadenstyp.
+   dam
+        Der angerichtete Schaden.
+   spell
+        Wie bei Defend().
+   options
+        Array mit den in P_SENSITIVE angegebenen Optionen fuer diese
+        Aktion.
 
-       SetProp(...); // die ueblichen Eigenschaften definieren
 
-       SetProp(P_SENSITIVE,
-           //  Ereignis          Key       Grenze (keine Optionen)
-         ({ ({ SENSITIVE_ATTACK, DT_FIRE,  100 }),
-            ({ SENSITIVE_ATTACK, DT_WATER, 100 }) }) );
+BESCHREIBUNG
+============
+
+   Wenn der bei einem Angriff zugefuegte Schaden den in P_SENSITIVE
+   angegebenen Grenzwert uebersteigt sowie der als Schluessel angegebene
+   Schadenstyp in den Schaedenstypen des Angriffes vorkommt, wird diese
+   Funktion aufgerufen und kann entsprechend reagieren.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   Eine Fackel, die sich bei Feuerattacken selbst entzuendet und bei
+   Wasserattacken verloescht, koennte man wie folgt implementieren:
+
+   inherit "/std/lightsource.c"
+
+   #include <properties.h>
+   #include <sensitive.h>
+   #include <combat.h>
+
+   create()
+   {
+     ::create();
+
+     SetProp(...); // die ueblichen Eigenschaften definieren
+
+     SetProp(P_SENSITIVE,
+         //  Ereignis          Key       Grenze (keine Optionen)
+       ({ ({ SENSITIVE_ATTACK, DT_FIRE,  100 }),
+          ({ SENSITIVE_ATTACK, DT_WATER, 100 }) }) );
+   }
+
+   varargs void
+   trigger_sensitive_attack(object enemy, string key,
+                            int dam, mixed spell)
+   {
+     // Es soll nicht verschwiegen werden, dass das Entzuenden und
+     // Loeschen einer Lichtquelle so leider nicht funktioniert...
+     if (key == DT_FIRE && !QueryProp(P_LIGHTED)) {
+       SetProp(P_LIGHTED, 1);
+       tell_object(environment(), "Die Fackel faengt Feuer.\n");
      }
-
-     varargs void
-     trigger_sensitive_attack(object enemy, string key,
-                              int dam, mixed spell)
-     {
-       // Es soll nicht verschwiegen werden, dass das Entzuenden und
-       // Loeschen einer Lichtquelle so leider nicht funktioniert...
-       if (key == DT_FIRE && !QueryProp(P_LIGHTED)) {
-         SetProp(P_LIGHTED, 1);
-         tell_object(environment(), "Die Fackel faengt Feuer.\n");
-       }
-       else if (key == DT_WATER && QueryProp(P_LIGHTED)) {
-         SetProp(P_LIGHTED, 0);
-         tell_object(environment(), "Die Fackel verlischt.\n");
-       }
+     else if (key == DT_WATER && QueryProp(P_LIGHTED)) {
+       SetProp(P_LIGHTED, 0);
+       tell_object(environment(), "Die Fackel verlischt.\n");
      }
+   }
 
-SIEHE AUCH:
-     trigger_sensitive_inv(), sensitive Objekte
 
-----------------------------------------------------------------------------
+SIEHE AUCH
+==========
+
+   trigger_sensitive_inv(), sensitive Objekte
+
 Last modified: Sun May 19 15:56:25 1996 by Wargon
diff --git a/doc/lfun/trigger_sensitive_inv b/doc/lfun/trigger_sensitive_inv
index a417ebe..27e26fb 100644
--- a/doc/lfun/trigger_sensitive_inv
+++ b/doc/lfun/trigger_sensitive_inv
@@ -1,40 +1,61 @@
+
 trigger_sensitive_inv()
+***********************
 
-FUNKTION:
-     varargs void trigger_sensitive_inv(object ob, string key, int wert,
-     mixed *optionen1, mixed *optionen2);
 
-DEFINIERT IN:
-     eigenen Objekten, wird aufgerufen von /std/container/inventory.c
+FUNKTION
+========
 
-ARGUMENTE:
-     ob
-          Das ausloesende Objekt
-     key
-          Der Schluessel, der die Aktion ausloeste.
-     wert
-          Der Grenzwert des ausloesenden Objektes.
-     optionen1
-          Die Optionen des ausloesenden Objektes.
-     optionen2
-          Die Optionen des reagierenden Objektes.
+   varargs void trigger_sensitive_inv(object ob, string key, int wert,
+   mixed *optionen1, mixed *optionen2);
 
-BESCHREIBUNG:
-     Diese Funktion wird in Objekten des sensitiven Typs SENSITIVE_INVENTORY
-     aufgerufen, wenn sie in Kontakt mit Objekten des Typs
-     SENSITIVE_INVENTORY_TRIGGER treten, die den gleichen Schluessel
-     aufweisen und einen hoeheren Grenzwert haben.
 
-     Anhand der Parameter koennen dann die noetigen Aktionen ausgeloest
-     werden.
+DEFINIERT IN
+============
 
-RUeCKGABEWERT:
-     keiner
+   eigenen Objekten, wird aufgerufen von /std/container/inventory.c
 
-BEISPIELE:
 
-SIEHE AUCH:
-     trigger_sensitive_attack(), sensitive Objekte
+ARGUMENTE
+=========
 
-----------------------------------------------------------------------------
+   ob
+        Das ausloesende Objekt
+   key
+        Der Schluessel, der die Aktion ausloeste.
+   wert
+        Der Grenzwert des ausloesenden Objektes.
+   optionen1
+        Die Optionen des ausloesenden Objektes.
+   optionen2
+        Die Optionen des reagierenden Objektes.
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird in Objekten des sensitiven Typs SENSITIVE_INVENTORY
+   aufgerufen, wenn sie in Kontakt mit Objekten des Typs
+   SENSITIVE_INVENTORY_TRIGGER treten, die den gleichen Schluessel
+   aufweisen und einen hoeheren Grenzwert haben.
+
+   Anhand der Parameter koennen dann die noetigen Aktionen ausgeloest
+   werden.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+
+SIEHE AUCH
+==========
+
+   trigger_sensitive_attack(), sensitive Objekte
+
 Last modified: Wed May 8 10:26:10 1996 by Wargon
diff --git a/doc/lfun/wield_me b/doc/lfun/wield_me
index 427504e..d1aa842 100644
--- a/doc/lfun/wield_me
+++ b/doc/lfun/wield_me
@@ -1,10 +1,17 @@
+
 wield_me()
+**********
 
-BEMERKUNGEN:
-     wield_me wurde durch DoWield ersetzt.
 
-SIEHE AUCH:
-     DoWieldFunc(), /std/weapon.c
+BEMERKUNGEN
+===========
 
-----------------------------------------------------------------------------
+   wield_me wurde durch DoWield ersetzt.
+
+
+SIEHE AUCH
+==========
+
+   DoWieldFunc(), /std/weapon.c
+
 Last modified: Wed Apr 08 10:25:00 2004 by Muadib