Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/zauberwald/obj/tarnzauber.c b/doc/beispiele/zauberwald/obj/tarnzauber.c
new file mode 100644
index 0000000..c226494
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/tarnzauber.c
@@ -0,0 +1,78 @@
+// (c) 2003 by Padreic (Padreic@mg.mud.de)
+// Das Objekt realisiert einen Tarnzauber, aehnlich
+// dem Tarnhelm. Jedoch ohne Shadow und nur auf die
+// Rasse beschraenkt.
+
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+#include <defines.h>
+
+inherit "/std/thing";
+
+static string race;
+
+create()
+{
+  if (!clonep(this_object())) return;
+  ::create();
+  SetProp(P_SHORT, 0);
+  SetProp(P_LONG, "Tarnzauber");
+  SetProp(P_NAME, "Tarnzauber");
+  SetProp(P_INVIS, 1);
+  SetProp(P_GENDER, MALE);
+  SetProp(P_VALUE,  0);
+  SetProp(P_NOGET, 1);
+  SetProp(P_WEIGHT, 0);
+  Set(P_DEFEND_FUNC, ME);
+  AddId("\ntarnzauber");
+}
+
+// die NPCs im Zauberwald durchschauen den Zauber... :o)
+string _query_race()
+{
+   if (previous_object(1) && getuid(previous_object(1))==getuid())
+      return previous_object()->_query_race()||race;
+   return "Dunkelelf";
+}
+
+void Initialize(object pl)
+{
+   object *armours;
+   pl->Set(P_RACE, #'_query_race, F_QUERY_METHOD);
+   armours=(pl->QueryProp(P_ARMOURS));
+   if (member(armours, ME)>=0) return 0;
+   pl->SetProp(P_ARMOURS, armours+({ ME }));
+   race=pl->Query(P_RACE);
+}
+
+int QueryDefend(string *dtyp, mixed spell, object enemy)
+{
+  mixed am;
+  // noch ein paar paranoide Sicherheitsabfragen... :o)
+  if (!previous_object() ||
+      !pointerp(am=previous_object()->QueryProp(P_ARMOURS)) ||
+      member(am, ME)==-1) return 0;
+  tell_object(previous_object(), "Dein Tarnzauber loest sich auf.\n");
+  remove();
+}
+
+int DefendFunc(string *dtyp, mixed spell, object enemy)
+{
+   return QueryDefend(dtyp, spell, enemy);
+}
+
+varargs int move(mixed dest, int method)
+// beim Tod soll sich der Zauber entfernen und auch nirgends rumfliegen
+{
+   int res;
+   res=(int)::move(dest, method);
+   if (!living(environment())) remove();
+   return res;
+}
+
+varargs int remove(int silent)
+{
+  if (living(environment())) environment()->Set(P_RACE,0,F_QUERY_METHOD);
+  return (int)::remove(silent);
+}