§A2   Library properties

The following table lists every library-defined property. The banner headings give the name, what type of value makes sense and the default value (if other than 0). The symbol (+) means “this property is additive” so that inherited values from class definitions pile up into a list, rather than wipe each other out. Recall that false is the value 0 and true the value 1.

n_to, s_to, e_to, w_to, ...   Room, object or routine

For rooms   These twelve properties (there are also ne_to, nw_to, se_to, sw_to, in_to, out_to, u_to and d_to) are the map connections for the room. A value of 0 means “can't go this way”. Otherwise, the value should either be a room or a door object: thus, e_to might be set to crystal_bridge if the direction “east” means “over the crystal bridge”.
Routine returns   The room or object the map connects to; or 0 for “can't go this way”; or 1 for “can't go this way; stop and print nothing further”.
Warning   Do not confuse the direction properties n_to and so on with the twelve direction objects, n_obj et al.

add_to_scope   List of objects or routine

For objects   When this object is in scope (unless it was itself only placed in scope by PlaceInScope) so are all those listed, or all those nominated by the routine. A routine given here should call PlaceInScope(obj) to put obj in scope.
No return value

after   Routine   NULL   (+)

Receives actions after they have happened, but before the player has been told of them.
For rooms   All actions taking place in this room.
For objects   All actions for which this object is noun (the first object specified in the command); and all fake actions for it.
Routine returns   false to continue (and tell the player what has happened), true to stop here (printing nothing).
The Search action is a slightly special case. Here, after is called when it is clear that it would be sensible to look inside the object (e.g., it's an open container in a light room) but before the contents are described.

article   String or routine   "a"

For objects   Indefinite article for object or routine to print one.
No return value

articles   Array of strings

For objects   If given, these are the articles used with the object's name. (Provided for non-English languages where irregular nouns may have unusual vowel-contraction rules with articles: e.g., with French non-mute ‘H’.)

before   Routine   NULL   (+)

Receives advance warning of actions (or fake actions) about to happen.
For rooms   All actions taking place in this room.
For objects   All actions for which this object is noun (the first object specified in the command); and all fake actions, such as Receive and LetGo if this object is the container or supporter concerned.
Routine returns   false to continue with the action, true to stop here (printing nothing).

First special case: A vehicle object receives the Go action if the player is trying to drive around in it. In this case:
Routine returns   0 to disallow as usual; 1 to allow as usual, moving vehicle and player; 2 to disallow but do (and print) nothing; 3 to allow but do (and print) nothing. If you want to move the vehicle in your own code, return 3, not 2: otherwise the old location may be restored by subsequent workings.
Second special case: in a PushDir action, the before routine must call AllowPushDir() and then return true in order to allow the attempt (to push an object from one room to another) to succeed.

cant_go   String or routine   "You can't go that way."

For rooms   Message, or routine to print one, when a player tries to go in an impossible direction from this room.
No return value

capacity   Number or routine   100

For objects   Number of objects a container or supporter can hold.
For the player-object   Number of things the player can carry (when the player is this object); the default player object (selfobj) has capacity initially set to the constant MAX_CARRIED.

daemon   Routine

This routine is run each turn, once it has been activated by a call to StartDaemon, and until stopped by a call to StopDaemon.

describe   Routine   NULL   (+)

For objects   Called when the object is to be described in a room description, before any paragraph break (i.e., skipped line) has been printed. A sometimes useful trick is to print nothing in this routine and return true, which makes an object ‘invisible’.
For rooms   Called before a room's long (“look”) description is printed.
Routine returns   false to describe in the usual way, true to stop printing here.

description   String or routine

For objects   The Examine message, or a routine to print one out.
For rooms   The long (“look”) description, or a routine to print one out.
No return value

door_dir   Direction property or routine

For compass objects   When the player tries to go in this direction, e.g., by typing the name of this object, then the map connection tried is the value of this direction property for the current room. For example, the n_obj “north” object normally has door_dir set to n_to.
For objects   The direction that this door object goes via (for instance, a bridge might run east, in which case this would be set to e_to).
Routine returns   The direction property to try.

door_to   Room or routine

For objects   The place this door object leads to. A value of 0 means “leads nowhere”.
Routine returns   The room. Again, 0 (or false) means “leads nowhere”. Further, 1 (or true) means “stop the movement action immediately and print nothing further”.

each_turn   String or routine   NULL   (+)

String to print, or routine to run, at the end of each turn in which the object is in scope (after all timers and daemons for that turn have been run).
No return value

found_in   List of rooms or routine

This object will be found in all of the listed rooms, or if the routine says so, unless it has the attribute absent. If an object in the list is not a room, it means “present in the same room as this object”.
Routine returns   true to be present, otherwise false. The routine can look at the current location in order to decide.
Warning   This property is only looked at when the player changes rooms.

grammar   Routine

For animate or talkable objects   This is called when the parser has worked out that the object in question is being spoken to, and has decided the verb_word and verb_wordnum (the position of the verb word in the word stream) but hasn't yet tried any grammar. The routine can, if it wishes, parse past some words (provided it moves verb_wordnum on by the number of words it wants to eat up).
Routine returns   false to carry on as usual; true to indicate that the routine has parsed the entire command itself, and set up action, noun and second to the appropriate order; or a dictionary value for a verb, such as 'take', to indicate “parse the command from this verb's grammar instead”; or minus such a value, e.g. -'take', to indicate “parse from this verb and then parse the usual grammar as well”.

initial   String or routine

For objects   The description of an object not yet picked up, used when a room is described; or a routine to print one out.
For rooms   Printed or run when the room is arrived in, either by ordinary movement or by PlayerTo.
Warning   If the object is a door, or a container, or is switchable, then use one of the when_ properties rather than initial.
No return value

inside_description   String or routine

For objects   Printed as part or all of a room description when the player is inside the given object, which must be enterable.

invent   Routine

This routine is for changing an object's inventory listing. If provided, it's called twice, first with the variable inventory_stage set to 1, second with it set to 2. At stage 1, you have an entirely free hand to print a different inventory listing.
Routine returns   Stage 1: false to continue; true to stop here, printing nothing further about the object or its contents.
At stage 2, the object's indefinite article and short name have already been printed, but messages like “ (providing light)” haven't. This is an opportunity to add something like “ (almost empty)".
Routine returns   Stage 2: false to continue; true to stop here, printing nothing further about the object or its contents.

life   Routine   NULL   (+)

This routine holds rules about animate objects, behaving much like before and after but only handling the person-to-person events:

Attack Kiss WakeOther ThrowAt Give Show Ask Tell Answer Order

See §17, §18 and the properties orders and grammar.
Routine returns   true to stop and print nothing, false to resume as usual (for example, printing “Miss Gatsby has better things to do.”).

list_together   Number, string or routine

For objects   Objects with the same list_together value are grouped together in object lists (such as inventories, or the miscellany at the end of a room description). If a string such as "fish" is given, then such a group will be headed with text such as "five fish".
A routine, if given, is called at two stages in the process (once with the variable inventory_stage set to 1, once with it set to 2). These stages occur before and after the group is printed; thus, a preamble or postscript can be printed. Also, such a routine may change the variable c_style (which holds the current list style). On entry, the variable parser_one holds the first object in the group, and parser_two the current depth of recursion in the list. Applying x=NextEntry(x,parser_two); moves x on from parser_one to the next item in the group. Another helpful variable is listing_together, set up to the first object of a group being listed (or to 0 whenever no group is being listed).
Routine returns   Stage 1: false to continue, true not to print the group's list at all.
Routine returns   Stage 2: No return value.

name   List of dictionary words   (+)

For objects   A list of dictionary words referring to this object.
Warning   The parse_name property of an object may take precedence over this, if present.
For rooms   A list of words which the room understands but which refer to things which “do not need to be referred to in this game”; these are only looked at if all other attempts to understand the player's command have failed.
Warning   Uniquely in Inform syntax, these dictionary words are given in double quotes "thus", whereas in all other circumstances they would be 'thus'. This means they can safely be only one letter long without ambiguity.

number   Any value

A general purpose property left free: conventionally holding a number like “number of turns' battery power left”. (Now unnecessary, number is a feature left over from earlier versions of Inform where it was less easy to make new properties.)
For compass objects   Note that the standard compass objects defined by the library all provide a number property, in case this might be useful to the designer.

orders   Routine

For animate or talkable objects   This carries out the player's orders (or doesn't, as it sees fit): it looks at actor, action, noun and second to do so. Unless this object is the current player, actor is irrelevant (it is always the player) and the object is the person being ordered about.
If the player typed an incomprehensible command, like “robot, og sthou”, then the action is NotUnderstood and the variable etype holds the parser's error number.
If this object is the current player then actor is the person being ordered about. actor can either be this object — in which case an action is being processed, because the player has typed an ordinary command — or can be some other object, in which case the player has typed an order. See §18 for how to write orders routines in these cases.
Routine returns   true to stop and print nothing further; false to continue. (Unless the object is the current player, the life routine's Order section gets an opportunity to meddle next; after that, Inform gives up.)

parse_name   Routine

For objects   To parse an object's name (this overrides the name but is also used in determining if two objects are describably identical). This routine should try to match as many words as possible in sequence, reading them one at a time by calling NextWord(). (It can leave the “word marker” variable wn anywhere it likes).
Routine returns   0 if the text didn't make any sense at all, −1 to make the parser resume its usual course (looking at the name), or the number of words in a row which successfully matched.
In addition to this, if the text matched seems to be in the plural (for instance, a blind mouse object reading blind mice), the routine can set the variable parser_action to the value ##PluralFound. The parser will then match with all of the different objects understood, rather than ask a player which of them is meant.
A parse_name routine may also (voluntarily) assist the parser by telling it whether or not two objects which share the same parse_name routine are identical. (They may share the same routine if they both inherit it from a class.) If, when it is called, the variable parser_action is set to ##TheSame then this is the reason. It can then decide whether or not the objects parser_one and parser_two are indistinguishable.

Routine returns   −1 if the objects are indistinguishable, −2 if not.

plural   String or routine

For objects   The plural name of an object (when in the presence of others like it), or routine to print one; for instance, a wax candle might have plural set to "wax candles".
No return value

react_after   Routine

For objects   Acts like an after rule, but detects any actions in the vicinity (any actions which take place when this object is in scope).
Routine returns   true to print nothing further; false to carry on.

react_before   Routine

For objects   Acts like a before rule, but detects any actions in the vicinity (any actions which take place when this object is in scope).
Routine returns   true to stop the action, printing nothing; false to carry on.

short_name   Routine

For objects   The short name of an object (like “brass lamp”), or a routine to print it.

Routine returns   true to stop here, false to carry on by printing the object's ‘real’ short name (the string given at the head of the object's definition). It's sometimes useful to print text like "half-empty " and then return false.

