diff --git a/doc/props/obsolete/P_BALANCED_WEAPON b/doc/props/obsolete/P_BALANCED_WEAPON
index e785f2c..83a2fc4 100644
--- a/doc/props/obsolete/P_BALANCED_WEAPON
+++ b/doc/props/obsolete/P_BALANCED_WEAPON
@@ -1,35 +1,59 @@
-********************* UNGENUTZTE PROPERTY *****************************
-* Diese Property wird von der Mudlib NICHT ausgewertet und kann       *
-* als veraltet gelten.                                                *
-* Momentan ist auch keine Gilde bekannt, die mehr macht, als sie      *
-* auszugeben.                                                         *
-***********************************************************************
-NAME:
-        P_BALANCED_WEAPON  "balanced_weapon"
 
-DEFINIERT IN:
-        /sys/weapon.h
+P_BALANCED_WEAPON
+*****************
 
-BESCHREIBUNG:
-        Die Property gibt an, ob eine Waffe ausbalanciert ist oder nicht.
-        Die beiden moeglichen Werte sind logischerweise:
+********************* UNGENUTZTE PROPERTY
+***************************** * Diese Property wird von der Mudlib
+NICHT ausgewertet und kann       * * als veraltet gelten.
+* * Momentan ist auch keine Gilde bekannt, die mehr macht, als sie
+* * auszugeben.
+* *******************************************************************
+****
 
-                WP_BALANCED       balanciert
-                WP_UNBALANCED     unbalanciert
 
-        Die WP_* sind ebenfalls in <weapon.h> definiert.
+NAME
+====
 
-BEISPIELE:
-        a) Eine ausbalancierte Waffe ist z.B. ein Kampfstab.
+   P_BALANCED_WEAPON  "balanced_weapon"
 
-            SetProp(P_BALANCED_WEAPON,WP_BALANCED);
 
-        b) Eine nicht ausbalancierte Waffe ist z.B. eine Keule.
+DEFINIERT IN
+============
 
-            SetProp(P_BALANCED_WEAPON,WP_UNBALANCED);
+   /sys/weapon.h
 
-SIEHE AUCH:
-        P_TECHNIQUE, /std/weapon/combat.c
 
-LETZTE AeNDERUNG:
+BESCHREIBUNG
+============
+
+   Die Property gibt an, ob eine Waffe ausbalanciert ist oder nicht.
+   Die beiden moeglichen Werte sind logischerweise:
+
+           WP_BALANCED       balanciert
+           WP_UNBALANCED     unbalanciert
+
+   Die WP_* sind ebenfalls in <weapon.h> definiert.
+
+
+BEISPIELE
+=========
+
+   a) Eine ausbalancierte Waffe ist z.B. ein Kampfstab.
+
+       SetProp(P_BALANCED_WEAPON,WP_BALANCED);
+
+   b) Eine nicht ausbalancierte Waffe ist z.B. eine Keule.
+
+       SetProp(P_BALANCED_WEAPON,WP_UNBALANCED);
+
+
+SIEHE AUCH
+==========
+
+   P_TECHNIQUE, /std/weapon/combat.c
+
+
+LETZTE AeNDERUNG
+================
+
 15.02.2009, Zesstra
diff --git a/doc/props/obsolete/P_DEFAULT_INFO b/doc/props/obsolete/P_DEFAULT_INFO
index 814928c..9a16169 100644
--- a/doc/props/obsolete/P_DEFAULT_INFO
+++ b/doc/props/obsolete/P_DEFAULT_INFO
@@ -1,28 +1,50 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
 
-NAME:
-    P_DEFAULT_INFO                "default_info"
+P_DEFAULT_INFO
+**************
 
-DEFINIERT IN:
-    /sys/properties.h
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+*************************************
 
-BESCHREIBUNG:
-    Default-Antwort eines Npc, wenn er auf das Schluesselwort durch den
-    Spieler kein AddInfo parat hat.
 
-BEMERKUNG:
-    Diese Property sollte nicht mehr benutzt werden. Stattdessen bitte
-    AddInfo(DEFAULT_INFO,...) verwenden.
-    Dem in dieser Prop angegeben String wird immer der Name des Npc
-    vorausgestellt. Will man dies verhindern, muss man sie ueberschreiben.
+NAME
+====
 
-BEISPIEL:
-    SetProp(P_DEFAULT_INFO,"bohrt gelangweilt in der Nase.\n");
+   P_DEFAULT_INFO                "default_info"
 
-SIEHE AUCH:
-    AddInfo
 
-----------------------------------------------------------------------------
+DEFINIERT IN
+============
+
+   /sys/properties.h
+
+
+BESCHREIBUNG
+============
+
+   Default-Antwort eines Npc, wenn er auf das Schluesselwort durch den
+   Spieler kein AddInfo parat hat.
+
+
+BEMERKUNG
+=========
+
+   Diese Property sollte nicht mehr benutzt werden. Stattdessen bitte
+   AddInfo(DEFAULT_INFO,...) verwenden.
+   Dem in dieser Prop angegeben String wird immer der Name des Npc
+   vorausgestellt. Will man dies verhindern, muss man sie ueberschreiben.
+
+
+BEISPIEL
+========
+
+   SetProp(P_DEFAULT_INFO,"bohrt gelangweilt in der Nase.\n");
+
+
+SIEHE AUCH
+==========
+
+   AddInfo
+
 17.08.2010, Zesstra
