Auch die Spielerfigur selbst ist ein Objekt. Man muss nicht unbedingt ein Objekt für sie definieren, sondern bekommt eine vorgefertigte Figur gestellt. Wer aber will, dass sich die Spielerfigur anders verhält oder dass sie anders aussieht als der Standard, der muss sich selber eine schnitzen:
with name 'adam' 'Mensch' 'spieler' ,
short_name "Adam",
dekl 0,
rippe true,
number,
description [;
if (self.rippe)
{
print "Du bist ein Mensch. " ;
style bold; print "Der "; style roman;
"Mensch. Du siehst so ähnlich aus wie ER, sagt man.";
}
else
if (self hasnt Erkenntnis)
"Eine Rippe fehlt. Dafür hast du eine frische
Narbe.";
else
if (Feigenblatt hasnt worn)
"Du bist nackt!";
else
"Das Feigenblatt verdeckt deine Blöße nur
dürftig.";
],
add_to_scope koerper,
has light proper male animate;
Für solche Entscheidungen sind boolesche Werte (also true und false) ganz praktisch: Die property rippe wird einfach neu eingeführt und mit true vorbelegt, solange Adam die Rippe noch hat. Bei Durchführung der bekannten Operation muss man dann adam.rippe=false; setzen.
Bei der Erkenntnis - nach der wir im Spiel ziemlich oft fragen und die nicht nur Adam, sondern auch Eva haben kann - gehen wir anders vor und verwenden ein Attribut. Das muss allerdings vorher definiert sein:
Das Schlüsselwort has kommt in zwei verschiedenen Bedeutungen vor: zum Einen leitet es in der Objektdefinition die Liste der Attribute ein, die das Objekt hat; zum Anderen kann es in logischen Termen dazu benutzt werden, das Vorhandensein eines Attributs abzufragen: if ((adam has Erkenntnis) && (eva hasnt Erkenntnis)) ...
Die property number wird von der Library benötigt, wenn das Objekt als Spielfigur eingesetzt werden soll. Ebenso muss die Library wissen, dass Adam ein Lebewesen ist, dazu dient das Attribut animate. Das Attribut proper bewirkt, dass ,,Adam'' als Eigenname behandelt wird, so dass die Ausgaberoutinen nicht automatisch einen Artikel davorsetzen.
Das Nachmodellieren einzelner Körperteile ist normalerweise nicht notwendig, es sei denn, die Körperteile hätten eine besondere Funktion im Spiel. An Adam ist in dieser Beziehung nur die Narbe interessant:
with short_name "Körper",
adj "dein",
dekl 2,
name 'rippe' 'narbe' 'koerper' 'bauch' ,
before [;
examine: return false;
default: "Dein Körper gehört zu dir.";
],
description [;
if (adam.rippe)
"Du siehst nichts Ungewöhnliches.";
else
"Eine frische Narbe ist dort, wo vorher eine Rippe
gewesen ist. Sie scheint gut zu heilen. -
Sonst siehst du nichts Ungewöhnliches.";
],
has proper scenery male;
Die default:-Regel in der before-property bewirkt, dass alle Aktionen, die der Spieler mit dem Körper versuchen mag (von Anzünden bis Wegwerfen) nur lakonisch mit ,,Dein Körper gehört zu dir'' abgewiesen werden (zur Erinnerung: Der String steht in Kurzschreibweise für ein print_ret und gibt true zurück: Ende der Aktion.)
Alle Aktionen? Nein, eine einzelne kleine Aktion, nämlich ##Examine, muss offen bleiben, sonst bekommt der Spieler ja die Beschreibung der Narbe nicht zu Gesicht. Also fügen wir eine Regel für ##Examine ein, die im wahrsten Sinn des Wortes nichts macht: Sie gibt false zurück, die Aktion wird unbeeinflusst weiter ausgeführt und die Beschreibung wird ausgegeben. Stünde statt des return false ein return true, würde die Regel auf andere Weise nichts machen: Ende der Aktion und nichts würde ausgegeben, auch die Beschreibung nicht.
Für Kleidungsstücke gilt dasselbe wie für Körperteile. Beschränkung auf das Notwendigste sei die Maxime. Das fällt im Garten Eden auch gar nicht schwer:
with short_name "Feigenblatt",
dekl 4,
initial "Dir fällt auf, dass ein Feigenblatt gut geeignet
wäre, um deine Blöße zu bedecken.",
description "Ein Feigenblatt. Grün. Vielleicht ein bisschen
zu klein.",
after [;
take: give self worn;
achieved(5);
"Du nimmst das Feigenblatt und machst dir einen
Schurz daraus.";
],
before [;
disrobe, drop, give: "Aber das Feigenblatt ist so kleidsam!";
],
name 'blatt' 'feigenblatt',
has neuter clothing;
Das Feigenblatt hat die Besonderheit, dass es sich ,,von selber'' anzieht, wenn der Spieler es nimmt. Deshalb muss hier worn explizit gesetzt werden. (Außerdem gibt es Punkte für die sechste gelöste Aufgabe.) Einmal getragen, lässt es sich - nach dem Vorbild eines anderen klassischen Kleidungsstücks26 - wegen der Regel für ##Disrobe in der before-property allerdings nicht mehr ausziehen.