Dämonen (daemons) heißen in UNIX-Betriebssystemen Dienstprogramme, die unabhängig von Aktionen des Benutzers im Hintergrund laufen. Zu den bekanntesten gehört der cron-daemon, der dafür sorgt, Programme in bestimmten Zeitabständen auszuführen.
Inform ermöglicht es, für jedes Objekt einen eigenen Dämonen zu schreiben: nämlich als eine Routine in der property daemon des Objekts. Diese Routine wird mit dem Befehl StartDaemon(Objekt); gestartet; sie läuft dann bei jedem Spielzug einmal ab, bis sie mit StopDaemon(Objekt); wieder schlafen gelegt wird. Ein solcher Dämon des Objekts Eva sorgt etwa dafür, dass Eva der Spielerfigur Adam im ganzen Bereich des Gartens (d.h. dort, wo Gras wächst wie oben 2.5 beschrieben) nicht von der Seite weicht:
if (Eva notin parent(player))
if (Gras in parent(player))
{
if (Eva in Gras)
{
move Eva to parent(player);
"Auch Eva steht von der Wiese auf.";
}
else
if (parent(Eva) ofclass Wasser)
{
move Eva to parent(player);
"Auch Eva kommt aus dem Wasser.";
}
else
{
move Eva to parent(player);
"Eva folgt dir nach.";
}
}
else
{
if (player in Gras)
{
move Eva to Gras;
"Eva legt sich zu dir ins Gras.";
}
if (parent(player) ofclass Wasser)
{
move Eva to parent(player);
print_ret "Auch Eva steigt in ", (den)
parent(player),".";
}
}
],
Besonders praktisch ist ein Dämon, der automatisch startet, wenn der Spieler in die Nähe des Objekts kommt und ebenso automatisch wieder anhält, wenn er sich entfernt hat. Dafür ist die property each_turn vorgesehen. Eine dort enthaltene Routine wird bei jedem Zug ausgeführt, falls das Objekt in Sichtweite (scope) des Spielers ist. Wir haben diesen Mechanismus schon in 2.7.2 dazu eingesetzt, bei jedem Zug die Gartentüre auf die richtige Seite zu bringen. Man kann damit aber mehr machen, z.B. eine unwiderstehlich impertinente Versuchung programmieren:
if ((Apfel in Eva) && (Eva has erkenntnis))
"^Eva hält in ihrer Hand den Apfel vom
Baum der Erkenntnis. Sie bietet ihn dir an: ~Iss auch du
von dem Apfel! Wir werden wie ER sein und Gut und Böse
unterscheiden können!~";
],
Eine weitere Unterart der Dämonen ist der Timer. Er zählt von einem Anfangswert bei jedem Zug um 1 herunter und führt die mit ihm verbundene Routine des Objekts (enthalten in der property time_out) genau einmal aus, nämlich wenn er abgelaufen ist. Ein Timer sorgt z.B. dafür, dass Eva sich unaufhaltbar zur Schlange hingezogen fühlt:
if (Eva notin Mitte)
{
move Eva to Mitte;
print "Eva wird plötzlich unruhig. Ihr Blick wirkt nach
innen gekehrt, als lausche sie einer Stimme, die nur
sie hören kann.^^
Schließlich entfernt sie sich mit großen Schritten
zur Mitte des Gartens hin.^";
}
],