diff --git a/doc/props/obsolete/P_EXTRA_LOOK b/doc/props/obsolete/P_EXTRA_LOOK
deleted file mode 100644
index 3777a25..0000000
--- a/doc/props/obsolete/P_EXTRA_LOOK
+++ /dev/null
@@ -1,35 +0,0 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte benutzt sie NICHT mehr, sondern  *
-* stattdessden AddExtraLook().                                        *
-***********************************************************************
-
-NAME:
-	P_EXTRA_LOOK			"extralook"
-
-DEFINIERT IN:
-	/sys/living/description.h
-
-BESCHREIBUNG:
-	Diese Property enthaelt einen String. Sie wird entweder in Lebewesen
-	direkt oder in Objekten gesetzt wird, die im Besitz von Lebewesen
-	sein koennen.
-	Diese Strings erscheinen dann zusaetzlich in der Langbeschreibung
-	des Lebewesens bzw. des Besitzers (wenn das Objekt sich direkt im
-	 Lebewesen befindet, jedoch nicht in einem Behaelter im Lebewesen).
-	Fuer den Zeilenumbruch muss man selbst sorgen.
-
-BEISPIEL:
-	Ein Spieler hat eine Pfeife im Mund. In dieser Pfeife setzt man z.B.
-	in der Funktion zum Pfeife Rauchen folgendes:
-	  SetProp(P_EXTRA_LOOK,break_string(
-	 this_player()->Name(WER)+" ist ganz umnebelt.",78);
-
-BEMERKUNG:
-  BITTE NICHT MEHR BENUTZEN!
-
-SIEHE AUCH:
-	long(), /std/living/description.c, /std/player/base.c
-  AddExtraLook(), RemoveExtraLook()
-
-----------------------------------------------------------------------------
-13.05.2007, Zesstra
diff --git a/doc/props/obsolete/P_LAST_KILLER b/doc/props/obsolete/P_LAST_KILLER
index 27eea8f..199a878 100644
--- a/doc/props/obsolete/P_LAST_KILLER
+++ b/doc/props/obsolete/P_LAST_KILLER
@@ -1,20 +1,37 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet und wird bald aus der Mudlib entfernt.  *
-***********************************************************************
 
-NAME:
-    P_LAST_KILLER                 "last_killer"                 
+P_LAST_KILLER
+*************
 
-DEFINIERT IN:
-    /sys/player.h
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet und wird
+bald aus der Mudlib entfernt.  * ************************************
+***********************************
 
-BESCHREIBUNG:
-     Letzter Moerdes des Wesens.
-     Diese Property wurde nur in Spielern gesetzt und auch dann nicht immer.
-     Bitte stattdessen P_KILLER abfragen, welche in NPC und Spielern gesetzt
-     wird.
 
-SIEHE AUCH:
-    P_KILLER, die()
+NAME
+====
+
+   P_LAST_KILLER                 "last_killer"
+
+
+DEFINIERT IN
+============
+
+   /sys/player.h
+
+
+BESCHREIBUNG
+============
+
+   Letzter Moerdes des Wesens.
+   Diese Property wurde nur in Spielern gesetzt und auch dann nicht immer.
+   Bitte stattdessen P_KILLER abfragen, welche in NPC und Spielern gesetzt
+   wird.
+
+
+SIEHE AUCH
+==========
+
+   P_KILLER, die()
 
 05.09.2008, Zesstra
diff --git a/doc/props/obsolete/P_LAST_PEACE_TIME b/doc/props/obsolete/P_LAST_PEACE_TIME
index 762233e..f8aea49 100644
--- a/doc/props/obsolete/P_LAST_PEACE_TIME
+++ b/doc/props/obsolete/P_LAST_PEACE_TIME
@@ -1,27 +1,41 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet und wird bald aus der Mudlib entfernt.  *
-***********************************************************************
-PROPERTY
 
-	P_LAST_PEACE_TIME	"last_peace_time"
+P_LAST_PEACE_TIME
+*****************
+
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet und wird
+bald aus der Mudlib entfernt.  * ************************************
+***********************************
+
+
+PROPERTY
+========
+
+   P_LAST_PEACE_TIME       "last_peace_time"
+
 
 DEFINIERT IN
+============
 
-	/std/living/combat.c
+   /std/living/combat.c
+
 
 BESCHREIBUNG
+============
 
-	Diese Property gibt an, wann zuletzt versucht wurde, einen NPC zu
-	befrieden. Bitte nach Moeglichkeit nur lesend verwenden. Des weiteren
-	wird sie nur im ueblichen Verhalten von QueryPacify gesetzt, und nur
-	dann, wenn P_ACCEPT_PEACE nicht gesetzt ist.
+   Diese Property gibt an, wann zuletzt versucht wurde, einen NPC zu
+   befrieden. Bitte nach Moeglichkeit nur lesend verwenden. Des weiteren
+   wird sie nur im ueblichen Verhalten von QueryPacify gesetzt, und nur
+   dann, wenn P_ACCEPT_PEACE nicht gesetzt ist.
+
 
 SIEHE AUCH
+==========
 
-	QueryPacify, P_ACCEPT_PEACE
+   QueryPacify, P_ACCEPT_PEACE
+
 
 LETZTE AENDERUNG
+================
 
-	2004-03-17, 14:30 von Humni
-	
-
+   2004-03-17, 14:30 von Humni
diff --git a/doc/props/obsolete/P_LOG_FILE b/doc/props/obsolete/P_LOG_FILE
index 1eafe40..ed57133 100644
--- a/doc/props/obsolete/P_LOG_FILE
+++ b/doc/props/obsolete/P_LOG_FILE
@@ -1,45 +1,69 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property wird nicht mehr ausgewertet.                         *
-***********************************************************************
-NAME:
-    P_LOG_FILE                   "log_file"
 
-DEFINIERT IN:
-    /sys/thing/properties.h
+P_LOG_FILE
+**********
 
-BESCHREIBUNG:
-    Enthaelt einen String auf einen Filenamen. 
+********************* VERALTETE PROPERTY
+****************************** * Diese Property wird nicht mehr
+ausgewertet.                         * ******************************
+*****************************************
 
-    Werden zu dem Objekt (Raum, Monster, ...) Fehlermeldungen abgesetzt, 
-    werden diese in das angegebene File umgeleitet. Die Eintragung in
-    die per Default fuer Fehlermeldungen vorgesehenen Dateien erfolgt
-    nicht.
 
-BEMERKUNGEN:
-    P_LOG_FILE wird ausgewertet wie log_file().
+NAME
+====
 
-    Das heisst, es wird AUF JEDEN FALL nach /log geschrieben!
+   P_LOG_FILE                   "log_file"
 
-    Direkt in /log kann NICHT geschrieben werden, es muss also ein 
-    Unterverzeichnis mit Eurem Magiernamen vorhanden sein.
 
-BEISPIELE:
-    SetProp(P_LOG_FILE,"tilly_log");          // FALSCH, es wuerde versucht, 
-                                                 das File /log/tilly_log 
-                                                 anzulegen
-    SetProp(P_LOG_FILE,"/log/tilly_log");     // FALSCH, es wuerde versucht, 
-                                                 das File /log/log/tilly_log
-                                                 anzulegen
-    SetProp(P_LOG_FILE,"/d/ebene/tilly_log"); // FALSCH, s.o.
+DEFINIERT IN
+============
 
-    SetProp(P_LOG_FILE,"tilly/tilly_log");    // RICHTIG!
+   /sys/thing/properties.h
 
-    Im letzten Beispiel werden alle Eintraege in das File tilly_log ge-
-    schrieben, das sich im Verzeichnis /log/tilly/ befindet.
 
-    Das Unterverzeichnis /tilly in /log muss zuvor angelegt werden.
+BESCHREIBUNG
+============
 
-SIEHE AUCH:
-    P_LOG_INFO, write_file(), log_file(),
+   Enthaelt einen String auf einen Filenamen.
+
+   Werden zu dem Objekt (Raum, Monster, ...) Fehlermeldungen abgesetzt,
+   werden diese in das angegebene File umgeleitet. Die Eintragung in
+   die per Default fuer Fehlermeldungen vorgesehenen Dateien erfolgt
+   nicht.
+
+
+BEMERKUNGEN
+===========
+
+   P_LOG_FILE wird ausgewertet wie log_file().
+
+   Das heisst, es wird AUF JEDEN FALL nach /log geschrieben!
+
+   Direkt in /log kann NICHT geschrieben werden, es muss also ein
+   Unterverzeichnis mit Eurem Magiernamen vorhanden sein.
+
+
+BEISPIELE
+=========
+
+   SetProp(P_LOG_FILE,"tilly_log");          // FALSCH, es wuerde versucht,
+                                                das File /log/tilly_log
+                                                anzulegen
+   SetProp(P_LOG_FILE,"/log/tilly_log");     // FALSCH, es wuerde versucht,
+                                                das File /log/log/tilly_log
+                                                anzulegen
+   SetProp(P_LOG_FILE,"/d/ebene/tilly_log"); // FALSCH, s.o.
+
+   SetProp(P_LOG_FILE,"tilly/tilly_log");    // RICHTIG!
+
+   Im letzten Beispiel werden alle Eintraege in das File tilly_log ge-
+   schrieben, das sich im Verzeichnis /log/tilly/ befindet.
+
+   Das Unterverzeichnis /tilly in /log muss zuvor angelegt werden.
+
+
+SIEHE AUCH
+==========
+
+   P_LOG_INFO, write_file(), log_file(),
 
 Letzte Aenderung: 13.09.04 Tilly@MorgenGrauen
diff --git a/doc/props/obsolete/P_NEXT_SPELL_TIME b/doc/props/obsolete/P_NEXT_SPELL_TIME
index 4742456..300a766 100644
--- a/doc/props/obsolete/P_NEXT_SPELL_TIME
+++ b/doc/props/obsolete/P_NEXT_SPELL_TIME
@@ -1,30 +1,49 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
 
-NAME:
-    P_NEXT_SPELL_TIME             "next_spell"
+P_NEXT_SPELL_TIME
+*****************
 
-DEFINIERT IN:
-    /sys/new_skills.h
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+*************************************
 
-BESCHREIBUNG:
-    Wann kann das naechste Mal gezaubert werden?
-    Dies ist eine globale Spruchermuedung/-Sperre.
-    Flexiblere Sperren koennen mittels SetSpellFatigue/CheckSpellFatigue()
-    verwaltet werden.
 
-    Diese Property ist keine echte Property, sondern liefert nur das
-    Ergebnis von von CheckSpellFatigue() zurueck bzw. ruft beim Setzen
-    SetSpellFatigue(<spruchsperre>, 0) auf.
-    Diese Prop sollte _nicht_ mittels Query- oder Setmethoden manupuliert
-    werden, da sonst Inkonsistenzen zum Ergebnis von CheckSpellFatigue()
-    auftreten.
+NAME
+====
 
-SIEHE AUCH:
-    SetSpellFatigue(L), CheckSpellFatigue(L)
-    spruchermuedung
+   P_NEXT_SPELL_TIME             "next_spell"
 
-ZULETZT GEAeNDERT:
+
+DEFINIERT IN
+============
+
+   /sys/new_skills.h
+
+
+BESCHREIBUNG
+============
+
+   Wann kann das naechste Mal gezaubert werden?
+   Dies ist eine globale Spruchermuedung/-Sperre.
+   Flexiblere Sperren koennen mittels SetSpellFatigue/CheckSpellFatigue()
+   verwaltet werden.
+
+   Diese Property ist keine echte Property, sondern liefert nur das
+   Ergebnis von von CheckSpellFatigue() zurueck bzw. ruft beim Setzen
+   SetSpellFatigue(<spruchsperre>, 0) auf.
+   Diese Prop sollte _nicht_ mittels Query- oder Setmethoden manupuliert
+   werden, da sonst Inkonsistenzen zum Ergebnis von CheckSpellFatigue()
+   auftreten.
+
+
+SIEHE AUCH
+==========
+
+   SetSpellFatigue(L), CheckSpellFatigue(L)
+   spruchermuedung
+
+
+ZULETZT GEAeNDERT
+=================
+
 14.03.2010, Zesstra
-
diff --git a/doc/props/obsolete/P_READ_MSG b/doc/props/obsolete/P_READ_MSG
index 5c79fdc..2331508 100644
--- a/doc/props/obsolete/P_READ_MSG
+++ b/doc/props/obsolete/P_READ_MSG
@@ -1,32 +1,56 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
-NAME:
-    P_READ_MSG                "read_msg"                
 
-DEFINIERT IN:
-    /sys/properties.h
+P_READ_MSG
+**********
 
-BESCHREIBUNG:
-    Diese Property ist veraltet. Ihre Funktion wird von
-    AddReadDetail(SENSE_DEFAULT, ...) uebernommen.
-    
-    Hier koennen Informationen gespeichert werden, die beim Lesen
-    des Objektes ausgegeben werden.
-     
-    Fuer das Identifizieren des zu lesenden Objektes wird der gleiche
-    Mechanismus benutzt wie fuer lesbare und andere Details.
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+*************************************
 
-    Die Benutzung von process_string() ist in dieser Prop nicht mehr erlaubt.
 
-BEISPIEL:
-    AddId(({"rolle", "schriftrolle"}));
-    SetProp(P_READ_MSG,
-       "Du oeffnest die Rolle und liest: LOREM IPSUM ...\n");
-     
-SIEHE AUCH:
-    Details:   AddReadDetail(), RemoveReadDetail(), P_READ_DETAILS
-    Sonstiges: break_string()
+NAME
+====
+
+   P_READ_MSG                "read_msg"
+
+
+DEFINIERT IN
+============
+
+   /sys/properties.h
+
+
+BESCHREIBUNG
+============
+
+   Diese Property ist veraltet. Ihre Funktion wird von
+   AddReadDetail(SENSE_DEFAULT, ...) uebernommen.
+
+
+
+   Hier koennen Informationen gespeichert werden, die beim Lesen
+   des Objektes ausgegeben werden.
+
+
+
+   Fuer das Identifizieren des zu lesenden Objektes wird der gleiche
+   Mechanismus benutzt wie fuer lesbare und andere Details.
+
+   Die Benutzung von process_string() ist in dieser Prop nicht mehr erlaubt.
+
+
+BEISPIEL
+========
+
+   AddId(({"rolle", "schriftrolle"}));
+   SetProp(P_READ_MSG,
+      "Du oeffnest die Rolle und liest: LOREM IPSUM ...\n");
+
+
+SIEHE AUCH
+==========
+
+   Details:   AddReadDetail(), RemoveReadDetail(), P_READ_DETAILS
+   Sonstiges: break_string()
 
 09.12.2012, Zesstra
-
diff --git a/doc/props/obsolete/P_TECHNIQUE b/doc/props/obsolete/P_TECHNIQUE
index 1657027..a556ce6 100644
--- a/doc/props/obsolete/P_TECHNIQUE
+++ b/doc/props/obsolete/P_TECHNIQUE
@@ -1,44 +1,70 @@
-********************* UNGENUTZTE PROPERTY *****************************
-* Diese Property wird von der Mudlib NICHT ausgewertet und kann       *
-* als veraltet gelten.                                                *
-* Momentan ist auch keine Gilde bekannt, die mehr macht, als sie      *
-* auszugeben.                                                         *
-***********************************************************************
-NAME:
-	P_TECHNIQUE				"technique"
 
-DEFINIERT IN:
-	/sys/weapon.h
+P_TECHNIQUE
+***********
 
-BESCHREIBUNG:
-        Die Technik(en), mit denen eine Waffe im Kampf eingesetzt werden
-        kann. Folgende Techniken stehen zur Verfuegung:
+********************* UNGENUTZTE PROPERTY
+***************************** * Diese Property wird von der Mudlib
+NICHT ausgewertet und kann       * * als veraltet gelten.
+* * Momentan ist auch keine Gilde bekannt, die mehr macht, als sie
+* * auszugeben.
+* *******************************************************************
+****
 
-                TQ_STROKE       Streichtechnik
-                TQ_THRASH       Schlagtechnik
-                TQ_THRUST       Stosstechnik
-                TQ_WHIP         Peitschtechnik
 
-        Die Techniken sind ebenfalls in <weapon.h> definiert und auf der
-        man-page 'techniken' naeher erlaeutert.
+NAME
+====
 
-BEMERKUNGEN:
-        Man kann einer Waffe eine oder mehrere Techniken zuweisen.
+   P_TECHNIQUE                             "technique"
 
-BEISPIELE:
-        a) Eine Waffe, die nur mit einer Peitschtechnik eingesetzt wird,
-           also typischerweise eine Peitsche, aber auch ein Morgenstern:
 
