7.2. Anweisungen im Text
Für alle Texte, egal ob gesondert in Textblöcken oder direkt im Ausführungsblock
definbiert, gelten die folgenden Regeln:
Die Texte werden nacheinander geschrieben. Ein Text fängt dort an, wo der
letzte aufgehört hat. Hört ein Text nicht mit einem Leerzeichen auf, so
wird automatisch ein Leerzeichen gesetzt (außer nach einem Absatz).
Ein Zeilenumbruch innerhalb des Textes wird wie ein Leerzeichen betrachtet.
Leerzeichen, die sich vor oder nach dem Text befinden, werden nicht
beachtet. Der signifikante Bereich einer Zeile darf nicht länger als 80
Zeichen sein.
Ist das letzte Zeichen einer Zeile ein Schrägstrich, so wird die nächste
Zeile direkt ohne Leerzeichen an die vorhergehende angefügt. Das geht auch
am Ende eines Textes: Der nächste Text, der ausgegeben wird 'klebt' dann
ohne trennendes Leerzeichen am vorherigen.
Ein doppelter Zeilenumbruch innerhalb eines Textes, d.h. eine leere
Zeile zwischen zwei Textabschnitten, bewirkt einen Absatz zwischen diesen
beiden Abschnitten. Dasselbe kann mit der Sequenz '[#]' im Text erreicht
werden.
Da das Hochkomma zum Abtrennen der Strings benötigt wird, können
Apostrophe durch das Prozentzeichen oder durch die Textbefehle '/"' oder
'/,' ersetzt werden:
'Thomas% Buch' Thomas' Buch
'/,s ist gar schaurig.' 's ist gar schaurig.
'"Die Parole ist /"Rot/"."' "Die Parole ist 'Rot'."
Es gibt verschiedene Sonderbefehle, die in eckige Klammern eingeschlossen
werden. Diese Befehle werden intern als Sequenzen, die mit einem Schrägstrich
beginnen, gehandhabt. Einige Befehle können auch als /-Sequenz
angegeben werden. Die Textbefehle sind:
[Absatz], [#] |
bewirkt einen formatierten Zeilenumbruch, d.h. ein neuer Absatz
beginnt. Das Format des Umbruchs kann mit dem Befehl
Absatz in der Umgebungsdefinition festgelegt werden. (Dies
entspricht /#)
|
[/] |
schreibt einen Schrägstrich. (Entspricht //)
|
[%] |
schreibt ein Prozentzeichen. (Entspricht /%)
|
[,], ["] |
schreiben ein Apostroph. (Dies entspricht /" oder
/,)
|
[[, ]] |
schreiben die eckigen Klammern. (Entspricht /( und /) )
|
[-] |
ist ein bedingter Trennstrich. Wenn dort umgebrochen wird,
wird ein Bindestrich geschrieben, ansonsten gar nichts.
(/-)
|
[_], [] |
schreiben ein geschütztes Leerzeichen. Das bedeutet, daß an
dieser Stelle nicht umgebrochen werden darf. (/_)
|
[^] |
schreibt die Endung eines Adjektivs. Das ist nur möglich, wenn
es in einem Objektnamen auftaucht, z.B., wenn der Objektname
mit einer Aktion ausgegeben wird. Im Objektnamen ist es dasselbe
wie ein Dach. (Entspricht /^)
|
[~] |
schreibt 'n' oder 'en' bei Plural-Objekten im Dativ und bei
maskulinen Objekten im Akkusativ und Dativ. Das ist wie bei
[^] auch nur für die Objektausgabe möglich.
(Entspricht /~)
|
[Umbr] oder [x] |
bewirkt einen unformatierten Zeilenumbruch, d.h. der Cursor
geht an den Anfang der nächsten Zeile, es gibt weder Leerzeile
noch Einrückung. (Entspricht /x)
|
[Aufz] oder [:] |
schreibt das Aufzählungszeichen, wie es z.B. bei der Inventarliste
verwendet wird.
|
[Fett] oder [f] |
Fettdruck ein. (Fett bedeutet, daß eine andere Farbe benutzt
wird.) (/f)
|
[Norm] oder [n] |
Fettdruck aus, die normale Textfarbe wird verwendet. (/f)
|
[Tab] |
schreibt einen Tab, d.h. rückt zur nächsten Tabstop-Position
(ganzzahliges Vielfaches der Tabulatorweite) vor.
|
[TTab] |
schreibt einen Tab mit doppelter Tabulatorweite.
|
[@] |
wird häufig in den Standard-Aussagen in TAG.STD verwendet.
Es ist ein Überbleibsel aus den Zeiten von 'Das Amulett', wo
komplizierte Texte in die Puffervariable Aussage geschrie-
ben wurden. Dieser Befehl schreibt diesen Puffer. Er wird
aber nur noch sehr selten benutzt.
In der Datei tag.std wird die Bedeutung der Puffervariable
kurz beschrieben, falls man die Datei ändern möchte.
|
[: x] |
bewegt den Cursor in die Spalte , wenn er nicht bereits
über diese Position hinaus ist.
|
[+ x] |
bewegt den Cursor an die Stelle x, wenn er nicht schon über
diese Stelle hinaus ist und setzt den Einzug am linken Rand
für den momentanen Textabsatz auf x. Der Absatz wird also
hängend geschrieben.
|
[- x] |
setzt den Einzug am rechten Textrand auf x. Das heißt, es
wird nun x Zeichen früher umgebrochen.
|
[= x] |
setzt den Einzug auf beiden Rändern auf x. Dies entspricht
den beiden Anweisungen [+ x] und [- x] nacheinander.
|
Die Zeichen, die nicht im 7-Bit-ASCII-Zeichensatz enthalten sind, d.h.
die Zeichen mit Akzenten und Umlauten, können durch zwei andere Zeichen in
eckigen Klammern ausgedrückt werden:
[.a] | Accent aigu auf a, e, i, o, u, y |
[`a] | Accent grave auf a, e, i, o, u |
[^a] | Zirkumflex (Dach) auf a, e, i, o, u |
["a] | Umlaut auf a, e, i, o, u, y |
[~a] | Tilde auf a, n, o |
[,c] | Cedille an c |
[/o] | skaninavisches durchgestrichenes o |
[oa] | schwedisches a mit Ring |
[ae] | skandinavische ae-Ligatur |
[sz] | scharfes s (Es-Zett) |
[dt] | isländisches Eth |
[th] | isländisches Thorn |
[my] | griechisches My |
[CO] | Copyright |
[RO] | Registriertes Warenzeichen |
[SS] | Paragraph |
[=L] | Pfund Sterling |
[c/] | Cent |
[xo] | Währungs-Zeichen |
[xx] | Multiplikationszeichen |
[oo] | Grad-Zeichen |
[<], [>] | französische Anführungszeichen |
[!!], [??] | spanische Ausrufe- und Fragezeichen (auf dem Kopf) |
[=≫], [<=] | Größergleich und Kleinergleich |
[+-] | Plusminus |
[_o], [_a] | spanische/italienische Ordinalzeichen |
[12], [14], [34]
| ein halb, ein Viertel bzw. drei Viertel |
[^1], [^2], [^3]
| hochgestellte Eins, Zwei bzw. Drei |
[||] | gebrochener Strich |
Die Buchstaben nach den Akzenten können auch groß sein, dann wird der Ak-
zent natürlich auf den Großbuchstaben gesetzt. In welcher Reihenfolge die
beiden Zeichen angegeben werden, spielt keine Rolle. So sind z.B. [^e] und
[e^] dasselbe, aber verschieden von [^E].
Diese Option ist nur nützlich, wenn diese Zeichen nicht auf der Tastatur
sind. Dieselben Zeichen können auch wie üblich generiert werden, da sie
von TAG automatisch in den Zeichensatz nach ISO-8859-1 übertragen werden.
Weiterhin gibt es Befehle, die zur Ausgabe von variablen Objekten in
Textstrings dienen. Auch diese Befehle stehen in eckigen Klammern:
[dasObj Obj Fall] |
gibt das Objekt Obj mit bestimmtem Artikel im
grammatikalischen Fall Fall aus. ('der Ball')
Da dieser Befehl sehr häufig vorkommt, kann man ihn
abkürzen mit den folgenden Befehlen:
[der Obj], Fall = 0 (%Nom, Nominativ)
[den Obj], Fall = 1 (%Akk, Akkusativ)
[dem Obj], Fall = 2 (%Dat, Dativ)
Der Fall wird hier aus dem Artikel bestimmt. Der
Artikel muß hier männlich sein, da dies der einzige
Genus ist, bei dem die Arikel für die drei Fälle
verschieden sind. (Am besten man denkt dann nicht an
ein 'Objekt' sondern an einen 'Gegenstand'.)
|
[einObj Obj Fall] |
gibt das Objekt Obj mit unbestimmtem Artikel im
Fall Fall aus ('ein Ball'). Auch hier gibt es die
Abkürzungen:
[ein Obj],
[einen Obj],
[einem Obj]
|
[keinObj Obj Fall] |
gibt das Objekt Obj verneint im Fall Fall aus
('kein Ball'). Die Abkürzungen sind:
[kein Obj],
[keinen Obj],
[keinem Obj]
|
[obj Obj Fall] |
gibt das Objekt Obj ohne Artikel im FallFall
aus. ('Ball')
|
[Obj] | gibt das Objekt ohne Artikel im
Nominativ aus.
|
[es Obj Fall] | gibt das passende
Pronomen (Fürwort) für Obj im Fall Fall aus.
|
[präp] oder [p] | gibt die Präposition aus dem
eingegebenen Befehl aus.
|
[ist Obj] | gibt das Verb 'sein' an das Objekt Obj angepaßt
aus, d.h. gibt 'ist' aus, wenn Obj im Singular ist,
und 'sind', wenn Obj im Plural steht. Dies dient
dazu, Aussagen wie 'Die Zwerge ist müde.' zu umgehen.
|
[hat Obj] | gibt das Verb 'haben' an Obj angepaßt aus, d.h. je
nachdem, ob Obj im Singular oder Plural steht, wird
'hat' oder 'haben' ausgegeben.
|
[wird Obj] | gibt das Verb 'werden' an Obj angepaßt aus, d.h. je
nachdem, ob Obj im Singular oder Plural steht, wird
'wird' oder 'werden' ausgegeben.
|
[t Obj] | gibt die Endung eines schwachen Verbs an Obj ange-
paßt aus, d.h. 't' oder 'en'. Für die meisten Verben
gilt diese Beugung. Zum Beispiel gibt 'komm[t Obj]'
je nach Anzahl 'kommt' oder 'kommen'.
|
[sing/plur Obj] |
gibt das komplette gebeugte Verb an. Steht das Objekt
in der Einzahl, so wird sing ausgegeben,
andernfalls plur, z.B. '[muß/müssen xObj]'.
Die gesamteSequenz muß dabei in einer Zeile stehen!
Diese Option kann auch für verschiedene Zeiten benutzt
werden, z.B. '[ging/gingen xObj]'.
|
[liste Fall] | gibt die zuvor mit 'ObjListe' erstellte Liste im Fall
Fall aus. Für den Nominativ, d.h. den Fall 0, kann
dann das Verb mit der Objektangabe 0 benutzt werden:
'Hier [ist 0] [liste 0].'
|
[sitz] | Gibt abhängig von bSitz den Stamm des passenden
Ruheverbs aus: 'sitz', 'steh' oder 'lieg'. Es wird
nur der Stamm ausgegeben, damit das Verb angepaßt
werden kann, wenn der Spieler in verschiedenen Per-
sonen agesprochen wird. Zum Beispiel: 'Ich [sitz]e...',
'Du [sitz]st...' oder 'Sie [sitz]en...' (Die 'zs'-
Kombination wird dabei erkannt und in ein 's' umge-
wandelt.)
|
[setz] | Gibt abhängig von bSitz den Stamm des passenden
Bewegungsverbs aus: 'setz', 'stell' oder 'leg'. So
können auch allgemeine Satzkombinationen wie 'Ich
habe mich hinge[setz]t.' verwirklicht werden. (Zum
Glück sind es schwache Verben.)
|
[in] | Befindet sich der Spieler in einem InObjekt, so wird
'in' ausgegeben, ansonsten 'auf'.
Die letzten drei Befehle funktionieren natürlich nur,
wenn der Spieler auf einem anderen Objekt sitzt,
steht oder liegt. Das sollte vom Programmierer zuerst
überprüft werden. Sie werden auch häufig bei den
Standardantworten benutzt.
|
[Flg] | gibt den Zahlenwert einer Flagge aus.
|
[num Flg] | gibt den Zahlenwert einer Flagge aus, aber benutzt
(kardinale) Zahlwörter für die Zahlen bis hundert.
|
[ord Flg] | gibt den Zahlenwert einer Flagge aus, aber benutzt
ordinale Zahlwörter (erste, zweite, ...) für die Zahlen
bis hundert und schreibt sonst einen Punkt hinter die
Zahl (145.).
|
[rom Flg] | gibt den Zahlenwert einer Flagge als römische Zahl
aus. Achtung! Die Zahl kann nur im Bereich von 1 bis
3999 liegen.
|
[Buchst Flg] | gibt den Buchstaben aus, der im Alphabet an der Stelle
Flg steht. Ist Flg kleiner als 1 oder größer als
26, so wird ein Fragezeichen ausgegeben.
|
[] | gibt den Zustand aus (wenn er angegeben wurde).
|
[Zust Obj] | gibt den Zustand des Objekts als Satz aus, wenn der
Zustand einen Namen hat ('Sie ist offen.'). Ansonsten
wird nichts ausgegeben.
|
[] | gibt den Namen des Befehls aus.
|
[Befsatz] | gibt den aktuellen Befehlssatz aus, wie er vom Parser
erkannt wurde, z.B. 'den Zwerg mit dem Hämmerchen
erschlagen.' oder 'nach Süden gehen.'
|
[Zeit] | gibt die Uhrzeit im Spiel (Stunden:Minuten) aus.
|
[Strg] | gibt den String Strg aus. Dieser String kann natür-
lich wieder Textbefehle in eckigen Klammern enthalten.
Man sollte nur aufpassen, daß sich ein String nicht
selbst 'aufruft'.
|
[Text Bl Nr] | gibt den Text Nr aus dem Textblock Bl aus. Auch
hier sollte aufgepaßt werden, daß der Text sich nicht
selbst aufruft.
|
[] | setzt die Fußnote . ist dabei die in-
terne Nummer, extern werden die Fußnoten nach der
Reihenfolge ihres Auftretens numeriert. Die externe
Fußnotennummer erscheint dann in der Form [x] im
Text. Mit der Eingabe 'FUSSNOTE x' oder 'FN x' kann
der Spieler dann die Fußnote lesen. Der Fußnotentext
ist der Text mit der Nummer im Block 255. Es
sollte sichergestellt sein, daß es ihn gibt. Es
können die Fußnoten 1 bis 255 definiert werden.
|
[] | ruft die Aktion auf, die der Textausgabe dienen
soll. (Mit diesem Befehl kann man reine Textgrößen
wie z.B. Raum- und Objektbeschreibungen und -namen
variabel machen.)
|
Die Argumente der Textbefehle sind:
Obj | ist ein Objekt oder ein Platzhalter für ein Objekt. Die
Objektangabe kann auch weggelassen werden, dann wird das
Objekt aus dem letzten Textbefehl benutzt. So sind etwa
'[Der aObj] [ist aObj] dagegen und [er aObj]
streik[t aObj].'
und
'[Der aObj] [ist] dagegen und [er] streik[t].'
gleichwertig, wobei die zweite Variante besser zu lesen ist.
Vorsicht bei Sätzen, die nicht mit einem Subjekt anfangen!
Dort muß die Objektangabe beim Verb stehen:
'Langsam [wird aObj] [der] von den Flammen
verzehrt.'
|
Fall |
kann folgende Werte annehmen:
0, %Nom Nominativ (1. Fall)
1, %Akk Akkusativ (4. Fall)
2, %Dat Dativ (3. Fall)
Es empfiehlt sich, die Abkürzungen mit impliziter
Fallerkennung zu benutzen. |
Wenn der erste Buchstabe eines Textbefehls zur Textausgabe ein
Großbuchstabe ist, so wird die auszugebende Zeichenkette mit einem großen
Buchstaben am Anfang ausgegeben, ansonsten bleibt der String unverändert.
Mit dieser Ausnahme können Textbefehle - genau wie die anderen
Anweisungen in TAG - in Groß- oder Kleinbuchstaben angegeben werden.
So sind
[der aObj] und [Der aObj]
verschieden,
[DER AOBJ], [Der aObj] und [ Der aObj ]
aber nicht. (Es gilt das erste signifikante Zeichen.)
Mit dieser Ausnahme können Textbefehle - genau wie die sonstigen
Anweisungen in TAG - in Groß- oder Kleinbuchstaben angegeben werden.
Wenn die TAG-Datei erstellt ist, könnt Ihr Euch diese Datei ja einmal im
Editor ansehen. Es erscheinen lauter eigenartige Zeichen. Um zu vermeiden,
daß irgendwelche Leute die Texte lesen, bevor sie das Spiel spielen und so
Hinweise auf die Lösung der Rätsel bekommen, habe ich die Texte chiffriert.
Der Code ist simpel, aber erfüllt hoffentlich seinen Zweck.
|