________________________________________________________________________
[<<] [Inhalt] [>>] II. Definitionen und Anweisungen

8. Allgemeines

8.1.   Stilparameter und Formate
8.2.   Synonyme
8.3.   Funktionstasten
8.4.   Punkte

8.1. Stilparameter und Formate

Im Block Umgebung werden allgeimeine Angaben über das Adventure und über die Text- und Absatzformate gemacht. Folgende Anweisungen werden in diesem Block verstanden:

Name 'Name'
Name Name für das Adventure. Wird nur intern für Systemmeldungen benutzt. Default ist job.

Kennung 'Kenn'
Kenn Kurze Kennung, die an den Anfang von abgespeicherten Spiel- ständen geschrieben wird, um zu überprüfen, ob es sich um einen Spielstand dieses Spiels handelt oder nicht. Ob die Daten im Spielstand manipuliert sind, wird hinterher extra überprüft. Default ist .

Text VG HG
Definiert die Textfarbe, Default ist hellgrau auf schwarz.

Fett VG HG
Definiert die Farbe für fetten Text, Default ist weiß auf schwarz.

Zeile VG HG
Definiert die Farbe für die Statuszeile. Diese Farbe wird auch für ausgewählte Elemente im Dateifenster benutzt. Default ist Weiß auf Blau.

Rahmen VG HG
Definiert die Farbe für den Rahmen der Datei-Dialogbox. Default ist schwarz auf hellgrau.

VG Vordergrund, d.h. Textfarbe. Mögliche Angaben sind:
        0   %Schwarz            8   %Dunkelgrau
        1   %Blau               9   %Hellblau
        2   %Grün              10   %Hellgrün
        3   %Türkis            11   %Aquamarin
        4   %Rot               12   %Hellrot
        5   %Violett           13   %Pink
        6   %Braun             14   %Gelb
        7   %Hellgrau          15   %Weiß
                    
HG Hintergrund für den Text. Hier können nur die 'dunklen' Farben von 0 bis 7 angegeben werden.

Obwohl theoretisch 128 Farbkombinationen möglich sind, denkt bitte daran, daß Spieler u.U. stundenlang mit Eurer Farbwahl konfrontiert sind. Blau- und Grautöne sind also Pink und Türkis vorzuziehen!

Einige Stilparameter können während des Spiels geändert werden. Sie sind auf folgenden Systemflaggen abgelegt, die alle mit einem Doppelkreuz beginnen:

#Absatz

Format eines Absatzes:

0 keine Einrückung, keine Leerzeile zwischen Absätzen
1 Leerzeile zwischen Absätzen
2 Einrückung (eine Tabulatorweite)
3 Einrückung und Leerzeile.
Default-Absatzformat ist eine Leerzeile zwischen Absätzen ohne Einrückung (1).

#Eingabe Format der Eingabezeile:
0 Eingabe in Großbuchstaben, d.h. alle Buchstaben werden als Großbuchstaben ausgegeben.
1 fettgedruckte Eingabe in Großbuchstaben
2 Eingabe in Klein- und Großbuchstaben, d.h. die Zeichen erscheinen wie eingegeben.
3 fettgedruckte Eingabe mit gemischten Buchstaben.
Default ist hier Fettdruck in Großbuchstaben (1). Dieser Wert beeinfußt nur das Ausgabeformat. Unabhängig davon wird die gesamte Eingabe als Kleinbuchstaben betrachtet.

#Raumname   Format für lange Raumbeschreibungen:
0 Kurze Raumbeschreibung vor der ausführlichen Beschreibung mit anschließendem unformatiertem Zeilenumbruch
1 Kurze Raumbeschreibung vorher in Fettdruck
2 Kurze Raumbeschreibung vorher mit formatiertem Zeilenumbruch (Absatz)
3 Kurzbeschreibung fett und als Absatz
4 keine kurze Raumbeschreibung vor der langen Default ist hier keine Kurzbeschreibung (4).

#Leiste Flagge für Leistendarstellung:
0 keine Statusleiste am obenren Bidschirmrand
1 Darstellen der Statusleiste (Default)

#Meldung Meldungen bei Punktstandänderung:
0 keine Meldung
1 Punktestandsänderung wird angezeigt (Default)

