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