________________________________________________________________________
| ||
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. | ||
|