________________________________________________________________________
| ||
12. Andere Personen im Spiel
| ||
12.1. Reden mit anderenEine Sache, die sicherlich etwas Übung verlangt, die aber wesentlich zur Spielatmosphäre beiträgt, ist das Reden mit anderen Personen (oder auch mit anderen Objekten) im Spiel. Dazu gibt es in TAG die Möglichkeit, Sätze zu anderen Personen zu sagen:
> RITTER, TÖTE DEN DRACHEN
> RITTER, "TÖTE DEN DRACHEN"
> SAGE ZU DEM RITTER "TÖTE DEN DRACHEN"
Die Reaktion eines Objekts (das nicht notwendigerweise eine Person sein muß)
auf einen ihm gegebenen Befehl wird in der Aktion BefAusf des Objekts
angegeben. Wenn in diesem Ausführungsblock nichts angegeben wird, so wird einfach
ein platter Standardsatz gedruckt: "Das Am einfachsten sind wohl einsilbige Zeitgenossen zu programmieren. Zum Beispiel ein Troll an einer Brücke, der seinen Tribut verlangt, aber sonst mit dem Spieler nicht viel zu tun haben will:
Obj Troll
Name 'Troll' m
vor 'brücken'
subst 'troll' m 'wächter' m
Attr Person
Besch 'Der Troll ist ein ziemlich häßlicher Kerl, der vor
Muskeln strotzt. Er beobachtet jeden deiner Schritte.'
Erst 'Ein stämmiger Troll steht hier vor der Brücke und
versperrt den Weg nach Norden.'
VorReakt
(gehen) Bed /(aRitg = N) oder (Troll_bezahlt)
'"Halt, Freundchen, nicht so schnell!"
brummt der Troll. "Wenn du über meine
Brücke willst mußt du mir einen Schatz
geben."'
(geben) Bed (aObj2 Schatz)
'"Das will ich nicht!", schnarrt der
Troll."'
ObjNach aObj2 Nirwana
Setze Troll_bezahlt
Stop '"Danke, Freund!", sagt der Troll.
Seine Augen glänzen, als er [den aObj2]
schnell einsteckt und einen Schritt zur
Seite macht.'
EndeAusf
BefAusf
(nicht_verst) Text 'Der Troll grunzt abfällig und zieht
seine Augenbrauen zusammen.'
(sonst) Text 'Der Troll grunzt etwas
Unverständliches.'
Absatz
Wenn /(Troll_bezahlt) dann
Text '"Zahl deinen Zoll oder laß mich in
Ruhe."
sonst
Text '"Du darfst meine Brücke benutzen,
aber laß mich bitte in Frieden."'
Ende
EndeAusf
NachReakt
(gehen) Wenn (Troll_bezahlt) dann
Text '"Hallo, Freund!" Der Troll versucht,
seinem Gesicht mit einer Fratze ein
gefälliges Aussehen zu verleihen.'
sonst
Text 'Der Troll grunzt: "Wenn du über die
Brücke willst, mußt du mir einen
Schatz geben."'
Ende
EndeAusf
In der Anweisung bedeutet (nicht_verst), daß es einen Fehler in der Anweisung an den Troll gab. Diese Fehler werden nicht vom Parser angezeigt, sondern müssen in der BefAusf ausgegeben werden, wenn es gewünscht ist. Obwohl der Troll nicht gerade gesprächig ist, so ist der Code für sein Verhalten doch schon ziemlich lang. Noch einsilbigere Zeitgenossen kämen mit folgenden Zeilen zurecht:
Obj Katze
Name 'schwarz^ Katze' f
Adj 'schwarz'
subst 'katze' f 'mieze' f 'kätzchen' n
Besch 'Ziemlich aggressiv, die Kleine.'
BefAusf
(global) Text 'Die Katze faucht dich an.'
EndeAusf
VorAusf
(untersuchen)
(sonst) Stop 'Die Katze faucht dich an.'
EndeAusf
Die leere Zeile nach (untersuchen) bewirkt, daß dieser Befehl als einziger funktioniert wie gehabt, da alle anderen Befehle durch die (sonst)-Klausel zu einem vorzeitigen Ende kommen: Die Katze faucht den Spieler an. | ||
12.2. Maschinen mit SpracherkennungDas ist Stoff für Science Fiction: Der Bordcomputer versteht Anweisungen der Mannschaft: Zum Beispiel kann man den Kurs des Raumgleiters ändern, wenn man dem Computer sagt "Kurs auf XXX", wobei XXX eine der Mondbasen ist, die der Computer kennt:
Obj Computer
Name 'Bordcomputer'
vor 'bord' 'kontroll' 'steuer'
subst 'computer' m 'rechner' m 'panel' n 'lautsprecher' m
subst 'mikrofon' n 'mikro' n 'gerät' n 'hans' m
Besch 'Dieses Wunderwerk der Technik steuert das Raumschiff.
Es ist eines der ersten vollkommen sprachgesteuerten
Geräte, die 2070 von der Sirius, Inc. ausgeliefert
wurden und ist immer noch so zuverlässig wie am ersten
Tag.
Ein Mikrofon, ein Lautsprecher und ein kleiner
Bildschirm sind die Hauptmerkkmale des schwarzen
Kontrollpanels. Auf einer kleinen Plakette rechts
unten steht "HANS" [1].'
BefAusf
(nicht_verst) Text '"Nicht verstanden. Bitte wiederholen."'
(kurs_auf) Bed (aObj Raumstation)
'"Das ist keine der Raumstationen, die
ich kenne."'
Bed /(Ziel = aObj)
'Kurs bereits auf [Ziel] gesetzt.'
Sei Ziel aObj
Text '"O.K., neuer Kurs auf [Ziel]".
Der Gleiter macht eine kleine,
unscheinbare Korrekturbewegung, als
er sein neues Ziel ansteuert.'
(sonst) Text '"Das steht außerhalb meiner
Möglichkeiten."'
EndeAusf
ObjVar Ziel Magellan
ObjAttr Raumstation
Bef kurs_auf
Name 'Kurs nehmen'
Verb 'kurs'
Syntax auf dasObj (Allg)
Ausf
Text 'Sag es nicht mir, sag%s deinem Computer.'
EndeAusf
Deko Magellan
Name 'Magellan' m 1
ObjAttr Raumstation
subst 'magellan'
Deko Thyle_ii
name 'Thyle II' m 1
ObjAttr Raumstation
subst 'thyle' m 'ii' m
Deko Schiaparelli
name 'Schiaparelli' m 1
ObjAttr Raumstation
subst 'schiaparelli' m
Fußnoten
1 'HANS - Heuristisch-Algorithmisches
Navigations-System.'
Die Dekorationen dienen nur als Referenz für den Bordcomputer. Sie befinden sich in keinem Raum, müssen aber dennoch definiert werden, damit das Programm die Vokabeln kennt. Der Befehl kurs_auf muss natürlich auch definiert werden, obwohl er nur etwas Sinnvolles macht, wenn ihn der Computer ausführt. Wer Lust hat, kann dem Computer ja noch zusätzliche Kompetenzen verabreichen: halbe Kraft, volle Kraft, Schilde aktivieren usw. | ||
12.3. Ein schleichender DiebManche Zeitgenossen reden nicht, sondern begnügen sich damit, umherzuschleichen und auf ihre Chance zu warten, dem Spieler Unheil zuzufügen. Der Dieb in Zork und der Pirat und die Zwerge aus Adventure sind Beispiele für ein solches Verhalten. Im Gegensatz zum Nachtwächter aus Kapitel 6 sollen sich diese Geschöpfe aber mehr oder wenig zufällig bewegen. Ein einfacher Algorithmus dazu sähe so aus:
Obj Dieb
Name 'Herr~ in Schwarz' m
Adj 'schwarz' 'dunkel' 'verdächtig'
Subst 'herr' m 'herrn' m 'dieb' m 'mann' m
Attr Person
Erst 'Ein Herr in Schwarz ist hier und schaut sich
verstohlen um.'
Besch 'Dieser Herr sieht in der Tat sehr verdächtig aus.'
RaumAttr Nicht_für_Dieb
Aktion Dieb_Schleicht *
Ausf
Wenn (Proz 30) dann
| Prüfen, ob es gültige Richtungen gibt
Lösche Aux
Schleife xRitg
SeiRaum xRaum aRaum xRitg
Wenn /(xRaum = 0) und /(xRaum Nicht_für_Dieb) dann
Inkr Aux
Ende
Ende
| Wenn ja, dann bewege den Dieb in eine davon
Wenn (Aux) dann
Wiederhole
Zufall xRitg MinRitg MaxRitg
SeiRaum xRaum aRaum xRitg
bis /(xRaum = 0) und /(xRaum Nicht_für_Dieb)
Wenn (Dieb hier) dann
Text '[#]Der Herr verläßt den Raum.'
Ende
ObjNach Dieb xRaum
Wenn (Dieb hier) dann
Text '[#]Ein Herr in Schwarz hat soeben den Raum
betreten.'
Ende
Ende
Ende
EndeAusf
Dieser simple Algorithmus berücksichtigt allerdings keine Wege und keine mit Türen versperrten Ausgänge. (Vielleicht kann man ja annehmen, daß der Dieb sich gut genug auskennt, und weiß, wie man die Türen öffnet.) Immerhin kann man mit dem Raum-Attribut Nicht_für_Dieb bestimmte Räume für ihn sperren. | ||
|