From c2ead72558bf28859c401039c4273d7d31aff05a Mon Sep 17 00:00:00 2001 From: Glenn Hutchings Date: Thu, 21 Apr 2016 18:06:13 +0100 Subject: [PATCH] Add appendix F. --- appendices/f.rst | 1032 ++++++++++++++++++++++++++++++++++++++++++++++ images/picL.png | Bin 0 -> 2434 bytes 2 files changed, 1032 insertions(+) create mode 100644 appendices/f.rst create mode 100644 images/picL.png diff --git a/appendices/f.rst b/appendices/f.rst new file mode 100644 index 0000000..db6f55d --- /dev/null +++ b/appendices/f.rst @@ -0,0 +1,1032 @@ +============================== + Appendix F -- Inform library +============================== + +.. default-role:: samp + +.. only:: html + + .. image:: /images/picL.png + :align: left + +.. raw:: latex + + \dropcap{l} + +ibrary files define Inform's model world, turning a conventional +programming language into a text adventure development system. Here are +the library constants, variables and routines, the standard object +properties and attributes, the verb grammars and actions. + +Library objects +=============== + +`compass` + A `container` object holding the twelve direction objects `d_obj e_obj + in_obj n_obj ne_obj nw_obj out_obj s_obj se_obj sw_obj u_obj w_obj`. + +`LibraryMessages` + If defined (between Includes of `Parser` and `VerbLib`), changes standard + library messages: + + | `Object LibraryMessages` + | `with before [;` + | `{action}: "{string}";` + | `{action}: "{string}";` + | `{action}: switch (lm_n) {` + | `{value}: "{string}";` + | `{value}: "{string}",` + | `(a) lm_o,".";` + | `...` + | `}` + | `...` + | `];` + +`selfobj` + The default player object. Avoid: use instead the `player` variable, + which usually refers to `selfobj`. + +`thedark` + A pseudo-room which becomes the `location` when there is no light + (although the player object is not moved there). + +Library constants +================= + +In addition to the standard constants `true` (1), `false` (0) and `nothing` +(0), the Library defines `NULL` (-1) for an `{action}`, `{property}` or +`{pronoun}` whose current value is undefined. + +`LIBRARY_PARSER`, `LIBRARY_ENGLISH`, `LIBRARY_VERBLIB` and +`LIBRARY_GRAMMAR` are defined to mark the end of inclusion of `Parser.h`, +`English.h`, `VerbLib.h` and `Grammar.h` respectively. + +User-defined constants +====================== + +Some constants control features rather than represent values. + +`AMUSING_PROVIDED` + Activates the `Amusing` entry point. + +`COMMENT_CHARACTER = '{char}'` + Introduces a comment line ignored by the parser (default "*"). + +`DEATH_MENTION_UNDO` + Offers "UNDO the last move" at game end. + +`DEBUG` + Activates the debug commands. + +`Headline = "{string}"` + **Mandatory**: game style, copyright info, etc. + +`MANUAL_PRONOUNS` + Pronouns reflect only objects mentioned by the player. + +`MAX_CARRIED = {expr}` + Limit on direct possessions that the player can carry (default 100). + +`MAX_SCORE = {expr}` + Maximum game score (default 0). + +`MAX_TIMERS = {expr}` + Limit on active timers/daemons (default 32). + +`NO_PLACES` + "`OBJECTS`" and "`PLACES`" verbs are barred. + +`NO_SCORE` + Game doesn't use scoring. + +`NUMBER_TASKS = {expr}` + Number of `scored` tasks (default 1). + +`OBJECT_SCORE = {expr}` + For taking a `scored` object for the first time (default 4). + +`ROOM_SCORE = {expr}` + For visiting a `scored` room for the first time (default 5). + +`SACK_OBJECT = {obj_id}` + A `container` object where the game places held objects. + +`START_MOVE = {expr}` + Initial value of turns counter (default 0). + +`Story = "{string}"` + **Mandatory**: the name of the story. + +`TASKS_PROVIDED` + Activates the task scoring system. + +`USE_MODULES` + Activates linking with pre-compiled library modules. + +`WITHOUT_DIRECTIONS` + De-activates standard compass directions (bar "`IN`" and "`OUT`"). Place + alternative directions in the `compass`. + +Library variables +================= + +`action` + The current `{action}`. + +`actor` + The target of an instruction: the player, or an NPC. + +`deadflag` + Normally 0: 1 indicates a regular death, 2 indicates that the player has + won, 3 or more denotes a user-defined end. + +`inventory_stage` + Used by `invent` and `list_together` properties. + +`keep_silent` + Normally `false`; `true` makes most group 2 actions silent. + +`location` + The player's current room; unless that's dark, when it contains + `thedark`, `real_location` contains the room. + +`notify_mode` + Normally `true`: `false` remains silent when score changes. + +`noun` + The primary focus object for the current action. + +`player` + The object acting on behalf of the human player. + +`real_location` + The player's current room when in the dark. + +`score` + The current score. + +`second` + The secondary focus object for the current action. + +`self` + The object which received a message. (Note: a run-time variable, not a + compile-time constant.) + +`sender` + The object which sent a message (or `nothing`). + +`task_scores` + A byte array holding scores for the task scoring system. + +`the_time` + The game's clock, in minutes 0..1439 since midnight. + +`turns` + The game's turn counter. + +`wn` + The input stream word number, counting from 1. + +Library routines +================ + +`Achieved({expr})` + A scored task has been achieved. + +`AfterRoutines()` + In a group 2 action, controls output of "after" messages. + +`AllowPushDir()` + An object can be pushed from one location to another. + +`Banner()` + Prints the game banner. + +`ChangePlayer({obj_id,flag})` + Player assumes the persona of the `{obj_id}`. If the optional `{flag}` + is `true`, room descriptions include "(as `{object}`)". + +`CommonAncestor({obj_id1,obj_id2})` + Returns the nearest object which has a parental relationship to both + `{obj_ids}`, or `nothing`. + +`DictionaryLookup({byte_array,length})` + Returns address of word in dictionary, or 0 if not found. + +`DrawStatusLine()` + Refreshes the status line; happens anyway at end of each turn. + +`GetGNAOfObject(obj_id)` + Returns gender-number-animation 0..11 of the `{obj_id}`. + +`HasLightSource(obj_id)` + Returns `true` if the `{obj_id}` has light. + +`IndirectlyContains({parnt_obj_id,obj_id})` + Returns `true` if `{obj_id}` is currently a child or grand-child or + great-grand-child... of the `{parent_object}`. + +`IsSeeThrough(obj_id)` + Returns `true` if light can pass through the `{obj_id}`. + +`Locale({obj_id,"string1","string2"})` + Describes the contents of `{obj_id}`, and returns their number. After + objects with own paragraphs, the rest are listed preceded by `{string1}` + or `{string2}`. + +`LoopOverScope({routine_id,actor})` + Calls `{routine_id}({obj_id})` for each `{obj_id}` in scope. If the + optional `{actor}` is supplied, that defines the scope. + +`MoveFloatingObjects()` + Adjusts positions of game's `found_in` objects. + +`NextWord()` + Returns the next dictionary word in the input stream, incrementing `wn` + by one. Returns `false` if the word is not in the dictionary, or if the + input stream is exhausted. + +`NextWordStopped()` + Returns the next dictionary word in the input stream, incrementing `wn` + by one. Returns `false` if the word is not in the dictionary, -1 if the + input stream is exhausted. + +`NounDomain({obj_id1,obj_id2,type})` + Performs object parsing; see also `ParseToken()`. + +`ObjectIsUntouchable({obj_id,flag})` + Tests whether there is a barrier - a container object which is not open - + between player and `{obj_id}`. Unless the optional `{flag}` is `true`, + outputs "You can't because ... is in the way". Returns `true` is a + barrier is found, otherwise `false`. + +`OffersLight({obj_id})` + Returns `true` if the `{obj_id}` offers light. + +`ParseToken({type,value})` + Performs general parsing; see also `NounDomain()`. + +`PlaceInScope({obj_id})` + Used in an `add_to_scope` property or `scope=` token to put the + `{obj_id}` into scope for the parser. + +`PlayerTo({obj_id,flag})` + Moves the player to `{obj_id}`. Prints its description unless optional + `{flag}` is 1 (no description) or 2 (as if walked in). + +`PrintOrRun({obj_id,property,flag})` + If `{obj_id.property}` is a string, output it (followed by a newline + unless optional `{flag}` is `true`), and return `true`. If it's a + routine, run it and return what the routine returns. + +`PronounNotice({obj_id})` + Associates an appropriate pronoun with the `{obj_id}`. + +`PronounValue('{pronoun}')` + Returns the object to which '`it`' (or '`him`', '`her`', '`them`') + currently refers, or `nothing`. + +`ScopeWithin({obj_id})` + Used in an `add_to_scope` property or `scope=` token to put the contents + of the `{obj_id}` in scope for the parser. + +`SetPronoun('{pronoun}',{obj_id})` + Defines the `{obj_id}` to which a given pronoun refers. + +`SetTime({expr1,expr2})` + + Sets `the_time` to `{expr1}` (in mins 0..1439 since midnight), running at + `{expr2}` - + + | +ve: `{expr2}` minutes pass each turn; + | -ve: `{-expr2}` turns take one minute; + | zero: time stands still. + +`StartDaemon({obj_id})` + Starts the `{obj_id}`\'s daemon. + +`StartTimer({obj_id,expr})` + Starts the `{obj_id}`\'s timer, initialising its `time_left` to `{expr}`. + The object's `time_out` property will be called after that number of + turns have elapsed. + +`StopDaemon({obj_id})` + Stops the `{obj_id}`\'s daemon. + +`StopTimer({obj_id})` + Stops the `{obj_id}`\'s timer. + +`TestScope({obj_id,actor})` + Returns `true` if the `{obj_id}` is in scope, otherwise `false`. If the + optional `{actor}` is supplied, that defines the scope. + +`TryNumber({expr})` + Parses word `{expr}` in the input stream as a number, recognising + decimals, also English words one..twenty. Returns the number 1..10000, + or -1000 if the parse fails. + +`UnsignedCompare({expr1,expr2})` + Returns -1 if `{expr1}` is less than `{expr2}`, 0 if `{expr1}` equals + `{expr2}`, and 1 if `{expr1}` is greater than `{expr2}`. Both + expressions are unsigned, in the range 0..65535. + +`WordAddress({expr})` + Returns a byte array containing the raw text of word `{expr}` in the + input stream. + +`WordInProperty({word,obj_id,property})` + Returns `true` if the dictionary `{word}` is listed in the `{property}` + values for the `{obj_id}`. + +`WordLength({expr})` + Returns the length of word `{expr}` in the input stream. + +`WriteListFrom({obj_id,expr})` + Outputs a list of `{obj_id}` and its siblings, in the given style, an + `{expr}` formed by adding any of: `ALWAYS_BIT`, `CONCEAL_BIT`, + `DEFART_BIT`, `ENGLISH_BIT`, `FULLINV_BIT`, `INDENT_BIT`, `ISARE_BIT`, + `NEWLINE_BIT`, `PARTINV_BIT`, `RECURSE_BIT`, `TERSE_BIT`, `WORKFLAG_BIT`. + +`YesOrNo()` + Returns `true` if the player types "`YES`", `false` for "`NO`". + +`ZRegion({arg})` + Returns the type of its `{arg}` : 3 for a string address, 2 for a routine + address, 1 for an object number, or 0 otherwise. + +Object properties +================= + +Where the `value` of a property can be a routine, several formats are +possible (but remember: embedded "`]`" returns `false`, standalone "`]`" +returns `true`): + + | `{property} [; {stmt}; {stmt}; ... ]` + | `{property} [; return {routine_id}(); ]` + | `{property} [; {routine_id}(); ]` + | `{property} {routine_id}` + +In this appendix, "⊕" marks an additive property. Where a `Class` and an +`Object` of that class both define the same property, the value specified +for the `Object` normally overrides the value inherited from the `Class`. +However, if the property is additive then both values apply, with the +Object's value being considered first. + +`add_to_scope` + For an object: additional objects which follow it in and out of scope. + The `{value}` can be a space-separated list of `{obj_ids}`, or a routine + which invokes `PlaceInScope()` or `ScopeWithin()` to specify objects. + +`after` ⊕ + For an object: receives every `{action}` and `{fake_action}` for which + this is the `{noun}`. For a room: receives every `{action}` which occurs + here. + + The `{value}` is a routine of structure similar to a `switch` statement, + having cases for the appropriate `{actions}` (and an optional `default` + as well); it is invoked after the action has happened, but before the + player has been informed. The routine should return `false` to continue, + telling the player what has happened, or `true` to stop processing the + action and produce no further output. + +`article` + For an object: the object's indefinite article - the default is + automatically "a", "an" or "some". The `{value}` can be a string, or a + routine which outputs a string. + +`articles` + For a non-English object: its definite and indefinite articles. The + `{value}` is an array of strings. + +`before` ⊕ + For an object: receives every `{action}` and `{fake_action}` for which + this is the `{noun}`. For a room: receives every action which occurs + here. + + The `{value}` is a routine invoked before the action has happened. See + `after`. + +`cant_go` + For a room: the message when the player attempts an impossible exit. The + `{value}` can be a string, or a routine which outputs a string. + +`capacity` + For a `container` or `supporter` object: the number of objects which can + be placed in or on it - the default is 100. + + For the player: the number which can be carried - `selfobj` has an + initial capacity of `MAX_CARRIED`. + + The `{value}` can be a number, or a routine which returns a number. + +`d_to` + For a room: a possible exit. The `{value}` can be + + * `false` (the default): not an exit; + * a string: output to explain why this is not an exit; + * a `{room}`: the exit leads to this room; + * a `door` object: the exit leads through this door; + * a routine which should return `false`, a string, a `{room}`, a `door` + object, or `true` to signify "not an exit" and produce no further + output. + +`daemon` + The `{value}` is a routine which can be activated by + `StartDaemon({obj_id})` and which then runs once each turn until + deactivated by `StopDaemon({obj_id})`. + +`describe` ⊕ + For an object: called before the object's description is output. For a + room: called before the room's (long) description is output. + + The `{value}` is a routine which should return `false` to continue, + outputting the usual description, or `true` to stop processing and + produce no further output. + +`description` + For an object: its description (output by `Examine`). + + For a room: its long description (output by `Look`). + + The `{value}` can be a string, or a routine which outputs a string. + +`door_dir` + For a `compass` object (`d_obj`, `e_obj`, ...): the direction in which an + attempt to move to this object actually leads. + + For a `door` object: the direction in which this door leads. + + The `{value}` can be a directional property (`d_to`, `e_to`, ...), or a + routine which returns such a property. + +`door_to` + For a `door` object: where it leads. The value can be + + * `false` (the default): leads nowhere; + * a string: output to explain why door leads nowhere; + * a `{room}`: the door leads to this room; + * a routine which should return `false`, a string, a `{room}`, or `true` + to signify "leads nowhere" without producing any output. + +`e_to` + See `d_to`. + +`each_turn` ⊕ + Invoked at the end of each turn (after all appropriate daemons and + timers) whenever the object is in scope. The `{value}` can be a string, + or a routine. + +`found_in` + For an object: the rooms where this object can be found, unless it has + the `absent` attribute. The `{value}` can be + + * a space-separated list of `{rooms}` (where this object can be found) or + `{obj_ids}` (whose locations are tracked by this object); + * a routine which should return `true` if this object can be found in the + current location, otherwise `false`. + +`grammar` + For an `animate` or `talkable` object: the `{value}` is a routine called + when the parser knows that this object is being addressed, but has yet to + test the grammar. The routine should return `false` to continue, `true` + to indicate that the routine has parsed the entire command, or a + dictionary word ('`word`' or -'`word`'). + +`in_to` + See `d_to`. + +`initial` + For an object: its description before being picked up. + + For a room: its description when the player enters the room. + + The `{value}` can be a string, or a routine which outputs a string. + +`inside_description` + For an `enterable` object: its description, output as part of the room + description when the player is inside the object. + + The `{value}` can be a string, or a routine which outputs a string. + +`invent` + For an object: the `{value}` is a routine for outputting the object's + inventory listing, which is called twice. On the first call nothing has + been output; `inventory_stage` has the value 1, and the routine should + return `false` to continue, or `true` to stop processing and produce no + further output. On the second call the object's indefinite article and + short name have been output, but not any subsidiary information; + `inventory_stage` has the value 2, and the routine should return `false` + to continue, or `true` to stop processing and produce no further output. + +`life` ⊕ + For an `animate` object: receives person-to-person actions (`Answer`, + `Ask`, `Attack`, `Give`, `Kiss`, `Order`, `Show`, `Tell`, `ThrowAt` and + `WakeOther`) for which this is the `{noun}`. The `{value}` is a routine + of structure similar to a `switch` statement, having cases for the + appropriate `{actions}` (and an optional default as well). The routine + should return `false` to continue, telling the player what has happened, + or `true` to stop processing the action and produce no further output. + +`list_together` + + For an object: groups related objects when outputting an inventory or + room contents list. The `{value}` can be + + * a `{number}`: all objects having this value are grouped; + * a `{string}`: all objects having this value are grouped as a count of + the string; + * a routine which is called twice. On the first call nothing has been + output; `inventory_stage` has the value 1, and the routine should + return `false` to continue, or `true` to stop processing and produce no + further output. On the second call the list has been output; + `inventory_stage` has the value 2, and there is no test on the return + value. + +`n_to` + See `d_to`. + +`name` ⊕ + Defines a space-separated list of words which are added to the Inform + dictionary. Each word can be supplied in apostrophes '...' or quotes + "..."; in all other cases only words in apostrophes update the + dictionary. + + For an object: identifies this object. + + For a room: outputs "does not need to be referred to". + +`ne_to` + See `d_to`. + +`number` + For an object or room: the `{value}` is a general-purpose variable freely + available for use by the program. A `player` object must provide (but + not use) this variable. + +`nw_to` + See `d_to`. + +`orders` ⊕ + For an `animate` or `talkable` object: the `{value}` is a routine called + to carry out the player's orders. The routine should return `false` to + continue, or `true` to stop processing the action and produce no further + output. + +`out_to` + See `d_to`. + +`parse_name` + For an object: the `{value}` is a routine called to parse an object's + name. The routine should return zero if the text makes no sense, -1 to + cause the parser to resume, or the positive number of words matched. + +`plural` + For an object: its plural form, when in the presence of others like it. + The `{value}` can be a string, or a routine which outputs a string. + +`react_after` + For an object: detects nearby actions - those which take place when this + object is in scope. The `{value}` is a routine invoked after the action + has happened, but before the player has been informed. See `after`. + +`react_before` + For an object: detects nearby actions - those which take place when this + object is in scope. The `{value}` is a routine invoked before the action + has happened. See `after`. + +`s_to` + +`se_to` + See `d_to`. + +`short_name` + For an object: an alternative or extended short name. The `{value}` can + be a string, or a routine which outputs a string. The routine should + return `false` to continue by outputting the object's *actual* short name + (from the head of the object definition), or `true` to stop processing + the action and produce no further output. + +`short_name_indef` + For a non-English object: the short name when preceded by an indefinite + object. The `{value}` can be a string, or a routine which outputs a + string. + +`sw_to` + See `d_to`. + +`time_left` + For a timer object: the `{value}` is a variable to hold the number of + turns left until this object's timer - activated and initialised by + `StartTimer({obj_id})` - counts down to zero and invokes the object's + `time_out` property. + +`time_out` + For a timer object: the `{value}` is a routine which is run when the + object's `time_left` value - initialised by `StartTimer({obj_id})`, and + not in the meantime cancelled by `StopTimer({obj_id})` - counts down to + zero. + +`u_to` + +`w_to` + See `d_to`. + +`when_closed` + +`when_open` + For a `container` or `door` object: used when including this object in a + room's long description. The `{value}` can be a string, or a routine + which outputs a string. + +`when_off` + +`when_on` + For a `switchable` object: used when including this object in a room's + long description. The `{value}` can be a string, or a routine which + outputs a string. + +`with_key` + For a `lockable` object: the `{obj_id}` (generally some kind of key) + needed to lock and unlock the object, or `nothing` if no key fits. + +Object attributes +================= + +`absent` + For a floating object (one with a `found_in` property, which can + appear in many rooms): is no longer there. + +`animate` + For an object: is a living creature. + +`clothing` + For an object: can be worn. + +`concealed` + For an object: is present but hidden from view. + +`container` + For an object: other objects can be put in (but not on) it. + +`door` + For an object: is a door or bridge between rooms. + +`edible` + For an object: can be eaten. + +`enterable` + For an object: can be entered. + +`female` + For an `animate` object: is female. + +`general` + For an object or room: a general-purpose flag. + +`light` + For an object or room: is giving off light. + +`lockable` + For an object: can be locked; see the `with_key` property. + +`locked` + For an object: can't be opened. + +`male` + For an `animate` object: is male. + +`moved` + For an object: is being, or has been, taken by the player. + +`neuter` + For an `animate` object: is neither male nor female. + +`on` + For a `switchable` object: is switched on. + +`open` + For a `container` or door object: is open. + +`openable` + For a `container` or `door` object: can be opened. + +`pluralname` + For an object: is plural. + +`proper` + For an object: the short name is a proper noun, therefore not to be + preceded by "The" or "the". + +`scenery` + For an object: can't be taken; is not listed in a room description. + +`scored` + For an object: awards `OBJECT_SCORE` points when taken for the first + time. For a room: awards `ROOM_SCORE` points when visited for the + first time. + +`static` + For an object: can't be taken. + +`supporter` + For an object: other objects can be put on (but not in) it. + +`switchable` + For an object: can be switched off or on. + +`talkable` + For an object: can be addressed in "object, do this" style. + +`transparent` + For a `container` object: objects inside it are visible. + +`visited` + For a room: is being, or has been, visited by the player. + +`workflag` + Temporary internal flag, also available to the program. + +`worn` + For a `clothing` object: is being worn. + +Optional entry points +===================== + +These routines, if you supply them, are called when shown. + +`AfterLife()` + Player has died; `deadflag=0` resurrects. + +`AfterPrompt()` + The ">" prompt has been output. + +`Amusing()` + Player has won; `AMUSING_PROVIDED` is defined. + +`BeforeParsing()` + The parser has input some text, set up the buffer and parse tables, and + initialised `wn` to 1. + +`ChooseObjects({object,flag})` + Parser has found "`ALL`" or an ambiguous noun phrase and decided that + `{object}` should be excluded (`flag` is 0), or included (`flag` is 1). + The routine should return 0 to let this stand, 1 to force inclusion, or 2 + to force exclusion. If `flag` is 2, parser is undecided; routine should + return appropriate score 0..9. + +`DarkToDark()` + The player has gone from one dark room to another. + +`DeathMessage()` + The player has died; `deadflag` is 3 or more. + +`GamePostRoutine()` + Called after all actions. + +`GamePreRoutine()` + Called before all actions. + +`Initialise()` + **Mandatory; note British spelling**: called at start. Must set + `location`; can return 2 to suppress game banner. + +`InScope()` + Called during parsing. + +`LookRoutine()` + Called at the end of every `Look` description. + +`NewRoom()` + Called when room changes, before description is output. + +`ParseNoun({object})` + Called to parse the `{object}`\'s name. + +`ParseNumber({byte_array,length})` + Called to parse a number. + +`ParserError({number})` + Called to handle an error. + +`PrintRank()` + Completes the output of the score. + +`PrintTaskName({number})` + Prints the name of the task. + +`PrintVerb({addr})` + Called when an unusual verb is printed. + +`TimePasses()` + Called after every turn. + +`UnknownVerb()` + Called when an unusual verb is encountered. + +Group 1 actions +=============== + +Group 1 actions support the 'meta' verbs. These are the standard actions +and their triggering verbs. + +============== ===================================================== +`CommandsOff` "`RECORDING OFF`" +`CommandsOn` "`RECORDING [ON]`" +`CommandsRead` "`REPLAY`" +`FullScore` "`FULLSCORE`", "`FULL [SCORE]`" +`LMode1` "`BRIEF`", "`NORMAL`" +`LMode2` "`LONG`", "`VERBOSE`" +`LMode3` "`SHORT`", "`SUPERBRIEF`" +`NotifyOff` "`NOTIFY OFF`" +`NotifyOn` "`NOTIFY [ON]`" +`Objects` "`OBJECTS`" +`Places` "`PLACES`" +`Pronouns` "`[PRO]NOUNS`" +`Quit` "`DIE`", "`Q[UIT]`" +`Restart` "`RESTART`" +`Restore` "`RESTORE`" +`Save` "`CLOSE`" +`Score` "`SCORE`" +`ScriptOff` "`[TRAN]SCRIPT OFF`", "`NOSCRIPT`", "`UNSCRIPT`" +`ScriptOn` "`[TRAN]SCRIPT [ON]`" +`Verify` "`VERIFY`" +`Version` "`VERSION`" +============== ===================================================== + +and the debug tools. + +=============== =================================================== +`ActionsOff` "`ACTIONS OFF`" +`ActionsOn` "`ACTIONS [ON]`" +`ChangesOff` "`CHANGES OFF`" +`ChangesOn` "`CHANGES [ON]`" +`Gonear` "`GONEAR`" +`Goto` "`GOTO`" +`Predictable` "`RANDOM`" +`RoutinesOff` "`MESSAGES OFF`", "`ROUTINES OFF`" +`RoutinesOn` "`MESSAGES [ON]`", "`ROUTINES [ON]`" +`Scope` "`SCOPE`" +`Showobj` "`SHOWOBJ`" +`Showverb` "`SHOWVERB`" +`TimersOff` "`DAEMONS OFF`", "`TIMERS OFF`" +`TimersOn` "`DAEMONS [ON]`", "`TIMERS [ON]`" +`TraceLevel` "`TRACE number`" +`TraceOff` "`TRACE OFF`" +`TraceOn` "`TRACE [ON]`" +`XAbstract` "`ABSTRACT`" +`XPurloin` "`PURLOIN`" +`XTree` "`TREE`" +=============== =================================================== + +Group 2 actions +=============== + +Group 2 actions usually work, given the right circumstances. + +============= ============================================================= +`Close` "`CLOSE [UP]`", "`COVER [UP]`", "`SHUT [UP]`" +`Disrobe` "`DISROBE`", "`DOFF`", "`REMOVE`", "`SHED`", "`TAKE OFF`" +`Drop` "`DISCARD`", "`DROP`", "`PUT DOWN`", "`THROW`" +`Eat` "`EAT`" +`Empty` "`EMPTY [OUT]`" +`EmptyT` "`EMPTY IN|INTO|ON|ONTO|TO`" +`Enter` "`CROSS`", "`ENTER`", "`GET IN|INTO|ON|ONTO`", + "`GO IN|INSIDE|INTO|THROUGH`", + "`LEAVE IN|INSIDE|INTO|THROUGH`", "`LIE IN|INSIDE|ON`", + "`LIE ON TOP OF`", + "`RUN IN|INSIDE|INTO|THROUGH`", "`SIT IN|INSIDE|ON`", + "`SIT ON TOP OF`", "`STAND ON`", + "`WALK IN|INSIDE|INTO|THROUGH`" +`Examine` "`CHECK,`" "`DESCRIBE`", "`EXAMINE`", + "`L[OOK] AT`", "`READ`", "`WATCH`", "`X`" +`Exit` "`EXIT`", "`GET OFF|OUT|UP`", + "`LEAVE`", "`OUT[SIDE]`", "`STAND [UP]`" +`GetOff` "`GET OFF`" +`Give` "`FEED [TO]`", "`GIVE [TO]`", "`OFFER [TO]`", "`PAY [TO]`" +`Go` "`GO`", "`LEAVE`", "`RUN`", "`WALK`" +`GoIn` "`CROSS`", "`ENTER`", "`IN[SIDE]`" +`Insert` "`DISCARD IN|INTO`", + "`DROP DOWN|IN|INTO`", + "`INSERT IN|INTO`", + "`PUT IN|INSIDE|INTO`", + "`THROW DOWN|IN|INTO`" +`Inv` "`I[NV]`", "`INVENTORY`", "`TAKE INVENTORY`" +`InvTall` "`I[NV] TALL`", "`INVENTORY TALL`" +`InvWide` "`I[NV] WIDE`", "`INVENTORY WIDE`" +`Lock` "`LOCK WITH`" +`Look` "`L[OOK]`" +`Open` "`OPEN`", "`UNCOVER`", "`UNDO`", "`UNWRAP`" +`PutOn` "`DISCARD ON|ONTO`", + "`DROP ON|ONTO`", + "`PUT ON|ONTO`", + "`THROW ON|ONTO`" +`Remove` "`GET FROM`", "`REMOVE FROM`", "`TAKE FROM|OFF`" +`Search` "`L[OOK] IN|INSIDE|INTO|THROUGH`", "`SEARCH`" +`Show` "`DISPLAY [TO]`", "`PRESENT [TO]`", "`SHOW [TO]`" +`SwitchOff` "`CLOSE OFF`", "`SCREW OFF`", + "`SWITCH OFF`", "`TURN OFF`", + "`TWIST OFF`" +`SwitchOn` "`SCREW ON`", "`SWITCH ON`", + "`TURN ON`", "`TWIST ON`" +`Take` "`CARRY`", "`GET`", "`HOLD`", + "`PEEL [OFF]`", "`PICK UP`", + "`REMOVE`", "`TAKE`" +`Transfer` "`CLEAR TO`", "`MOVE TO`", + "`PRESS TO`", "`PUSH TO`", + "`SHIFT TO`", "`TRANSFER TO`" +`Unlock` "`OPEN WITH`", "`UNDO WITH`", + "`UNLOCK WITH`" +`VagueGo` "`GO`", "`LEAVE`", "`RUN`", "`WALK`" +`Wear` "`DON`", "`PUT ON`", "`WEAR`" +============= ============================================================= + +Group 3 actions +=============== + +Group 3 actions are by default stubs which output a message and stop at the +"before" stage (so there is no "after" stage). + +============= ============================================================= +`Answer` "`ANSWER TO`", "`SAY TO`", + "`SHOUT TO`", "`SPEAK TO`" +`Ask` "`ASK ABOUT`" +`AskFor` "`ASK FOR`" +`Attack` "`ATTACK`", "`BREAK`", "`CRACK`", + "`DESTROY`", "`FIGHT`", "`HIT`", + "`KILL`", "`MURDER`", "`PUNCH`", + "`SMASH`", "`THUMP`", "`TORTURE`", + "`WRECK`" +`Blow` "`BLOW`" +`Burn` "`BURN [WITH]`", "`LIGHT [WITH]`" +`Buy` "`BUY`" "`PURCHASE`" +`Climb` "`CLIMB [OVER|UP]`", "`SCALE`" +`Consult` "`CONSULT ABOUT|ON`", + "`LOOK UP IN`", + "`READ ABOUT IN`", "`READ IN`" +`Cut` "`CHOP,`" "`CUT`", "`PRUNE`", "`SLICE`" +`Dig` "`DIG [WITH]`" +`Drink` "`DRINK`", "`SIP`", "`SWALLOW`" +`Fill` "`FILL`" +`Jump` "`HOP`", "`JUMP`", "`SKIP`" +`JumpOver` "`HOP OVER`", "`JUMP OVER`", "`SKIP OVER`" +`Kiss` "`EMBRACE`", "`HUG`", "`KISS`" +`Listen` "`HEAR`", "`LISTEN [TO]`" +`LookUnder` "`LOOK UNDER`" +`Mild` Various mild swearwords. +`No` "`NO`" +`Pray` "`PRAY`" +`Pull` "`DRAG`" "`PULL`" +`Push` "`CLEAR`", "`MOVE`", "`PRESS`", + "`PUSH`", "`SHIFT`" +`PushDir` "`CLEAR`", "`MOVE`", "`PRESS`", + "`PUSH`", "`SHIFT`" +`Rub` "`CLEAN`", "`DUST`", "`POLISH`", + "`RUB`", "`SCRUB`", "`SHINE`", + "`SWEEP`", "`WIPE`" +`Set` "`ADJUST`", "`SET`" +`SetTo` "`ADJUST TO`", "`SET TO`" +`Sing` "`SING`" +`Sleep` "`NAP`", "`SLEEP`" +`Smell` "`SMELL`", "`SNIFF`" +`Sorry` "`SORRY`" +`Squeeze` "`SQUASH`", "`SQUEEZE`" +`Strong` Various strong swearwords. +`Swim` "`DIVE`", "`SWIM`" +`Swing` "`SWING [ON]`" +`Taste` "`TASTE`" +`Tell` "`TELL ABOUT`" +`Think` "`THINK`" +`ThrowAt` "`THROW AGAINST|AT|ON|ONTO`" +`Tie` "`ATTACH [TO]`", "`FASTEN [TO]`", + "`FIX [TO]`", "`TIE [TO]`" +`Touch` "`FEEL,`" "`FONDLE`", "`GROPE`", "`TOUCH`" +`Turn` "`ROTATE`", "`SCREW`", "`TURN`", + "`TWIST`", "`UNSCREW`" +`Wait` "`WAIT`" "`Z`" +`Wake` "`AWAKE[N]`", "`WAKE [UP]`" +`WakeOther` "`AWAKE[N]`", "`WAKE [UP]`" +`Wave` "`WAVE`" +`WaveHands` "`WAVE`" +`Yes` "`Y[ES]`" +============= ============================================================= + +Fake actions +============ + +Fake actions handle some special cases, or represent "real" actions from +the viewpoint of the second object. + +================ ======================================================== +`LetGo` Generated by `Remove`. +`ListMiscellany` Outputs a range of inventory messages. +`Miscellany` Outputs a range of utility messages. +`NotUnderstood` Generated when parser fails to interpret some `orders`. +`Order` Receives things not handled by `orders`. +`PluralFound` Tells the parser that `parse_name()` has identified a + plural object. +`Prompt` Outputs the prompt, normally ">". +`Receive` Generated by `Insert` and `PutOn`. +`TheSame` Generated when parser can't distinguish between two + objects. +`ThrownAt` Generated by `ThrowAt`. +================ ======================================================== diff --git a/images/picL.png b/images/picL.png new file mode 100644 index 0000000000000000000000000000000000000000..bd544fa15c888d57bb94a0ebc2c9e2e6f9ea32af GIT binary patch literal 2434 zcmV-|34Qj7P)00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy0%A)?L;wJ)jUzGu000SaNLh0L002k;002k;M#*bF000PkNkltEzLBWzcV%zgqp!K>im8{Kw$SIF9SjaUJuN+BVUcZy(P?@2k^6xa2Pb;nPr8 zv;$yTfKGYogAe2Ha1MZyGtS|c!FhFgE6LiGw?x61KrqmJlV#cdNAQtsiCzB#)tffs za+9QlA;+^j4><>@y;BZOU*MNvAYCrTAGmv-P(itHQT0=#Upi<^v``;{bGQn4{(<}F z2?@@uYL>{LKIa^!s=GmX4@|w`W)#U1nl|ACt1{I%_nAJ z&HAzoPOqOvkQ5uo4sm}m-{JaZ$pgGx?{{)+jcStJ;A?xJyYQ0<({d{D&09ai?*Z-se!;a(J=jw**!4GlT7%`HPkE`=MY4x>sDpU9 zIQ_uob|Z}XTy`dlZIVM!iwb_SnOI~AG3?X^zigg6zX z%(ASp4D128g6d5cefzMc%?@mp1$-$?*&EWy2->N|PNI8FbMCXZY=a^e;BtK}EY<=< z`ikDH+}TUdaP}*F0I+L(Xbh8O2tp$;8Jc<)?1;C(2l&rg8E3~RTMt^J6$@4s&N&IC z_M+Dge0cMgRgHdAZq)=_;Q<<2p%X1_pAW#NJAC>Chl<{QGMBq3&;=^!JnW_C7x?&7 z0)2v)7q49Ux^hm@Cwj?kU^xFN96!JpUZ^^|t7i4Io|R~7IH$evR>=QQ+>%QRyg5{V{m?hKX?m!_Wt8fYP)qL)% z9xF`h7+l}%eDL#U;mG$oc}-Dfb(|h&Tn@tFcQ}oyYSu!)T$en`8HYcEkGt?Lnzb`f z1&6h(0Ix=Iteh)uvh2fsBiA(Lcm*El1+6~m<`CR{hs%z2)IkMop@qayy55F^aJ*bB zyKopW0WSjdti_~*vh6{5b%Q@_qUR?@7E)``z<4i)oYex@SEj)2kz>c3PmTy7{m#k(xx*l%SYh;Zuu@;3d)+!@v-6w z>caZoC4LC*zQZ-rW+*hC48fx|F}Vc)6g=`s(NIIue1O)et}RYSEx&F5y#=)aYX(Zg znQ5{-@YL#qvgmtK+jB(~fMf{;MXw@3Ygh_8y}9CSfr)7^S?pTQ-3Irf2iZb2*m<7x zD|}0{X)lNF!l79gv^|@SQ*>+3WH`_(D^OR!TiPY2#Jd#NYcE9vXah0{Zw+5)S^)dyqfvC ziLR)J`usVb^BNLr3gVvg5`wc@LVR4%0mQQ9G5+3%ek+PZV68IBS3wBcPn94e(_!{x0;tL!);pNFj6+#X&1npfp-b1e0T4}LO^Y7lGe}_*fsAx`L zcxba{A+n&{9o}!z>$jVLJ+1a0l+c$r3cz!53g*m4&)G+nd{hj(9y6+<}J=@Ta20RRt}j5eOAo zPP&Gu?WC{XFkGE=8|4wp@$muL_|mmfIFvDa9;kNYE?+I)y7%rjuX%+xxAy$)0PQ*? z3(_VOo(r-Z=^sV*yhg=|<9PALJz3%h_)`wUGHAWFSrSQeLvXL{YWZ?K9{cGU_Tdjb z(PJhU(6w5(v=G2nF#Um`>23k< zN0oPY`{5Ys5sr*!p?hl0jdJAY1lPv37sp$Nc!Mvuuk}W~qLxQ*y?;@8S!RTRo4!!M zDocJ&nrrQ74X!7}>ok0V-#inyy~Wz1pz35r)!2fp4<3Lt)^yg!nmVf!H`TqfMQ|H}u7p33;001R)MObuX zVRU6WV{&C-bY%cCFfleQFf%PPFjO!$Ix#UiGczkNF*-0XaW=_X0000bbVXQnWMOn= zI&E)cX=Zr