diff --git a/doc/lfun/AutoAttack b/doc/lfun/AutoAttack
new file mode 100644
index 0000000..2e94201
--- /dev/null
+++ b/doc/lfun/AutoAttack
@@ -0,0 +1,82 @@
+
+AutoAttack()
+************
+
+
+FUNKTION
+========
+
+   int AutoAttack(object ob)
+
+
+DEFINIERT IN
+============
+
+   /std/npc/combat
+
+
+ARGUMENTE
+=========
+
+   object ob
+      Das ggf. annzugreifende Object. (Achtung, nicht nur Livings)
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion wird aus heart_beat() heraus aufgerufen. Sie
+   bestimmt, ob ein Living automatisch angegriffen werden soll oder
+   nicht.
+
+
+RUeCKGABEWERT
+=============
+
+   1 fuer Angriff, sonst 0.
+
+
+BEMERKUNGEN
+===========
+
+   Da diese Funktion aus heart_beat() heraus aufgerufen wird, und zwar
+   einmal pro anwesendem Objekt (nicht nur fuer Livings), sollte man
+   hier moeglichst wenig Dinge tun. Verzichtet am besten ganz auf die
+   Nutzung, falls irgendwie moeglich.
+
+   Da auch NPCs uebergeben werden, kann man hier auch diese
+   automatisch angreifen lassen, was normalerweise nicht der Fall ist.
+   Dies funktioniert jedoch nur, wenn der heart_beat() eingeschaltet
+   ist, also normalerweise nicht in Abwesenheit von Spielern.
+
+
+BEISPIELE
+=========
+
+   inherit "/std/npc";
+
+   #include <npc.h>
+
+   protected void create()
+   {
+     ...
+     SetProp(P_AGGRESSIVE,1);
+     ...
+   }
+
+   // Keine Leute angreifen, die auf der Freundesliste stehen.
+   // Bei dieser Variante wir das P_AGGRESSIVE in ob nicht ausgewertet, falls
+   // ob als Freund erkannt wird.
+   int AutoAttack(object ob)
+   {
+     if(member(freunde,ob)!=-1) return 0;
+     else return ::AutoAttack(ob);
+   }
+
+
+SIEHE AUCH
+==========
+
+   heart_beat(), P_AGGRESSIVE
+
+Letzte Aenderung: 28.08.2019, Bugfix
diff --git a/doc/lfun/Defend b/doc/lfun/Defend
index e5ee6ea..189e6b5 100644
--- a/doc/lfun/Defend
+++ b/doc/lfun/Defend
@@ -6,9 +6,8 @@
 FUNKTION
 ========
 
-   public int Defend(int dam, string|string* dam_types, int|mapping
-   si_spell,
-      object enemy)
+   public int Defend(int dam, string|string* dam_types,
+      int|mapping si_spell, object enemy)
 
 
 DEFINIERT IN
@@ -53,13 +52,13 @@
    aber nicht unter 0.
 
 
-Der Parameter 'spell'
----------------------
+Der Parameter 'si_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.
+   Ist 'si_spell' 0, dann gilt der Angriff als normale physische
+   Attacke Uebergibt man als 'si_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 (int)
 
@@ -95,13 +94,12 @@
 
         1 bei Flaechenspells (die mehrere Ziele treffen koennen)
 
-   * SP_REDUCE_ARMOUR (mapping) ------------ Mapping: keys
-     AT_X/P_BODY, values int>=0
+   * SP_REDUCE_ARMOUR (mapping) ------------
 
-        Die Schutzwirkung durch P_AC/Magie einer Ruestung wird
-        typabhaengig reduziert. Als Keys sind P_BODY und die AT_*
-        erlaubt, die Werte muessen ints > 0 sein. Aufbau eines
-        Mappings im Beispiel:
+        Mapping: keys AT_X/P_BODY, values int>=0 Die Schutzwirkung
+        durch P_AC/Magie einer Ruestung wird typabhaengig reduziert.
+        Als Keys sind P_BODY und die AT_* erlaubt, die Werte muessen
+        ints > 0 sein. Aufbau eines Mappings im Beispiel:
 
            ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht
              P_BODY:  50,  // Koerper zu 50%
@@ -196,30 +194,37 @@
    enem->Defend(100, ({DT_BLUDGEON}), ([SP_PHYSICAL_ATTACK:1]), this_object());
 
    // ein magischer Angriff (ohne Treffermeldung):
-   enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0]), this_object());
+   enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0]),
+                this_object());
 
    // ein magischer Angriff mit Treffermeldung:
    enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_SHOW_DAMAGE:1]),
-     this_object());
+                this_object());
 
 
 SIEHE AUCH
 ==========
 
-   Angriff: Attack(), P_NO_ATTACK, InsertEnemy()
+   Angriff:
+      Attack(), P_NO_ATTACK, InsertEnemy()
 
-   Schaden:   P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE, do_damage(),
-   reduce_hit_points()
+   Schaden:
+      P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE, do_damage(),
+      reduce_hit_points()
 
-   Schutz:    P_DEFENDERS, InformDefend(), DefendOther(), P_ARMOURS,
-   P_AC, P_DEFEND_FUNC, QueryDefend(), P_BODY
+   Schutz:
+      P_DEFENDERS, InformDefend(), DefendOther(), P_ARMOURS, P_AC,
+      P_DEFEND_FUNC, QueryDefend(), P_BODY
 
