form of a library extension: the solution neatly packaged as a file that
other designers can incorporate into their source code. These files can
be found in the IF Archive: go to
-``http://mirror.ifarchive.org/indexes/if-archive.html`` and then select
+http://mirror.ifarchive.org/indexes/if-archive.html and then select
"``.../infocom``", "``.../compilers``", "``.../inform6``",
"``.../library``", and "``.../contributions``". All of these files
contain Inform code. To use a library extension (also known as a library
#. Add four lines near the head of the program (before you include
``Parser.h``).
- ``Replace MakeMatch;``
- ``Replace Identical;``
- ``Replace NounDomain;``
- ``Replace TryGivenObject;``
+ .. code-block:: inform
+
+ Replace MakeMatch;
+ Replace Identical;
+ Replace NounDomain;
+ Replace TryGivenObject;
#. Include the ``pname.h`` header just after you include ``Parser.h``.
- ``Include "Parser";``
- ``Include "pname";``
+
+ .. code-block:: inform
+
+ Include "Parser";
+ Include "pname";
#. Add ``pname`` properties to those objects which require phrase
recognition.
Include "Parser";
Include "pname";
- !...
+ ...
Now our source code is ready to benefit from the library package. How
does it work? We have acquired a new property -- ``pname`` -- which can
property where we have a disambiguation problem. Let’s change the
relevant lines for the toilet door and the toilet key:
-.. todo::
-
- Maybe specially highlight the lines using pname?
-
.. code-block:: inform
Object toilet_door
with pname '.x' 'red' '.x' 'toilet' 'door',
short_name [;
- !...
+ ...
Object toilet_key "toilet key" benny
with pname '.x' 'toilet' 'key',
article "the",
- !...
+ ...
while leaving the ``outside_of_toilet`` unchanged:
Object outside_of_toilet "toilet" cafe
with name 'toilet' 'bath' 'rest' 'room' 'bathroom' 'restroom',
before [;
- !...
+ ...
We are now using a new operator -- ``'.x'`` -- in our ``pname`` word
lists. explains
these objects, so that at run-time players could refer to the DOOR or
TOILET DOOR or the KEY or TOILET KEY -- but not simply to the TOILET --
when referring to either the door or the key. And, by leaving unchanged
-the name property of the outside_of_toilet object – where there is also
+the name property of the ``outside_of_toilet`` object – where there is also
another ``'toilet'`` entry -- the ``pname`` properties will tell the
interpreter to discard the key and the door as possible objects to be
considered when players refer just to TOILET. Looking at it in terms of
coffee_not_paid false, ! is Benny waiting to be paid?
key_not_returned false, ! is Benny waiting for the key?
live [;
- !...
+ ...
Now we are ready to tackle the ``Give`` action of the ``life`` property,
which deals with commands like GIVE THE KEY TO BENNY (in a moment, we'll
if (noun == costume) { whatever };
if (noun == clothes) { whatever };
- !...
+ ...
We won't let players give away their clothes or their costume (yes, an
improbable action, but you never know). The toilet key and the coin are