short_name_indef   Routine

For objects   If set, this form of the short name is used when the name is prefaced by an indefinite article. (This is not useful in English-language games, but in other languages adjectival parts of names agree with the definiteness of the article.)

time_left   Number

Number of turns left until the timer for this object (if set, which must be done using StartTimer) goes off. Its initial value is of no significance, as StartTimer will write over this, but a timer object must provide the property. If the timer is currently set, the value 0 means “will go off at the end of the current turn”, the value 1 means “… at the end of next turn” and so on.

time_out   Routine   NULL   (+)

Routine to run when the timer for this object goes off (having been set by StartTimer and not in the mean time stopped by StopTimer).
Warning   A timer object must also provide a time_left property.

when_closed   String or routine

For objects   Description, or routine to print one, of something closed (a door or container) in a room's long description.
No return value

when_open   String or routine

For objects   Description, or routine to print one, of something open (a door or container) in a room's long description.
No return value

when_on   String or routine

For objects   Description, or routine to print one, of a switchable object which is currently switched on, in a room's long description.
No return value

when_off   String or routine

For objects   Description, or routine to print one, of a switchable object which is currently switched off, in a room's long description.
No return value

with_key   Object   nothing

The key object needed to lock or unlock this lockable object. A player must explicitly name it as the key being used and be holding it at the time. The value nothing, or 0, means that no key fits (though this is not made clear to the player, who can try as many as he likes).