[ t e x t f i r e . d e - Startseite ]

Sitemap
Druckversion


Werkstatt

Objekte implizieren

Spieler denken sich oft mehr, als sie eingeben und mögen Parser, die trotzdem wissen, was gemeint ist. Damit der Parser aber die Gedanken des Spielers erraten kann, muss ihm der Autor beim Implizieren von Objekten ein wenig helfen.

Für die am meisten benutzten Befehle gibt es Abkürzungen und der Parser versteht den Telegrammstil, der ohne Artikel auskommt. Dies ist der allgemein akzeptierte Standard und wird auch - zumindest von mir - ausgiebig genutzt.

Viel ärgerlicher sind jedoch Situationen wie diese:

> I
Du hast ein Notitzbuch, eine Kerze (die ein blasses Licht abgibt) und einen kleinen Stahlschlüssel.

> SCHLIESSE SAFE AUF
Womit möchtest Du den Safe aufschließen?

Wieso fragt der Parser nach, wenn es doch offensichtlich nur eine sinnvolle Möglichkeit gibt, den Safe aufzuschliessen? Der Parser behandelt alle Objekte gleich, es sei denn, ihm wird explizit etwas anderes gesagt. Es ist also am Autor eines Spiels, in solchen Situationen die Objekte unterschiedlich zu bewerten und die Gedanken des Spielers zu lesen:

> SCHLIESSE SAFE AUF
(mit dem kleinen Stahlschlüssel)

Der Safe hat kein Schlüsselloch. Als Ersatz bietet er ein Stellrädchen.

Inform benutzt dazu die Routine ChooseObjects(obj, code). Diese Routine hat zwei Aufgaben. Wenn code null oder eins ist, kann hier eine Liste von Objekten, wie sie etwa bei NIMM ALLES generiert wird, nachträglich verändert werden. In unserem Fall ist aber code gleich 2: Aus einer Liste von möglichen Objekten soll eins ausgewählt werden. Dazu bekommen die Objekte Wertungen. Hat ein einziges Objekt die höchste Wertung, wird es ausgewählt. Wird kein Objekt eindeutig bestimmt, so fragt der Parser nach.

Für das Beispiel oben sieht diese Routine so aus:

[ ChooseObjects obj code;
    if (code < 2) {
        if (obj has scenery) return 2;
        rfalse;
    }
    if (action_to_be == ##Unlock && obj has key_item)
        return 3;
    if (action_to_be == ##Lock && obj has key_item)
        return 3;
    if (obj hasnt scenery) return 2;
    return 1;
];

Wenn die Aktion Auf- oder Abschließen ist, werden hier Schlüssel, die das neu zu generierende Attribut key_item besitzen, bevorzugt. Außerdem werden Dekorationsobjekte (scenery) gegenüber anderen Objekten benachteiligt und aus Listen mit mehreren Objekten ausgeschlossen.

(Aufgabe 105 im Inform Designer's Manual, Fourth Edition, stellt einen anderen, womöglich besseren Lösungsansatz für das Schlüsselproblem vor.)

Auch mit TAG kann man bestimmte Objekte bevorzugen. Dazu gibt man in der Syntax-Zeile ein Objektattribut an. Wenn die Eingabe des Spielers unklar ist und es ein Objekt gibt, das dieses Attribut besitzt, wird eine Entscheidung gefällt:

Befehl  aufschließen
Name    'aufschließen'
Verb    'schließe auf' 'sperre auf' 'entriegele'
Syntax  dasObj mit demObj (beiMir Schlüssel)
Ausf
    ...
EndeAusf

Dem Parser beim Implizieren von Objekten auf die Sprünge zu helfen, ist also nicht so schwer und erleichtert dem Spieler die Eingabe.

In einem Spiel mit vielen Schlüsseln könnte man sogar überlegen, dass das Spiel sich merkt, welche Schlüssel bereits mit Erfolg benutzt wurden. Eine gute Idee ist in jedem Fall ein Schlüsselring, auf den der Spieler automatisch alle Schlüssel, die er findet, aufzieht. Der Protagonist probiert dann beim Aufschließen einfach alle Schlüssel durch, wenn der Spieler keinen ausdrücklich angegeben hat.

11.11.2001, Martin Oehm

 
[nach oben]