-            SetProp(P_TECHNIQUE,TQ_WHIP);
+DEFINIERT IN
+============
 
-        b) Eine Waffe, die sowohl mit der Schlag- als auch der Stosstechnik
-           eingesetzt wird, also z.B. eine Hellebarde:
+   /sys/weapon.h
 
-            SetProp(P_TECHNIQUE,({TQ_THRASH,TQ_THRUST}));
 
-SIEHE AUCH:
-        techniken, P_BALANCED_WEAPON, /std/weapon/combat.c
+BESCHREIBUNG
+============
 
-LETZTE AeNDERUNG:
+   Die Technik(en), mit denen eine Waffe im Kampf eingesetzt werden
+   kann. Folgende Techniken stehen zur Verfuegung:
+
+           TQ_STROKE       Streichtechnik
+           TQ_THRASH       Schlagtechnik
+           TQ_THRUST       Stosstechnik
+           TQ_WHIP         Peitschtechnik
+
+   Die Techniken sind ebenfalls in <weapon.h> definiert und auf der
+   man-page 'techniken' naeher erlaeutert.
+
+
+BEMERKUNGEN
+===========
+
+   Man kann einer Waffe eine oder mehrere Techniken zuweisen.
+
+
+BEISPIELE
+=========
+
+   a) Eine Waffe, die nur mit einer Peitschtechnik eingesetzt wird,
+      also typischerweise eine Peitsche, aber auch ein Morgenstern:
+
+       SetProp(P_TECHNIQUE,TQ_WHIP);
+
+   b) Eine Waffe, die sowohl mit der Schlag- als auch der Stosstechnik
+      eingesetzt wird, also z.B. eine Hellebarde:
+
+       SetProp(P_TECHNIQUE,({TQ_THRASH,TQ_THRUST}));
+
+
+SIEHE AUCH
+==========
+
+   techniken, P_BALANCED_WEAPON, /std/weapon/combat.c
+
+
+LETZTE AeNDERUNG
+================
+
 15.02.2009, Zesstra
