diff --git a/doc/sphinx/lfun/AddSpell.rst b/doc/sphinx/lfun/AddSpell.rst
index c4f8dbb..e7eeb42 100644
--- a/doc/sphinx/lfun/AddSpell.rst
+++ b/doc/sphinx/lfun/AddSpell.rst
@@ -3,7 +3,6 @@
 
 FUNKTION
 --------
-::
 
   varargs int AddSpell(int rate, int damage,
     string|<int|spell>* TextForEnemy, string|<int|string>* TextForOthers,
@@ -11,169 +10,180 @@
 
 DEFINIERT IN
 ------------
-::
 
-    /std/npc/combat.c
+  /std/npc/combat.c
 
 ARGUMENTE
 ---------
-::
 
-    rate          - Relative Haeufigkeit der Anwendung (*),
-                    muss >= 0 sein
-    damage        - Der Schadenswert fuer Defend(),
-                    muss >= 0 sein. Bei Schaden von 0 MUSS eine Funktion
-                    eingetragen werden.
-    TextForEnemy  - Text, den der Feind erhalten soll
-                    String <text> oder
-                    Array der Form ({<text>,<messagetype>})
-                    (Siehe ReceiveMsg())
-    TextForOthers - Text, den andere im Raum erhalten sollen
-                    String <text> oder
-                    Array der Form ({<text>,<messagetype>})
-                    (Siehe ReceiveMsg())
-    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"
+  rate          - Relative Haeufigkeit der Anwendung (*),
+                  muss >= 0 sein
+
+  damage        - Der Schadenswert fuer Defend(),
+                  muss > 0 sein
+
+  TextForEnemy  - Text, den der Feind erhalten soll
+                  String <text> oder
+                  Array der Form ({<text>,<messagetype>})
+                  (Siehe ReceiveMsg())
+
+  TextForOthers - Text, den andere im Raum erhalten sollen
+                  String <text> oder
+                  Array der Form ({<text>,<messagetype>})
+                  (Siehe ReceiveMsg())
+
+  dam_type      - Schadenstyp(en) fuer Defend(),
+                  (Default: ({DT_MAGIC}) fuer Magische und ({DT_BLUDGEON})
+                  fuer physikalische Angriffe)
+
+  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"
 
 BESCHREIBUNG
 ------------
-::
 
-    Ermoeglicht einfache Angriffs-Zaubersprueche fuer NPCs. Das Ausfuehren von
-    Spells verursacht bei dem NPC keine KP-Kosten.
+  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.
+  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.
 
-    (*) 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.
+  (*) 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.
 
-    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.
+  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.
+  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.
 
-    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.
+  In der von AddSpell gerufenen Methode "func" koennen speziellere
+  Sachen mit dem aktuellen Feind angestellt werden. Die Methode
+  muss im selben Objekt definiert sein, sofern der Funktionsname und
+  keine Closure uebergeben wird.
 
-    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.
+  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.
+  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
 ---------
-::
+code-block::
 
-    // #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",
+  // #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",
+  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");
+           ({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%)
+  (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");
-      }
+code-block::
+
+  // 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
-    }
+code-block::
 
-    // #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]));
+  // 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
+  }
 
-    // #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:
+  // #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.
 
-    // 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(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]));
 
-    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]));
+  // #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:
 
-    // 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.
+  // 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
+  Sonstiges: :doc:`SpellAttack`, :doc:`SpellDefend`, :doc:`Defend`, 
+  :doc:`QueryDefend`, :doc:`SelectEnemy`, :doc:`ReceiveMsg`, 
+  :doc:`../sefun/replace_personal`
+
+  Properties: :doc:`../props/P_DISABLE_ATTACK`, :doc:`../props/P_SPELLRATE`, :doc:`../props/P_AGGRESSIVE`
+
 
 Letzte Aenderung: 15.02.2018, Bugfix
