Auch in dem schönsten Garten wird es dem Menschen alleine bald fad. Mit einem kleinen Trick wird etwas Belebung vorgetäuscht: bei durchschnittlich jedem dritten Zug wird nach dem Zufallsprinzip eine von acht Meldungen angezeigt, die verschiedene Tiere und ihre Bewegungen im Garten beschreiben. Das ist aber nur Illusion. Wir wollen uns mit echten Lebewesen - d.h. eigenständigen Objekten - beschäftigen.
Ein Lebewesen ist zunächst ein Objekt, für das das Attribut animate gesetzt ist. Die Library berücksichtigt dann automatisch, dass mit dem Lebewesen verschiedene Aktionen möglich sind, die es für ein unbelebtes Objekt nicht zulässt. Das sind alle Kommunikationsvorgänge (fragen, antworten, etwas zeigen, erzählen, befehlen) sowie ein paar andere Aktionen, die man üblicherweise mit unbelebten Gegenständen nicht macht (angreifen, aufwecken küssen, einen Gegenstand übergeben oder nach ihm werfen). Die mit diesen Handlungen verbundenen Aktionen (für eine vollständige Liste siehe 3.2.7) könnten nun normalerweise in der before-property des Objektes behandelt werden.
Damit das Ganze übersichtlicher wird, gibt es aber eigens für diejenigen Aktionen, die der Spieler nur mit einem Lebewesen vornehmen kann, eine besondere property. Sie heißt life, funktioniert ansonsten aber genauso wie before.
Sehen wir uns also ein einfaches, aber dennoch wirkungsvolles Tier an:
Menschen und andere ,,intelligente'' Lebensformen unterscheiden sich für die Inform-Autorin in der Art der Konstruktion nicht vom Tier. Die eigentliche Herausforderung ist es, Objekte für andere Personen außer der Spielerfigur27 zu erschaffen, die sich im Kontext des Spiels einigermaßen selbständig und glaubhaft verhalten. In der Regel steht dabei das Kommunikationsverhalten dieser Objekte im Vordergrund, also ihre Reaktionen auf die Aktionen ##ask, ##tell etc.
In den frühen Tagen der Adventure-Programmierung waren richtige Abenteurer noch richtige Abenteurer und richtige NPC's waren wortkarge Diebe, Trolle oder Piraten, die sich ebenfalls recht eindimensional verhielten. Daher kommt es, dass Inform im Verhältnis zu anderen Features herzlich wenig Hilfestellung zur Programmierung von Gesprächen bietet. Das hat eine Vielzahl von Zusatzbibliotheken auf den Plan getrieben, die aber hier - mit Ausnahme des schon bekannten GInfo.h - nicht verwendet werden sollen und unbehandelt bleiben.28
Wir beschränken uns auf ,,einfachste'' ask-tell-Kommunikation.29 Die verwendbare Kommunikationsbandbreite wird dabei gewissermaßen auf die eines Zwei-Wort-Parsers begrenzt, d.h. wir können dem Gesprächspartner der Spielerfigur neben dem Verb nur ein Objekt (das Gesprächsthema) mitteilen, das vom Parser her mögliche zweite Objekt ist der Gesprächspartner selbst. Damit wir das Gesprächsthema nicht selbst parsen müssen, verwenden wir für die Gesprächsthemen die gleichen Themenobjekte wie für den Umgang mit Lesestoff, vergleiche oben 2.10.2. Sie sind am vorangestellten T zu erkennen.
Auf diese Weise ist aber auch schon eine ganze Menge möglich. Machen wir halt' mal einen völlig unbescheidenen Anfang:
TApfel : "~Du sollst von dem Baum in der Mitte
des Gartens nicht essen.~";
TObst, TGarten: "~Ich habe den Garten zu deinem
Aufenthalt gemacht und die Früchte zu deiner Nahrung.~";
TSchlange :
"~Es ist besser, wenn du darüber nichts weißt.
Glaube der Schlange kein Wort!~";
tuer, TPforte: "~Hmm. - Ich hatte die Pforte des Gartens mit Bedacht
zugesperrt gelassen.~";
schwert, TSchwert:
if (sofa has general) ! Spieler hat das Schwert entdeckt
"~Waffen sind die Werkzeuge des Bösen. Lass' die
Finger davon.~";
else
"~Schwert? Welches Schwert?~";
TWasser:
"~Die Quelle speist die vier Ströme, die vier Ströme
speisen alle Wasser der Welt.~";
TAntwort:
"ER beginnt vom Leben und der Schöpfung zu sprechen
und dir wird alles klar.";
TTier:
"~Du bist es, der eingesetzt wurde, um über alle Tiere zu
herrschen.~";
TEngel:
"~Sie schweben in den höheren Sphären und loben mich
mit ihrer Musik.~";
default: "~Fragen, immer nur Fragen ...~";
};
Tell: switch (second)
{
TSchlange, TPforte:
if (schlange in mitte)
"~Das musste wohl früher oder später passieren. Ich
sperre die Pforte lieber wieder zu.~";
else
"~Du hast die Schlange also vertrieben? Ja, die
Gerechtigkeit des Frommen macht seinen Weg eben...~";
TEinsamkeit, TFrau:
ErschaffeEva();
return true;
default: "Du hast das Gefühl, dass dir jemand zuhört, der
dich versteht.";
};
askFor: <<ask self noun>>;
],
has male animate;