-
diff --git a/doc/props/obsolete/P_TMP_ATTACK_HOOK b/doc/props/obsolete/P_TMP_ATTACK_HOOK
index bdc8152..6bd5130 100644
--- a/doc/props/obsolete/P_TMP_ATTACK_HOOK
+++ b/doc/props/obsolete/P_TMP_ATTACK_HOOK
@@ -1,73 +1,95 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
+
 P_TMP_ATTACK_HOOK
+*****************
 
-NAME:
-    P_TMP_ATTACK_HOOK             "attack_hook"
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+************************************* P_TMP_ATTACK_HOOK
 
-DEFINIERT IN:
-    /sys/new_skills.h
 
-BESCHREIBUNG:
-     Mittels dieser Property koennen die Attacken eines Livings ggf.
-     abgebrochen werden noch bevor Waffen oder Skills zum ausgewertet
-     wurden.
+NAME
+====
 
-     Es wird an dem Living die Property als mindestens 3-elementiges Array:
-     ({zeitpunkt, objekt, methode, ...})
-     gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
-     Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
+   P_TMP_ATTACK_HOOK             "attack_hook"
 
-     Der Methode wird als Parameter der Gegner uebergeben.
 
-     Gibt die Methode 0 als Rueckgabewert zurueck, wird die Attacke sofort
-     kommentarlos abgebrochen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
-     - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-       Property auf 0 gesetzt
-     - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
-       pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-       im Code anderer und ist andererseits unfair gegenueber ihnen
+   /sys/new_skills.h
 
