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).