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
