In vielen Textadventures existieren lesbare Gegenstände mit hilfreichen Hinweisen, Hintergrundwissen oder in die Irre führenden Informationen. Leider unterscheidet Inform nicht zwischen »lesen« und »untersuchen«. Dieses Manko läßt sich aber beheben.
!nach Parser.h: Attribute readable; !Objekt lesbar !vor GermanG folgende Aktionsdefinitionen: [ ReadSub; <<Examine noun>>; ]; [ NoReadSub; if (noun == player) "Deine Lebenslinie ist schwer zu erkennen."; print (GDer) noun; if (noun has pluralname) print " können "; else print " kann "; "nicht gelesen werden!"; ]; !nach GermanG folgendes Replacement für 'lies': Extend 'lies' replace * readable -> Read * 'in' readable -> Read * noun -> NoRead * multi 'auf' -> Take * 'in' noun -> NoRead * 'ueber' topic 'in' noun -> Consult * topic 'nach' 'in' noun -> Consult * topic 'in' noun -> Consult * 'in' noun 'ueber'/'von' topic -> Consult * topic 'nach' -> Consult * 'ueber' topic -> Consult;
Der Code sollte relativ einfach verständlich sein. Man definiert das Wort 'lies' um und fängt eine Aktion Read ab, welche jedoch nur bei Objekten mit dem Attribut readable in Aktion tritt, ansonsten wird auf NoRead verwiesen, das einige Standardsprüche auf Lager hat. Falls das lesbare Objekt die Read-Aktion nicht abfängt, dann wird standardmäßig die Aktion zu einer Examine-Aktion umgeleitet.
Ein Beipielobjekt:
Object Aufzeichnung with name ... before [; Read: "Du liest die Aufzeichnung aufmerksam durch. Es handelt sich ausnahmslos um alte Kochrezepte."; Examine: "Einige Worte stehen auf dem Papier."; ], has readable;
Es gibt sicher noch elegantere Lösungen. So könnte man z.B. NoRead durch Read behandeln lassen (schließlich kann man innerhalb der Routine abfragen, ob der Gegenstand readable ist), doch diese Version erlaubt einige Spielchen. So könnte beispielsweise eine Kiste erst lesbar sein, wenn man den Staub auf ihr wegwischt. Ihr könnte man in diesem Fall einfach das Attribut readable geben und sich nicht weiter um die Konsequenzen kümmern.