!--------------------------------------------------------------------------
! 10 HELP
!--------------------------------------------------------------------------
!--------------------------------------------------------------------------
! 10.3 HELP
!--------------------------------------------------------------------------

[ HelpSub;
   DoMenu(HelpPrint,HelpMenu, HelpInfo); ];

[ PrintChoices choices i;
   for (i = 0: i < choices-->0: i++) {
       if (pretty_flag == 1)
           print "^      ";
       else {
           print "^   ";
           if (i < 9) print " ";
           print (i + 1), " ";
       }
       print (string) choices-->(i+1);
   }
];

Array TopMenuChoices table [;
   "An introduction to adventure games";
   "Moving around";
   "Manipulating things";
   "Talking to people";
   "Looking things up in books";
   "Miscellaneous commands";
   "Summary of commands";
   "Abbreviations for common commands";
];

[ HelpPrint;
   print "There is information on the following:^";
   PrintChoices(TopMenuChoices);
   new_line; ];

[ HelpMenu;
   switch (menu_item) {
    0: item_width= 6; item_name="Instructions"; return 8;
    1: item_width= 8; item_name="Adventure games";
    2: item_width= 7; item_name="Moving around";
    3: item_width=10; item_name="Manipulating things";
    4: item_width= 9; item_name="Talking to people";
    5: item_width= 9; item_name="Looking things up";
    6: item_width=11; item_name="Miscellaneous commands";
    2: item_width= 8; item_name="Command summary";
    3: item_width= 7; item_name="Abbreviations";
   }
];