#Links Anzeige im linken Teil der Statuszeile
#Mitte Anzeige in der Mitte der Statuszeile
#Rechts Anzeige im rechten Teil der Statuszeile
Für die Statuszeile können folgende Angaben gemacht werden:
0 keine Anzeige
1 Raumname des momentanen Aufenthaltsraums, inkl. Angabe von möglichen Sitzen, Liegen und Standflächen. ("Hotelzimmer, im Bett")
2 Anzahl der Züge
3 Anzahl der Punkte
4 Anzahl der Punkte und Züge (z.B.: "4/55")
5 Uhrzeit im Spiel (z.B.: "12:45")
6 Mögliche Ausgänge im Raum als Liste der Richtungsabkürzungen (z.B.: "nw, s, rein")
7 Anzeige des Strings Statuszeile. Der String muß natürlich während des Spiels definiert werden.

#Besch Flagge für Raumbeschreibungen
0 Knappe Raumbeschreibungen (Default)
1 Ausführliche Raumbeschreibungen (Bei jedem Betreten eines Raums wird die ausführliche Raumbeschreibung ausgegeben.)
2 Superknappe Beschreibungen (Es wird immer nur der kurze Raumname ausgegeben.)

#Tab Tabulatorweite in Leerzeichen, Default ist acht.

#Liste Format für Objekt-Listen (bei ObjListe interessant)
+1 bestimmte Artikel
+2 Verbindungswort 'oder'
+4    Aufzählung in Kommas statt Klammern (Das + bedeutet, daß die Stile beliebig summiert werden können, z.B. 'oder' und in Klammern = 6)

#Inv Flagge für das Format der Inventarliste:
0 Hochformat (Liste mit Gedankenstrichen)
1 Querformat (als vollständiger Satz)

#Person Flagge, die die grammatikalische Person des Spielers angibt. Momentan kann sie folgende Werte annehmen:
0 zweite Person Singular (%du)
1 erste Person (%ich)
2 Höflichkeitsform in der dritten Person Plural (%Sie, wird immer groß geschrieben.)
Diese Flagge wird für die Ausgabe der reflexiven Verben und der Objekte mit Possesivpromomen verwendet.

Die Werte entsprechen dabei den oben angegebenen. Der Benutzer muß dafür sorgen, daß keine unsinnigen Werte eingegeben werden.

8.2. Synonyme

Zu guter letzt kann man dem Parser noch Synonyme mitteilen. Dies geht mit diesem Befehl, der überall außerhalb eines Blocks stehen kann:

Synonym 'Ausdr' 'Syn'
Ausdr ist ein Ausdruck aus einem oder zwei Wörtern, der ersetzt werden soll.
Syn ist ein Ausdruck aus einem oder zwei Wörtern, der für Syn im Befehl eingesetzt wird.

Die Ersetzung erfolgt dabei direkt nach der Eingabe des Befehls, d.h. der Parser arbeitet schon mit den ersetzten Ausdrücken. Das kann natürlich zu Überraschungen führen, wenn der Parser einen Fehler findet, und dann andere Worte anmeckert, als der Spieler eingegeben hat. Aber im allgemeinen wird so die Eingabevielfalt erhöht.

Es gibt vier Arten von Synonymen:

  • Wort gegen Wort
    Das ist z.B. bei Richtungen denkbar. Zu jeder Richtung können eine lange Beschreibung und eine Abkürzung angebenen werden, mehr nicht. Das reicht auch in den meisten Fällen aus. Manchmal ist es aber schön, andere Worte benutzen zu können:

            Richtung H  'unten' 'r'
            Synonym     'runter' 'r'
            Synonym     'abwärts' 'r'
            
  • Wort gegen zwei Wörter
    Dies ist häufig notwendig bei Wörtern, die aus einer Präposition und 'das' oder 'dem' zusammengezogen wurden. Da der Parser diese Wörter wie 'ins', 'am' usw. nicht versteht, sollten sie als Synonyme ange- geben werden:

            Synonym     'ums' 'um das'
            

    Die Synonyme für die schon in TAG eingebauten Präpositionen sind bereits angegeben.

  • Zwei Wörter gegen ein Wort
    Denkbar ist hier der Fall, daß der Befehl 'hallo' geschrieben werden soll. Als Synonyme sollen 'Guten Tag' oder 'Guten Morgen' zugelassen werden. Verben können immer nur aus einem Wort bestehen. Wenn man hier nicht die Präpositionen 'tag' und 'morgen' einbauen will, was eine ziemliche Vergewaltigung der Sprache wäre, aber formal korrekt ist, kann man angeben:

                    Synonym     'guten morgen' 'hallo'
                    Synonym     'guten tag' 'hallo'
            
  • Ein Wort gegen nichts
    Ein bestimmtes Wort soll vom Parser einfach ignoriert werden. Dies wird im Moment nur mit 'und' und 'dann' gemacht. Man könnte hier vielleicht Adverbien angeben, damit man die Tür 'leise' aufmachen kann und 'vorsichtig' nach Norden gehen kann. (Das wäre sogar ziemlich ungefährlich, da die Adjektive der Objekte meist gebeugt sind und sich so vom Adverb unterscheiden.) Man kann also angeben:

                    Synonym     'vorsichtig' ''
                    Synonym     'bitte'
           

    (Die leeren Anführungszeichen können weggelassen werden.)

