diff --git a/doc/sphinx/lfun/ReceiveDynWave.rst b/doc/sphinx/lfun/ReceiveDynWave.rst
new file mode 100644
index 0000000..567836b
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveDynWave.rst
@@ -0,0 +1,63 @@
+ReceiveWave()
+=============
+
+FUNKTION
+--------
+
+  public int ReceiveDynWave(struct wave_s wave, string msg_action = comm_guess_action(), object origin = previous_object());
+
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+
+ARGUMENTE
+---------
+
+  struct wave_s* wave
+    Die auszugebende Nachrichten mit Zusatzinformationen. (s.u.)
+  string action
+    action wird als <action> an ReceiveMsg() weitergegeben
+  object origin
+    Absenderobjekt der Nachricht (Default: previous_object())
+
+BESCHREIBUNG
+------------
+
+  Sendet die in <wave> angegebene Nachricht an den Empfaenger.
+
+  Im Unterschied zu ReceiveWave() wird ein Variable namens cl in <wave> vorher ausgewertet und kann dynamisch eine neue/geaenderte <wave> liefern, welche dann ausgegeben wird.
+
+  Hierbei ist <wave> also eine von wave_s erbende struct, welche (mindestens) eine Variable <cl> vom Typ closure zusaetzlich besitzt.
+
+RUECKGABEWERT
+-------------
+
+  Der Rueckgabe ist der Rueckgabewert von ReceiveMsg().
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  // von wave_s abgeleitete struct
+  struct dynwave_s (wave_s) {
+      closure cl;
+  }
+  struct dynwave_s wave = (<dynwave_s> msg: "Pass auf! Ein boeser, schwarzer Drache!",
+                            type: MT_LISTEN, prefix: "Humni ruft: ");
+  wave.cl = function struct wave_s (struct wave_s wave)
+    { wave.prefix = ({"Humni","Jof","Zook"})[random(3)] + " ruft: ";
+      return wave;
+    };
+  ReceiveWave(wave, MA_LISTEN);
+
+
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`, :doc:`ReceiveWave`
+
+Letzte Aenderung: 30.07.2025, Zesstra
+
+
diff --git a/doc/sphinx/lfun/ReceiveWave.rst b/doc/sphinx/lfun/ReceiveWave.rst
new file mode 100644
index 0000000..d19b9bc
--- /dev/null
+++ b/doc/sphinx/lfun/ReceiveWave.rst
@@ -0,0 +1,66 @@
+ReceiveWave()
+=============
+
+FUNKTION
+--------
+
+  public int ReceiveWave(struct wave_s wave, string msg_action = comm_guess_action(), object origin = previous_object());
+
+DEFINIERT IN
+------------
+
+  /std/living/comm.c
+
+ARGUMENTE
+---------
+
+  struct wave_s* wave
+    Die auszugebende Nachrichten mit Zusatzinformationen. (s.u.)
+  string action
+    action wird als <action> an ReceiveMsg() weitergegeben
+  object origin
+    Absenderobjekt der Nachricht (Default: previous_object())
+
+BESCHREIBUNG
+------------
+
+  Sendet die in <wave> angegebene Nachricht an den Empfaenger.
+
+  <wave> ist meist eine struct wave_s. Diese fasst msg, msg_type und prefix fuer ReceiveMsg in eine Datenstruktur zusammen. Sie ist in /secure/simul_efun/comm.c definiert (und steht allen Programmen automatisch zur Verfuegung). Sie hat die Eintraege string msg, int type, string prefix.
+
+  <wave> kann jedoch auch eine von wave_s erbende struct sein, welche zusaetzliche Eintraege besitzt (die hier nicht benutzt werden). Damit kann man die Meldung mit anderen dazu gehoerenden Daten zusammenfassen.
+
+
+RUECKGABEWERT
+-------------
+
+  Der Rueckgabe ist der Rueckgabewert von ReceiveMsg().
+
+BEISPIEL
+--------
+
+  .. code-block:: pike
+
+  // Einfache Nachricht
+  this_player().ReceiveWave((<wave_s> msg: "Pass auf! Ein boeser, schwarzer Drache!",
+                                      type: MT_LISTEN, prefix: "Humni ruft: ") );
+  // von wave_s abgeleitete struct, welche einen einfach Zauberspruch beschreibt
+  struct spell_s (wave_s) {
+      int dam;
+      string* dam_type;
+      mapping si_spell;
+  }
+  struct spell_s sp = (<spell_s> msg: "Der Zauberer schleudert Dir einen Blitz entgegen.",
+                       type: MT_LOOK|MT_FEEL, dam: 42, dam_type: DT_LIGHTNING,
+                       sinfo: ([...]));
+  en.ReceiveWave(sp, MA_COMBAT);
+  en.Defend(sp.dam, sp.dam_type, sp.si_spell);
+
+
+SIEHE AUCH
+----------
+
+  :doc:`ReceiveMsg`, :doc:`ReceiveDynWave`
+
+Letzte Aenderung: 30.07.2025, Zesstra
+