[ HelpInfo;
   switch (menu_item) {
    1:
       print "Adventure games (sometimes dignified with the name
           ~interactive fiction~) are a combination of second-person
           story and puzzle-solving game. An adventure game presents you
           with text that puts you in the position of protagonist, and
           invites you to type in commands.^";

       print "^For example, a game might start like this:^";

       print "^    You are standing in the street outside a college.
           ^    The gate is closed.
           ^    >^";

       print "^The prompt invites you to type something. You respond
           with an imperative sentence and the game tries to understand
           your command and to carry it out. For example, you might
           type^";

       print "^    > open the gate^";

       print "^and the game might respond^";

       print "^    Unfortunately, the gate is locked.
           ^    >^";

       print "^Not to be defeated, you try something else:^";

       print "^    > knock at gate
           ^    ~Come in!~ shouts a voice from inside.
           ^    The gate opens.
           ^    > go in
           ^    You enter the college ...^";

       print "^and the game continues. Not all puzzles will be so easy,
           though!^";

       print "^No game can hope to understand every possible input. If
           you try something and the game doesn't understand, then you
           should try rephrasing your command or substituting synonyms
           for some of the words. If you've made several obvious
           attempts and none of them have worked, then the likelihood is
           that you can't do what you wanted to, and you'll have to
           solve your problem in a different way.^";
    2:
       print "The landscape of an adventure game is notionally divided
           into ~rooms~; often these really are rooms, but they can be
           larger places (such as streets or fields or woods) or smaller
           places (such as the northwest corner of the hall).^";

       print "^The name of the room you are in appears at the left of
           the ~status line~ at the top of the screen, and you can get a
           description of what you can see by typing ~look~.^";

       print "^To move from one room to another, you generally enter
           commands like^";

       print "^    go north^";

       print "^or just ~north~ on its own (you are assumed to be blessed
           with an excellent sense of direction). Any of the eight
           compass points may be substituted for ~north~, and in some
           contexts the game also understands the directions ~in~,
           ~out~, ~up~ and ~down~.^";

       print "^When there is a particular landmark to head for, you may
           be able to avoid specifying a compass direction, and instead
           try one of these:^";

       print "^    go through the big door
           ^    enter phone box
           ^    climb tree
           ^    cross bridge^";

       print "^Sometimes movement won't take you to a new room, but will
           let you enter and leave objects in the current room, for
           example:^";

       print "^    enter car
           ^    sit in chair
           ^    stand on lawn^";

       print "^To leave these objects, you might type ~get out~ or
           ~stand up~ or ~exit~.^";

       print "^If you can get into the car and figure out how to turn
           the ignition on, then you may be able to drive it around; to
           do this, just use ~north~, ~south~, and so on. On the other
           hand, if you can't find the ignition keys, you might be
           reduced to trying^";

       print "^    push car west^";
    3:
       print "You can try to pick something up with ~take thing~ and try
           to put it down with ~drop thing~. The command ~take
           inventory~ (or ~inventory~, or ~i~ for short) gives you a
           list of objects that you are carrying.^";

       print "^To look at an object more closely, ~examine~ it (~x~ for
           short).^";

       print "^Objects may be manipulated in many ways: put into (or on
           top of) other objects, pulled, pushed, turned, eaten, and so
           on. Here are some examples:^";

       print "^    take the white rabbit
           ^    put rabbit in the hat
           ^    take rabbit out of the hat
           ^    look in the hat
           ^    unlock brass door with copper key
           ^    open door
           ^    offer shopkeeper the silver coin
           ^    give gold coin to merchant
           ^    turn the dial
           ^    turn on the lamp
           ^    light candle with match
           ^    empty sack into chest
           ^    put picture on mantelpiece
           ^    look under the wooden desk^";

       print "^Some commands can act upon more than one object. ~take
           all~ will attempt to pick up all the loose items in the room;
           ~drop all~ will drop everything you're carrying (except for
           any clothing you're wearing). If you found a packing case
           with a number of things in it, you could type commands like:^";

       print "^    get teddy bear, rabbit and piglet
           ^    remove everything but the brass key from the packing case
           ^    get all the coins except gold, silver and bronze^";

       print "^If you are not explicit enough, the game will try to
           deduce what you meant, and if it succeeds it will tell you
           what it deduced. For example, in reply to ~get teddy bear,
           rabbit and piglet~, the game might say^";

       print "^    (from the packing case)^";

       print "^so that you know what has been assumed on your behalf. If
           there had been two rabbits you might have meant, it would
           reply with^";

       print "^    Which do you mean, the white rabbit or the Welsh
           rabbit?^";

       print "^You may tell it which (or reply ~either~ or ~both~ or
           ~all~), or else give up and do something else instead. The
           game can gradually accumulate information about a command,
           for example:^";

       print "^    > unlock door
           ^    Which door do you mean, the big door or the small door?
           ^    > big
           ^    What do you want to unlock the big door with?
           ^    > the brass key
           ^    Which brass key do you mean, the brass doorkey or the
           Brass City key?
           ^    > either
           ^    (the brass doorkey)
           ^    That doesn't seem to fit the lock.^";

       print "^If you don't mind which object you use, you can always
           say something like^";

       print "^    put a coin in the slot^";

       print "^and the game will make a sensible choice and tell you
           what it was.^";

       print "^Sometimes the game deduces that you wish to do something
           that you didn't explicitly say you wanted to. In such
           circumstances, it will tell you what it assumed on your
           behalf. For example:^";

       print "^    > give banana to gorilla
           ^    (first taking the banana)
           ^    The gorilla devours the banana, but it still won't let
           you pass.^";

       print "^The object ~it~ refers to the last thing manipulated, and
           ~him~ or ~her~ to the last person of the appropriate sex to
           be mentioned.^";

       print "^Sometimes an object will be mentioned in the description
           of a room purely for atmospheric value and will play no
           other part in the game. If you try to refer to such an
           object, the game is liable to respond^";

       print "^    You don't need to refer to that.^";

       print "^Your best course of action is to leave these non-existent
           objects alone.^";
    4:
       print "To say a single word, or a few words, to someone, you can
           use commands like^";

       print "^    answer yes
           ^    say boo to goose
           ^    ask chemist about nitrogen
           ^    ask Einstein about the theory of relativity
           ^    ask the police constable the time^";

       print "^and the characters in ~Coming Home~ tend to be quite
           talkative when you approach them like this.^^To order someone
           about, you can use commands like^";

       print "^    police constable, give me your helmet
           ^    jailor, unlock the cell door
           ^    young man, go west
           ^    Sherlock, follow me^";

       print "^though, of course, they are not guaranteed to obey you!^";
    5:
       print "The command ~read book~ will provide a quick summary of
           the contents of a book, but to get more information from
           certain texts you may have to look things up.^^To look up a
           single-word subject, you can type^";

       print "^    look up Julius^";

       print "^(where there is only one book you could have meant), or^";

       print "^    look up Claudius in the Twelve Caesars
           ^    consult Suetonius about Augustus^";

       print "^Where you have a more precise reference to hand, you can
           try commands like^";

       print "^    read page 256 of the Decline and Fall
           ^    look up page 7 in Pliny
           ^    look up Genesis 14 in Bible^";
    6:
       print "To save the current state of your game into a file, type
           ~save~; to go back to a saved game, type ~restore~. These
           commands will ask you for the name of the file, so there is
           no reason why you shouldn't have as many saved games as you
           have room for on your computer.^";

       print "^To start ~Coming Home~ again from the beginning, type
           ~restart~, and to stop playing, type ~quit~.^";

       print "^If you want to save a transcript of your game for later
           perusal, use the command ~script on~ to start transcription
           (the game will prompt you for a file name) and ~script off~
           to stop.^";

       print "^The command ~score~ will give you your score, and
           ~fullscore~ or ~full~ will give a more detailed description
           of how you scored those points. When your score changes, you
           are notified of the fact by messages like^";

       print "^    [Your score has just gone up by one point]^";

       print "^The command ~notify off~ turns these messages off, and
           ~notify on~ turns them back on again.^";

       print "^Usually the game will give you a long description of a
           location when you first visit it and short descriptions
           thereafter (unless you explicitly request a long one with
           ~look~). If you get bored of the long descriptions, you can
           turn them off with ~short~ or ~superbrief~. If you're
           forgetful and always want long descriptions, type ~long~ or
           ~verbose~. To restore the usual state of affairs, type
           ~normal~ or ~brief~.^";

       print "^~Coming Home~ displays quotations in boxes from time to
           time; if you don't like this feature, you can turn it off
           using ~quotes off~ and back on again with ~quotes on~.^";

       print "^If you regret your last command, then you can type ~undo~
           to go back to the state before you typed it (you can even
           type ~undo~ at the ~Would you like to RESTART, RESTORE or
           QUIT?~ prompt after you have died). However, the ~undo~
           command doesn't work on all interpreters, and you can only
           undo one command.^";

       print "^The commands described above don't cause things to happen
           in the game and don't take up any game time; nor do any
           commands you type which the game fails to understand.^";

       print "^Some simple typing mistakes can be correct with ~oops~
           followed by the word you had intended to type, for example:^";

       print "^    take the swrod from the stone
           ^    oops sword^";

       print "^You can repeat the last command you typed with ~again~,
           you can do nothing for a game turn by typing ~wait~, and you
           can string several commands into a single input by separating
           them with ~then~ (or commas, or full stops), for example:^";

       print "^    take coin. south. again. wait. put coin in box
           ^    unwrap chocolate then eat it^";
    7:
       print "These commands typically do nothing in the world of the
           game, but control how it is presented to you:^";

       font off;
       print "
           ^brief            use long and short room descriptions
           ^die              quit the game
           ^fullscore        show how your score was achieved
           ^inventory        list your possessions
           ^inventory wide   paragraphed inventory lists
           ^inventory tall   one item per line inventory lists
           ^long             always use long room descriptions
           ^normal           use long and short room descriptions
           ^noscript         turn transcripting off
           ^notify on/off    turn score notification on and off
           ^nouns            show current settings of ~it~, ~him~, ~her~
           ^objects          list the objects you have held
           ^oops <word>      correct mistake in previous input
           ^places           list the places you have been
           ^pronouns         show current settings of ~it~, ~him~, ~her~
           ^quit             quit the game
           ^quotes on/off    turn the display of quotations on and off
           ^restart          start the game again from the beginning
           ^restore          restore a saved game from a file
           ^save             save the game to a file
           ^score            show your current score
           ^script on/off    start and stop transcription to a file
           ^short            always use short room descriptions
           ^superbrief       always use short room descriptions
           ^undo             undo last command, if possible
           ^unscript         turn transcripting off
           ^verbose          always use long room descriptions
           ^verify           check that the story file is undamaged
           ^version          give version and release numbers^";

       font on;
       print "^These are useful commands that affect the world of the
           game:^";

       font off;
       print "
           ^again            repeat the last command
           ^close <thing>    shut a container or a door
           ^drop <thing>     let go of an object
           ^enter <thing>    enter an object
           ^examine <thing>  inspect something closely
           ^get <thing>      pick up an object
           ^give x to y      offer a gift to someone
           ^go <direction>   travel in a compass direction
           ^in               go in (if this is unambiguous)
           ^look             describe your surroundings
           ^look up x in y   look up something in a book
           ^open <thing>     open a container or a door
           ^out              go out (if this is unambiguous)
           ^put x in y       put an object in a container
           ^take <thing>     pick up an object
           ^unlock x with y  unlock something with a key
           ^wait             do nothing for a turn^";

       font on;
       print "^There are, of course, many more.^";
    8:
       print "The game knows several useful abbreviations:^
           ^    g for again
           ^    i for inventory
           ^    l for look
           ^    n for north (and so on)
           ^    o for oops
           ^    q for quit
           ^    x for examine
           ^    z for wait (short for ~zzz~).^";
   } ];

Verb meta "help"
   *                                   -> Help;