next up previous contents index
Next: ,,...und setzte den Menschen Up: Schritt für Schritt ins Previous: Schritt für Schritt ins

Subsections


,,Und Gott der Herr pflanzte einen Garten in Eden gegen Morgen ...''

Ein Raum, ein Baum (Objekte, Namen, Beschreibungen)

Wir gehen aus vom bereits bekannten Grundgerüst

(siehe 1.3.2). Der Titel (und der Untertitel) werden jeweils als Textkonstante definiert:

Constant Story "Eden"; 
Constant Headline "^ein interaktiver Anfang  ((c) frob 2002)^";

Statt des Startraums beginnen wir mit etwas Ansprechenderem:

Object Mitte "Inmitten des Gartens" 
 with  description  
       "Eine Lichtung inmitten eines großen Gartens. 
        Ringsum sind Beete, Obstbäume, Gebüsch; 
        alles ist gepflegt und feierlich. Aus einer Quelle sprudelt 
        frisches Wasser und fließt in vier verschiedene Richtungen 
        ab. Neben der Quelle steht ein einzelner, majestätischer  
        Baum - der Baum der Erkenntnis.",  
 has   light;
Das ist die Minimalausstattung eines Raums - ein Name, eine Beschreibung und Licht, damit man die Beschreibung auch sieht.

Wie alles, mit dem der Spieler in Berührung kommt, ist auch der Raum, in dem er sich bewegt, ein Objekt, deklariert mit dem Schlüsselwort Object, gefolgt von einem Bezeichner (dem Namen des Objekts, den das Programm verwendet, hier Mitte) und einem String (einer Zeichenkette), in dem der Name des Objekts steht, wie ihn der Spieler zu sehen bekommt. Nach diesem ,,Kopf'' kommt der ,,Körper'' des Objekts; er besteht aus properties (Eigenschaften) nach dem Schlüsselwort with und attributes (Attributen) nach dem Schlüsselwort has.

Attribute
sind nichts anderes als boolesche (logische) Werte. Sie bezeichnen Eigenschaften, die das Objekt entweder hat oder nicht hat: light zeigt an, dass das Objekt beleuchtet ist (bei einem Raum; bei einem anderen Gegenstand zeigt es an, dass dieser Licht abgibt).
Properties
sind zur Aufnahme größerer Datenmengen bestimmt, sie enthalten meist einen (auszugebenden) String oder eine Routine (ein Unterprogramm). description enthält die Beschreibung eines Objekts (bei Räumen angezeigt nach ,,sieh dich um'', bei anderen Objekten angezeigt auf den Befehl ,,Untersuche den Gegenstand'').
Die einzelnen properties und die Liste der Attribute werden voneinander durch Kommata getrennt; ein Semikolon schließt die Definition eines Objektes ab. Wie im nächsten Beispiel zu sehen ist, steht zwischen mehreren Attributen kein Komma, nur Leerraum.. Auch das einleitende Schlüsselwort jeder property und ihr Inhalt sind nur durch Leerraum getrennt.

Der Raum ist noch etwas leer, also lassen wir einen Baum wachsen:

Object -> Apfelbaum 
 with   name 'Baum' 'Erkenntnis' 'Apfelbaum' 'majestaetisch', 
        short_name "Baum", 
        post "der Erkenntnis", 
        dekl 1, 
        description "Es ist eine Art Apfelbaum, aber kein 

            normaler Apfelbaum. Er steht in Blüte und trägt 

            zugleich Frucht. Du weißt, dass es der 

            ~Baum der Erkenntnis~ ist - aber du weißt nicht, 

            was dieser Name bedeuten soll.", 
 has    scenery male;

Mit dem Pfeil -> wird angezeigt, dass der Apfelbaum nicht selbständig in der Welt steht, sondern zum vorher definierten Objekt (Mitte) gehört, d.h. in diesem Raum zu finden ist. Auf diese Art und Weise werden Objekte anderen Objekten zugeordnet, d.h. ihr ,,Ort'' in der Welt des Spiels festgelegt. Um dies schneller beschreiben zu können, werden Begriffe aus dem Wortfeld des Stammbaums verwendet: Apfelbaum ist ein child (Kind) von Mitte, Mitte ist ein parent (Elternteil) von Apfelbaum. Ein Objekt ohne parent ist entweder ein Raum oder gerade nicht im Spiel.

