Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/wiz/obj_geruest b/doc/wiz/obj_geruest
new file mode 100644
index 0000000..fc1f955
--- /dev/null
+++ b/doc/wiz/obj_geruest
@@ -0,0 +1,134 @@
+/*
+ *----------------------------------------------------------------------
+ * obj_geruest
+ * Dieses File ist Teil der Morgengrauen-Mudlib.
+ * Dieses File wird optimal formatiert, wenn Tabulatoren 4 Zeichen breit
+ * sind.
+ *
+ * Allgemeines Geruest fuer ein Objekt. Wer eigene Objekte schreibt,
+ * sollte sie nicht ganz so intensiv kommentieren wie dieses hier, aber
+ * hier sollen gleichzeitig, die grundlegenden Mechanismen erlaeutert
+ * werden.
+ *
+ * 16.08.92 Rumata
+ * Ueberarbeitet am 24.08.94 von Viper
+ *----------------------------------------------------------------------
+ */
+inherit "std/thing"; /* Leite aus den std-Objekten ab */
+
+#include <language.h> /* Stelle Namen der Faelle und der Geschlechter */
+ /* dem Objekt zur Verfuegung. */
+
+create()
+{
+ ::create();
+ /* Diese Zeile NIEMALS vergessen!!! */
+
+ AddId( "ball" );
+ AddId( "strandball" );
+ /* Unter diesen Bezeichnungen fuehlt der Ball sich "angesprochen" */
+ /* Mann sollte mit Ids nicht sparen, damit die Spieler nicht ewig */
+ /* nur nach dem richtigen Namen eines Objektes suchen muessen. */
+
+ SetProp( P_NAME, "Ball" );
+ SetProp( P_GENDER, MALE );
+ SetProp( P_ARTICLE, 1 );
+ /* Diese Meldungen ermoeglichen es der Mudlib, das Objekt richtig */
+ /* zu deklinieren. SetProp(P_ARTICLE, 1) kann wegfallen, da 1 Default ist. */
+
+ SetProp( P_SHORT, "Ein bunter Ball" );
+ SetProp( P_LONG, "Was fuer ein huebscher kleiner Strandball.\n"
+ +"Wem koenntest Du den mal zuwerfen?\n" );
+ /* Beschreibungen zur Betrachtung des Balls. */
+
+ SetProp( P_VALUE, 10 );
+ SetProp( P_WEIGHT, 250 );
+ /* Bei diesen Werten sollte die Verhaeltnismaessigkeit */
+ /* nicht aus den Augen gelassen werden. */
+}
+
+init()
+{
+ ::init();
+ /* NICHT VERGESSEN */
+ /* Wenn keine eigenen Aktionen definiert werden sollen, so kann die */
+ /* Funktion init ganz weggelassen werden. Ein init, das nur */
+ /* ::init() aufruft ist ueberfluessig. */
+
+ add_action( "wurf", "werf", 1 );
+ add_action( "wurf", "wirf" );
+ /* werfe, werf oder wirf jemandem den Ball zu. Man sollte darauf */
+ /* achten, dass natuerliche Saetze als Eingabe akzeptiert werden. */
+}
+
+/*************************************************************************/
+/************* Die grundlegenden Funktionen enden hier *******************/
+/*************************************************************************/
+
+
+/* Eine Beispielaktion fuer den Ball. */
+wurf( argument )
+{
+ /* "werf ball rumata zu" wird als Argument "ball rumata zu" bekommen. */
+ string arg1, arg2;
+ string ziel;
+ object zielObj;
+
+ if ( sscanf( argument, "%s %s zu", arg1, arg2 ) != 2 ) return 0;
+ /* Rueckgabe von 0 bedeutet, dass dieses Objekt mit der Eingabe */
+ /* nichts anfangen konnte, und dass der Gamedriver das naechste */
+ /* Objekt befragen soll. */
+
+ if ( id( arg1 ) )
+ /* Welches der Argumente spricht den Ball an ? */
+ /* Das andere muss dann das Ziel des Balls sein. */
+ ziel = arg2;
+ else if ( id( arg2 ) )
+ ziel = arg1;
+ else
+ return 0;
+ /* Keines der Argumente war der Ball. */
+
+ zielObj = present( ziel, environment() );
+ /* Suche ein Objekt, das sich als Ziel angesprochen fuehlt. */
+
+ if ( ! zielObj )
+ {
+ write( "Hier ist kein \"" + ziel + "\".\n" );
+ return 1;
+ /* Hier wird 1 zurueckgegeben, da der Ball das Kommando den */
+ /* Befehl bearbeiten konnte. Er hat zwar kein Ziel gefunden, */
+ /* aber man kann ja nicht alles haben. :-) */
+ }
+
+ if( !living( zielObj ) )
+ {
+ write( "Und wie soll " + zielObj->name(WER,1) + " den Ball fangen?\n" );
+ return 1;
+ /* Nur lebende Wesen sollen Baelle fangen koennen. */
+ }
+
+ write( "Du wirfst " + zielObj->name(WEN,1) + " den Ball zu.\n" );
+ /* Mitteilung an den Werfer */
+ say( PL->name(WER,2) + " wirft " + zielObj->name(WEM,2)
+ + " einen Ball zu.\n", zielObj );
+ /* Mitteilung an alle Wesem im selben Raum. */
+ tell_object( zielObj, "Hoppla, " + PL->name(WER,2)
+ + " wirft Dir einen Ball zu.\n" );
+ /* Mitteilung an den Beworfenen */
+
+ if ( move( zielObj ) ) return 1;
+ /* Es hat geklappt. */
+
+ move( environment() );
+ /* Im Fehlerfall soll der Ball zu Boden fallen. */
+
+ write( "Aber " + zielObj->QueryPronoun(WER)
+ + " kann ihn nicht fangen.\nDer Ball plumpst zu Boden.\n" );
+ say( "Aber " + zielObj->QueryPronoun(WER)
+ + " kann ihn nicht fangen.\nDer Ball plumpst zu Boden.\n", zielObj );
+ tell_object( zielObj,
+ "Aber Du kannst ihn nicht fangen.\nDer Ball plumpst zu Boden.\n" );
+
+ return 1;
+}