diff --git a/doc/sphinx/lfun/AddCmd.rst b/doc/sphinx/lfun/AddCmd.rst
index ba298eb..001778f 100644
--- a/doc/sphinx/lfun/AddCmd.rst
+++ b/doc/sphinx/lfun/AddCmd.rst
@@ -1,25 +1,19 @@
 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
@@ -41,14 +35,14 @@
 
 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
+
+    * 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
+    * innerhalb der Funktionen koennen Fehlermeldungen fuer den totalen
       Misserfolg des Kommandos mit notify_fail gesetzt werden
       (anstatt "Wie bitte?")
 
@@ -57,140 +51,153 @@
     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.
+    
+    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.
+    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
+    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.
+.. code-block:: pike
 
-      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")
+    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.
+    
+    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.
+    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!)
+    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?"
+    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)
+    Es koennen in den Fehlermeldungen folgende Platzhalter benutzt
+    werden:
 
-      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!
+    * @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).
+
+    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?");
+    Beispiel:
+      1. AddCmd("klett","fun",1);
+      2. AddCmd("kletter|klettere&hoch",#'fun2,"Wohin klettern?");
 
-        a) "klett"
-        b) "kletter"
-        c) "klettere hoch"
+      a) "klett"
+      b) "kletter"
+      c) "klettere hoch"
 
-        Ausgefuehrte Funktion bei: 1a, 1b, 1c; 2c
-       (1 wuerde also immer ausgefuehrt)
-        Fehlermeldung bei: 2b ("Wohin klettern?")
+      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
+    * 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
+    * 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
+    * 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
+      
+      ** 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
+    * @PUT_GET_XXX kosten sehr viel Auswertungszeit
 
 BEISPIELE (SIEHE AUCH ADDCMD_BSP):
+----------------------------------
+
+.. code-block:: pike
+
     // 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
+      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
@@ -225,9 +232,9 @@
            "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)