-BEISPIELE:
-     *** der Spieler erhaelt eine Verwundung, die ihn manchmal behindert ***
-     if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_HOOK)) ||
-        sizeof(tmp)<3 || tmp[0]<=time()) {
-       TP->SetProp(P_TMP_ATTACK_HOOK,
-		   ({time()+3600, this_object(), "test_hurt"}));
-     ...
 
-     // die entsprechende Methode, die bei jedem Angriff ueber Attack()
-     // gerufen wird ...
-     int test_hurt(object enemy) {
+BESCHREIBUNG
+============
 
-       // mit 10% Chance generell und 20% Chance bei groesseren Gegnern
-       // bricht der Angriff ab ... previous_object() ist natuerlich
-       // der Angreifer
-       if(!random(10) ||
-          (enemy->QueryProp(P_SIZE)>previous_object()->QueryProp(P_SIZE) &&
-           !random(5)) {
+   Mittels dieser Property koennen die Attacken eines Livings ggf.
+   abgebrochen werden noch bevor Waffen oder Skills zum ausgewertet
+   wurden.
 
-          tell_object(previous_object(),
-            "Deine Wunde schmerzt dich zu sehr um anzugreifen.\n");
-          tell_room(environment(previous_object()),
-            previous_object()->Name(WER,1)+" zuckt vor Schmerzen zusammen.\n",
-            ({previous_object()}));
-          return 0;
-       }
+   Es wird an dem Living die Property als mindestens 3-elementiges Array:
+   ({zeitpunkt, objekt, methode, ...})
+   gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
+   Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
 
-       // ansonsten geht der Angriff weiter
-       return 1;
+   Der Methode wird als Parameter der Gegner uebergeben.
+
+   Gibt die Methode 0 als Rueckgabewert zurueck, wird die Attacke sofort
+   kommentarlos abgebrochen.
+
+
+BEMERKUNGEN
+===========
+
+   - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
+   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt
+   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
+     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
+     im Code anderer und ist andererseits unfair gegenueber ihnen
+
+
+BEISPIELE
+=========
+
+   *** der Spieler erhaelt eine Verwundung, die ihn manchmal behindert ***
+   if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_HOOK)) ||
+      sizeof(tmp)<3 || tmp[0]<=time()) {
+     TP->SetProp(P_TMP_ATTACK_HOOK,
+                 ({time()+3600, this_object(), "test_hurt"}));
+   ...
+
+   // die entsprechende Methode, die bei jedem Angriff ueber Attack()
+   // gerufen wird ...
+   int test_hurt(object enemy) {
+
+     // mit 10% Chance generell und 20% Chance bei groesseren Gegnern
+     // bricht der Angriff ab ... previous_object() ist natuerlich
+     // der Angreifer
+     if(!random(10) ||
+        (enemy->QueryProp(P_SIZE)>previous_object()->QueryProp(P_SIZE) &&
+         !random(5)) {
+
+        tell_object(previous_object(),
+          "Deine Wunde schmerzt dich zu sehr um anzugreifen.\n");
+        tell_room(environment(previous_object()),
+          previous_object()->Name(WER,1)+" zuckt vor Schmerzen zusammen.\n",
+          ({previous_object()}));
+        return 0;
      }
 
-SIEHE AUCH:
-     Angriff:	Attack(L)
-     Schutz:    Defend(L)
-     Verwandt:  InternalModifyAttack(L), P_TMP_ATTACK_MOD	
-     Hooks:	P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_DEFEND_HOOK
-     neue Hooks: std/hooks
+     // ansonsten geht der Angriff weiter
+     return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Angriff:   Attack(L)
+   Schutz:    Defend(L)
+   Verwandt:  InternalModifyAttack(L), P_TMP_ATTACK_MOD
+   Hooks:     P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_DEFEND_HOOK
+   neue Hooks: std/hooks
 
 08.12.2008, Zesstra
diff --git a/doc/props/obsolete/P_TMP_ATTACK_MOD b/doc/props/obsolete/P_TMP_ATTACK_MOD
index 3491c0c..df10409 100644
--- a/doc/props/obsolete/P_TMP_ATTACK_MOD
+++ b/doc/props/obsolete/P_TMP_ATTACK_MOD
@@ -1,112 +1,134 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
+
 P_TMP_ATTACK_MOD
+****************
 
-NAME:
-     P_TMP_ATTACK_MOD              "attack_mod"
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+************************************* P_TMP_ATTACK_MOD
 
-DEFINIERT IN:
-     /sys/new_skills.h
 
-BESCHREIBUNG:
-     Mittels dieser Property koennen die Attacken eines Livings temporaer
-     veraendert werden.
+NAME
+====
 
-     Es wird an dem Living die Property als mindestens 3-elementiges Array
-     ({zeitpunkt, objekt, methode, ...})
-     gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
-     Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
+   P_TMP_ATTACK_MOD              "attack_mod"
 
-     Der Methode wird beim Aufruf ein Kopie des Mappings uebergeben, in dem
-     die bisherigen Werte des Angriffes vermerkt sind.
-     Aufbau von Mapping 'ainfo':
-     ([ SI_ENEMY :           object Angreifer,			(-> Defend)
-        SI_SPELL :           0/1/array Spellparameter,		(-> Defend)
-        P_WEAPON :           - oder Waffe,
-        SI_SKILLDAMAGE_MSG:  string Angriffsmeldungsende an Raum,
-        SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
-        SI_SKILLDAMAGE:      int Schaden in Zehntel HP (Skills bis auf Rasse
-			     drin!)				(-> Defend),
-        SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen,	(-> Defend)
-        P_WEAPON_TYPE:       string Waffentyp (combat.h),
-        P_WC:		     - oder int WC der Waffe/Hand,
-        P_NR_HANDS:	     - oder int Hands der Waffe/Hand,
-     ]);
 
-     Gibt die Methode:
-     - 0 oder kein Mapping zurueck, fuehrt das zum Abbruch der Attacke
-       -> da inzwischen Waffen abgefragt wurden, koennen schon Meldungen
-          von diesen ausgegeben worden sein
-     - ein leeres Mapping ( ([]) ) zurueck, fuehrt das zu keiner Modifikation
-     - ein Mapping mit veraenderten Werten zurueck, werden diese in das
-       Angriffsmapping kopiert
-       Die geaenderten Werte werden teilweise von SkillResTransfer() in
-       den eigentlichen Angriff uebernommen.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-     - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-       Property auf 0 gesetzt
-     - vor dem Setzen immer auf die Existenz eines gueltigen Modifiers
-       pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-       im Code anderer und ist andererseits unfair gegenueber ihnen
+   /sys/new_skills.h
 
-BEISPIELE:
-     *** ein besonder heisser Segen modifiziert die Attacken des Spielers ***
-     int action_segen() {
-       ...
-       mixed *tmp;
 
-       // pruefen, ob nicht ein anderer Modifier existiert
-       if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_MOD)) ||
-          sizeof(tmp)<3 || tmp[0]<=time()) {
+BESCHREIBUNG
+============
 
-         object wield;
-         wield=TP->QueryProp(P_WEAPON);
+   Mittels dieser Property koennen die Attacken eines Livings temporaer
+   veraendert werden.
 
-         write(break_string(
-           "Der Priester der Flamme weiht "+
-           (wield?wield->name(WEN,1):"deine Haende")+".", 78));
+   Es wird an dem Living die Property als mindestens 3-elementiges Array
+   ({zeitpunkt, objekt, methode, ...})
+   gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
+   Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
 
-         // setzen des Modifiers .. 30-40 Sekunden gueltig
-         TP->SetProp(P_TMP_ATTACK_MOD,
-	              ({time()+30+random(10), this_object(), "modfun"}));
-        } else ...
-        ...
-      return 1;
-     }
+   Der Methode wird beim Aufruf ein Kopie des Mappings uebergeben, in dem
+   die bisherigen Werte des Angriffes vermerkt sind.
+   Aufbau von Mapping 'ainfo':
+   ([ SI_ENEMY :           object Angreifer,                  (-> Defend)
+      SI_SPELL :           0/1/array Spellparameter,          (-> Defend)
+      P_WEAPON :           - oder Waffe,
+      SI_SKILLDAMAGE_MSG:  string Angriffsmeldungsende an Raum,
+      SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
+      SI_SKILLDAMAGE:      int Schaden in Zehntel HP (Skills bis auf Rasse
+                           drin!)                             (-> Defend),
+      SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen,      (-> Defend)
+      P_WEAPON_TYPE:       string Waffentyp (combat.h),
+      P_WC:                - oder int WC der Waffe/Hand,
+      P_NR_HANDS:          - oder int Hands der Waffe/Hand,
+   ]);
 
