next up previous contents index
Next: Spielen und Erkennen: Neue Up: Schritt für Schritt ins Previous: Die Bevölkerung des Gartens,

Subsections


Aktionen abändern


Beten, Singen, Nichtstun

,,Was ist der Unterschied zwischen einem Geheimrat und einem Wirklichen Geheimrat? --
Der Geheimrat tut nichts. Der Wirkliche Geheimrat tut wirklich nichts.''
(Autor unbekannt)

Es gibt in Inform zwei Arten von Aktionen; eine davon manipuliert die im Spiel befindlichen Objekte (wie z.B. ##Take); die andere tut tatsächlich nichts.31 Gibt der Spieler etwa ein: ,,Singe'', dann wird zwar die Aktion ##Sing ausgelöst, aber es kommt nur die Standardantwort: ,,Dein Gesang ist abscheulich''. Im Einzelfall kann man dieses Verhalten mit before- und react_before-Regeln abändern. Es ist aber auch möglich, das Verhalten einer vordefinierten Aktion insgesamt abzuändern - mittels eines speziellen Objekts LibraryMessages, das zwischen den Befehlen Include parser; und Include verblib; definiert werden muss.

Object LibraryMessages

  with before [;

          wake, sleep: "Sie sagen, es sei der sechste Tag, 

                        doch für dich ist es der Erste. 

                        Und du bist noch nicht müde.";

          strong: "Das steht so nicht bei Doktor Luther!";

          pray: "~Amen.~";

          sing: Psalm();

       ];

##Strong ist die Aktion, die bei ,,starken'' Flüchen des Spielers ausgelöst wird.

In der Regel für ##Sing wird eine - selbständige - Routine aufgerufen, die zufallsgesteuert eine Zeile aus verschiedenen Psalmen ,,absingt'' Die Funktion random(n)erzeugt eine Zufallszahl zwischen 1 und n.

[ Psalm; ! Der erste Parameter einer selbständigen Routine ist ihr Name!

  print "Du erhebst deine Stimme und singst: ";

  switch (random(5)) {

      1: "~HErr, unser Herrscher, wie herrlich ist dein Name in

          allen Landen ...~ ";

      2: "~Ich danke dem HErrn von ganzem Herzen und erzähle alle

          deine Wunder ...~ ";

      3: "~Ich freue mich und bin fröhlich in dir und lobe deinen

          Namen ...~ ";

      4: "~Das Gesetz des HErrn ist vollkommen und erquickt die

          Seele ...~ ";

      5: "~Halleluja! Halleluja! Haaa - leluja!~ ";

  }

];

Es wäre genauso möglich, hier eine Routine aufzurufen, die ,,tatsächlich'' etwas tut (d.h. eine Veränderung der Modellwelt des Spiels bewirkt).

Schiebung

Hin und wieder stößt man auf Gegenstände, die zu schwer sind, als dass die Spielerfigur sie tragen könnte; die aber mit entsprechendem Kraftaufwand geschoben werden können. ,,Eden'' enthält nur ein Sofa, das auf dem Fußboden eines Raumes hin- und hergeschoben werden kann. Das ist nichts Besonderes:

Object -> Sofa 
 with     description "Es ist aus fettem kastanienbraunen Leder und 
                       sieht gemütlich aus.", 
          before [; 
                    take, lift, transfer: "Du kannst das Sofa nur  
                       schieben, nicht heben."; 
                    pull, push, turn: 
                       "Das Sofa gleitet fast ohne Widerstand über den  
                        Boden. "; 
                 
Wollten wir es ermöglichen, das Sofa von einem Raum in den anderen zu schieben, könnten wir die Aktion ##pushdir (im before-property) in etwa so definieren:

                    pushdir: if ((location == EastOfEden) && (second == in_obj))  
                       "Das Sofa passt nicht durch die Tür."; ! rtrue 
                       AllowPushDir();  
                       rtrue;
Der Aufruf der Routine AllowPushDir() teilt der Library mit, dass die Spielerfigur - wenn eine gangbare Verbindung existiert - samt dem Sofa in den benachbarten Raum verschoben werden kann, wenn der Spieler etwa ,,Schiebe das Sofa nach Norden'' eingibt. Wollen wir ansonsten gangbare Wege ausnehmen, muss das vorher abgefangen werden: Im Beispiel kann das Sofa nicht durch die Tür in den Garten geschoben werden, denn wegen des in diesem Fall vorher stattfindenden (impliziten) rtrue wird AllowPushDir() nicht mehr aufgerufen. Ohne AllowPushDir() aber kann der Spieler schuften, was er will: er bekommt das Sofa nicht aus dem Raum.



Footnotes

...31
Die ,,amtliche Bezeichnung'' ist ,,Klasse 2'' für die die Spielwelt verändernden und ,,Klasse 3'' für die untätigen Aktionen. Klasse 1 sind die ,,Metaverben'', die zwar jede Menge tun, sich dabei aber überhaupt nicht ins Spiel einmischen (z.B. Spielstand speichern, ein Transkript starten o.ä.) Die Auflistung der Aktionen in Kapitel 4 enthält Informationen darüber, welche Aktionen zur einen oder anderen Gruppe gehören.

next up previous contents index
Next: Spielen und Erkennen: Neue Up: Schritt für Schritt ins Previous: Die Bevölkerung des Gartens,
Frank Borger
2003-05-02