diff --git a/doc/sphinx/lfun/Defend.rst b/doc/sphinx/lfun/Defend.rst
index 71f76d6..e9ff992 100644
--- a/doc/sphinx/lfun/Defend.rst
+++ b/doc/sphinx/lfun/Defend.rst
@@ -3,172 +3,166 @@
 
 FUNKTION
 --------
-::
 
-     public int Defend(int dam, string|string* dam_type, int|mapping spell, 
-                        object enemy)
+  public int Defend(int dam, string|string* dam_type, int|mapping spell, 
+    object enemy)
 
 DEFINIERT IN
 ------------
-::
 
-     /std/living/combat
+  /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
+  int dam
+    Initiale Staerke des Angriffs (10 dam ~ 1 HP)
+  string* dam_type
+    Art des Schadens, der angerichtet werden soll
+    Muss ein Array von Schadenstypen sein, alte Objekte uebergeben hier
+    manchmal strings.
+  mapping spell
+    Mapping mit zusaetzlichen Informationen zum Angriff(Siehe unten)
+    Alte Objekte uebergeben manchmal einen Integer (0 fuer Physikalischen
+    Angriff, 1 fuer Zauber.
+  object enemy
+    Der Feind/Schadenverursacher
 
 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.
+  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.
+  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.
+    - 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_GLOBAL_ATTACK ------------ 0/1
+      1 bei Flaechenspells
+    - 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.
+      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.
+      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()
+  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.
+  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.
+  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.
+  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}), ([SP_PHYSICAL_ATTACK:1]), 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}), ([SP_PHYSICAL_ATTACK:0]), 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]),
+    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
+  Angriff: :doc:`Attack`, :doc:`../props/P_NO_ATTACK`, :doc:`InsertEnemy`
+  Schaden:   :doc:`../props/P_ENABLE_IN_ATTACK_OUT`, 
+    :doc:`../props/P_LAST_MOVE`, :doc:`do_damage`,
+    :doc:`reduce_hit_points`
+  Schutz:    :doc:`../props/P_DEFENDERS`, :doc:`InformDefend`,
+    :doc:`DefendOther`, :doc:`../props/P_ARMOURS`,
+    :doc:`../props/P_AC`, :doc:`../props/P_DEFEND_FUNC`,
+    :doc:`QueryDefend`, :doc:`../props/P_BODY`
+  Daten:     :doc:`../props/P_LAST_COMBAT_TIME`,
+    :doc:`../props/P_LAST_DAMTYPES`,
+    :doc:`../props/P_LAST_DAMTIME`, :doc:`../props/P_LAST_DAMAGE`,
+    :doc:`../props/P_DAMAGE_MSG`
+  Resistenz: :doc:`../props/P_RESISTANCE_STRENGTHS`,
+    :doc:`CheckResistance`
+  Sonstiges: :doc:`CheckSensitiveAttack`,
+    :doc:`InternalModifyDefend`,
+    :doc:`UseSkill`,
+    :doc:`DefendInfo`
 
-15.09.2010, Zesstra
-
+Letzte Aenderung: 29.12.2017, Bugfix