Die Synonyme sind nur eine Notlösung, um manche Satzkonstrukte zu ermöglichen. Wenn es geht, sollten die Vokabellisten der Befehle, Objekte usw. direkt benutzt werden.

8.3. Funktionstasten

Die Funktionstasten F1 bis F10 können mit häufig gebrauchten Befehlen belegt werden. Der Befehl dazu, der außerhalb eines Blocks stehen muß, heißt:

Funkt Nr 'Bef'
Nr Nummer der Funktionstaste von 1 bis 10
Bef

Befehlstext der beim Drücken der Funktionstaste ausgegeben werden soll. Der Text sollte vom Spiel als Eingabe verstanden werden, und möglichst allgemeingültig sein. Ob der Parser den Befehl erkennt, wird hier nicht überprüft.

Beim Drücken der Funktionstaste wird der Text nach dem Prompt ausgegeben und direkt analysiert. Der Spieler hat also keine Möglichkeit, Wörter vor oder nach dem Text einzugeben. Ab- kürzungen für 'nimm', 'untersuche' usw. machen hier also keinen Sinn.

Folgende Belegungen für die Funktionstasten sind bereits voreingestellt:

         F1     Ende
         F2     Neu
         F3     Laden
         F4     Speichern

         F5     Knapp
         F6     Ausführlich
         F7     Meldung
         F8     Punkte

         F9     Zurück
         F10    Manuskript

Diese Meta-Befehle sind sicher für die meisten Spiele nützlich. Wird als Text ein leerer String '' angegeben, so hat die Taste keine Belegung. Wer will, kann also die voreingestellten Belegungen löschen.

8.4. Punkte

Für einige Handlungen im Spiel soll es Punkte geben. In TAG können für 255 Aktionen Punkte verteilt werden. Alle Aktionen, für die es Punkte geben soll, werden am besten aufgeschrieben und durchnumeriert, etwa:

1. Schlüssel unter der Fußmatte finden
2. Dem Mädchen die Sprechpuppe wiedergeben
3. Holzkiste mit Brecheisen aufstemmen
   ...
(2 Punkte)
(5)
(4)
   ...

Wenn dann im Spiel die Punkte vergeben werden sollen, verwendet man die Anweisung

Punkte PktNr PktZahl

PktNr ist die laufende Nummer des Punktbeitrags, PktZahl die vergebene Punktzahl. Je nachdem, ob die Meldung ein- oder ausgeschaltet wurde, erscheint sie dann auf dem Bildschirm. Um die Gesamtpunktzahl zu erhalten, kann man die vordefiniere Variable Punkte verwenden.

Um also den Punktestand beim Finden des Schlüssels zu ändern, sind die An- weisungen:

        Ausf
          [...]
          Text 'Unter der Fußmatte finde ich einen kleinen
               Schlüssel. Bingo!'
          Punkte 1 2
          [...]
        Ende

Achtung! Es können keine negativen Punktzahlen angegeben werden. Wir denken positiv. Es können aber wieder Punkte abgenommen werden, wie z.B. bei der klassischen Schatzsuche. Der Spieler findet nach langen Strapazen eine Perlenkette und bekommt zwei Punkte:

        Punkte 10 2

Dann schleppt er sie ins Trophäenzimmer und legt sie in die Vitrine und bekommt dafür weitere 8 Punkte. Man beachte, daß sich Punkte, die in einem Handlungsstrang befinden, summieren können. Dies funktioniert nur, weil Ihr die Kette erst nehmen müßt, bevor Ihr sie in die Vitrine legen könnt. Ihr habt also jetzt zusammen mit dem ersten Auffinden zehn Punkte erhalten:

        Punkte 10 10

Wird nun die Kette wieder aus der Vitrine genommen, so werden wieder zwei Punkte vergeben:

        Punkte 10 2

