home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Windows Spiele / SOS-WIN_SPIELE.ISO / programm / adventur / wagt / agt_doc.txt next >
Text File  |  1993-05-02  |  314KB  |  6,745 lines

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