1 ==============================
2 Appendix F -- Inform library
3 ==============================
5 .. |ADD| replace:: **+**
7 .. The ⊕ symbol doesn't work in LaTeX.
13 .. image:: /images/picL.png
20 ibrary files define Inform's model world, turning a conventional
21 programming language into a text adventure development system. Here are
22 the library constants, variables and routines, the standard object
23 properties and attributes, the verb grammars and actions.
29 A `container` object holding the twelve direction objects `d_obj e_obj
30 in_obj n_obj ne_obj nw_obj out_obj s_obj se_obj sw_obj u_obj w_obj`.
33 If defined (between Includes of `Parser` and `VerbLib`), changes standard
38 | `Object LibraryMessages`
40 | `{action}: "{string}";`
41 | `{action}: "{string}";`
42 | `{action}: switch (lm_n) {`
43 | `{value}: "{string}";`
44 | `{value}: "{string}",`
53 Get this to work properly in LaTeX. Currently get a 'too deeply
57 The default player object. Avoid: use instead the `player` variable,
58 which usually refers to `selfobj`.
61 A pseudo-room which becomes the `location` when there is no light
62 (although the player object is not moved there).
67 In addition to the standard constants `true` (1), `false` (0) and `nothing`
68 (0), the Library defines `NULL` (-1) for an `{action}`, `{property}` or
69 `{pronoun}` whose current value is undefined.
71 `LIBRARY_PARSER`, `LIBRARY_ENGLISH`, `LIBRARY_VERBLIB` and
72 `LIBRARY_GRAMMAR` are defined to mark the end of inclusion of `Parser.h`,
73 `English.h`, `VerbLib.h` and `Grammar.h` respectively.
75 User-defined constants
76 ======================
78 Some constants control features rather than represent values.
81 Activates the `Amusing` entry point.
83 `COMMENT_CHARACTER = '{char}'`
84 Introduces a comment line ignored by the parser (default "*").
87 Offers "UNDO the last move" at game end.
90 Activates the debug commands.
92 `Headline = "{string}"`
93 **Mandatory**: game style, copyright info, etc.
96 Pronouns reflect only objects mentioned by the player.
98 `MAX_CARRIED = {expr}`
99 Limit on direct possessions that the player can carry (default 100).
102 Maximum game score (default 0).
104 `MAX_TIMERS = {expr}`
105 Limit on active timers/daemons (default 32).
108 "`OBJECTS`" and "`PLACES`" verbs are barred.
111 Game doesn't use scoring.
113 `NUMBER_TASKS = {expr}`
114 Number of `scored` tasks (default 1).
116 `OBJECT_SCORE = {expr}`
117 For taking a `scored` object for the first time (default 4).
119 `ROOM_SCORE = {expr}`
120 For visiting a `scored` room for the first time (default 5).
122 `SACK_OBJECT = {obj_id}`
123 A `container` object where the game places held objects.
125 `START_MOVE = {expr}`
126 Initial value of turns counter (default 0).
129 **Mandatory**: the name of the story.
132 Activates the task scoring system.
135 Activates linking with pre-compiled library modules.
138 De-activates standard compass directions (bar "`IN`" and "`OUT`"). Place
139 alternative directions in the `compass`.
145 The current `{action}`.
148 The target of an instruction: the player, or an NPC.
151 Normally 0: 1 indicates a regular death, 2 indicates that the player has
152 won, 3 or more denotes a user-defined end.
155 Used by `invent` and `list_together` properties.
158 Normally `false`; `true` makes most group 2 actions silent.
161 The player's current room; unless that's dark, when it contains
162 `thedark`, `real_location` contains the room.
165 Normally `true`: `false` remains silent when score changes.
168 The primary focus object for the current action.
171 The object acting on behalf of the human player.
174 The player's current room when in the dark.
180 The secondary focus object for the current action.
183 The object which received a message. (Note: a run-time variable, not a
184 compile-time constant.)
187 The object which sent a message (or `nothing`).
190 A byte array holding scores for the task scoring system.
193 The game's clock, in minutes 0..1439 since midnight.
196 The game's turn counter.
199 The input stream word number, counting from 1.
201 .. _library-routines:
207 A scored task has been achieved.
210 In a group 2 action, controls output of "after" messages.
213 An object can be pushed from one location to another.
216 Prints the game banner.
218 `ChangePlayer({obj_id,flag})`
219 Player assumes the persona of the `{obj_id}`. If the optional `{flag}`
220 is `true`, room descriptions include "(as `{object}`)".
222 `CommonAncestor({obj_id1,obj_id2})`
223 Returns the nearest object which has a parental relationship to both
224 `{obj_ids}`, or `nothing`.
226 `DictionaryLookup({byte_array,length})`
227 Returns address of word in dictionary, or 0 if not found.
230 Refreshes the status line; happens anyway at end of each turn.
232 `GetGNAOfObject(obj_id)`
233 Returns gender-number-animation 0..11 of the `{obj_id}`.
235 `HasLightSource(obj_id)`
236 Returns `true` if the `{obj_id}` has light.
238 `IndirectlyContains({parnt_obj_id,obj_id})`
239 Returns `true` if `{obj_id}` is currently a child or grand-child or
240 great-grand-child... of the `{parent_object}`.
242 `IsSeeThrough(obj_id)`
243 Returns `true` if light can pass through the `{obj_id}`.
245 `Locale({obj_id,"string1","string2"})`
246 Describes the contents of `{obj_id}`, and returns their number. After
247 objects with own paragraphs, the rest are listed preceded by `{string1}`
250 `LoopOverScope({routine_id,actor})`
251 Calls `{routine_id}({obj_id})` for each `{obj_id}` in scope. If the
252 optional `{actor}` is supplied, that defines the scope.
254 `MoveFloatingObjects()`
255 Adjusts positions of game's `found_in` objects.
258 Returns the next dictionary word in the input stream, incrementing `wn`
259 by one. Returns `false` if the word is not in the dictionary, or if the
260 input stream is exhausted.
263 Returns the next dictionary word in the input stream, incrementing `wn`
264 by one. Returns `false` if the word is not in the dictionary, -1 if the
265 input stream is exhausted.
267 `NounDomain({obj_id1,obj_id2,type})`
268 Performs object parsing; see also `ParseToken()`.
270 `ObjectIsUntouchable({obj_id,flag})`
271 Tests whether there is a barrier - a container object which is not open -
272 between player and `{obj_id}`. Unless the optional `{flag}` is `true`,
273 outputs "You can't because ... is in the way". Returns `true` is a
274 barrier is found, otherwise `false`.
276 `OffersLight({obj_id})`
277 Returns `true` if the `{obj_id}` offers light.
279 `ParseToken({type,value})`
280 Performs general parsing; see also `NounDomain()`.
282 `PlaceInScope({obj_id})`
283 Used in an `add_to_scope` property or `scope=` token to put the
284 `{obj_id}` into scope for the parser.
286 `PlayerTo({obj_id,flag})`
287 Moves the player to `{obj_id}`. Prints its description unless optional
288 `{flag}` is 1 (no description) or 2 (as if walked in).
290 `PrintOrRun({obj_id,property,flag})`
291 If `{obj_id.property}` is a string, output it (followed by a newline
292 unless optional `{flag}` is `true`), and return `true`. If it's a
293 routine, run it and return what the routine returns.
295 `PronounNotice({obj_id})`
296 Associates an appropriate pronoun with the `{obj_id}`.
298 `PronounValue('{pronoun}')`
299 Returns the object to which '`it`' (or '`him`', '`her`', '`them`')
300 currently refers, or `nothing`.
302 `ScopeWithin({obj_id})`
303 Used in an `add_to_scope` property or `scope=` token to put the contents
304 of the `{obj_id}` in scope for the parser.
306 `SetPronoun('{pronoun}',{obj_id})`
307 Defines the `{obj_id}` to which a given pronoun refers.
309 `SetTime({expr1,expr2})`
311 Sets `the_time` to `{expr1}` (in mins 0..1439 since midnight), running at
314 | +ve: `{expr2}` minutes pass each turn;
315 | -ve: `{-expr2}` turns take one minute;
316 | zero: time stands still.
318 `StartDaemon({obj_id})`
319 Starts the `{obj_id}`\'s daemon.
321 `StartTimer({obj_id,expr})`
322 Starts the `{obj_id}`\'s timer, initialising its `time_left` to `{expr}`.
323 The object's `time_out` property will be called after that number of
326 `StopDaemon({obj_id})`
327 Stops the `{obj_id}`\'s daemon.
329 `StopTimer({obj_id})`
330 Stops the `{obj_id}`\'s timer.
332 `TestScope({obj_id,actor})`
333 Returns `true` if the `{obj_id}` is in scope, otherwise `false`. If the
334 optional `{actor}` is supplied, that defines the scope.
337 Parses word `{expr}` in the input stream as a number, recognising
338 decimals, also English words one..twenty. Returns the number 1..10000,
339 or -1000 if the parse fails.
341 `UnsignedCompare({expr1,expr2})`
342 Returns -1 if `{expr1}` is less than `{expr2}`, 0 if `{expr1}` equals
343 `{expr2}`, and 1 if `{expr1}` is greater than `{expr2}`. Both
344 expressions are unsigned, in the range 0..65535.
346 `WordAddress({expr})`
347 Returns a byte array containing the raw text of word `{expr}` in the
350 `WordInProperty({word,obj_id,property})`
351 Returns `true` if the dictionary `{word}` is listed in the `{property}`
352 values for the `{obj_id}`.
355 Returns the length of word `{expr}` in the input stream.
357 `WriteListFrom({obj_id,expr})`
358 Outputs a list of `{obj_id}` and its siblings, in the given style, an
359 `{expr}` formed by adding any of: `ALWAYS_BIT`, `CONCEAL_BIT`,
360 `DEFART_BIT`, `ENGLISH_BIT`, `FULLINV_BIT`, `INDENT_BIT`, `ISARE_BIT`,
361 `NEWLINE_BIT`, `PARTINV_BIT`, `RECURSE_BIT`, `TERSE_BIT`, `WORKFLAG_BIT`.
364 Returns `true` if the player types "`YES`", `false` for "`NO`".
367 Returns the type of its `{arg}` : 3 for a string address, 2 for a routine
368 address, 1 for an object number, or 0 otherwise.
375 Where the `value` of a property can be a routine, several formats are
376 possible (but remember: embedded "`]`" returns `false`, standalone "`]`"
379 | `{property} [; {stmt}; {stmt}; ... ]`
380 | `{property} [; return {routine_id}(); ]`
381 | `{property} [; {routine_id}(); ]`
382 | `{property} {routine_id}`
384 In this appendix, |ADD| marks an additive property. Where a `Class` and an
385 `Object` of that class both define the same property, the value specified
386 for the `Object` normally overrides the value inherited from the `Class`.
387 However, if the property is additive then both values apply, with the
388 Object's value being considered first.
391 For an object: additional objects which follow it in and out of scope.
392 The `{value}` can be a space-separated list of `{obj_ids}`, or a routine
393 which invokes `PlaceInScope()` or `ScopeWithin()` to specify objects.
396 For an object: receives every `{action}` and `{fake_action}` for which
397 this is the `{noun}`. For a room: receives every `{action}` which occurs
400 The `{value}` is a routine of structure similar to a `switch` statement,
401 having cases for the appropriate `{actions}` (and an optional `default`
402 as well); it is invoked after the action has happened, but before the
403 player has been informed. The routine should return `false` to continue,
404 telling the player what has happened, or `true` to stop processing the
405 action and produce no further output.
408 For an object: the object's indefinite article - the default is
409 automatically "a", "an" or "some". The `{value}` can be a string, or a
410 routine which outputs a string.
413 For a non-English object: its definite and indefinite articles. The
414 `{value}` is an array of strings.
417 For an object: receives every `{action}` and `{fake_action}` for which
418 this is the `{noun}`. For a room: receives every action which occurs
421 The `{value}` is a routine invoked before the action has happened. See
425 For a room: the message when the player attempts an impossible exit. The
426 `{value}` can be a string, or a routine which outputs a string.
429 For a `container` or `supporter` object: the number of objects which can
430 be placed in or on it - the default is 100.
432 For the player: the number which can be carried - `selfobj` has an
433 initial capacity of `MAX_CARRIED`.
435 The `{value}` can be a number, or a routine which returns a number.
438 For a room: a possible exit. The `{value}` can be
440 * `false` (the default): not an exit;
441 * a string: output to explain why this is not an exit;
442 * a `{room}`: the exit leads to this room;
443 * a `door` object: the exit leads through this door;
444 * a routine which should return `false`, a string, a `{room}`, a `door`
445 object, or `true` to signify "not an exit" and produce no further
449 The `{value}` is a routine which can be activated by
450 `StartDaemon({obj_id})` and which then runs once each turn until
451 deactivated by `StopDaemon({obj_id})`.
454 For an object: called before the object's description is output. For a
455 room: called before the room's (long) description is output.
457 The `{value}` is a routine which should return `false` to continue,
458 outputting the usual description, or `true` to stop processing and
459 produce no further output.
462 For an object: its description (output by `Examine`).
464 For a room: its long description (output by `Look`).
466 The `{value}` can be a string, or a routine which outputs a string.
469 For a `compass` object (`d_obj`, `e_obj`, ...): the direction in which an
470 attempt to move to this object actually leads.
472 For a `door` object: the direction in which this door leads.
474 The `{value}` can be a directional property (`d_to`, `e_to`, ...), or a
475 routine which returns such a property.
478 For a `door` object: where it leads. The value can be
480 * `false` (the default): leads nowhere;
481 * a string: output to explain why door leads nowhere;
482 * a `{room}`: the door leads to this room;
483 * a routine which should return `false`, a string, a `{room}`, or `true`
484 to signify "leads nowhere" without producing any output.
490 Invoked at the end of each turn (after all appropriate daemons and
491 timers) whenever the object is in scope. The `{value}` can be a string,
495 For an object: the rooms where this object can be found, unless it has
496 the `absent` attribute. The `{value}` can be
498 * a space-separated list of `{rooms}` (where this object can be found) or
499 `{obj_ids}` (whose locations are tracked by this object);
500 * a routine which should return `true` if this object can be found in the
501 current location, otherwise `false`.
504 For an `animate` or `talkable` object: the `{value}` is a routine called
505 when the parser knows that this object is being addressed, but has yet to
506 test the grammar. The routine should return `false` to continue, `true`
507 to indicate that the routine has parsed the entire command, or a
508 dictionary word ('`word`' or -'`word`').
514 For an object: its description before being picked up.
516 For a room: its description when the player enters the room.
518 The `{value}` can be a string, or a routine which outputs a string.
521 For an `enterable` object: its description, output as part of the room
522 description when the player is inside the object.
524 The `{value}` can be a string, or a routine which outputs a string.
527 For an object: the `{value}` is a routine for outputting the object's
528 inventory listing, which is called twice. On the first call nothing has
529 been output; `inventory_stage` has the value 1, and the routine should
530 return `false` to continue, or `true` to stop processing and produce no
531 further output. On the second call the object's indefinite article and
532 short name have been output, but not any subsidiary information;
533 `inventory_stage` has the value 2, and the routine should return `false`
534 to continue, or `true` to stop processing and produce no further output.
537 For an `animate` object: receives person-to-person actions (`Answer`,
538 `Ask`, `Attack`, `Give`, `Kiss`, `Order`, `Show`, `Tell`, `ThrowAt` and
539 `WakeOther`) for which this is the `{noun}`. The `{value}` is a routine
540 of structure similar to a `switch` statement, having cases for the
541 appropriate `{actions}` (and an optional default as well). The routine
542 should return `false` to continue, telling the player what has happened,
543 or `true` to stop processing the action and produce no further output.
547 For an object: groups related objects when outputting an inventory or
548 room contents list. The `{value}` can be
550 * a `{number}`: all objects having this value are grouped;
551 * a `{string}`: all objects having this value are grouped as a count of
553 * a routine which is called twice. On the first call nothing has been
554 output; `inventory_stage` has the value 1, and the routine should
555 return `false` to continue, or `true` to stop processing and produce no
556 further output. On the second call the list has been output;
557 `inventory_stage` has the value 2, and there is no test on the return
564 Defines a space-separated list of words which are added to the Inform
565 dictionary. Each word can be supplied in apostrophes '...' or quotes
566 "..."; in all other cases only words in apostrophes update the
569 For an object: identifies this object.
571 For a room: outputs "does not need to be referred to".
577 For an object or room: the `{value}` is a general-purpose variable freely
578 available for use by the program. A `player` object must provide (but
579 not use) this variable.
585 For an `animate` or `talkable` object: the `{value}` is a routine called
586 to carry out the player's orders. The routine should return `false` to
587 continue, or `true` to stop processing the action and produce no further
594 For an object: the `{value}` is a routine called to parse an object's
595 name. The routine should return zero if the text makes no sense, -1 to
596 cause the parser to resume, or the positive number of words matched.
599 For an object: its plural form, when in the presence of others like it.
600 The `{value}` can be a string, or a routine which outputs a string.
603 For an object: detects nearby actions - those which take place when this
604 object is in scope. The `{value}` is a routine invoked after the action
605 has happened, but before the player has been informed. See `after`.
608 For an object: detects nearby actions - those which take place when this
609 object is in scope. The `{value}` is a routine invoked before the action
610 has happened. See `after`.
618 For an object: an alternative or extended short name. The `{value}` can
619 be a string, or a routine which outputs a string. The routine should
620 return `false` to continue by outputting the object's *actual* short name
621 (from the head of the object definition), or `true` to stop processing
622 the action and produce no further output.
625 For a non-English object: the short name when preceded by an indefinite
626 object. The `{value}` can be a string, or a routine which outputs a
633 For a timer object: the `{value}` is a variable to hold the number of
634 turns left until this object's timer - activated and initialised by
635 `StartTimer({obj_id})` - counts down to zero and invokes the object's
639 For a timer object: the `{value}` is a routine which is run when the
640 object's `time_left` value - initialised by `StartTimer({obj_id})`, and
641 not in the meantime cancelled by `StopTimer({obj_id})` - counts down to
652 For a `container` or `door` object: used when including this object in a
653 room's long description. The `{value}` can be a string, or a routine
654 which outputs a string.
659 For a `switchable` object: used when including this object in a room's
660 long description. The `{value}` can be a string, or a routine which
664 For a `lockable` object: the `{obj_id}` (generally some kind of key)
665 needed to lock and unlock the object, or `nothing` if no key fits.
673 For a floating object (one with a `found_in` property, which can
674 appear in many rooms): is no longer there.
677 For an object: is a living creature.
680 For an object: can be worn.
683 For an object: is present but hidden from view.
686 For an object: other objects can be put in (but not on) it.
689 For an object: is a door or bridge between rooms.
692 For an object: can be eaten.
695 For an object: can be entered.
698 For an `animate` object: is female.
701 For an object or room: a general-purpose flag.
704 For an object or room: is giving off light.
707 For an object: can be locked; see the `with_key` property.
710 For an object: can't be opened.
713 For an `animate` object: is male.
716 For an object: is being, or has been, taken by the player.
719 For an `animate` object: is neither male nor female.
722 For a `switchable` object: is switched on.
725 For a `container` or door object: is open.
728 For a `container` or `door` object: can be opened.
731 For an object: is plural.
734 For an object: the short name is a proper noun, therefore not to be
735 preceded by "The" or "the".
738 For an object: can't be taken; is not listed in a room description.
741 For an object: awards `OBJECT_SCORE` points when taken for the first
742 time. For a room: awards `ROOM_SCORE` points when visited for the
746 For an object: can't be taken.
749 For an object: other objects can be put on (but not in) it.
752 For an object: can be switched off or on.
755 For an object: can be addressed in "object, do this" style.
758 For a `container` object: objects inside it are visible.
761 For a room: is being, or has been, visited by the player.
764 Temporary internal flag, also available to the program.
767 For a `clothing` object: is being worn.
771 Optional entry points
772 =====================
774 These routines, if you supply them, are called when shown.
777 Player has died; `deadflag=0` resurrects.
780 The ">" prompt has been output.
783 Player has won; `AMUSING_PROVIDED` is defined.
786 The parser has input some text, set up the buffer and parse tables, and
787 initialised `wn` to 1.
789 `ChooseObjects({object,flag})`
790 Parser has found "`ALL`" or an ambiguous noun phrase and decided that
791 `{object}` should be excluded (`flag` is 0), or included (`flag` is 1).
792 The routine should return 0 to let this stand, 1 to force inclusion, or 2
793 to force exclusion. If `flag` is 2, parser is undecided; routine should
794 return appropriate score 0..9.
797 The player has gone from one dark room to another.
800 The player has died; `deadflag` is 3 or more.
803 Called after all actions.
806 Called before all actions.
809 **Mandatory; note British spelling**: called at start. Must set
810 `location`; can return 2 to suppress game banner.
813 Called during parsing.
816 Called at the end of every `Look` description.
819 Called when room changes, before description is output.
821 `ParseNoun({object})`
822 Called to parse the `{object}`\'s name.
824 `ParseNumber({byte_array,length})`
825 Called to parse a number.
827 `ParserError({number})`
828 Called to handle an error.
831 Completes the output of the score.
833 `PrintTaskName({number})`
834 Prints the name of the task.
837 Called when an unusual verb is printed.
840 Called after every turn.
843 Called when an unusual verb is encountered.
850 Group 1 actions support the 'meta' verbs. These are the standard actions
851 and their triggering verbs.
853 ============== =====================================================
854 `CommandsOff` "`RECORDING OFF`"
855 `CommandsOn` "`RECORDING [ON]`"
856 `CommandsRead` "`REPLAY`"
857 `FullScore` "`FULLSCORE`", "`FULL [SCORE]`"
858 `LMode1` "`BRIEF`", "`NORMAL`"
859 `LMode2` "`LONG`", "`VERBOSE`"
860 `LMode3` "`SHORT`", "`SUPERBRIEF`"
861 `NotifyOff` "`NOTIFY OFF`"
862 `NotifyOn` "`NOTIFY [ON]`"
863 `Objects` "`OBJECTS`"
865 `Pronouns` "`[PRO]NOUNS`"
866 `Quit` "`DIE`", "`Q[UIT]`"
867 `Restart` "`RESTART`"
868 `Restore` "`RESTORE`"
871 `ScriptOff` "`[TRAN]SCRIPT OFF`", "`NOSCRIPT`", "`UNSCRIPT`"
872 `ScriptOn` "`[TRAN]SCRIPT [ON]`"
874 `Version` "`VERSION`"
875 ============== =====================================================
879 =============== ===================================================
880 `ActionsOff` "`ACTIONS OFF`"
881 `ActionsOn` "`ACTIONS [ON]`"
882 `ChangesOff` "`CHANGES OFF`"
883 `ChangesOn` "`CHANGES [ON]`"
886 `Predictable` "`RANDOM`"
887 `RoutinesOff` "`MESSAGES OFF`", "`ROUTINES OFF`"
888 `RoutinesOn` "`MESSAGES [ON]`", "`ROUTINES [ON]`"
890 `Showobj` "`SHOWOBJ`"
891 `Showverb` "`SHOWVERB`"
892 `TimersOff` "`DAEMONS OFF`", "`TIMERS OFF`"
893 `TimersOn` "`DAEMONS [ON]`", "`TIMERS [ON]`"
894 `TraceLevel` "`TRACE number`"
895 `TraceOff` "`TRACE OFF`"
896 `TraceOn` "`TRACE [ON]`"
897 `XAbstract` "`ABSTRACT`"
898 `XPurloin` "`PURLOIN`"
900 =============== ===================================================
907 Group 2 actions usually work, given the right circumstances.
909 ============= =============================================================
910 `Close` "`CLOSE [UP]`", "`COVER [UP]`", "`SHUT [UP]`"
911 `Disrobe` "`DISROBE`", "`DOFF`", "`REMOVE`", "`SHED`", "`TAKE OFF`"
912 `Drop` "`DISCARD`", "`DROP`", "`PUT DOWN`", "`THROW`"
914 `Empty` "`EMPTY [OUT]`"
915 `EmptyT` "`EMPTY IN|INTO|ON|ONTO|TO`"
916 `Enter` "`CROSS`", "`ENTER`", "`GET IN|INTO|ON|ONTO`",
917 "`GO IN|INSIDE|INTO|THROUGH`",
918 "`LEAVE IN|INSIDE|INTO|THROUGH`", "`LIE IN|INSIDE|ON`",
920 "`RUN IN|INSIDE|INTO|THROUGH`", "`SIT IN|INSIDE|ON`",
921 "`SIT ON TOP OF`", "`STAND ON`",
922 "`WALK IN|INSIDE|INTO|THROUGH`"
923 `Examine` "`CHECK,`" "`DESCRIBE`", "`EXAMINE`",
924 "`L[OOK] AT`", "`READ`", "`WATCH`", "`X`"
925 `Exit` "`EXIT`", "`GET OFF|OUT|UP`",
926 "`LEAVE`", "`OUT[SIDE]`", "`STAND [UP]`"
928 `Give` "`FEED [TO]`", "`GIVE [TO]`", "`OFFER [TO]`", "`PAY [TO]`"
929 `Go` "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
930 `GoIn` "`CROSS`", "`ENTER`", "`IN[SIDE]`"
931 `Insert` "`DISCARD IN|INTO`",
932 "`DROP DOWN|IN|INTO`",
934 "`PUT IN|INSIDE|INTO`",
935 "`THROW DOWN|IN|INTO`"
936 `Inv` "`I[NV]`", "`INVENTORY`", "`TAKE INVENTORY`"
937 `InvTall` "`I[NV] TALL`", "`INVENTORY TALL`"
938 `InvWide` "`I[NV] WIDE`", "`INVENTORY WIDE`"
941 `Open` "`OPEN`", "`UNCOVER`", "`UNDO`", "`UNWRAP`"
942 `PutOn` "`DISCARD ON|ONTO`",
946 `Remove` "`GET FROM`", "`REMOVE FROM`", "`TAKE FROM|OFF`"
947 `Search` "`L[OOK] IN|INSIDE|INTO|THROUGH`", "`SEARCH`"
948 `Show` "`DISPLAY [TO]`", "`PRESENT [TO]`", "`SHOW [TO]`"
949 `SwitchOff` "`CLOSE OFF`", "`SCREW OFF`",
950 "`SWITCH OFF`", "`TURN OFF`",
952 `SwitchOn` "`SCREW ON`", "`SWITCH ON`",
953 "`TURN ON`", "`TWIST ON`"
954 `Take` "`CARRY`", "`GET`", "`HOLD`",
955 "`PEEL [OFF]`", "`PICK UP`",
957 `Transfer` "`CLEAR TO`", "`MOVE TO`",
958 "`PRESS TO`", "`PUSH TO`",
959 "`SHIFT TO`", "`TRANSFER TO`"
960 `Unlock` "`OPEN WITH`", "`UNDO WITH`",
962 `VagueGo` "`GO`", "`LEAVE`", "`RUN`", "`WALK`"
963 `Wear` "`DON`", "`PUT ON`", "`WEAR`"
964 ============= =============================================================
971 Group 3 actions are by default stubs which output a message and stop at the
972 "before" stage (so there is no "after" stage).
974 ============= =============================================================
975 `Answer` "`ANSWER TO`", "`SAY TO`",
976 "`SHOUT TO`", "`SPEAK TO`"
979 `Attack` "`ATTACK`", "`BREAK`", "`CRACK`",
980 "`DESTROY`", "`FIGHT`", "`HIT`",
981 "`KILL`", "`MURDER`", "`PUNCH`",
982 "`SMASH`", "`THUMP`", "`TORTURE`",
985 `Burn` "`BURN [WITH]`", "`LIGHT [WITH]`"
986 `Buy` "`BUY`" "`PURCHASE`"
987 `Climb` "`CLIMB [OVER|UP]`", "`SCALE`"
988 `Consult` "`CONSULT ABOUT|ON`",
990 "`READ ABOUT IN`", "`READ IN`"
991 `Cut` "`CHOP,`" "`CUT`", "`PRUNE`", "`SLICE`"
993 `Drink` "`DRINK`", "`SIP`", "`SWALLOW`"
995 `Jump` "`HOP`", "`JUMP`", "`SKIP`"
996 `JumpOver` "`HOP OVER`", "`JUMP OVER`", "`SKIP OVER`"
997 `Kiss` "`EMBRACE`", "`HUG`", "`KISS`"
998 `Listen` "`HEAR`", "`LISTEN [TO]`"
999 `LookUnder` "`LOOK UNDER`"
1000 `Mild` Various mild swearwords.
1003 `Pull` "`DRAG`" "`PULL`"
1004 `Push` "`CLEAR`", "`MOVE`", "`PRESS`",
1006 `PushDir` "`CLEAR`", "`MOVE`", "`PRESS`",
1008 `Rub` "`CLEAN`", "`DUST`", "`POLISH`",
1009 "`RUB`", "`SCRUB`", "`SHINE`",
1011 `Set` "`ADJUST`", "`SET`"
1012 `SetTo` "`ADJUST TO`", "`SET TO`"
1014 `Sleep` "`NAP`", "`SLEEP`"
1015 `Smell` "`SMELL`", "`SNIFF`"
1017 `Squeeze` "`SQUASH`", "`SQUEEZE`"
1018 `Strong` Various strong swearwords.
1019 `Swim` "`DIVE`", "`SWIM`"
1020 `Swing` "`SWING [ON]`"
1022 `Tell` "`TELL ABOUT`"
1024 `ThrowAt` "`THROW AGAINST|AT|ON|ONTO`"
1025 `Tie` "`ATTACH [TO]`", "`FASTEN [TO]`",
1026 "`FIX [TO]`", "`TIE [TO]`"
1027 `Touch` "`FEEL,`" "`FONDLE`", "`GROPE`", "`TOUCH`"
1028 `Turn` "`ROTATE`", "`SCREW`", "`TURN`",
1029 "`TWIST`", "`UNSCREW`"
1030 `Wait` "`WAIT`" "`Z`"
1031 `Wake` "`AWAKE[N]`", "`WAKE [UP]`"
1032 `WakeOther` "`AWAKE[N]`", "`WAKE [UP]`"
1034 `WaveHands` "`WAVE`"
1036 ============= =============================================================
1041 Fake actions handle some special cases, or represent "real" actions from
1042 the viewpoint of the second object.
1044 ================ ========================================================
1045 `LetGo` Generated by `Remove`.
1046 `ListMiscellany` Outputs a range of inventory messages.
1047 `Miscellany` Outputs a range of utility messages.
1048 `NotUnderstood` Generated when parser fails to interpret some `orders`.
1049 `Order` Receives things not handled by `orders`.
1050 `PluralFound` Tells the parser that `parse_name()` has identified a
1052 `Prompt` Outputs the prompt, normally ">".
1053 `Receive` Generated by `Insert` and `PutOn`.
1054 `TheSame` Generated when parser can't distinguish between two
1056 `ThrownAt` Generated by `ThrowAt`.
1057 ================ ========================================================