-   Daten:     P_LAST_COMBAT_TIME, P_LAST_DAMTYPES, P_LAST_DAMTIME,
-   P_LAST_DAMAGE, P_DAMAGE_MSG
+   Daten:
+      P_LAST_COMBAT_TIME, P_LAST_DAMTYPES, P_LAST_DAMTIME,
+      P_LAST_DAMAGE, P_DAMAGE_MSG
 
-   Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance()
+   Resistenz:
+      P_RESISTANCE_STRENGTHS, CheckResistance()
 
-   Sonstiges: CheckSensitiveAttack(), InternalModifyDefend(),
-   normalize_defend_args() UseSkill(), DefendInfo()
+   Sonstiges:
+      CheckSensitiveAttack(), InternalModifyDefend(),
+      normalize_defend_args(), UseSkill(), DefendInfo()
 
 Letzte Aenderung: 20.01.2019, Zesstra
diff --git a/doc/lfun/DefendOther b/doc/lfun/DefendOther
index 0d36fc2..2b706f5 100644
--- a/doc/lfun/DefendOther
+++ b/doc/lfun/DefendOther
@@ -6,8 +6,8 @@
 FUNKTION
 ========
 
-   public <int|string*|mapping>* DefendOther(int dam, string|string* dam_type,
-                                             int|mapping spell, object enemy)
+   public <int|string*|mapping>* DefendOther(int dam, string* dam_type,
+                                       int|mapping si_spell, object enemy)
 
 
 DEFINIERT IN
@@ -19,16 +19,20 @@
 ARGUMENTE
 =========
 
-   dam
+   int dam
      Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen
      verursacht werden soll.
-   dam_type
+
+   string* 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
+
+   mapping si_spell
+     Mapping mit zusaetzlichen Informationen zum Angriff
+     Alte Objekte uebergeben manchmal einen Integer (0 fuer
+     physikalischen Angriff, 1 fuer Zauber.
+
+   object enemy
      Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.
 
 
@@ -37,9 +41,9 @@
 
    Array mit den Eintraegen der gegebenenfalls veraenderten
    uebergebenen Parameter:
-       (1) dam      [Typ int],
-       (2) dam_type [Typ string*],
-       (3) spell    [Typ mapping].
+           (1) dam      [Typ int],
+           (2) dam_type [Typ string*],
+           (3) spell    [Typ mapping].
 
 
 BESCHREIBUNG
@@ -52,15 +56,18 @@
    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
+
+   Des weiteren 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.
 
@@ -70,29 +77,37 @@
 
    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");
-       ...
-     }
+
+   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());
-     }
+   void 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});
-     }
+   public <int|string*|mapping>* DefendOther(int dam,
+       string|string* dt, int|mapping spell, object enemy) {
+     if (sizeof(dt) && member(dt, DT_FIRE) != -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
@@ -102,7 +117,14 @@
 SIEHE AUCH
 ==========
 
-   AddDefender(), RemoveDefender(), InformDefend(), Kill(), IsEnemy(),
-   P_DEFENDERS, /std/living/combat.c, /sys/new_skills.h
+   Funktionen:
+      AddDefender(), RemoveDefender(), InformDefend(), Kill(),
+      IsEnemy(), Defend()
 
-Last modified: Fri Feb 25 14:45:00 2000 by Paracelsus
+   Properties
+      P_DEFENDERS
+
+   Objekte:
+      /std/living/combat.c, /sys/new_skills.h
+
+Last modified: 2019-Aug-26, Arathorn
diff --git a/doc/lfun/second_life b/doc/lfun/second_life
index d40c63e..1ab849f 100644
--- a/doc/lfun/second_life
+++ b/doc/lfun/second_life
@@ -6,7 +6,7 @@
 FUNKTION
 ========
 
-   varargs int second_life(object obj);
+   protected varargs int second_life(object corpse);
 
 
 DEFINIERT IN
@@ -18,7 +18,7 @@
 ARGUMENTE
 =========
 
-   obj
+   corpse
       Leiche des Lebewesens (sofern es eine hat)
 
 
@@ -46,9 +46,35 @@
       wenn das Objekt im Tod nicht zerstoert wird (Spieler)
 
 
+BEMERKUNGEN
+===========
+
+   Das Inventar des Livings wurde bei Aufruf von second_live()
+   normalerweise schon in die Leiche bewegt, sofern diese existiert.
+   War das Inventar sehr gross, koennen allerdings noch vereinzelte
+   Objekte im Living sein, die erst spaeter bewegt werden. Will man
+   noch Gegenstaende hinzufuegen, muss man diese direkt in die Leiche
+   bewegen, *nicht* in das gestorbene Lebewesen.
+
+
+BEISPIEL
+========
+
+   protected varargs int second_life(object corpse)
+   {
+     // Wenn man sich wirklich sicher ist, dass das Lebewesen eine Leiche
+     // hat (weil es der eigene NPC ist), ist es verfuehrerisch, die Pruefung
+     // auf die Existenz der Leiche wegzulassen. Aber auch dann koennte es ja
+     // passieren, dass diese vom Raum bereits zerstoert wurde.
+     if (corpse)
+         corpse->AddItem("tolle_trophaehe",REFRESH_NONE);
+     return 0;
+   }
+
+
 SIEHE AUCH
 ==========
 
    die()
 
-Last modified: 17.03.2019, Zesstra
+Letzte Aenderung: 04.09.2019, Bugfix