-     // die eigentlich Methode, die waehrend des Angriffs gerufen wird
-     mapping modfun(mapping ainfo) {
-       mapping ret;
+   Gibt die Methode:
+   - 0 oder kein Mapping zurueck, fuehrt das zum Abbruch der Attacke
+     -> da inzwischen Waffen abgefragt wurden, koennen schon Meldungen
+        von diesen ausgegeben worden sein
+   - ein leeres Mapping ( ([]) ) zurueck, fuehrt das zu keiner Modifikation
+   - ein Mapping mit veraenderten Werten zurueck, werden diese in das
+     Angriffsmapping kopiert
+     Die geaenderten Werte werden teilweise von SkillResTransfer() in
+     den eigentlichen Angriff uebernommen.
 
-       // Returnwert ist immer ein Mapping, damit die Attacke weitergeht
-       ret=m_allocate(0,1);
 
-       // magische Waffen oder Sprueche werden nicht verbessert
-       if(ainfo[P_WEAPON_TYPE]!=WT_MAGIC) {
-         // sonst Verbesserungen ... Feuer addieren ...
-         ret[SI_SKILLDAMAGE_TYPE]=(ainfo[SI_SKILLDAMAGE_TYPE]||({}))+
-				({DT_FIRE});
-	 // ... und bei Waffe Meldungen anpassen
-         if(ainfo[P_WEAPON]) {
-           ret[SI_SKILLDAMAGE_MSG]=
-             " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
-           ret[SI_SKILLDAMAGE_MSG2]=
-             " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
-         }
+BEMERKUNGEN
+===========
+
+   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt
+   - vor dem Setzen immer auf die Existenz eines gueltigen Modifiers
+     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
+     im Code anderer und ist andererseits unfair gegenueber ihnen
+
+
+BEISPIELE
+=========
+
+   *** ein besonder heisser Segen modifiziert die Attacken des Spielers ***
+   int action_segen() {
+     ...
+     mixed *tmp;
+
+     // pruefen, ob nicht ein anderer Modifier existiert
+     if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_MOD)) ||
+        sizeof(tmp)<3 || tmp[0]<=time()) {
+
+       object wield;
+       wield=TP->QueryProp(P_WEAPON);
+
+       write(break_string(
+         "Der Priester der Flamme weiht "+
+         (wield?wield->name(WEN,1):"deine Haende")+".", 78));
+
+       // setzen des Modifiers .. 30-40 Sekunden gueltig
+       TP->SetProp(P_TMP_ATTACK_MOD,
+                    ({time()+30+random(10), this_object(), "modfun"}));
+      } else ...
+      ...
+    return 1;
+   }
+
+   // die eigentlich Methode, die waehrend des Angriffs gerufen wird
+   mapping modfun(mapping ainfo) {
+     mapping ret;
+
+     // Returnwert ist immer ein Mapping, damit die Attacke weitergeht
+     ret=m_allocate(0,1);
+
+     // magische Waffen oder Sprueche werden nicht verbessert
+     if(ainfo[P_WEAPON_TYPE]!=WT_MAGIC) {
+       // sonst Verbesserungen ... Feuer addieren ...
+       ret[SI_SKILLDAMAGE_TYPE]=(ainfo[SI_SKILLDAMAGE_TYPE]||({}))+
+                              ({DT_FIRE});
+       // ... und bei Waffe Meldungen anpassen
+       if(ainfo[P_WEAPON]) {
+         ret[SI_SKILLDAMAGE_MSG]=
+           " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
+         ret[SI_SKILLDAMAGE_MSG2]=
+           " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
        }
-
-       return ret;
      }
 
-SIEHE AUCH:
-     Angriff:	Attack(L)
-     Schutz:    Defend(L)
-     Verwandt:  InternalModifyAttack(L)
-		P_TMP_ATTACK_HOOK
-		P_TMP_DEFEND_HOOK
-     Sonstiges: SkillResTransfer(L)
-     Hooks:	P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK
+     return ret;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Angriff:   Attack(L)
+   Schutz:    Defend(L)
+   Verwandt:  InternalModifyAttack(L)
+              P_TMP_ATTACK_HOOK
+              P_TMP_DEFEND_HOOK
+   Sonstiges: SkillResTransfer(L)
+   Hooks:     P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK
 
 10.Feb 2005 Gloinson
diff --git a/doc/props/obsolete/P_TMP_DEFEND_HOOK b/doc/props/obsolete/P_TMP_DEFEND_HOOK
index 986e63a..f29d342 100644
--- a/doc/props/obsolete/P_TMP_DEFEND_HOOK
+++ b/doc/props/obsolete/P_TMP_DEFEND_HOOK
@@ -1,110 +1,131 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
+
 P_TMP_DEFEND_HOOK
+*****************
 
-NAME:
-     P_TMP_DEFEND_HOOK             "defend_hook"
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+************************************* P_TMP_DEFEND_HOOK
 
-DEFINIERT IN:
-     /sys/new_skills.h
 
-BESCHREIBUNG:
-     Mittels dieser Property koennen die Abwehren eines Livings temporaer
-     veraendert werden.
+NAME
+====
 
-     Es wird an dem Living die Property als mindestens 3-elementiges Array
-     ({zeitpunkt, objekt, methode, ...})
-     gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
-     Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
+   P_TMP_DEFEND_HOOK             "defend_hook"
 
-     Der Methode werden die Parameter der Defend() uebergeben:
-     int dam, mixed dam_type, mixed spell, object enemy
-     - spell ist definitiv ein Mapping - ein an Defend() uebergebener
-       int-Wert wurde aequivalent umgesetzt.
-     - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
 
-     Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
-     statt, diese koennen also weitere Modifikationen vorgenommen haben.
+DEFINIERT IN
+============
 
-     Gibt die Funktion:
-     - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
-       abgefangen) - nur noch die Flucht wird geprueft
-     - ein 3-elementiges Array ({schaden, schadenstypen, spell}) zurueck,
-       werden diese Werte in der Defend() an Stelle der uebergebenen Werte
-       verwendet
-     - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
-       regulaer weiter
+   /sys/new_skills.h
 
-BEMERKUNGEN:
-     - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
-     - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-       Property auf 0 gesetzt
-     - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
-       pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-       im Code anderer und ist andererseits unfair gegenueber ihnen
 
-BEISPIEL:
-     *** ein gruener Schutzzauber ***
-     // Setzen der Prop
-     ...
-     tmp=TP->QueryProp(P_TMP_DEFEND_HOOK);
+BESCHREIBUNG
+============
 
-     // ein etwas ausfuehrlicher Check, ob wir ueberschreiben koennen,
-     // Existenz && Gueltigkeit
-     if(pointerp(tmp) && sizeof(tmp) && intp(tmp[0]) && (time()<tmp[0]))
-      write("Der Zauber klappt nicht!\n");
-     else {
-      // der Zauber gilt eine Stunde
-      TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
-      write("Ein Zauber legt sich auf dich.\n");
-     }
-     ...
+   Mittels dieser Property koennen die Abwehren eines Livings temporaer
+   veraendert werden.
 
