Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/rotaugenvampire/.readme b/doc/beispiele/rotaugenvampire/.readme
new file mode 100644
index 0000000..a2ceeb6
--- /dev/null
+++ b/doc/beispiele/rotaugenvampire/.readme
@@ -0,0 +1,3 @@
+Drei Beispielmonster, die wichtige Basiseigenschaften von NPCs sowie
+die Vererbung demonstrieren. Angelehnt an bspmon1.c von Boing.
+(Zesstra)
diff --git a/doc/beispiele/rotaugenvampire/rotaugenvampir.c b/doc/beispiele/rotaugenvampire/rotaugenvampir.c
new file mode 100644
index 0000000..ca464d5
--- /dev/null
+++ b/doc/beispiele/rotaugenvampire/rotaugenvampir.c
@@ -0,0 +1,135 @@
+/*
+ Ein Beispiel-NPC (von Zesstra, angelehnt an Boings bspmon1.c)
+*/
+
+// Diese Pragmas sorgen dafuer, dass der Driver darauf achtet, dass bei
+// Funktionsargumenten, -Rueckgabewerten und teilweise bei Zuweisung von
+// Werten an Variablen der richtige Datentyp verwendet wird (z.b. kein string
+// anstelle eines int verwendet wird). Sollte in keinem Objekt fehlen.
+#pragma strong_types, save_types, rtt_checks
+// Einige Warnungen werden als Fehler betrachtet (empfohlen)
+#pragma pedantic, range_check
+// Schaltet bestimmte Warnungen ein (empfohlen)
+#pragma warn_deprecated, warn_empty_casts, warn_missing_return
+#pragma warn_function_inconsistent
+
+// Erbt den Standard-NPC / das Standard-Monster
+inherit "/std/npc";
+
+// Inkludiert Definitionen fuer Properties und einige Konstanten
+#include <properties.h>
+#include <language.h>
+#include <class.h> // Konstanten fuer AddClass()
+
+// create() wird beim Erzeugen des Objekt vom Driver gerufen und initialisiert
+// diesen NPC. Es bekommt kein Argument, gibt keinen Wert zurueck (Typ: void)
+// und kann nicht von ausserhalb des Objektes gerufen werden (protected).
+protected void create()
+{
+ // Nicht vergessen, ohne das geht nichts. Fuehrt das create() des geerbten
+ // /std/npc aus und initialisiert den Standard-NPC.
+ ::create();
+
+/* Die Kurzbeschreibung wird zum Beispiel angezeigt wenn man in einen Raum
+ mit dem Monster reinlaeuft */
+ SetProp(P_SHORT, "Rotaugenvampir");
+
+/* Beim Anschauen des Monsters wird die long-description angezeigt,
+ * Zeilenumbruch nach Bedarf nach 78 Zeichen. */
+ SetProp(P_LONG, break_string(
+ "Ein finster aussehender Rotaugenvampir.",78));
+
+/* Ein Name muss sein, da sonst z.B. im Todesfall 'Leiche von 0' daliegt */
+ SetProp(P_NAME, "Rotaugenvampir");
+ SetProp(P_NAME_ADJ,"ausgemergelt");
+
+/* Das Geschlecht des Monsters. Als Geschlechter sind */
+/* die in <language.h> definierten Symbole NEUTER, MALE */
+/* und FEMALE zulaessig. */
+ SetProp(P_GENDER, MALE);
+
+/* Ein Monster braucht mindestens eine ID, unter der man es ansprechen kann */
+/* Es kann aber auch mehrere verschiedene ID's haben. */
+ AddId( ({"vampir","rotaugenvampir"}) );
+
+/* Zuerst sollte man dem Monster einen Grundlevel geben. */
+/* Setzt Standardwerte fuer P_LEVEL, P_MAX_HP (Lebenspunkte), P_MAX_SP
+ * (Magiepunkte), P_HANDS, P_BODY, P_XP und die Attribute A_STR, A_INT, A_DEX
+ * und A_CON. Alle koennen spaeter noch geaendert werden.
+ */
+ create_default_npc( 25 );
+
+/* Nun machen wir es etwas widerstandsfaehiger, indem wir P_BODY setzen. */
+/* Nie P_TOTAL_AC oder P_AC setzen, P_TOTAL_AC wird automatisch berechnet */
+/* und P_AC ist nur fuer Ruestungen da. */
+ SetProp(P_BODY, 55);
+
+/* Das Monster schlaegt mit blossen Haenden zu, also wird P_HANDS gesetzt. */
+/* Auch hier weder P_TOTAL_WC noch P_WC setzen. */
+ SetProp(P_HANDS, ({" mit seinen Haenden", 135}));
+/* ^ dieses Leerzeichen ist wichtig */
+/* Beim Kampf erscheint nun: 'Das Monster greift Dich mit seinen Haenden an' */
+/* 135 entspricht der Waffenklasse */
+
+/* Gesinnung des Monsters, 0 ist neutral, negativ boese und positiv gut */
+ SetProp(P_ALIGN, -100); /* etwas boese, aber nichts besonderes */
+
+/* Die Rasse des Monsters */
+ SetProp(P_RACE, "Vampir");
+
+/* Erfahrungspunkte des Monsters, beim Tod erhaelt der 'Killer' ein */
+/* hundertstel dieses Wertes. Schon im Kampf erhaelt man bei jedem */
+/* Schlag weapon_class*schaden/10 punkte (weapon_class hier 55), also */
+/* insgesamt weapon_class*hit_points/10. */
+/* Ab 200000 gibt der NPC einen Stufenpunkt, ab 600000 2 Stufenpunkte */
+ SetProp(P_XP, 130000);
+
+/* Die Groesse des Monsters in cm. Dies wird bei einigen Kampfbefehlen */
+/* ausgewertet, sowie bei einigen Identifikationsspruechen von Gilden.
+ * Irgendwas zwischen 170 und 190 cm. */
+ SetProp(P_SIZE, 170 + random(21));
+
+/* Ein Gewicht (in Gramm) sollte der NPC haben, irgendwas zwischen 40 und 48
+ * kg.
+ */
+ SetProp(P_WEIGHT, 40000 + random(8000));
+
+/* Weitere Werte: P_(MAX)_FOOD, P_(MAX)_DRINK, P_(MAX)_ALCOHOL, */
+/* P_MSGIN, P_MSGOUT, P_MMSGIN, P_MMSGOUT, P_MAX_HANDS */
+
+/* Spezielle Infos (fuer den Identifiziere-Spruch) */
+ SetProp(P_INFO, break_string(
+ "Der Rotaugenvampir laesst sich vielleicht mit Knoblauch vertreiben.",
+ 78));
+
+/* NPC koennen einer Klasse angehoeren und Waffen koennten z.B. gegen
+ * bestimmte Klassen/Rassen besonders (in)effektiv sein.
+ */
+ AddClass(({CL_VAMPIRE,CL_UNDEAD}));
+
+/* Resistenzen (negativ) und Anfaelligkeiten (positiv) */
+ SetProp(P_RESISTANCE_STRENGTHS, ([
+ DT_BLUDGEON:0.2,DT_RIP:0.2,
+ DT_MAGIC: -0.2, DT_COLD: -0.1, DT_TERROR: -0.8 ]) );
+
+// Wer hat den Spieler gekillt und was sagt man dann?
+ SetProp(P_KILL_NAME,"Ein Rotaugenvampir");
+ SetProp(P_KILL_MSG,({"Grossartig %s! Ein weiteres Opfer fuer Zesstra!",
+ MSG_SAY}));
+
+ // beschwerde auf -moerder
+ SetProp(P_MURDER_MSG,"Du steckst doch mit Jof im Bunde, %s!");
+ SetProp(P_DIE_MSG," bricht stoehnend zusammen.\n");
+
+ // Auch NPC sollten Details haben:
+ AddDetail( ({"augen","augenlider","lider"}), break_string(
+ "Der Rotaugenvampir schaut Dich mit weit aufgerissenen, rot "
+ "schimmernden Augen wild an.",78));
+ // ...
+
+ // riecht der nach was? -> AddSmells()
+
+ // Kann man den nach was fragen? -> AddInfo().
+
+}
+
diff --git a/doc/beispiele/rotaugenvampire/rotaugenvampirmagier.c b/doc/beispiele/rotaugenvampire/rotaugenvampirmagier.c
new file mode 100644
index 0000000..a6c5aaf
--- /dev/null
+++ b/doc/beispiele/rotaugenvampire/rotaugenvampirmagier.c
@@ -0,0 +1,77 @@
+/*
+ Ein magisch begabter Beispiel-NPC (von Zesstra, angelehnt an Boings
+ bspmon1.c)
+*/
+
+// Diese Pragmas sorgen dafuer, dass der Driver darauf achtet, dass bei
+// Funktionsargumenten, -Rueckgabewerten und teilweise bei Zuweisung von
+// Werten an Variablen der richtige Datentyp verwendet wird (z.b. kein string
+// anstelle eines int verwendet wird). Sollte in keinem Objekt fehlen.
+#pragma strong_types, save_types, rtt_checks
+// Einige Warnungen werden als Fehler betrachtet (empfohlen)
+#pragma pedantic, range_check
+// Schaltet bestimmte Warnungen ein (empfohlen)
+#pragma warn_deprecated, warn_empty_casts, warn_missing_return
+#pragma warn_function_inconsistent
+
+// Dieser NPC soll ein Rotaugenvampir sein, der ein paar Spells kann. Und nen
+// Rotaugenvampir gibt es schon. Also einfach den normalen Rotaugenvampir
+// aus diesem Verzeichnis erben.
+inherit __DIR__+"rotaugenvampir";
+
+// Inkludiert Definitionen fuer Properties
+#include <properties.h>
+
+protected void create()
+{
+ // Nicht vergessen, ohne das geht nichts. Fuehrt das create() des geerbten
+ // Rotaugenvampir aus und konfiguriert ihn.
+ ::create();
+
+/* Die Kurzbeschreibung wird zum Beispiel angezeigt wenn man in einen Raum
+ mit dem Monster reinlaeuft */
+ SetProp(P_SHORT, "Rotaugenvampirmagier");
+
+/* Beim Anschauen des Monsters wird die long-description angezeigt,
+ * Zeilenumbruch nach Bedarf nach 78 Zeichen. */
+ SetProp(P_LONG, break_string(
+ "Ein finster aussehender Rotaugenvampir in einer Kutte.",78));
+
+/* Ein Name muss sein, da sonst z.B. im Todesfall 'Leiche von 0' daliegt */
+ SetProp(P_NAME, "Rotaugenvampirmagier");
+ SetProp(P_NAME_ADJ,"listenreich");
+
+ // fast alle Eigenschaften uebernehmen wir einfach unveraendert unveraendert
+ // vom normalen Rotaugenvampir. Die Hands nicht, der Magier haut nicht so
+ // gut zu...
+ SetProp(P_HANDS, ({" mit seinen Haenden", 85}));
+
+ // ok, spielt wenig Rolle in diesem Fall, aber damits stilecht ist, kriegt
+ // der hier jetzt etwas mehr an Magiepunkten (spellpoints)
+ SetProp(P_MAX_SP, 350);
+
+ // und noch ein paar Spells
+ // Anmerkung: diese Spells haben nichts mit irgendwelchen Gildenspells zu
+ // tun und - ja, tatsaechlich - verbrauchen keine Magiepunkte...
+
+ // wahrscheinlichkeit in % pro runde, einen Spell zu casten:
+ SetProp(P_SPELLRATE,30);
+ // Ein Spell, der 100 Schadenspunkte macht und in 60% der Faelle ausgewaehlt
+ // wird. Erste Meldung geht an den Spieler, die zweite an den Raum.
+ // Schadenstyp ist Schlagschaden.
+ AddSpell(60,100,
+ break_string(Name(WER) + " macht eine Handbewegung vor Deinem Gesicht. "
+ "So abgelenkt stolperst Du in faellst hart zu Boden.",78),
+ break_string(Name(WER) + " macht eine Handbewegung vor @WESSEN Gesicht. "
+ "@WER stolpert und faellt hart auf den Boden.",78),
+ ({DT_BLUDGEON}) );
+ // Ein Spell, der 800 Schadenspunkte macht und in 40% der Faelle ausgewaehlt
+ // wird. Schadenstyp: Feuer.
+ AddSpell(40,800,
+ break_string(Name(WER) + " schaut Dich mit brennenden Augen "
+ "durchdringend an. Du glaubst, innerlich zu verbrennen.",78),
+ break_string(Name(WER) + " schaut @WEN mit gluehenden Augen an. "
+ "@WER kruemmt sich vor Schmerzen.",78),
+ ({DT_FIRE}) );
+}
+
diff --git a/doc/beispiele/rotaugenvampire/rotaugenvampirmagierin.c b/doc/beispiele/rotaugenvampire/rotaugenvampirmagierin.c
new file mode 100644
index 0000000..b506e1e
--- /dev/null
+++ b/doc/beispiele/rotaugenvampire/rotaugenvampirmagierin.c
@@ -0,0 +1,48 @@
+/*
+ Ein magisch begabter Beispiel-NPC (von Zesstra, angelehnt an Boings
+ bspmon1.c)
+ In diesem Fall soll eine Magierin sein, die aber die gleichen Stats wie der
+ maennliche Kollege hat.
+*/
+
+// Diese Pragmas sorgen dafuer, dass der Driver darauf achtet, dass bei
+// Funktionsargumenten, -Rueckgabewerten und teilweise bei Zuweisung von
+// Werten an Variablen der richtige Datentyp verwendet wird (z.b. kein string
+// anstelle eines int verwendet wird). Sollte in keinem Objekt fehlen.
+#pragma strong_types, save_types, rtt_checks
+// Einige Warnungen werden als Fehler betrachtet (empfohlen)
+#pragma pedantic, range_check
+// Schaltet bestimmte Warnungen ein (empfohlen)
+#pragma warn_deprecated, warn_empty_casts, warn_missing_return
+#pragma warn_function_inconsistent
+
+// Dieser NPC soll eine Rotaugenvampirmagierin sein. Und nen
+// Rotaugenvampirmagier gibt es schon. Also einfach den normalen
+// Rotaugenvampirmagier aus diesem Verzeichnis erben.
+inherit __DIR__+"rotaugenvampirmagier";
+
+// Inkludiert Definitionen fuer Properties
+#include <properties.h>
+#include <language.h> // fuer FEMALE-Define
+
+protected void create()
+{
+ // Nicht vergessen, ohne das geht nichts. Fuehrt das create() des geerbten
+ // Rotaugenvampirmagiers aus und konfiguriert ihn.
+ ::create();
+
+ // Geschlecht aendern.
+ SetProp(P_GENDER, FEMALE);
+
+ // Kurz- und Langbeschreibung aendern.
+ SetProp(P_SHORT, "Rotaugenvampirmagierin");
+ SetProp(P_LONG, break_string(
+ "Eine finster aussehende Rotaugenvampirmagierin in einer Kutte.",78));
+
+ // Name anpassen
+ SetProp(P_NAME, "Rotaugenvampirmagierin");
+
+ // Meldung anpassen.
+ SetProp(P_HANDS, ({" mit ihren Haenden", 85}));
+}
+