diff --git a/doc/lfun/FindGroup b/doc/lfun/FindGroup
index ec1c693..112c76f 100644
--- a/doc/lfun/FindGroup
+++ b/doc/lfun/FindGroup
@@ -1,76 +1,98 @@
+
 FindGroup()
+***********
 
-FUNKTION:
-    object*FindGroup(object pl,int who);
 
-DEFINIERT IN:
-    /std/spellbook.c
+FUNKTION
+========
 
-ARGUMENTE:
-    pl
-      Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
-      gefunden werden sollen.
-    who
-      Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
-      sollen (Konstanten definiert in '/sys/new_skills.h'):
-        FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
-        FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
-        FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+   object*FindGroup(object pl,int who);
 
-RUeCKGABEWERT:
-    Array mit gefundenen Lebewesen
 
-BESCHREIBUNG:
-    Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man
-    per Hand ein Opfer auswaehlen moechte, laesst sich mittels der
-    Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in
-    der Umgebung von <pl> zu finden sind.
-    Je nachdem, was man denn genau vorhat, kann man sich von der
-    Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen
-    lassen.
-    Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt
-    man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die
-    Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte
-    schliesslich FG_ALL.
-    Bei der Auswahl gelten folgende Regeln:
-      (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich
-          feindlich gesinnt.
-      (2) Teammitglieder von <pl> sind grundsaetzlich freundlich
-          gesinnt.
-      (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs
-          gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property
-          P_FRIEND den Spielern zuordnen.
-      (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich
-          eine feindliche Einstellung gegenueber haben, sofern die NPCs
-          nicht die Property P_FRIEND gesetzt haben
-           (was standardmaessig natuerlich nicht der Fall ist).
-      (5) Netztote werden nicht erkannt.
-      (6) Magier werden nicht erkannt, wenn sie unsichtbar sind.
-      (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn
-          <pl> mit ihm im Kampf ist.
-      (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche
-          eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK
-          gesetzt haben, nicht erkannt.
-    Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler
-    hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs.
+DEFINIERT IN
+============
 
-BEISPIELE:
-    Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter
-    Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei
-    an, dass sich die freundlich gesinnten Lebewesen des Gegners auch
-    naeher bei ihm befinden als die feindlich gesinnten:
-      victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster);
-      victimList=FindGroup(victim,FG_FRIENDS);
-      map_objects(victimList,
-                      "Defend",
-                      100,
-                      DT_FIRE,
-                      ([SP_SHOW_DAMAGE:1]),
-                      caster);
-    Hiermit trifft man also auch die Freunde von <victim>.
+   /std/spellbook.c
 
-SIEHE AUCH:
-    FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
 
-----------------------------------------------------------------------------
+ARGUMENTE
+=========
+
+   pl
+     Lebewesen, von welchem die Freunde oder Feinde in der Umgebung
+     gefunden werden sollen.
+   who
+     Flag, welches anzeigt, ob Freunde oder Feinde gefunden werden
+     sollen (Konstanten definiert in '/sys/new_skills.h'):
+       FG_ENEMIES - (Wert -1) Feinde sollen gefunden werden
+       FG_FRIENDS - (Wert  1) Freunde sollen gefunden werden
+       FG_ALL     - (Wert  0) alle Lebewesen sollen gefunden werden
+
+
+RUeCKGABEWERT
+=============
+
+   Array mit gefundenen Lebewesen
+
+
+BESCHREIBUNG
+============
+
+   Bei Spells, die sich auf mehrere Gegner auswirken oder bei denen man
+   per Hand ein Opfer auswaehlen moechte, laesst sich mittels der
+   Funktion FindGroup() eine Liste von Lebewesen ermitteln, welche in
+   der Umgebung von <pl> zu finden sind.
+   Je nachdem, was man denn genau vorhat, kann man sich von der
+   Funktion freundlich oder feindlich gesinnte Lebewesen heraussuchen
+   lassen.
+   Will man die freundlich gesinnten Lebewesen ermitteln, so uebergibt
+   man in <who> die Konstante FG_FRIENDS, bei feindlich gesinnten die
+   Konstante FG_ENEMIES, und wenn man alle Lebewesen bekommen moechte
+   schliesslich FG_ALL.
+   Bei der Auswahl gelten folgende Regeln:
+     (1) Lebewesen, mit denen <pl> im Kampf ist, sind grundsaetzlich
+         feindlich gesinnt.
+     (2) Teammitglieder von <pl> sind grundsaetzlich freundlich
+         gesinnt.
+     (3) Spieler sind gegenueber Spielern freundlich gesinnt, NPCs
+         gegenueber NPCs. NPCs kann man hierbei mit Hilfe der Property
+         P_FRIEND den Spielern zuordnen.
+     (4) Daraus folgt natuerlich, dass Spieler und NPCs grundsaetzlich
+         eine feindliche Einstellung gegenueber haben, sofern die NPCs
+         nicht die Property P_FRIEND gesetzt haben
+          (was standardmaessig natuerlich nicht der Fall ist).
+     (5) Netztote werden nicht erkannt.
+     (6) Magier werden nicht erkannt, wenn sie unsichtbar sind.
+     (7) Ein Magier wird als feindlich gesinnt nur dann erkannt, wenn
+         <pl> mit ihm im Kampf ist.
+     (6) Sucht man feindlich gesinnte Lebewesen, so werden die, welche
+         eine von den Properties P_NO_ATTACK oder P_NO_GLOBAL_ATTACK
+         gesetzt haben, nicht erkannt.
+   Die Property P_FRIEND sollte man in NPCs setzen, die dem Spieler
+   hilfreich beiseite stehen, z.B. vom Spieler beschworene HilfsNPCs.
+
+
+BEISPIELE
+=========
+
+   Wenn man einen Feuerball nach jemandem wirft, so trifft dieser unter
+   Umstaenden auch andere, wenn er gross genug ist. Man nimmt hierbei
+   an, dass sich die freundlich gesinnten Lebewesen des Gegners auch
+   naeher bei ihm befinden als die feindlich gesinnten:
+     victim->Defend(500,DT_FIRE,([SP_SHOW_DAMAGE:1]),caster);
+     victimList=FindGroup(victim,FG_FRIENDS);
+     map_objects(victimList,
+                     "Defend",
+                     100,
+                     DT_FIRE,
+                     ([SP_SHOW_DAMAGE:1]),
+                     caster);
+   Hiermit trifft man also auch die Freunde von <victim>.
+
+
+SIEHE AUCH
+==========
+
+   FindGroupN(), FindGroupP(), P_FRIEND, P_NO_GLOBAL_ATTACK
+
 Last modified: Mon Jan 28 21:45:00 2002 by Tiamak
