diff --git a/doc/lfun/ReceiveMsg b/doc/lfun/ReceiveMsg
index 6443bcd..cd1a34d 100644
--- a/doc/lfun/ReceiveMsg
+++ b/doc/lfun/ReceiveMsg
@@ -1,250 +1,278 @@
+
+ReceiveMsg()
+************
+
 ReceiveMsg()
 
-public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
-                              string msg_prefix, mixed origin)
+public varargs int ReceiveMsg(string msg, int msg_typ, string
+msg_action,
+   string msg_prefix, mixed origin)
 
-DEFINIERT IN:
-    /std/living/comm.c
-    /std/npc/comm.c
-    /std/player/comm.c
-    /std/room/items.c
 
-ARGUMENTE:
-    string msg
-      String mit der uebermittelten Nachricht. Muss nicht umgebrochen sein,
-      da ReceiveMsg() das ebenfalls erledigt.
-    int msg_typ
-      Nachrichtentyp(en) fuer Filterung und Flags fuer Behandlung/Umbruch.
-      Siehe unten fuer mit | kombinierbare Konstanten.
-    string msg_action (optional)
-      Ausloesende Aktion, wird auch fuer Ignorieren verwendet.
-      Default ist query_verb(). Siehe unten fuer alternative Konstanten.
-    string msg_prefix (optional)
-      String, welcher ggf. im break_string() als indent verwendet wird.
-      Default ist 0 (kein Indent)
-    mixed origin (<object>) (optional)
-      Das die Meldung ausloesende Objekt, wird fuer Ignorieren verwendet.
-      Default: previous_object()
+DEFINIERT IN
+============
 
-BESCHREIBUNG:
-    ReceiveMsg() wird benutzt, um einem Lebewesen eine Nachricht zu senden.
-    Dabei ruft es das sonst uebliche tell_object() fuer Spieler bzw.
-    catch_tell() im NPC auf.
+   /std/living/comm.c
+   /std/npc/comm.c
+   /std/player/comm.c
+   /std/room/items.c
 
-    Gerade fuer Nachrichten an Spieler bietet die Methode weitere Features,
-    die bisher sonst haendisch zu implementieren waren:
-    1) Pruefung auf Empfangbarkeit, je nach 'msg_typ', zB
-       MT_LOOK nur an Nichtblinde
-       MT_LISTEN nur an Nichttaube
-       MT_DEBUG nur an Magier/Testspieler
-    2) Pruefen auf Ignorieren von
-       - Aktion ('msg_action')
-         - mit 'msg_action' || query_verb()
-       - Urheber ('origin')
-         - fuer sendende Spieler mit origin->query_realname()
-         - fuer sendende NPCs mit origin->Name(RAW))
-    3) Speicherung in der tmhist (Typ MT_COMM)
-    4) Speicherung im Kobold (Typ MT_COMM + aktiver Kobold)
-    5) Umbrechen unter Beruecksichtigung von indent, 'msg_typ'-Flags
-       fuer Umbruch und P_PREPEND_BS
 
-    Raeume definieren standardmaessig ebenfalls ein ReceiveMsg(), welches in
-    jedem Objekt im Raum ReceiveMsg() mit den uebergebenen Argumenten aufruft.
-    In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
-    ReceiveMsg() zurueckgelieferte Wert.
-    
-RUeCKGABEWERT:
-    > 0 fuer Erfolg, < 0 fuer Misserfolg, s.u.
-    MSG_DELIVERED    bei erfolgreicher Zustellung
-    MSG_BUFFERED     bei Zwischenspeicherung durch den Kobold
+ARGUMENTE
+=========
 
-    MSG_FAILED       nicht naeher spezifizierter Fehler bei Zustellung
-    MSG_IGNORED      Nachricht wurde ignoriert (Absender, origin)
-    MSG_VERB_IGN     Nachricht wurde ignoriert (Kommandoverb, msg_action)
-    MSG_MUD_IGN      Absendendes Mud wurde ignoriert.
-    MSG_SENSE_BLOCK  Passende Sinne des Empfaenger sind blockiert (z.B.
-                     blind, taub)
-    MSG_BUFFER_FULL  Kobold kann sich nichts mehr merken
+   string msg
+     String mit der uebermittelten Nachricht. Muss nicht umgebrochen sein,
+     da ReceiveMsg() das ebenfalls erledigt.
+   int msg_typ
+     Nachrichtentyp(en) fuer Filterung und Flags fuer Behandlung/Umbruch.
+     Siehe unten fuer mit | kombinierbare Konstanten.
+   string msg_action (optional)
+     Ausloesende Aktion, wird auch fuer Ignorieren verwendet.
+     Default ist query_verb(). Siehe unten fuer alternative Konstanten.
+   string msg_prefix (optional)
+     String, welcher ggf. im break_string() als indent verwendet wird.
+     Default ist 0 (kein Indent)
+   mixed origin (<object>) (optional)
+     Das die Meldung ausloesende Objekt, wird fuer Ignorieren verwendet.
+     Default: previous_object()
 
