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
