home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / agt1.zip / AGT-DOC.TXT next >
Text File  |  1988-05-29  |  239KB  |  5,912 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                   
  8.  
  9.  
  10.  
  11.  
  12.  
  13.                                                            
  14.                           THE ADVENTURE GAME TOOLKIT
  15.  
  16.   
  17.  
  18.  
  19.   
  20.   
  21.                                       By
  22.                                                                                
  23.              
  24.                               David R. Malmberg 
  25.                                         
  26.                                       and
  27.  
  28.                                 Mark J. Welch 
  29.  
  30.  
  31.  
  32.  
  33.                                 Distributed by
  34.  
  35.                                    Softworks
  36.                                43064 Via Moraga 
  37.                          Mission San Jose, California
  38.                                      94539
  39.   
  40.                                 (415) 659-0533 
  41.   
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.   
  50.   
  51.  The Adventure Game Toolkit (AGT), including all source code, object code, and
  52.  manuals on paper or on disk, is copyright 1987 and 1988 by Mark J. Welch and
  53.  David R. Malmberg.  Portions originally copyright 1985 and 1986 by Mark J.
  54.  Welch.
  55.  
  56.  
  57.  
  58.  COPYRIGHT, TRADEMARKS AND WARRANTY 
  59.  
  60.   
  61.  COPYRIGHT:  
  62.      The Adventure Game Toolkit is a copyrighted work, just like a book.  It 
  63.  is protected by United States copyright law and by applicable international
  64.  treaty provisions.  All text, program, and source code files on disk(s) are
  65.  copyright 1987 and 1988 by Mark J. Welch and David R. Malmberg.  Portions of
  66.  the manual and source code are copyright 1985 and 1986 by Mark J. Welch.
  67.  
  68.  
  69.  TRADEMARKS: 
  70.      "Adventure Game Toolkit" and "AGT" are trademarks of Mark J. Welch and
  71.  David R. Malmberg.
  72.  
  73.    
  74.  WARRANTY: 
  75.      The program disk(s) and printed manual are warranted to be free from
  76.  defects in materials and workmanship for a period of 90 days from the date of
  77.  purchase.  In the event of a defect, registered users of AGT may obtain a
  78.  replacement copy of the program disk(s) and/or manual from Softworks.  The
  79.  remedy for any breach of warranty shall be limited to replacement or refund
  80.  and shall not encompass any other damages, including but not limited to loss
  81.  of profit, special, incidental, consequential, or other similar claims.
  82.  
  83.   
  84.  DISCLAIMER: 
  85.      THE ADVENTURE GAME TOOLKIT (AGT) COMES WITH NO OTHER WARRANTIES OF ANY
  86.  KIND, INCLUDING WARRANTY OF MERCHANTABILITY OR OF FITNESS FOR A PARTICULAR
  87.  PURPOSE. THE ADVENTURE GAME TOOLKIT (AGT) IS AVAILABLE AS IS. IN NO EVENT
  88.  WILL THE AUTHORS BE LIABLE FOR DAMAGES, INCLUDING ANY LOST PROFITS OR
  89.  INCIDENTAL AND CONSEQUENTIAL DAMAGES, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF
  90.  THE POSSIBILITY OF SUCH DAMAGES.
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.                                        i
  117.  
  118.   
  119.  LICENSE TERMS (Shareware Rules)
  120.  
  121.      The Adventure Game Toolkit (AGT) is NOT public domain or free software,
  122.  but is being distributed as "Shareware".  This means that if you are a regular
  123.  user of AGT, you should pay for your copy and become a registered user.  Only
  124.  from the income from your registration fees can the authors continue to
  125.  provide product support, make enhancements to AGT, and stay in business. 
  126.      Non-registered users of this software are granted a limited license to
  127.  make an evaluation copy for trial use on a private non-commercial basis, for
  128.  the express purpose of determining whether AGT is suitable for their needs. 
  129.  At the end of this trial period, the user should either register his/her copy
  130.  of AGT or discontinue using it.
  131.      Registered users of AGT may use AGT on any computer, provided that AGT is
  132.  used on only one computer at a time, and that the copy is not routinely used
  133.  on that computer by other people.  If other people use the copy of AGT
  134.  routinely, they should become registered users themselves.  Registered AGT
  135.  users may make archival and working copies of the AGT program disk(s) to back
  136.  up their software and protect their investment.  They may also make evaluation
  137.  copies of AGT for trial use by non-registered users, subject to the terms
  138.  outlined above.
  139.      Operators of electronic bulletin boards (Sysops) are encouraged to post
  140.  the Adventure Game Toolkit and related Adventure Game files for downloading
  141.  by their users.  However, if these bulletin boards also offer AGT-based games
  142.  for "On-Line" or "Doors" play, these Sysops should register their copy of AGT
  143.  because they are using AGT on a routine basis.  Such registration will entitle
  144.  these Sysops to receive a version of AGT especially tailored for use on
  145.  bulletin boards, plus copies of all of the latest AGT games. 
  146.      This license to use AGT does NOT include the right to distribute or sell
  147.  AGT.  Distribution terms are detailed below.
  148.      AGT may be uploaded to and downloaded from commercial systems such as
  149.  CompuServe, the Source, and BIX, so long as the only charge paid by the
  150.  subscriber is for on-line time and there is no charge for the program.  Those
  151.  copying, sharing, and/or electronically transmitting the program are required
  152.  not to delete or modify the copyright notice and restrictive notices from the
  153.  program or documentation; anyone doing so will be treated as a contributory
  154.  copyright violator. 
  155.      The Adventure Game Toolkit documentation may not be modified by users.
  156.  The program may not be separated from the documentation when distributed. 
  157.  Printed or "Xeroxed" copies of the AGT documentation (i.e., this manual) may
  158.  not be distributed or sold without the written permission of Softworks.
  159.  
  160.  
  161.  Distribution of AGT by game authors:
  162.      Authors of AGT games may distribute the AGT "driver" program, RUN.EXE,
  163.  with their games for the purpose of playing games written using the Adventure
  164.  Game Toolkit.  If the game will be widely distributed, we ask that you request
  165.  written permission and send us a copy of your game so we can notify you of
  166.  updates or changes to AGT, especially changes that may affect your game.  If
  167.  your game will be commercially distributed, you must obtain a written license
  168.  to distribute RUN.EXE; there is a one-time fee of $10 for this license for
  169.  commercial distribution.
  170.  
  171.  
  172.  Distribution of AGT by disk vendors and computer dealers:
  173.      Distributors of "public domain" or user-supported software libraries must
  174.  obtain written permission to distribute copies of AGT and related adventure
  175.  game files.  No one may use AGT as a promotion for any commercial venture or
  176.  
  177.                                       ii
  178.  
  179.  as an enticement for the user to pay for any program, product, or service
  180.  unless they have received the express written permission of the program's
  181.  authors. 
  182.  
  183.  In order to distribute AGT, a dealer or disk vendor must comply with the
  184.  following conditions:
  185.      (1) You must obtain written permission from Softworks to distribute AGT.
  186.  If you receive no reply, write again: our silence does NOT constitute
  187.  permission, and you may not distribute "pending" receipt of permission.
  188.      (2) A fee of not more than $7 may be charged for each disk sold.  This
  189.  includes "multi-disk" volumes: AGT may not be included on any disk sold for
  190.  more than $7, including CD-ROM or optical disks, without express written
  191.  permission from Softworks.
  192.      (3) Vendors may not modify or delete ANY files on the disk.  Vendors may
  193.  add a "GO" program, and/or a reasonable number of small text files designed to
  194.  assist or provide a service to the user, but these added files must be easily
  195.  identifiable and end-users must be allowed to delete the added files. 
  196.      (4) Vendors must make a reasonable effort to distribute only the most
  197.  recent versions of AGT.  All vendors who have requested and received written
  198.  permission to distribute AGT will be notified of updates as they are 
  199.  released. 
  200.      (5) All disk vendors must comply with any and all vendor guidelines or
  201.  vendor requirements set forth by the Association of Shareware Professionals
  202.  (ASP); for more information about ASP, contact its chairman, Jim Button, at 
  203.  Buttonware in Seattle.  Violation of any ASP guideline or requirement
  204.  automatically revokes permission to distribute AGT. 
  205.      Until formal requirements are adopted by the ASP, you must comply with
  206.  the following guidelines: Vendors must make an attempt to educate users on the
  207.  nature of Shareware.  Catalogs, advertisements, order forms, and all disks
  208.  sold should contain ASP-approved or recommended wording describing the nature
  209.  of shareware, and should explicitly state that no part of disk sale revenues
  210.  are paid to the programs' authors.  Vendors may not advertise under the
  211.  heading "Public Domain Software", "Free Software," or the equivalent.  When
  212.  vendor catalogs or advertisements carry both Shareware and PD programs, the
  213.  Shareware programs must be differentiated from the public domain programs in
  214.  some way (in the description, with an asterisk, by listing the registration
  215.  fee, etc.). 
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.                                       iii
  239.  
  240.               ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM
  241.  
  242.  
  243.  Remit to:
  244.      Softworks
  245.      43064 Via Moraga
  246.      Mission San Jose, California  94539
  247.      
  248.  You can also order by phone using your Mastercard or VISA by dialing
  249.  (415) 659-0533, 12:00 Noon to 9:00 PM., PST ONLY, Monday to Friday.
  250.  
  251.  
  252.  ___ AGT Registration ................................. @ $ 20.00 ea  $ ______
  253.      includes: (1) Notice of all future AGT upgrades, new AGT Adventures
  254.      and related AGT products.  (2) Latest version of the program, sample
  255.      Adventure game source files (CAVE, CRUSADE, UNDERGND, ALICE and
  256.      others), and summary documentation on disk.  Over one megabyte of
  257.      program and data files -- ARCed on two disks.  Normally, these disks
  258.      will not be sent until the next AGT upgrade.  If you wish these disks
  259.      sent immediately, put a check mark here -------------------------> ______
  260.      (3) Telephone support from 7:00 to 9:00 PST (M-F).  (4) A warm glow
  261.      from having supported at least one of the many Shareware products
  262.      you probably use.  (5) The AGT authors' eternal gratitude.
  263.  
  264.  ___ Above with printed AGT manual .................... @ $ 35.00 ea  $ ______
  265.      includes: Above items plus printed manual about 150 pages long with
  266.      numerous detailed examples on how to use the Adventure Game Toolkit
  267.      to create very professional and very clever Adventure games.
  268.      The printed AGT manual has approximately 150% the amount of
  269.      information as contained in the summary disk documentation.
  270.  
  271.  ___ Printed AGT manual (Only) ........................ @ $ 20.00 ea  $ ______
  272.  
  273.  ___ UPGRADE to the newest AGT version (Only) ......... @ $ 12.00 ea  $ ______
  274.      includes: Latest version of the program, sample Adventure game
  275.      source files (CAVE, CRUSADE, UNDERGND, ALICE and others), and
  276.      summary documentation on disk.  Over one megabyte of program and
  277.      data files -- ARCed on two disks.
  278.  
  279.  ___ AGT Turbo Pascal 4.0 source code ................. @ $ 50.00 ea  $ ______
  280.      includes: Turbo Pascal 4.0 source code for AGT's COMPILE and RUN
  281.      programs.  Over 10,000 lines of Turbo Pascal source code.  YOU
  282.      MUST BE A REGISTERED AGT USER TO ORDER THE SOURCE CODE!
  283.  
  284.      Orders are normally shipped by US mail at no additional charge.
  285.  
  286.      For UPS shipment, please add $3.00..................@ $ 3.00 ea  $ ______
  287.  
  288.      For shipments outside the United States, please add @ $ 5.00 ea  $ ______
  289.  
  290.                                                      Subtotal           ______
  291.  
  292.      (California residents please add 7% sales tax)             Tax     ______
  293.  
  294.                                                                 Total $ ______
  295.  
  296.  Payment by:    ( ) Check    ( ) MasterCard    ( ) VISA    ( ) Cash
  297.  
  298.  
  299.                                       iv
  300.  
  301.         ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM -- PAGE 2
  302.  
  303.  
  304.     Name: ____________________________________________________________
  305.  
  306.  Company: ____________________________________________________________
  307.  
  308.  Address: ____________________________________________________________
  309.  
  310.         : ____________________________________________________________
  311.  
  312.    State: ___________________________ Zip:____________________________
  313.  
  314.  Day Phone: _________________________ Eve: ___________________________
  315.  
  316.   Card #: _________________________________ Exp. Date: _______________
  317.  
  318.  Signature of cardholder: ____________________________________________
  319.  
  320.  ------------------------ User comments ------------------------------
  321.  
  322.  I acquired the Adventure Game Toolkit (AGT) from
  323.       [ ] - Friend                      [ ] - Disk Vendor 
  324.       [ ] - Computer Club               [ ] - Computer Store
  325.       [ ] - CompuServe                  [ ] - BIX
  326.       [ ] - GEnie                       [ ] - The Source
  327.       [ ] - Electronic Bulletin Board
  328.       [ ] - Other - Please Specify ________________________________
  329.  
  330.  We would also appreciate any input you would care to give concerning
  331.  AGT.  If you have any ideas or comments that would make AGT a better
  332.  system, then please let us know.
  333.  
  334.  We value your comments and/or suggestions:
  335.  
  336.  
  337.  ____________________________________________________________________
  338.  
  339.  ____________________________________________________________________
  340.  
  341.  ____________________________________________________________________
  342.  
  343.  ____________________________________________________________________
  344.  
  345.  ____________________________________________________________________
  346.  
  347.  ____________________________________________________________________
  348.  
  349.  ____________________________________________________________________
  350.  
  351.  ____________________________________________________________________
  352.  
  353.  ____________________________________________________________________
  354.  
  355.  ____________________________________________________________________
  356.  
  357.  
  358.  
  359.  
  360.                                        v
  361.  
  362.  
  363.  ADVENTURE GAME TOOLKIT PRODUCT/TECHNICAL SUPPORT
  364.  
  365.  
  366.  Softworks will make every reasonable effort to fix AGT bugs, and help
  367.  registered users by answering technical and other AGT related questions.  This
  368.  Product/Technical support for AGT is available to registered users (only) in
  369.  several forms:
  370.  
  371.      (1)  By leaving a message in the 'Softworks' forum on BIX (the BYTE
  372.           Information Exchange). 
  373.  
  374.      (2)  By telephone to David Malmberg at Softworks, Monday through Friday
  375.           from 7:00 PM to 9:00 PM (Pacific Coast Time) at (415) 659-0533.
  376.           Please respect these hours!
  377.  
  378.      (3)  By CompuServe E-Mail to David Malmberg, CompuServe ID 73435,1277.
  379.  
  380.      (4)  By letter to:  Softworks
  381.                          43064 Via Moraga
  382.                          Mission San Jose, California
  383.                                              94539
  384.  
  385.           If you send disks or listings that you wish returned, be sure to
  386.           enclosed a self-addressed, stamped envelope (SASE) with sufficient
  387.           postage.  If you do not enclose a SASE, your material will not be
  388.           returned.
  389.  
  390.  Regardless of the method you use to solicit AGT support, if you are having a
  391.  problem and you can not get AGT to do what you think it should do, please
  392.  provide background information on the following:
  393.  
  394.      (1)  The version of AGT you are using.
  395.  
  396.      (2)  The computer system you are using.
  397.  
  398.      (3)  Your system's configuration, i.e., amount of RAM, number and type of
  399.           disk drives, the type of monitor you are using.
  400.  
  401.      (4)  Any memory resident programs you have installed at the same time you
  402.           are using AGT and a "rough idea" of what they do and how much memory
  403.           they take.
  404.  
  405.      (5)  Your problem, i.e., what is happening vs. what you think should be
  406.           happening.
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.                                       vi
  422.  
  423.  
  424.                                TABLE OF CONTENTS
  425.  
  426.  
  427. COPYRIGHT, TRADEMARKS AND WARRANTY . . . . . . . . . . . . . . . . . . . .    i
  428.  
  429. LICENSE TERMS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   ii
  430.  
  431. ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM . . . . . . . . . . .   iv
  432.  
  433. ADVENTURE GAME TOOLKIT PRODUCT/TECHNICAL SUPPORT . . . . . . . . . . . . .   vi
  434.  
  435. PART 1: INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . .    1
  436.      FEATURES OF THE ADVENTURE GAME TOOLKIT  . . . . . . . . . . . . . . .    1
  437.      STRUCTURE OF THIS MANUAL  . . . . . . . . . . . . . . . . . . . . . .    2
  438.      HARDWARE REQUIREMENTS FOR AGT   . . . . . . . . . . . . . . . . . . .    3
  439.      QUICK START FOR PLAYING ONE OF THE AGT GAMES  . . . . . . . . . . . .    3
  440.      ADVENTURE GAME TOOLKIT FILES  . . . . . . . . . . . . . . . . . . . .    4
  441.           FILES NEEDED TO COMPILE AN AGT ADVENTURE . . . . . . . . . . . .    4
  442.           COMPILED OR FINAL VERSION FILES  . . . . . . . . . . . . . . . .    5
  443.           SAMPLE AGT ADVENTURE GAME FILES  . . . . . . . . . . . . . . . .    6
  444.      HOW TO PLAY THE ADVENTURE GAME(S) PROVIDED WITH AGT . . . . . . . . .    7
  445.           VOCABULARY       . . . . . . . . . . . . . . . . . . . . . . . .    7
  446.           STANDARD LEVEL VERBS . . . . . . . . . . . . . . . . . . . . . .    8
  447.           SOME GENERAL COMMENTS ABOUT COMMANDS   . . . . . . . . . . . . .   10
  448.           ABBREVIATIONS AND FUNCTION KEYS  . . . . . . . . . . . . . . . .   10
  449.           SPECIAL WORDS  . . . . . . . . . . . . . . . . . . . . . . . . .   10
  450.           NOUNS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   11
  451.           NOISE WORDS  . . . . . . . . . . . . . . . . . . . . . . . . . .   11
  452.           PREPOSITIONAL PHRASES  . . . . . . . . . . . . . . . . . . . . .   11
  453.           COMMAND LINE OPTIONS . . . . . . . . . . . . . . . . . . . . . .   11
  454.  
  455. PART 2: HOW TO WRITE AN ADVENTURE GAME     . . . . . . . . . . . . . . . .   13
  456.      INTRODUCTION: WHY SHOULD I WRITE MY OWN ADVENTURE GAME?   . . . . . .   13
  457.      HOW AN AGT ADVENTURE GAME WORKS   . . . . . . . . . . . . . . . . . .   13
  458.           AN OVERVIEW  . . . . . . . . . . . . . . . . . . . . . . . . . .   13
  459.           STANDARD LEVEL GAME FILES  . . . . . . . . . . . . . . . . . . .   15
  460.           TITLE FILES  . . . . . . . . . . . . . . . . . . . . . . . . . .   15
  461.           SETTING SCREEN COLORS  . . . . . . . . . . . . . . . . . . . . .   15
  462.           INSTRUCTIONS FILES . . . . . . . . . . . . . . . . . . . . . . .   16
  463.           THE WORK-HORSE .DAT FILE . . . . . . . . . . . . . . . . . . . .   17
  464.      ROOMS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   17
  465.           HELP MESSAGES  . . . . . . . . . . . . . . . . . . . . . . . . .   18
  466.      NOUNS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   19
  467.           TEXT   . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   21
  468.           MULTIPLE NOUNS WITH THE SAME NAME  . . . . . . . . . . . . . . .   21
  469.           PUSH, PULL, TURN, AND PLAY DESCRIPTIONS  . . . . . . . . . . . .   22
  470.           EATING, DRINKING, AND DYING  . . . . . . . . . . . . . . . . . .   23
  471.           WEIGHT AND SIZE  . . . . . . . . . . . . . . . . . . . . . . . .   23
  472.           LIGHT AND DARKNESS . . . . . . . . . . . . . . . . . . . . . . .   23
  473.      CREATURES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   24
  474.           GROUPS OF CREATURES  . . . . . . . . . . . . . . . . . . . . . .   26
  475.      SPECIALS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   26
  476.           "SPECIAL" SPECIALS . . . . . . . . . . . . . . . . . . . . . . .   27
  477.      CREATING A TYPICAL ROOM   . . . . . . . . . . . . . . . . . . . . . .   29
  478.      SCORING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   31
  479.      OTHER DATA ITEMS IN THE .DAT FILE   . . . . . . . . . . . . . . . . .   32
  480.           INTRODUCTION or INTRO TEXT . . . . . . . . . . . . . . . . . . .   32
  481.  
  482.                                       vii
  483.  
  484.           STARTING ROOM  . . . . . . . . . . . . . . . . . . . . . . . . .   32
  485.           TREASURE ROOM  . . . . . . . . . . . . . . . . . . . . . . . . .   32
  486.           VERB SYNONYMS  . . . . . . . . . . . . . . . . . . . . . . . . .   32
  487.                WARNING . . . . . . . . . . . . . . . . . . . . . . . . . .   33
  488.           GAME_WIN . . . . . . . . . . . . . . . . . . . . . . . . . . . .   33
  489.           GAME_END . . . . . . . . . . . . . . . . . . . . . . . . . . . .   34
  490.      PAGE PAUSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   34
  491.      ORDER OF DEFINITIONS  . . . . . . . . . . . . . . . . . . . . . . . .   34
  492.      HOW TO INCLUDE COMMENTS IN YOUR AGT DATA FILES  . . . . . . . . . . .   34
  493.      CREATING YOUR SOURCE DATA FILES WITH WORD PROCESSORS  . . . . . . . .   35
  494.  
  495. PART 3: USING META-COMMANDS IN PROFESSIONAL LEVEL ADVENTURE GAMES  . . . .   36
  496.      CUSTOM USER-DEFINED VERBS . . . . . . . . . . . . . . . . . . . . . .   36
  497.      MAXIMUM_SCORE . . . . . . . . . . . . . . . . . . . . . . . . . . . .   37
  498.      .MSG -- MESSAGE FILES   . . . . . . . . . . . . . . . . . . . . . . .   38
  499.      A TYPICAL GAME TURN FOR PROFESSIONAL LEVEL GAMES  . . . . . . . . . .   38
  500.      INTRODUCTION TO META-COMMANDS . . . . . . . . . . . . . . . . . . . .   41
  501.      THE FORMAT OF META-COMMANDS . . . . . . . . . . . . . . . . . . . . .   42
  502.      META-COMMANDS CONDITIONAL TESTS . . . . . . . . . . . . . . . . . . .   44
  503.           PLAYER CONDITIONS  . . . . . . . . . . . . . . . . . . . . . . .   44
  504.           ITEM(S) CONDITIONS . . . . . . . . . . . . . . . . . . . . . . .   45
  505.           NOUN CONDITIONS  . . . . . . . . . . . . . . . . . . . . . . . .   46
  506.           MISCELLANEOUS CONDITIONS . . . . . . . . . . . . . . . . . . . .   47
  507.      META-COMMANDS ACTION TOKENS . . . . . . . . . . . . . . . . . . . . .   48
  508.           PLAYER ACTION TOKENS . . . . . . . . . . . . . . . . . . . . . .   48
  509.           A WORD OF WARNING  . . . . . . . . . . . . . . . . . . . . . . .   49
  510.           ITEM/NOUN/LOCATION ACTION TOKENS . . . . . . . . . . . . . . . .   49
  511.           MISCELLANEOUS ACTION TOKENS  . . . . . . . . . . . . . . . . . .   50
  512.      SPECIAL META-COMMAND SITUATIONS . . . . . . . . . . . . . . . . . . .   51
  513.           FLAGS  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   51
  514.           DEBUG FLAG . . . . . . . . . . . . . . . . . . . . . . . . . . .   51
  515.           COUNTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . .   51
  516.           VARIABLES  . . . . . . . . . . . . . . . . . . . . . . . . . . .   52
  517.           NUMBER INPUT . . . . . . . . . . . . . . . . . . . . . . . . . .   54
  518.           ASKING AND ANSWERING QUESTIONS . . . . . . . . . . . . . . . . .   55
  519.           OPENING AND CLOSING PASSAGEWAYS BETWEEN ROOMS  . . . . . . . . .   56
  520.      META-COMMAND REDIRECTION  . . . . . . . . . . . . . . . . . . . . . .   57
  521.  
  522. PART 4:  SAMPLE AGT META-COMMAND SCENARIOS   . . . . . . . . . . . . . . .   61
  523.      SCENARIO 1: "FIND" VERB ACTIONS   . . . . . . . . . . . . . . . . . .   61
  524.      SCENARIO 2: RANDOM ACTIVITIES BY GUARD  . . . . . . . . . . . . . . .   63
  525.      SCENARIO 3: INTERACTION WITH CHARACTERS . . . . . . . . . . . . . . .   69
  526.  
  527. APPENDIX A:  STANDARD LEVEL VERBS UNDERSTOOD BY AGT  . . . . . . . . . . .   77
  528.  
  529. APPENDIX B:  META-COMMANDS CONDITIONAL TESTS   . . . . . . . . . . . . . .   79
  530.      PLAYER CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . . .   79
  531.      ITEM(S) CONDITIONS  . . . . . . . . . . . . . . . . . . . . . . . . .   79
  532.      NOUN CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . . . .   80
  533.      MISCELLANEOUS CONDITIONS  . . . . . . . . . . . . . . . . . . . . . .   81
  534.  
  535. APPENDIX C:  META-COMMANDS ACTION TOKENS   . . . . . . . . . . . . . . . .   82
  536.      PLAYER ACTION TOKENS  . . . . . . . . . . . . . . . . . . . . . . . .   82
  537.      ITEM/NOUN/LOCATION ACTION TOKENS  . . . . . . . . . . . . . . . . . .   82
  538.      MISCELLANEOUS ACTION TOKENS . . . . . . . . . . . . . . . . . . . . .   83
  539.  
  540. APPENDIX D:  AGT ERROR MESSAGES  . . . . . . . . . . . . . . . . . . . . .   84
  541.      ERRORS DURING GAME COMPILATION  . . . . . . . . . . . . . . . . . . .   84
  542.  
  543.                                      viii
  544.  
  545.      ERRORS DURING RESTORING GAME  . . . . . . . . . . . . . . . . . . . .   84
  546.      ERRORS DURING GAME PLAY   . . . . . . . . . . . . . . . . . . . . . .   84
  547.  
  548. APPENDIX E: VALUE RANGES FOR GAME DEFINITIONS  . . . . . . . . . . . . . .   86
  549.  
  550. APPENDIX F: ABOUT THE AUTHORS  . . . . . . . . . . . . . . . . . . . . . .   87
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.                                       ix
  605.  
  606.  
  607.  PART 1: INTRODUCTION
  608.   
  609.   
  610.  The Adventure Game Toolkit is designed to allow you to create and play your
  611.  own text adventure games.  Once created, your adventure games can be shared
  612.  with and enjoyed by others -- even if they do not have a copy of the Adventure
  613.  Game Toolkit themselves.   
  614.   
  615.  The Adventure Game Toolkit (AGT) began life as a program by Mark Welch called
  616.  the Generic Adventure Game System (GAGS).  Using GAGS it was possible for the
  617.  non-programmer to develop complete adventure games using a fixed (but
  618.  relatively large) vocabulary of action verbs.  David Malmberg took GAGS and
  619.  made a number of enhancements including the ability to customize the
  620.  vocabulary and to program complex conditional tests and a rich assortment of
  621.  actions and messages using a special meta-language (designed specifically for
  622.  adventure games).  The current Adventure Game Toolkit combines the best
  623.  features of both approaches to enable the user to create two distinct levels
  624.  of adventure games:
  625.   
  626.      (1)  Standard Level games that require no programming experience
  627.           (honestly!), only a fertile imagination.  These Standard Level games
  628.           follow the original GAGS format and only require that the user
  629.           generate the game using a word processor or text editor to describe
  630.           the various locations, objects and results of actions that
  631.           collectively make up the game.
  632.  
  633.      (2)  Professional Level games that also make use of the special adventure
  634.           game meta-language to create games as complex and rich as the game
  635.           designer's imagination and prose style will allow.  These games
  636.           should be technically comparable with the published text adventure
  637.           games from firms like Infocom.
  638.  
  639.  
  640.  FEATURES OF THE ADVENTURE GAME TOOLKIT
  641.  
  642.  AGT has a number of features that make it a very comprehensive adventure
  643.  product.  These features make AGT more powerful, more professional and easier
  644.  to use than any previously available Adventure Game development system.  Some
  645.  of these key features are: 
  646.  
  647.      POWERFUL
  648.  
  649.           *    Big, complex games with up to 200 locations, 100 inanimate
  650.                objects (e.g., treasures, swords, lakes, trees, books, etc.) and
  651.                100 animate objects (e.g., people, animals or creatures).
  652.  
  653.            *   Large standard vocabulary with potential to define many more
  654.                words unique to a specific adventure.  Typical games can have a
  655.                vocabulary of 400 words or more.
  656.  
  657.           *    Sophisticated parser that can understand (1) complex input
  658.                commands including pronouns (IT, HIM, HER, THEM, MY and ITS),
  659.                and (2) compound commands separated by AND or THEN or
  660.                punctuation symbols, and (3) commands addressed to characters
  661.                within the game.  Here are a few examples of commands AGT can
  662.                handle with ease:
  663.   
  664.  
  665.                                        1
  666.  
  667.                     GET THE FLASH LIGHT AND THEN SWITCH IT ON
  668.                     DROP THE FOOD, THE KEY AND THE BOTTLE THEN UNLOCK THE DOOR
  669.                          WITH THE BRASS KEY AND THEN LEAVE
  670.                     PUT ON THE CLOAK, THEN EXAMINE IT; READ ITS LABEL
  671.                     PLACE THE GREEN ROCK AND THE SMALL PEBBLE BEHIND THE TREE
  672.                     ENTER THE HOUSE; GET ALL; EXIT; SOUTH; SOUTH THEN DOWN
  673.                     SULU, SET A COURSE FOR ALPHA 14
  674.                     SCOTTY, BEAM DOWN A TRICORDER AND THE QWERTY MODULE
  675.  
  676.           *    Special, English-like meta-language (especially developed for
  677.                writing Adventure games) that gives the game designer total
  678.                control and flexibility in the development of his/her games.
  679.  
  680.            *   Source code available to Registered Users.  Over 10,000 lines of
  681.                Turbo Pascal 4.0 that may be customized to fit the game
  682.                designer's unique needs. 
  683.  
  684.      PROFESSIONAL
  685.   
  686.           *    "Look and feel" of Infocom adventure games with similar screen
  687.                layout and standard vocabulary and routines.
  688.  
  689.           *    Automatic screen adaptation to use either a color or a
  690.                monochrome monitor.  Color combinations may be specified by the
  691.                game designer or by the player during the game.
  692.  
  693.           *    Predefined function and cursor keys to input frequently used
  694.                commands and move directions.
  695.   
  696.           *    SCRIPT and UNSCRIPT commands to echo game output to printer.
  697.   
  698.      EASY-TO-USE
  699.  
  700.           *    Large library of completed games that can be enjoyed simply as
  701.                great entertainment or used as a platform by the game designer
  702.                to build upon and/or learn from.
  703.  
  704.           *    Professionally written documentation totalling about 150 pages. 
  705.                Has numerous examples that unveil the "secrets" of great
  706.                adventure writers.
  707.  
  708.            *   Total compatibility with GAGS.
  709.  
  710.  
  711.  STRUCTURE OF THIS MANUAL 
  712.   
  713.  PART 1 (the section you are reading) gives an overview of the Adventure Game
  714.  Toolkit, the various files on the disk(s), and explains how to play the
  715.  adventure games created by the AGT.
  716.   
  717.  PART 2 gives a number of pointers on how to create a good adventure game.  It
  718.  also explains the way AGT defines an adventure game in terms of files and game
  719.  data elements like Rooms, Nouns, and Creatures and gives several examples of
  720.  each.
  721.   
  722.  PART 3 explains the use of AGT's unique meta-language and how it can be used
  723.  to create Professional Level adventure games.  Numerous examples are given.
  724.  
  725.  
  726.                                        2
  727.  
  728.  PART 4 presents several detailed scenarios where meta-language commands have
  729.  been used to create typical adventure games situations, like: (1) random
  730.  attacks by a villain, (2) how to expand the game's vocabulary to include new
  731.  verbs and actions, and (3) how to allow for interaction between the player and
  732.  various characters in the game.
  733.  
  734.  The final part of the manual is a series of Appendices that give detailed
  735.  information on a number of specific AGT topics for easy reference.
  736.  
  737.  
  738.  HARDWARE REQUIREMENTS FOR AGT 
  739.  
  740.  The games created by the Adventure Game Toolkit requires an IBM-compatible
  741.  computer with at least 384K of memory, MS-DOS 2.1, and at least one disk
  742.  drive.  You may use any kind of monitor and AGT will automatically adjust its
  743.  output to best suit your monitor.
  744.   
  745.  
  746.  QUICK START FOR PLAYING ONE OF THE AGT GAMES 
  747.   
  748.  If you've never played an adventure game before, the best way to start to
  749.  understand how an adventure game works is to play one.  Before you can do
  750.  that, however, there are a few things you should do first to protect your
  751.  disk(s) and to create the final version of the game from the source files on
  752.  the disk(s).
  753.  
  754.  Let's make a playable copy of CAVE (the AGT version of the famous "Colossal
  755.  Cave" adventure game). 
  756.   
  757.  1.  First, make a copy of the original disk(s) and put them in a safe place. 
  758.  That way, if you accidentally damage the disk(s) you're playing with, you can
  759.  still re-copy the original(s).  Check your DOS manual for the correct form of
  760.  the COPY or DISKCOPY command that is appropriate for your particular system.
  761.   
  762.  2.  If there is a file on the disk(s) called READ.ME or README.AGT, read that
  763.  file before going further.  These files will have information on changes
  764.  and/or features that have been made after the documentation was created.
  765.  
  766.  3.  Copy the following files to a new, formatted disk:
  767.  
  768.      COMPILE.EXE
  769.      CAVE.DAT
  770.      CAVE.CMD
  771.      CAVE.MSG
  772.  
  773.  These are the "source" files for the CAVE adventure.  Put this disk in the A:
  774.  drive and make that drive the default drive by entering "A:<RETURN>".  Then
  775.  enter "COMPILE CAVE<RETURN>".  AGT will then take 3 to 5 minutes to produce a
  776.  finished version of the CAVE adventure on the same disk, by creating the
  777.  following new files:
  778.  
  779.      CAVE.D$$
  780.      CAVE.DA1
  781.      CAVE.DA2
  782.      CAVE.DA3
  783.      CAVE.DA5
  784.  
  785.  These are the "compiled" or final files for CAVE that AGT has created.
  786.  
  787.                                        3
  788.  
  789.  
  790.  4.  Next, copy the following files to a new (different) formatted disk:
  791.  
  792.      RUN.EXE
  793.      CAVE.TTL
  794.      CAVE.INS
  795.      CAVE.BAT
  796.      CAVE.D$$
  797.      CAVE.DA1
  798.      CAVE.DA2
  799.      CAVE.DA3
  800.      CAVE.DA5
  801.      ORDERFRM.AGT
  802.  
  803.  Then type "CAVE<RETURN>" at the DOS prompt to play the finished version of the
  804.  "Colossal Cave" adventure created by AGT.
  805.   
  806.  
  807.  ADVENTURE GAME TOOLKIT FILES
  808.  
  809.  
  810.  FILES NEEDED TO COMPILE AN AGT ADVENTURE 
  811.  
  812.  Included on the disk(s) are numerous files.  If there is a file on the disk(s)
  813.  called READ.ME or README.AGT, read that file before going further.
  814.   
  815.  In order to compile or create a finished adventure from your source files, you
  816.  will need to put the following files on a new, formatted disk:
  817.   
  818.     - COMPILE.EXE   The file COMPILE.EXE is the AGT program that converts your
  819.                     AGT "source" files into the "compiled" or final files
  820.                     needed to play the adventure. 
  821.   
  822.     - *.DAT         e.g., CRUSADE.DAT.  Files with the extension (suffix) .DAT
  823.                     are source data files read by the COMPILE.EXE program when
  824.                     it is running.
  825.   
  826.     - *.CMD         e.g., CRUSADE.CMD.  Each file with the extension .CMD is a
  827.                     source data file containing a set of special meta-language
  828.                     commands for a corresponding game in a .DAT file.  The use
  829.                     of a *.CMD file is unique to Professional Level adventure
  830.                     games.  Games that do not use these Professional Level
  831.                     features (such as, the original GAGS games) would not have
  832.                     a *.CMD file.
  833.   
  834.     - *.MSG         e.g., CRUSADE.MSG.  Each file with the extension .MSG is a
  835.                     source data file containing a set of special messages for a
  836.                     corresponding game in a .DAT file.  The use of a *.MSG file
  837.                     is unique to Professional Level adventure games.  Games
  838.                     that do not use these Professional Level features (such as,
  839.                     the original GAGS games) would not have a *.MSG file.
  840.   
  841.  After these are on a new, formatted disk, you should enter the command
  842.  "COMPILE GameName", e.g., "COMPILE CRUSADE".  After a few minutes, AGT will
  843.  pause and give you a message about how much space there is on your disk
  844.  compared to how much space you need for the "final" or "compiled" version
  845.  files.  If you don't have enough space, the program will suggest you put in a
  846.  clean (already formatted) disk, before it writes the final files.
  847.  
  848.                                        4
  849.  
  850.  
  851.   
  852.  COMPILED OR FINAL VERSION FILES
  853.   
  854.  After the game has been compiled, you can create a final, playable disk for
  855.  the game.  This disk will have the following files:
  856.   
  857.      RUN.EXE        This is the program "engine" that runs your compiled
  858.                     adventure game.  RUN.EXE must be on the disk in order to
  859.                     play any compiled, final AGT game.  All of the information
  860.                     that is unique to the adventure will be contained in
  861.                     compiled data files, described below:
  862.  
  863.     - *.BAT         e.g., CRUSADE.BAT.  Each file with the extension .BAT is
  864.                     used to start the final version of the game, i.e., it
  865.                     contains the DOS batch instruction "RUN GameName", e.g.,
  866.                     "RUN CRUSADE".  *.BAT files are optional.
  867.   
  868.     - *.TTL         e.g., CRUSADE.TTL.  Each file with the extension .TTL
  869.                     contains the title file for a corresponding game file.
  870.                     (*.TTL files are optional) 
  871.   
  872.     - *.INS         e.g., CRUSADE.INS.  Each file with the extension .INS
  873.                     contains a set of instructions for a corresponding game.
  874.                     (*.INS files are optional)  If the game disk contains a
  875.                     *.INS file (i.e., CRUSADE.INS), the game will ask the
  876.                     player "Do you wish to see the instructions?"  If the
  877.                     player answers with a YES or Y, the instruction file will
  878.                     be displayed.  If the game disk does not contain a *.INS
  879.                     file, play begins normally at the starting location.
  880.   
  881.     - *.D$$         e.g., CRUSADE.D$$.  Each file with the extension .D$$
  882.                     contains all the encrypted messages for the game.  *.D$$
  883.                     files are NOT optional. 
  884.   
  885.     - *.DA1         e.g., CRUSADE.DA1.  Each file with the extension .DA1
  886.                     contains general data about the game.  *.DA1 files are NOT
  887.                     optional.
  888.  
  889.     - *.DA2         e.g., CRUSADE.DA2.  Each file with the extension .DA2
  890.                     contains encrypted data about the ROOMS in the game.  *.DA2
  891.                     files are NOT optional.
  892.  
  893.     - *.DA3         e.g., CRUSADE.DA3.  Each file with the extension .DA3
  894.                     contains encrypted data about the NOUNS in the game.  *.DA3
  895.                     files are NOT optional.
  896.   
  897.     - *.DA4         e.g., CRUSADE.DA4.  Each file with the extension .DA4
  898.                     contains encrypted data about the CREATURES in the game. 
  899.                     *.DA4 files are NOT optional if you have CREATURES in the
  900.                     game.  If there are no CREATURES, then no *.DA4 file will
  901.                     be created.
  902.   
  903.     - *.DA5         e.g., CRUSADE.DA5.  Each file with the extension .DA5
  904.                     contains encrypted meta-language commands for the game. 
  905.                     *.DA5 files are NOT optional if you have meta-language
  906.                     commands in the game.  If there are no meta-language
  907.                     commands, then no *.DA5 file will be created.
  908.  
  909.                                        5
  910.  
  911.   
  912.  The final or compiled files of an adventure game take up less disk space than
  913.  the source files and are encrypted.  These files are not only safe from
  914.  "peeking" and "prying" eyes, but have the advantage of loading very fast. 
  915.  Even the largest AGT game will load in about 15 seconds -- just long enough to
  916.  read the title screen.
  917.  
  918.   
  919.  SAMPLE AGT ADVENTURE GAME FILES 
  920.  
  921.  Included with the other AGT files are three sample adventure games that use
  922.  all the power of AGT including the special meta-language.  The reader is
  923.  encouraged to study these games for examples of how AGT can be used to
  924.  accomplish a wide variety of Professional Level adventure game tasks and
  925.  tricks.  These games are: 
  926.  
  927.    CAVE.*           An AGT version of the original Crowther and Woods "Colossal
  928.                     Cave" Adventure Game.
  929.   
  930.    CRUSADE.*        Rescue the princess from the evil Baron's dungeon.
  931.   
  932.    QUEST.*          Recover your magic spells and amulets from Blackwing's Pit.
  933.  
  934.  
  935.  In addition there are a number of Standard Level games that could have been
  936.  created totally without any programming knowledge or experience:
  937.  
  938.    UNDERGND.*       A game of survival after World War III.  Uses all of the   
  939.                     tricks of the original GAGS (Standard Level) adventures.
  940.   
  941.    ALICE.*          An adventure using the characters from Alice In Wonderland. 
  942.                     This game was the winning entry in the first annual GAGS
  943.                     game writing contest.
  944.  
  945.    DEENA.*          A woman warrior's struggle to escape from the lecherous   
  946.                     Gendi tribe.  (R-rated)
  947.  
  948.    DRAGONS.*        An adventure in the Sultan's palace with side trips to his 
  949.                     dungeon, the torture chamber and the harem.  (R-rated)
  950.  
  951.    FABLE.*          An allegorical quest for meaning and understanding in life.
  952.  
  953.    GHOSTTWN.*       Find and rescue the rancher's daughter from the mysterious 
  954.                     ghost town.  (R-rated)
  955.  
  956.    LOTTERY.*        An adventure in San Francisco with emphasize on the "red   
  957.                     light" district.  (R-rated)
  958.  
  959.    CTA.*            An allegorical adventure where you battle figures like     
  960.                     "Unbelief", "Greed" and "Lust" using such weapons as the   
  961.                     "Sword of the Spirit" and the "Staff of Righteousness".
  962.  
  963.    LASAR.*          Seek out and destroy the threats to peace and prosperity in 
  964.                     the Kingdom of Ellasal.
  965.  
  966.  
  967.  
  968.  
  969.  
  970.                                        6
  971.  
  972.  
  973.  HOW TO PLAY THE ADVENTURE GAME(S) PROVIDED WITH AGT 
  974.    
  975.   
  976.  VOCABULARY      
  977.   
  978.  The Adventure Game Toolkit creates adventure games that understand a wide
  979.  variety of commands.  A typical AGT game might have a vocabulary totalling 400
  980.  words or more.
  981.   
  982.  Your game's commands should generally be in the format:  
  983.  
  984.    <verb phrase> <(multiple) noun phrase(s)> <preposition> <noun phrase/object>
  985.  
  986.  Verb phrases can consist of a simple verb like EAT, SHOOT, READ or a verb
  987.  followed by a preposition such as CLIMB UP, JUMP THROUGH, or SWIM IN.  Noun
  988.  (or object) phrases can consist of a single word noun like TREE, ROCK, LAKE or
  989.  a noun and its adjective such as RED ROCK, SMALL BOWL or UGLY MUTANT.  Several
  990.  nouns may be connected with AND's or commas.  Articles like A, AN or THE are
  991.  optional.  The personal pronouns MY and ITS are also optional.  The pronouns
  992.  IT, THEM, HIM and HER may be used to refer to a previously mentioned noun.
  993.  
  994.  Here are some (hypothetical) examples of valid commands:
  995.  
  996.           PLACE A RED ROCK IN THE SMALL BOWL
  997.           PUT THE GREEN ROCK AND THE SMALL PEBBLE BEHIND THE OAK TREE
  998.           READ MY POETRY BOOK
  999.           SWIM IN THE SWIMMING POOL
  1000.           EXAMINE THE GOLD RING, THE DWARF AND THE SILVER NECKLACE
  1001.           EAT THE CELERY, THE TUNA, THE APPLE AND THE ONION
  1002.           THROW THE BATTLE AXE AND THE LARGE ROCK AT THE WEREWOLF
  1003.           SHOOT THE BURGLAR WITH THE REVOLVER
  1004.           ATTACK HIM
  1005.             ("HIM" will refer to last noun mentioned, e.g., the burglar)
  1006.           FIRE THE LASER PISTOL AT THE ALIEN MUTANT
  1007.           GET THE BOOK (also: TAKE THE BOOK)
  1008.           READ IT
  1009.             ("IT" will refer to last noun mentioned, e.g., the book)
  1010.           GET ALL (will get everything movable at the current location)
  1011.           GET THE KEYS, BOTTLE, FOOD AND THE CLOAK
  1012.           EXAMINE THE KEYS, BOTTLE, FOOD AND CLOAK
  1013.           PUSH THE RED BUTTON AND THE GREEN BUTTON
  1014.           UNLOCK THE FILE CABINET WITH THE STEEL KEY
  1015.           JUMP THROUGH THE OPENING
  1016.           JUMP OVER THE LOG
  1017.           NORTH
  1018.           SOUTHWEST
  1019.           PLACE AN AXE AND THE SHIELD NEXT TO THE BIG TREE
  1020.           PUT THE FOOD ON THE KITCHEN TABLE
  1021.           TURN ON THE FLASHLIGHT
  1022.           LIGHT THE TORCH WITH THE WOODEN MATCHES
  1023.           SCREAM AT THE UGLY TROLL
  1024.           CLIMB UP THE LADDER
  1025.           EXTINGUISH THE FIRE (or PUT OUT THE FIRE)
  1026.           DRINK THE WHITE WINE
  1027.           THROW THE FIRE WOOD IN THE STOVE
  1028.           PULL THE BELL CORD
  1029.           WEAR THE STUPID HAT (also: PUT ON THE STUPID HAT)
  1030.  
  1031.                                        7
  1032.  
  1033.           TAKE OFF THE HAT (also: REMOVE THE HAT)
  1034.           NE (for NORTHEAST)
  1035.           DROP THE KEY AND THE BOTTLE
  1036.           ENTER THE CAVE
  1037.           XYZZY (i.e., a "magic" word)
  1038.           TURN THE DOORKNOB
  1039.           PLAY WITH THE DOG
  1040.           TALK TO (or TALK WITH) THE OLD MAN (ABOUT THE WEATHER)
  1041.           TELL JEFF ABOUT THE SWORD
  1042.           ASK JODIE ABOUT THE CRIME
  1043.  
  1044.  Compound commands can be created by connecting single commands (like those
  1045.  above) with "AND", "THEN" or the punctuation symbols "," or ";" to connect two
  1046.  or more separate commands.  However, "end-of-sentence" punctuation symbols
  1047.  like ".", "!" and "?" should not be used.  Below are a few examples of valid
  1048.  compound commands:
  1049.  
  1050.           TURN THE DOORKNOB; OPEN THE DOOR THEN ENTER THE ROOM
  1051.           CLIMB DOWN THE LADDER THEN SOUTH, WEST AND NORTHWEST
  1052.           GET THE CLOAK AND THEN EXAMINE IT; READ THE LABEL
  1053.           DROP THE FOOD AND THE BOTTLE THEN UNLOCK THE DOOR AND THEN LEAVE
  1054.           GET THE TORCH, LIGHT IT WITH THE WOODEN MATCHES THEN EXAMINE IT
  1055.  
  1056.  AGT's parser also allows you to give commands to other characters in the game
  1057.  like these:
  1058.  
  1059.           SULU, SET A COURSE FOR ALPHA 14
  1060.           SCOTTY, BEAM DOWN A TRICORDER AND THE QWERTY MODULE
  1061.           HELMSMAN, RAISE THE DEFLECTOR SHIELDS
  1062.           BONES, COME TO THE BRIDGE
  1063.  
  1064.  The comma after the character's name is optional.
  1065.  
  1066.  One point of advice about command structure is in order.  Your commands should
  1067.  be structured to follow the most "natural" sequence of words when two or more
  1068.  sequences are possible.  For example, THROW THE GOLDEN EGGS TO THE TROLL will
  1069.  be understood by the AGT parser, whereas THROW TROLL THE EGGS will not be
  1070.  understood -- even though it is understandable to most humans as equivalent. 
  1071.  Similarly, you should avoid the verb "USE", such as USE THE KEY TO UNLOCK THE
  1072.  DOOR.  This command should be entered simply as UNLOCK THE DOOR WITH THE KEY.
  1073.   
  1074.  NOTE:  Player's input commands will be shown in all caps throughout this
  1075.  document.
  1076.  
  1077.  
  1078.  STANDARD LEVEL VERBS
  1079.  
  1080.  Standard level games have a fixed set of verbs -- although these may all be
  1081.  supplemented by additional synonyms.  Professional level games have all of the
  1082.  standard level verbs plus they can have additional verbs that are defined
  1083.  uniquely for each game.  The standard level verbs and the form of their
  1084.  commands are shown below:
  1085.   
  1086.  Meanings of notation: 
  1087.    [required word] 
  1088.    {optional word} 
  1089.    | (means OR, i.e., alternative words) 
  1090.   
  1091.  
  1092.                                        8
  1093.  
  1094.      Verbs that do not require nouns 
  1095.      =============================== 
  1096.       N,S,E,W,NE,NW,SE,SW,U,D, 
  1097.       NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST,UP,DOWN 
  1098.       ENTER | GO [IN | INTO]
  1099.       EXIT | LEAVE  (* directions *) 
  1100.   
  1101.       SCORE  (* display score and status *) 
  1102.       QUIT | Q  (* end game *) 
  1103.       INVENTORY | I  (* list things player is carrying and wearing *) 
  1104.       SCREAM | SHOUT | YELL  (* make noise but seldom accomplish anything *) 
  1105.       WAIT  (* waste a turn *) 
  1106.       BRIEF | VERBOSE  (* change description mode *) 
  1107.       L | LOOK  (* repeat full description *) 
  1108.       SAVE | RESTORE {GAME}  (* save and restore game status *) 
  1109.       HELP | H  (* ask for help *) 
  1110.       SCRIPT  (* Echo all output to both printer (LP1:) and screen *) 
  1111.       UNSCRIPT  (* Send all output to screen only *) 
  1112.   
  1113.      Verbs that require nouns (and perhaps objects)
  1114.      ============================================== 
  1115.       LIST | SHOW [EXITS]  (* list visible exits *) 
  1116.       THROW | CAST | DUMP [noun] 
  1117.          {[AT | TO | IN | INTO | ACROSS | INSIDE] [noun]} 
  1118.       ATTACK | KILL | FIGHT | HIT [creature] {[WITH] [noun]} 
  1119.       DROP | PUT DOWN [noun | ALL] 
  1120.       GET | TAKE | PICK UP [noun | ALL] 
  1121.       OPEN [noun] {[WITH] [noun]} 
  1122.       CLOSE | SHUT [noun] 
  1123.       LOCK [noun] {[WITH] [noun]}
  1124.       UNLOCK [noun] {[WITH] [noun]} 
  1125.       EXAMINE | CHECK | INSPECT | LOOK AT | LOOK IN [noun] 
  1126.          (* synonym is "." or "EX" *) 
  1127.       READ [noun] 
  1128.       EAT [noun] 
  1129.       DRINK [noun] 
  1130.       PUT | PLACE [noun] 
  1131.          [IN | WITH | INSIDE | INTO | NEAR | BEHIND | BESIDE | 
  1132.           ON | UNDER] [noun] 
  1133.       PUSH | TOUCH [noun] {[WITH] [noun]}
  1134.       TURN [noun] {ON | OFF} 
  1135.       TURN {ON | OFF} [noun] 
  1136.       PULL [noun]
  1137.       PLAY {WITH} [noun]
  1138.       LIGHT [noun] 
  1139.       EXTINGUISH | PUT OUT [noun]  (* synonym is "EXT" *) 
  1140.       SHOOT | FIRE [noun] [AT] [creature] 
  1141.       SHOOT | FIRE [creature] [WITH] [noun] 
  1142.       PUT ON | WEAR [noun | ALL] 
  1143.       TAKE OFF | REMOVE [noun | ALL] 
  1144.       ASK [creature] [ABOUT] [noun] 
  1145.       TALK [TO | WITH] [creature] {[ABOUT] [noun]}
  1146.       TELL [creature] [ABOUT] [noun] 
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.                                        9
  1154.  
  1155.  
  1156.  SOME GENERAL COMMENTS ABOUT COMMANDS 
  1157.   
  1158.  Figuring out what words work in a game is part of the "challenge" of some
  1159.  adventure games.  The usual directions are understood by AGT games (N, S, E,
  1160.  W, NE, NW, SE, SW, UP, and DOWN; in some cases, ENTER or EXIT might also be
  1161.  appropriate).  Other events might also cause you to change location: if you
  1162.  detonate a nuclear warhead, for example, you'll likely be immediately
  1163.  transported somewhere far, far away.
  1164.   
  1165.  You can try to TAKE or GET most things that are in a room with you; you should
  1166.  EXAMINE or LOOK AT most visible nouns as well, whether or not you are carrying
  1167.  them.  You can DROP or THROW anything you're carrying.  Eating and drinking
  1168.  are often permitted, but eating strange things is usually dangerous.  If
  1169.  something seems to be closed or locked, you can try to open or unlock it --
  1170.  but it may require some special kind of key.
  1171.   
  1172.  There's no penalty for incorrect words: if the game doesn't understand a word,
  1173.  it gives you another chance and doesn't count the invalid input as a turn.
  1174.  
  1175.  If you try to do something foolish like EAT CHAIR or GET THE BUILDING, the
  1176.  game will give you an appropriate response like "It is impossible to eat the
  1177.  chair" or "The building can not be taken".
  1178.   
  1179.   
  1180.  ABBREVIATIONS AND FUNCTION KEYS 
  1181.   
  1182.  To look more closely at something, EXAMINE it.  The period character ('.') is
  1183.  a synonym for EXAMINE, so typing ". BOOK" is the same as "EXAMINE BOOK".  You
  1184.  can also abbreviate EXAMINE as EX (e.g., EX BOOK).  The exclamation point
  1185.  ('!') is a synonym for ATTACK.  To turn out a light, you can EXTINGUISH it,
  1186.  and EXTINGUISH can be abbreviated as EXT (e.g., EXT LAMP).
  1187.  
  1188.  It is also possible to use the function and cursor keys in lieu of many
  1189.  frequently used commands and directions as follows:
  1190.  
  1191.      F1  --  GET                  Up Arrow  --  NORTH
  1192.      F2  --  DROP                 Down Arrow  --  SOUTH
  1193.      F3  --  EXAMINE              Right Arrow  --  EAST
  1194.      F4  --  READ                 Left Arrow  --  WEST
  1195.      F5  --  OPEN                 Home  --  NORTHWEST
  1196.      F6  --  CLOSE                End  --  SOUTHWEST
  1197.      F7  --  INVENTORY            Pg Up  --  NORTHEAST
  1198.      F8  --  LOOK                 Pg Dn  --  SOUTHEAST
  1199.      F9  --  SCORE                Gray "-" Key -- UP
  1200.      F10  --  HELP                Gray "+" Key -- DOWN
  1201.                                   Ins -- ENTER
  1202.                                   Del -- EXIT
  1203.   
  1204.  If at any time during the game the player needs to be reminded of what the
  1205.  function and cursor keys stand for, hitting the ? key followed by <ENTER> will
  1206.  produce a diagram of what each cursor and function key means.
  1207.   
  1208.   
  1209.  SPECIAL WORDS 
  1210.   
  1211.  Certain words have special meanings to AGT games.  SCORE will let you see how
  1212.  much progress you've made and will give you an idea how much of the game
  1213.  
  1214.                                       10
  1215.  
  1216.  you've seen so far.  QUIT will permit you to stop the game and return to DOS. 
  1217.  SAVE will allow you to save the current game status, and RESTORE will restore
  1218.  a previously-saved game.
  1219.  
  1220.  In addition, AGT also allows the use of SCRIPT to echo all of the game's
  1221.  output to your printer (as well as the screen).  UNSCRIPT may be used to turn
  1222.  off the printer output.
  1223.   
  1224.  As you move around through the game, you'll notice that the game provides a
  1225.  long text description of each room only when you first enter the room.  To see
  1226.  the full description again, type LOOK or L or hit the F8 function key.  The
  1227.  game doesn't keep these long text descriptions in memory, but instead reads
  1228.  them from disk each time it needs them.  If you don't like this delay, you can
  1229.  suppress the long text by using the BRIEF command.  VERBOSE will bring them
  1230.  back.
  1231.  
  1232.  Further, in AGT it is possible to issue commands for HELP or alternatively hit
  1233.  the F10 key.  Be warned, however, that some game designer might feel that the
  1234.  situation does not deserve any help or, worse yet, some deviate designer might
  1235.  actually give the player a hint that is a little misleading.
  1236.     
  1237.   
  1238.  NOUNS 
  1239.   
  1240.  While the list of verbs is generally similar from game to game, all the nouns
  1241.  change every time.  One game might be filled with weapons and creatures, while
  1242.  another might contain many keys and locks.  Most nouns are unique: you
  1243.  probably won't find more than one "gold key," but you might find a "brass
  1244.  key," an "access card," and an "entry pass."  The game only understands an
  1245.  adjective if it is correctly followed by the matching noun: if TAKE RED FLUTE
  1246.  is valid, the game will not try to guess what you meant by TAKE RED or TAKE
  1247.  RED INSTRUMENT or TAKE THE RED ONE.  It will accept TAKE FLUTE, but not TAKE
  1248.  BLUE FLUTE.     
  1249.  
  1250.  With some verbs, nouns are optional.  For example, NORTH is quite clear by
  1251.  itself, and any "valid" words following it will be ignored completely.  EAT
  1252.  needs a noun of some kind, preferably an edible one.  And some things may not
  1253.  be possible unless you specify a tool: UNLOCK PADLOCK may not be acceptable,
  1254.  while UNLOCK THE PADLOCK WITH THE BRASS KEY may work fine.
  1255.   
  1256.   
  1257.  NOISE WORDS 
  1258.   
  1259.  The words "THE", "MY", "ITS", "A" and "AN" are ignored; so are friendly words
  1260.  like "PLEASE" and "NOW."  This way, PLEASE PUT A RED ROSE AND MY NOTE ON THE
  1261.  SMALL TABLE NOW can be understood, while the game may be quite confused by
  1262.  PLEASE YOUR MOTHER.
  1263.   
  1264.  
  1265.  PREPOSITIONAL PHRASES 
  1266.   
  1267.  In some cases, the preposition need not be followed by an object (TURN THE GAS
  1268.  STOVE ON is fine), but often the game will be puzzled unless you provide one. 
  1269.  For example, UNLOCK THE PADLOCK WITH or PLACE THE BOOK BESIDE just won't do.
  1270.  
  1271.  
  1272.  COMMAND LINE OPTIONS
  1273.  
  1274.  
  1275.                                       11
  1276.  
  1277.  In order to accommodate as many hardware systems as possible, it is possible
  1278.  to enter a "/B" option on the command line that invokes your adventure game. 
  1279.  This causes the game to use the BIOS for all output, rather than writing
  1280.  directly to the screen memory locations (which is considerably faster and
  1281.  AGT's default mode of operation).  Some clones may require this option.  Also,
  1282.  some multi-tasking environments (specifically, DesqView) need this option to
  1283.  allow an AGT game to run in its own "window".  If you find that an AGT game
  1284.  causes strange behavior on your screen, you should try this option.  For
  1285.  example, to play the game QUEST using this option, you would start the game
  1286.  from the DOS prompt with "RUN QUEST /B".
  1287.  
  1288.  There is one additional command line option available.  If you wish the
  1289.  player's input to be in lower case, rather than AGT's default mode of upper
  1290.  case, use the option "/L".  For example, to play CAVE with lower case player
  1291.  input, start the game from the DOS prompt with "RUN CAVE /L".
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.                                       12
  1337.  
  1338.  PART 2: HOW TO WRITE AN ADVENTURE GAME   
  1339.   
  1340.                                
  1341.  INTRODUCTION: WHY SHOULD I WRITE MY OWN ADVENTURE GAME? 
  1342.   
  1343.  Here are a few good reasons:  
  1344.   
  1345.    - Imagine your office as an adventure game.  Imagine the wonderful
  1346.  descriptions you could provide for your co-workers' offices, the analogies you
  1347.  could make for the delivery people, and the thinly-veiled insults of your boss
  1348.  you could include.  If such an adventure game scenario were written in
  1349.  reasonable taste, it could serve as a well-deserved diversion on a Friday
  1350.  afternoon.  Of course, if it's written in poor taste, and your insults aren't
  1351.  veiled enough, it could be your last Friday.
  1352.   
  1353.    - Maybe you are trying to teach someone something.  Perhaps you want them to
  1354.  learn about computers.  Maybe you want to guide them through many screens of
  1355.  tutorials.  If you could write the text as an adventure game, and make
  1356.  learning a game, the game players might learn faster and even have fun doing
  1357.  it.  An excellent example of this is a series of spreadsheet templates called
  1358.  Templates of Doom which has introduced Lotus 1-2-3 (in the guise of an
  1359.  adventure game) to thousands of new spreadsheet users.  Another excellent
  1360.  example is a game entitled Brainscape which teaches the anatomy of the human
  1361.  brain by letting the player (who has been reduced to microscopic size) explore
  1362.  the various "locations" of the brain in search of human growth hormone and
  1363.  other "treasures" -- so the he can be restored to normal size.
  1364.   
  1365.    - Or maybe you're well-equipped with a great imagination and you want to
  1366.  develop a game that will rival the ones you've bought in stores or played with
  1367.  friends.  Perhaps this is your chance to prove your fiction-writing abilities.
  1368.  
  1369.    - Or last, but not least, because writing adventures is even more fun than
  1370.  playing them.
  1371.   
  1372.  
  1373.  HOW AN AGT ADVENTURE GAME WORKS 
  1374.  
  1375.   
  1376.  AN OVERVIEW 
  1377.   
  1378.  When a player begins to play an AGT game, the first thing the program does is
  1379.  look on the disk for a title file (indicated by a .TTL file extension), which
  1380.  should contain the name of the game, the author's name, and perhaps a
  1381.  copyright statement.  Each line in the file is displayed centered on the
  1382.  screen.
  1383.   
  1384.  AGT also posts its copyright notice just below the game writer's title
  1385.  information.  If, for some reason, there is no file with a .TTL extension, the
  1386.  AGT copyright information is displayed by itself.  The title screen, with the
  1387.  author's information and AGT's, stays on the screen while the program
  1388.  initializes all its data arrays and records and reads the various compiled
  1389.  data file.
  1390.   
  1391.  If the game's .DAT file contains some text preceded by the keywords INTRO or
  1392.  INTRODUCTION and ended with the keyword END_INTRO, that text is displayed at
  1393.  the beginning of the game.  It cannot be re-read during the game.   
  1394.  
  1395.  In addition to the INTRO section of the .DAT file, there can also be an
  1396.  
  1397.                                       13
  1398.  
  1399.  instruction file with a .INS extension.  If such a file exists for the
  1400.  adventure being played, before actual play begins AGT will ask the player if
  1401.  he/she would like instructions.  If the answer if yes, this file will be
  1402.  displayed.
  1403.   
  1404.  Once all the data has been read and the player has had an opportunity to read
  1405.  the game's instructions (if any), the program puts the player into room 2 of
  1406.  the game (or another room if the author has specified an alternative starting
  1407.  location).  There is no room 1; a location of 1 indicates the player's
  1408.  pockets.  AGT then prints the long text description for room 2, (or the
  1409.  alternative starting location) and the player is asked what to do.
  1410.   
  1411.  Each time the player types in a command and <ENTER>, the program sends the
  1412.  input line to the "parse" module.  The parser take the input line, breaks it
  1413.  into separate words, and tries to locate an addressee (if the command is being
  1414.  directed to another character), a verb, a noun, a preposition, and another
  1415.  noun as the object of the preposition.  It does this by eliminating extra
  1416.  words like "THE" and "PLEASE"; and by checking and then eliminating
  1417.  adjectives.  It returns up to five words: addressee, verb, noun, preposition,
  1418.  and an object of the preposition.  (If any of these elements is missing, the
  1419.  "empty string" ('') is returned in its place.)  
  1420.   
  1421.  If an invalid word is found by the parser, it informs the user, indicating
  1422.  what part of speech AGT expected and which specific input command word it
  1423.  didn't recognize.  Otherwise, the program then calls the execute module; this
  1424.  section selects a procedure to call based on the verb (THROW, TAKE, EAT, MOVE,
  1425.  etc.).  Depending on the procedure's own checking, the noun, preposition and
  1426.  object might be rejected as invalid or, in some cases, ignored partly or
  1427.  completely and an appropriate "error" message will be given  For example, "EAT
  1428.  CASTLE" would typically cause the "error" message: "It is impossible to eat
  1429.  the castle."
  1430.   
  1431.  There are two ways a player can be moved to a new room.  One is by
  1432.  specifically trying to do so.  Moving east is generally accomplished by typing
  1433.  EAST or E or hitting the Right Arrow cursor key.  If the player tries to move
  1434.  in a direction that is not allowed, AGT will inform him that such a move is
  1435.  impossible. 
  1436.   
  1437.  The other way to move is by meeting a set of special requirements that the
  1438.  game's author has defined as a "special."  The special might be defined, in
  1439.  plain language, as "if the player is in the sauna, and he turns the faucet,
  1440.  then move him to another room X."  That other room X might be anything.  One
  1441.  possibility is that it may be a room with a similar or identical description,
  1442.  but with a new exit or without an old one.  It might even be the same room,
  1443.  but by executing the "special," the program displays several lines of text.
  1444.       
  1445.  In this case, the special text might be "You turn on the faucet, and scalding
  1446.  hot water pours onto your feet.  You scream in agony and kick the faucet,
  1447.  which is turned off."  If the author was cruel, the "special" here might move
  1448.  the player to a new room called "hell" and be told "As you turn the faucet,
  1449.  scalding hot water pours out onto your legs.  You scream in agony, but the
  1450.  faucet won't shut off.  In minutes, you are scalded to death.  You awaken in
  1451.  purgatory, where Satan tells you that your punishment for killing the lizard
  1452.  [something the player did earlier to get here] will be boiling in oil for
  1453.  eternity."  The new room description would describe a vat of boiling oil,
  1454.  provide no exits, and include the keyword GAME_END to end the game.
  1455.   
  1456.  For relatively simple adventure games (i.e., Standard Level games), "Specials"
  1457.  
  1458.                                       14
  1459.  
  1460.  are the way you do almost anything unusual.  Of course, a special can be used
  1461.  to move a player to a new room (i.e., TOUCH MIRROR might cause the player to
  1462.  fall through the looking-glass and into a new room).  But specials also allow
  1463.  a room to be "changed" in the player's view -- this is accomplished by
  1464.  actually moving the player to a new, but similar room.  If you want an airlock
  1465.  to close one door and open another, you use a "special" which moves the player
  1466.  to a 'new' airlock with a different exit.  If you want a player to 'teleport,'
  1467.  you use a special.  If you want to player to be surprised by some action but
  1468.  not moved (i.e., PLAY STEREO could lead to "Beethoven's Fifth plays loudly,
  1469.  awakening the neighbors.  Someone pounds loudly on the ceiling"), use a
  1470.  special.  More examples of "Specials" will be given later.
  1471.   
  1472.  
  1473.  STANDARD LEVEL GAME FILES
  1474.  
  1475.  Each Standard Level games can have up to three files: A title file (e.g.,
  1476.  ALICE.TTL), an instruction file (e.g., ALICE.INS), and a data file
  1477.  (ALICE.DAT).  Each of these file types will be explained in separate sections
  1478.  to follow.
  1479.  
  1480.  
  1481.  TITLE FILES
  1482.  
  1483.  If there is a file with a .TTL extension, that file is displayed first before
  1484.  the actual game play begins.  The contents of this file will be displayed
  1485.  centered on a cleared screen.  For example, the title file for the ALICE IN
  1486.  WONDERLAND game contained in the ALICE.TTL file is:
  1487.  
  1488.      The Adventures of Alice
  1489.      Who
  1490.      Went Through the Looking-Glass
  1491.      And
  1492.      Came Back
  1493.      Though Not Much Changed
  1494.      Based on characters created by Lewis Carroll
  1495.      Game and Text Copyright 1986 D.A. Asherman
  1496.  
  1497.  This would actually be centered on the screen as follows:
  1498.  
  1499.                             The Adventures of Alice
  1500.                                       Who
  1501.                         Went Through the Looking-Glass
  1502.                                       And
  1503.                                    Came Back
  1504.                             Though Not Much Changed
  1505.                  Based on characters created by Lewis Carroll
  1506.                   Game and Text Copyright 1986 D.A. Asherman
  1507.  
  1508.  
  1509.  SETTING SCREEN COLORS
  1510.  
  1511.  AGT sets the screen colors to be used during the adventure automatically.  If
  1512.  the game is being played on a color monitor, the screen output is quite
  1513.  colorful.  Specifically, the default screen colors will be:
  1514.  
  1515.      Normal text color is Cyan
  1516.      High lighted text color is Yellow
  1517.      Background color is Black
  1518.  
  1519.                                       15
  1520.  
  1521.      Reverse text color is Red
  1522.      Reverse background color is Light Gray
  1523.  
  1524.  These colors cause the normal screen output to be shown as "Cyan on Black",
  1525.  while the player's input is shown as "Yellow on Black", and the status line at
  1526.  the top of the screen is shown as "Red on Light Gray".
  1527.  
  1528.  These default colors can be changed to specific different colors in the first
  1529.  line of the .TTL file.  For example, if you wanted to change the color
  1530.  combinations to normal output of "White on Blue", and player input of "Yellow
  1531.  on Blue", and the status line of "Black on Cyan", then you are specifying:
  1532.  
  1533.      Normal text color is White
  1534.      High lighted text color is Yellow
  1535.      Background color is Blue
  1536.      Reverse text color is Black
  1537.      Reverse background color is Cyan
  1538.  
  1539.  This could be accomplished by putting the following line as the first line of
  1540.  the .TTL file:
  1541.  
  1542.      COLORS WHITE YELLOW BLUE BLACK CYAN
  1543.  
  1544.  If you are playing the game on a monochrome monitor, most of the screen output
  1545.  will be "White on Black", i.e., the normal monochrome output for your monitor. 
  1546.  The only exceptions will be the player input which will be shown high-lighted
  1547.  and the status line on the top of the screen which will be shown in reverse,
  1548.  i.e., "Black on White".  On monochrome monitors, this basic monochrome color
  1549.  combination will be used automatically regardless of what may have been
  1550.  specified in the COLORS command in the first line of the .TTL file.
  1551.  
  1552.  It is also possible for the player to change the screen color combination by
  1553.  giving input during the game.  For example, if the player inputs:
  1554.  
  1555.      COLORS YELLOW GREEN CYAN BLACK LIGHTGRAY
  1556.  
  1557.  during the game, the screen will immediately change to "Yellow on Cyan", with
  1558.  the player's input shown as "Green on Cyan", and the status line displayed as
  1559.  "Black on Light Gray" -- if the game is being played on a color monitor.  If
  1560.  the game is being played on a monochrome monitor, the above player input would
  1561.  have no effect.  Other player color commands allowed are:
  1562.  
  1563.      COLORS MONO
  1564.  
  1565.  which changes the screen to a monochrome color combination - even on a color
  1566.  monitor, and:
  1567.  
  1568.      COLORS DEFAULT
  1569.  
  1570.  which will return the screen to AGT's default color combination -- depending
  1571.  upon the type of monitor the game is currently being played upon.
  1572.  
  1573.  
  1574.  INSTRUCTIONS FILES 
  1575.  
  1576.  If there is a file with the correct filename and the suffix .INS, then AGT
  1577.  will ask the player if he wished to read the instructions for the game.  If
  1578.  the response is Y or YES, the filename.INS file will be displayed a screen at
  1579.  
  1580.                                       16
  1581.  
  1582.  a time with a pause between screens.  If the player responds with N or NO,
  1583.  then the instructions will be skipped and the game will begin normally in the
  1584.  starting room location.
  1585.   
  1586.  If there is no .INS file, then the instruction prompt will not appear and play
  1587.  will begin without any instructions.
  1588.   
  1589.  
  1590.  THE WORK-HORSE .DAT FILE
  1591.   
  1592.  Adventure games are really just a special kind of data base application.  The
  1593.  game driver (for AGT, this is RUN.EXE) just accesses the adventure data base
  1594.  to retrieve data based on the player's commands.  This is much like how a
  1595.  "standard" data base application might display all employees in the marketing
  1596.  department with salaries over a certain amount after getting a query from the
  1597.  data base user.  For Standard Level AGT games, the data base is contained in
  1598.  the .DAT file.  This file is the real work-horse file for AGT adventure games. 
  1599.  The most important data elements in an AGT game are three large data arrays:
  1600.  the game's rooms, nouns, and creatures.  Each of these data types will be
  1601.  explained in separate sections that follow.
  1602.   
  1603.  
  1604.  ROOMS 
  1605.  
  1606.  The room specification in the .DAT data file is quite simple: 
  1607.   
  1608.  Required: 
  1609.   
  1610.         |<-----significant----->|<------ignored------------------------>| 
  1611.                                 | 
  1612.   
  1613.          ROOM nnn                <-- nnn is a number from 2 to 199 
  1614.          Room Name               <-- short room name (up to 30 characters),
  1615.                                      that will be shown on the status
  1616.                                          line (do not include comments!) 
  1617.          {optional characteristics} 
  1618.          END_ROOM 
  1619.   
  1620.  Optional characteristics:       <-- optional but at least one is 
  1621.                                      strongly recommended 
  1622.   
  1623.         |<---significant--->|<------ignored------------------------>| 
  1624.                             | 
  1625.   
  1626.          {direction} nnn     <-- nnn is a number from 2 to 199 
  1627.                                  (default is 0) 
  1628.                                  {any one of 12 directions can be 
  1629.                                  specified, from the list: 
  1630.                                     NORTH   NORTHEAST  UP 
  1631.                                     SOUTH   SOUTHEAST  DOWN 
  1632.                                     EAST    NORTHWEST  ENTER 
  1633.                                     WEST    SOUTHWEST  EXIT} 
  1634.          SPECIAL nnn         <-- optional, nnn is a room number.{If 
  1635.                                  present, the current definition 
  1636.                                  must include KEY xxx and there must 
  1637.                                  be a SPECIAL nnn definition} 
  1638.          KEY xxx             <-- xxx is a noun number (200-299) 
  1639.                                  {activates special nnn} 
  1640.  
  1641.                                       17
  1642.  
  1643.          LIGHT xxx           <-- xxx is a noun number (200-299) 
  1644.                                  OR the value 1 ("any light") 
  1645.                                  {default is 0} 
  1646.          POINTS xxx          <-- xxx is number of points player is 
  1647.                                  awarded just for getting here.
  1648.                                  Default is 0.
  1649.          LOCKED_DOOR         <-- default is FALSE.  If TRUE, AGT 
  1650.                                  will act as if there is a locked 
  1651.                                  door that cannot be opened in 
  1652.                                  the room and give various 
  1653.                                  appropriate messages if player 
  1654.                                  tries to do something to the 
  1655.                                  door.
  1656.          GAME_END            <-- if this line is in the definition, 
  1657.                                  the game ends as soon as the player 
  1658.                                  enters the room (the room_descr 
  1659.                                  is displayed, then the score).
  1660.                                  (Player loses game here.) 
  1661.          GAME_WIN            <-- if this line is in the definition, 
  1662.                                  the game ends as soon as the player 
  1663.                                  enters the room (the room_descr 
  1664.                                  is displayed, then the score).
  1665.                                  (Player wins game here.) 
  1666.          ROOM_SYNONYMS       <-- default is NONE.  Room synonyms are 
  1667.                                  indicated in the .DAT file as: 
  1668.                                    ROOM_SYNONYMS MAGIC_WORD XYZZY SESAME 
  1669.                                    ROOM_SYNONYMS CHANGE_LOCATIONS CLIMB 
  1670.                                    ROOM_SYNONYMS PLAY SHOW DISPLAY FLASH 
  1671.                                  These cause the first word (which must 
  1672.                                  be a valid verb) to be substituted 
  1673.                                  whenever the player enters one of the 
  1674.                                  words following the first word in that 
  1675.                                  room.  For example, if the player 
  1676.                                  entered SHOW, DISPLAY, or FLASH (above), 
  1677.                                  AGT would act as if the word PLAY (which 
  1678.                                  is a "special") was entered and react 
  1679.                                  accordingly.  There can only be one room 
  1680.                                  synonym specification in each room.
  1681.   
  1682.  It is recommended that at a minimum, one exit from each room be provided; 
  1683.  otherwise the player will be stuck in the room until he quits.  Of course,
  1684.  that direction might be a special -- which will be explained in a later
  1685.  section.
  1686.   
  1687.  A room description should also be provided in .DAT file: 
  1688.   
  1689.      ROOM_DESCR <nn> 
  1690.      Some text, any number of lines, about the room.
  1691.      END_ROOM_DESCR 
  1692.   
  1693.  This room description will be what is printed whenever the player enters the
  1694.  room or gives the command to LOOK.
  1695.  
  1696.  
  1697.  HELP MESSAGES
  1698.  
  1699.  An optional HELP message may also be provided for each room: 
  1700.   
  1701.  
  1702.                                       18
  1703.  
  1704.      HELP <nn> 
  1705.      Some text, any number of lines, gives a HELP message for this room.
  1706.      END_HELP_DESCR 
  1707.   
  1708.  If you don't enter a specific HELP message for a room, the default message if
  1709.  the player asks for HELP is "Sorry, but you are on your own here."
  1710.  
  1711.  Here is a more complete example of how a room might be specified in the .DAT
  1712.  file:
  1713.  
  1714.      ROOM 32
  1715.      Top of Cliff
  1716.      NORTH 33
  1717.      SOUTH 34
  1718.      WEST 35
  1719.      END_ROOM
  1720.  
  1721.      ROOM_DESCR 32
  1722.      You are standing near the edge on the top of a tall cliff.  To the east is
  1723.      a sheer drop of several thousand feet.  To the north, west and south are
  1724.      paths that lead down the side of the mountain.
  1725.      END_ROOM_DESCR
  1726.  
  1727.      HELP 32
  1728.      Be careful, don't go too near the edge!
  1729.      END_HELP_DESCR
  1730.  
  1731.  
  1732.  NOUNS 
  1733.  
  1734.  Nouns are necessarily more complex than rooms.  They are specified in the 
  1735.  following format, listed with the possible values (and defaults):
  1736.   
  1737.         |<-----significant----->|<------ignored------------------------>| 
  1738.                                 | 
  1739.   
  1740.          NOUN nnn                <-- nn is a number from 200 to 299 
  1741.          Name                    <-- one-word name of the noun 
  1742.          Adjective               <-- one-word adjective 
  1743.          Short one-line description of the noun 
  1744.  
  1745.          {other characteristics go here}- 
  1746.          END_NOUN 
  1747.   
  1748.      Other characteristics (optional): 
  1749.   
  1750.          SIZE nn                 <-- nn is a number from 1 to 99+ 
  1751.                                      Default is 1.
  1752.          WEIGHT nn               <-- nn is a number from 1 to 99+
  1753.                                      Default is 1.
  1754.          UNMOVABLE               <-- default is movable (carryable) 
  1755.          LOCATION nn             <-- nn is a "room" number (1-299, 1000) 
  1756.                                      1 - if being carried 
  1757.                                      2-199 - in room 2, etc.
  1758.                                      200-299 - inside another noun
  1759.                                      1000 - if being worn 
  1760.  
  1761.  
  1762.  
  1763.                                       19
  1764.  
  1765.          READABLE                <-- default is "not readable" 
  1766.                                      {if READABLE then <TEXT nn> 
  1767.                                       must also be defined} 
  1768.          CLOSABLE                <-- default is "not closable" 
  1769.          CLOSED                  <-- default is "open" 
  1770.                                      {if open then it can hold 
  1771.                                       something} 
  1772.          LOCKABLE                <-- default is not lockable 
  1773.          LOCKED                  <-- default is unlocked 
  1774.          KEY nn                  <-- default is 0 
  1775.                                      {noun nn unlocks this noun 
  1776.                                       if it's lockable} 
  1777.          EDIBLE                  <-- default is inedible 
  1778.          DRINKABLE               <-- default is undrinkable/solid 
  1779.          POISONOUS               <-- default is nonpoisonous 
  1780.                                      {predictable effect if poisonous 
  1781.                                       edible/drinkable noun is eaten} 
  1782.          ON                      <-- default is 'off' 
  1783.          PUSHABLE                <-- default is not pushable 
  1784.                                      {PUSH_DESCR nn recommended but 
  1785.                                       not required if it is pushable} 
  1786.          PULLABLE                <--  (ditto, PULL_DESCR nn) 
  1787.          PLAYABLE                <--  (ditto, PLAY_DESCR nn) 
  1788.          TURNABLE                <--  (ditto, TURN_DESCR nn) 
  1789.          IS_LIGHT                <-- default is NOT is_light 
  1790.                                          (IS_LIGHT -> illuminates any room 
  1791.                                          defined as LIGHT 1 or LIGHT nnn 
  1792.                                          where nnn is the noun number) 
  1793.          POINTS                  <-- default is 0 (points awarded to player 
  1794.                                          if object is being carried, present or
  1795.                                          in the "treasure" room at game_end) 
  1796.          GAME_WIN                <-- default is FALSE.  Player wins game 
  1797.                                          if TRUE when he get this noun.
  1798.          CAN_SHOOT               <-- default is can't shoot (can the 
  1799.                                          weapon be used to shoot a 
  1800.                                          creature? if not, it must be 
  1801.                                          thrown) 
  1802.          NUM_SHOTS               <-- default is 0 (how many bullets/ 
  1803.                                          charges are there initially? 
  1804.                                          decremented each time the noun is 
  1805.                                          fired.) 
  1806.          WEARABLE                <-- default is not wearable 
  1807.          POSITION                <-- default in NONE.  If the game designer 
  1808.                                          wishes to have a noun's original 
  1809.                                          position as "(behind the tree)" 
  1810.                                          he would have: 
  1811.                                          POSITION behind the tree 
  1812.                                          in the .DAT file.  The verbs 
  1813.                                          PUT/PLACE and GET/TAKE change the 
  1814.                                          noun's position.
  1815.          SINGULAR                <-- default is SINGULAR.  The only 
  1816.                                          alternative is PLURAL.  AGT 
  1817.                                          verbs/pronouns will be singular 
  1818.                                          or plural depending upon this 
  1819.                                          value.
  1820.  
  1821.  
  1822.  
  1823.  
  1824.                                       20
  1825.  
  1826.          NOUN_SYNONYMS           <-- default is NONE.  If the .DAT file had 
  1827.                                          NOUN_SYNONYMS GOLD COIN COINS 
  1828.                                          then all of these words would be 
  1829.                                          accepted as valid synonyms for 
  1830.                                          this noun.  Of course, the 
  1831.                                          "official" NAME will also work.
  1832.   
  1833.  Note: To 'spice' up the game, you might want to put things inside other things
  1834.  initially, so the player has to open everything to be sure s/he doesn't miss
  1835.  anything important.  Be logical, though: a refrigerator seems likely to be
  1836.  open-able, but a crabapple probably ought to be 'closed' and 'unclosable' and
  1837.  thus unable to contain something else.
  1838.  
  1839.  Similar to the complete room descriptions, there is a way to specify a lengthy
  1840.  description of a noun by using a NOUN_DESCR in the .DAT file.  When the player
  1841.  gives the command to EXAMINE the noun, this description will be displayed on
  1842.  the screen.
  1843.  
  1844.  
  1845.  TEXT 
  1846.   
  1847.  If a noun is readable, the description that is printed whenever the player
  1848.  gives the command to READ it is contained in a TEXT description in the .DAT
  1849.  file.  Thus, the following would be a valid set of definitions:  
  1850.   
  1851.      NOUN 232 
  1852.      Book 
  1853.      Red 
  1854.      There is a small red book here.
  1855.      WEIGHT 1 
  1856.      SIZE 3 
  1857.      LOCATION 32 
  1858.      READABLE 
  1859.      NOUN_SYNONYMS Cover Title
  1860.      END_NOUN 
  1861.   
  1862.      NOUN_DESCR 232 
  1863.      The red book is quite thin, and has a hard cover.  There is writing on the
  1864.      book's cover.
  1865.      END_NOUN_DESCR 
  1866.   
  1867.      TEXT 232 
  1868.      The title of the book is "The Wisdom of Ronald Reagan."  The pages are all
  1869.      blank.
  1870.      END_TEXT 
  1871.  
  1872.  
  1873.  MULTIPLE NOUNS WITH THE SAME NAME
  1874.  
  1875.  AGT allows multiple nouns with the same name.  The parser examines the current
  1876.  room and player environment and assumes that if only one noun with a
  1877.  particular name is in the room then that must be the noun that the player
  1878.  meant as the NOUN or OBJECT of his command.  If there is more than one noun
  1879.  with the same name in the room, the parser gives an "error" message and asks
  1880.  the player to be more specific about which NOUN (or OBJECT) he means.  For
  1881.  example, if there are three kinds of trees in the "room" and the player had
  1882.  entered the command to EXAMINE TREES, the parser would ask for the
  1883.  clarification: "Which 'TREES', the OLIVE TREES or the OAK TREES or the PINE
  1884.  
  1885.                                       21
  1886.  
  1887.  TREES?" The player could then enter any response with one of the proper 
  1888.  adjectives to specify which trees were meant, i.e., any of these responses
  1889.  would tell the parser that the OAK trees were correct: 
  1890.   
  1891.     THE OAK TREES 
  1892.     EXAMINE THE OAKS 
  1893.     OAK
  1894.     THE OAKS, YOU OAF!! 
  1895.   
  1896.  If the player still doesn't enter a response with one of the proper
  1897.  adjectives, a message is given that asks the player to re-enter his command
  1898.  using the NOUN's adjective to clarify which NOUN is meant.  This means that if
  1899.  there are two or more nouns with the same name, their adjectives must be
  1900.  unique, i.e., you can have a RED BOWL and a GREEN BOWL, but the game should
  1901.  not contain two RED BOWLs (at least it should not have two of them if they can
  1902.  be together in the same room.) 
  1903.  
  1904.   
  1905.  PUSH, PULL, TURN, AND PLAY DESCRIPTIONS 
  1906.   
  1907.  Similar to TEXT descriptions if a noun is readable, you may also give unique
  1908.  descriptions if a noun is described as being pushable, playable, turnable, or
  1909.  pullable and the player takes one of those actions with the noun.  These
  1910.  descriptions are included in the .DAT file as a PUSH_DESCR, PULL_DESCR,
  1911.  TURN_DESCR and PLAY_DESCR.  They will be displayed only if the player takes
  1912.  the specified action AND that action does not activate a SPECIAL for the
  1913.  current room.  If there is no description provided, a standard ("nothing
  1914.  happens" or something equally appropriate) message is provided.
  1915.  
  1916.  For example, if you want to generate messages whenever the player gives the
  1917.  commands to PLAY RADIO or to TURN ON RADIO or TURN DIAL, you could set up the
  1918.  following in the .DAT file:
  1919.  
  1920.      NOUN 218 
  1921.      Radio
  1922.      Portable
  1923.      There is a large "ghetto blaster" portable radio here.
  1924.      MOVABLE
  1925.      WEIGHT 10
  1926.      SIZE 10
  1927.      NOUN_SYNONYMS GHETTO BLASTER DIAL DIALS KNOB KNOBS
  1928.      PLAYABLE
  1929.      TURNABLE
  1930.      END_NOUN
  1931.    
  1932.      NOUN_DESCR 218
  1933.      The radio is barely portable.  It weighs about 47 pounds and must be
  1934.      carried with both hands.  It has many dials and knobs.
  1935.      END_NOUN_DESCR 
  1936.   
  1937.      PLAY_DESCR 218
  1938.      As you turn on the radio, you hear a song by "Duran Duran."  After a few
  1939.      moments, you become bored with the music and you turn the radio off.
  1940.      END_PLAY_DESCR 
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.                                       22
  1947.  
  1948.      TURN_DESCR 218
  1949.      As you turn the dial on the radio, you hear the Beatles singing
  1950.      "Yesterday".  This sounds like a good station and you stop turning the 
  1951.      dial.  The music sounds nice and you sing along softly.
  1952.      END_TURN_DESCR 
  1953.   
  1954.   
  1955.  EATING, DRINKING, AND DYING 
  1956.  
  1957.  Any object defined as EDIBLE can be eaten.  Any object defined as DRINKABLE
  1958.  can be drunk.  And any object defined as POISONOUS will kill the player if
  1959.  s/he eats or drinks it.  POISONOUS has no effect if the noun is neither edible
  1960.  nor drinkable.  In most situations, it is considered poor sport to make
  1961.  completely non-threatening and logically edible things poisonous; it is
  1962.  likewise questionable to make packages of rat poison edible but non-poisonous.
  1963.  
  1964.  When a noun is eaten or drunk it normally disappears (into the player's
  1965.  stomach -- naturally).  The only exception to this is when the noun is
  1966.  unmovable.  This makes it possible for the player to drink from a lake without
  1967.  having all the water (or the lake itself) disappear.
  1968.   
  1969.  
  1970.  WEIGHT AND SIZE 
  1971.  
  1972.  Those values are there for a reason.  No player can lift an object heavier
  1973.  than 100, even if it's defined as MOVABLE.  Likewise, objects whose size is
  1974.  more than 100 are too awkward to be carried.  The total weight the player can
  1975.  carry is 100, so the player cannot carry two 60-weight objects at once.  Total
  1976.  size limit is also 100.  It is considered poor sport to assign large weight
  1977.  values to feathers and low values to large slabs of steel, but cruel game
  1978.  writers are able to do so.  Likewise, a game will be less baffling if small
  1979.  objects (pens, tin cans) have small size values and large ones (desks, cars)
  1980.  are larger.
  1981.   
  1982.  (Remember, of course, that if your scenario puts the player in the role of
  1983.  King Kong or Godzilla, you'd want to scale everything down so s/he might be
  1984.  able to easily carry six cars and a bus but have difficulty with more than one
  1985.  fully-loaded semi or house.) 
  1986.  
  1987.   
  1988.  LIGHT AND DARKNESS
  1989.  
  1990.  If a room has a LIGHT value other than 0 (the default), the room will appear
  1991.  pitch black if the player wanders in empty-handed.  There are two "types" of
  1992.  lights and two types of darkness.  A noun may be defined as being a light by
  1993.  specifying the word IS_LIGHT in its definition; in this case, it will light
  1994.  any dark room defined as LIGHT 1.  The light value of 1 in a room definition
  1995.  means that any light will make the room visible.  Of course, these
  1996.  "general-purpose" lights must be turned on to light the room, and thus all
  1997.  LIGHTs can be TURNed ON and OFF (or LIGHTed and EXTINGUISHed.).  (EXT is an
  1998.  acceptable abbreviation for EXTINGUISH; EX is the abbreviation for EXAMINE.)  
  1999.  If the LIGHT value is other than 1 (i.e., LIGHT 218), only the noun with the
  2000.  matching number will make the room's contents visible.  This is useful if the
  2001.  darkness comes from something other than an absence of light: for example, a
  2002.  fan might be the only object that makes a smokey room clear enough to see in. 
  2003.  A special-purpose light need not be defined as a light (i.e., it doesn't have
  2004.  to be defined IS_LIGHT), nor does it have to be on, to work as a light in a
  2005.  room with that noun as a LIGHT.  A noun can function as a special-purpose
  2006.  
  2007.                                       23
  2008.  
  2009.  light for more than one room, but each room can only be lit by one
  2010.  special-purpose light.  (A room with a LIGHT value of 1 will be lit by ANY
  2011.  noun defined as IS_LIGHT.)  
  2012.   
  2013.   
  2014.  CREATURES 
  2015.   
  2016.  Any living thing is identified as a 'creature', and can be either 'friendly'
  2017.  or 'hostile'.  Friendly creatures are quite passive; hostile creatures are not
  2018.  quite as friendly.  It is recommended that provisions be made for a weapon to
  2019.  kill any hostile creatures.  For fairness, that weapon should be accessible by
  2020.  the player before s/he meets the hostile creature.
  2021.  
  2022.  Players should be discouraged from wild and unwarranted killing: i.e., they
  2023.  ought not kill friendly creatures.  If no weapon will kill the creature (i.e., 
  2024.  if you leave or specify WEAPON as the default value 0), the player cannot kill
  2025.  it.  For friendly creatures, you should not lead the player on by making the
  2026.  weapon something unexpected: if the player kindly offers a jelly bean to the
  2027.  friendly creature, it ought not be fatal.  Only one weapon can kill any given
  2028.  creature, but the same weapon might be used to kill many creatures.
  2029.  
  2030.  The format in the .DAT file for Creatures, like rooms, are relatively simple: 
  2031.  
  2032.         |<-----significant----->|<------ignored------------------------>| 
  2033.                                 | 
  2034.  Required: 
  2035.   
  2036.          CREATURE nnn            <-- nnn is a number from 300 to 399 
  2037.          Name                    <-- one word name 
  2038.          Adjective               <-- one word adjective 
  2039.          Short one-line description of creature.
  2040.          {optional characteristics} 
  2041.          END_CREATURE 
  2042.   
  2043.  Optional: 
  2044.   
  2045.          LOCATION nn             <-- nn is a room number from 1 to 199.
  2046.                                      {default is 0} 
  2047.          WEAPON nn               <-- nn is a noun number from 200 to 299 
  2048.                                      {default is 0} 
  2049.                                      {noun nnn kills this creature} 
  2050.          HOSTILE                 <-- default is friendly 
  2051.          THRESHOLD n             <-- {n is number of times a hostile creature
  2052.                                      can be unsuccessfully attacked before it
  2053.                                      kills the player - default 3} 
  2054.          TIME_THRESH n           <-- {n is number of turns player can be 
  2055.                                      in the same room with the creature 
  2056.                                      before it kills the player - default 
  2057.                                      value is infinite, or disabled} 
  2058.          POINTS nn               <-- nn is the number of points player 
  2059.                                      gets for having this creature in the 
  2060.                                      current room, i.e., for "capturing" 
  2061.                                      or "rescuing" the creature.
  2062.                                      {default is 0} 
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.                                       24
  2069.  
  2070.          GROUPMEMBER             <-- default is NOT a GroupMember.  If a 
  2071.                                      creature is specified as a GROUPMEMBER
  2072.                                      then it will automatically follow the
  2073.                                      player from location to location once
  2074.                                      they meet.
  2075.          GENDER                  <-- default is THING.  GENDER may also be 
  2076.                                      specified as MAN or WOMAN.  GENDER 
  2077.                                      causes pronouns and verbs to be used 
  2078.                                      that are appropriate to the specific 
  2079.                                      creature.  THINGs are ferocious and 
  2080.                                      referred to as "IT".  MANs are less 
  2081.                                      ferocious and are referred to as 
  2082.                                      "HE" and "HIM".  WOMANs are "SHE" 
  2083.                                      and "HER".
  2084.          CREATURE_SYNONYMS       <-- default is NONE.  If the .DAT file had 
  2085.                                      CREATURE_SYNONYMS BOB BILLY then all 
  2086.                                      of these names would be accepted as 
  2087.                                      valid synonyms for the creature. 
  2088.                                      Of course, the "official" NAME will
  2089.                                      also work.
  2090.   
  2091.   
  2092.  NOTE: A player cannot exit a room containing a hostile creature.  When killed,
  2093.  creatures are relocated to LOCATION 0.  Friendly/non-hostile creatures have no
  2094.  effect on the (Standard Level) game's outcome -- they just add a little
  2095.  "spice" to the game.
  2096.  
  2097.  For example, to define a female Froobious Bandersnatch in room 9, which can be
  2098.  killed with noun 205, we could use the following specifications in the .DAT
  2099.  file:
  2100.  
  2101.      CREATURE 301
  2102.      BANDERSNATCH
  2103.      FROOBIOUS
  2104.      There is a mommy froobious bandersnatch, looking for her cubs.
  2105.      LOCATION 9
  2106.      WEAPON 205
  2107.      THRESHOLD 2
  2108.      TIME_THRESH 5
  2109.      WOMAN
  2110.      HOSTILE
  2111.      CREATURE_SYNONYMS BEAST
  2112.      END_CREATURE
  2113.   
  2114.  The thresholds specify that you can try to attack the bandersnatch twice
  2115.  (unsuccessfully) or be in the room with the bandersnatch for 5 turns, before
  2116.  the beast kills you.  The player will not be able to leave the room if the
  2117.  Bandersnatch is present, because she is hostile, until the creature has been
  2118.  killed (with weapon 205).  To use the weapon to kill the creature, the player
  2119.  would FIRE THE GUN AT THE BANDERSNATCH or SHOOT THE BEAST WITH THE GUN, if the
  2120.  weapon is a gun, or THROW the weapon AT the creature or KILL the creature WITH
  2121.  the weapon, if the weapon is not a gun.
  2122.  
  2123.  The complete EXAMINE description might be contained in the .DAT file as:
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.                                       25
  2130.  
  2131.      CREATURE_DESCR 301
  2132.      The bandersnatch is snorting and drooling.  It is a large female and she
  2133.      appears to have misplaced her cubs, which makes her very unpleasant and
  2134.      very dangerous.  She seems to harbor few honorable intentions towards
  2135.      you.
  2136.      END_CREATURE_DESCR
  2137.  
  2138.  
  2139.  GROUPS OF CREATURES
  2140.  
  2141.  Creatures can be designated as a member of the "Group" by using the
  2142.  GROUPMEMBER specification.  All group members in the current location will
  2143.  automatically move with the player when he/she moves to another location. 
  2144.  However, their group status will not effect other aspects of their behavior
  2145.  during the game, i.e., they can still be talked to or killed as individuals. 
  2146.  Probably the best known example of an adventure creature following the player
  2147.  once they meet is the Robot Floyd who is the player's constant companion in
  2148.  the Infocom adventure games Planetfall and its sequel Stationfall.  The group
  2149.  can have several members, so this feature could be used to beam down a
  2150.  "landing party" consisting of the player, Spock, Sulu, McCoy and Scotty and
  2151.  have them explore the planet as a group in a Star Trek adventure.
  2152.  
  2153.  Part 3 of this manual introduces a variety of meta-commands that enable the
  2154.  game designer to test the status of the group and to manipulate the group in
  2155.  many ways, i.e., add or subtract members, disband the group, send the group
  2156.  off to another location, etc.
  2157.  
  2158.  
  2159.  SPECIALS 
  2160.   
  2161.  To 'activate' the special, the player must 'do something' to the noun
  2162.  specified as the room's KEY.  This can include turning it, pushing it, pulling
  2163.  it, or playing it (depending on what can be done to the noun as defined).  If
  2164.  the proper action is taken on the noun while in the room, the player will be
  2165.  relocated to the room specified in the SPECIAL line and the SPECIAL nn text
  2166.  will be displayed.  (If the Special points to the current room, the only
  2167.  effect apparent to the reader will be the display of the SPECIAL text.) 
  2168.   
  2169.  For example, to enter the house (by going to the entry hall -- ROOM 14) by
  2170.  pushing the door bell on the porch (ROOM 13) could be done with the following
  2171.  special: 
  2172.   
  2173.      ROOM 13 
  2174.      Front Porch  .
  2175.        .
  2176.        .
  2177.      SPECIAL 14 (* Entry Hall *)
  2178.      KEY 222 (* Door Bell *)
  2179.      END_ROOM 
  2180.   
  2181.      ROOM_DESCR 13 
  2182.      You are standing on the front porch of a large mansion.  The doors are
  2183.      about 10 feet high.
  2184.      END_ROOM_DESCR 
  2185.  
  2186.  
  2187.  
  2188.  
  2189.  
  2190.                                       26
  2191.  
  2192.      NOUN 222 
  2193.      Bell 
  2194.      Door
  2195.      Beside the door in a door bell.
  2196.        . 
  2197.        . 
  2198.      PUSHABLE
  2199.      UNMOVABLE
  2200.      LOCATION 13 (* Front Porch *)
  2201.      NOUN_SYNONYMS doorbell
  2202.      END_NOUN 
  2203.   
  2204.      SPECIAL 14 
  2205.      You boldly push the door bell.  Deep inside the house, you hear some
  2206.      chimes that sound vaguely like Big Ben.  After a few minutes, the door is
  2207.      opened by a butler dressed in a black morning coat.  He says "Good
  2208.      morning, Sir.  I will tell the Master that you have arrived."  With that,
  2209.      he disappears down the hall.  You are left alone in the entry hall of the
  2210.      house.
  2211.      END_SPECIAL 
  2212.   
  2213.      ROOM 14 
  2214.      Entry Hall  .
  2215.      NORTH 15
  2216.        .
  2217.        .
  2218.      END_ROOM 
  2219.   
  2220.      ROOM_DESCR 14 
  2221.      The entry hall is long and narrow.  You can see open doors at the end 
  2222.      of the hall to the north.  The front doors are behind you to the south.
  2223.      END_ROOM_DESCR 
  2224.   
  2225.   
  2226.  "SPECIAL" SPECIALS 
  2227.  
  2228.  AGT has two "special" specials: the verbs MAGIC_WORD and CHANGE_LOCATION. 
  2229.  These words are used in conjunction with a room synonym declaration to create
  2230.  a "special" for any words the game designer may wish to use (i.e., you are not
  2231.  restricted to PULL, PUSH, TURN and PLAY).  For example, the designer may
  2232.  specify that XYZZY and MAGIC_WORD are synonyms in a particular room -- so that
  2233.  if the player gives the command XYZZY in that room, it causes a "special" for
  2234.  that room which might send the player to another room with an appropriate
  2235.  "special" messages being written.  CHANGE_LOCATION works the same way except
  2236.  it requires a specific NOUN that is the "key" to the "special" to be present
  2237.  in the room.  For example, the game designer might make SHOW a synonym for
  2238.  CHANGE_LOCATION in particular room and make the noun PASS the "key" to the
  2239.  "special" in that room, then whenever the player gives the command SHOW THE
  2240.  PASS TO THE GUARD (in the particular room), the "special" would be executed
  2241.  and a message like "The guard examines your security pass and finds it in
  2242.  order.  He opens the steel door and allows you to enter the vault, where you
  2243.  find...." 
  2244.   
  2245.  NOTE: In AGT, each room may have only one special.  So, you will not be able
  2246.  to have a Magic_Word and another special in the same room.
  2247.   
  2248.  For example, in order to be able to define a special for CLIMB TREE or SCALE
  2249.  TREE to cause the player to go from room 10 to room 15 with a special message,
  2250.  
  2251.                                       27
  2252.  
  2253.  the game designer could use the following specifications in his data file: 
  2254.   
  2255.      ROOM 10 
  2256.      Dark Forest 
  2257.        .
  2258.        .
  2259.      SPECIAL 15 (* Top of Tree *)
  2260.      KEY 221 (* Oak Tree *)
  2261.      ROOM_SYNONYMS CHANGE_LOCATION CLIMB SCALE 
  2262.      END_ROOM 
  2263.   
  2264.      NOUN 221 
  2265.      tree 
  2266.      oak 
  2267.      There is a large oak tree at the edge of the clearing.
  2268.        .
  2269.        .
  2270.      UNMOVABLE
  2271.      LOCATION 10 (* in Dark Forest *) 
  2272.      END_NOUN 
  2273.       
  2274.      SPECIAL 15 
  2275.      You manage to climb up to the top of the oak tree.
  2276.      END_SPECIAL 
  2277.   
  2278.      ROOM 15 
  2279.      Top of Oak Tree 
  2280.         .
  2281.         .
  2282.      DOWN 10 (* going DOWN puts you back in the dark forest *) 
  2283.      END_ROOM 
  2284.   
  2285.   
  2286.  MAGIC_WORD works the same way except, the KEY for the room MUST be zero.  For
  2287.  example, if you wish to allow the player to go from room 23 to room 44 when he
  2288.  gives the commands SESAME, SHAZAM or ABRACADABRA you would do it as follows: 
  2289.   
  2290.      ROOM 23 
  2291.      Emperor's Tomb 
  2292.        .
  2293.        .
  2294.      SPECIAL 44 
  2295.      KEY 0 
  2296.      ROOM_SYNONYMS MAGIC_WORD SESAME SHAZAM ABRACADABRA 
  2297.      END_ROOM 
  2298.   
  2299.      SPECIAL 44 
  2300.      By saying the magic word $VERB$, you are suddenly transported 
  2301.      to the outside of the Emperor's Tomb.  You are very lucky to 
  2302.      have escaped, because the air in the tomb was almost gone.
  2303.      END_SPECIAL 
  2304.   
  2305.      ROOM 44 
  2306.      Outside Tomb Entrance 
  2307.        .
  2308.        .
  2309.      END_ROOM 
  2310.   
  2311.  
  2312.                                       28
  2313.  
  2314.  In this example, the SPECIAL message uses a very convenient and helpful
  2315.  feature of AGT, namely $VERB$.  This causes the original verb to be repeated
  2316.  back in the message, i.e., if the command was SHAZAM, then the special message
  2317.  would be "By saying the magic word shazam, you are suddenly transported..." 
  2318.  Similarly, in AGT, the game designer may also have the NOUN, the noun's
  2319.  ADJECTIVE, the PREPOSITION and the OBJECT of the commands repeated back in
  2320.  messages by specifying $NOUN$, $ADJECTIVE$, $PREPOSITION$ and $OBJECT$ within
  2321.  the message text.  If a command is being addressed to a character in the
  2322.  adventure, e.g., SCOTTY, BEAM ME UP, the character's name may also be echoed
  2323.  back in a message by using $NAME$.
  2324.  
  2325.  
  2326.  CREATING A TYPICAL ROOM 
  2327.   
  2328.  Let's suppose that your game contains a bedroom, connected to a closet, a
  2329.  bathroom, and a hallway.  In the bedroom are a lamp, a bed, a dresser, a
  2330.  mirror, and a werewolf.
  2331.   
  2332.  First, you want to define the room itself: 
  2333.   
  2334.      ROOM 34 
  2335.      Master Bedroom 
  2336.      WEST 33                 (33 is the hallway) 
  2337.      EAST 35                 (35 is the bathroom) 
  2338.      NORTHEAST 36            (36 is the closet) 
  2339.      END_ROOM 
  2340.   
  2341.   A description of the room is appropriate here: 
  2342.   
  2343.      ROOM_DESCR 34 
  2344.      This is the master bedroom, where Mommy and Daddy usually sleep.  Plainly
  2345.      visible in the room are a bed, a dresser, a lamp, and a large wall mirror. 
  2346.      The room smells horrible, as if a large, unclean animal had been here
  2347.      recently.
  2348.      END_ROOM_DESCR  
  2349.   
  2350.  Note that this description mentions the nouns that are initially in the room. 
  2351.  This is OK, since all of the nouns are UNMOVABLE, but if they could be taken
  2352.  by the player, they should not be described in the room description since they
  2353.  may not be there if the player should return.
  2354.   
  2355.  That werewolf is begging to be described, too: 
  2356.   
  2357.      CREATURE 315 
  2358.      Werewolf 
  2359.      Black 
  2360.      There is a menacing black werewolf here.
  2361.      LOCATION 34 
  2362.      WEAPON 217                      <-- Noun 217 will kill it  
  2363.      HOSTILE                         <-- ever met a friendly werewolf? 
  2364.      END_CREATURE 
  2365.   
  2366.      CREATURE_DESCR 315 
  2367.      The werewolf is about the size of a small horse.  Its matted fur stinks,
  2368.      and a sickening smell emerges from its open mouth, through which you can
  2369.      see sharp, large teeth.
  2370.      END_CREATURE_DESCR 
  2371.  
  2372.  
  2373.                                       29
  2374.  
  2375.  A HELP message might be given as follows: 
  2376.   
  2377.      HELP 34 
  2378.      The werewolf looks dangerous.  Perhaps, you should get out of here as fast
  2379.      as you can.
  2380.      END_HELP 
  2381.    
  2382.  Finally, each noun within the room ought to be defined and described:  
  2383.   
  2384.      NOUN 220 
  2385.      Bed 
  2386.      Large 
  2387.      There is a large (king-size) bed here.
  2388.      LOCATION 34 
  2389.      UNMOVABLE 
  2390.      END_NOUN 
  2391.  
  2392.      NOUN_DESCR 220 
  2393.      The bed is quite ordinary.
  2394.      END_NOUN_DESCR 
  2395.  
  2396.      NOUN 221 
  2397.      Dresser 
  2398.      Wooden 
  2399.      There is a large wooden dresser here.
  2400.      LOCATION 34 
  2401.      CLOSABLE 
  2402.      CLOSED 
  2403.      UNMOVABLE 
  2404.      END_NOUN 
  2405.  
  2406.      NOUN_DESCR 221 
  2407.      The wooden dresser looks pretty much like most wooden dressers.
  2408.      END_NOUN_DESCR 
  2409.  
  2410.      NOUN 222 
  2411.      Lamp 
  2412.      Small 
  2413.      There is a lamp on the dresser.
  2414.      LOCATION 34 
  2415.      UNMOVABLE 
  2416.      END_NOUN 
  2417.  
  2418.      NOUN_DESCR 222 
  2419.      The small table lamp is pink and has a green shade.
  2420.      END_NOUN_DESCR 
  2421.  
  2422.      NOUN 223 
  2423.      Mirror 
  2424.      Strange 
  2425.      There is a wall-size mirror here.
  2426.      LOCATION 34 
  2427.      UNMOVABLE 
  2428.      END_NOUN 
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.                                       30
  2435.  
  2436.      NOUN_DESCR 223 
  2437.      As you gaze into the mirror, you sense something unusual about it.  It
  2438.      seems to shimmer, and your reflection seems somehow unreal, as if the
  2439.      mirror weren't really there at all.
  2440.      END_NOUN_DESCR 
  2441.  
  2442.  Hmm.  That mirror seems rather interesting.  Maybe you could make a "special"
  2443.  out of it.  For example: when the player touches it, s/he is sent to room 50,
  2444.  the mystic cavern of the Wizardess.  To do so, you need to add a "special" to
  2445.  room 34 and specify the mirror as its key, and you need to make the mirror
  2446.  touchable.  (Note: "touch" and "push" are synonyms -- but, you should use the
  2447.  word "push," not the word "touch," in your definitions.)  
  2448.                                                           
  2449.      ROOM 34                  
  2450.      Master Bedroom 
  2451.      WEST 33                 (33 is the hallway) 
  2452.      EAST 35                 (35 is the bathroom) 
  2453.      NORTHEAST 36            (36 is the closet) 
  2454.      SPECIAL 50              <-- Special goes to room 50 (cavern) 
  2455.      KEY 223                 <-- Special activated by touching mirror 
  2456.      END_ROOM 
  2457.   
  2458.      NOUN 223 
  2459.      Mirror 
  2460.      Strange 
  2461.      There is a wall-size mirror here.
  2462.      LOCATION 34 
  2463.      UNMOVABLE 
  2464.      PUSHABLE               <-- Here's how we'll activate the special 
  2465.      END_NOUN 
  2466.   
  2467.  The player will see room 50's description when s/he gets there, but the
  2468.  SPECIAL text for room 50 will be displayed first:  
  2469.   
  2470.      SPECIAL 50 
  2471.      You reach out to touch the mirror, and are shocked to find that your
  2472.      fingers vanish through the surface.  Before you can react, you feel
  2473.      yourself drawn forward through the mirror, and into a black nothingness. 
  2474.      You look back to try to see the mirror, but everything is black.
  2475.  
  2476.      You are falling, but not very quickly -- it's almost as if you are
  2477.      floating.  As you fall, your eyes begin to adjust to the darkness.  Then,
  2478.      suddenly, you land on a soft cushion of some sort.  As you rest on the
  2479.      cushion, your eyes adjust to the very dim light of this new room.
  2480.      END_SPECIAL 
  2481.   
  2482.  (Note that usually, you'd want to have a PUSH_DESCR  prepared for when the
  2483.  player touches a noun when it doesn't activate a special, but the mirror can't
  2484.  be moved so it will always activate a special when touched.)  
  2485.  
  2486.  
  2487.  SCORING
  2488.  
  2489.  The player's progress in the game is reported in two ways: the number of rooms
  2490.  visited, and the number of points currently held.  The player receives the
  2491.  defined number of points for visiting each room (default point value is 0),
  2492.  and for possessing (i.e., carrying, wearing or in the current room or in the
  2493.  treasure room) each noun (or creature with points) when scoring is done.  The
  2494.  
  2495.                                       31
  2496.  
  2497.  point defaults for both nouns and creatures are zero.  Players get no points
  2498.  for having eaten something, since objects which are eaten or drunk are removed
  2499.  from the game.
  2500.   
  2501.  For best results, it is best to assign a point value to each room which the
  2502.  player arrives at after solving some puzzle.  It's also wise to award a few
  2503.  points for out-of-the-way rooms.  Objects should only have point values if
  2504.  they can reasonably be expected to be carried at the end of game -- if an
  2505.  object is too heavy to be lifted or moved, it's not logical to assign it a
  2506.  point value.
  2507.    
  2508.  
  2509.  OTHER DATA ITEMS IN THE .DAT FILE 
  2510.   
  2511.  
  2512.  INTRODUCTION or INTRO TEXT 
  2513.  
  2514.  In the .DAT file, you can include some introductory remarks by using the
  2515.  header INTRO or INTRODUCTION and ending these remarks with END_INTRO.  These
  2516.  kinds of remarks are particularly useful for telling the player what has
  2517.  happened prior to his arrival in the game's starting room.  The introductory
  2518.  text is displayed during the game's initialization and cannot be re-read
  2519.  later.  It also cannot be skipped over.
  2520.  
  2521.  
  2522.  STARTING ROOM 
  2523.  
  2524.  A AGT adventure normally starts in room number 2.  This location can be
  2525.  over-ridden by specifying an alternative location in the .DAT file.  For
  2526.  example, if the .DAT file had: 
  2527.   
  2528.      STARTING_ROOM 23 
  2529.   
  2530.  then the game would start in room 23.
  2531.   
  2532.   
  2533.  TREASURE ROOM 
  2534.  
  2535.  Normally, the player only gets points for visiting rooms and for possessing
  2536.  treasures (i.e., nouns or creatures with value).  However, many classic
  2537.  adventure games use a convention that required the player to bring his various
  2538.  treasures to a "Treasure Room".  Probably, the best example of this is the
  2539.  Well House in the original "Colossal Cave" adventure.  AGT adds this feature
  2540.  by allowing the game designer to specify a treasure room in the .DAT file as: 
  2541.   
  2542.      TREASURE_ROOM 41 (or wherever) 
  2543.   
  2544.  Normally, there is no treasure room.  This option is only activated if a
  2545.  statement like the above appears in the .DAT file.
  2546.   
  2547.   
  2548.  VERB SYNONYMS 
  2549.  
  2550.  To specify verb synonyms, simply create a AGT definition starting with 
  2551.  VERB (alone on a line) and ending with END_VERB (alone on a line).  For 
  2552.  example: 
  2553.  
  2554.  
  2555.  
  2556.                                       32
  2557.  
  2558.      VERB 
  2559.       KILL STAB CHOP 
  2560.       ATTACK STRANGLE CHOKE THROTTLE 
  2561.       UP CLIMB ASCEND 
  2562.      END_VERB 
  2563.   
  2564.  In the above example, if the player types STAB THE DWARF WITH THE KNIFE, AGT
  2565.  will translate the sentence to KILL THE DWARF WITH THE KNIFE and attempt to do
  2566.  so.  Synonyms do not replace the original verb, e.g., the verb KILL would also
  2567.  work.  Likewise, if the player types CLIMB the game will execute the sentence
  2568.  as if the player had typed UP -- which means that CLIMB DOWN would be
  2569.  translated to UP DOWN which would, of course, confuse the game somewhat and
  2570.  generate an error message which might, in turn, confuse the player.
  2571.  
  2572.  Because the verb synonyms are not actually user-defined verbs, you should
  2573.  think carefully about the possible uses of words you add, to make sure the
  2574.  player won't be confused by the meaning of a word.
  2575.     
  2576.  WARNING: It is NOT possible to define a synonym for a synonym.  For example,
  2577.  the following entry would generate an error message:  
  2578.  
  2579.      VERB 
  2580.       ATTACK CHOKE 
  2581.       CHOKE STRANGLE    <-- "Verb not recognized - Line ignored" 
  2582.      END_VERB 
  2583.   
  2584.  Verb synonyms defined as those above are "global" in that they apply in each
  2585.  room of the game.  On the other hand, room synonyms apply only in the
  2586.  particular room for which they are defined.  Room synonyms take precedence
  2587.  over global synonyms.  For example, you could define CHOKE to be a synonym for
  2588.  ATTACK globally (as above), then define CHOKE to be a synonym for PULL in a
  2589.  particular room.  If you were in that room, CHOKE would be treated like the
  2590.  verb PULL; outside of that room CHOKE would be treated as if you had input
  2591.  the verb ATTACK.
  2592.  
  2593.   
  2594.  GAME_WIN 
  2595.  
  2596.  Acquiring all the points defined in the game doesn't let the player "win," and
  2597.  winning isn't even related to points.  If you define a room as GAME_WIN, then
  2598.  the player wins the game upon entering the room, and the game ends and the
  2599.  final score is displayed.  It is usually desirable to make that room very
  2600.  difficult to enter and not let the player get there unless he or she has done
  2601.  everything else there is to do.
  2602.  
  2603.  The room description is displayed, so you should put your congratulatory
  2604.  description there.  For example:  
  2605.   
  2606.      ROOM 21                  
  2607.      End of the Rainbow
  2608.      GAME_WIN
  2609.      POINTS 50 
  2610.      END_ROOM 
  2611.  
  2612.      ROOM_DESCR 21
  2613.      At long last, you have reached the end of the rainbow.  The pot of gold
  2614.      lies at your feet.  You have won the game!!
  2615.      END_ROOM_DESCR
  2616.  
  2617.                                       33
  2618.  
  2619.  
  2620.  Note that is also possible to win the game when a specific Noun is acquired. 
  2621.  This is done be putting a GAME_WIN in the Noun's specification. 
  2622.  
  2623.  
  2624.  GAME_END 
  2625.  
  2626.  If you desire to have the game end, without having the player win, you can use
  2627.  a GAME_END in the room definition.  When this is done, the game will end when
  2628.  the player enters the room and the final score is displayed.  The room
  2629.  description is also displayed, so you should put any final comments to the
  2630.  player in the room description.  For example:  
  2631.   
  2632.      ROOM 26                  
  2633.      End of the trail
  2634.      GAME_END
  2635.      END_ROOM 
  2636.  
  2637.      ROOM_DESCR 26
  2638.      You have reached the end of the trail.  There is no turning back.
  2639.      Sorry, but your adventure is OVER!
  2640.      END_ROOM_DESCR
  2641.  
  2642.  
  2643.  PAGE PAUSES 
  2644.  
  2645.  Normally, the game pauses after every 22 lines of text (so that the player can
  2646.  read it), and the player then hits <CR> to read more.  As you play-test your
  2647.  game, you might try to adjust your paragraph or line spacing so that the page
  2648.  breaks don't come at awkward spots and confuse the player.  This is probably
  2649.  most important in the title screen and the INSTRUCTION and INTRO texts; it is
  2650.  less controllable in the individual room descriptions.
  2651.  
  2652.   
  2653.  ORDER OF DEFINITIONS 
  2654.  
  2655.  AGT doesn't require that the definitions be in any specific order within the
  2656.  data files.  Definitions can be freely mixed throughout your data files. 
  2657.  You'll probably want to group items together that logically belong together.
  2658.  That's how the sample games were written.  The order of definitions in the
  2659.  file has no effect on game performance, as long as each definition is properly
  2660.  structured.
  2661.  
  2662.   
  2663.  HOW TO INCLUDE COMMENTS IN YOUR AGT DATA FILES 
  2664.   
  2665.  Within your data file, you'll probably want to include comments which won't be
  2666.  processed by the game itself, so you'll be able to understand why you did
  2667.  certain things.
  2668.  
  2669.  In general, AGT treats anything it doesn't understand as a comment.  Thus, if
  2670.  you have a paragraph of text in between definitions, AGT will usually ignore
  2671.  it.
  2672.  
  2673.  BEWARE: If one of the lines in the paragraph begins with a keyword like "noun"
  2674.  or "text," AGT will probably decide that it's the beginning of a definition
  2675.  and get confused.
  2676.  
  2677.  
  2678.                                       34
  2679.  
  2680.  To avoid this, you can use a nonsense word to start each line of a comment:
  2681.  words like "REM" (for remark) are useful since they also clearly state what
  2682.  the line is.
  2683.  
  2684.  AGT ignores most punctuation completely, so using "comment" indicators like
  2685.  "(*" and "*)" or { and } at the beginning of a line won't help.  However,
  2686.  using these kinds of comment indicators will make your game files easier to
  2687.  read.  AGT usually only sees alphabetic characters ('a'..'z' and 'A'..'Z') or
  2688.  the digits ('0'..'9').
  2689.  
  2690.  
  2691.  CREATING YOUR SOURCE DATA FILES WITH WORD PROCESSORS 
  2692.  
  2693.  When creating your source data files for your AGT game, you must use a word
  2694.  processor which creates plain ASCII/DOS text files with a true carriage return
  2695.  at the end of each line.  Lines longer than 80 characters, and WordStar
  2696.  document files, will cause AGT to abort!  The best rule-of-thumb is to use the
  2697.  MS-DOS "TYPE" command to view the file.  If it looks normal, it's probably OK
  2698.  for AGT.  If words split at the end of the line and strange characters appear,
  2699.  it's probably not OK for AGT.
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.  
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.                                       35
  2740.  
  2741.  PART 3: USING META-COMMANDS IN PROFESSIONAL LEVEL ADVENTURE GAMES 
  2742.                                 
  2743.  
  2744.  Before discussing meta-commands in detail, it is convenient to present a quick
  2745.  overview of other changes in Professional Level games.  The principal changes
  2746.  are the addition of custom user-defined verbs and Maximum_Score to the .DAT
  2747.  file (NOTE: everything else about the .DAT files as previously presented still
  2748.  applies in Professional Level games), the addition of a .MSG file to hold your
  2749.  unique output messages, and the addition of a .CMD file to hold your game's
  2750.  meta-commands.  Each of this will be presented below in separate sections.
  2751.  
  2752.  
  2753.  CUSTOM USER-DEFINED VERBS 
  2754.  
  2755.  Custom user-defined verbs are defined very much like "Verb Synonyms".  For
  2756.  example, the following lines in the .DAT file will define several new verbs
  2757.  (and synonyms): 
  2758.   
  2759.    VERB 
  2760.      Dummy_Verb1 KISS HUG LOVE CARESS 
  2761.      Dummy_Verb2 GO CLIMB CROSS 
  2762.      Dummy_Verb3 CUT CHOP BREAK CRACK BUST 
  2763.      Dummy_Verb4 JUMP LEAP 
  2764.      Dummy_Verb5 SEARCH FIND 
  2765.    END_VERB 
  2766.   
  2767.  AGT adds 50 "dummy verbs" (Dummy_Verb1 ...  Dummy_Verb50) to the list of valid
  2768.  verbs.  These dummy verbs are then redefined as if they had synonyms in
  2769.  statements like the ones above.  These user-defined verbs are then used in
  2770.  meta-commands to specify new conditional tests and appropriate actions.  For
  2771.  example, the following meta-commands (in the .CMD file) would allow the player
  2772.  to CLIMB a tree and to CROSS a bridge: 
  2773.   
  2774.    COMMAND CLIMB TREE 
  2775.      InRoom 208 (* sturdy oak tree *) 
  2776.      GoToRoom 36 (* in branches at top of oak tree *) 
  2777.      PrintMessage 43 (* You climb up to the top of the tree. *) 
  2778.      DoneWithTurn 
  2779.    END_COMMAND 
  2780.   
  2781.    COMMAND CROSS BRIDGE 
  2782.      AtLocation 23 (* West side of bridge *) 
  2783.      GoToRoom 24 (* East side of bridge *) 
  2784.      PrintMessage 44 (* You walk across the bridge to the other side. *) 
  2785.      DoneWithTurn 
  2786.    END_COMMAND 
  2787.   
  2788.    COMMAND CROSS BRIDGE 
  2789.      AtLocation 24 (* East side of bridge *) 
  2790.      GoToRoom 23 (* West side of bridge *) 
  2791.      PrintMessage 44 (* You walk across the bridge to the other side. *) 
  2792.      DoneWithTurn 
  2793.    END_COMMAND 
  2794.   
  2795.  The above meta-commands could also have been done by CHANGE_LOCATION 
  2796.  specials.  However, custom verbs and meta-commands can also be used to 
  2797.  create more unusual situations, like these meta-commands for processing 
  2798.  the user's input to KISS or HUG something: 
  2799.  
  2800.                                       36
  2801.  
  2802.   
  2803.    COMMAND KISS PRINCESS 
  2804.      InRoom 305 (* Princess *) 
  2805.      AtLocation 99 (* Bridal Suite of palace *) 
  2806.      PrintMessage 45 (* The princess melts into your strong arms, etc. *) 
  2807.      PlusScore 25 (* Bonus for Kiss *) 
  2808.      WinGame (* Win the game *) 
  2809.      DoneWithTurn 
  2810.    END_COMMAND 
  2811.   
  2812.    COMMAND KISS PRINCESS 
  2813.      InRoom 305 (* Princess *) 
  2814.      NOT AtLocation 99 (* Not in Bridal Suite of palace *) 
  2815.      PrintMessage 46 (* The princess pushes you away coyly, "Not here!" *) 
  2816.      DoneWithTurn 
  2817.    END_COMMAND 
  2818.   
  2819.    COMMAND KISS TROLL 
  2820.      InRoom 307 (* Ugly Troll *) 
  2821.      PrintMessage 47 (* The troll kills you! *) 
  2822.      KillPlayer (* That will teach you to KISS THE TROLL!! *) 
  2823.      DoneWithTurn 
  2824.    END_COMMAND 
  2825.   
  2826.    COMMAND KISS ANY 
  2827.      NOUNpresent (* NOUN (whatever it is) is here *) 
  2828.      PrintMessage 48 (* You try to $VERB$ the $NOUN$ for awhile. *)
  2829.      MinusScore 10 (* penalty for sick mind *) 
  2830.      DoneWithTurn 
  2831.    END_COMMAND 
  2832.   
  2833.    COMMAND KISS ANY 
  2834.      PrintMessage 49 (* The $ADJECTIVE$ $NOUN$ isn't here! *) 
  2835.      MinusScore 10 (* penalty for sick mind *) 
  2836.      DoneWithTurn 
  2837.    END_COMMAND 
  2838.   
  2839.  Meta-commands are processed in the order encountered in the .CMD file, so the
  2840.  last two KISS ANY commands represent "default" commands and would be activated
  2841.  only if you weren't trying to KISS, HUG, etc. the PRINCESS or the TROLL.  For
  2842.  example, if you gave the input "KISS THE BLARNEY STONE", the game would
  2843.  respond with "You try to kiss the stone for a while" (Message number 48 in the
  2844.  .MSG file) or "The blarney stone isn't here!" (Message number 49) depending
  2845.  upon if the Blarney stone is present at your current location or not.
  2846.  
  2847.   
  2848.  MAXIMUM_SCORE 
  2849.  
  2850.  AGT allows the score to be manipulated via meta-language commands.  For
  2851.  example, using meta-language commands, one could adjust the score whenever the
  2852.  player: 
  2853.   
  2854.      -- Accepts a hint 
  2855.      -- Solves a particularly difficult puzzle 
  2856.      -- Gives the correct answer to a riddle 
  2857.      -- Performs a daring and/or noble act 
  2858.   
  2859.  The score can be manipulated either positively or negatively in this way.
  2860.  
  2861.                                       37
  2862.  
  2863.   
  2864.  Since in AGT you may add (or subtract) points from your score via your deeds,
  2865.  the maximum score for the game will often be different from the sum of the
  2866.  scores for visiting rooms and possessing objects.  In this situation, you will
  2867.  need to specify a maximum score for the game in the .DAT file.  For example,
  2868.  to have a maximum score of 350 points for the game you would put the following
  2869.  statement in the game's .DAT file: 
  2870.   
  2871.      MAXIMUM_SCORE 350 
  2872.  
  2873.  
  2874.  .MSG -- MESSAGE FILES 
  2875.  
  2876.  A file with the suffix of .MSG can contain up to 250 messages that are used by
  2877.  various meta-language commands.  The format for each message is straight-
  2878.  forward text as follows: 
  2879.   
  2880.     MESSAGE 4 
  2881.     "Oh, NNOOO!! Not the dog!", he cried hysterically.
  2882.     END_MESSAGE 
  2883.      .
  2884.      .
  2885.     MESSAGE 87 
  2886.     As you say $VERB$ into the microphone, the security door slides open 
  2887.     noiselessly.  You hurry into the vault.  The door closes behind you.
  2888.     END_MESSAGE 
  2889.   
  2890.  The messages need not be in numerical order, but it helps for debugging.
  2891.  
  2892.  In any message, the game designer can use $VERB$, $NOUN$, $ADJECTIVE$,
  2893.  $PREPOSITION$, $OBJECT$ and $NAME$ wherever he wants to have the original
  2894.  verb, the noun, the noun's adjective, the preposition, the objective of the
  2895.  preposition or the name of the person the command is addressed to (if any)
  2896.  echoed back in a message.  $VERB$ uses the original verb which is input by
  2897.  the player, not the verb for which it may be a synonym, e.g., if SPEAK is a
  2898.  synonym for TALK and you input the verb SPEAK, the above MESSAGE 87 would
  2899.  output "As you speak into the microphone..." 
  2900.   
  2901.  
  2902.  A TYPICAL GAME TURN FOR PROFESSIONAL LEVEL GAMES
  2903.  
  2904.  Before launching into a detailed discussion of meta-commands, it will be
  2905.  helpful to review what happens during a typical turn in a AGT game.  This is
  2906.  illustrated in the following diagram:
  2907.                                                                 
  2908.  
  2909.  
  2910.  
  2911.  
  2912.  
  2913.  
  2914.  
  2915.  
  2916.  
  2917.  
  2918.  
  2919.  
  2920.  
  2921.  
  2922.                                       38
  2923.  
  2924.                                                                 
  2925.                 >      Get Player's Input Command    <           
  2926.                                                                  
  2927.                                                                  
  2928.                                    V                             
  2929.                                                                  
  2930.                    Parse into Addressee's Name (if               
  2931.                    any), then Noun, Verb, Prep, Obj              
  2932.                                                                  
  2933.                                                                  
  2934.                                    V                             
  2935.                                                                         
  2936.                                   Any       YES             Give       
  2937.                                  Errors               >     Error         
  2938.                                    ?                       Message        
  2939.                                                                        
  2940.                                       NO                
  2941.                                    V                        
  2942.                                                             
  2943.                                   Any                    
  2944.                                  Meta-     NO            
  2945.                                 Language                  
  2946.                                 Commands                  
  2947.                                    ?                      
  2948.                                                           
  2949.                                       YES                 
  2950.                                    V                        
  2951.                                                             
  2952.                     Do meta-commands for ANY Words          
  2953.                                                             
  2954.                                                            
  2955.                                    V                       
  2956.                                                            
  2957.                          YES      All                      
  2958.        <                         Done                      
  2959.                                    ?                       
  2960.                                                            
  2961.                                      NO                    
  2962.                                    V                       
  2963.                                                            
  2964.                    Do meta-commands for Input Words        
  2965.                                                            
  2966.                                                            
  2967.                                    V                       
  2968.                                                            
  2969.                          YES      All                      
  2970.        <                         Done                      
  2971.                                    ?                       
  2972.                                                            
  2973.                                      NO                    
  2974.                                    V                       
  2975.                                                            
  2976.                    Do Standard AGT routine for Verb  <     
  2977.                                                           
  2978.                                                           
  2979.                                                           
  2980.                                                           
  2981.  The meta-command boxes shown above are for Professional Level AGT games only. 
  2982.  
  2983.                                       39
  2984.  
  2985.  Now for a brief description of what these meta-command boxes do in an AGT
  2986.  game.  The first meta box represents the process of testing for conditions and
  2987.  performing various actions that do not depend on the player having given a
  2988.  specific Addressee-Verb-Noun-Object combination, i.e., conditions and actions
  2989.  for ANY words.  These kinds of situations are typically "random" events, such
  2990.  as, (1) having a dwarf appear in the room and throw an axe at the player, or
  2991.  (2) having a bear (that the player has befriended) follow him into a new room,
  2992.  or (3) having a voice boom out an announcement that "The Cave will close in 25
  2993.  turns", or (4) having the player die because of some random event (e.g.,
  2994.  falling into a pit).  During each turn, these ANY-words meta-commands are
  2995.  checked to see if the commands' conditions are true and (if true) the
  2996.  meta-commands' designated actions are taken.  This ANY-words process occurs
  2997.  before any specific vocabulary-dependent meta-commands are executed.  Often,
  2998.  the results of these ANY-words events will make subsequent actions unnecessary
  2999.  and/or inappropriate.  For example, if a player dies a horrible death by a
  3000.  random dwarf attack, finishing the player's specific command like GET GOLD or
  3001.  EXAMINE BOOK is certainly inappropriate.
  3002.   
  3003.  Here are a few examples of typical ANY Meta-Commands: 
  3004.   
  3005.    COMMAND ANY 
  3006.     Present 210 (* Blazing torch is here *) 
  3007.     CounterGT 2 75 (* Torch has been lit for at least 75 turns *) 
  3008.     PrintMessage 21 (* Your torch is flickering and growing weaker *) 
  3009.     CounterEquals 2 100 (* Torch has been lit for 100 turns *) 
  3010.     PrintMessage 22 (* The torch finally goes out! *) 
  3011.     TurnCounterOFF 2 (* Torch has gone out, so turn torch counter OFF *) 
  3012.     SwapLocations 210 211 (* swap blazing torch for unlit torch *) 
  3013.    END_COMMAND 
  3014.   
  3015.    COMMAND ANY 
  3016.     NOT Present 312 (* Angry guard is not in room (yet) *) 
  3017.     Chance 10 (* 10 % chance of guard appearing *) 
  3018.     PutInCurrentRoom 312 (* put guard in room *) 
  3019.     PrintMessage 23 (* An angry guard suddenly storms into the room! *) 
  3020.    END_COMMAND 
  3021.   
  3022.    COMMAND ANY 
  3023.     FlagON 5 (* Flag 5 is ON if player has befriended parrot *) 
  3024.     PutInCurrentRoom 306 (* Once befriended, parrot stays with player *) 
  3025.     VerbIsDirection (* Player is going to new room *) 
  3026.     PrintMessage 24 (* The parrot flies after you and lands nearby. *) 
  3027.    END_COMMAND 
  3028.   
  3029.    COMMAND ANY 
  3030.     InRoom 306 (* The parrot is here *) 
  3031.     FlagOFF 4 (* Parrot is thirsty if Flag 4 is OFF *) 
  3032.     Chance 5 (* 5 % chance of parrot talking *) 
  3033.     PrintMessage 25 (* The parrot squawks "Polly wants a beer!" *) 
  3034.    END_COMMAND 
  3035.   
  3036.    COMMAND ANY 
  3037.     InRoom 308 (* A vampire bat is here *) 
  3038.     Chance 5 (* 5 % chance of being bitten *) 
  3039.     PrintMessage 26 (* The vampire bat bites you on the neck!! *) 
  3040.     KillPlayer (* Too bad, but vampire bat bites are fatal! *) 
  3041.     DoneWithTurn (* No further process for this turn *) 
  3042.    END_COMMAND 
  3043.  
  3044.                                       40
  3045.  
  3046.   
  3047.  If the ANY-words meta-commands have not drastically changed the player's
  3048.  status in the game, then specific Addressee-Verb-Noun-Object combination
  3049.  meta-commands are tested and (if the conditions are true) the designated
  3050.  actions are taken.  Using these meta-commands is the way that the game
  3051.  designer can use unique verbs (that are not predefined in AGT).  For example,
  3052.  the game designer could specify a meta-command for KISS PRINCESS that would
  3053.  first check that the princess was in the room, and (if she was) print a
  3054.  message like "The princess rudely pushes you away, straightens her crown and
  3055.  loudly says, 'Stop the hanky-panky, buzzard breath!'"  The word ANY may be
  3056.  substituted for the Verb, or the Noun, or the Object in a meta-command.  For
  3057.  example, a meta-command for ATTACK ANY might be used to specify a "default"
  3058.  response for the verb ATTACK, such as, printing a message like "Don't be
  3059.  ridiculous, $VERB$ing the $NOUN$ is really sick!"  If the player entered the
  3060.  command ATTACK THE DOOR, the response would be "Don't be ridiculous, attacking
  3061.  the door is really sick!" 
  3062.   
  3063.  Meta-commands can also be used to supplement or replace standard verb
  3064.  processing.  For example, a meta-command could be used for verbs like READ,
  3065.  GET, EAST, etc.  This type of substitution of meta-commands for standard verbs
  3066.  could be used to (1) cause a key to fall out of a book the first time the
  3067.  player gave the command to GET BOOK, (2) cause a player to go into a
  3068.  hallucinatory state (i.e., a new room) whenever he gives the command DRINK THE
  3069.  STRANGE LIQUID, or (3) cause a player to fall to his death on the rocks far
  3070.  below if he gives the command NORTH (where there is a cliff to the north in
  3071.  the current room).
  3072.   
  3073.  If after doing both the ANY-words and the specific vocabulary meta-command
  3074.  processing for a specific game turn, the player is still alive and further AGT
  3075.  command processing is still appropriate, then the usual routine for the
  3076.  player's verb is executed (if the input VERB is a standard AGT verb).  This
  3077.  will be the way that the most of the player's inputs will be handled! 
  3078.  Remember, most player commands in a typical adventure game deal with
  3079.  manipulating items (GET, DROP, EXAMINE, READ, etc.) and traveling from room to
  3080.  room (NORTH, SOUTH, UP, EXIT, etc).  Standard Level AGT handles these types of
  3081.  commands quite nicely, and there will seldom be a need for meta-commands for
  3082.  this type of typical player input.
  3083.   
  3084.  
  3085.  INTRODUCTION TO META-COMMANDS 
  3086.  
  3087.  Meta-commands are specified in the .CMD file.  The .CMD file can hold up to
  3088.  400 meta-commands.  This capacity will enable the game designer to develop
  3089.  some very sophisticated adventure games -- especially since the a majority of
  3090.  a player's input will not require any meta-commands at all.
  3091.   
  3092.  
  3093.  
  3094.  
  3095.  
  3096.  
  3097.  
  3098.  
  3099.  
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.                                       41
  3106.  
  3107.  THE FORMAT OF META-COMMANDS 
  3108.  
  3109.  A typical meta-command in the .CMD file might look like this: 
  3110.   
  3111.    COMMAND BREAK LOCK 
  3112.     InRoom 208 (* Oak door with iron lock *) 
  3113.     NOT InRoom 307 (* Evil Wizard is not in room *) 
  3114.     IsCarrying 223 (* Battle Axe *) 
  3115.       OR 
  3116.     Present 246 (* Large Two-handed Sword *) 
  3117.     VariableGT 7 90 (* Player has enough strength to swing sword *) 
  3118.     FlagON 3 (* Sword has been pulled free from stone *) 
  3119.       OR 
  3120.     IsCarrying 221 (* Iron Mace *) 
  3121.     VariableGT 7 50 (* Player has enough strength to swing mace *) 
  3122.     SwapLocations 208 209 (* Swap locked oak door with open doorway *) 
  3123.     PrintMessage 86 (* Your blows break the lock and door swings open *) 
  3124.     ChangePassageway 1 25 (* open passage North (Dir 1) to room 25 *) 
  3125.     DoneWithTurn (* No further process for this turn *) 
  3126.    END_COMMAND 
  3127.   
  3128.  Each meta-command begins on a separate line with the keyword COMMAND. 
  3129.  Following this is the input phrase for which this meta-command applies.  The
  3130.  input phrase will be parsed, so you can use extra words for clarity.  After
  3131.  being parsed, AGT will only remember the ADDRESSEE (if there is one), the
  3132.  VERB, the NOUN and the OBJECT of the COMMAND.  If one of these is missing,
  3133.  there is an implied ANY for the missing item.  For example, the "BREAK LOCK"
  3134.  above is missing an OBJECT (and a preposition), so an implied OBJECT of ANY is
  3135.  recorded for this COMMAND.  Because of this implied object of ANY, this
  3136.  meta-COMMAND would be considered for any of the following player inputs: 
  3137.   
  3138.    BREAK LOCK 
  3139.    BREAK THE LOCK WITH MACE 
  3140.    BREAK LOCK WITH THE LARGE SWORD 
  3141.    BREAK LOCK WITH AXE 
  3142.    BREAK LOCK WITH ROCK (will not produced desired result) 
  3143.    BREAK LOCK WITH DWARF'S HEAD (will not produced desired result) 
  3144.   
  3145.  If the COMMAND is an ANY meta-command, the word ANY will be the only word
  3146.  follow the word COMMAND.  The end of the meta-command is signalled by
  3147.  END_COMMAND on a separate line.
  3148.  
  3149.  Between COMMAND and END_COMMAND are a series of conditional tests and actions
  3150.  to be performed.  Each condition or action appears on a separate line.  The
  3151.  first word of the action or condition line is the "Token", or abbreviation for
  3152.  the action or condition.  AGT allows 155 such tokens.  These tokens are a
  3153.  short-hand description of what condition is being tested or what action is to
  3154.  be performed.  The tokens are normally shown with each of the separate words
  3155.  of the short-hand description capitalized, e.g.  PrintMessage.  This is only
  3156.  for better readability.  Internally, AGT does not distinguish between upper
  3157.  and lower case in tokens.
  3158.   
  3159.  There may be some numerical parameters on the line following the token.  The
  3160.  number of parameters varies from none to two depending upon the specific
  3161.  token.  For example, the token "KillPlayer" has no numerical parameters; the
  3162.  token "PrintMessage" requires one numerical parameter (i.e., the number of the
  3163.  message to be printed); the token "SwapLocations" requires two numerical
  3164.  parameters (i.e., the two item numbers of the items to have their locations
  3165.  
  3166.                                       42
  3167.  
  3168.  switched).  Following the parameters (if any) on the line is space for
  3169.  comments.  It is recommended that meta-commends be very well commented and
  3170.  that the comments be written as the meta-commands are first written.  Don't
  3171.  try to document them afterwards -- because you'll never get around to really
  3172.  doing it!  For added clarity, comments should be set off by some type of
  3173.  delimiter, such as, "(*", "*)" or "{", "}" or a preceding ";".
  3174.   
  3175.  If a conditional token is preceded on the line with the word "NOT", the sense
  3176.  of the conditional test is reversed, i.e., NOT InRoom 307 tests that creature
  3177.  number 307 (the evil wizard) is NOT in the current room.
  3178.  
  3179.  The token OR may be used to connect two or more separate conditional tests
  3180.  within a meta-command.  The overall test will be TRUE if any of the individual
  3181.  OR conditions is TRUE.  In the above example, the sequence 
  3182.   
  3183.    IsCarrying 223 (* Battle Axe *) 
  3184.      OR 
  3185.    Present 246 (* Large Two-handed Sword *) 
  3186.    VariableGT 7 90 (* Player has enough strength to swing sword *) 
  3187.    FlagON 3 (* Sword has been pulled free from stone *) 
  3188.      OR 
  3189.    IsCarrying 221 (* Iron Mace *) 
  3190.    VariableGT 7 50 (* Player has enough strength to swing mace *) 
  3191.   
  3192.  tests if the player is carrying or has access to one (or more) of the heavy
  3193.  weapons which is capable of breaking the lock on the door.
  3194.   
  3195.  If there isn't an OR token between two conditions, there is an implied AND
  3196.  condition between successive conditions.  The end of the series of OR's is
  3197.  determined when AGT encounters the first Action token following the first OR. 
  3198.  For example, the above meta-command might be rewritten in pseudo-PASCAL as: 
  3199.   
  3200.    IF (Verb = 'BREAK') AND (Noun = 'LOCK') THEN  (* "BREAK LOCK" *)
  3201.      IF InRoom(208) THEN  (* Locked oak door is here *)
  3202.        IF (NOT InRoom(307)) THEN  (* Wizard not here *)
  3203.          IF IsCarrying(223)  (* Player has means to break door *)
  3204.             OR (Present(246) AND (Variable[7] > 90) AND FlagON[3]) 
  3205.             OR (IsCarrying(221) AND (Variable[7] > 50)) THEN 
  3206.            BEGIN 
  3207.              SwapLocations(208,209);  (* Swap open doorway for locked door *)
  3208.              PrintMessage(86);  (* Print appropriate message *)
  3209.              ChangePassageway(1,25);  (Open passage north to room 25 *)
  3210.              DoneWithTurn := TRUE;  (* Nothing more for this turn *)
  3211.            END; 
  3212.   
  3213.  When processing a meta-command, AGT starts at the first action or condition
  3214.  and continues to process each token until one of the conditions within the
  3215.  meta-command is not met, i.e., it is FALSE, then AGT skips to the next
  3216.  meta-command within the .CMD file.  For example, consider the following:
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.                                       43
  3228.  
  3229.    COMMAND ANY 
  3230.     Present 210 (* Blazing torch is here *) 
  3231.     CounterGT 2 75 (* Torch has been lit for at least 75 turns *) 
  3232.     PrintMessage 21 (* Your torch is flickering and growing weaker *) 
  3233.     CounterEquals 2 100 (* Torch has been lit for 100 turns *) 
  3234.     PrintMessage 22 (* The torch finally goes out! *) 
  3235.     TurnCounterOFF 2 (* Torch has gone out, so turn torch counter OFF *) 
  3236.     SwapLocations 210 211 (* swap blazing torch for unlit torch *) 
  3237.    END_COMMAND 
  3238.   
  3239.  In this meta-command, Counter number 2 is used to keep track of the number of
  3240.  turns that the torch has been blazing.  If the blazing torch isn't being
  3241.  carried by the player or in the current room, the very first condition is
  3242.  FALSE and AGT would skip ahead to the next meta-command -- i.e., no further
  3243.  tokens in this meta-command would be considered.  However, if the blazing
  3244.  torch was present in the room, AGT would consider the second condition,
  3245.  specifically, if the torch has been blazing for more than 75 turns.  If it
  3246.  has, then the next token would cause message 21 to be printed.  Then the next
  3247.  token would test if the torch has been blazing for exactly 100 turns.  If it
  3248.  hasn't, then AGT skips ahead to the next meta-command in the .CMD file.  If
  3249.  the torch has been blazing for exactly 100 turns, then the last three tokens
  3250.  (all action tokens) are processed and message 22 is printed, the blazing torch
  3251.  counter is turned OFF, and an unlit torch (noun number 211) is swapped for the
  3252.  blazing torch (noun number 210).  For example, the above meta-command might be
  3253.  rewritten in pseudo-PASCAL: 
  3254.   
  3255.    IF (Verb = 'ANY') THEN  (* ANY and ALL commands *)
  3256.      IF Present(210) THEN  (* Blazing torch *)
  3257.        IF (Counter[2] > 75) THEN  (* Torch burning for more than 75 turns *)
  3258.          BEGIN 
  3259.            PrintMessage(21);  (* The torch is growing weaker.  *)
  3260.            IF (Counter[2] = 100) THEN  (* Torch burning exactly 100 turns *)
  3261.              BEGIN 
  3262.                PrintMessage(22);  (* The torch goes out.  *)
  3263.                TurnCounterOFF(2);  (* Turn burn counter off *)
  3264.                SwapLocations(210,211);  (* Swap for unlit torch *)
  3265.              END; 
  3266.          END; 
  3267.   
  3268.  META-COMMANDS CONDITIONAL TESTS 
  3269.  
  3270.  The are a total of 84 separate condition tokens in AGT.  Since each of this
  3271.  conditions may be prefaced by a NOT condition, there are actually a total of
  3272.  168 conditional tests possible within a meta-command.  These conditional tests
  3273.  divide into several logical groups: 
  3274.   
  3275.     - Tests about the player's status and/or condition 
  3276.     - Tests about the status/condition of specific item(s) 
  3277.     - Tests about the status/condition of the current NOUN 
  3278.     - Other miscellaneous tests 
  3279.   
  3280.  Let's consider each of these logical groups in order.  First, tests about the
  3281.  player's status and/or condition: 
  3282.   
  3283.  ***********************   PLAYER CONDITIONS  ****************************** 
  3284.                        Number/Types 
  3285.  TOKEN NAME           Of Parameters              Explanation 
  3286.  ==================== ============= ========================================= 
  3287.  
  3288.                                       44
  3289.  
  3290.  AtLocation           1 Location#   Player is located at room Location# 
  3291.  AtLocationGT         1 Location#   Player is in room greater than Location# 
  3292.  AtLocationLT         1 location#   Player is in room less than Location# 
  3293.  FirstVisitToRoom     0   None      First visit to current room
  3294.  IsCarryingSomething  0   None      Player is carrying something 
  3295.  IsCarryingNothing    0   None      Player is carrying nothing 
  3296.  IsCarryingTreasure   1 Points#     Player is carrying at least one item 
  3297.                                     that is worth at least Points# 
  3298.  IsWearingSomething   0   None      Player is wearing something 
  3299.  IsWearingNothing     0   None      Player is wearing nothing 
  3300.  LoadWeightEquals     1 Number      Player's load weighs equals Number 
  3301.  LoadWeightGT         1 Number      Player's load weighs more than Number 
  3302.  LoadWeightLT         1 Number      Player's load weighs less than Number 
  3303.  NewLife              0   None      Player has just been resurrected or
  3304.                                     it is the start of the game
  3305.  
  3306.  All these tokens test conditions about the player current status, i.e., where
  3307.  he is/isn't located, if he is/isn't wearing or carrying something, and if his
  3308.  current load weighs a certain amount.  All these conditions are obvious except
  3309.  for 
  3310.   
  3311.       IsCarryingTreasure 10 (* Has something worth at least 10 points *) 
  3312.   
  3313.  which might be used to test whether it is appropriate to have some type of
  3314.  thief (randomly) rob the player of his valuables.
  3315.   
  3316.  The second group of conditions test the status of various items or nouns: 
  3317.   
  3318.  ***********************   ITEM(S) CONDITIONS   ***************************** 
  3319.                       Number/Types 
  3320.  TOKEN NAME           Of Parameters              Explanation 
  3321.  ==================== ============= ========================================= 
  3322.  Present              1 Item#       Item# is in room, carried or worn 
  3323.  IsWearing            1 Item#       Item# is being worn 
  3324.  IsCarrying           1 Item#       Item# is being carried 
  3325.  IsNowhere            1 Item#       Item# is located NOWHERE (room 0) 
  3326.  IsSomewhere          1 Item#       Item# is located somewhere (not in 0) 
  3327.  InRoom               1 Item#       Item# is located in current room 
  3328.  IsLocated            2 Item# Loc#  Item# is located in room Location# 
  3329.  Together             2 Itm1# Itm2# Itm1# and Itm2# are in same place 
  3330.  IsON                 1 Item#       Item# is ON 
  3331.  IsOFF                1 Item#       Item# is OFF 
  3332.  IsOpen               1 Item#       Item# is Open 
  3333.  IsClosed             1 Item#       Item# is Closed 
  3334.  IsLocked             1 Item#       Item# is Locked 
  3335.  IsUnLocked           1 Item#       Item# is UnLocked 
  3336.  IsEdible             1 Item#       Item# is Edible 
  3337.  IsDrinkable          1 Item#       Item# is Drinkable 
  3338.  IsPoisonous          1 Item#       Item# is Poisonous 
  3339.  IsMovable            1 Item#       Item# is Movable 
  3340.  IsGroupMember        1 Item#       Item# is a member of the group
  3341.  
  3342.  All but two of the above tokens require one parameter: the number of the item
  3343.  for which the conditional test is being considered.  Examples of these two
  3344.  exceptions are: 
  3345.   
  3346.       IsLocated 205 34 (* Tests if Noun number 205 is in Room 34 *) 
  3347.       Together 256 257 (* Tests if Nouns 256 and 257 are together *) 
  3348.  
  3349.                                       45
  3350.  
  3351.   
  3352.  The next group of conditional tokens is similar to the above except that they
  3353.  are tests for the current NOUN which has been input, not a specific item: 
  3354.   
  3355.  ************************   NOUN CONDITIONS   ******************************* 
  3356.                       Number/Types 
  3357.  TOKEN NAME           Of Parameters              Explanation 
  3358.  ==================== ============= ========================================= 
  3359.  NOUNPresent          0   None      NOUN is in room, carried or worn 
  3360.  NOUNIsWearing        0   None      NOUN is being worn 
  3361.  NOUNIsCarrying       0   None      NOUN is being carried 
  3362.  NOUNIsNowhere        0   None      NOUN is located NOWHERE (room 0) 
  3363.  NOUNIsSomewhere      0   None      NOUN is located somewhere (not in room 0)
  3364.  NOUNInRoom           0   None      NOUN is located in current room 
  3365.  NOUNIsLocated        1 Location#   NOUN is located in room Location# 
  3366.  NOUNIsON             0   None      NOUN is ON 
  3367.  NOUNIsOFF            0   None      NOUN is OFF 
  3368.  NOUNIsOpen           0   None      NOUN is Open 
  3369.  NOUNIsClosed         0   None      NOUN is Closed 
  3370.  NOUNIsLocked         0   None      NOUN is Locked 
  3371.  NOUNIsUnLocked       0   None      NOUN is UnLocked 
  3372.  NOUNIsEdible         0   None      NOUN is Edible 
  3373.  NOUNIsDrinkable      0   None      NOUN is Drinkable 
  3374.  NOUNIsPoisonous      0   None      NOUN is Poisonous 
  3375.  NOUNIsMovable        0   None      NOUN is Movable 
  3376.  NOUNpointsEquals     1 Number      NOUN's points equal Number 
  3377.  NOUNpointsGT         1 Number      NOUN's points are greater than Number 
  3378.  NOUNpointsLT         1 Number      NOUN's points are less than Number 
  3379.  NOUNweightEquals     1 Number      NOUN's weight equals Number 
  3380.  NOUNweightGT         1 Number      NOUN's weight is greater than Number 
  3381.  NOUNweightLT         1 Number      NOUN's weight is less than Number 
  3382.  
  3383.  The above tokens are especially useful if the game designer wants to create
  3384.  his own unique standard default responses to situations, rather than relying
  3385.  on the normal AGT responses.  For example, below are new default responses for
  3386.  the verb GET: 
  3387.   
  3388.     COMMAND GET ANY 
  3389.       NOUNInRoom (* NOUN is in current room *) 
  3390.       NOUNIsMovable (* NOUN can be moved *) 
  3391.       LoadWeightLT 90 (* carrying less than 90 pounds *) 
  3392.       NOUNweightLT 11 (* NOUN is less than 11 pounds *) 
  3393.       GetNOUN (* Add NOUN to items being carried *) 
  3394.       PrintMessage 1 (* You add the $NOUN$ to your load. *) 
  3395.       DoneWithTurn (* Nothing more required for this turn *) 
  3396.     END_COMMAND 
  3397.   
  3398.     COMMAND GET ANY 
  3399.       NOUNIsCarrying (* NOUN is currently being carried *) 
  3400.       PrintMessage 2 (* You already have it, Stupid! *) 
  3401.       DoneWithTurn (* Nothing more required for this turn *) 
  3402.     END_COMMAND 
  3403.   
  3404.     COMMAND GET ANY 
  3405.       NOT NOUNPresent (* NOUN is NOT present *) 
  3406.       PrintMessage 3 (* The $NOUN$ isn't here, you oaf! *) 
  3407.       DoneWithTurn (* Nothing more required for this turn *) 
  3408.     END_COMMAND 
  3409.  
  3410.                                       46
  3411.  
  3412.   
  3413.     COMMAND GET ANY 
  3414.       NOT NOUNIsMovable (* NOUN cannot be moved *) 
  3415.       PrintMessage 4 (* Sorry, but the $NOUN$ cannot be moved! *) 
  3416.       DoneWithTurn (* Nothing more required for this turn *) 
  3417.     END_COMMAND 
  3418.   
  3419.     COMMAND GET ANY 
  3420.       NOUNIsMovable (* NOUN can be moved *) 
  3421.       LoadWeightGT 89 (* carrying 90 pounds or more already *) 
  3422.       PrintMessage 5 (* Your load is too heavy to carry the $NOUN$. *) 
  3423.       DoneWithTurn (* Nothing more required for this turn *) 
  3424.     END_COMMAND 
  3425.   
  3426.  A series of COMMANDS like these is processed sequentially by their order of
  3427.  appearance in the .CMD file.  As a result, the COMMAND's order is very
  3428.  important!  For example, if the player gave the input GET STATUE and the
  3429.  statue was not in the room and was also not movable, the error message "The
  3430.  statue isn't here, you oaf!" would be printed rather than "Sorry, but the
  3431.  statue cannot be moved!" because of the order of their respective COMMANDS
  3432.  above (or in the .CMD file).
  3433.  
  3434.   
  3435.  The last group of conditional tokens is a catch-all: 
  3436.   
  3437.  ********************   MISCELLANEOUS CONDITIONS   ************************** 
  3438.                       Number/Types 
  3439.  TOKEN NAME           Of Parameters              Explanation 
  3440.  ==================== ============= ========================================= 
  3441.  NamePresent          0   None      Addressee is present in current room  
  3442.  NameIsNumber         1 Number      Addressee is Creature or Noun number  
  3443.  LightPresent         0   None      Current room has necessary light 
  3444.  RoomNeedsLight       0   None      Current room needs a light 
  3445.  FlagON               1 Flag#       Flag# is ON 
  3446.  FlagOFF              1 Flag#       Flag# is OFF 
  3447.  ScoreEquals          1 Number      Current score is equal to Number 
  3448.  ScoreGT              1 Number      Score is greater than Number 
  3449.  ScoreLT              1 Number      Score is less than Number 
  3450.  NumberEquals         1 Number      Number input is equal to Number 
  3451.  NumberGT             1 Number      Number is greater than Number 
  3452.  NumberLT             1 Number      Number is less than Number 
  3453.  AnswerIsCorrect      0   None      Last answer was correct 
  3454.  AnswerIsWrong        0   None      Last answer was wrong 
  3455.  TurnsEquals          1 Number      Number of turns is equal to Number 
  3456.  TurnsGT              1 Number      Number of turns is greater than Number 
  3457.  TurnsLT              1 Number      Number of turns is less than Number 
  3458.  CounterEquals        2 Ctr# Number Counter# is equal to Number 
  3459.  CounterGT            2 Ctr# Number Counter# is greater than Number 
  3460.  CounterLT            2 Ctr# Number Counter# is less than Number 
  3461.  VariableEquals       2 Var# Number Variable# is equal to Number 
  3462.  VariableGT           2 Var# Number Variable# is greater than Number 
  3463.  VariableLT           2 Var# Number Variable# is less than Number 
  3464.  CompareVariables     2 Var#1 Var#2 Variable#1 is less than Variable#2 
  3465.  VariableChance       2 Var# Number Variable# is less than a random number
  3466.                                     from 1 to Number 
  3467.  Chance               1 Percent     Odds percent, i.e., 10 % chance of TRUE 
  3468.  PromptForYES         0   None      Prompts for Y or N -- TRUE if Yes 
  3469.  PromptForNO          0   None      Prompts for Y or N -- TRUE if No 
  3470.  
  3471.                                       47
  3472.  
  3473.  VerbIsDirection      0   None      Verb is movement or direction 
  3474.  
  3475.  Just a few words of explanation about a couple of these.  PromptForYES and
  3476.  PromptForNO cause the player to be queried and to respond by entering a YES
  3477.  (or Y) or NO (or N) on the keyboard.  These conditions are then TRUE or FALSE
  3478.  depending upon the what is entered.  These tokens are particular useful when
  3479.  you want to ask the player a question that requires a YES or NO answer like
  3480.  whether he would like a hint.  AnswerIsCorrect and AnswerIsWrong are similar
  3481.  tokens for asking questions which do not have YES and NO answers like asking a
  3482.  riddle.  An example of how to ask a trivia question will be given later in
  3483.  this document.
  3484.  
  3485.  The number referenced by the NumberEquals, NumberGT and NumberLT is a number
  3486.  that the player inputs via the keyboard in response to a GetNumberInput action
  3487.  token.  An example of this sequence of events will be given later.
  3488.   
  3489.  The game designer has 255 Flags (1 to 255) which can be tested for being ON or
  3490.  OFF respectively by the FlagON and FlagOFF tokens.  There are 9 Counters (1 to
  3491.  9) and 9 Variables (1 to 9) which can also be tested by various tokens
  3492.  described above.  How to set these Flags, Counters and Variables will be
  3493.  described in the section on ACTION tokens below.
  3494.  
  3495.   
  3496.  META-COMMANDS ACTION TOKENS 
  3497.  
  3498.  There are a total of 71 separate action tokens in AGT.  These actions divide
  3499.  into several logical groups: 
  3500.   
  3501.     - Actions involving the player 
  3502.     - Actions involving specific item(s), the NOUN or locations 
  3503.     - Other miscellaneous actions 
  3504.   
  3505.  Let's consider each of these logical groups in order.  First, actions
  3506.  involving the player: 
  3507.   
  3508.  ********************** PLAYER ACTION TOKENS ******************************** 
  3509.                       Number/Types 
  3510.  TOKEN NAME           Of Parameters              Explanation 
  3511.  ==================== ============= ========================================= 
  3512.  GoToRoom             1 Location#   Send player to Location# 
  3513.  GoToRandomRoom       2 Loc#1 Loc#2 Randomly pick a room between Loc#1 and
  3514.                                     Loc#2 and send player to it
  3515.  GetIt                1 Item#       Item# is now being carried 
  3516.  WearIt               1 Item#       Item# is now being worn 
  3517.  DropIt               1 Item#       Drop Item# into current room 
  3518.  RemoveIt             1 Item#       Remove Item# and drop into room 
  3519.  GetNOUN              0   None      NOUN is now being carried 
  3520.  WearNOUN             0   None      NOUN is now being worn 
  3521.  DropNOUN             0   None      Drop NOUN into current room 
  3522.  RemoveNOUN           0   None      Remove NOUN and drop into room 
  3523.  DropEverything       0   None      Drop all items being carried 
  3524.  RemoveEverything     0   None      Remove all items being worn 
  3525.  KillPlayer           0   None      Make player dead at end of turn 
  3526.  
  3527.  These actions are all straight-forward.
  3528.   
  3529.  
  3530.  
  3531.  
  3532.                                       48
  3533.  
  3534.  A WORD OF WARNING: 
  3535.  
  3536.  When AGT encounters and processes an action token, it is done without fanfare
  3537.  or logical checking.  For example, if the actions 
  3538.   
  3539.       DropIt 204 (* Put the Rubber Ducky in the room *) 
  3540.       WearNOUN (* Put on or Wear NOUN *) 
  3541.   
  3542.  are encountered, they are done without checking whether the player is carrying
  3543.  the Rubber Ducky currently or if the NOUN is something that might be logically
  3544.  worn.  The game designer is warned that this kind of logical checking before
  3545.  taking actions is his responsibility -- not AGT's! 
  3546.   
  3547.  The second group of actions involve items, nouns and locations: 
  3548.   
  3549.  ******************* ITEM/NOUN/LOCATION ACTION TOKENS *********************** 
  3550.                       Number/Types 
  3551.  TOKEN NAME           Of Parameters              Explanation 
  3552.  ==================== ============= ========================================= 
  3553.  PutInCurrentRoom     1 Item#       Put Item# in current room 
  3554.  PutNOUNInCurrentRoom 0   None      Put NOUN in current room 
  3555.  SendToRoom           2 Item# Loc#  Put Item# in room Location# 
  3556.  SendNOUNToRoom       1 Location#   Put NOUN in room Location# 
  3557.  SendAllToRoom        1 Location#   Send all carried items to Location# 
  3558.  SendTreasuresToRoom  2 Loc# Point# Send all carried items whose 
  3559.                                     points > Point# to Loc# 
  3560.  Destroy              1 Item#       Item# is now NOWHERE (in room 0) 
  3561.  DestroyNOUN          0   None      NOUN is now NOWHERE (in room 0) 
  3562.  SwapLocations        2 Itm#1 Itm#2 Swap locations of Item#1 & Item#2 
  3563.  SendToItem           2 Itm#1 Itm#2 Put Itm#1 in location of Itm#2 
  3564.  SendNOUNToItem       1 Item#       Put NOUN in location of Item# 
  3565.  OpenIt               1 Item#       Item# is now open 
  3566.  CloseIt              1 Item#       Item# is now closed 
  3567.  LockIt               1 Item#       Item# is now locked 
  3568.  UnlockIt             1 Item#       Item# is now unlocked 
  3569.  OpenNOUN             0   None      NOUN is now open 
  3570.  CloseNOUN            0   None      NOUN is now closed 
  3571.  LockNOUN             0   None      NOUN is now locked 
  3572.  UnlockNOUN           0   None      NOUN is now unlocked 
  3573.  AddToGroup           1 Item#       Adds Item# to group 
  3574.  RemoveFromGroup      1 Item#       Removes Item# from group 
  3575.  MoveGroup            1 Location#   Move group to Location# 
  3576.  
  3577.  Several of these deserve some explanation.  SendTreasureToRoom is useful when
  3578.  the game designer wishes to have the player's current treasures or valuables
  3579.  stolen or disappear.  For example: 
  3580.   
  3581.       SendTreasureToRoom 28 9 (* send valuables to room 28 *) 
  3582.   
  3583.  would cause any items that were being currently carried and had point values
  3584.  of 10 or more to be sent to room 28.  Items being carried with values of 9 or
  3585.  less would continue to be carried.  The conditional token IsCarryingTreasure
  3586.  can be used to test whether such a "theft" is appropriate.
  3587.   
  3588.  The SwapLocations action token is very useful whenever the game designer
  3589.  wishes to change the status or condition of an item.  For example, this action
  3590.  can be used to replace a closed door with an open door, or to replace an egg
  3591.  with egg shell pieces (when the player gives the input BREAK EGG), or to
  3592.  
  3593.                                       49
  3594.  
  3595.  replace a small plant with a larger plant (when the player inputs the command
  3596.  WATER PLANT), or to replace a frog with a handsome prince (when the player
  3597.  inputs KISS FROG).  A very useful and powerful token! 
  3598.   
  3599.  The last group of actions do a variety of tasks: 
  3600.   
  3601.  ******************* MISCELLANEOUS ACTION TOKENS **************************** 
  3602.                       Number/Types 
  3603.  TOKEN NAME           Of Parameters              Explanation 
  3604.  ==================== ============= ========================================= 
  3605.  ShowScore            0   None      Show current SCORE 
  3606.  PlusScore            1 Number      Add Number to current SCORE 
  3607.  MinusScore           1 Number      Subtract Number from current SCORE 
  3608.  ShowInventory        0   None      Show current INVENTORY 
  3609.  WaitForReturn        0   None      Print 'Hit RETURN' message and wait 
  3610.  TimePasses           0   None      Show 'Time passes...' message 
  3611.  Delay                1 Number      Delay for Number seconds 
  3612.  ClearScreen          0   None      Clear screen 
  3613.  DescribeThing        1 Number      Describe thing Number (whatever) 
  3614.  LookAtRoom           0   None      Cause a VERBOSE look at room 
  3615.  Tone                 2 Hz Ms       Makes a tone on speaker of Hz Hertz (440
  3616.                                     Hertz = A on piano) for Ms milliseconds
  3617.  PrintMessage         1 Number      Print message Number in .MSG file 
  3618.  RandomMessage        2 Num1 Num2   Randomly picks a message from Num1 to
  3619.                                     Num2 in .MSG file and prints it
  3620.  BlankLine            0   None      Print a blank line 
  3621.  GetNumberInput       2 Num1 Num2   Prompt for player to input a Number 
  3622.                                     where Num1 <= Number <= Num2.
  3623.                                     If Num1=Num2, then no range will be 
  3624.                                     given in prompt.
  3625.  AskQuestion          1 Question#   Ask and get answer to question# 
  3626.  ChangePassageway     2 Dir# Loc#   Create or close a passageway 
  3627.                                     from current_room to Loc# via Dir#.
  3628.                                     Dir# = 1 = north ...  Dir # = 12 = exit.
  3629.                                     If Loc# = 0 then closes passageway.
  3630.                                     If Loc# <> 0 then opens passageway 
  3631.                                     to room Loc# via direction Dir#.
  3632.                                     Passageways are opened or closed at 
  3633.                                     both ends simultaneously! 
  3634.  TurnFlagON           1 Flag#       Turn Flag# ON 
  3635.  TurnFlagOFF          1 Flag#       Turn Flag# OFF 
  3636.  ToggleFlag           1 Flag#       Toggle Flag# 
  3637.  TurnCounterON        1 Counter#    Turn Counter# ON -- sets to 1 
  3638.  TurnCounterOFF       1 Counter#    Turn Counter# OFF -- sets to 0 
  3639.  SetVariableTo        2 Var# Number Set Variable Var# to Number 
  3640.  AddToVariable        2 Var# Number Add Number to Var# 
  3641.  SubtractFromVariable 2 Var# Number Subtract Number from Var# 
  3642.  AddVariables         2 Var#1 Var#2 Add Var#2 and Var#1 and put answer 
  3643.                                     into Var#1
  3644.  SubtractVariables    2 Var#1 Var#2 Subtract Var#2 from Var#1 and put answer
  3645.                                     into Var#1
  3646.  RandomVariable       2 Var# Number Set Var# to a random number between 1
  3647.                                     and Number
  3648.  NounToVariable       1 Var#        Set Var# to value of noun
  3649.  ObjectToVariable     1 Var#        Set Var# to value of object
  3650.  WinGame              0   None      Player wins game at end of turn 
  3651.  EndGame              0   None      Game ends at end of turn 
  3652.  QuitThisCMD          0   None      Quit evaluating this CMD 
  3653.  
  3654.                                       50
  3655.  
  3656.  QuitAllCMDs          0   None      Finished with all meta-commands 
  3657.  DoneWithTurn         0   None      All Done this turn -- get input next 
  3658.  ReDirectTo           0   None      See explanation that follows below.
  3659.  
  3660.  
  3661.  SPECIAL META-COMMAND SITUATIONS 
  3662.  
  3663.  There are some very powerful (and potentially confusing) actions above!  Some
  3664.  words of explanation and some examples are in order.  Specific topics to be
  3665.  covered below are Flags, Counters, Variables, Number Input, Asking and
  3666.  Answering Questions, Opening and Closing Passageways Between Rooms, and Meta-
  3667.  command Redirection.
  3668.   
  3669.  
  3670.  FLAGS 
  3671.  
  3672.  The game designer has 255 Flags at his disposal.  They are turned on with the
  3673.  TurnFlagON token, turned off with the TurnFlagOFF token and toggled with the
  3674.  ToggleFlag token.  They are tested with the FlagON and FlagOFF condition
  3675.  tokens.  The game designer should take great care in selecting and documenting
  3676.  his use of Flags.  Always, explain what each Flag stands for and what the ON
  3677.  and OFF conditions mean in comments at the beginning of the .CMD file! 
  3678.  Whenever you change the condition of a Flag explain what this new condition
  3679.  stands for in the game! 
  3680.   
  3681.  When the game starts, all Flags are OFF.  This fact can be used to test if
  3682.  certain initial actions should be taken, such as, making sure the flashlight's
  3683.  batteries are fresh.  When the game is SAVEd and RESTOREd the condition of the
  3684.  Flags, Counters and Variables is also SAVEd and RESTOREd.
  3685.   
  3686.  
  3687.  DEBUG FLAG 
  3688.  
  3689.  There is a Flag number 0 which is used by AGT to toggle the debugging mode of
  3690.  meta-commands.  When Flag 0 is ON then each meta-command being considered will
  3691.  be output to the screen.  By giving the input command SCRIPT you can also
  3692.  route this information to the printer.  This capability can be invaluable when
  3693.  you are trying to fathom a complex meta-command "bug".  The best way to use
  3694.  this capability in your game is to define a custom verb like DEBUG in the verb
  3695.  synonym section of the .DAT file and then define a meta-command like: 
  3696.   
  3697.     COMMAND DEBUG 
  3698.       ToggleFlag 0 (* Toggles meta-command Debug mode *) 
  3699.       DoneWithTurn (* Finished with this turn *) 
  3700.     END_COMMAND 
  3701.   
  3702.  Both the sample games CAVE and CRUSADE have this capability.  Try it in one of
  3703.  those games to see how it works.
  3704.  
  3705.   
  3706.  COUNTERS 
  3707.  
  3708.  There are 9 Counters (1 to 9) in AGT that can be turned ON with the
  3709.  TurnCounterON token and turned OFF with the TurnCounterOFF token.  When a
  3710.  counter is ON, it is automatically incremented at each turn of the game.  When
  3711.  a counter is OFF, it is set to zero and is not incremented.  The condition of
  3712.  these counters can be tested using the CounterEquals, CounterGT and CounterLT
  3713.  conditional tokens.  Using counters is very useful for such things as keeping
  3714.  
  3715.                                       51
  3716.  
  3717.  track of the number of turns (1) a torch is lit, (2) a player has been
  3718.  underwater using an aqua-lung, or (3) a time-bomb has been ticking.  The value
  3719.  of a counter can be printed in a message by using #CTR5# (to print counter
  3720.  number 5). 
  3721.  
  3722.  The game designer's use of Counters should be very carefully commented in the
  3723.  .CMD file! 
  3724.   
  3725.  
  3726.  VARIABLES 
  3727.  
  3728.  There are 9 Variables (1 to 9) in AGT that can be set to a specific value with
  3729.  the SetVariableTo token and added to with the AddToVariable token and subtract
  3730.  from with SubtractFromVariable token.  These variables can also be set to a
  3731.  random value with the RandomVariable token, and variables can be added
  3732.  together with the AddVariables, and subtracted from one another using the
  3733.  SubtractVariables token.  The condition of these variables can be tested using
  3734.  the VariableEquals, VariableGT and VariableLT and VariableChance conditional
  3735.  tokens.  Using variables is very useful for such things as keeping track of
  3736.  the number of times (1) a player has asked for HELP, (2) a player has crossed
  3737.  a certain rickety bridge, or (3) until a specific event happens (like the cave
  3738.  closes or the lamp's batteries go out).  Other excellent uses of variables are
  3739.  to keep track of various attributes the player may have such as Strength,
  3740.  Health, Charisma, etc.  The value of a variable can be printed in a message by
  3741.  using #VAR3# (to print variable number 3).
  3742.   
  3743.  As an example, the following meta-commands in the .CMD file will (1)
  3744.  initialize the flash batteries to last a total of 100 turns, (2) decrement a
  3745.  variable for every turn the light is ON, (3) issue warnings when the battery
  3746.  will last 20 turns or less, (4) "kill" the flashlight when the batteries
  3747.  finally go out, (5) turn the flashlight ON and OFF with the input commands
  3748.  LIGHT and EXTINGUISH.
  3749.   
  3750.     ; Comments 
  3751.     ; Flag 1 is OFF at start of game and ON otherwise 
  3752.     ; Flag 2 is OFF if the flashlight is OFF and ON if it is ON 
  3753.     ; Variable 5 will count down the life of the battery 
  3754.     ; Noun 200 is FlashLight in OFF condition 
  3755.     ; Noun 201 is FlashLight in ON condition 
  3756.     ; Noun 202 is FlashLight in DEAD condition 
  3757.   
  3758.     ; ANY meta-command -- tried at each turn of game 
  3759.   
  3760.     COMMAND ANY 
  3761.       FlagOFF 1 (* First turn of game -- initialize Battery life *) 
  3762.       SetVariableTo 5 100 (* Battery life set to 100 turns *) 
  3763.       TurnFlagON 1 (* Initialization process is now over *) 
  3764.     END_COMMAND 
  3765.   
  3766.     COMMAND ANY 
  3767.       FlagON 2 (* Flashlight is turned ON *) 
  3768.       SubtractFromVariable 5 1 (* Decrement Battery life count *) 
  3769.     END_COMMAND 
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.                                       52
  3777.  
  3778.     COMMAND ANY 
  3779.       FlagON 2 (* Flashlight is turned ON *) 
  3780.       Present 201 (* No reason to give warning unless Flashlight here *) 
  3781.       VariableGT 5 0 (* At least one more turn left in batteries *) 
  3782.       VariableLT 5 21 (* Only a few more turns left in batteries *) 
  3783.       PrintMessage 22 (* Flashlight will last only #VAR5# more turns! *) 
  3784.       VariableEquals 5 20 (* Only print next message once *) 
  3785.       PrintMessage 23 (* You had better save your batteries! *) 
  3786.     END_COMMAND 
  3787.   
  3788.     COMMAND ANY 
  3789.       FlagON 2 (* Flashlight is turned ON *) 
  3790.       VariableEquals 5 0 (* The batteries are finally dead! *) 
  3791.       TurnFlagOFF 2 (* Turn it off for the last time! *) 
  3792.       SwapLocations 201 202 (* Swap ON Flashlight for DEAD one *) 
  3793.       Present 202 (* No reason to give message unless Flashlight here *) 
  3794.       PrintMessage 24 (* The Flashlight's batteries are dead!! *) 
  3795.     END_COMMAND 
  3796.   
  3797.     etc...  for other ANY meta-commands 
  3798.   
  3799.     ; Specific Vocabulary meta-command -- tried only if WORDS match 
  3800.   
  3801.     COMMAND LIGHT FLASHLIGHT 
  3802.       Present 200 (* OFF flashlight is present *) 
  3803.       TurnFlagON 2 (* Flashlight is turned ON *) 
  3804.       SwapLocations 200 201 (* Swap OFF Flashlight for ON one *) 
  3805.       PrintMessage 25 (* The flashlight is ON and shining brightly! *) 
  3806.       DoneWithTurn (* Finished with this turn *) 
  3807.     END_COMMAND 
  3808.   
  3809.     COMMAND LIGHT FLASHLIGHT 
  3810.       Present 201 (* ON flashlight is present *) 
  3811.       PrintMessage 26 (* The flashlight is already ON, dummy! *) 
  3812.       DoneWithTurn (* Finished with this turn *) 
  3813.     END_COMMAND 
  3814.   
  3815.     COMMAND LIGHT FLASHLIGHT 
  3816.       Present 202 (* DEAD flashlight is present *) 
  3817.       PrintMessage 27 (* Sorry, but the batteries are dead! *) 
  3818.       DoneWithTurn (* Finished with this turn *) 
  3819.     END_COMMAND 
  3820.   
  3821.     COMMAND EXTINGUISH FLASHLIGHT 
  3822.       Present 201 (* ON flashlight is present *) 
  3823.       TurnFlagOFF 2 (* Flashlight is turned OFF *) 
  3824.       SwapLocations 200 201 (* Swap OFF Flashlight for ON one *) 
  3825.       PrintMessage 28 (* The flashlight is now off! *) 
  3826.       DoneWithTurn (* Finished with this turn *) 
  3827.     END_COMMAND 
  3828.   
  3829.     COMMAND EXTINGUISH FLASHLIGHT 
  3830.       Present 200 (* OFF flashlight is present *) 
  3831.         OR 
  3832.       Present 202 (* DEAD flashlight is present *) 
  3833.       PrintMessage 29 (* The flashlight is already OFF! *) 
  3834.       DoneWithTurn (* Finished with this turn *) 
  3835.     END_COMMAND 
  3836.  
  3837.                                       53
  3838.  
  3839.   
  3840.  Needless to say, the game designer's use of Variables should be very carefully
  3841.  commented in your .CMD file! 
  3842.   
  3843.  
  3844.  NUMBER INPUT 
  3845.  
  3846.  By using meta-commands it is possible to accept number input from the player
  3847.  during the course of the game and to test the number he has input.  An
  3848.  example of where such a capability might be appropriate is having the player
  3849.  open a combination safe.  An example of use, GetNumberInput 4 20 would cause
  3850.  the player to be prompted as follows: 
  3851.   
  3852.       "What number (from 4 to 20) ? " 
  3853.   
  3854.  This prompt would be repeated until the player entered a number in the correct
  3855.  range (i.e., an integer from 4 to 20).  If the game designer didn't want to
  3856.  limit the input number to a specific range, both parameters should be equal. 
  3857.  For example, GetNumberInput 0 0 would cause the prompt to be 
  3858.   
  3859.       "What number ? " 
  3860.   
  3861.  Once input, the number can be tested by using the NumberEquals, NumberGT, and
  3862.  NumberLT conditional tokens.
  3863.   
  3864.  Another way that AGT will allow number input is as the Noun or Object within
  3865.  an input command.  For example, let's say the player is in an elevator and he
  3866.  needs to push a button corresponding to a floor.  Commands like "PUSH 3" will
  3867.  be accepted by the AGT parser.  The Noun "3" can then be assigned to a
  3868.  variable using the NounToVariable token, tested using the VariableEquals
  3869.  token, then the player would be sent to the appropriate floor.  For example,
  3870.  the following series of meta-commands will enable the player to go to any one
  3871.  of four floors by giving the correct command.
  3872.  
  3873.     COMMAND PUSH ANY
  3874.       SetVariableTo 2 0 (* Set Variable #2 to 0 *)
  3875.       AtLocation 14 (* In Elevator *)
  3876.       NounToVariable 2 (* Set Variable #2 to floor number {if any} *)
  3877.       VariableEquals 2 1 (* Did player push 1? *)
  3878.       GoToRoom 21 (* Move player to 1st floor *)
  3879.       PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
  3880.       DoneWithTurn (* Finished with this turn *) 
  3881.     END_COMMAND 
  3882.   
  3883.     COMMAND PUSH ANY
  3884.       AtLocation 14 (* In Elevator *)
  3885.       VariableEquals 2 2 (* Did player push 2? *)
  3886.       GoToRoom 22 (* Move player to 2nd floor *)
  3887.       PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
  3888.       DoneWithTurn (* Finished with this turn *) 
  3889.     END_COMMAND 
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.                                       54
  3899.  
  3900.     COMMAND PUSH ANY
  3901.       AtLocation 14 (* In Elevator *)
  3902.       VariableEquals 2 3 (* Did player push 3? *)
  3903.       GoToRoom 23 (* Move player to 3rd floor *)
  3904.       PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
  3905.       DoneWithTurn (* Finished with this turn *) 
  3906.     END_COMMAND 
  3907.   
  3908.     COMMAND PUSH ANY
  3909.       AtLocation 14 (* In Elevator *)
  3910.       VariableEquals 2 4 (* Did player push 4? *)
  3911.       GoToRoom 24 (* Move player to 4th floor *)
  3912.       PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
  3913.       DoneWithTurn (* Finished with this turn *) 
  3914.     END_COMMAND 
  3915.   
  3916.     COMMAND PUSH ANY
  3917.       AtLocation 14 (* In Elevator *)
  3918.       NOT VariableEquals 2 0 (* Did player push a number? *)
  3919.       PrintMessage 34 (* This Elevator only has four floors. *)
  3920.       DoneWithTurn (* Finished with this turn *) 
  3921.     END_COMMAND 
  3922.   
  3923.  
  3924.  ASKING AND ANSWERING QUESTIONS 
  3925.  
  3926.  Asking and answering questions can be handled by using several meta-commands. 
  3927.  For example, let's assume we want to ask the trivia question "What is the
  3928.  largest human organ?" to which the correct answer is "skin".  We would specify
  3929.  the question and answer in the .DAT file as follows: 
  3930.   
  3931.     QUESTION 3 WHAT IS THE LARGEST HUMAN ORGAN? 
  3932.     ANSWER 3 SKIN 
  3933.   
  3934.  Then the following meta-commands would ask the question and give an
  3935.  appropriate response based on whether the answer given was right or wrong: 
  3936.   
  3937.     COMMAND Verb Noun or ANY 
  3938.       various conditions 
  3939.       AskQuestion 3 (* ask it and get answer *) 
  3940.       TurnFlagON 255 (* temporary flag to test correctness of answer *) 
  3941.       AnswerIsCorrect (* tests if answer is correct *) 
  3942.       TurnFlagOFF 255 (* turn temporary flag off because answer right *) 
  3943.       PrintMessage 29 (* Fantastic, you got it right!! *) 
  3944.       PlusScore 10 (* Give player 10 points for correct answer *) 
  3945.       DoneWithTurn 
  3946.     END_COMMAND 
  3947.  
  3948.     COMMAND Same Verb Noun or ANY 
  3949.       FlagON 255 (* temporary flag not turned off in previous COMMAND *) 
  3950.       TurnFlagOFF 255 (* turn temporary flag off now *) 
  3951.       PrintMessage 30 (* Sorry, you got it wrong!! *) 
  3952.       DoneWithTurn 
  3953.     END_COMMAND 
  3954.   
  3955.  When a question is asked and a response is given, the correct answer is
  3956.  matched against the response by looking for the answer anywhere in the
  3957.  response.  This means that any of the following responses would be considered
  3958.  
  3959.                                       55
  3960.  
  3961.  correct by AGT: 
  3962.   
  3963.     SKIN 
  3964.     I THINK THE ANSWER IS SKIN 
  3965.     THE CORRECT RESPONSE IS "SKIN" 
  3966.     ANYONE KNOWS IT IS SKIN, YOU TURKEY COMPUTER! 
  3967.   
  3968.  The game designer can have up to 9 sets of questions and answers (1 to 9) in
  3969.  the .DAT file.  They could form the basis for a series of riddles that must be
  3970.  answered during the course of the adventure in order to get all the points and
  3971.  win the game.
  3972.   
  3973.  
  3974.  OPENING AND CLOSING PASSAGEWAYS BETWEEN ROOMS 
  3975.  
  3976.  The ChangePassageway token can be used in a meta-command to open or close
  3977.  passageways between rooms during the game.  For example, to open a secret
  3978.  passage between room 3 and room 7 when the command SESAME is given could be
  3979.  done with the following: 
  3980.   
  3981.     COMMAND SESAME 
  3982.       AtLocation 3 (* Player is at location 3 *) 
  3983.       InRoom 203 (* Solid stone wall *) 
  3984.       ChangePassageway 2 7 (* open passage South(2) to room 7 *) 
  3985.       SwapLocations 203 204 (* Swap solid wall for wall with door in it *) 
  3986.       SwapLocations 227 228 (* Swap for wall with door in room 7 also *) 
  3987.       PrintMessage 21 (* At the sound of your voice, a large doorway *) 
  3988.                       (* magically appears where a stone wall once was. *) 
  3989.       DoneWithTurn 
  3990.     END_COMMAND 
  3991.   
  3992.  Once this meta-command has opened the passageway between these rooms, the
  3993.  player could go to room 7 from room 3 by giving the SOUTH, or conversely go to
  3994.  room 3 from room 7 by giving the command NORTH.  The passageway is opened in
  3995.  both rooms in opposite directions.
  3996.   
  3997.  The same token can be used to close a passageway as well.  For example, if the
  3998.  statue in the treasure room was "booby-trapped", a command of GET STATUE might
  3999.  cause an avalanche of rocks to close the west exit from the treasure room as
  4000.  follows: 
  4001.  
  4002.   
  4003.     COMMAND GET STATUE 
  4004.       AtLocation 23 (* Player is in the Treasure room *) 
  4005.       InRoom 245 (* statue *) 
  4006.       FlagOFF 3 (* Booby trap has not been tripped (yet) if OFF *) 
  4007.       TurnFlagON 3 (* It has now been tripped *) 
  4008.       ChangePassageway 4 0 (* close(0) passageway to the West(4) *) 
  4009.       SwapLocations 211 212 (* Swap doorway with jumble of rocks *) 
  4010.       SwapLocations 213 214 (* Put jumble of rocks in other room also *) 
  4011.       PrintMessage 25 (* As you pick up the statue, a lever underneath *) 
  4012.                       (* pops up.  There is a terrible crash and an *) 
  4013.                       (* avalanche of rocks buries the doorway!! *) 
  4014.       GetIt 245 (* You wanted it -- You got it!! *) 
  4015.       DoneWithTurn 
  4016.     END_COMMAND 
  4017.   
  4018.   The numbers corresponding to the various directions are as follows: 
  4019.  
  4020.                                       56
  4021.  
  4022.   
  4023.       1 - North     5 - NorthEast      9 - Up 
  4024.       2 - South     6 - NorthWest     10 - Down 
  4025.       3 - East      7 - SouthEast     11 - Enter 
  4026.       4 - West      8 - SouthWest     12 - Exit 
  4027.   
  4028.  
  4029.  META-COMMAND REDIRECTION
  4030.  
  4031.  Meta-commands can be redirected to other meta-commands.  The principal use of
  4032.  this capability is when there are several player input commands which should
  4033.  be handled by the game in the same way.  For example, in the CAVE adventure,
  4034.  we want the same series of meta-commands to be used if the player enters
  4035.  "WATER THE PLANT" or "POUR WATER ON THE PLANT".  With meta-command
  4036.  redirection, the series of meta-commands we wish to use needs to be given only
  4037.  once in the .CMD file.  The second use can be simply redirected to the first. 
  4038.  For example, let's assume that all of the necessary meta-commands are given
  4039.  completely for POUR WATER ON PLANT, then the appropriate redirection for WATER
  4040.  PLANT could be accomplished by the following lines in the .CMD file:
  4041.  
  4042.      COMMAND WATER PLANT
  4043.      ReDirectTo POUR WATER ON PLANT
  4044.      END_COMMAND
  4045.  
  4046.  Notice in the above example that we redirected the meta-command for a fixed
  4047.  input command (WATER PLANT) to another fixed command (POUR WATER ON PLANT). 
  4048.  It is also possible to redirect meta-commands for ANY words.  For example, if
  4049.  we wished to redirect the meta-command WATER ANY we could do it with the
  4050.  following:
  4051.  
  4052.      COMMAND WATER ANY
  4053.      ReDirectTo POUR WATER ON $NOUN$
  4054.      END_COMMAND
  4055.  
  4056.  Notice that by using $NOUN$ in the "redirected" command, we can "map" the
  4057.  original command's noun (from WATER PLANT or WATER TREE, or WATER whatever) to
  4058.  the new command's object.  This redirected command causes the game to convert
  4059.  a command to "WATER THING" to act as if the player had actually typed in "POUR
  4060.  WATER ON THING".  In addition to $NOUN$, it is also possible to use $VERB$,
  4061.  $NAME$ and $OBJECT$ whenever we wish to "map" these words into another use
  4062.  within a redirected command.  You should not use ANY in the redirected
  4063.  command, i.e., ReDirectTo POUR WATER ON ANY would make AGT think the player
  4064.  had actually typed in "POUR WATER ON ANY". 
  4065.  
  4066.  
  4067.  ORGANIZATION OF THE .CMD FILE 
  4068.  
  4069.  Meta-commands like those described above are processed sequentially by their
  4070.  order of appearance in the .CMD file.  As a result, the COMMAND's order is
  4071.  very important!  For example, let's consider a series of meta-commands to
  4072.  define a new verb FILL.  We want to be able to fill a bottle with water or oil
  4073.  depending upon where we are.  We want to break a vase, whenever we try to fill
  4074.  the vase.  Finally, we want to print several default messages, such as "The
  4075.  bottle is already full.", or  "The $NOUN$ isn't here, so you can't $VERB$
  4076.  it!",  or "There is nothing here to put in the $NOUN$."  or  "You have to be
  4077.  kidding!  You can't $VERB$ a $NOUN$!!"  This can be done with the following
  4078.  seven meta-commands for the verb FILL: 
  4079.   
  4080.  
  4081.                                       57
  4082.  
  4083.     ; COMMENTS 
  4084.     ; 
  4085.     ; FLAGS: 
  4086.     ;   2  Bottle is full if ON, empty if OFF 
  4087.     ; 
  4088.     ; NOUNS: 
  4089.     ;   225 bottle filled with water 
  4090.     ;   226 empty bottle 
  4091.     ;   227 bottle filled with oil 
  4092.     ;   265 broken vase -- pottery shards 
  4093.     ;   263 Ming vase 
  4094.  
  4095.   
  4096.  (1)  COMMAND FILL ANY 
  4097.       NOT NOUNPresent 
  4098.       PrintMessage 29 ;The $NOUN$ isn't here, so you can't $VERB$ it! 
  4099.       DoneWithTurn 
  4100.       END_COMMAND 
  4101.   
  4102.  (2)  COMMAND FILL BOTTLE 
  4103.       FlagON 2 ;bottle is already full 
  4104.       PrintMessage 105 ;The bottle is already full.
  4105.       DoneWithTurn 
  4106.       END_COMMAND 
  4107.   
  4108.  (3)  COMMAND FILL BOTTLE 
  4109.       AtLocation 3 ;inside building 
  4110.         OR 
  4111.       AtLocation 4 ;valley by stream 
  4112.         OR 
  4113.       AtLocation 38 ;bottom of pit with stream 
  4114.         OR 
  4115.       AtLocation 95 ;cavern with waterfall 
  4116.         OR 
  4117.       AtLocation 113 ;reservoir 
  4118.         OR 
  4119.       AtLocation 141 ;by building 
  4120.       PrintMessage 107 ;bottle is now full of water 
  4121.       SwapLocations 226 225 ;swap empty bottle for water-filled 
  4122.       TurnFlagON 2 ;bottle is now full 
  4123.       DoneWithTurn 
  4124.       END_COMMAND 
  4125.   
  4126.  (4)  COMMAND FILL BOTTLE 
  4127.       AtLocation 24 ;east pit of two-pit room 
  4128.       PrintMessage 108 ;bottle is now full of oil 
  4129.       SwapLocations 226 227 ;swap empty bottle for oil-filled 
  4130.       TurnFlagON 2 ;bottle is now full 
  4131.       DoneWithTurn 
  4132.       END_COMMAND 
  4133.   
  4134.  (5)  COMMAND FILL BOTTLE 
  4135.       PrintMessage 106 ;There is nothing here to put in the $NOUN$.
  4136.       DoneWithTurn 
  4137.       END_COMMAND 
  4138.  
  4139.  
  4140.  
  4141.  
  4142.                                       58
  4143.  
  4144.  (6)  COMMAND FILL VASE 
  4145.       Destroy 263 ;Ming vase 
  4146.       PutInCurrentRoom 265 ;broken vase pottery shards 
  4147.       PrintMessage 145 ;You clumsy oaf!  You broke the vase.
  4148.       DoneWithTurn 
  4149.       END_COMMAND 
  4150.   
  4151.  (7)  COMMAND FILL ANY 
  4152.       PrintMessage 109 ;You must be kidding! You can't $VERB$ a $NOUN$! 
  4153.       DoneWithTurn 
  4154.       END_COMMAND 
  4155.  
  4156.   
  4157.  The numbers shown in front of each of the COMMAND's are just for ease of this
  4158.  discussion.  Numbers like these should NEVER actually be included in a .CMD
  4159.  file, because they would lead to serious bugs! 
  4160.   
  4161.  If these COMMAND's were in the .CMD file in the order shown, when the player
  4162.  entered a command to "FILL something", AGT would first try COMMAND (1) which
  4163.  would test whether the "something" was present.  If it was not present,
  4164.  COMMAND (1) would print the default message "The something isn't here, so you
  4165.  can't fill it!" and the DoneWithTurn would cause all AGT process to cease for
  4166.  this turn.  Only if the something was present, would AGT try COMMANDS (2),
  4167.  (3), etc.
  4168.   
  4169.  COMMAND (2) to (5) will only be tried in the "something" was the BOTTLE. 
  4170.  COMMAND (2) would be tried first, and it would test if the bottle was already
  4171.  full and give an appropriate message if it was full.  COMMAND (3), which would
  4172.  only be tried if the bottle was empty, would test if the player was located in
  4173.  places where it was possible to get water, and fills the bottle with water if
  4174.  possible.  COMMAND (4), which would only be tried if there was no water at the
  4175.  current location, would test if the player was at location 24, where there is
  4176.  oil, and fill the bottle with oil, if possible.  COMMAND (5) would only be
  4177.  tired if the player was not located near a source of water or a source of oil
  4178.  and it would print a message that "There is nothing here to put in the
  4179.  bottle".
  4180.   
  4181.  COMMAND (6) only works if the player's input is FILL VASE.  Because AGT got
  4182.  past COMMAND (1), we know that the vase is present (other wise COMMAND (1)
  4183.  would have caused an "error" message to be printed).  COMMAND (6) causes the
  4184.  broken pottery shards to be switched with the vase and an appropriate message
  4185.  to be printed.
  4186.  
  4187.  COMMAND (7) is the "default" condition for the verb FILL.  It is activated
  4188.  only if the player gave the input "FILL something" and the "something" is
  4189.  present, but it is not the BOTTLE or the VASE.  For example, if the player
  4190.  entered FILL THE ROCK, COMMAND (7) would cause "You must be kidding! You can't
  4191.  fill a rock!" to be printed.
  4192.   
  4193.  The order of these COMMAND's is very important!  Specifically, COMMAND (1)
  4194.  must be first and COMMAND (7) must be last in order for AGT to give the
  4195.  "correct" and logical default responses to the verb FILL.  Further, COMMAND
  4196.  (2) must precede and COMMAND (5) must follow COMMAND's (3) and (4) in order
  4197.  for the input "FILL BOTTLE" to work logically.  It is important to understand
  4198.  why the above sequence is critical.  Study the sequence again, if necessary.
  4199.   
  4200.  Besides, the order of COMMAND's for a specific verb (like FILL), it is also
  4201.  important to arrange the verbs within the .CMD file in a reasonable manner. 
  4202.  
  4203.                                       59
  4204.  
  4205.  Specifically, all the meta-commands for each verb should be grouped together
  4206.  in the .CMD file.  For example: 
  4207.   
  4208.            ; ANY Commands 
  4209.   
  4210.      (1)   COMMAND ANY 
  4211.             .
  4212.             .
  4213.      (37)  COMMAND ANY 
  4214.   
  4215.            ; READ Commands 
  4216.   
  4217.      (38)  COMMAND READ BOOK 
  4218.             .
  4219.             .
  4220.      (46)  COMMAND READ ANY 
  4221.   
  4222.            ; SEARCH Commands 
  4223.   
  4224.      (47)  COMMAND SEARCH CLOSET 
  4225.             .
  4226.             .
  4227.      (54)  COMMAND SEARCH ANY 
  4228.   
  4229.            ; CLIMB Commands 
  4230.   
  4231.      (55)  COMMAND CLIMB ROPE 
  4232.             .
  4233.             .
  4234.      (69)  COMMAND CLIMB ANY 
  4235.   
  4236.            ; SQUEEZE Commands 
  4237.   
  4238.      (70)  COMMAND SQUEEZE LEMON 
  4239.             .
  4240.             .
  4241.      (82)  COMMAND SQUEEZE ANY 
  4242.             .
  4243.             .
  4244.   
  4245.  All the ANY meta-commands are grouped together; all the READ meta-commands are
  4246.  together, etc.  Not only is this easier to follow and debug, but it is faster
  4247.  for AGT to process.  This is because, AGT processes these meta-commands using
  4248.  a variation of a technique called "Indexed Sequential Access Method" (also
  4249.  called ISAM).  What this means is: AGT keeps track of the first and last
  4250.  meta-commands for each verb.  For example, if the verb was CLIMB, AGT would
  4251.  only consider meta-commands with indices from 55 to 69.  But within this
  4252.  group, AGT considers them sequentially.
  4253.  
  4254.  
  4255.  
  4256.  
  4257.  
  4258.  
  4259.  
  4260.  
  4261.  
  4262.  
  4263.  
  4264.                                       60
  4265.  
  4266.  PART 4:  SAMPLE AGT META-COMMAND SCENARIOS 
  4267.  
  4268.  
  4269.  This Part of the manual presents several scenarios where meta-language 
  4270.  commands have been used to create typical game situations.  These scenarios
  4271.  are presented in detail by showing how ROOMs, NOUNs and CREATUREs data are
  4272.  used in the .DAT file, how messages are put in the .MSG file, and finally how
  4273.  the meta-commands are written to accomplish the desired effects in the .CMD
  4274.  file.  The specific scenarios to be presented include: (1) defining the
  4275.  actions for the new verb FILL, (2) a variety of random activities by a castle
  4276.  guard, and (3) interaction with characters in a Star Trek adventure.
  4277.  
  4278.  
  4279.  SCENARIO 1: "FIND" VERB ACTIONS 
  4280.  
  4281.  This scenario comes from the COLOSSAL CAVE adventure.  In this scenario, we 
  4282.  want to define several actions/responses to the player's input using the 
  4283.  custom user-defined verb "FIND".  Pay particular attention to how the player
  4284.  is offered a hint (for 5 points) if he inputs "FIND CAVE".
  4285.   
  4286.  In the CAVE.DAT file we would define a custom verb as: 
  4287.   
  4288.    VERB 
  4289.    Dummy_Verb1 FIND 
  4290.    END_VERB 
  4291.   
  4292.  Several messages are needed in the CAVE.MSG file as follows: 
  4293.   
  4294.    MESSAGE 24 
  4295.    You are already carrying the $NOUN$, dummy! 
  4296.    END_MESSAGE 
  4297.   
  4298.    MESSAGE 57 
  4299.    I don't know where the cave is, but hereabouts no stream 
  4300.    can run on the surface for very long.  I would try the stream.
  4301.    END_MESSAGE 
  4302.   
  4303.    MESSAGE 59 
  4304.    I can only tell you what you see as you move about and 
  4305.    manipulate things.  I cannot tell you where remote things are.
  4306.    END_MESSAGE 
  4307.   
  4308.    MESSAGE 86 
  4309.    Okay, If you're so smart, do it yourself! 
  4310.    END_MESSAGE 
  4311.   
  4312.    MESSAGE 94 
  4313.    I believe what you want is right here with you.
  4314.    END_MESSAGE 
  4315.   
  4316.    MESSAGE 116 
  4317.    The Dwarf's knife vanished as it struck the wall of the cave.
  4318.    END_MESSAGE 
  4319.   
  4320.    MESSAGE 138 
  4321.    I daresay whatever you want is around here somewhere.
  4322.    END_MESSAGE 
  4323.   
  4324.  
  4325.                                       61
  4326.  
  4327.    MESSAGE 143 
  4328.    The hint will cost you 5 points.
  4329.    END_MESSAGE 
  4330.   
  4331.    MESSAGE 175 
  4332.    Do you want the hint? 
  4333.    END_MESSAGE 
  4334.   
  4335.  The meta-commands for FIND in the CAVE.CMD file would be as follows: 
  4336.  (Be sure and understand the importance of the order of these COMMANDs.) 
  4337.   
  4338.    ;FLAGS 
  4339.    ;Flag 3  Cave is closed if ON and player is in a room with many sleeping 
  4340.    ;        dwarves -- who should not be awakened! 
  4341.    ;Flag 9  Temporary flag 
  4342.    ;Flag 10 A Dwarf is in the room if ON 
  4343.    ;Flag 12 Hint about how to find cave has been offered if ON 
  4344.   
  4345.    ; FIND meta-commands 
  4346.   
  4347.    COMMAND FIND KNIFE 
  4348.    PrintMessage 116 ;The dwarf's knife vanished.
  4349.    DoneWithTurn 
  4350.    END_COMMAND 
  4351.   
  4352.    COMMAND FIND ANY 
  4353.    NOUNIsCarrying 
  4354.    PrintMessage 24 ;You already have it, dummy! 
  4355.    DoneWithTurn 
  4356.    END_COMMAND 
  4357.   
  4358.    COMMAND FIND ANY 
  4359.    FlagON 3 ;cave is closed 
  4360.    OR 
  4361.    NOUNPresent ;NOUN is here already 
  4362.    PrintMessage 138 ;It must be around here somewhere.
  4363.    DoneWithTurn 
  4364.    END_COMMAND 
  4365.   
  4366.    COMMAND FIND DWARF 
  4367.    FlagON 10 ;dwarf in room 
  4368.    PrintMessage 94 ;It is here with you.
  4369.    DoneWithTurn 
  4370.    END_COMMAND 
  4371.  
  4372.  
  4373.  
  4374.  
  4375.  
  4376.  
  4377.  
  4378.  
  4379.  
  4380.  
  4381.  
  4382.  
  4383.  
  4384.  
  4385.  
  4386.                                       62
  4387.  
  4388.    COMMAND FIND CAVE 
  4389.    FlagOFF 12 ;The Cave hint has not been offered yet.
  4390.    TurnFlagON 12 ;Now Cave hint has been offered 
  4391.    PrintMessage 175 ;Do you want a hint? 
  4392.    PromptForYes 
  4393.    TurnFlagON 9 ;hint has been rejected - so far (Turn Temporary Flag ON) 
  4394.    PrintMessage 143 ;The hint will cost your 5 points 
  4395.    PrintMessage 1 ;Is that OK? 
  4396.    PromptForYes 
  4397.    TurnFlagOFF 9 ;Offer of hint has been accepted (Turn Temporary Flag OFF) 
  4398.    PrintMessage 57 ;Follow the stream to find the cave.
  4399.    MinusScore 5 ;hint costs 5 points 
  4400.    DoneWithTurn 
  4401.    END_COMMAND 
  4402.   
  4403.    COMMAND FIND CAVE 
  4404.    FlagON 9 ;Offer of hint was rejected 
  4405.       ;(Temporary Flag was not turned OFF in last COMMAND) 
  4406.    TurnFlagOFF 9 ;Turn temporary Flag OFF now 
  4407.    PrintMessage 86 ;OK, if you're so smart - do it yourself! 
  4408.    DoneWithTurn 
  4409.    END_COMMAND 
  4410.   
  4411.    COMMAND FIND ANY 
  4412.    PrintMessage 59 ;Sorry, I can't tell you where remote things are.
  4413.                    ; Default message for FIND 
  4414.    DoneWithTurn 
  4415.    END_COMMAND 
  4416.   
  4417.   
  4418.  SCENARIO 2: RANDOM ACTIVITIES BY GUARD 
  4419.  
  4420.  This is a modification of a scenario from CRUSADE adventure.  In this scenario
  4421.  we want to create a number of encounters with guards in various rooms of the
  4422.  Baron's castle.  We will use only one CREATURE (Guard -- 301) and move him
  4423.  around from room to room randomly.  The player can fight the guard, and will
  4424.  be thrown into a dungeon cell if he loses, and will cause the guard to be
  4425.  replaced with an unconscious guard if he wins.  The player can wear a disguise
  4426.  by wearing the Baron's armor.  If the guard encounters the player wearing the
  4427.  armor, the guard will mistake the player for the Baron and leave the room.  If
  4428.  the player attempts to talk to the guard without giving the proper password,
  4429.  the guard will capture the player and throw him into the dungeon.  If the
  4430.  player angers the guard in Room 11 (a small room -- high up in the sheer wall
  4431.  of the cavern), the guard will throw the player down to the cavern floor far
  4432.  below where the player will lose consciousness and later awake with a broken
  4433.  leg.  The leg will take a random number of turns to heal.  Before it heals,
  4434.  the player will be unable to move around.
  4435.   
  4436.  To give as complete a picture as possible, the needed data for this scenario
  4437.  will be shown from all three necessary CRUSADE.* files: i.e., CRUSADE.DAT, 
  4438.  CRUSADE.MSG and CRUSADE.CMD.  In CRUSADE.DAT we would define the CREATURE,
  4439.  ROOMs and the various NOUNs needed as: 
  4440.   
  4441.    CREATURE 301 
  4442.    guard 
  4443.    Baron's 
  4444.    You see one of the Baron's guards.  He looks very angry.
  4445.    LOCATION 11 
  4446.  
  4447.                                       63
  4448.  
  4449.    HOSTILE 
  4450.    MAN 
  4451.    END_CREATURE 
  4452.   
  4453.    CREATURE_DESCR 301 
  4454.    The guard is about 6 foot 8 inches tall, but he appears even bigger 
  4455.    as he looms over you.  He looks mean and is rather ugly.
  4456.    END_CREATURE_DESCR 
  4457.   
  4458.    ROOM 10 
  4459.    Large cavern 
  4460.    EAST   9 
  4461.    LIGHT 210  (* Blazing torch *) 
  4462.    END_ROOM 
  4463.   
  4464.    ROOM_DESCR 10 
  4465.    You are in a very large cavern with high sheer walls.  A passage 
  4466.    leads off to the east.
  4467.    END_ROOM_DESCR 
  4468.   
  4469.    NOUN 269 
  4470.    walls 
  4471.    cavern 
  4472.    The cavern walls are quite steep.  You can't see any way to climb them.
  4473.    LOCATION 10 
  4474.    UNMOVABLE 
  4475.    NOUN_SYNONYMS WALL 
  4476.    PLURAL 
  4477.    END_NOUN 
  4478.   
  4479.    NOUN_DESCR 269 
  4480.    The walls are very steep and quite smooth.  You can't see any 
  4481.    hand or foot holds.
  4482.    END_NOUN_DESCR 
  4483.   
  4484.    NOUN 219 
  4485.    opening 
  4486.    small 
  4487.    There is an opening in the wall -- high up near the roof of the cavern.
  4488.    LOCATION 10 
  4489.    UNMOVABLE 
  4490.    END_NOUN 
  4491.   
  4492.    NOUN_DESCR 219 
  4493.    You see a dim light shining out of the opening, but it is 
  4494.    too high and far to see more.  It looks impossible to get up to 
  4495.    the opening from your location at the bottom of the cavern.
  4496.    END_NOUN_DESCR 
  4497.   
  4498.    ROOM 11 
  4499.    Small room 
  4500.    SOUTH 42 
  4501.    LIGHT 210  (* Blazing torch *) 
  4502.    END_ROOM 
  4503.   
  4504.    ROOM_DESCR 11 
  4505.    You are in a small room carved into the sheer cavern wall.
  4506.    The south part of the room is totally open and looks out 
  4507.  
  4508.                                       64
  4509.  
  4510.    on to the cavern floor far below.  Be careful not to go south! 
  4511.    There is a doorway to the north.
  4512.    END_ROOM_DESCR 
  4513.   
  4514.    NOUN 215 
  4515.    leg 
  4516.    broken 
  4517.    You have a broken leg and are unable to move.
  4518.    LOCATION 0 
  4519.    UNMOVABLE 
  4520.    END_NOUN 
  4521.   
  4522.    NOUN_DESCR 215 
  4523.    Your leg hurts like the dickens!  You are quite discouraged because you
  4524.    will need two good legs to rescue the princess and solve this adventure!
  4525.    END_NOUN_DESCR 
  4526.   
  4527.    NOUN 230 
  4528.    armor 
  4529.    silver 
  4530.    The Baron's silver suit of armor stands nearby.
  4531.    LOCATION 24 
  4532.    WEIGHT 25 
  4533.    SIZE 25 
  4534.    WEARABLE 
  4535.    POINTS 10 
  4536.    END_NOUN 
  4537.   
  4538.    NOUN_DESCR 230 
  4539.    The armor is quite fancy, but it still looks like it would be useful 
  4540.    in a fight.  It would cover its occupant from head to foot.
  4541.    END_NOUN_DESCR 
  4542.   
  4543.    NOUN 259 
  4544.    guard 
  4545.    unconscious 
  4546.    An unconscious guard lies at your feet.
  4547.    LOCATION 0 
  4548.    WEIGHT 200 
  4549.    END_NOUN 
  4550.   
  4551.    NOUN_DESCR 259 
  4552.    The guard's unconscious body lies in a heap at your feet.
  4553.    You have to step over him as you move about the passageway.
  4554.    He looks like he will be out of action for a long time.
  4555.    END_NOUN_DESCR 
  4556.   
  4557.    ROOM 17 
  4558.    Guard's quarters 
  4559.    EAST 16 
  4560.    END_ROOM 
  4561.   
  4562.    ROOM_DESCR 17 
  4563.    You are in the guard's quarters.  It looks like a pig sty -- it is so 
  4564.    messy.  The door is to the east.
  4565.    END_ROOM_DESCR 
  4566.   
  4567.    HELP 17 
  4568.  
  4569.                                       65
  4570.  
  4571.    Leave quickly.  It is very dangerous to linger here! 
  4572.    END_HELP 
  4573.   
  4574.    ROOM 41 
  4575.    Cell 
  4576.    (* No obvious exits *) 
  4577.    END_ROOM 
  4578.   
  4579.    ROOM_DESCR 41 
  4580.    You are in a dingy dungeon cell.  There is straw on the floor.  The cell 
  4581.    is cold and damp.  You are very depressed by just being here.
  4582.    END_ROOM_DESCR 
  4583.   
  4584.  In the CRUSADE.MSG file we would define these needed messages: 
  4585.   
  4586.    MESSAGE 3 
  4587.    The guard looks at you suspiciously because you neglected to 
  4588.    identify yourself by using the proper password.  He knows you 
  4589.    shouldn't be here and decides that he should take you to the 
  4590.    Baron for questioning.  He rushes toward you.
  4591.    END_MESSAGE 
  4592.   
  4593.    MESSAGE 8 
  4594.    What a great idea!  You must have played this game before, but 
  4595.    unfortunately you can't do that now.  It is still a good idea 
  4596.    and you may wish to try it some other time.  But now it is impossible 
  4597.    END_MESSAGE 
  4598.   
  4599.    MESSAGE 25 
  4600.    because the guard simply won't let you $VERB$ the $NOUN$.
  4601.    END_MESSAGE 
  4602.   
  4603.    MESSAGE 33 
  4604.    An angry-looking guard suddenly enters the room.  He eyes you 
  4605.    suspiciously and begins to move quickly and carefully toward you.
  4606.    He reaches for his sword, but pauses as if he is waiting for you 
  4607.    to make the first move.
  4608.    END_MESSAGE 
  4609.   
  4610.    MESSAGE 42 
  4611.    The guard gets mad at you because he knows you aren't allowed here.
  4612.    He picks you up and throws you over the edge to the cavern floor far below.
  4613.    He stands at the edge looking down at you and laughingly cries, "Stay out! 
  4614.    If you know what is good for you.  Next time, I will get rough!" 
  4615.    He laughs again and that is the last thing you remember as you drift off 
  4616.    into unconsciousness.
  4617.  
  4618.    When you awake, you find...
  4619.    END_MESSAGE 
  4620.   
  4621.    MESSAGE 43 
  4622.    with a broken leg.
  4623.    END_MESSAGE 
  4624.   
  4625.    MESSAGE 44 
  4626.    Your leg has finally healed.  You are now free to resume your quest.
  4627.    END_MESSAGE 
  4628.   
  4629.  
  4630.                                       66
  4631.  
  4632.    MESSAGE 45 
  4633.    The guard looks you over very carefully, but because you are wearing the
  4634.    Baron's armor, the guard mistakes you for the Baron.  "Sorry to disturb
  4635.    you, my Lord!", he says as he quickly leaves the room.
  4636.    END_MESSAGE 
  4637.   
  4638.    MESSAGE 49 
  4639.    The guard grabs your throat with his big hands.  He squeezes until you can  
  4640.    barely breathe.  You struggle and try to pull his hands away.
  4641.    END_MESSAGE 
  4642.   
  4643.    MESSAGE 50 
  4644.    Finally, you slip into unconsciousness.  When you awake you find 
  4645.    yourself in a strange and ugly little room.
  4646.    END_MESSAGE 
  4647.   
  4648.    MESSAGE 51 
  4649.    At last, you pry his fingers off your wind pipe.  Now able to breathe, 
  4650.    you get enough strength to slam your elbow into his gut.  He lets 
  4651.    go of you and doubles over.  You kick him in a very vulnerable 
  4652.    part of his anatomy and he crumples in a pile on the floor.
  4653.    END_MESSAGE 
  4654.   
  4655.  In the CRUSADE.CMD we would have several COMMANDs.  First, the meta-commands
  4656.  that cause the random events related to the guard: 
  4657.   
  4658.    COMMAND ANY 
  4659.    NOT InRoom 301  (* Guard *) 
  4660.    NOT InRoom 259  (* Unconscious Guard *) 
  4661.    Destroy 301 (* Guard disappears from room after player leaves room *) 
  4662.    Destroy 259 (* Unconscious Guard's body disappears from room *) 
  4663.    END_COMMAND 
  4664.   
  4665.    COMMAND ANY 
  4666.    Chance 5 (* 5 % chance of guard appearing *) 
  4667.    AtLocationGT 10  (* Baron's castle area *) 
  4668.    NOT InRoom 301  (* Guard *) 
  4669.    NOT InRoom 259  (* Unconscious Guard *) 
  4670.    PutInCurrentRoom 301  (* Put guard in room *) 
  4671.    PrintMessage 33   (* Guard suddenly appears *) 
  4672.    BlankLine 
  4673.    END_COMMAND 
  4674.   
  4675.    COMMAND ANY 
  4676.    Chance 50 (* 50 % chance of guard appearing in his own quarters *) 
  4677.    AtLocation 17  (* Guard's quarters *) 
  4678.    NOT InRoom 301  (* Guard *) 
  4679.    NOT InRoom 259  (* Unconscious Guard *) 
  4680.    PutInCurrentRoom 301  (* Put guard in room *) 
  4681.    PrintMessage 33   (* Guard suddenly appears *) 
  4682.    BlankLine 
  4683.    END_COMMAND 
  4684.  
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690.  
  4691.                                       67
  4692.  
  4693.    COMMAND ANY 
  4694.    InRoom 301 (* guard *) 
  4695.    IsWearing 230 (* Baron's Armor *) 
  4696.    PrintMessage 45 (* Guard thinks you are the Baron and leaves *) 
  4697.    Destroy 301 (* Guard disappears *) 
  4698.    END_COMMAND 
  4699.   
  4700.    COMMAND ANY 
  4701.    Chance 25 
  4702.    AtLocation 11 (* room in wall *) 
  4703.    InRoom 301 (* Guard *) 
  4704.    GetIt 215 (* give broken leg to player *) 
  4705.    GoToRoom 10  (* guard throws you into room 10 *) 
  4706.    PrintMessage 42 
  4707.    DoneWithTurn (* no further action -- get next input *) 
  4708.    END_COMMAND 
  4709.   
  4710.  Now the meta-commands dealing with the broken leg: 
  4711.   
  4712.    COMMAND ANY 
  4713.    IsCarrying 215 (* Broken leg *) 
  4714.    VerbIsDirection (* Trying to move *) 
  4715.    PrintMessage 8 (* Sorry, but you can't *) 
  4716.    PrintMessage 43 (* with a broken leg *) 
  4717.    DoneWithTurn (* no further action -- get next input *) 
  4718.    END_COMMAND 
  4719.   
  4720.    COMMAND ANY 
  4721.    Chance 20 
  4722.    IsCarrying 215 (* Broken leg *) 
  4723.    PrintMessage 44 (* Leg is healed *) 
  4724.    BlankLine 
  4725.    Destroy 215  (* get rid of broken leg *) 
  4726.    END_COMMAND 
  4727.   
  4728.  Now the meta-commands corresponding to specific input from the player: 
  4729.   
  4730.    COMMAND GET ANY 
  4731.    InRoom 301 (* angry guard *) 
  4732.    PrintMessage 8 (* Sorry, you can't *) 
  4733.    PrintMessage 25 (* Guard won't allow it *) 
  4734.    DoneWithTurn (* no further action -- get next input *) 
  4735.    END_COMMAND 
  4736.   
  4737.    COMMAND GET ANY 
  4738.    IsCarrying 215 (* Broken leg *) 
  4739.    PrintMessage 8 (* Sorry, you can't *) 
  4740.    PrintMessage 43 (* with broken leg *) 
  4741.    DoneWithTurn (* no further action -- get next input *) 
  4742.    END_COMMAND 
  4743.   
  4744.    COMMAND OPEN ANY 
  4745.    InRoom 301 (* angry guard *) 
  4746.    PrintMessage 8 (* Sorry, you can't *) 
  4747.    PrintMessage 25 (* Guard won't allow it *) 
  4748.    DoneWithTurn (* no further action -- get next input *) 
  4749.    END_COMMAND 
  4750.   
  4751.  
  4752.                                       68
  4753.  
  4754.    COMMAND ATTACK GUARD 
  4755.    InRoom 301 (* angry guard *) 
  4756.    PrintMessage 49 (* It was a fierce fight *) 
  4757.    TurnFlagON 255 (* Set Temporary Flag to ON *) 
  4758.    Chance 25 (* 25 % chance of winning fight *) 
  4759.    PrintMessage 51 (* but you won! *) 
  4760.    TurnFlagOFF 255 (* Turn Temporary Flag OFF now *) 
  4761.    SwapLocations 259 301 (* put unconscious guard in room *) 
  4762.    DoneWithTurn (* no further action -- get next input *) 
  4763.    END_COMMAND 
  4764.   
  4765.    COMMAND ATTACK GUARD 
  4766.    InRoom 301 (* angry guard *) 
  4767.    FlagON 255 (* Temporary Flag was not turned OFF in last COMMAND *) 
  4768.    TurnFlagOFF 255 (* Turn Temporary Flag OFF now *) 
  4769.    PrintMessage 50 (* but you lost! *) 
  4770.    SendAllToRoom 17 (* Guard's takes stuff to his quarters *) 
  4771.    GoToRoom 41 (* Guard puts you in dungeon cell *) 
  4772.    SendToRoom 202 41 (* Put torch in dungeon with you *)
  4773.    DoneWithTurn (* no further action -- get next input *) 
  4774.    END_COMMAND 
  4775.   
  4776.    COMMAND TALK TO GUARD 
  4777.    PrintMessage 3 (* chat with guard -- without using password *) 
  4778.    PrintMessage 49 (* It was a fierce fight *) 
  4779.    PrintMessage 50 (* but you lost! *) 
  4780.    SendAllToRoom 17 (* Guard's takes stuff to his quarters *) 
  4781.    GoToRoom 41 (* Guard puts you in dungeon cell *) 
  4782.    SendToRoom 202 41 (* Put torch in dungeon with you *)
  4783.    DoneWithTurn (* no further action -- get next input *) 
  4784.    END_COMMAND 
  4785.   
  4786.    COMMAND ASK GUARD ABOUT ANY 
  4787.    ReDirectTo TALK TO GUARD
  4788.    END_COMMAND 
  4789.  
  4790.  
  4791.  SCENARIO 3: INTERACTION WITH CHARACTERS
  4792.  
  4793.  Let's develop an example of communicating with other characters in an
  4794.  adventure game.  Specifically, let's consider a situation in a Star Trek
  4795.  adventure game were we wish to be able to experience the following interchange
  4796.  between several of the standard Star Trek characters and the player, who is
  4797.  playing the role of Captain James T. Kirk:
  4798.  
  4799.      You are on the Bridge, the circular room at the top of the Enterprise's
  4800.      disk.  The walls are decked with crew members seated or standing at their
  4801.      posts. In the center of the room is your command chair.  Along one side of
  4802.      the room is a large viewscreen.  The only exit, via turbolift, is aft.
  4803.        The viewscreen shows the emptiness and vastness of space.
  4804.        Spock stands alert but relaxed, with his arms folded behind his back.
  4805.        Chekov sits behind the weapons control console.
  4806.        Lieutenant Uhura listens intently to her earphones.
  4807.        At the navigator's station, Sulu sits behind a console of controls.
  4808.  
  4809.      What now? AFT
  4810.  
  4811.  
  4812.  
  4813.                                       69
  4814.  
  4815.      You are in the TurboLift, a small closet-like room.  The Bridge is to your
  4816.      west.
  4817.        Spock stands alert but relaxed, with his arms folded behind his back.
  4818.  
  4819.      What now? WARP 10
  4820.  
  4821.      Spock: Jim, surely you realize that you are not on the Enterprise's
  4822.      Bridge.  The command "warp 10" is quite inappropriate here.
  4823.  
  4824.      What now? WEST
  4825.  
  4826.      You are on the Bridge, the circular room at the top of the Enterprise's
  4827.      disk.  The walls are decked with crew members seated or standing at their
  4828.      posts. In the center of the room is your command chair.  Along one side of
  4829.      the room is a large viewscreen.  The only exit, via turbolift, is aft.
  4830.        The viewscreen shows the emptiness and vastness of space.
  4831.        Spock stands alert but relaxed, with his arms folded behind his back.
  4832.        Chekov sits behind the weapons control console.
  4833.        Lieutenant Uhura listens intently to her earphones.
  4834.        At the navigator's station, Sulu sits behind a console of controls.
  4835.  
  4836.      What now? SCOTTY, WARP 10
  4837.  
  4838.      Spock: Captain, should you have Doctor McCoy check your eye sight? 
  4839.      Surely, you can see that Scotty isn't here.
  4840.  
  4841.      What now? CHEKOV, WARP 10
  4842.  
  4843.      Spock: Your extensive command experience should have convinced you that
  4844.      better results can be obtained when the appropriate member of the crew
  4845.      performs this operation.  Permit me to redirection your command to the
  4846.      proper crew member.
  4847.  
  4848.      Spock: Sulu, warp 10
  4849.  
  4850.      Sulu: What course should I plot first, Captain?.
  4851.  
  4852.      What now? PLOT A COURSE FOR QWERTY
  4853.  
  4854.      Sulu: Plotting a course for the planet Qwerty, Captain.
  4855.  
  4856.      What now? WARP 16
  4857.  
  4858.      Spock: Captain, surely you realize that the Enterprise is only capable of
  4859.      Warp 1 through Warp 12, plus Impulse power, of course.
  4860.  
  4861.      What now? WARP 10
  4862.  
  4863.      Sulu: Going to warp factor 10.
  4864.  
  4865.  To see how this scene is achieved, first let's examine the relevant entries
  4866.  in the .DAT file.  There are only two Rooms in the scene, the Bridge and the
  4867.  TurboLift; their descriptions are as follows:
  4868.  
  4869.  
  4870.  
  4871.  
  4872.  
  4873.  
  4874.                                       70
  4875.  
  4876.      ROOM 114
  4877.      Bridge
  4878.      EAST 2
  4879.      ENTER 2
  4880.      EXIT 2
  4881.      END_ROOM
  4882.  
  4883.      ROOM_DESCR 114
  4884.      You are on the Bridge, the circular room at the top of the Enterprise's
  4885.      disk.  The walls are decked with crew members seated or standing at their
  4886.      posts. In the center of the room is your command chair.  Along one side of
  4887.      the room is a large viewscreen.  The only exit, via turbolift, is aft.
  4888.      END_ROOM_DESCR
  4889.  
  4890.      ROOM 2
  4891.      Turbolift: Deck 1
  4892.      WEST 114 (* Bridge *)
  4893.      ENTER 114 (* Bridge *)
  4894.      EXIT 114 (* Bridge *)
  4895.      END_ROOM
  4896.  
  4897.      ROOM_DESCR 2
  4898.      You are in the TurboLift, a small closet-like room.  The Bridge is to your
  4899.      west.
  4900.      END_ROOM_DESCR
  4901.  
  4902.  Next, let's see how the Nouns are described in the .DAT file:
  4903.  
  4904.      NOUN 201
  4905.      course
  4906.      ship's
  4907.      You see the course plotted on the navigator's console.
  4908.      LOCATION 0
  4909.      NOUN_SYNONYMS CONSOLE
  4910.      END_NOUN
  4911.  
  4912.      NOUN_DESCR 201
  4913.      The navigator's console shows the ship's course plotted in light blue. 
  4914.      The Enterprise (shown as a red circle) is on course.
  4915.      END_NOUN_DESCR
  4916.  
  4917.      NOUN 243
  4918.      Viewscreen
  4919.      Big
  4920.      The viewscreen shows the emptiness and vastness of space.
  4921.      LOCATION 114 (* Bridge *)
  4922.      UNMOVABLE
  4923.      NOUN_SYNONYMS SCREEN
  4924.      END_NOUN
  4925.  
  4926.      NOUN 246
  4927.      Qwerty
  4928.      First
  4929.      You notice on the viewscreen:  The planet Qwerty below.
  4930.      LOCATION  0
  4931.      UNMOVABLE
  4932.      NOUN_SYNONYMS PLANET
  4933.      END_NOUN
  4934.  
  4935.                                       71
  4936.  
  4937.  
  4938.  Notice that only the Viewscreen, Noun 243, is in the Bridge, Room 114, at the
  4939.  beginning of the scene.  The other Nouns are initially "nowhere", Room 0, and
  4940.  will be put in Room 114, the Bridge, when appropriate.  Specifically, The
  4941.  Ship's Course, Noun 201, will be put in Room 114 as soon as a command is given
  4942.  to plot a course.  Similarly, Noun 246, the planet Qwerty -- shown in the
  4943.  Viewscreen, will replace the empty Viewscreen when the Enterprise gets close
  4944.  to the planet and assumes orbit.
  4945.  
  4946.  There are a number of Creatures in the scene.  Their descriptions might be
  4947.  given in the .DAT file as follows:
  4948.  
  4949.      CREATURE 300
  4950.      Spock
  4951.      Commander
  4952.      Spock stands alert but relaxed, with his arms folded behind his back.
  4953.      LOCATION 114 (* Bridge *)
  4954.      GROUPMEMBER (* Have Spock automatically follow player *)
  4955.      END_CREATURE
  4956.  
  4957.      CREATURE_DESCR 300
  4958.      Spock is the only Vulcan member of your crew.  He wears a blue shirt with
  4959.      a gold Star Fleet insignia.
  4960.      END_CREATURE_DESCR
  4961.  
  4962.      CREATURE 301
  4963.      Chekov
  4964.      Lieutenant
  4965.      Chekov sits behind the weapons control console.
  4966.      LOCATION 114 (* Bridge *)
  4967.      END_CREATURE
  4968.  
  4969.      CREATURE_DESCR 301
  4970.      Chekov is sitting at his assigned station pressing keys on the weapons
  4971.      control panel and monitoring the screen in front of him.
  4972.      END_CREATURE_DESCR
  4973.  
  4974.      CREATURE 302
  4975.      Uhura
  4976.      Lieutenant
  4977.      Lieutenant Uhura listens intently to her earphones.
  4978.      LOCATION 114 (* Bridge *)
  4979.      UNMOVABLE
  4980.      END_CREATURE
  4981.  
  4982.      CREATURE_DESCR 302
  4983.      Uhura is sitting in her communications station listening to her earphones
  4984.      and monitoring all of the known hailing frequencies.
  4985.      END_CREATURE_DESCR
  4986.  
  4987.      CREATURE 303
  4988.      Sulu
  4989.      Commander
  4990.      At the navigator's station, Sulu sits behind a console of controls.
  4991.      LOCATION 114 (* Bridge *)
  4992.      UNMOVABLE
  4993.      END_CREATURE
  4994.  
  4995.  
  4996.                                       72
  4997.  
  4998.      CREATURE_DESCR 303
  4999.      Sulu is sitting next to Chekov, monitoring lit navigation console.
  5000.      END_CREATURE_DESCR
  5001.  
  5002.      CREATURE 305
  5003.      Scott
  5004.      Commander
  5005.      Commander Scott sits at his console, monitoring the ship's engines.
  5006.      LOCATION 52 (* Engine Room *)
  5007.      UNMOVABLE
  5008.      CREATURE_SYNONYMS SCOTTY
  5009.      END_CREATURE
  5010.  
  5011.      CREATURE_DESCR 305
  5012.      Scott is the best Engineering Officer in the Federation.
  5013.      END_CREATURE_DESCR
  5014.  
  5015.  All of these Creatures are initially in the Bridge, Room 114, except for
  5016.  Commander Scott, who is in the Engine Room, naturally.
  5017.  
  5018.  Only one other entry from the .DAT file needs to be specified in order for the
  5019.  scene to work as show, and that is the definition of verbs:
  5020.  
  5021.      VERB
  5022.      EAST AFT
  5023.      Dummy_Verb1 WARP
  5024.      Dummy_Verb2 PLOT SET CHART
  5025.      END_VERB
  5026.  
  5027.  Notice that AFT is defined as a synonym for EAST.  WARP is defined as a
  5028.  "custom" verb so that commands like WARP 9 will be understood by the parser
  5029.  and the rest of the AGT driver program (RUN.EXE).  Integer numbers like 9, 12,
  5030.  etc., are always acceptable "Nouns" to the parser; however, you must use
  5031.  meta-commands to deal with numbers as Nouns properly.  PLOT, SET and CHART are
  5032.  all synonyms so that the player can enter PLOT A COURSE, or SET A COURSE or
  5033.  CHART A COURSE and they will all be treated the same by AGT.
  5034.  
  5035.  The messages needed for the scene are contained in the .MSG file and are
  5036.  shown below:
  5037.  
  5038.      MESSAGE 105
  5039.      Spock: Captain, should you have Doctor McCoy check your eye sight? 
  5040.      Surely, you can see that $NAME$ isn't here.
  5041.      END_MESSAGE
  5042.  
  5043.      MESSAGE 106
  5044.      Spock: Your extensive command experience should have convinced you that
  5045.      better results can be obtained when the appropriate member of the crew
  5046.      performs this operation.  Permit me to redirection your command to the
  5047.      proper crew member.
  5048.      END_MESSAGE
  5049.  
  5050.      MESSAGE 107
  5051.      Spock: Sulu, $VERB$ $NOUN$.
  5052.  
  5053.      END_MESSAGE
  5054.  
  5055.  
  5056.  
  5057.                                       73
  5058.  
  5059.      MESSAGE 108
  5060.      Spock: Jim, surely you realize that you are not on the Enterprise's
  5061.      Bridge.  The command "$VERB$ $NOUN$" is quite inappropriate here.
  5062.      END_MESSAGE
  5063.  
  5064.      MESSAGE 109
  5065.      Spock: Captain, surely you realize that the Enterprise is only capable of
  5066.      Warp 1 through Warp 12, plus Impulse power, of course.
  5067.      END_MESSAGE
  5068.  
  5069.      MESSAGE 110
  5070.      Sulu: What course should I plot first, Captain?.
  5071.      END_MESSAGE
  5072.  
  5073.      MESSAGE 111
  5074.      Sulu: Going to warp factor $NOUN$.
  5075.      END_MESSAGE
  5076.  
  5077.      MESSAGE 112
  5078.      Sulu: Plotting a course for the planet $OBJECT$, Captain.
  5079.      END_MESSAGE
  5080.  
  5081.  Now for the heart of the scene's interaction, the .CMD file meta-commands. 
  5082.  First, any input command that the player addresses to a valid Creature in the
  5083.  game will first be tried against a group of meta-commands that are addressed
  5084.  to ANYBODY.  This will happen automatically.  For example, consider the
  5085.  following ANYBODY meta-commands:
  5086.   
  5087.      COMMAND ANYBODY, ANY
  5088.      NOT NamePresent (* Addressee isn't here. *)
  5089.      PrintMessage 105 (* Sorry, but $NAME$ doesn't seem to be here. *)
  5090.      DoneWithTurn
  5091.      END_COMMAND
  5092.  
  5093.      COMMAND ANYBODY, WARP ANY
  5094.      AtLocation 114 (* On Enterprise's Bridge *)
  5095.      NOT NameIsNumber 303 (* Command isn't being addressed to Sulu *)
  5096.      PrintMessage 106 (* Spock: You should address appropriate person. *)
  5097.      PrintMessage 107 (* Spock redirects command to Sulu for you. *)
  5098.      RedirectTo WARP $NOUN$
  5099.      END_COMMAND
  5100.  
  5101.      COMMAND ANYBODY, WARP ANY
  5102.      RedirectTo WARP $NOUN$
  5103.      END_COMMAND
  5104.  
  5105.  The first of the above will be tried for any player command that has been
  5106.  addressed to a Creature, no matter what the command is.  For example, this
  5107.  command will be tried if the player enters SPOCK, FOLLOW ME or SULU, WARP 12. 
  5108.  However, it would not be tried if the player did not direct his command to
  5109.  anyone, i.e., it would not be tried if the player simply inputs WARP 12
  5110.  without addressing it to a specific creature.  This first meta-command simply
  5111.  tests that the Creature being addressed in the command is at the current
  5112.  location and prints a "error" message if the creature isn't there.
  5113.  
  5114.  The second and third meta-commands above are tried whenever a player addresses
  5115.  his command to a Creature (any Creature, however) and the command is to WARP
  5116.  something.  The second meta-command checks if the creature being addressed is
  5117.  
  5118.                                       74
  5119.  
  5120.  Sulu, and if it isn't -- gives an "error" message and redirects the command to
  5121.  Sulu.  The third meta-command would only be tried if the player input SULU,
  5122.  WARP Something.  This meta-command simply redirects the command to WARP
  5123.  Something, as if the command had not been addressed to anyone.
  5124.  
  5125.  These WARP Something meta-commands would be defined in the .CMD file as
  5126.  follows:
  5127.  
  5128.      COMMAND WARP ANY
  5129.      NOT AtLocation 114 (* NOT On Enterprise's Bridge *)
  5130.      PrintMessage 108 (* Spock: "$VERB$ $NOUN$" is inappropriate here. *)
  5131.      DoneWithTurn
  5132.      END_COMMAND
  5133.  
  5134.      COMMAND WARP ANY
  5135.      NounToVariable 1 (* Convert Noun to Variable number 1 *)
  5136.      VariableGT 1 12
  5137.      OR
  5138.      VariableLT 1 1
  5139.      PrintMessage 109 (* The Enterprise can only travel at warp 1 to 12. *)
  5140.      DoneWithTurn
  5141.      END_COMMAND
  5142.  
  5143.      COMMAND WARP ANY
  5144.      FlagOFF 1 (* Course has not been plotted yet *)
  5145.      PrintMessage 110 (* Sulu: What course to plot first, Captain?. *)
  5146.      DoneWithTurn
  5147.      END_COMMAND
  5148.  
  5149.      COMMAND WARP ANY
  5150.      FlagON 1 (* Course has been plotted already *)
  5151.      PrintMessage 111 (* Sulu: Going to warp factor $NOUN$. *)
  5152.      DoneWithTurn
  5153.      END_COMMAND
  5154.  
  5155.  The first three of the above meta-commands check for various "error"
  5156.  conditions and give "error" messages if appropriate.  Specifically, the first
  5157.  meta-command tests if the player is not on the Bridge; the second tests if the
  5158.  warp speed is outside the acceptable range; and the third tests that a course
  5159.  has already been plotted.  Only if none of these "error" conditions are met,
  5160.  would the fourth meta-command tell that player that the Enterprise was going
  5161.  to the indicated warp speed.
  5162.  
  5163.  There are only two more meta-commands required in order for the scene to work
  5164.  as shown at the start of this section.  These meta-commands are both for the
  5165.  situation where the play enters a command to PLOT A COURSE TO Somewhere:
  5166.  
  5167.      COMMAND PLOT COURSE FOR ANY
  5168.      NOT AtLocation 114 (* NOT On Enterprise's Bridge *)
  5169.      PrintMessage 108 (* Spock: "$VERB$ $NOUN$" is inappropriate here. *)
  5170.      DoneWithTurn
  5171.      END_COMMAND
  5172.  
  5173.  
  5174.  
  5175.  
  5176.  
  5177.  
  5178.  
  5179.                                       75
  5180.  
  5181.      COMMAND PLOT COURSE FOR ANY
  5182.      TurnFlagON 1 (* Course has now been plotted *)
  5183.      DropIt 201 (* Put plotted course on Navigator's console *)
  5184.      PrintMessage 112 (* Sulu: Plotting course for $OBJECT$. *)
  5185.      DoneWithTurn
  5186.      END_COMMAND
  5187.  
  5188.  
  5189.  
  5190.  
  5191.  
  5192.  
  5193.  
  5194.  
  5195.  
  5196.  
  5197.  
  5198.  
  5199.  
  5200.  
  5201.  
  5202.  
  5203.  
  5204.  
  5205.  
  5206.  
  5207.  
  5208.  
  5209.  
  5210.  
  5211.  
  5212.  
  5213.  
  5214.  
  5215.  
  5216.  
  5217.  
  5218.  
  5219.  
  5220.  
  5221.  
  5222.  
  5223.  
  5224.  
  5225.  
  5226.  
  5227.  
  5228.  
  5229.  
  5230.  
  5231.  
  5232.  
  5233.  
  5234.  
  5235.  
  5236.  
  5237.  
  5238.  
  5239.  
  5240.                                       76
  5241.  
  5242.  
  5243.  APPENDIX A:  STANDARD LEVEL VERBS UNDERSTOOD BY AGT 
  5244.  
  5245.   
  5246.  Meanings of notation: 
  5247.    [required word] 
  5248.    {optional word} 
  5249.    | (means OR, i.e., alternative words) 
  5250.   
  5251.      Verbs that do not require nouns 
  5252.      =============================== 
  5253.       N,S,E,W,NE,NW,SE,SW,U,D, 
  5254.       NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST,UP,DOWN 
  5255.       ENTER | GO [IN | INTO]
  5256.       EXIT | LEAVE  (* directions *) 
  5257.   
  5258.       SCORE  (* display score and status *) 
  5259.       QUIT | Q  (* end game *) 
  5260.       INVENTORY | I  (* list things player is carrying and wearing *) 
  5261.       SCREAM | SHOUT | YELL  (* make noise but seldom accomplish anything *) 
  5262.       WAIT  (* waste a turn *) 
  5263.       BRIEF | VERBOSE  (* change description mode *) 
  5264.       L | LOOK  (* repeat full description *) 
  5265.       SAVE | RESTORE {GAME}  (* save and restore game status *) 
  5266.       HELP | H  (* ask for help *) 
  5267.       SCRIPT  (* Echo all output to both printer (LP1:) and screen *) 
  5268.       UNSCRIPT  (* Send all output to screen only *) 
  5269.   
  5270.      Verbs that do require nouns (and perhaps objects)
  5271.      ================================================= 
  5272.       LIST | SHOW [EXITS]  (* list visible exits *) 
  5273.       THROW | CAST | DUMP [noun] 
  5274.          {[AT | TO | IN | INTO | ACROSS | INSIDE] [noun]} 
  5275.       ATTACK | KILL | FIGHT | HIT [creature] {[WITH] [noun]} 
  5276.       DROP | PUT DOWN [noun | ALL] 
  5277.       GET | TAKE | PICK UP [noun | ALL] 
  5278.       OPEN [noun] {[WITH] [noun]} 
  5279.       CLOSE | SHUT [noun] 
  5280.       LOCK [noun] {[WITH] [noun]}
  5281.       UNLOCK [noun] {[WITH] [noun]} 
  5282.       EXAMINE | CHECK | INSPECT | LOOK AT | LOOK IN [noun] 
  5283.          (* synonym is "." or "EX" *) 
  5284.       READ [noun] 
  5285.       EAT [noun] 
  5286.       DRINK [noun] 
  5287.       PUT | PLACE [noun] 
  5288.          [IN | WITH | INSIDE | INTO | NEAR | BEHIND | BESIDE |
  5289.           ON | UNDER] [noun] 
  5290.       PUSH | TOUCH [noun] {[WITH] [noun]}
  5291.       TURN [noun] {ON | OFF} 
  5292.       TURN {ON | OFF} [noun] 
  5293.       PULL [noun]
  5294.       PLAY {WITH} [noun]
  5295.       LIGHT [noun] 
  5296.       EXTINGUISH | PUT OUT [noun]  (* synonym is "EXT" *) 
  5297.       SHOOT | FIRE [noun] [AT] [creature] 
  5298.       SHOOT | FIRE [creature] [WITH] [noun] 
  5299.       PUT ON | WEAR [noun | ALL] 
  5300.  
  5301.                                       77
  5302.  
  5303.       TAKE OFF | REMOVE [noun | ALL] 
  5304.       ASK [creature] [ABOUT] [noun] 
  5305.       TALK [TO | WITH] [creature] {[ABOUT] [noun]}
  5306.       TELL [creature] [ABOUT] [noun] 
  5307.  
  5308.  
  5309.  
  5310.  
  5311.  
  5312.  
  5313.  
  5314.  
  5315.  
  5316.  
  5317.  
  5318.  
  5319.  
  5320.  
  5321.  
  5322.  
  5323.  
  5324.  
  5325.  
  5326.  
  5327.  
  5328.  
  5329.  
  5330.  
  5331.  
  5332.  
  5333.  
  5334.  
  5335.  
  5336.  
  5337.  
  5338.  
  5339.  
  5340.  
  5341.  
  5342.  
  5343.  
  5344.  
  5345.  
  5346.  
  5347.  
  5348.  
  5349.  
  5350.  
  5351.  
  5352.  
  5353.  
  5354.  
  5355.  
  5356.  
  5357.  
  5358.  
  5359.  
  5360.  
  5361.  
  5362.                                       78
  5363.  
  5364.  APPENDIX B:  META-COMMANDS CONDITIONAL TESTS 
  5365.  
  5366.   
  5367.  ***********************   PLAYER CONDITIONS  ****************************** 
  5368.                       Number/Types 
  5369.  TOKEN NAME           Of Parameters              Explanation 
  5370.  ==================== ============= ========================================= 
  5371.  AtLocation           1 Location#   Player is located at room Location# 
  5372.  AtLocationGT         1 Location#   Player is in room greater than Location# 
  5373.  AtLocationLT         1 location#   Player is in room less than Location# 
  5374.  FirstVisitToRoom     0   None      First visit to current room
  5375.  IsCarryingSomething  0   None      Player is carrying something 
  5376.  IsCarryingNothing    0   None      Player is carrying nothing 
  5377.  IsCarryingTreasure   1 Points#     Player is carrying at least one item 
  5378.                                     that is worth at least Points# 
  5379.  IsWearingSomething   0   None      Player is wearing something 
  5380.  IsWearingNothing     0   None      Player is wearing nothing 
  5381.  LoadWeightEquals     1 Number      Player's load weighs equals Number 
  5382.  LoadWeightGT         1 Number      Player's load weighs more than Number 
  5383.  LoadWeightLT         1 Number      Player's load weighs less than Number 
  5384.  NewLife              0   None      Player has just been resurrected or 
  5385.                                     start of game 
  5386.   
  5387.  ***********************   ITEM(S) CONDITIONS   ***************************** 
  5388.                       Number/Types 
  5389.  TOKEN NAME           Of Parameters              Explanation 
  5390.  ==================== ============= ========================================= 
  5391.  Present              1 Item#       Item# is in room, carried or worn 
  5392.  IsWearing            1 Item#       Item# is being worn 
  5393.  IsCarrying           1 Item#       Item# is being carried 
  5394.  IsNowhere            1 Item#       Item# is located NOWHERE (room 0) 
  5395.  IsSomewhere          1 Item#       Item# is located somewhere (not in 0) 
  5396.  InRoom               1 Item#       Item# is located in current room 
  5397.  IsLocated            2 Item# Loc#  Item# is located in room Location# 
  5398.  Together             2 Itm1# Itm2# Itm1# and Itm2# are in same place 
  5399.  IsON                 1 Item#       Item# is ON 
  5400.  IsOFF                1 Item#       Item# is OFF 
  5401.  IsOpen               1 Item#       Item# is Open 
  5402.  IsClosed             1 Item#       Item# is Closed 
  5403.  IsLocked             1 Item#       Item# is Locked 
  5404.  IsUnLocked           1 Item#       Item# is UnLocked 
  5405.  IsEdible             1 Item#       Item# is Edible 
  5406.  IsDrinkable          1 Item#       Item# is Drinkable 
  5407.  IsPoisonous          1 Item#       Item# is Poisonous 
  5408.  IsMovable            1 Item#       Item# is Movable 
  5409.  IsGroupMember        1 Item#       Item# is a member of the group
  5410.  
  5411.  
  5412.  
  5413.  
  5414.  
  5415.  
  5416.  
  5417.  
  5418.  
  5419.  
  5420.  
  5421.  
  5422.  
  5423.                                       79
  5424.  
  5425.  ************************   NOUN CONDITIONS   ******************************* 
  5426.                       Number/Types 
  5427.  TOKEN NAME           Of Parameters              Explanation 
  5428.  ==================== ============= ========================================= 
  5429.  NOUNPresent          0   None      NOUN is in room, carried or worn 
  5430.  NOUNIsWearing        0   None      NOUN is being worn 
  5431.  NOUNIsCarrying       0   None      NOUN is being carried 
  5432.  NOUNIsNowhere        0   None      NOUN is located NOWHERE (room 0) 
  5433.  NOUNIsSomewhere      0   None      NOUN is located somewhere (not in room 0) 
  5434.  NOUNInRoom           0   None      NOUN is located in current room 
  5435.  NOUNIsLocated        1 Location#   NOUN is located in room Location# 
  5436.  NOUNIsON             0   None      NOUN is ON 
  5437.  NOUNIsOFF            0   None      NOUN is OFF 
  5438.  NOUNIsOpen           0   None      NOUN is Open 
  5439.  NOUNIsClosed         0   None      NOUN is Closed 
  5440.  NOUNIsLocked         0   None      NOUN is Locked 
  5441.  NOUNIsUnLocked       0   None      NOUN is UnLocked 
  5442.  NOUNIsEdible         0   None      NOUN is Edible 
  5443.  NOUNIsDrinkable      0   None      NOUN is Drinkable 
  5444.  NOUNIsPoisonous      0   None      NOUN is Poisonous 
  5445.  NOUNIsMovable        0   None      NOUN is Movable 
  5446.  NOUNpointsEquals     1 Number      NOUN's points equal Number 
  5447.  NOUNpointsGT         1 Number      NOUN's points are greater than Number 
  5448.  NOUNpointsLT         1 Number      NOUN's points are less than Number 
  5449.  NOUNweightEquals     1 Number      NOUN's weight equals Number 
  5450.  NOUNweightGT         1 Number      NOUN's weight is greater than Number 
  5451.  NOUNweightLT         1 Number      NOUN's weight is less than Number 
  5452.  
  5453.  
  5454.  
  5455.  
  5456.  
  5457.  
  5458.  
  5459.  
  5460.  
  5461.  
  5462.  
  5463.  
  5464.  
  5465.  
  5466.  
  5467.  
  5468.  
  5469.  
  5470.  
  5471.  
  5472.  
  5473.  
  5474.  
  5475.  
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.  
  5483.  
  5484.                                       80
  5485.  
  5486.   
  5487.  ********************   MISCELLANEOUS CONDITIONS   ************************** 
  5488.                       Number/Types 
  5489.  TOKEN NAME           Of Parameters              Explanation 
  5490.  ==================== ============= ========================================= 
  5491.  NamePresent          0   None      Addressee is present in current room  
  5492.  NameIsNumber         1 Number      Addressee is Creature or Noun number  
  5493.  LightPresent         0   None      Current room has necessary light 
  5494.  RoomNeedsLight       0   None      Current room needs a light 
  5495.  FlagON               1 Flag#       Flag# is ON 
  5496.  FlagOFF              1 Flag#       Flag# is OFF 
  5497.  ScoreEquals          1 Number      Current score is equal to Number 
  5498.  ScoreGT              1 Number      Score is greater than Number 
  5499.  ScoreLT              1 Number      Score is less than Number 
  5500.  NumberEquals         1 Number      Number input is equal to Number 
  5501.  NumberGT             1 Number      Number is greater than Number 
  5502.  NumberLT             1 Number      Number is less than Number 
  5503.  AnswerIsCorrect      0   None      Last answer was correct 
  5504.  AnswerIsWrong        0   None      Last answer was wrong 
  5505.  TurnsEquals          1 Number      Number of turns is equal to Number 
  5506.  TurnsGT              1 Number      Number of turns is greater than Number 
  5507.  TurnsLT              1 Number      Number of turns is less than Number 
  5508.  CounterEquals        2 Ctr# Number Counter# is equal to Number 
  5509.  CounterGT            2 Ctr# Number Counter# is greater than Number 
  5510.  CounterLT            2 Ctr# Number Counter# is less than Number 
  5511.  VariableEquals       2 Var# Number Variable# is equal to Number 
  5512.  VariableGT           2 Var# Number Variable# is greater than Number 
  5513.  VariableLT           2 Var# Number Variable# is less than Number 
  5514.  CompareVariables     2 Var#1 Var#2 Variable#1 is less than Variable#2 
  5515.  VariableChance       2 Var# Number Variable# is less than a random number
  5516.                                     from 1 to Number 
  5517.  Chance               1 Percent     Odds percent, i.e., 10 % chance of TRUE 
  5518.  PromptForYES         0   None      Prompts for Y or N -- TRUE if Yes 
  5519.  PromptForNO          0   None      Prompts for Y or N -- TRUE if No 
  5520.  VerbIsDirection      0   None      Verb is movement or direction 
  5521.  
  5522.  
  5523.  
  5524.  
  5525.  
  5526.  
  5527.  
  5528.  
  5529.  
  5530.  
  5531.  
  5532.  
  5533.  
  5534.  
  5535.  
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.  
  5542.  
  5543.  
  5544.  
  5545.                                       81
  5546.  
  5547.  
  5548.  APPENDIX C:  META-COMMANDS ACTION TOKENS 
  5549.  
  5550.   
  5551.  ********************** PLAYER ACTION TOKENS ******************************** 
  5552.                       Number/Types 
  5553.  TOKEN NAME           Of Parameters              Explanation 
  5554.  ==================== ============= ========================================= 
  5555.  GoToRoom             1 Location#   Send player to Location# 
  5556.  GoToRandomRoom       2 Loc#1 Loc#2 Randomly pick a room between Loc#1 and
  5557.                                     Loc#2 and send player to it
  5558.  GetIt                1 Item#       Item# is now being carried 
  5559.  WearIt               1 Item#       Item# is now being worn 
  5560.  DropIt               1 Item#       Drop Item# into current room 
  5561.  RemoveIt             1 Item#       Remove Item# and drop into room 
  5562.  GetNOUN              0   None      NOUN is now being carried 
  5563.  WearNOUN             0   None      NOUN is now being worn 
  5564.  DropNOUN             0   None      Drop NOUN into current room 
  5565.  RemoveNOUN           0   None      Remove NOUN and drop into room 
  5566.  DropEverything       0   None      Drop all items being carried 
  5567.  RemoveEverything     0   None      Remove all items being worn 
  5568.  KillPlayer           0   None      Make player dead at end of turn 
  5569.  
  5570.   
  5571.  ******************* ITEM/NOUN/LOCATION ACTION TOKENS *********************** 
  5572.                       Number/Types 
  5573.  TOKEN NAME           Of Parameters              Explanation 
  5574.  ==================== ============= ========================================= 
  5575.  PutInCurrentRoom     1 Item#       Put Item# in current room 
  5576.  PutNOUNInCurrentRoom 0   None      Put NOUN in current room 
  5577.  SendToRoom           2 Item# Loc#  Put Item# in room Location# 
  5578.  SendNOUNToRoom       1 Location#   Put NOUN in room Location# 
  5579.  SendAllToRoom        1 Location#   Send all carried items to Location# 
  5580.  SendTreasuresToRoom  2 Loc# Point# Send all carried items whose 
  5581.                                     points > Point# to Loc# 
  5582.  Destroy              1 Item#       Item# is now NOWHERE (in room 0) 
  5583.  DestroyNOUN          0   None      NOUN is now NOWHERE (in room 0) 
  5584.  SwapLocations        2 Itm#1 Itm#2 Swap locations of Item#1 & Item#2 
  5585.  SendToItem           2 Itm#1 Itm#2 Put Itm#1 in location of Itm#2 
  5586.  SendNOUNToItem       1 Item#       Put NOUN in location of Item# 
  5587.  OpenIt               1 Item#       Item# is now open 
  5588.  CloseIt              1 Item#       Item# is now closed 
  5589.  LockIt               1 Item#       Item# is now locked 
  5590.  UnlockIt             1 Item#       Item# is now unlocked 
  5591.  OpenNOUN             0   None      NOUN is now open 
  5592.  CloseNOUN            0   None      NOUN is now closed 
  5593.  LockNOUN             0   None      NOUN is now locked 
  5594.  UnlockNOUN           0   None      NOUN is now unlocked 
  5595.  AddToGroup           1 Item#       Adds Item# to group 
  5596.  RemoveFromGroup      1 Item#       Removes Item# from group 
  5597.  MoveGroup            1 Location#   Move group to Location# 
  5598.  
  5599.  
  5600.  
  5601.  
  5602.  
  5603.  
  5604.  
  5605.  
  5606.                                       82
  5607.  
  5608.  ******************* MISCELLANEOUS ACTION TOKENS **************************** 
  5609.                       Number/Types 
  5610.  TOKEN NAME           Of Parameters              Explanation 
  5611.  ==================== ============= ========================================= 
  5612.  ShowScore            0   None      Show current SCORE 
  5613.  PlusScore            1 Number      Add Number to current SCORE 
  5614.  MinusScore           1 Number      Subtract Number from current SCORE 
  5615.  ShowInventory        0   None      Show current INVENTORY 
  5616.  WaitForReturn        0   None      Print 'Hit RETURN' message and wait 
  5617.  TimePasses           0   None      Show 'Time passes...' message 
  5618.  Delay                1 Number      Delay for Number seconds 
  5619.  ClearScreen          0   None      Clear screen 
  5620.  DescribeThing        1 Number      Describe thing Number (whatever) 
  5621.  LookAtRoom           0   None      Cause a VERBOSE look at room 
  5622.  Tone                 2 Hz Ms       Makes a tone on speaker of Hz Hertz (440
  5623.                                     Hertz = A on piano) for Ms milliseconds
  5624.  PrintMessage         1 Number      Print message Number in .MSG file 
  5625.  RandomMessage        2 Num1 Num2   Randomly picks a message from Num1 to
  5626.                                     Num2 in .MSG file and prints it
  5627.  BlankLine            0   None      Print a blank line 
  5628.  GetNumberInput       2 Num1 Num2   Prompt for player to input a Number 
  5629.                                     where Num1 <= Number <= Num2.
  5630.                                     If Num1=Num2, then no range will be 
  5631.                                     given in prompt.
  5632.  AskQuestion          1 Question#   Ask and get answer to question# 
  5633.  ChangePassageway     2 Dir# Loc#   Create or close a passageway 
  5634.                                     from current_room to Loc# via Dir#.
  5635.                                     Dir# = 1 = north ...  Dir # = 12 = exit.
  5636.                                     If Loc# = 0 then closes passageway.
  5637.                                     If Loc# <> 0 then opens passageway 
  5638.                                     to room Loc# via direction Dir#.
  5639.                                     Passageways are opened or closed at 
  5640.                                     both ends simultaneously! 
  5641.  TurnFlagON           1 Flag#       Turn Flag# ON 
  5642.  TurnFlagOFF          1 Flag#       Turn Flag# OFF 
  5643.  ToggleFlag           1 Flag#       Toggle Flag# 
  5644.  TurnCounterON        1 Counter#    Turn Counter# ON -- sets to 1 
  5645.  TurnCounterOFF       1 Counter#    Turn Counter# OFF -- sets to 0 
  5646.  SetVariableTo        2 Var# Number Set Variable Var# to Number 
  5647.  AddToVariable        2 Var# Number Add Number to Var#
  5648.  SubtractFromVariable 2 Var# Number Subtract Number from Var# 
  5649.  AddVariables         2 Var#1 Var#2 Add Var#2 and Var#1 and put answer 
  5650.                                     into Var#1
  5651.  SubtractVariables    2 Var#1 Var#2 Subtract Var#2 from Var#1 and put answer
  5652.                                     into Var#1
  5653.  RandomVariable       2 Var# Number Set Var# to a random value between 1 and
  5654.                                     Number
  5655.  NounToVariable       1 Var#        Set Var# to value of noun
  5656.  ObjectToVariable     1 Var#        Set Var# to value of object
  5657.  WinGame              0   None      Player wins game at end of turn 
  5658.  EndGame              0   None      Game ends at end of turn 
  5659.  QuitThisCMD          0   None      Quit evaluating this CMD 
  5660.  QuitAllCMDs          0   None      Finished with all meta-commands 
  5661.  DoneWithTurn         0   None      All Done this turn -- get input next 
  5662.  ReDirectTo           0   None      See explanation in manual.
  5663.  
  5664.  
  5665.  
  5666.  
  5667.                                       83
  5668.  
  5669.  
  5670.  APPENDIX D:  AGT ERROR MESSAGES 
  5671.  
  5672.  
  5673.  ERRORS DURING GAME COMPILATION 
  5674.  ------------------------------ 
  5675.  Error: "VERB is not a valid verb" -- VERB is not a standard AGT verb,  nor has
  5676.  it been defined (so far) as a synonym for another verb.  This error is in the
  5677.  *.DAT file.
  5678.   
  5679.  Error: ">>> Ignored: ASCII text" -- ASCII text encountered during reading of 
  5680.  *.DAT file.  Text does not correspond to anything normally expected in  this
  5681.  file.  Probably, just a comment by the game designer.
  5682.   
  5683.  Error: "FOR COMMAND VERB NOUN OBJECT -- MAXIMUM DATA SIZE" -- This 
  5684.  meta-command is too big.  i.e., too many conditions and actions.  Break into
  5685.  two separate commands for VERB NOUN OBJECT.  One COMMAND right after the
  5686.  other.  This is a game designer error.
  5687.   
  5688.  Error: "Too many commands -- Processing halted" -- AGT only allows 400
  5689.  meta-commands.  The current meta-command being read from the  *.CMD file would
  5690.  have been number 401.  This is a game designer error.
  5691.   
  5692.  Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL VERB" -- This meta-command 
  5693.  has a VERB which the parser does not recognize as a standard AGT verb, a
  5694.  custom verb or a synonym for a valid verb.  This is a game designer error.
  5695.   
  5696.  Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL NOUN or OBJECT" -- This 
  5697.  meta-command has a NOUN or OBJECT which the parser does not recognize as a
  5698.  standard AGT noun or a synonym for a valid noun.  This is a game designer
  5699.  error.
  5700.   
  5701.  Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL TOKEN" -- This meta-command
  5702.  has something in it that the program does not recognize as a token.  Probably,
  5703.  a game designer comment or a spelling mistake.
  5704.   
  5705.   
  5706.  ERRORS DURING RESTORING GAME 
  5707.  ------------------------- 
  5708.  Error: "File not found, can't restore FileName" -- FileName is not on disk.
  5709.   
  5710.   
  5711.  ERRORS DURING GAME PLAY 
  5712.  ----------------------- 
  5713.  Error: "I don't understand VERB as a verb." -- Try another VERB.  Probably a
  5714.  spelling mistake.
  5715.   
  5716.  Error: "I don't understand NOUN as a noun." -- Try another word to identify
  5717.  this noun.  May be a noun that does not really play a significant part in the
  5718.  game, i.e., something described in general in the room description, but not a
  5719.  separate object in the room.  May also be a spelling mistake.
  5720.   
  5721.  Error: "I don't understand PREP as a preposition." -- Try another preposition. 
  5722.  May be a spelling mistake.
  5723.   
  5724.  Error: "I don't understand OBJECT as the object of a preposition." -- Try
  5725.  another word to identify this noun.  May be a noun that does not really play a
  5726.  significant part in the game, i.e., something described in general in the room
  5727.  
  5728.                                       84
  5729.  
  5730.  description, but not a separate object in the room.  May also be a spelling
  5731.  mistake.
  5732.   
  5733.  Error: "Which NOUN do you mean, the ADJ1 NOUN or the ADJ2 NOUN?" -- Two or
  5734.  more nouns with the same name are present in the current room.  Specify the
  5735.  one you mean by some phrase that includes the appropriate NOUN's adjective.
  5736.  
  5737.  Error :"I don't understand WORD as either a verb or a noun".  Try another word
  5738.  to convey what you mean.  May be a spelling mistake.
  5739.  
  5740.  Error: "You need a preposition and an object whenever you try to VERB a NOUN." 
  5741.  Some verbs require prepositions and objects in order to work properly.  For
  5742.  example, PLACE BOOK ON THE TABLE is fine, but PLACE BOOK by itself will
  5743.  generate this error.
  5744.  
  5745.  Error: "Too many words in command".  AGT allows for a maximum of 12 words in
  5746.  each part of a compound command (i.e., between AND's and THEN's).  Re-phrase
  5747.  your command to be more succinct.
  5748.  
  5749.  
  5750.  
  5751.  
  5752.  
  5753.  
  5754.  
  5755.  
  5756.  
  5757.  
  5758.  
  5759.  
  5760.  
  5761.  
  5762.  
  5763.  
  5764.  
  5765.  
  5766.  
  5767.  
  5768.  
  5769.  
  5770.  
  5771.  
  5772.  
  5773.  
  5774.  
  5775.  
  5776.  
  5777.  
  5778.  
  5779.  
  5780.  
  5781.  
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.                                       85
  5790.  
  5791.   
  5792.  APPENDIX E: VALUE RANGES FOR GAME DEFINITIONS
  5793.  
  5794.  
  5795.  The following are the valid ranges of numbers for nouns, rooms, and creatures. 
  5796.  DO NOT assign improper numbers to any category, or you will experience
  5797.  unpredictable (but consistently erroneous) results.
  5798.   
  5799.          Player Carrying:   1 
  5800.          Player Wearing: 1000 
  5801.          ROOMS:             2     to      199 
  5802.          NOUNS:           200     to      299 
  5803.          CREATURES:       300     to      399 
  5804.   
  5805.  In addition, if the game designer is also using meta-commands, then the
  5806.  following valid ranges are appropriate: 
  5807.  
  5808.          FLAGS              1     to      255 
  5809.          COUNTERS           1     to        9 
  5810.          VARIABLES          1     to        9 
  5811.          QUESTIONS          1     to        9 
  5812.          MESSAGES           1     to      250 
  5813.          META-COMMANDS      1     to      400 
  5814.   
  5815.  
  5816.  
  5817.  
  5818.  
  5819.  
  5820.  
  5821.  
  5822.  
  5823.  
  5824.  
  5825.  
  5826.  
  5827.  
  5828.  
  5829.  
  5830.  
  5831.  
  5832.  
  5833.  
  5834.  
  5835.  
  5836.  
  5837.  
  5838.  
  5839.  
  5840.  
  5841.  
  5842.  
  5843.  
  5844.  
  5845.  
  5846.  
  5847.  
  5848.  
  5849.  
  5850.                                       86
  5851.  
  5852.  
  5853.  APPENDIX F: ABOUT THE AUTHORS 
  5854.  
  5855.  
  5856.  Mark J. Welch is a 1983 graduate of the University of Massachusetts at Amherst
  5857.  [journalism/interdisciplinary (computer science)].  He worked as an editor,
  5858.  writer, and reporter for BYTE and InfoWorld until August 1986, when he began
  5859.  studies at the Boalt Hall School of Law of the University of California in
  5860.  Berkeley.  He is co-author of a syndicated column of computer reviews for
  5861.  lawyers, published weekly in legal newspapers across the nation.  He also
  5862.  continues to write reviews and other articles for several publications.
  5863.  
  5864.  In addition to games of all types, he is interested in law, programming
  5865.  languages, politics, applications software, and technology in general.  He is
  5866.  just skilled enough at darts and juggling to embarrass (and possibly injure)
  5867.  himself and those nearby.
  5868.  
  5869.  
  5870.  David Malmberg has been active in the world of personal computer since 1977. 
  5871.  He is the author or co-author of five published software products.
  5872.   
  5873.  His most successful products were the Turtle Graphics series published by
  5874.  HESware.  These two programs have sold over 80,000 copies world-wide, been
  5875.  translated into Spanish, and won two Consumer Electronic Software Showcase
  5876.  awards as some of the best software of 1983.  These programs are widely used
  5877.  in schools to teach computer literacy to children and other computer novices.
  5878.   
  5879.  Dave has also published numerous articles and programs in a computer
  5880.  magazines.  He has been a Contributing Editor of both COMPUTE!'s HOME &
  5881.  EDUCATIONAL COMPUTING and MICRO magazines.  He was one of the principal
  5882.  authors of COMPUTE!'s FIRST BOOK OF VIC, the best selling computer book of
  5883.  1983.  He has written regular columns on educational uses of computers and on
  5884.  LOGO for COMMODORE and POWER/PLAY magazines.
  5885.   
  5886.  
  5887.  
  5888.  
  5889.  
  5890.  
  5891.  
  5892.  
  5893.  
  5894.  
  5895.  
  5896.  
  5897.  
  5898.  
  5899.  
  5900.  
  5901.  
  5902.  
  5903.  
  5904.  
  5905.  
  5906.  
  5907.  
  5908.  
  5909.  
  5910.  
  5911.                                       87
  5912.