diff --git a/doc/lfun/HitFunc b/doc/lfun/HitFunc
index 3d22075..2fb9b79 100644
--- a/doc/lfun/HitFunc
+++ b/doc/lfun/HitFunc
@@ -1,68 +1,94 @@
+
 HitFunc()
+*********
 
-FUNKTION:
-     int HitFunc(object enemy);
 
-DEFINIERT IN:
-     eigenen Objekten, fuer /std/weapon/combat.c
+FUNKTION
+========
 
-ARGUMENTE:
-     enemy
-          Der Gegner, gegen den die Waffe eingesetzt wird.
+   int HitFunc(object enemy);
 
-BESCHREIBUNG:
-     Die Waffe kann anhand des Gegners enemy entscheiden, ob ein
-     Schadensbonus oder auch ein Schadensmalus wirksam wird. Dieser Bonus
-     wird zu dem normalen Schaden der Waffe hinzuaddiert.
 
-RUeCKGABEWERT:
-     Der Schadensbonus bzw. der Abschlag.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     Wenn durch den Bonus die Genehmigungsgrenzen der Balance
-     ueberschritten werden koennen, muss man seinen Regionsmagier und
-     die Objekt-Balance konsultieren!
+   eigenen Objekten, fuer /std/weapon/combat.c
 
-     Werte der HitFunc sollten immer ueber ein random() zurueckgegeben 
-     werden!
 
-     Diese Funktion sollte die Waffe nicht zerstoeren! Falls ihr im Kampf eine
-     Waffe (ggf. in Abhaengigkeit vom Gegner) zerstoeren wollt, nutzt dazu
-     bitte TakeFlaw(). 
+ARGUMENTE
+=========
 
-BEISPIELE:
-     Eine Waffe, die gegen Orks besonders gut wirkt:
+   enemy
+        Der Gegner, gegen den die Waffe eingesetzt wird.
 
-     inherit "std/weapon";
 
-     #include <properties.h>
-     #include <combat.h>
-     #include <class.h>
+BESCHREIBUNG
+============
 
-     create(){
-       if(!clonep(this_object())) {
-           set_next_reset(-1);
-           return;
-       }
-       ::create();
-       /* 
-       zig SetProp's, um die Waffe zu konfigurieren
-       HitFunc() ist in der Waffe selbst definiert 
-       */
-       SetProp(P_HIT_FUNC, this_object());
+   Die Waffe kann anhand des Gegners enemy entscheiden, ob ein
+   Schadensbonus oder auch ein Schadensmalus wirksam wird. Dieser Bonus
+   wird zu dem normalen Schaden der Waffe hinzuaddiert.
+
+
+RUeCKGABEWERT
+=============
+
+   Der Schadensbonus bzw. der Abschlag.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn durch den Bonus die Genehmigungsgrenzen der Balance
+   ueberschritten werden koennen, muss man seinen Regionsmagier und
+   die Objekt-Balance konsultieren!
+
+   Werte der HitFunc sollten immer ueber ein random() zurueckgegeben
+   werden!
+
+   Diese Funktion sollte die Waffe nicht zerstoeren! Falls ihr im Kampf eine
+   Waffe (ggf. in Abhaengigkeit vom Gegner) zerstoeren wollt, nutzt dazu
+   bitte TakeFlaw().
+
+
+BEISPIELE
+=========
+
+   Eine Waffe, die gegen Orks besonders gut wirkt:
+
+   inherit "std/weapon";
+
+   #include <properties.h>
+   #include <combat.h>
+   #include <class.h>
+
+   create(){
+     if(!clonep(this_object())) {
+         set_next_reset(-1);
+         return;
      }
+     ::create();
+     /*
+     zig SetProp's, um die Waffe zu konfigurieren
+     HitFunc() ist in der Waffe selbst definiert
+     */
+     SetProp(P_HIT_FUNC, this_object());
+   }
 
-     int HitFunc(object enemy)
-     {
-       /* laesst sich der Gegner als Ork ansprechen? */
-       if (enemy->is_class_member(CL_ORC))
-         return random(10+random(50)); /* Ja => Schaden erhoehen */
+   int HitFunc(object enemy)
+   {
+     /* laesst sich der Gegner als Ork ansprechen? */
+     if (enemy->is_class_member(CL_ORC))
+       return random(10+random(50)); /* Ja => Schaden erhoehen */
 
-       return 0;   /* ansonsten keinen zusaetzlichen Schaden anrichten */
-     }
+     return 0;   /* ansonsten keinen zusaetzlichen Schaden anrichten */
+   }
 
-SIEHE AUCH:
-     QueryDefend(), /std/weapon.c
-     TakeFlaw()
-----------------------------------------------------------------------------
+
+SIEHE AUCH
+==========
+
+   QueryDefend(), /std/weapon.c
+   TakeFlaw()
+
 11.08.2007, Zesstra