Da der Punktestand Nr. 10 aber vorher zehn war, gehen eigentlich acht Punkte verloren. Die Meldungen zur Punktestandsänderung geben immer die Veränderung zum vorherigen Stand an, in diesem Fall also 'Du hast soeben 8 Punkte verloren.' Anstatt die beiden Handlungen in eine Punktrechnung zu packen, kann man für das Ablegen auch eine zweite Aktion definieren, etwa:

        Punkte 10 2   | fürs Finden
          [...]
        Punkte 11 8   | fürs in die Vitrine legen

Viele Punktzahlen sind nicht mit bestimmten Aktionen, sondern eng mit Objekten oder Räumen verbunden. Für diese Fälle gibt es die Befehle

ObjPunkte Obj PktZahl

und

RaumPunkte Raum PktZahl

So kann man die Punktevergabe bequem in Klassendefinitionen vornehmen, und spart sich so eine umständliche Listenführung. So könnte die Perlenkette oben von der Objektklasse Schatz sein:

        ObjKlasse Schatz
        ...
        Var Nimm_Wert 2
        Var Pack_Wert 10
        NachAusf
          (nehmen)      ObjPunkte selbst Nimm_Wert
          (hineinlegen) Wenn (aObj2 = Vitrine) dann
                          Text 'Du legst [den selbst] vorsichtig in
                               die Glasvitrine.'
                          ObjPunkte selbst Pack_Wert
                        sonst
                          ObjPunkte selbst 0
                        Ende
          (hinlegen)    ObjPunkte selbst 0
        EndeAusf

Ein weiteres Beispiel sind markante Räume, die beim Besuch Punkte geben:

        RaumKlasse PunktRaum
        NachAusf
          (gehen)       RaumPunkte daselbst 5
        EndeAusf

Die Werte der einzelnen Punktzahlen können folgendermaßen als Variable ange- sprochen werden:

Pkt.Zahl, Pkt.Flg ObjPkt.Obj, ObjPkt.ObjVar RaumPkt.Raum, RaumPkt.RaumVar

Einzelne Aktionen können immer nur bis zu 255 Punkte geben. Die Summe der Einzelpunkte kann jedoch größer sein. Außerdem können immer nur positive Punktzahlen vergeben werden. Dennoch ist es mit einem Trick möglich, negative Punktzahlen zu erreichen:

Die Variable Pktbasis enthält eine Integer-Zahl, die immer zum Punktestand addiert wird. Wird Pktbasis am Anfang auf sagen wir mal 60 gesetzt, so ist der Anfangspunktestand 60, obwohl noch kein Rätsel gelöst wurde. Dieser Wert kann auch negativ sein, wir können den Spieler sich auch aus den Miesen hocharbeiten lassen.

Nehmen wir einmal an, der Spieler würde mit Minuspunkten bestraft, wenn er einen Spiegel zerbricht. Er soll aber mit Null Punkten starten. Dann lautet die Anfangsanweisung:

        Aktion Anfang
        Ausf
          [...]
          Sei Pktbasis -49
          Sei Pkt.1 49
        EndeAusf

So bekommt der Spieler (lautlos) 49 Punkte, aber er merkt es nicht, weil er über die Variable Pktbasis 49 Punkte abgezogen bekommt, und so wieder bei Null steht. Zerbricht er nun den Spiegel, so passiert das folgende:

        [...]
        ObjZust Spiegel Kaputt
        Punkte 1 0

Die Einzelpunktzahl 1 wird also auf Null zurückgesetzt, eine Meldung besagt, daß der Pechvogel 7x7 Strafpunkte bekommt und die Punktzahl fällt um 49 Punkte. Das Ändern der Variable Punktbasis geschieht immer lautlos, es sei denn, es wird extra programmiert.

PktBasis kann während des Spielverlaufs verändert werden. Zum Beispiel könnte sie alle hundert Züge um einen Punkt herabgesetzt werden, damit der Spieler zügig vorangeht und nicht lange Zeit verliert.

Die Gesamtpunktzahl ergibt sich also immer aus der Summe aller mit Punkte definierten Einzelpunktzahlen plus der Summe der Objekt- und Raumpunktzahlen plus der globalen Variable PktBasis. Wem das System der ereignis-, raum- und objektbezogenen Punktvergabe nicht gefällt, kann also nur PktBasis für den Punktestand verwenden.

Martin Oehm, 04.02.2000 Vorheriges KapitelInhaltsverzeichnisNächstes Kapitel