Die Zuordnungen beweglicher Objekte (und der Spielfigur) können im Lauf des Spiels wechseln. Die Spielfigur und andere Objekte bewegen sich durch die Spielwelt. Funktionen wie child(Objekt) und parent(Objekt) stehen der Autorin zur Verfügung, um den aktuellen Stand ermitteln zu können (mehr darüber unten in 3.1.2).

Im Unterschied zum Raum ist der Baum für den Spieler ein körperlicher Gegenstand: Er kann ihn z.B. anfassen, beriechen, versuchen auf ihn zu klettern oder ihn auszureißen. Dazu muss er ihn benennen können, d.h. einen Namen für ihn haben, den das Spiel versteht. Dazu ist die property name da: in ihr stehen - in Hochkommata eingeschlossen - die Namen, mit denen der Spieler das Objekt bezeichnen kann. Dazu zählen auch Adjektive (der Spieler kann sie verwenden, der Parser beachtet den Unterschied zwischen Adjektiv und Substantiv nicht, was regelmäßig nicht stört). Nur die ersten 9 Zeichen eines Namens sind signifikant, dabei zählen Umlaute und ß als zwei Zeichen, denn sie müssen an dieser Stelle ausgeschrieben werden13. Statt 'majestaetisch' hätte also 'majestaet' genügt.

Der Spieler weiß, dass es ,,der Baum, des Baums'' etc. heißt, das Programm weiß es nicht. Es braucht daher Regeln, mit denen es den Namen des Objekts grammatisch richtig ausgeben kann. Es muss wissen, welche Teile des Namens es deklinieren muss (,,Baum'') und welche nicht (,,der Erkenntnis''). Es muss das Deklinationsschema für ,,Baum'' und das grammatische Geschlecht kennen. Das ist alles in der Objektdefinition enthalten:

short_name
ist der ,,eigentliche'' Name des Objekts. Er wird dekliniert.
dekl
gibt das zu verwendende Deklinationsschema an (es gibt 9 davon, siehe 3.2.7).
post
sind nachgestellte Namensbestandteile, die nicht dekliniert werden.
male, female oder neuter
sind Attribute, die das grammatische Geschlecht festlegen.

Außerdem gibt es noch

adj (property)
Eine Liste von Adjektiven, die dem short_name vorangestellt und dekliniert werden ( z.B. "einzeln" "majestätisch")
pluralname (Attribut)
Das Objekt ist mehrere Gegenstände (steht also im Plural), z.B. ,,zwei Abflussrohre''.

Merke: Einzig name bestimmt, wie das Spiel auf die Eingabe des Spielers reagiert; alle anderen eben beschriebenen Attribute und Eigenschaften steuern nur, wie der Name des Objekts vom Spiel ausgegeben wird.

Betritt der Spieler einen Raum oder sieht er sich dort um, erhält er nicht nur eine Raumbeschreibung, sondern auch eine Auflistung, welche Objekte sich dort befinden. Das ist nicht immer erwünscht; z.B. ist der Apfelbaum ja schon in der Raumbeschreibung erwähnt. Das Attribut scenery bewirkt, dass der Apfelbaum als Kulisse behandelt und nicht gesondert erwähnt wird. Außerdem bewirkt es, dass der Apfelbaum an dieser Stelle ,,fest'' eingebaut wird; der Spieler kann ihn nicht an sich nehmen oder wegschieben. Letzteres allein kann auch mit dem Attribut static erzielt werden.



Footnotes

... werden13
Es handelt sich bei diesen Namen nicht um simple Zeichenketten (in doppelten Anführungszeichen), sondern um einen besonderen Datentyp: Wörterbucheinträge (in Hochkommata). Sie werden in einer besonderen Tabelle abgelegt, um das Vergleichen zu beschleunigen. Wir brauchen sie hauptsächlich in name und später beim Definieren neuer Verben (siehe 2.13). Das Ausschreiben der Umlaute und des ß ist nur in solchen Wörterbucheinträgen erforderlich.

next up previous contents index
Next: ,,...und setzte den Menschen Up: Schritt für Schritt ins Previous: Schritt für Schritt ins
Frank Borger
2003-05-02