-     // die gerufene Methode
-     mixed abwehrfun(int dam, string* dam_type, mapping spell, object en) {
-      // keine rekursiven Schaeden abfangen ... mindestens ein magischer
-      // muss auch dabei sein
-      if((!mappingp(spell) || !spell[SP_RECURSIVE]) &&
-         sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
+   Es wird an dem Living die Property als mindestens 3-elementiges Array
+   ({zeitpunkt, objekt, methode, ...})
+   gesetzt und die Methode 'methode' wird dann waehrend des Defend() des
+   Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
 
-       // mit 10% Whkeit schuetzt der Zauber total
-       if(!random(10)) {
-        tell_object(previous_object(),
-          "Dein Zauber gleisst rund um dich gruen auf.\n");
-        tell_room(environment(previous_object()), break_string(
-          previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
-          previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
-          ({previous_object()}));
+   Der Methode werden die Parameter der Defend() uebergeben:
+   int dam, mixed dam_type, mixed spell, object enemy
+   - spell ist definitiv ein Mapping - ein an Defend() uebergebener
+     int-Wert wurde aequivalent umgesetzt.
+   - dam_type ist definitiv ein Array von Schadenswerten oder einem Wert
 
-        // manchmal geht der Zauber dabei endgueltig kaputt
-        if(!random(10)) previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
+   Zudem findet der Aufruf der Methode nach dem Abarbeiten der P_DEFENDERS
+   statt, diese koennen also weitere Modifikationen vorgenommen haben.
 
-        return 0;			// volles Abfangen des Angriffs
-       }
+   Gibt die Funktion:
+   - 0 zurueck, wird Defend() abgebrochen (und damit der Schaden voellig
+     abgefangen) - nur noch die Flucht wird geprueft
+   - ein 3-elementiges Array ({schaden, schadenstypen, spell}) zurueck,
+     werden diese Werte in der Defend() an Stelle der uebergebenen Werte
+     verwendet
+   - weder noch zurueck, wird das Ergebnis ignoriert und die Defend laeuft
+     regulaer weiter
 
-       // der Zauber schuetzt auf jeden Fall immer ein bischen
-       tell_object(previous_object(),
-         "Dein Zauber flackert rund um dich gruen auf.\n");
-       tell_room(environment(previous_object()), break_string(
-         previous_object()->Name(WESSEN)+" Haut flackert rund um "+
-         previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
-         ({previous_object()}));
-       dam=(7+random(2))*dam/10;	// Schaden reduzieren
 
-       return(({dam, dam_type, spell}));
-      }
+BEMERKUNGEN
+===========
 
-      // der Zauber schuetzt dann gar nicht ...
-      return 1;
+   - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
+   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt
+   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
+     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
+     im Code anderer und ist andererseits unfair gegenueber ihnen
+
+
+BEISPIEL
+========
+
+   *** ein gruener Schutzzauber ***
+   // Setzen der Prop
+   ...
+   tmp=TP->QueryProp(P_TMP_DEFEND_HOOK);
+
+   // ein etwas ausfuehrlicher Check, ob wir ueberschreiben koennen,
+   // Existenz && Gueltigkeit
+   if(pointerp(tmp) && sizeof(tmp) && intp(tmp[0]) && (time()<tmp[0]))
+    write("Der Zauber klappt nicht!\n");
+   else {
+    // der Zauber gilt eine Stunde
+    TP->SetProp(P_TMP_DEFEND_HOOK,({time()+3600,TO,"abwehrfun");
+    write("Ein Zauber legt sich auf dich.\n");
+   }
+   ...
+
+   // die gerufene Methode
+   mixed abwehrfun(int dam, string* dam_type, mapping spell, object en) {
+    // keine rekursiven Schaeden abfangen ... mindestens ein magischer
+    // muss auch dabei sein
+    if((!mappingp(spell) || !spell[SP_RECURSIVE]) &&
+       sizeof(filter(dam_type,MAGICAL_DAMAGE_TYPES))) {
+
+     // mit 10% Whkeit schuetzt der Zauber total
+     if(!random(10)) {
+      tell_object(previous_object(),
+        "Dein Zauber gleisst rund um dich gruen auf.\n");
+      tell_room(environment(previous_object()), break_string(
+        previous_object()->Name(WESSEN)+" Haut gleisst rund um "+
+        previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
+        ({previous_object()}));
+
+      // manchmal geht der Zauber dabei endgueltig kaputt
+      if(!random(10)) previous_object()->SetProp(P_TMP_DEFEND_HOOK, 0);
+
+      return 0;                       // volles Abfangen des Angriffs
      }
 
-SIEHE AUCH:
-     Angriff:	Attack(L)
-     Schutz:    Defend(L)
-     Verwandt:	InternalModifyDefend(L), P_TMP_ATTACK_MOD
-     Hooks:	P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
-     neue Hooks: std/hooks
+     // der Zauber schuetzt auf jeden Fall immer ein bischen
+     tell_object(previous_object(),
+       "Dein Zauber flackert rund um dich gruen auf.\n");
+     tell_room(environment(previous_object()), break_string(
+       previous_object()->Name(WESSEN)+" Haut flackert rund um "+
+       previous_object()->QueryPronoun(WEN)+" gruen auf.",78),
+       ({previous_object()}));
+     dam=(7+random(2))*dam/10;        // Schaden reduzieren
+
+     return(({dam, dam_type, spell}));
+    }
+
+    // der Zauber schuetzt dann gar nicht ...
+    return 1;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Angriff:   Attack(L)
+   Schutz:    Defend(L)
+   Verwandt:  InternalModifyDefend(L), P_TMP_ATTACK_MOD
+   Hooks:     P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK
+   neue Hooks: std/hooks
 
 08.12.2008, Zesstra
-
diff --git a/doc/props/obsolete/P_TMP_DIE_HOOK b/doc/props/obsolete/P_TMP_DIE_HOOK
index cd18917..f4008cb 100644
--- a/doc/props/obsolete/P_TMP_DIE_HOOK
+++ b/doc/props/obsolete/P_TMP_DIE_HOOK
@@ -1,70 +1,91 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
+
 P_TMP_DIE_HOOK
+**************
 
-NAME:
-    P_TMP_DIE_HOOK                "die_hook"
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+************************************* P_TMP_DIE_HOOK
 
-DEFINIERT IN:
-    /sys/new_skills.h
 
-BESCHREIBUNG:
-     Mittels dieser Property kann der Tod eines Livings abgewendet werden.
+NAME
+====
 
-     Es wird an dem Living die Property als mindestens 3-elementiges Array
-     ({zeitpunkt, objekt, methode, ...})
-     gesetzt und die Methode 'methode' wird dann waehrend des die() des
-     Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
-     Bei Geistern wird der Hook nicht gerufen.
+   P_TMP_DIE_HOOK                "die_hook"
 
-     Der Methode wird ein int uebergeben, ob das Living Opfer von Gift
-     (P_POISON) war.
 
-     Gibt die Funktion einen Wert != 0 zurueck, wird die() sofort abgebrochen
-     und das Living stirbt nicht.
+DEFINIERT IN
+============
 
-BEMERKUNGEN:
-    - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
-    - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-      Property auf 0 gesetzt
-    - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
-      pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-      im Code anderer und ist andererseits unfair gegenueber ihnen
+   /sys/new_skills.h
 
-BEISPIELE:
-     *** ein besonderer Giftschutz .. wirkt beim Tod ***
-     // pruefen, ob nicht ein anderer Modifier existiert
-     if(!pointerp(tmp=TP->QueryProp(P_TMP_DIE_HOOK)) ||
-        sizeof(tmp)<3 || tmp[0]<=time()) {
-       TP->SetProp(P_TMP_DIE_HOOK,
-	           ({time()+120+random(10), this_object(), "prevent_die"}));
 
-     // die gerufene Methode
-     int prevent_die(int poison) {
-       int ret;
+BESCHREIBUNG
+============
 
-       if(poison) {
-         tell_object(previous_object(),
-           "Ein Zauber reinigt im Moment des Todes dein Blut!\n");
-         tell_object(environment(previous_object()),
-           previous_object()->Name(WER,1)+" wird von Lichtern umhuellt.\n",
-           ({previous_object()}));
+   Mittels dieser Property kann der Tod eines Livings abgewendet werden.
 
-         ret=1;
-       }
+   Es wird an dem Living die Property als mindestens 3-elementiges Array
+   ({zeitpunkt, objekt, methode, ...})
+   gesetzt und die Methode 'methode' wird dann waehrend des die() des
+   Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
+   Bei Geistern wird der Hook nicht gerufen.
 
-       // wir helfen nur einmal ... und ein Tod vernichtet die Hilfe auch
-       previous_object()->SetProp(P_TMP_DIE_HOOK, 0);
+   Der Methode wird ein int uebergeben, ob das Living Opfer von Gift
+   (P_POISON) war.
 
-       return ret;
+   Gibt die Funktion einen Wert != 0 zurueck, wird die() sofort abgebrochen
+   und das Living stirbt nicht.
+
+
+BEMERKUNGEN
+===========
+
+   - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
+   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt
+   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
+     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
+     im Code anderer und ist andererseits unfair gegenueber ihnen
+
+
+BEISPIELE
+=========
+
+   *** ein besonderer Giftschutz .. wirkt beim Tod ***
+   // pruefen, ob nicht ein anderer Modifier existiert
+   if(!pointerp(tmp=TP->QueryProp(P_TMP_DIE_HOOK)) ||
+      sizeof(tmp)<3 || tmp[0]<=time()) {
+     TP->SetProp(P_TMP_DIE_HOOK,
+                 ({time()+120+random(10), this_object(), "prevent_die"}));
+
+   // die gerufene Methode
+   int prevent_die(int poison) {
+     int ret;
+
+     if(poison) {
+       tell_object(previous_object(),
+         "Ein Zauber reinigt im Moment des Todes dein Blut!\n");
+       tell_object(environment(previous_object()),
+         previous_object()->Name(WER,1)+" wird von Lichtern umhuellt.\n",
+         ({previous_object()}));
+
+       ret=1;
      }
 
-SIEHE AUCH:
-     Tod:	die(L)
-     Sonstiges: P_POISON, P_KILLS, P_GHOST
-     Hooks:	P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK, P_TMP_DEFEND_HOOK
-     neue Hooks: std/hooks
+     // wir helfen nur einmal ... und ein Tod vernichtet die Hilfe auch
+     previous_object()->SetProp(P_TMP_DIE_HOOK, 0);
+
+     return ret;
+   }
+
+
+SIEHE AUCH
+==========
+
+   Tod:       die(L)
+   Sonstiges: P_POISON, P_KILLS, P_GHOST
+   Hooks:     P_TMP_MOVE_HOOK, P_TMP_ATTACK_HOOK, P_TMP_DEFEND_HOOK
+   neue Hooks: std/hooks
 
 08.12.2008, Zesstra
-
diff --git a/doc/props/obsolete/P_TMP_MOVE_HOOK b/doc/props/obsolete/P_TMP_MOVE_HOOK
index c28a067..8f1aa77 100644
--- a/doc/props/obsolete/P_TMP_MOVE_HOOK
+++ b/doc/props/obsolete/P_TMP_MOVE_HOOK
@@ -1,42 +1,65 @@
-********************* VERALTETE PROPERTY ******************************
-* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
-***********************************************************************
-NAME:
-    P_TMP_MOVE_HOOK             "move_hook"
 
-DEFINIERT IN:
-    /sys/new_skills.h
+P_TMP_MOVE_HOOK
+***************
 
-BESCHREIBUNG:
-    Mindestens 3-elementiges Array ({zeitpunkt, objekt, funktion, ...}).
-    Die Funktion wird im 'objekt' mit den gleichen Parametern wie move()
-    nach der Abfrage auf P_NO_TPORT aufgerufen, wenn der 'zeitpunkt'
-    noch nicht ueberschritten ist. Wenn die Funktion etwas anderes als ein
-    5-elementiges Array ({dest, methods, direction, textout, textin})
-    oder -1 zurueckgibt, wird move() normal ausgefuehrt, ansonsten werden die
-    5 move-Parameter durch die Array-Eintraege ersetzt bzw. wird bei einem
-    Rueckgabewert von -1 das move() abgebrochen. In letzterem Fall ist
-    die Funktion dafuer verantwortlich, eine entspr. Meldung an den
-    Spieler auszugeben!
+********************* VERALTETE PROPERTY
+****************************** * Diese Property ist veraltet. Bitte
+nicht mehr in neuem Code nutzen. * **********************************
+*************************************
 
-HINWEIS:
-    Falls man einem Spieler einen Move-Hook setzt, ist es ratsam, im
-    Move-Hook zu pruefen, ob das Spielerobjekt nach Abarbeitung der Hook-
-    Funktion noch lebt. Ansonsten wird ein doppeltes move() ausgefuehrt:
-    in den Todesraum und direkt wieder zurueck zur Leiche.
 
-BEMERKUNGEN:
-     - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
-     - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
-       Property auf 0 gesetzt
-     - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
-       pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
-       im Code anderer und ist andererseits unfair gegenueber ihnen
+NAME
+====
 
-SIEHE AUCH:
-     Bewegung:	move(L), NotifyMove(), PreventMove()
-     Hooks:	P_TMP_DIE_HOOK, P_TMP_DEFEND_HOOK, P_TMP_ATTACK_HOOK
-     neue Hooks: std/hooks
+   P_TMP_MOVE_HOOK             "move_hook"
 
-----------------------------------------------------------------------------
+
+DEFINIERT IN
+============
+
+   /sys/new_skills.h
+
+
+BESCHREIBUNG
+============
+
+   Mindestens 3-elementiges Array ({zeitpunkt, objekt, funktion, ...}).
+   Die Funktion wird im 'objekt' mit den gleichen Parametern wie move()
+   nach der Abfrage auf P_NO_TPORT aufgerufen, wenn der 'zeitpunkt'
+   noch nicht ueberschritten ist. Wenn die Funktion etwas anderes als ein
+   5-elementiges Array ({dest, methods, direction, textout, textin})
+   oder -1 zurueckgibt, wird move() normal ausgefuehrt, ansonsten werden die
+   5 move-Parameter durch die Array-Eintraege ersetzt bzw. wird bei einem
+   Rueckgabewert von -1 das move() abgebrochen. In letzterem Fall ist
+   die Funktion dafuer verantwortlich, eine entspr. Meldung an den
+   Spieler auszugeben!
+
+
+HINWEIS
+=======
+
+   Falls man einem Spieler einen Move-Hook setzt, ist es ratsam, im
+   Move-Hook zu pruefen, ob das Spielerobjekt nach Abarbeitung der Hook-
+   Funktion noch lebt. Ansonsten wird ein doppeltes move() ausgefuehrt:
+   in den Todesraum und direkt wieder zurueck zur Leiche.
+
+
+BEMERKUNGEN
+===========
+
+   - Bitte das neuere Hooksystem (s. Manpage std/hooks) benutzen.
+   - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
+     Property auf 0 gesetzt
+   - vor dem Setzen immer auf die Existenz eines gueltigen Hooks
+     pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
+     im Code anderer und ist andererseits unfair gegenueber ihnen
+
+
+SIEHE AUCH
+==========
+
+   Bewegung:  move(L), NotifyMove(), PreventMove()
+   Hooks:     P_TMP_DIE_HOOK, P_TMP_DEFEND_HOOK, P_TMP_ATTACK_HOOK
+   neue Hooks: std/hooks
+
 08.12.2008, Zesstra
