diff --git a/doc/beispiele/fernwaffen/kurzbogen.c b/doc/beispiele/fernwaffen/kurzbogen.c
new file mode 100644
index 0000000..93623e5
--- /dev/null
+++ b/doc/beispiele/fernwaffen/kurzbogen.c
@@ -0,0 +1,32 @@
+inherit "/std/ranged_weapon";
+
+#include "./path.h"
+#include <properties.h>
+
+void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_SHORT, "Ein Kurzbogen");
+  SetProp(P_INFO,
+    "Die Syntax lautet: schiesse <geschoss> auf <ziel>\n");
+  SetProp(P_NAME, "Kurzbogen");
+  SetProp(P_LONG, break_string(
+    "Mit diesem Kurzbogen kann man sicher nicht weit schiessen."));
+  SetProp(P_MATERIAL, MAT_MISC_WOOD);
+
+  AddId("kurzbogen");
+  SetProp(P_GENDER, MALE);
+  SetProp(P_WEIGHT, 800);
+  SetProp(P_VALUE, 300);
+
+  SetProp(P_WC, 10);
+  SetProp(P_DAM_TYPE, DT_BLUDGEON);
+
+  SetProp(P_SHOOTING_WC, 60);
+  SetProp(P_NR_HANDS, 2);
+  SetProp(P_WEAPON_TYPE, WT_RANGED_WEAPON);
+  SetProp(P_AMMUNITION, MUN_ARROW);
+  SetProp(P_STRETCH_TIME, 1);
+  SetProp(P_RANGE, 10);
+}
\ No newline at end of file
diff --git a/doc/beispiele/fernwaffen/langbogen.c b/doc/beispiele/fernwaffen/langbogen.c
new file mode 100644
index 0000000..7956dd3
--- /dev/null
+++ b/doc/beispiele/fernwaffen/langbogen.c
@@ -0,0 +1,32 @@
+inherit "/std/ranged_weapon";
+
+#include "./path.h"
+#include <properties.h>
+
+void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_SHORT, "Ein Langbogen");
+  SetProp(P_INFO,
+    "Die Syntax lautet: schiesse <geschoss> auf <ziel>\n");
+  SetProp(P_NAME, "Langbogen");
+  SetProp(P_LONG, break_string(
+    "Mit diesem Langbogen kann man bestimmt hervorragend weit schiessen."));
+  SetProp(P_MATERIAL, MAT_MISC_WOOD);
+
+  AddId("langbogen");
+  SetProp(P_GENDER, MALE);
+  SetProp(P_WEIGHT, 800);
+  SetProp(P_VALUE, 300);
+
+  SetProp(P_WC, 30);
+  SetProp(P_DAM_TYPE, DT_BLUDGEON);
+
+  SetProp(P_SHOOTING_WC, 120);
+  SetProp(P_NR_HANDS, 2);
+  SetProp(P_WEAPON_TYPE, WT_RANGED_WEAPON);
+  SetProp(P_AMMUNITION, MUN_ARROW);
+  SetProp(P_STRETCH_TIME, 2);
+  SetProp(P_RANGE, 30);
+}
\ No newline at end of file
diff --git a/doc/beispiele/fernwaffen/npc.c b/doc/beispiele/fernwaffen/npc.c
new file mode 100644
index 0000000..3544d44
--- /dev/null
+++ b/doc/beispiele/fernwaffen/npc.c
@@ -0,0 +1,29 @@
+inherit "/std/npc";
+
+#include "./path.h"
+#include <properties.h>
+
+void create() {
+  ::create();
+  AddId(({"npc", "gegner", "ziel"}));
+  SetProp(P_NAME, "Ziel");
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_SHORT, "Ein Ziel");
+
+  SetProp(P_HP, 1000);
+  SetProp(P_BODY, 100);
+}
+
+varargs int Defend(int dam, string* dam_type, mixed spell, object enemy) {
+  int predam = dam;
+  int result = ::Defend(dam, &dam_type, &spell, enemy);
+  
+  string str = break_string(sprintf(
+    "Die Zielscheibe sagt: %d Schaden rein und fuer %d getroffen.",
+    predam, result), 78);
+
+  tell_room(load_object(__PATH__(0)"zielraum"), str);
+  tell_room(load_object(__PATH__(0)"schussraum"), str);
+
+  return result;
+}
\ No newline at end of file
diff --git a/doc/beispiele/fernwaffen/path.h b/doc/beispiele/fernwaffen/path.h
new file mode 100644
index 0000000..d284140
--- /dev/null
+++ b/doc/beispiele/fernwaffen/path.h
@@ -0,0 +1,3 @@
+#pragma rtt_checks, save_types
+#pragma pedantic,  range_check
+#pragma warn_empty_casts, warn_missing_return, warn_function_inconsistent
\ No newline at end of file
diff --git a/doc/beispiele/fernwaffen/pfeile.c b/doc/beispiele/fernwaffen/pfeile.c
new file mode 100644
index 0000000..f4b11a3
--- /dev/null
+++ b/doc/beispiele/fernwaffen/pfeile.c
@@ -0,0 +1,41 @@
+inherit "/std/unit";
+
+#include "./path.h"
+#include <properties.h>
+#include <class.h>
+
+void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_NAME, ({"Pfeil", "Pfeile"}) );
+  SetProp(P_LONG, break_string(
+    "Ein paar einfache Holzpfeile.", 78));
+  SetProp(P_GENDER, MALE);
+  SetProp(P_AMOUNT, 1);
+  SetProp(P_SHOOTING_WC, 40);
+  SetProp(P_DAM_TYPE, ({DT_PIERCE}));
+  SetProp(P_WEAPON_TYPE, WT_AMMU);
+  SetProp(P_MATERIAL, MAT_MISC_WOOD);
+
+  SetGramsPerUnits(120,1);
+  SetCoinsPerUnits(25,1);
+
+  AddId(MUN_ARROW);
+  AddSingularId("pfeil");
+  AddPluralId("pfeile");
+  AddClass(CL_AMMUNITION);
+
+  SetProp(P_HIT_FUNC, this_object());
+}
+
+int HitFunc(object enemy) {
+  if(!random(5)) {
+    tell_object(environment(), break_string(
+      "Der Pfeil schnurrt vom Bogen und dabei splittert das Holz "
+      "etwas. Gratiswiderhaken, das ist ja toll!", 78));
+    return 20;
+  }
+
+  return 0;
+}
\ No newline at end of file
diff --git a/doc/beispiele/fernwaffen/schussraum.c b/doc/beispiele/fernwaffen/schussraum.c
new file mode 100644
index 0000000..79179c9
--- /dev/null
+++ b/doc/beispiele/fernwaffen/schussraum.c
@@ -0,0 +1,34 @@
+inherit "/std/room";
+
+#include "./path.h"
+#include <properties.h>
+
+void create() {
+  ::create();
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INT_SHORT, "Auf einem Baum");
+  SetProp(P_INT_LONG, break_string(
+    "Du hockst auf einem Baum und kannst auf die Lichtung unter Dir sehen. "
+    "'schau runter' hilft sicherlich, Ziele auszumachen."));
+
+  AddDetail("runter", function string { 
+                        return __PATH__(0)"zielraum"->int_long(this_player());
+                      });
+
+  AddItem(__PATH__(0)"langbogen", REFRESH_REMOVE);
+  AddItem(__PATH__(0)"kurzbogen", REFRESH_REMOVE);
+  AddItem(__PATH__(0)"pfeile", REFRESH_REMOVE, ([P_AMOUNT: 20]));
+
+  AddExit("zielraum", __PATH__(0)"zielraum");
+  load_object(__PATH__(0)"zielraum");
+
+  SetProp(P_TARGET_AREA, __PATH__(0)"zielraum"); // anderer Raum beschiessbar
+  SetProp(P_SHOOTING_AREA, 15);                  // 15 Entfernung
+}
+
+// nur wegen des P_NEVER_CLEAN im Zielraum und nur hier in doc relevant
+public varargs int remove(int silent) {
+  __PATH__(0)"zielraum"->remove();
+  return ::remove();
+}
diff --git a/doc/beispiele/fernwaffen/zielraum.c b/doc/beispiele/fernwaffen/zielraum.c
new file mode 100644
index 0000000..6177032
--- /dev/null
+++ b/doc/beispiele/fernwaffen/zielraum.c
@@ -0,0 +1,19 @@
+inherit "/std/room";
+
+#include "./path.h"
+#include <properties.h>
+
+void create() {
+  ::create();
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INT_SHORT, "Auf einer Lichtung");
+  SetProp(P_INT_LONG, break_string(
+    "Auf dieser Lichtung steht ein Baum, der verdaechtig viele Aeste hat, "
+    "von denen man auf die Lichtung gut sehen kann."));
+  SetProp(P_NEVER_CLEAN, 1); // damit der Raum auch da bleibt
+
+  AddItem(__PATH__(0)"npc", REFRESH_REMOVE);
+
+  AddExit("schussraum", __PATH__(0)"schussraum");
+}
