3.1. Räume und ihre Verbindungen
In einem Text-Adventure bewegt sich der Spieler in einer Welt, die eine
Landschaft aus einzelnen Räumen ist. Diese sind miteinander durch sog.
Ausgänge verbunden, die in einer bestimmten Richtung liegen. Der Spieler
bewegt sich durch diese Landschaft, indem er die Richtung angeben möchte,
in die er gehen will. So versucht z.B. die Anweisung 'Gehe nach Norden',
den Spieler in einen Raum zu bewegen, der vom momentanen Aufenthaltsort aus
gesehen im Norden liegt. (In einzelnen Fällen funktionieren auch Angaben
wie 'Betrete die Hütte' oder 'Gehe über die Brücke', aber die Regel ist die
Fortbewegung per Richtungsangabe, vor allem schon deshalb, weil man für die
Richtungen griffige Abkürzungen wie 'n', 'rein' usw. angeben kann.)
3.1.1. Richtungen
Als Richtungen bezeichnet TAG die möglichen Ausgänge aus einem Raum. Tradi-
tionell sind dies die Himmelsrichtungen und die beiden Richtungen oben und
unten. Je nach Zusammenhang sind aber auch andere Richtungen denkbar, z.B.
'Backbord' und 'Steuerbord'. TAG erlaubt bis zu 16 Richtungen.
Eine Richtung wird wie folgt definiert:
Richtung |
Rtg 'lang'
'kurz' {*} |
Rtg |
Kennzeichnung der Richtung in TAG |
lang |
lange Bezeichnung der Richtung für den Parser (z.B. 'norden') |
kurz |
kurze Bezeichnung für den Parser (z.B. 'n') |
Beispiel: Es soll die Richtung Steuerbord definiert werden:
Richtung Steuerbord 'steuerbord' 'sb'
Die Kurzbezeichnung ist in der Regel eine Abkürzung, und erlaubt daher einen
knappen Eingabestil. Eingebürgert haben sich folgende Richtungen:
N (Norden) NO (Nordosten)
O (Osten) SO (Südosten)
S (Süden) SW (Südwesten)
W (Westen) NW (Nordwesten)
H (nach oben) R (nach unten)
REIN (nach drinnen) RAUS (nach draußen)
Diese Richtungen sind in der Datei NORMAL.ADV bereits vordefiniert. Wird
der Richtungsdefinition ein Sternchen (*) nachgestellt, so wird diese Richtung
als 'Standardrichtung' definiert, um die Eingabe bei der Raumdefinition zu
vereinfachen:
Richtung N 'norden' 'n' *
Näheres siehe dort. Generell sind die acht Windrichtungen Standardrichtungen.
3.1.2. Raumattribute
Raumattribute sind Eigenschaften, die ein Raum besitzt oder nicht. Bis zu
64 Raumattribute können definiert werden. Sie werden definiert mit:
RaumAttr |
Attr |
Attr |
Kennzeichnung des Attributs in TAG |
Die Zuweisung der Attribute erfolgt bei der Definition der Räume.
Drei Raumattribute sind schon vordefiniert. Es sind
Dunkel
gibt an, ob ein Raum dunkel ist und wird dazu benutzt, um zu
prüfen, ob der Spieler etwas sieht. Aus einem dunklen Raum
kann man nur in einen hellen Raum gehen, wenn man versucht,
woanders hinzugehen, stolpert man. (Tatsächlich prüft das
Programm aber, ob sich an den Orten funktionierende Licht-
quellen befinden. Dunkel gibt also nur an, ob ein Raum an
sich dunkel ist.)
Laby
bezeichnet Labyrinthe. In einem Labyrinth kommt immer die
lange Raumbeschreibung, ungeachtet des KNAPP-Modus, damit
der Spieler nicht an der Raumbeschreibung sehen kann, ob er
schon einmal hier war oder nicht.
Besucht
zeigt an, ob der Spieler schon einmal an diesem Ort war.
Dieses Attribut wird automatisch vom Programm bestimmt, um
lange oder kurze Raumbeschreibungen auszugeben.
3.1.3. Räume
Räume sind einfach zu handhaben. Die wichtigsten Eingaben bei der Raumdefinition
sind die Verbindungen zu den anderen Räumen. Die Raumdefinition wird
eingeleitet durch:
Raum |
Raum {(RaumKl)} |
Raum |
TAG-Kennzeichnung des Raums |
RaumKl |
Es kann eine Raumklasse in Klammern angegeben werden, von
der der Raum Eigenschaften erbt. |
Innerhalb der Raumdefinition werden folgende Anweisungen verstanden:
Name |
'Name' |
Name |
Name des Raums, der bei der Kurzbeschreibung und in der
Statusleiste erscheint, etwa 'Beim Teich' oder
'Eßzimmer' |
|
Std |
Ausg |
Ausg |
Vordefinition der Ausgänge in den Standardrichtungen.
Diese Definition muß immer vor den anderen Richtungsanwei-
sungen stehen, da diese die Standardausgänge überschreiben.
Mögliche Ausgänge siehe nächster Absatz. |
|
Rtg |
Ausg |
Rtg |
Gültiger Richtungsbezeichner wie mit
Richtung definiert. |
Ausg |
Ausgang in diese Richtung. Es gibt drei verschiedene Arten
von Ausgängen: |
|
Raum |
Wenn man in diese Richtung geht, kommt man in diesen
Raum. |
| Antw |
In dieser Richtung ist kein Ausgang. Aber anstelle
des normalen Textes 'Ich kann nicht in diese Richtung
gehen.', erscheint der Text, der bei Antw definiert
ist. Näheres dort. |
| Weg |
Wege sind komplizierte Gebilde. Wenn man in diese
Richtung geht, passiert mehr, als in einen anderen
Raum zu gelangen oder nicht. Hier müssen explizite
Ausführungen eingegeben werden. Näheres bei
Weg-Definitionen. |
|
Attr |
{/}Attr1
{{/}Attr2} {{/}Attr3}... |
Attr1 |
Attribut wie bei RaumAttr definiert. Es kann eine beliebig
lange Liste von definierten Attributen angegeben werden.
Die Attribute können durch vorangestellte Schrägstriche auch
wieder weggenommen werden. Das ist nützlich, wenn der Raum
Attribute von einer Raum-Klasse geerbt hat, der Raum aber
diese geerbten Attribute nicht haben soll.
|
|
|
|
Besch |
'Besch' |
Besch |
Lange Raumbeschreibung, die erscheint, wenn man den Raum zum
ersten Mal betritt oder wenn man den Lage-Befehl eingibt.
Diese Raumbeschreibung muß in Hochkommas gestellt werden und
kann über beliebig viele Zeilen gehen. Siehe Texte.
|
Zu jedem Raum können zwei Ausführungsblöcke angegeben werden. Diese
Blöcke sind kleine Routinen, die aus Anweisungen im TAG-Format be-
stehen. Wie dieses Format genau aussieht und was man mit den Blöcken
machen kann, steht in den Kapiteln 6 und 7. Hier nur eine kurze
Beschreibung der beiden Blöcke:
VorAusf - wird aufgerufen, bevor der vom Spieler eingegebene
Befehl ausgeführt wird, wenn sich der Spieler in
diesem Raum befindet. Hier kann evtl. das Vorhaben
des Spielers unterbunden werden.
NachAusf - kommt nach dem erfolgreichen Ausführen der vom
Spieler eingegebenen Anweisung zum Zuge, wenn sich
der Spieler in diesem Raum aufhält und beinhaltet
meist eine Reaktion auf das Geschehene.
3.1.4. Antworten
Antworten sind Texte, die ausgegeben werden, wenn der Spieler nicht in diese
Richtung gehen kann, aber nicht der Standardsatz erscheinen soll. Sie werden
definiert mit:
Antwort |
Antw |
Antw |
Kennzeichnung der Antwort in TAG |
Die einzige Anweisung bei der Antwort-Definition ist Besch, die analog zur
Besch-Anweisung bei der Raumbeschreibung funktioniert.
Zum besseren Verständnis hier ein kleines Beispiel:
Richtung N 'norden' 'n' *
Richtung O 'osten' 'o' *
Richtung S 'süden' 's' *
Richtung W 'westen' 'w' *
Richtung rein 'drinnen' 'rein'
Richtung raus 'draussen' 'raus'
Raum Vor_dem_Haus
Name 'Vor dem kleinen Haus'
Std In_Garten
O Im_Haus
Rein Im_Haus
N Lichtung
Besch 'Du stehst hier westlich eines kleinen weißen
Häuschens. Alle Fenster sind mit Brettern
zugenagelt, die Haustür jedoch nicht.
Durch einen farbenfrohen Garten führt ein Weg
nach Norden auf eine Lichtung.'
Antwort In_Garten
Besch 'Der Pfad führt nach Norden und der Eingang zum
Haus ist im Osten.'
Raum Im_Haus
Name 'In dem kleinen Häuschen'
Std Gegen_Wand
W Vor_dem_Haus
raus Vor_dem_Haus
Attr Dunkel
Besch 'Hier im Haus ist offensichtlich schon lange
niemand mehr gewesen. Alles ist staubig und die
Luft ist muffig. Ein schäbiges Sofa steht in
einer Ecke des Raumes.
Der einzige Ausgang ist die Tür im Westen, durch
die ein schmaler Lichtstrahl fällt.'
Antwort Gegen_Wand
Besch 'Dort ist leider eine Wand.'
Raum Lichtung
Name 'Auf einer Lichtung'
Std Unterholz
S Vor_dem_Haus
Besch 'Diese Lichtung ist dünn von Bäumen bestanden,
die aus dem dichten Gestrüpp ragen. Ein gut
ausgetretener Pfad führt nach Süden.'
Antwort Unterholz
Besch 'In dieser Richtung ist das Unterholz zu dicht.'
Diese Passage definiert einen Garten vor einem kleinen Haus, einen Raum im
Haus, in dem es dunkel ist und eine Lichtung. In diesem Beispiel hat jeder
Raum seine eigene Antwort. Während die Antwort für den Garten maßgeschneidert
ist, können die anderen auch für andere Räume in einem Haus oder in einem
Wald benutzt werden. Als Richtungen wurden hier, wie in Adventures allgemein
üblich, die Himmelsrichtungen und die Richtungen rein und raus definiert.
Wer will, kann diese Passage in eine leere Textdatei kopieren, sie z.B.
haus.adv nennen, mit tag haus ein Adventure generieren und es dann mit
tam haus ausprobieren. (Das Beispiel ist allerdings etwas langweilig, da
drei Räume ohne besondere Merkmale von denen noch dazu einer stockdunkel
ist, schnell ihre Faszination verlieren. Das ändert sich aber im Kapitel
über Objekte.)
3.1.5. Wege
Wege sind Aktionen, die durchgeführt werden, wenn der Spieler in diese
Richtung gehen will. Was passiert, und ob der Spieler im selben Raum bleibt
oder in einen anderen Raum geht, wird in dieser Aktion beschrieben.
Wege definiert man wie folgt:
Weg Weg
Ausf
[...]
EndeAusf
Weg: Name des Wegs in TAG
Die Aktion wird zwischen Ausf und EndeAusf definiert. Wie man das macht, ist
in Kapitel 6 beschrieben.
Insgesamt können bis zu 253 Räume, Antworten und Wege definiert werden.
Es gibt bereits zwei vordefinierte Räume:
Nirgendwo
ist ein Ort, der sich nicht im sichtbaren Bereich des
Spiels befindet. Er wird benutzt, um Gegenstände zu lagern,
die noch ins Spiel kommen sollen.
Nirwana
ist ein Ort, der ähnlich wie Nirgendwo ist. Hier sollen
Gegenstände abgelegt werden, wenn sie aus dem sichtbaren Teil
des Spiels verschwunden sind.
Im Prinzip ist es egal, ob sich ein Gegenstand in Nirgendwo oder im Nirwana
befindet. Es hilft dem Programmierer aber, etwas Ordnung zu bewahren. Die
Anwendung der Trennung zwischen Nirgendwo oder Nirwana ist daher kein Muß,
sondern liegt im Ermessen des Programmierers. Aber Vorsicht: Die beiden Räume
sind nicht identisch!
|
3.2. Die Objekte
Mit den Räumen haben wir eine Landschaft definiert, in der sich der Spieler
bewegen kann. In einem Adventure, das nur Räume enthält, ist der Spieler
dazu verdammt, aktionslos umherzustreifen. Es fehlen noch Objekte, die er
manipulieren kann.
Ein Objekt in TAG kann alles sein: eine Person, ein Gegenstand, den man
aufheben kann, ein Gegenstand, der fest ist oder ein Teil der Landschaft.
Ein Objekt kann sogar eine Gruppe von Gegenständen oder Personen sein,
die man dann jedoch nur als Gruppe handhaben kann.
Zur Handhabung der Objekte kann man folgende Dinge definieren:
3.2.1. Objektattribute
Analog zu den Raumattributen können auch Objekte Attribute besitzen. Sie
werden mit
ObjAttr |
Attr |
Attr |
Attribut-Kennzeichnung von TAG |
definiert. Zugewiesen werden die Attribute in der Objektdefinition. Es gibt
einige vordefinierte Attribute in TAG:
Person
Das 'Objekt' ist eine Person. Personen können nicht
mitgenommen werden und tauchen in Raumbeschreibungen stets extra
auf, z.B. "Lord Helmchen ist hier." (Dies ist zugegebenermaßen
eine sehr simple Definition von "Person". Da Personen
meist etwas mehr Eigenschaften als die beiden oben genannten
besitzen ist der Programmcode für eine Person oft sehr
lang. Mehr dazu in Kapitel 10.)
Licht
Das Objekt ist eine Lichtquelle. Ist eine Lichtquelle in
einem dunklen Raum, so kann man dort sehen. Manche Objekte
müssen erst angeschaltet oder angezündet werden, um zu leuchten,
z.B. eine Taschenlampe oder eine Fackel. Sind sie ausgeschaltet,
so ist es trotzdem dunkel. Logisch. Das Programm
vermutet, daß sich das Anschalten bei Lichtquellen auf eine
Leuchtfunktion bezieht. (Wer einen floureszierenden Küchen-
mixer in sein Spiel einbauen wollte: Pech gehabt.)
Kleidung
Man kann das Objekt anziehen. Alles wird der Reihe nach
angezogen. Ob die Socken angezogen werden, obwohl man schon
die Stiefel anhat, wird nicht überprüft. Es wird aber ange-
nommen, daß der Spieler seine Grundbekleidung anhat und daß
nur spezielle Kleidungsstücke angezogen werden, etwa magische
Ringe, Tarnkappen oder Verkleidungen.
Sitz
Ein Sitz ist ein Objekt, auf dem man sitzen kann, wie ein
Stuhl oder ein Sessel. Sitzt man, so kommt man an die restlichen
Objekte im Raum nicht mehr heran, es sei denn, es wird
extra programmiert.
Liege
Wie ein Sitz, nur daß man auf einer Liege nicht sitzt,
sondern liegt.
Standfläche
Man kann sich auf das Objekt stellen. Zum Beispiel eine
Trittleiter oder ein Podest. Häufig kann ein Objekt Sitz,
Liege und Standfläche gemeinsam sein.
InObj
Dies ist ein Hilfsattribut, um das richtige Pronomen für
Sitze und Liegen zu benutzen. Hat ein Objekt dieses Attribut
so sitzt und liegt man 'in' ihm, ansonsten 'auf' ihm.
Deutsche Sprache, schwere Sprache: Wir sitzen AUF dem Stuhl,
aber IM Sessel; Wir liegen IM Bett, aber AUF dem Sofa.
Behälter
sind Objekte, in die man etwas hineinlegen kann. Damit man
die Objekte im Innern sehen kann, muss ein Behälter offen
sein (d.h. eigentlich weder geschlossen noch abgeschlossen)
oder transparent.
Ablage
Eine Ablage ist ein Objekt, auf das man etwas legen kann. Ein
Objekt kann Ablage und Behälter zugleich sein.
Transparent
sind Objekte, die Behälter sind, deren Inhalt man aber
sehen kann, obwohl sie geschlossen sind. Man kann den Inhalt
jedoch nur sehen, nichts mit ihm anstellen. Dazu müßte man
den Behälter öffnen. Personen können auch transparent sein,
nämlich dann, wenn sie zeigen, was sie bei sich tragen. Im
Normalfall weiß der Spieler nicht, was eine andere Person
bei sich hat.
Tür
Das Objekt ist eine Tür. Tür bedeutet: Das Objekt verbindet
oder trennt zwei Räume und wechselt den Ort, wenn man durch
die Tür geht. Eine Tür muß also nicht unbedingt eine Tür im
eigentlichen Sinne sein, sondern kann auch eine Brücke oder
ein Durchgang sein.
Man kann problemlos durch eine Tür von einem Raum zum anderen
gehen, wenn sie nicht abgeschlossen ist. Eine Tür benötigt
zwei Ortsangaben - für jede Seite eine.
Schlüssel
sind Objekte, mit denen man verschließbare Objekte auf- und
abschließen kann.
Verschließbar
sind Objekte, die man mit einem Schlüssel auf und ab-
schließen kann.
Fahrzeug
Ein Fahrzeug ist ein Objekt, das sich mit dem Spieler
fortbewegt, wenn er sich auf oder in ihm befindet. Deshalb muß
ein Fahrzeug immer zusätzlich auch eine Standfläche, ein Sitz
oder eine Liege sein. Boote und Reittiere sind auch Fahrzeuge
im Sinne von TAG. Grundsätzlich kann man mit einem Fahrzeug
überallhin gelangen. Daß man mit dem Auto nicht durch die
Haustür fahren kann und auf dem Esel keine Leiter hochreiten
kann, muß extra programmiert werden.
Fluid
Das Objekt ist flüssig und kann nicht in die Hand genommen
werden, sondern nur in Behältern getragen werden.
Entf
Dieses Attribut bezieht sich auf alle Objekte, die zu weit
entfernt sind. Das klingt vielleicht blöd, aber stellt Euch
das folgende vor: Ihr steht auf einem Aussichtsturm und ihr
seht eine Stadt im Süden und das Meer im Norden. Ihr könnt
es natürlich anschauen, aber sobald Ihr etwas konkretes
machen wollt, kommt die Antwort "Das Meer ist zu weit weg!".
Fest
Das Objekt kann nicht aufgehoben werden. Feste Objekte sind
z.B. Möbel, Bäume, Felsen, Haken in der Wand und Knöpfe auf
Schaltpulten. Diese Objekte werden nicht in der Liste der
sichtbaren Objekte in der Raumbeschreibung erwähnt ('Ich
sehe hier...'). daher sollten diese Objekte in der
Raumbeschreibung erwähnt werden.
Immobil
Das Objekt ist 'immobil'. Immobile Objekte sind wie feste
Objekte, nur daß sie in der Liste der sichtbaren Objekte
auftauchen. Das kann z.B. auch bedeuten, daß ein Namensschild
an einem Schulranzen befestigt ist und nicht gelöst
werden kann, aber bei 'u Ranzen' erscheint nach der Beschrei-
bung: 'An dem Ranzen ist ein Namensschild befestigt'. Diese
Art von Objekten ist eher ungewöhnlich und es ist üblicher,
diese Sachen in der Raum- oder Objektbeschreibung mizuerwähnen.
Bewegt
zeigt an, ob der Spieler schon etwas mit dem Objekt angestellt
hat. Dieses Attribut wird vom Programm aktualisiert.
In einigen neu definierten Befehlen kann es vom Programmierer
aktualisiert werden.
Bekannt
bedeutet, daß der Spieler das Objekt schon einmal gesehen hat.
Dieses Attribut wird auch vom Programm aktualisiert. Natürlich
besitzten alle Objekte, die 'bewegt' worden sind, dieses
Attribut.
Immer
bewirkt, daß der Erst-Text, der in der Raumbeschreibung für
Objekte verwendet wird, wenn sie noch nicht bewegt wurden,
immer verwendet wird, also auch nachdem sie bewegt worden
sind.
ansprechbar
ist ein Objekt, das keine Person ist, dem der Spieler
aber Anweisungen geben kann wie einer Person. Man kann sich
hier Computer mit Sprachkontrolle oder eine Sprechanlage
vorstellen.
5.2.2. Zustände
Objekte können einen speziellen Zustand haben. Standardmäßig sind in TAG die
folgenden Zustände definiert:
Normal | normal, kein besonderer Zustand |
Kaputt | beschädigt |
Offen | geöffnet |
Geschlossen | geschlossen |
Abgeschlossen | mit einem Schlüssel o.ä. abgeschlossen |
Ein | ein- bzw. |
Aus | ausgeschaltet |
Zusätzlich dazu können noch weitere Zustände definiert werden mit
Zust |
Zust{'Besch'} |
Zust |
Kennzeichnung des Zustands in TAG |
Besch |
Kurzbeschreibung des Zustands, meist ein Adjektiv. Wird
Besch angegeben, so erscheint beim Untersuchen eines
Gegenstands nach der Objektbeschreibung der Satz 'Er ist
Besch.' |
Zum Beispiel:
Zust voll 'randvoll'
Anmerkung: Ein Objekt kann immer nur einen Zustand haben. Ein Kühlschrank
kann also nicht offen und ein zugleich sein. In einem solchen Fall
empfiehlt es sich, das Objekt aufzuteilen in Kühlaggregat und Kühlschrank.
3.2.3. Objekte
Nun kommen die Objekte dran. Sie sind schon etwas schwieriger zu handhaben
als die Räume, da sie einige Merkmale mehr haben. Sie werden definiert mit
Obj Obj {ObjKl}
Obj Kennzeichnung des Objekts in TAG
Bei der Objektdefinition werden folgende Anweisungen verstanden:
Name |
'Name'
Sex {Spez} |
Name |
Name des Objekts, wie er im Spiel auftaucht.
Der Name wird
ohne Artikel angegeben. Enthält der Name Adjektive, so muß
an Stelle der Endung ein Dach ('^') angegeben werden. Das
ist zwar umständlich, dient aber dazu, daß die Ausgabe in
korrektem Deutsch erfolgen kann, da sich die Endung mit dem
Fall ändert. Richtige Namen wären also:
'Schwert'
'rot^ Knopf'
'frisch gestrichen^ Bank'
Ein weiteres Sonderzeichen, das in Objektnamen angegeben
werden kann, ist die Tilde ('~'). Sie gibt an, wenn nach
Substantiven im Dativ ein 'n' angehängt werden soll. Das ist
in der Regel bei Substantiven im Plural der Fall, die nicht
mit 'n' oder 's' aufhören. So gäbe es dann:
'unzählig^ Vögel~ am Himmel'
'Leute~'
'rostig^ Nägel~'
'frisch^ Brötchen'
'parkend^ Autos'
Die Tilde kann auch für männliche Substantive benutzt werden,
an die im Akkusativ und Dativ 'n' bzw. 'en' angehängt wird.
Das ist bei Worten, die auf 't' oder 'e' enden häufig der
Fall, wie z.B.:
'klein^ Junge~'
'Student~ der Chemie'
'des Zaren Bote~'
'alt^ Schwede~'
'Sextant~'
Wieso müssen diese Dinge noch angegeben werden, wenn es doch
genaue Regeln für diese Unregelmäßigkeiten gibt? Ganz einfach:
TAG weiß nicht, welche Worte Adjektive und welche Substantive
sind. Außerdem kann man Worte im Namen angeben, die nur
Attribute sind und nicht gebeugt werden müssen, wie z.B. 'am
Himmel', 'des Zaren' und 'der Chemie' im Beispiel oben.
Sex Grammatikalisches Geschlecht des Objekts, das mit einem
Buchstaben gekennzeichnet wird:
-
m männlich (maskulin)
f weiblich (feminin)
n sächlich (neutrum)
p Mehrzahl (Plural)
|
Spez |
Spezialausdruck für das Namensformat
- 0 normale Ausgabe
- 1 Das Objekt wird immer ohne Artikel ausgegeben
wie z.B. bei Namen oder im obigen Beispiel
des Zaren-Boten.
- 2 Das Objekt hat keinen unbestimmten Artikel
- 3 Anstelle des unbestimmten Artikels wird je
nach Anzahl 'einige' bzw. 'etwas' benutzt:
'etwas Milch', 'einige Kieselsteine'
- 4 Das Objekt hat immer einen bestimmten Artikel.
Dies dient dazu, um nach langen Strapazen
lapidare Texte wie folgenden zu vermeiden:
'Ich sehe hier EINEN Smaragd der Weisheit'
- 5 Das unbestimmte Objekt wird mit dem
besitzanzeigenden Fürwort 'mein' oder 'dein'
ausgegeben, jenach #person:
'deine Trinkflasche'
|
Plural |
'Name'
Sex {Spez} |
Name |
Hier kann ein Plural angegeben werden. Der Plural wird verwendet,
wenn das Objekt in Wirklichkeit eine Anzahl von Objekten
ist und Anz (s.u.) größer als eins ist. Bei Objektklassen
bewirkt der Plural, daß Objekte derselben Klasse in Listen
zusammengefaßt werden. Dazu aber mehr in Kapitel 10.2.6. |
Sex |
Grammatikalisches Geschlecht des Plurals |
Spez |
Spezialausdruck im Format wie oben, mit der Ausnahme, daß Null
hier bedeutet, daß dem Plural die Anzahl mit einem Zahlwort
vorangestellt wird ('sieben Streichhölzer'). |
lName |
'Name' Sex {Spez |
Name |
Der Listenname, der verwendet wird, wenn das Objekt in einer
Liste, z.B. im Inventar oder in der Liste der beweglichen
Gegenstände, mit anderen gruppiert wird. Dieser Name ist i.A.
kürzer als der eigentliche Name. Wie das genau funktioniert
steht in Kapitel 10.2.6. Plural und lName dürfen nicht beide
für ein Objekt definiert sein. |
Sex |
Grammatikalisches Geschlecht des Listennamens |
Spez |
Spezialausdruck im Format wie beim Namen. |
Adj |
'Adj1'
{'Adj2' ...} |
Adj1 |
Liste von Adjektiven, die der Parser im Zusammenhang mit
diesem Objekt versteht. "Leere" Adjektive ('') werden nicht
akzeptiert. |
Vor |
'Vor1' {'Vor2' ...} |
Vor1 |
Liste von Wörtern, die der Parser als ersten Teil eines zu-
sammengesetzten Hauptworts versteht. Einige nähere
Erläuterungen folgen dazu gleich. |
Subst |
'Sub1' Sex1 {'Sub2' Sex2 ... } |
Sub1 |
Substantive, die der Parser im Zusammenhang mit diesem Objekt
versteht. |
Sex1 |
Genus des vorangehenden Substantivs, gekennzeichnet durch
m männlich (maskulin)
f weiblich (feminin)
n sächlich (neutrum)
p Mehrzahl (Plural)
Es kann eine beliebig lange Liste von Substantiven angegeben
werden. Dabei müssen Substantive und der dazu passende Genus
immer paarweise stehen.
Einige Hinweise zum Vokabular:
Der Parser versteht bis zu zwei Adjektive hintereinander,
die gebeugt angegeben werden müssen:
> NIMM DAS LANGE SCHWERT.
> NIMM LANGES SCHARFES SCHWERT.
Bei zwei Adjektiven kann das erste auch ein Adverb, d.h.
ungebeugt, sein:
> SCHRECKLICH HÄSSLICHES ENTLEIN.
> DIE FRISCH GESTRICHENE BANK.
Die mit Vor definierten ersten Teile des Hauptwortes können
in Kombination mit jedem definierten Substantiv stehen. Das
Substantiv kann aber immer auch alleine stehen. Beispiele
Vor 'haus' 'eingangs'
Subst 'tür' f 'eingang' m
versteht Tür, Haustür, Eingangstür,
Eingang und Hauseingang,
nicht aber Haus. Dafür wird aber auch Eingangseingang
verstanden, was nicht ganz korrekt ist. Um mehr Eingabevielfalt
zu haben, wird also in Kauf genommen, daß der Spieler "unsinnige"
Wörter eingeben kann.
Die Vor-Angabe kann auch mit einem Bindestrich an das
Haputwort angefügt werden: Haus-Tür.
Es muß mindestens ein Substantiv angegeben werden, Adjektive
und Teile von zusammengesetzten Hauptwörtern brauchen nicht
angegeben zu werden. Allerdings muß es möglich sein, ein
Objekt eindeutig ansprechen zu können. Dies gilt besonders
für alle beweglichen Objekte und Objekte im selben Raum.
Es gibt Fälle, wo man ein "leeres Substantiv", d.h. zwei
direkt aufeianderfolgende Hochkommas mit einem nachfolgenden
Genus, angeben kann. Dann muß aber mindestens ein Adjektiv
angegeben werden. Dieser Fall ist für substantivierte Adjektive
gedacht, die sehr häufig im Zusammenhang mit Personen
vorkommen, z.B. 'der Alte (Mann)' oder 'die Blinden'.
Vielleicht findet man im Verlauf des Spiels mehrere unterschiedliche
Schlüssel. Dann muß der Parser einduetig wissen,
welcher Schlüssel in einem Befehl gemeint ist. Also müssen
die Schlüssel verschiedenes Vokabular bekommen: 'kleiner
Schlüssel', 'Haustürschlüssel', 'Hydrantenschlüssel' usw.
Kein einziger darf nur 'Schlüssel' als Substantiv verstehen!
Bei festen Objekten, die in verschiedenen Räumen sind,
können auch gleiche Namen vorkommen. So kann es sein, daß im
Labor ein roter Knopf ist und ein weiterer im Keller hinter
dem Weinregal.
(Diese Regel gilt nicht für Objekte, die man nicht unterscheiden
kann, wie z.B. eine Anzahl Münzen. Der Parser wählt
aus den möglichen Objekten dann irgendeins aus. Es spielt ja
sicherlich keine Rolle, welche Münze der Spieler aufhebt.)
Manche Bezeichnungen bestehen auch aus zwei oder mehreren
Worten, wie 'Glas Wein', 'Blatt Papier' oder 'Herr Dr. Karl
Weißenstein'. Deshalb prüft TAG auch nach dem erfolgreichen
Finden eines Substantiv die nachfolgenden, ob sie mit den
gefundenen Objekten übereinstimmen. Dies kann auch benutzt
werden, um Objekte zu unterscheiden. Gibt es zum Beispiel
ein Glas Milch und ein Glas Saft, so ist 'Glas' zweideutig,
'Glas Milch' aber eindeutig. Ist das einem Substantiv folgende
Wort ein Substantiv, paßt aber nicht zum ersten Wort, so
wird die Eingabe als zwei verschiedene Objekte betrachtet:
> NIMM GLAS FLEISCH
wird also interpretiert als 'Nimm das Glas und das Fleisch.'
Hierbei sollte beachtet werden, daß nur Akkusativ-Objekte
ohne Präposition mehrfach auftreten können.
(Anmerkung: Der Parser prüft zunächst, ob die eingegebenen
Adjektive und das zusammengesetzte Substantiv zusammenpassen.
Unter Umständen trifft die Parser-Eingabe auf mehrere Objekte
zu. Dann wird bei den meisten Verben geprüft, welche dieser
Objekte sich im selben Raum wie der Spieler befinden. Der
eingegebene Befehl wird nur dann weiterverarbeitet, wenn ein
Objekt eindeutig angesprochen wird. Ansonsten kommt die
Meldung 'Ich sehe hier kein Obj' bzw. 'Welches Obj?
Obj1 oder Obj2?'.) |
Ort |
Ort {Ort2} |
Ort |
Ort des Objekts zu Anfang des Spiels. Ort kann folgende
Sachen bedeuten:
Raum Das Objekt befindet sich in diesem Raum
Verh Obj
Das Objekt befindet sich je nach Verhältniswort
Verh IN, AUF, BEI, AN, HINTER oder UNTER einem
anderen Objekt.
BeiMir Ich trage das Objekt bei mir.
Angezogen
Ich habe das Objekt angezogen. |
Ort2 |
wird nur bei Türen angegeben, um zu sagen, wo die Tür hin-
führt. In diesem Fall können Ort und Ort2 nur Räume sein.
(Das Programm prüft, ob die Tür im Raum ist und vertauscht
dann ggf. die Räume. So ist es egal, von welcher Seite man
die Tür zuerst sieht.) Wird Ort2 nicht angegeben, so kann
man die Tür nur von einer Seite sehen und öffnen. Die Variable
Obj.Ort2 dient zum Ansprechen des Zielorts im Programm, es
ist eine Raumvariable. |
Zust |
Zust |
Zust |
Ein definierter Zustand. Wird diese Zeile weggelassen, so ist
der Zustand normal, was wohl für die meisten Objekte zutrifft.
Ein Objekt kann immer nur einen Zustand haben! |
Attr |
{/}Attr1 {{/}Attr2} {{/}Attr3}... |
Attr1 |
Attribut wie mit ObjAttr definiert. Die Liste von definierten
Attributen kann beliebig lang sein, und es können beliebig
viele Attr-Zeilen angegeben werden. Die Attribute können mit
einem Schrägstrich versehen werden. So kann dem Objekt das
Attribut wieder weggenommen werden, wenn es ihm durch eine
Klassendefinition vererbt wurde. |
Gew |
Gew |
Gew |
Gew gibt im allgemeinen das Gewicht des Objekts in einer frei
wählbaren Einheit an. Leider ist diese Einheit nicht ganz so
frei wählbar, denn das maximal tragbare Gewicht MaxGew darf
255 nicht überschreiten. Objekte, deren Gewicht größer ist
als MaxGew, sind zu schwer für den Spieler. Ein Objekt kann
auch ein Gewicht von 0 haben. Damit können Sätze wie 'Ich
kann nicht mehr tragen.' vermieden werden, wenn man ein Blatt
Papier oder eine Feder aufheben will. Feste Objekte benötigen
keine Gewichtsangabe.
Es kommt nicht darauf an, das Gewicht auf ein Gramm genau
anzugeben. Die Gewichtsangabe ist nur eine grobe Schätzung
des Gewichts, damit das Inventar des Spielers nicht nur
auf eine Anzahl von Objekten beschränkt ist. Man kann die
Gewichtsabhängigkeit auch ganz weglassen, indem man zu keinem
Objekt ein Gewicht definiert. |
Vol |
Vol |
Vol |
gibt den Rauminhalt eines Objektes in einer beliebigen
Maßeinheit an. Das größtmögliche Volumen ist 255. Vol ist
nur von Bedeutung bei Objekten, die man aufheben kann. Vol
wird benutzt um zu verhindern, daß größere Objekte in oder
auf kleinere gelegt werden. Es ist natürlich nur eine An-
näherung, da die Form des Objekts nicht berücksichtigt werden
kann. Bei Behältern gibt Vol das größtmöglich nutzbare
Volumen an.
Genau wie das Gewicht kann man auch das Volumen außer acht
lassen. |
Öffnet |
Obj |
Obj |
gibt ein verschließbares Objekt an, das mit dem aktuellen
Objekt aufgechlossen werden kann. Das aktuelle Objekt muß
natürlich das Attribut Schlüssel besitzen. Das Objekt, das mit
dem momentanen Objekt geöffnet werden kann, kann im Programm
mit Obj.Öffnet angesprochen werden. |
Anz |
Anz |
Anz |
gibt die Anzahl der gleichen Unterobjekte an, aus denen ein
Objekt besteht. Wenn das Objekt etwa eine Ansammlung von
sieben Münzen ist, so ist Anz 7. Wenn Anz benutzt wird, sollte auch
ein Plural angegeben werden, damit das Objekt korrekt aus-
gegeben werden kann. Die Variable zum Ändern der Anzahl heißt
Obj.Anz. |
Besch |
'Besch' |
Besch |
Beschreibung des Objekts, die erscheint, wenn man das Objekt
untersucht. Die Objektbeschreibung muß in Hochkommas gestellt
werden und kann über beliebig viele Zeilen gehen. Siehe Texte.
Wird Besch weggelassen, so erscheint die Standard-Antwort
'Ich finde an Obj nichts Besonderes.' (Es sei denn, das
Objekt besitzt einen Text zum Lesen, beinhaltet Objekte oder
hat einen Zustand, der beschrieben werden kann. Näheres dazu
in Kapitel 10.) |
Text |
'Text' |
Text |
Gibt einen Text an, der erscheint, wenn man das Objekt liest.
Im allgemeinen ist dieser Text von der Beschreibung verschie-
den. Wenn kein Text angegeben wird, erscheint beim Lesen des
Objekts der Standardsatz: 'Auf Obj steht nichts.' |
Erst |
'Text' |
Text |
ist ein Text, der anstelle der Liste der Objekte in der
Raumbeschreibung ausgegeben wird, wenn das Objekt noch nicht
benutzt worden ist, d.h. wenn es das Attribut 'bewegt' noch
nicht besitzt. Danach wird das Objekt immer in die Liste
der beweglichen Gegenstände in der Raumbeschreibung mit auf-
genommen. Bei Personen, die nicht aufgehoben werden können,
ist diese Beschreibung immer aktiv. |
Dabei |
'Text' |
Darin |
'Text' |
Darauf |
'Text' |
Daran |
'Text' |
Text |
sind hier Texte, die die Liste der Dinge enthalten, die bei
einer Person sind, sich in oder auf dem Objekt befinden oder
die an dem Objekt befestigt sind. Dieser Text sollte die
Textanweisung [Liste] enthalten (s. Kap. 8). Wird dieser
Text nicht angegeben, so werden die Standardantworten be-
nutzt, etwa 'Auf dem Tisch siehst du einen Jonagold-Apfel.' |
InBesch |
'Text' |
Text |
ist ein Text, der angegeben wird, wenn das Objekt begehbar
(d.h. ein Behälter und ein Sitz, eine Liege oder eine Stand-
fläche) ist und sich der Spieler darin befindet. Mehr dazu
in Kap 10. |
Var |
Var {Wert} |
Var |
ist eine Variable für Objekte. Je Objekt können bis zu acht
Variablen definiert werden. Die Variable wird kann dann später
mit der Syntax
Obj.Var
angesprochen werden. |
Wert |
ist der Wert der Variablen, der im Bereich von 0 bis 255
liegen muß.
Anmerkungen zu Variablen für Objekte: Insgesamt können 32
Variablen für Objekte definiert werden, wobei verschiedene
Objekte dieselben Variablen haben können. Dieselbe Variable
kann natürlich für verschiedene Objekte verschiedene Werte
annehmen. Besitzt ein Objekt eine Variable nicht, so ist
ihr Wert Null. Ob eine Variable für ein Objekt definiert ist
oder nicht, kann man mit der Bedingung
(Obj hat Var)
prüfen. Es empfiehlt sich, die Variablen, die bei mehreren
Objekten definiert sind, direkt bei den Objekten zu definieren
und Variablen, die nur auf ein oder zwei Objekte zutreffen,
als globale Flaggen zu deklarieren. Zum Beispiel ist von den
folgenden Möglichkeiten
Obj Bär
Var gezähmt 0
...
Flagge Bär_gezähmt 0
die zweite glücklicher, es sei denn, das Spiel findet in einem
Zoo statt und es gibt eine ganze Menagerie zu zähmen.
Eine typische Anwendung für eine Objektvariable wären z.B.
Waffen- und Rüstungsattribute, wie sie in Rollenspielen wie
'Das Schwarze Auge' vorkommen. Hier macht es sogar Sinn,
Objektklassen wie 'Waffe', 'Schild' usw. zu definieren und die
Variablendefinitionen auf die Objekte weiterzuvererben. (Mehr
dazu in Kapitel 5.5) |
Außerdem können noch einige Ausführungsblöcke angegeben werden. Die
Syntax von Ausführungsblöcken wird in Kap. 6 beschrieben. Diese
Blöcke müssen mit EndeAusf abgeschlossen werden. Es können folgene
Ausführungen angegeben werden:
VorAusf |
wird aufgerufen, wenn das Objekt in der Spielereingabe
angesprochen wurde. Hier kann definiert werden, was
passiert, bevor die eigentliche Befehlsausführung
durchgeführt wird. Wenn diese Ausführung negativ abgeschlossen
wird, etwa durch eine Bed- oder Stop-Anweisung
oder durch setzen der Flagge NullAkt, so
wird die Befehlsausführung nicht weitergeführt. |
NachAusf |
wird nach der Befehlsausführung aufgerufen, wenn das
Objekt in der Spielereingabe angesprochen wurde, um
eventuelle Folgen des Befehls zu beschreiben. |
VorReakt |
ist die Reaktion eines Objekts vor einer Aktion des
Spielers, auch wenn das Objekt nicht im Befehl angesprochen
wurde. Um reagieren zu können, muß das
Objekt im selben Raum wie der Spieler sein. |
NachReakt |
ist die Reaktion, nachdem der Spieler die Aktion
erfolgreich beendet hat. |
BefAusf |
wird aufgerufen, wenn der Spieler dem Objekt einen
Befehl erteilt hat, wie z.B. BERND, "GEHE NACH NORDEN"
oder COMPUTER, "ANALYSIERE GESTEIN". Im allgemeinen
besitzen nur Personen diese Ausführung, aber sie kann
für alle Objekte angegeben werden. |
Wie man genau mit diesen Aktionen arbeitet und wie man sie geschickt
einsetzt, wird in Kap. 7 beschrieben
Dazu einige Eingabebesipiele:
Obj Taschenlampe
Name 'Taschenlampe' f
Vor 'taschen'
Subst 'lampe' f 'funzel' f 'leuchte' f
Ort BeiMir
Zust Aus
Attr Licht
Vol 1
Besch 'Die Taschenlampe war sehr billig, aber sie hat dir bis
jetzt immer gute Dienste geleistet.'
Obj Rucksack
Name 'alt^ Wanderrucksack' m
Adj 'alt'
Vor 'wander'
Subst 'rucksack' m
Ort BeiMir
Attr Behälter Kleidung
Vol 20
Zust offen
Besch 'Mit diesem alten Wanderrucksack hat mein Großvater
schon so manche Tour durch das Sauerland gemacht.'
Darin '[Liste 0] [ist 0] im Rucksack.'
Obj Haustür
Name 'Haustür' f
Vor 'haus' 'wohnungs' 'holz'
Subst 'tür' f 'eingang' m
Ort Vor_dem_Haus Im_Haus
Attr Tür Fest verschließbar
Zust abgeschlossen
Obj Messingschlüssel
Name 'Messingschlüssel' m
Vor 'messing'
Subst 'schlüssel' m
Ort Lichtung
Öffnet Haustür
Attr Schlüssel
Besch 'Der Messingschlüssel hat einen simplen Bart, aber einen
schön verzierten Griff.'
Erst 'Neben dem Pfad glänzt ein Schlüssel im Gras,
den hier wohl jemand verloren hat.'
Obj Sofa
Name 'rot^ Sofa' n
Adj 'abgewetzt' 'einstmals' 'rot' 'schäbig'
Subst 'sofa' n 'couch' f
Attr Fest Liege Sitz Ablage
Vol 40
Ort Im_Haus
Besch 'Obwohl die (einstmals rote) Couch schon etwas abgewetzt
aussieht, könntest du es dir dort bequem machen, um dich
von deinen Strapazen auszuruhen.'
Darauf 'Irgendjemand hat [liste 1] auf der Couch abgelegt.'
Hier werden folgende Gegenstände definiert:
- Eine Taschenlampe, die der Spieler bei sich hat und die man ein- und
ausschalten kann. Wenn sie eingeschaltet ist, leuchtet sie.
- Einen Rucksack, der bis zu 20 Volumeneinheiten aufnehmen kann und
den man aufziehen kann. Wenn er offen ist, und sich mindestens ein
Objekt in ihm befindet, erscheint 'XXX ist/sind im Rucksack'.
- Eine Haustür, die verschlossen ist und die vom Garten ins Haus führt.
- Einen Messingschlüssel, der die Haustür aufschließt. Am Anfang liegt
er am Wegesrand in der Lichtung, das wird in der Erst-Beschreibung
gesagt.
- Ein Sofa im Haus, auf das man Gegenstände ablegen kann und auf das
sich der Spieler setzen und legen kann.
3.2.4. Dekorationen
Eine besondere Art von Objekten sind die Dekorationen. Sie können sich
während des Spiels nicht verändern und sind immer fest. Sie dienen nur dazu,
Sachen, die in Raumbeschreibungen erwähnt werden, mit Leben zu füllen. Sie
werden mit Deko definiert:
Deko Deko
Deko: Kennzeichnung der Deko in TAG
Bei der Definition der Dekorationen werden folgende Anweisungen verstanden:
Name 'Name' Sex Spez
Adj 'Adj1' {'Adj2' ...}
Vor 'Vor1' {'Vor2' ...}
Subst 'Subst1' Sex1 {'Subst2' Sex2 ...}
Attr Attr1
Ort Ort {Ort2 ... Ort5}
Ort {/}Attr
Besch 'Besch'
Die Syntax ist dabei wie bei den entsprechenden Anweisungen für Objekte.
Dekorationen können in bis zu fünf Orten sein. Alternativ kann als Ort ein
Raum-Attribut angegeben werden, dann befindet sich die Deko automatisch an
einem Ort, wenn dieser das passende Attribut besitzt. Wird das Attribut mit
einem Schrägstrich versehen, so befindet sich die Deko in allen Räumen, die
dieses Attribut nicht besitzen. (So kann mit Ort besucht eine Dekoration
definiert werden, die immer präsent ist, z.B die Luft oder die Nase des
Spielers. Dasselbe erreicht man aber mit Ort BeiMir eleganter und im Fall
der Nase auch logischer.)
Außerdem können Dekos auch Ausführungsblöcke besitzen. Prinzipiell können
einer Dekoration alle Attribute gegeben werden, aber das einzige, das hier
Sinn macht, ist wahrscheinlich entfernt. Ein Beispiel:
Deko Bäume
Name 'Bäume' p
Vor 'laub' 'eichen'
Subst 'bäume' p 'baum' m 'eichen' p 'eiche' f 'wald' m
Subst 'stämme' p 'birke' f 'birken' p
Ort Lichtung Vor_dem_Haus
Besch 'Der Wald ist hier sehr dicht und besteht zum größten
Teil aus Eichen. Ein paar Birken gibt es aber auch.'
Deko Gartenflora
Name 'Blumen im Garten' p
Adj 'exotisch' 'immergrün' 'farbenprächtig' 'bunt'
Subst 'garten' m 'blumen' p 'büsche' p 'hyazinthen' p
Ort Vor_dem_Haus
Besch 'Der farbenprächtige Garten ist voll von exotischen
Blumen, die in allen Farben blühen. Zwischen ein paar
immergrünen Büschen blühen Hyazinthen.'
Zusammen mit den Raumdefinitionen im Abschnitt davor geben diese Objekte und
Dekos schon ein kleines Adventure, das nicht ganz so langweilig ist wie die
drei Raumdefinitionen alleine.
Das wichtigste an Dekorationen ist wahrscheinlich die Beschreibung. Außerdem
haben Dekorationen ein großes Vokabular, um mit einem Objekt möglichst viele
Sachen aus der Raumbeschreibung 'totschlagen' zu können.
Insgesamt können nur 251 Objekte und Dekos definiert werden. Es gibt vier
(Hilfs-)Objekte, die schon vordefiniert sind:
Ich
ist ein Hilfsobjekt, das den Spieler meint. Es kann auch
für Anweisungen benutzt werden, die der Spieler an andere
richtet, wie in 'Sam, "Mix mir einen Wodka."'.
Du
meint i.a. auch den Spieler und wird für reflexive Verben
benutzt. Wenn andere Personen angesprochen werden, dann
wird Du in diese Person umgewandelt.
Zahl
ist ein Hilfsobjekt, das benutzt wird, wenn der Spieler eine
Zahl eingegeben hat.
Zitat
bedeutet, daß der Spieler anstelle eines Objektes eine
wörtliche Rede angegeben hat, die in Anführungszeichen
begrenzt ist.
Diese Objekte können aber keine Eigenschaften besitzen, sie werden nur für
den Parser verwendet, um zu checken, daß eine Eingabe vorliegt, die keins
der definierten Objekte meint.
|
3.3. Klassen von Objekten und Räumen
Um die Handhabung von Räumen und Objekten einfacher und effektiver zu machen,
bietet TAG die Möglichkeit, Klassen von Räumen und Objekten zu definieren,
von denen Räume und Objekte Eigenschaften erben können.
Dieses Konzept wird häufig als Objektorientierung bezeichnet. Die
Objektorientierung von TAG ist sehr einfach, sie arbeitet nicht mit Konstruktoren
und Destruktoren, sondern sucht nur die jeweils passende Eigenschaft für ein
Objekt oder einen Raum.
3.3.1. Objektklassen
Eine Objektklasse ist wie ein Objekt und wird auch wie eines definiert.
Das so definierte Objekt taucht aber nie wirklich im Spiel auf, sondern ist
nur die Vorlage für tatsächliche Objekte. Man sagt, Objektklassen vererben
ihre Eigenschaften auf Objekte. Es gibt dabei zwei Arten der Vererbung:
Ersetzende Vererbung
Das bedeutet, daß die jeweilige Eigenschaft zunächst bei einer
Objektdefinition vererbt wird. Wird dieselbe Eigenschaft für das
Objekt neu definiert, so wird die vererbte Eigenschaft überschrieben,
der Raum besitzt nur die neue Eigenschaft. Dies ist der Regelfall. -
Erweiternde Vererbung
Hier werden die Eigenschaften der Objektklasse nicht überschrieben,
sondern erweitert. Das heißt die Definitionen aus der Objektklasse
existieren zusätzlich zu den neu definierten, wobei die neuen
Eigenschaften jedoch den Vorrang besitzen. Bei Objekten sind alle
Ausführungblöcke und das Vokabular erweiternd vererblich. -
Auch Objektklassen können ihre Eigenschaften wieder von einer anderen Klasse
erben. Es kann immer nur von einer Klasse geerbt werden, die bereits definiert
worden ist. Auf diese Weise wird auch vermieden, daß sich Klassen gegenseitig
auf sich selbst beziehen.
Die genaue Syntax zur Definition einer Objektklasse ist:
ObjKlasse OKl {(OKl2)}
OKl: Bezeichnung der Objektklasse in TAG
OKl2: Hier kann in Klammern eine Objektklasse angegeben werden,
von der die Klasse ihre Eigenschaften erbt.
Nachfolgend können dieselben Definitionen gemacht werden wie bei der
Objektdefinition. Zum Beispiel:
ObjKlasse Münze
Name 'Münze' f
Subst 'münze' f
Var Wert 10
Besch '[Der selbst] [ist] ein örtliches Zahlungsmittel in
Wert von [num selbst.Wert] Kronen.'
VorAusf
(kaufen_mit) Bed (aObj hat Preis)
'Das kann ich nicht käuflich erwerben.'
Bed /(aObj gekauft)
'Du hast [den aObj] bereits gekauft.'
Bed (aObj.Preis = selbst.Wert)
'[Der selbst] [ist] [num selbst.Wert]
Kronen wert, [der aObj] koste[t] aber
[num aObj.Preis] Kronen.'
ObjNach selbst Nirwana
ObjNach aObj BeiMir
Text 'Topp! Du kaufst [den aObj] mit
[dem selbst].'
EndeAusf
Alle Objekte, die von dieser Klasse erben, besitzen die Variable Wert. Diese
Variable hat zunächst den Wert 10, kann aber in der jeweiligen Objektdefinition
geändert werden. Alle Objekte der Klasse Münze verstehen das Vokabular
'münze' und befolgen die VorAusf zum kaufen von anderen Objekten. (Wie diese
VorAusf genau funktioniert, steht in Kapitel 6.) Wird bei der Objektdefinition
keine Beschreibung angegeben, so erscheint die Beschreibung der Klasse
stattdessen. Eine mögliche Münzen-Definition wäre:
Obj Silberling (Münze)
Name 'Silberling' m
Adj 'silbern'
Vor 'silber'
Subst 'silberling' m 'münze' f
Var Wert 5
Die Beschreibung und die Anweisungen zum Kaufen können hier entfallen, da sie
von der Klasse vererbt werden. Das schafft Ordnung im Quelltext, da er durch
die knappen Münzen-Definitionen übersichtlicher wird.
Bei der Klassendefinition ist darauf zu achten, daß das selbstbezügliche
Objekt selbst benutzt wird, da Münze nicht als Objekt verstanden wird - Es
ist ja eine Objektklasse. Beim Ausführen der VorAusf oder beim Ausgeben der
Beschreibung setzt TAM dann das passende Objekt für selbst ein.
3.3.2. Raumklassen
Raumklassen sind Vorlagen für Räume, genau wie Objektklassen Vorlagen für
Objekte sind. Auch hier gibt es wieder zwei Arten der Vererbung, wobei aber
nur die beiden Ausführungsblöcke erweiternd vererblich sind.
Auch Raumklassen können wiederum von einer anderen Klasse erben. Dabei muß
aber darauf geachtet werden, daß eine Raumklasse bereits definiert sein muß,
damit sie ihre Eigenschaften auf andere Klassen oder auf Räume vererben
kann.
Raumklassen werden genauso definiert wie ein Raum, nur daß das Kennwort
RaumKlasse anstatt von Raum benutzt wird:
RaumKlasse RKl {(RKl2)}
Dazu wieder ein Beispiel:
RaumKlasse Wald
Name 'In einem Wald'
Std Unterholz
VorAusf
(riechen) Text 'Du saugst den reichen, erdigen
Geruch tief in deine Lungen ein.'
EndeAusf
NachAusf
(global) Zufall Aux 1 10
Jenach Aux
(1) Text '[#]Ein schauriges Heulen ertönt
im Gebüsch.'
(2) Text '[#]Du hörst etwas rascheln.'
(3) Text '[#]Im Laubdach über dir hörst du
eigenartige Geräusche.'
Ende
EndeAusf
In jedem Raum der Klasse Wald riecht der Spieler nun den erdigen Geruch und
hört in 30% der Züge eigenartige Geräusche. Diese Regeln können selbstverständlich
durch eigene erweitert oder ersetzt werden. Wird für einen Raum
der Klasse Wald kein Name angegeben, so heißt er 'In einem Wald' und die
Standardrichtungen werden auch vererbt. Da diese Klasse keine Beschreibung
besitzt, muß sie in der Raumdefinition mit angegeben werden.
Bei der Definition von Raumklassen muß man sich auf den Raum mit daselbst
beziehen, das das Pendant zu selbst bei Objekten ist. Bei Räumen kommt es
aber nicht so häufig vor wie bei Objekten und ist meistens gleichwertig mit
aRaum.
|