-BEMERKUNGEN:
-    Fuer saemtliche Alternativmeldungen im Falle einer nicht erfolgreich
-    zugestellten Nachricht ist der Aufrufer von ReceiveMsg() verantwortlich.
 
-    NPCs:
-    * ReceiveMsg() ruft zwecks Abwaertskompatibilitaet catch_tell() auf
-    * empfohlen ist, in NPCs nun ReceiveMsg() zu ueberschreiben.
-      * catch_tell() muss weiterhin fuer andere tell_object()
-        ueberschrieben  werden
+BESCHREIBUNG
+============
 
-BEISPIELE:
-    #1.1 Nachricht an einen Spieler, zB in der Wueste
-    this_player()->ReceiveMsg("Die Sonne brennt dir auf den Kopf.",
-                              MT_FEEL|MT_LOOK);
+   ReceiveMsg() wird benutzt, um einem Lebewesen eine Nachricht zu senden.
+   Dabei ruft es das sonst uebliche tell_object() fuer Spieler bzw.
+   catch_tell() im NPC auf.
 
-    #1.2 Nachricht an einen Spieler von einem NPC mit Indent
-    // bei aktivem Editor+Kobold landet dieser Text auch im Kobold
-    this_player()->ReceiveMsg("Du haust ja ganz schoen rein!",
+   Gerade fuer Nachrichten an Spieler bietet die Methode weitere Features,
+   die bisher sonst haendisch zu implementieren waren:
+   1) Pruefung auf Empfangbarkeit, je nach 'msg_typ', zB
+      MT_LOOK nur an Nichtblinde
+      MT_LISTEN nur an Nichttaube
+      MT_DEBUG nur an Magier/Testspieler
+   2) Pruefen auf Ignorieren von
+      - Aktion ('msg_action')
+        - mit 'msg_action' || query_verb()
+      - Urheber ('origin')
+        - fuer sendende Spieler mit origin->query_realname()
+        - fuer sendende NPCs mit origin->Name(RAW))
+   3) Speicherung in der tmhist (Typ MT_COMM)
+   4) Speicherung im Kobold (Typ MT_COMM + aktiver Kobold)
+   5) Umbrechen unter Beruecksichtigung von indent, 'msg_typ'-Flags
+      fuer Umbruch und P_PREPEND_BS
+
+   Raeume definieren standardmaessig ebenfalls ein ReceiveMsg(), welches in
+   jedem Objekt im Raum ReceiveMsg() mit den uebergebenen Argumenten aufruft.
+   In diesem Fall ist der Rueckgabe der kleinste von allen gerufenen
+   ReceiveMsg() zurueckgelieferte Wert.
+
+
+RUeCKGABEWERT
+=============
+
+   > 0 fuer Erfolg, < 0 fuer Misserfolg, s.u.
+   MSG_DELIVERED    bei erfolgreicher Zustellung
+   MSG_BUFFERED     bei Zwischenspeicherung durch den Kobold
+
+   MSG_FAILED       nicht naeher spezifizierter Fehler bei Zustellung
+   MSG_IGNORED      Nachricht wurde ignoriert (Absender, origin)
+   MSG_VERB_IGN     Nachricht wurde ignoriert (Kommandoverb, msg_action)
+   MSG_MUD_IGN      Absendendes Mud wurde ignoriert.
+   MSG_SENSE_BLOCK  Passende Sinne des Empfaenger sind blockiert (z.B.
+                    blind, taub)
+   MSG_BUFFER_FULL  Kobold kann sich nichts mehr merken
+
+
+BEMERKUNGEN
+===========
+
+   Fuer saemtliche Alternativmeldungen im Falle einer nicht erfolgreich
+   zugestellten Nachricht ist der Aufrufer von ReceiveMsg() verantwortlich.
+
+   NPCs:
+   * ReceiveMsg() ruft zwecks Abwaertskompatibilitaet catch_tell() auf
+   * empfohlen ist, in NPCs nun ReceiveMsg() zu ueberschreiben.
+     * catch_tell() muss weiterhin fuer andere tell_object()
+       ueberschrieben  werden
+
+
+BEISPIELE
+=========
+
+   #1.1 Nachricht an einen Spieler, zB in der Wueste
+   this_player()->ReceiveMsg("Die Sonne brennt dir auf den Kopf.",
+                             MT_FEEL|MT_LOOK);
+
+   #1.2 Nachricht an einen Spieler von einem NPC mit Indent
+   // bei aktivem Editor+Kobold landet dieser Text auch im Kobold
+   this_player()->ReceiveMsg("Du haust ja ganz schoen rein!",
+                             MT_COMM|MT_FAR|MSG_DONT_STORE,
+                             MA_TELL,
+                             "Arkshat teilt dir mit: ");
+
+   #1.3 Nachricht an einen Spieler mit Fallback-Kaskade
+   // Achtung, bei MT_COMM oder Ignorieren gibt es natuerlich auch
+   // Misserfolgs-Rueckgaben. Bei einem normalen Kommando wie diesem
+   // hier ist das unproblematisch und daher sinnvoll:
+   if(this_player()->ReceiveMsg(
+        "Du drueckst den Knopf und es oeffnet sich knirschend "
+        "ein kleines Fach in der Wand.", MT_LOOK) < MSG_DELIVERED &&
+      this_player()->ReceiveMsg(
+        "Du drueckst den Knopf und irgend etwas scheint sich "
+        "knirschend zu oeffnen. Das Geraeusch kam von der Wand.",
+        MT_LISTEN) < MSG_DELIVERED) // leider blind UND taub ... also:
+     this_player()->ReceiveMsg(
+       "Du drueckst den Knopf und irgend etwas scheint zu passieren, "
+       "aber leider siehst und hoerst du nichts.", MT_FEEL);
+
+
+   #2.1 Im NPC als Empfaenger auf ein TM reagieren
+   public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
+                                 string msg_prefix, mixed origin) {
+     int ret = MSG_DELIVERED;  // Default
+
+     // eine OOC-Kommunikation?
+     if(msg_typ&MT_COMM) {
+       if(strstr(msg, "hilfe")>=0)
+         if(environment(origin)==environment()) {
+           origin->ReceiveMsg("Ich werd dir gleich helfen!",
+                              MT_COMM|MSG_DONT_STORE, MA_TELL,
+                              "Arkshat teilt dir mit: ");
+         } else {
+           origin->ReceiveMsg("Hilf dir selbst, dann hilft dir Gott!",
                               MT_COMM|MT_FAR|MSG_DONT_STORE,
                               MA_TELL,
                               "Arkshat teilt dir mit: ");
+         }
+       else if(...)
+       [...]
+     } else if(msg_typ&MT_LISTEN && msg_action==MA_SAY) {
+       [...]
+     }
 
-    #1.3 Nachricht an einen Spieler mit Fallback-Kaskade
-    // Achtung, bei MT_COMM oder Ignorieren gibt es natuerlich auch
-    // Misserfolgs-Rueckgaben. Bei einem normalen Kommando wie diesem
-    // hier ist das unproblematisch und daher sinnvoll:
-    if(this_player()->ReceiveMsg(
-         "Du drueckst den Knopf und es oeffnet sich knirschend "
-         "ein kleines Fach in der Wand.", MT_LOOK) < MSG_DELIVERED &&
-       this_player()->ReceiveMsg(
-         "Du drueckst den Knopf und irgend etwas scheint sich "
-         "knirschend zu oeffnen. Das Geraeusch kam von der Wand.",
-         MT_LISTEN) < MSG_DELIVERED) // leider blind UND taub ... also:
-      this_player()->ReceiveMsg(
-        "Du drueckst den Knopf und irgend etwas scheint zu passieren, "
-        "aber leider siehst und hoerst du nichts.", MT_FEEL);
+     return ret;
+   }
 
 
-    #2.1 Im NPC als Empfaenger auf ein TM reagieren
-    public varargs int ReceiveMsg(string msg, int msg_typ, string msg_action,
-                                  string msg_prefix, mixed origin) {
-      int ret = MSG_DELIVERED;  // Default
+   #3.1 als Sender an viele, Variante mit eigenem filter
+   // Achtung: siehe 3.3. send_room() loest vieles.
+   // Living nickt nur seinen Nichtgegnern zu
+   object *all = filter(all_inventory(environment(this_player())),
+                        #'living) - ({this_player()});
+   all -= this_player()->PresentEnemies();
+   all->ReceiveMsg(this_player()->Name()+
+                   " nickt dir verstohlen zu und scheint bereit.",
+                   MT_LOOK, MA_EMOTE);
 
-      // eine OOC-Kommunikation?
-      if(msg_typ&MT_COMM) {
-        if(strstr(msg, "hilfe")>=0)
-          if(environment(origin)==environment()) {
-            origin->ReceiveMsg("Ich werd dir gleich helfen!",
-                               MT_COMM|MSG_DONT_STORE, MA_TELL,
-                               "Arkshat teilt dir mit: ");
-          } else {
-            origin->ReceiveMsg("Hilf dir selbst, dann hilft dir Gott!",
-                               MT_COMM|MT_FAR|MSG_DONT_STORE,
-                               MA_TELL,
-                               "Arkshat teilt dir mit: ");
-          }
-        else if(...)
-        [...]
-      } else if(msg_typ&MT_LISTEN && msg_action==MA_SAY) {
-        [...]
-      }
+   #3.2 als Sender an viele, Variante mit einzelnem Iterieren
+   // Achtung: siehe 3.3. send_room() loest vieles.
+   // Living trinkt etwas, jeder im Raum soll es sehen oder hoeren
+   object ob = first_inventory(environment(this_player()));
+   do {
+     if(living(ob) && ob!=this_player())
+       ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
+                      MT_LOOK|MT_LISTEN,
+                      MA_DRINK);
+     ob = next_inventory(ob);
+   } while(ob);
 
-      return ret;
-    }
+   #3.3 als Sender an viele, Variante mit send_room
+   // Living gruesst seine Freunde
+   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
+   object *exclude = this_player()->PresentEnemies();
+   send_room(this_object(),
+             this_player()->Name()+" gruesst dich.",
+             MT_LOOK|MT_LISTEN,
+             MA_EMOTE,
+             0,
+             exclude);
+
+   #3.4 als Sender an viele mit send_room und ReceiveMsg()
+   // Living gruesst seine Freunde, seine Feinde sehen das
+   // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
+   object *exclude = this_player()->PresentEnemies();
+   send_room(this_object(),
+             this_player()->Name()+" gruesst dich.",
+             MT_LOOK|MT_LISTEN, MA_EMOTE, 0, exclude);
+   exclude->ReceiveMessage(
+     this_player()->Name()+" gruesst, aber nicht dich.",
+     MT_LOOK|MT_LISTEN, MA_EMOTE);
 
 
-    #3.1 als Sender an viele, Variante mit eigenem filter
-    // Achtung: siehe 3.3. send_room() loest vieles.
-    // Living nickt nur seinen Nichtgegnern zu
-    object *all = filter(all_inventory(environment(this_player())),
-                         #'living) - ({this_player()});
-    all -= this_player()->PresentEnemies();
-    all->ReceiveMsg(this_player()->Name()+
-                    " nickt dir verstohlen zu und scheint bereit.",
-                    MT_LOOK, MA_EMOTE);
+KONSTANTEN FUER PARAMETER
+=========================
 
-    #3.2 als Sender an viele, Variante mit einzelnem Iterieren
-    // Achtung: siehe 3.3. send_room() loest vieles.
-    // Living trinkt etwas, jeder im Raum soll es sehen oder hoeren
-    object ob = first_inventory(environment(this_player()));
-    do {
-      if(living(ob) && ob!=this_player())
-        ob->ReceiveMsg(this_player()->Name()+" trinkt einen Schnaps aus.",
-                       MT_LOOK|MT_LISTEN,
-                       MA_DRINK);
-      ob = next_inventory(ob);
-    } while(ob);
+   Saemtlich in "/sys/living/comm.h". Hier nicht notwendigerweise
+   immer aktuell oder vollstaendig.
 
-    #3.3 als Sender an viele, Variante mit send_room
-    // Living gruesst seine Freunde
-    // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
-    object *exclude = this_player()->PresentEnemies();
-    send_room(this_object(),
-              this_player()->Name()+" gruesst dich.",
-              MT_LOOK|MT_LISTEN,
-              MA_EMOTE,
-              0,
-              exclude);
+   <msg_typ>
+     MT_UNKNOWN      unspez. Nachrichtentyp (nicht verwenden). Es wird
+                     versucht, aufgrund <msg_action> den Typ zu erraten.
+     MT_LOOK         alles, was man sieht
+     MT_LISTEN       alles, was man hoert
+     MT_FEEL         alles, was man fuehlt
+     MT_TASTE        alles, was man schmeckt
+     MT_SMELL        alles, was man riecht
+     MT_MAGIC        alle sonstigen (uebersinnlichen) Wahrnehmungen
+     MT_NOTIFICATION Statusmeldungen, Kommandobestaetigungen
+     MT_COMM         alle OOC-Kommunikation, d.h. nicht durch o.g. Sinne
+                     abgedeckt.
+     MT_FAR          alles, was aus der Ferne / einem anderen Raum kommt.
+                     muss mit min. einem anderen Typ kombiniert werden
+     MT_DEBUG        Debugmeldungen, sehen nur Magier im Magiermodus
+     MT_NEWS         Mails & MPA
 
-    #3.4 als Sender an viele mit send_room und ReceiveMsg()
-    // Living gruesst seine Freunde, seine Feinde sehen das
-    // send_room() ruft ReceiveMsg mit allen entsprechenden Parametern
-    object *exclude = this_player()->PresentEnemies();
-    send_room(this_object(),
-              this_player()->Name()+" gruesst dich.",
-              MT_LOOK|MT_LISTEN, MA_EMOTE, 0, exclude);
-    exclude->ReceiveMessage(
-      this_player()->Name()+" gruesst, aber nicht dich.",
-      MT_LOOK|MT_LISTEN, MA_EMOTE);
+     MSG_DONT_BUFFER Nachricht darf nicht im Kobold gespeichert werden
+     MSG_DONT_STORE  Nachricht darf nicht in die Comm-History
+     MSG_DONT_WRAP   Nachricht nicht per break_string umbrechen
+     MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden
 
-KONSTANTEN FUER PARAMETER:
-    Saemtlich in "/sys/living/comm.h". Hier nicht notwendigerweise
-    immer aktuell oder vollstaendig.
+     MSG_BS_LEAVE_LFS    wie BS_LEAVE_MY_LFS fuer break_string()
+     MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
+     MSG_BS_BLOCK        wie BS_BLOCK fuer break_string()
+     MSG_BS_NO_PARINDENT wie BS_NO_PARINDENT fuer break_string()
+     MSG_BS_INDENT_ONCE  wie BS_INDENT_ONCE fuer break_string()
+     MSG_BS_PREP_INDENT  wie BS_PREPEND_INDENT fuer break_string()
 
-    <msg_typ>
-      MT_UNKNOWN      unspez. Nachrichtentyp (nicht verwenden). Es wird
-                      versucht, aufgrund <msg_action> den Typ zu erraten.
-      MT_LOOK         alles, was man sieht
-      MT_LISTEN       alles, was man hoert
-      MT_FEEL         alles, was man fuehlt
-      MT_TASTE        alles, was man schmeckt
-      MT_SMELL        alles, was man riecht
-      MT_MAGIC        alle sonstigen (uebersinnlichen) Wahrnehmungen
-      MT_NOTIFICATION Statusmeldungen, Kommandobestaetigungen
-      MT_COMM         alle OOC-Kommunikation, d.h. nicht durch o.g. Sinne
-                      abgedeckt.
-      MT_FAR          alles, was aus der Ferne / einem anderen Raum kommt.
-                      muss mit min. einem anderen Typ kombiniert werden
-      MT_DEBUG        Debugmeldungen, sehen nur Magier im Magiermodus
-      MT_NEWS         Mails & MPA
+   <msg_action> (optional)
+     MA_UNKNOWN     Unspez. Aktion. Es wird der Default query_verb()
+                    benutzt bzw. versucht, die Aktion zu erraten.
+     MA_PUT         Jemand legt etwas hin und gibt jemanden etwas
+     MA_TAKE        Jemand nimmt etwas
+     MA_MOVE_IN     Jemand betritt den Raum
+     MA_MOVE_OUT    Jemand verlaesst den Raum
+     MA_MOVE        Jemand bewegt sich
+     MA_FIGHT       Jemand kaempft
+     MA_WIELD       Jemand zueckt eine Waffe
+     MA_UNWIELD     Jemand steckt eine Waffe weg
+     MA_WEAR        Jemand zieht etwas an
+     MA_UNWEAR      Jemand zieht etwas aus
+     MA_EAT         Jemand isst etwas
+     MA_DRINK       Jemand trinkt etwas
+     MA_SPELL       Jemand wirkt einen Spell
+     MA_LOOK        Jemand sieht etwas an, untersucht etwas
+     MA_LISTEN      Jemand horcht oder lauscht an etwas
+     MA_FEEL        Jemand betastet etwas
+     MA_SMELL       Jemand schnueffelt herum
+     MA_SENSE       Jemand macht eine uebersinnliche Wahrnehmung
+     MA_READ        Jemand liest etwas
+     MA_USE         Jemand benutzt etwas
+     MA_SAY         Jemand sagt etwas
+     MA_REMOVE      Etwas verschwindet
+     // MA_CHAT        Chatkrams (z.B. teile-mit, Teamkampfchat)
+     MA_CHANNEL     Ebenen
+     MA_EMOTE       (r)Emotes, Soulverben (remotes mit Typ MT_COMM|MT_FAR)
+     MA_SHOUT       Rufen (nicht: shout()!)
+     MA_SHOUT_SEFUN Rufen ueber shout(SE)
 
-      MSG_DONT_BUFFER Nachricht darf nicht im Kobold gespeichert werden
-      MSG_DONT_STORE  Nachricht darf nicht in die Comm-History
-      MSG_DONT_WRAP   Nachricht nicht per break_string umbrechen
-      MSG_DONT_IGNORE Nachricht kann nicht ignoriert werden
 
-      MSG_BS_LEAVE_LFS    wie BS_LEAVE_MY_LFS fuer break_string()
-      MSG_BS_SINGLE_SPACE wie BS_SINGLE_SPACE fuer break_string()
-      MSG_BS_BLOCK        wie BS_BLOCK fuer break_string()
-      MSG_BS_NO_PARINDENT wie BS_NO_PARINDENT fuer break_string()
-      MSG_BS_INDENT_ONCE  wie BS_INDENT_ONCE fuer break_string()
-      MSG_BS_PREP_INDENT  wie BS_PREPEND_INDENT fuer break_string()
+SIEHE AUCH
+==========
 
-    <msg_action> (optional)
-      MA_UNKNOWN     Unspez. Aktion. Es wird der Default query_verb()
-                     benutzt bzw. versucht, die Aktion zu erraten.
-      MA_PUT         Jemand legt etwas hin und gibt jemanden etwas
-      MA_TAKE        Jemand nimmt etwas
-      MA_MOVE_IN     Jemand betritt den Raum
-      MA_MOVE_OUT    Jemand verlaesst den Raum
-      MA_MOVE        Jemand bewegt sich 
-      MA_FIGHT       Jemand kaempft
-      MA_WIELD       Jemand zueckt eine Waffe
-      MA_UNWIELD     Jemand steckt eine Waffe weg
-      MA_WEAR        Jemand zieht etwas an
-      MA_UNWEAR      Jemand zieht etwas aus
-      MA_EAT         Jemand isst etwas
-      MA_DRINK       Jemand trinkt etwas
-      MA_SPELL       Jemand wirkt einen Spell
-      MA_LOOK        Jemand sieht etwas an, untersucht etwas
-      MA_LISTEN      Jemand horcht oder lauscht an etwas
-      MA_FEEL        Jemand betastet etwas
-      MA_SMELL       Jemand schnueffelt herum
-      MA_SENSE       Jemand macht eine uebersinnliche Wahrnehmung
-      MA_READ        Jemand liest etwas
-      MA_USE         Jemand benutzt etwas
-      MA_SAY         Jemand sagt etwas
-      MA_REMOVE      Etwas verschwindet
-      // MA_CHAT        Chatkrams (z.B. teile-mit, Teamkampfchat)
-      MA_CHANNEL     Ebenen
-      MA_EMOTE       (r)Emotes, Soulverben (remotes mit Typ MT_COMM|MT_FAR)
-      MA_SHOUT       Rufen (nicht: shout()!)
-      MA_SHOUT_SEFUN Rufen ueber shout(SE)
-
-SIEHE AUCH:
-    Verwandt: send_room(SE)
-    Lfuns:    TestIgnore(L)
-    Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
-              query_verb(E), query_once_interactive(E), break_string(SE)
+   Verwandt: send_room(SE)
+   Lfuns:    TestIgnore(L)
+   Efuns:    tell_object(E), catch_tell(L), catch_msg(L)
+             query_verb(E), query_once_interactive(E), break_string(SE)
 
 13.03.2016, Zesstra
-
