home *** CD-ROM | disk | FTP | other *** search
/ Fatal Distractions! / fataldistractions.bin / appndxa / masters / mast-doc.pt3 < prev    next >
Text File  |  1993-06-13  |  94KB  |  2,380 lines

  1.  
  2.  
  3.  
  4.  
  5.         PICTURE [Picture of Small Building]
  6.         PIX [Sky pix] [Tree pix]
  7.         END_ROOM
  8.  
  9.    By adding the [Sky pix] and [Tree pix] labels to the PIX line for the
  10.    room, we will cause the SKY and the TREE to be displayed as pictures
  11.    whenever the player is in this room -- if the player gives the proper
  12.    VIEW command.
  13.  
  14.  
  15.    META-COMMANDS AND PICTURES
  16.  
  17.    Most pictures or animations will be seen when the player gives a command
  18.    to VIEW something. However, there will be times in the game when the
  19.    game designer will want to initiate the display a picture or animation. 
  20.    For example, when the player wins the game (or loses) you may want to
  21.    display as special picture to mark the occasion.  These occasions will
  22.    be handled by using meta-commands to display the pictures or animations.
  23.  
  24.    The game designer initiates these picture displays by using the
  25.    ShowPicture or IfYShowPicture meta-command tokens.  The following are
  26.    two examples of how pictures might be shown by using meta-commands:
  27.  
  28.         #COMMENT ------- random "cameo" appearances in cave
  29.  
  30.         COMMAND ANY
  31.         Chance 3
  32.         AtLocationGT [hall of mists]
  33.         AtLocationLT [cylindrical chamber] ;most of cave area
  34.         FlagOFF [Dwarf here]
  35.         PrintMessage [IRS men appear]
  36.         WaitForReturn ; Show picture when player hits RETURN
  37.         ShowPicture [Picture of IRS men]
  38.         PrintMessage [IRS men disappear]
  39.         END_MESSAGE
  40.  
  41.         MESSAGE [IRS men appear]
  42.         Seven men, wearing gray business suits and carrying briefcases,
  43.         suddenly appear out of the shadows and surround you.  They identify
  44.         themselves as representatives of the Internal Revenue Service! 
  45.         With absolutely no show of emotion, they report: "We understand
  46.         that you have been accumulating some un-declared income.  We wish
  47.         to warn you that we are watching you closely as you play this game,
  48.         and all of this income must be properly and totally accounted for
  49.         on your next tax return.  If it isn't, you will go to jail or
  50.         worse!"
  51.         END_MESSAGE
  52.  
  53.         MESSAGE [IRS men disappear]
  54.         They then disappear in a >POOF< of red, white and blue smoke.
  55.         END_MESSAGE
  56.  
  57.  
  58.                                      132
  59.  
  60.  
  61.  
  62.  
  63.         COMMAND ANY
  64.         Chance 3
  65.         AtLocationGT [hall of mists]
  66.         AtLocationLT [cylindrical chamber] ;most of cave area
  67.         FlagOFF [Dwarf here]
  68.         PrintMessage [Mining Robot appears]
  69.         IfYShowPicture [Picture of Mining Robot] ; Asks if player wants to
  70.         ; see picture -- and display it only if player responds with a YES
  71.         PrintMessage [Mining Robot disappears]
  72.         END_MESSAGE
  73.  
  74.         MESSAGE [Mining Robot appears]
  75.         From somewhere nearby, there suddenly comes a sound of something 
  76.         mechanical in motion.  As you turn toward it, an incredible figure
  77.         rolls into the light of your lamp.  It stands about five feet high
  78.         on a wheeled metal pedestal, and has a globular light-filled head, 
  79.              accordion-pleated metal arms, and a cylindrical body the size
  80.         of an oil drum with a plastic panel on the front. It rolls past
  81.         without taking any notice of you, all the while waving its arms,
  82.         flashing a light behind its front panel and bellowing "WARNING!
  83.         WARNING! DANGER!" at the top of its not inconsiderable voice.
  84.         END_MESSAGE
  85.  
  86.         MESSAGE [Mining Robot disappears]
  87.         It rolls on out of sight, and moments later there is an immense
  88.         flash of light and a tremendous blast of sparks and smoke.  When
  89.         the air clears, you find that no trace remains of the strange
  90.         apparition.
  91.         END_MESSAGE
  92.  
  93.    Remember -- these pictures or animations will be displayed until a key
  94.    is pressed and then the display will return to the normal AGT text-based
  95.    screen -- ready for the next game command from the player.
  96.  
  97.    IMPORTANT NOTE:  Both of the meta-command picture examples above assume
  98.    that the picture being referenced is one of the up-to-250 pictures or
  99.    animations defined in the PICTURE list -- i.e., [Picture of IRS men] and
  100.    [Picture of Mining Robot] were both defined by something similar to:
  101.  
  102.         PICTURES
  103.         [Intro Picture] INTRO
  104.         [First Jungle Scene] JUNGLE1
  105.           ...
  106.         [Picture of IRS men] IRSGUYS
  107.         [Picture of Mining Robot] M-ROBOT
  108.           . . .
  109.         [Victory Picture] VICTORY
  110.         END_PICTURES
  111.  
  112.    If [Picture of IRS men] and [Picture of Mining Robot] were defines as
  113.    some of the up-to-30 ROOM_PIX, you would have to use different meta-
  114.    command tokens. Specifically, rather than ...
  115.  
  116.                                      133
  117.  
  118.  
  119.  
  120.  
  121.         ShowPicture [Picture of IRS men]
  122.    and
  123.         IfYShowPicture [Picture of Mining Robot]
  124.  
  125.    you would have to use:
  126.  
  127.         ShowROOM_PIX [Picture of IRS men]
  128.  
  129.    and
  130.  
  131.         IfYShowROOM_PIX [Picture of Mining Robot]
  132.  
  133.    Obviously, if the proper picture/animation can not be found on the disk
  134.    and/or the player's screen is not capable of displaying the resolution
  135.    of the picture or animation, then these meta-command tokens will have no
  136.    effect.
  137.  
  138.    Another meta-command token that you will find useful is: 
  139.  
  140.         Room_PixHere [Tree pix]
  141.  
  142.    which will check if the [Tree pix] picture may be viewed in the current
  143.    room.
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.                                      134
  175.  
  176.  
  177.  
  178.  
  179.    PART 7:  OPTIONAL MUSIC AND SOUND EFFECTS
  180.  
  181.  
  182.    The Master's Edition allows you to play music or have other sound
  183.    effects (like a telephone ringing) in the background of your AGT
  184.    Adventure game.  In the background means that once you start the sound
  185.    effect or music playing, you can continue on with the rest of your game
  186.    and the sound or music keeps playing without any additional effort on
  187.    your part until the song or sound is finished.  You can use this to
  188.    provide special sound effects in your games or just to add a cute
  189.    indication that your program is still doing something -- even when it is
  190.    reacting to or waiting for the player's various commands.  You can turn
  191.    songs on and off using meta-commands and change the music to fit the
  192.    mood of the current game situation -- e.g., eerie, spooky music for
  193.    exploring a haunted house, or calliope music for an adventure set at a
  194.    circus.
  195.  
  196.    The Master's Edition can use (1) music files from Neil Rubenking's
  197.    PianoMan program version 4.0, or (2) music and sound effects that are in
  198.    the form required by BASIC's PLAY statements or (3) you can create your
  199.    own sound effects using a Turbo Pascal source program (provided as part
  200.    of the Master's Edition "package").  All of AGT's sound effect or music
  201.    files must have a .MUC file extension.  You can have up to 50 .MUC files
  202.    for each AGT game.
  203.  
  204.    In addition, Version 1.5 of the Master's Edition can use SoundBlaster
  205.    and Adlib compatible sound/music files.  Just how, will be described a
  206.    little later in the manual.
  207.  
  208.  
  209.    SOUND CONVERSION UTILITIES
  210.  
  211.    To help convert to AGT-useable sound/music files, several conversion
  212.    programs are provided as part of The Master's Edition package. 
  213.    CNVT_MUZ.EXE will convert any PianoMan 4.0 (.MUZ) file into an AGT .MUC
  214.    file.  CONVT_PLY.EXE will convert any BASIC PLAY music strings (in ASCII
  215.    or text) into an AGT .MUC file. See a couple of the .PLY files for
  216.    examples of the format CNVT_PLY is expecting.
  217.  
  218.    To create sound effects like water dripping or telephones ringing, you
  219.    should use the AGTSOUND.EXE program.  The Turbo Pascal source code to
  220.    this program (AGTSOUND.PAS) is also provided so you can create
  221.    customized sounds.
  222.  
  223.    Each of these conversion/creation programs produces a .MUC file that AGT
  224.    can play/sound in the background.
  225.  
  226.    These MUC. files use the IBM PC's built-in speaker.  No special sound
  227.    board is required.
  228.  
  229.    Blatant Plug:  Neil's PianoMan is an excellent shareware product and is
  230.    available from many bulletin boards on in the IBM Software forum on
  231.  
  232.                                      135
  233.  
  234.  
  235.  
  236.  
  237.    Compuserve.  It allows you to play your computer's keyboard like a piano
  238.    keyboard and record and edit music entered in real time or from sheet
  239.    music. There are also many files of songs already entered that you can
  240.    use.  One sample archive for instance contains over 50 sample songs.  
  241.    PianoMan is described in more detail in the section entitled RECOMMENDED
  242.    SHAREWARE UTILITIES.
  243.  
  244.  
  245.    ADLIB AND SOUNDBLASTER SUPPORT
  246.  
  247.    With version 1.5 of the Master's Edition, we have added the capability
  248.    to use AdLib or SoundBlaster (or compatible) sound cards -- if one is
  249.    available on the computer where the game is being played.  Using these
  250.    sound cards, your game can now have sounds ranging from a full symphony
  251.    to speech.  In addition to its own music/sound format .MUC files, the
  252.    Master's Edition can now play .CMF, .MID, or .VOC files.
  253.  
  254.  
  255.    USING SOUND AND MUSIC
  256.  
  257.    The song/sound files are indicated in your AGT source files by something
  258.    similar to the following:
  259.  
  260.         SOUNDS
  261.         [Intro Music] INTRO   <-- actual disk file must be named INTRO.MUC
  262.         [Jungle Drums] TOM-TOMS  <-- actual file must be named TOM-TOMS.MUC
  263.         [Death Dirge] DEATH  <-- actual file must be named DEATH.MUC
  264.           . . .
  265.         [Victory March] VICTORY  <-- actual file must be named VICTORY.MUC
  266.         END_SOUNDS
  267.  
  268.    There can be up to 50 song/sound files in each AGT game.
  269.  
  270.    Playing these songs and sound effects must be controlled via
  271.    meta-commands. The following examples demonstrate how these
  272.    meta-commands should be used:
  273.  
  274.         PlaySong [Jungle Drums]    <--     This plays the song/sound file
  275.                                            TOM-TOMS.MUC once.  The standard
  276.                                            mode is to play the song until
  277.                                            it is finished and then to stop.
  278.  
  279.         RepeatSong [Jungle Drums]  <--     This plays the song/sound file
  280.                                            TOM-TOMS.MUC repeatedly.  When
  281.                                            the song is finished it would
  282.                                            automatically be started again.
  283.  
  284.         EndRepeatSong              <--     This causes the current
  285.                                            song/sound to stop when it is
  286.                                            finished, i.e., the repeating
  287.                                            feature would be turned off.
  288.  
  289.  
  290.                                      136
  291.  
  292.  
  293.  
  294.  
  295.         PlayRandom {num1} {num2}   <--     This plays a random song/sound
  296.                                            file between num1 and num2 once. 
  297.                                            The song/sound will be played
  298.                                            until it is finished and then it
  299.                                            will stop.
  300.  
  301.         StopSong                   <--     This causes the current
  302.                                            song/sound to stop immediately. 
  303.                                            Once the StopSong command has
  304.                                            been given, the song can not be
  305.                                            resumed without giving a new
  306.                                            PlaySong or RepeatSong 
  307.                                            meta-command.  If you wish to
  308.                                            change songs/sounds before the
  309.                                            current sound/song is finished,
  310.                                            you must first use a StopSong
  311.                                            token before starting the new
  312.                                            sound/song with either a
  313.                                            StartSong or RepeatSong token.
  314.  
  315.         SuspendSong                <--     This causes the current
  316.                                            song/sound to stop immediately
  317.                                            -- but it can be resumed at the
  318.                                            current spot at a later time.
  319.  
  320.         ResumeSong                 <--     This resumes playing a song that
  321.                                            had been suspended by a
  322.                                            SuspendSong meta-command at the
  323.                                            spot where it had been
  324.                                            suspended.
  325.  
  326.         SongPlaying                <--     This is a conditional
  327.                                            meta-command and will return a
  328.                                            TRUE or FALSE depending upon
  329.                                            whether there is a song playing
  330.                                            at the current moment.
  331.  
  332.    There is a utility provided called AGT_PLAY.EXE which allows you to try
  333.    out your music and sound effects before you incorporate them into the
  334.    actual AGT game.  AGT_PLAY can be used to test/play .MUC, .CMF, .MID,
  335.    and .VOC music/sound files.  Try it to get a feel for what is possible.
  336.  
  337.  
  338.    IMPORTANT NOTE ABOUT SOUND AND MUSIC
  339.  
  340.    There are a couple of potential limitations about using .MUC sound that
  341.    you need to understand.  NOTE: The following limitations/discussion
  342.    do/does not apply to Adlib or SoundBlaster sound cards.
  343.  
  344.    First, sounds and/or songs within AGT are played in the background.  The
  345.    way in which this is done is to check and potentially change the sound
  346.    parameters every time the computer's internal clock "ticks" -- roughly
  347.  
  348.                                      137
  349.  
  350.  
  351.  
  352.  
  353.    18 times a second. The fact that AGT can only adjust the sound every
  354.    1/18th of a second means that some sounds can not be played successfully
  355.    -- specifically, it is impossible to play sounds that change very
  356.    quickly or have tones that last a very short time.  An obvious example
  357.    of this problem is music that has multiple voices where each voice gets
  358.    a very short period of time for its note before switching to the next
  359.    voice.  Good examples of this are some of the songs from PIANOMAN that
  360.    are written for four voice harmony.  These songs are almost impossible
  361.    for AGT to play successfully.  Other sounds that AGT will have problems
  362.    with are sound effects which are made up of a number tones of very short
  363.    duration -- such as some whistles, sirens, and like sounds.  The best
  364.    way to test whether a sound/song can be used in AGT is to play it using
  365.    PLAY_MUC.  If you try to play it with PLAY_MUC and it works, then it
  366.    will work in AGT.  Conversely, if it does not work (i.e., you get no
  367.    sound at all or it doesn't sound right), then it won't work correctly in
  368.    AGT.
  369.  
  370.    The second limitation will only apply to some computers, principally
  371.    older machines with "slow" hard disks.  Again, the clock "tick rate" of
  372.    once every 1/18th of a second may not allow you to make all of the
  373.    sound/song changes that a sound file may require when you are also
  374.    reading the descriptions off the disk at the same time.  Some computers
  375.    will complete a disk read (or write) and not interrupt the disk access
  376.    just because of a clock tick every 1/18th of a second.  If your disk is
  377.    one of these, the sounds may be distorted by slow downs while the disk
  378.    is being accessed.  The best solution to this problem is to put your
  379.    game (and all its associated files) on a ram disk.  If you don't have a
  380.    ram disk, you may wish to turn the SOUND OFF.
  381.  
  382.    The last limitation with AGT's sound/music capabilities is that the
  383.    number of separate notes is limited to about 5000.  The best way to
  384.    check if a particular song or sound has less than 5000 notes is to use
  385.    the program PLAY_MUC and check the size of the file.  IF PLAY_MUC shows
  386.    the song/sound files is 5000 bytes or less, then you should not have any
  387.    problems in getting it to work properly within an AGT game.
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.                                      138
  407.  
  408.  
  409.  
  410.  
  411.    PART 8:  OTHER NEW FEATURES UNIQUE TO MASTER'S EDITION
  412.  
  413.  
  414.    CUSTOMIZEABLE "DEFAULT" MESSAGES
  415.  
  416.    At long last, you can "die" in some other fashion than disappearing in a
  417.    cloud of orange smoke.  All (well -- almost all) of the messages in the
  418.    Master's Edition can be customized by the game designer.
  419.  
  420.    The Master's Edition of AGT gets its standard "default" messages by
  421.    reading a file of such standard messages.  These files will have a .STD
  422.    extension.  When the Master's Edition MCOMPILE program is started it
  423.    will first look for a .STD file for the specific game being played,
  424.    i.e., GAMENAME.STD.  If that file is not found on the current directory,
  425.    MCOMPILE will look for the "default" .STD file which is AGT.STD.  If
  426.    AGT.STD is also not on the current directory, MRUN will quit with an
  427.    error message.
  428.  
  429.    The Master's Edition package has two .STD file for you to play with: 
  430.    AGT.STD and IRUN.STD.  AGT.STD is the "standard" set of AGT messages
  431.    that use to be "hard-coded" into the MRUN program.  IRUN.STD is a set of
  432.    messages that change the player's perspective to the "first-person" from
  433.    the normal perspective of "third-person," i.e., all of the messages are
  434.    changed to use "I" rather than "You" -- such as, "I shoot the gun at the
  435.    bandit."  IRUN.STD is the set of messages that Pat Farley developed for
  436.    CRIME TO THE 9TH POWER, the first place winning game in the 1990 AGT
  437.    adventure game writing contest.
  438.  
  439.    There must be exactly 185 standard messages numbered STANDARD 1 to
  440.    STANDARD 185 in a .STD file (either GAMENAME.STD, AGT.STD or IRUN.STD). 
  441.    You may edit these messages as you see fit.  However, you must keep them
  442.    in the same order and you must keep their meaning consistent with the
  443.    current meaning.  For example, below is STANDARD 38 which is the
  444.    standard message that will be printed whenever the player tries to WEAR
  445.    something that weights over 100 pounds:
  446.  
  447.         STANDARD 38 
  448.         It's too heavy!  You aren't strong enough to carry or wear the
  449.         $noun$!
  450.         END_STANDARD
  451.  
  452.    You can feel free to change this message in any way you wish -- but,
  453.    however you change STANDARD 38 -- it will still be printed if and only
  454.    if the player tries to WEAR a noun weighing over 100 pounds.
  455.  
  456.    There are several "string variables" that may be used freely in messages
  457.    -- specifically:
  458.  
  459.         $verb$ is the current VERB
  460.         $noun$ is the current NOUN
  461.         $prep$ is the current PREPOSITION
  462.         $object$ is the current OBJECT
  463.  
  464.                                      139
  465.  
  466.  
  467.  
  468.  
  469.         $adjective$ is the current NOUN's adjective
  470.         $n_pro$ is the NOUN's pronoun, i.e., "it" "they" "he" or "she"
  471.         $o_pro$ is the OBJECT's pronoun, i.e., "it" "they" "he" or "she"
  472.         $n_indir$ is the NOUN's indirect pronoun - "it" "them" "him" or
  473.         "her"
  474.         $o_indir$ is the OBJECT's indirect pronoun: "it" "them" "him" or
  475.         "her"
  476.         $n_is$ is either "is" or "are" based upon NOUN being singular or
  477.         plural
  478.         $o_is$ is either "is" or "are" based upon OBJECT being singular or
  479.         plural
  480.         $c_name$ is the NAME of the HOSTILE creature that is attacking the
  481.         player
  482.  
  483.    Any of the above string variables can be capitalized by making the
  484.    appropriate letters between the $'s upper case.  For example $Noun$ will
  485.    capitalize the first letter of the NOUN's name, or $OBJECT$ will display
  486.    the OBJECT's name in all caps.
  487.  
  488.  
  489.    CUSTOMIZEABLE USER INTERFACE
  490.  
  491.    The Master's Edition of AGT allows the user to customize the manner in
  492.    which the game's general interface is defined and to specify the game's
  493.    overall "look-and-feel."  The user may define color schemes, status line
  494.    options, command input method, size and "layout" of the screen, etc. 
  495.    Once the player has a set of "look-and-feel" options he or she likes,
  496.    these options may be saved as the standard defaults for this game and
  497.    any other AGT game the user plays.
  498.  
  499.    The "look-and-feel" options are accessed by hitting the ESC key during
  500.    the game.  
  501.  
  502.    If you create an user interface that you like, it may be saved by
  503.    selecting the item on the options menu.  This creates a file with the
  504.    extension GAMENAME.OPT which has your options for this game. 
  505.    Thereafter, whenever you start the game, the fiel GAMENAME.OPT file will
  506.    be read and your saved "look-and-feel" options will automatically be
  507.    used.
  508.  
  509.  
  510.    "FREEZING" THE USER INTERFACE
  511.  
  512.    If you have saved a particular set of "look-and-feel" options (in a file
  513.    named GAMENAME,OPT) for a game, you can "freeze" those options, so that
  514.    whoever is playing the game can not change the "look-and-feel."  This is
  515.    done by putting the word FREEZE on a separate line in the game's .AGT
  516.    before the game is compiled.  As an example, the game HOLMES forces the
  517.    player to always use a MENU-DRIVEN option for the game.
  518.  
  519.  
  520.  
  521.  
  522.                                      140
  523.  
  524.  
  525.  
  526.  
  527.    ADAPTING YOUR GAME FOR THE "MENU-DRIVEN" PLAYER INPUT
  528.  
  529.    One of the options available in the Master's Edition is a unique
  530.    "menu-driven" player input that allows the player to enter game commands
  531.    by selecting words from a menu.  This option is particularly helpful for
  532.    players who are often frustrated by their inability to figure out an
  533.    adventure game's vocabulary -- since the menu always displays a list of
  534.    "feasible" (though not always "smart" or even appropriate) commands from
  535.    which the player may make a selection.
  536.  
  537.    However, the "menus" do show some intelligence -- if the player selects
  538.    the verb DROP from the menu, then he/she will be shown a menu of nouns
  539.    that can be selected to be dropped.  This list will be composed only of
  540.    nouns that the player is currently carrying or wearing, i.e., logical
  541.    candidates for being DROPped.  This level of inherent intelligence is
  542.    not extended to all verbs, however.  For example, if the player selects
  543.    the verb EAT, the nouns shown will be all of the nouns and creatures
  544.    visible at the location plus special "related" or "room" specific or
  545.    "ubiquitous" nouns (to be discussed a little later).  In other words,
  546.    the noun list will not be limited to nouns that have been defined as
  547.    EDIBLE and happen to be visible at the current location.  I firmly
  548.    believe the "menu-driven" input should not limit either the player's or
  549.    the game designer's ability to have such game commands as EAT THE TRASH
  550.    CAN or PUSH THE STRING WITH MY NOSE.
  551.  
  552.    The "menu-driven" input option may be accessed by hitting the ESC key
  553.    during the game and toggling the MENU option to ON.
  554.  
  555.    The Master's Edition of AGT gets its standard "menu-driven" verb list by
  556.    reading a file with the list of verbs to be displayed in the menu.  This
  557.    file will have a .VOC extension.  When the Master's Edition MRUN program
  558.    is started it will first look for a .VOC file for the specific game
  559.    being played, i.e., GAMENAME.VOC.  If that file is not found on the
  560.    current directory, MRUN will look for the "default" .VOC file which is
  561.    AGT.VOC.  If AGT.VOC is also not on the current directory, MRUN will
  562.    quit with an error message.
  563.  
  564.    The Master's Edition package has two .VOC files for you to play with: 
  565.    AGT.VOC and SQUYNCH.VOC.  AGT.VOC is the "standard" set of AGT verbs for
  566.    potential use by the "menu-driven" player input.  SQUYNCH.VOC is a set
  567.    of verbs that were selected specifically for the game SQUYNCH.  By
  568.    looking at the differences between these two files, you can get an idea
  569.    of how and why you might want to "customize" your verb menu.
  570.  
  571.    When setting up our own .VOC file please follow these guidelines:
  572.  
  573.         1.   The verb menu will be displayed in the exact order as the
  574.              verbs in the vocabulary file, i.e., the .VOC file.
  575.  
  576.         2.   It is important that some verbs be included in a particular
  577.              order.  For example, the directions should be shown before
  578.              other verbs beginning with the same letter, e.g., SOUTH should
  579.  
  580.                                      141
  581.  
  582.  
  583.  
  584.  
  585.              be the first S-verb, so that hitting a single letter on the
  586.              keyboard will jump to the most frequently used verbs
  587.              (commands).
  588.  
  589.         3.   There should be a number in the first column of each verb
  590.              entry in the .VOC file.  The number should be a 1 if the verb
  591.              does not need a noun, e.g., SOUTH, HELP.  The number should be
  592.              a 2 if the verb always needs a noun, e.g., GET.  The number
  593.              should be a 3 if the verb is a compound verb such as PUT IN
  594.              that always needs both a noun and an object, e.g., PUT noun IN
  595.              object.  If the number is a 3, then the verb MUST consist of
  596.              two words, e.g., PUT IN, or an error message will be
  597.              generated.  Any number other than 1, 2, or 3 will also
  598.              generate an error message.
  599.  
  600.    IMPORTANT WARNING:  Your verb list is limited to a maximum of 200 verbs.
  601.    Also, each verb (compound or otherwise) must be limited to 15 characters
  602.    or less.
  603.  
  604.    For example, the AGT.VOC starts off with the following entries:
  605.  
  606.         ! AGAIN should be the first A-verb 
  607.         1 Again 
  608.         2 Attack 
  609.         3 Attack With 
  610.         3 Ask about 
  611.         1 Brief 
  612.         3 Block with 
  613.         2 Break 
  614.         3 Break with 
  615.         2 Close 
  616.         1 Climb 
  617.         2 Climb up 
  618.         2 Climb down
  619.  
  620.    This would cause the following actions:
  621.  
  622.         ! AGAIN should be the first A-verb <- A comment line -- ignored 
  623.         1 Again <- Will be selected when an A is hit on the keyboard 
  624.         2 Attack <- ATTACK noun -- i.e., ATTACK ORC 
  625.         3 Attack With <- ATTACK noun WITH object 
  626.         3 Ask about <- ASK noun ABOUT object -- i.e., ASK ORC ABOUT GOLD
  627.         1 Brief <- Will be selected when an B is hit on the keyboard
  628.         3 Block with <- BLOCK noun WITH object 
  629.         2 Break <- BREAK noun - i.e., BREAK EGG 
  630.         3 Break with <- BREAK noun WITH object -- i.e., BREAK DOOR WITH AXE
  631.         2 Close <- CLOSE noun -- i.e., CLOSE DOOR 
  632.         1 Climb <- CLIMB -- i.e., no noun 
  633.         2 Climb up <- CLIMB UP noun -- i.e., CLIMB UP TREE 
  634.         2 Climb down <- CLIMB DOWN noun -- i.e., CLIMB DOWN TREE
  635.  
  636.  
  637.  
  638.                                      142
  639.  
  640.  
  641.  
  642.  
  643.    The biggest challenge the game designer will have in converting a
  644.    Classic Edition AGT game to work with the new menu-driven player input
  645.    will be making sure that the nouns that should be displayed in a
  646.    particular location or situation will (in fact) be displayed.  The
  647.    menu-driven input option shows only a subset of all of the potential
  648.    nouns -- and your challenge as a game designer is to make sure that the
  649.    nouns you want get selected for these subsets.
  650.  
  651.    To help you understand how to accomplish this feat, let's review just
  652.    how this list of nouns to be displayed is determined.  This list is
  653.    formed from:
  654.  
  655.         1.   All "visible" nouns and creatures
  656.  
  657.         2.   All "related" names
  658.  
  659.         3.   All "ubiquitous" nouns
  660.  
  661.         4.   All "room specific" nouns
  662.  
  663.    More details follow on each of these:
  664.  
  665.         1.   All nouns and creatures that are "visible" at the current
  666.              location, i.e., all creatures present in the room plus all
  667.              nouns that are either being carried or worn, in the room, or
  668.              inside another noun (which is inside the room) that is open.
  669.  
  670.         2.   All nouns or names that are "related" to one of the visible
  671.              nouns, i.e., "related" to nouns covered by (1) above.  As an
  672.              example, see the magic carpet in SQUYNCH that has a "label"
  673.              attached to it.  You want the player to be able to READ THE
  674.              LABEL whenever the magic carpet is present.  By making LABEL a
  675.              "related name" for the magic carpet, the word LABEL will
  676.              appear whenever the word CARPET would also appear on a noun
  677.              list.  Another example from SQUYNCH is the need to have the
  678.              word NOSE to appear on the noun lists whenever the player has
  679.              the CLOTHPIN.  This allows the player to use the menu-driven
  680.              player input to enter a command like PIN NOSE WITH CLOTHPIN or
  681.              PUT CLOTHPIN ON NOSE.  This objective is accomplished by
  682.              having NOSE as a "related name" of the noun CLOTHPIN.
  683.  
  684.              As an example, below is the NOUN definition for the CLOTHPIN:
  685.  
  686.              NOUN  [247 WOODEN CLOTHPIN]
  687.              CLOTHPIN
  688.              WOODEN
  689.              There is a wooden clothpin here.
  690.              LOCATION [27 Royal Laundry Room]
  691.              WEIGHT 5
  692.              POSITION on clothline
  693.              NOUN_SYNONYMS PIN
  694.              RELATED_NAME NOSE
  695.  
  696.                                      143
  697.  
  698.  
  699.  
  700.  
  701.              END_NOUN
  702.  
  703.              NOUN_DESCR [247 WOODEN CLOTHPIN]
  704.              The wooden clothpin is about 3 inches long.
  705.              END_NOUN_DESCR
  706.  
  707.         3.   All nouns that have been defined by the game designer as 
  708.              "ubiquitous" for the particular game.  Examples of possible  
  709.              ubiquitous nouns include such things/names as "ME", "GROUND,"
  710.              or "SKY."  These nouns will appear on EVERY noun list the
  711.              menu-driven player input generates.  There can be at most 100
  712.              of these global nouns in a game.  Below is an example of how
  713.              these nouns would be specified in the .AGT file:
  714.  
  715.              GLOBAL_NOUNS
  716.              Me
  717.              Ground   <-- Maximum of 100 of these!
  718.              END_GLOBAL_NOUNS
  719.  
  720.              IMPORTANT NOTE:  You should use the GLOBAL NOUNS to do the
  721.              same thing for nouns that "Dummy Verbs" does for verbs.  In
  722.              other words, a GLOBAL NOUN will be recognized by the parser as
  723.              a valid noun without having been defined as a separate NOUN
  724.              (and using up one of your very precious 200 NOUN definitions). 
  725.              However, because they are not one of the "standard" NOUN
  726.              definitions, you MUST handle all references to your GLOBAL
  727.              NOUNS via metacommands!!  For example, let's say that GROUND
  728.              is defined as a GLOBAL NOUN (and is not a separate NOUN
  729.              definition).  You must have metacommands to handle such player
  730.              inputs as GET GROUND, EXAMINE GROUND, etc.  The standard
  731.              "built-in" routines for AGT can only deal with things that are
  732.              defined as either NOUNs or CREATUREs -- and obviously, GROUND
  733.              does not apply in this case.
  734.  
  735.         4.   All nouns that have been defined by the game designer as "room 
  736.              specific" for the current room.  Examples of possible "room
  737.              specific" nouns might include such things as "TREES", "WATER,"
  738.              or "SNOW," i.e., things that can be expected to be found in
  739.              multiple locations through out the game and which are unlikely
  740.              to have specific NOUN definitions in each of these locations. 
  741.              For example, you may want the player to GET WATER at multiple
  742.              locations within the game such as at wells, streams, lakes,
  743.              etc.  By using a "room specific" noun of WATER for each of
  744.              these locations, you can assure that WATER will always appear
  745.              on any noun list the menu-driven input generates at any of
  746.              these locations.  Within the Master's Edition, you are allowed
  747.              up to 30 "room specific" nouns (or flags).  This is 30 in
  748.              total -- not 30 per room.
  749.  
  750.              Here is an example of how these flags/nouns should be
  751.              specified in the game's .AGT file:
  752.               
  753.  
  754.                                      144
  755.  
  756.  
  757.  
  758.  
  759.              REM  ----  Flag Noun Numbers
  760.  
  761.              FLAG_NOUNS
  762.              [Castle] Castle
  763.              [Cave] Cave
  764.              [Cove] Cove
  765.              [Water] Water
  766.              [Moat] Moat
  767.              [Bridge] Bridge
  768.              [Stairs] Stairs   <-- Maximum of 30 of these!
  769.              END_FLAG_NOUNS
  770.  
  771.              Once these flags/nouns have been defined they can be specified
  772.              for a room in the game as the following examples shows:
  773.  
  774.              ROOM [18 Drawbridge]
  775.              Drawbridge
  776.              NORTH [20 Moat]
  777.              SOUTH [20 Moat]
  778.              EAST [15 Waiting Room]
  779.              WEST [Front of Castle]
  780.              FLAGS [Castle] [Water] [Bridge]
  781.              END_ROOM
  782.  
  783.              ROOM_DESCR [18 Drawbridge]
  784.              You are now on the drawbridge in front of Squeeb's castle
  785.              which lies to the east.  There is another exit to the west.
  786.              END_ROOM_DESCR
  787.  
  788.              The Drawbridge location has the flags/nouns for WATER, CASTLE,
  789.              and BRIDGE.  These nouns will be displayed on any noun list
  790.              that the menu-driven input generates while at this location.
  791.  
  792.              You can test the status and/or change the status of these
  793.              flags using the following meta-commands:
  794.  
  795.              RoomFlagON num       <-- Tests if RoomFlag num is ON
  796.              RoomFlagOFF num      <-- Tests if RoomFlag num is OFF
  797.              TurnRoomFlagON num   <-- Will turn RoomFlag num ON
  798.              TurnRoomFlagOFF num  <-- Will turn RoomFlag num OFF
  799.              ToggleRoomFlag num   <-- Will toggle or switch RoomFlag num
  800.  
  801.              Here are a few examples of how the WATER room flag might be
  802.              used to deal properly with the commands GET WATER and EXAMINE
  803.              WATER:
  804.  
  805.              COMMAND GET WATER
  806.              Present [231 WOODEN PAIL]
  807.              RoomFlagOFF [Water] ; there isn't any water here
  808.              PrintMessage [No water here!]
  809.              DoneWithTurn
  810.              END_COMMAND
  811.  
  812.                                      145
  813.  
  814.  
  815.  
  816.  
  817.              MESSAGE [No water here!]
  818.              There isn't any water here.  Perhaps, you meant to MAKE WATER!
  819.              END_MESSAGE
  820.  
  821.              COMMAND GET WATER
  822.              Present [231 WOODEN PAIL]
  823.              RoomFlagON [Water] ; there is water here
  824.              ReDirectTo FILL PAIL
  825.              DoneWithTurn
  826.              END_COMMAND
  827.  
  828.              COMMAND EXAMINE WATER
  829.              RoomFlagON [Water]
  830.              PrintMessage [Water description]
  831.              DoneWithTurn
  832.              END_COMMAND
  833.  
  834.              MESSAGE [Water description]
  835.              The water looks dark, murky and polluted!  It also stinks
  836.              something awful!
  837.              END_MESSAGE
  838.  
  839.              Room flags can also be used without having any nouns added to
  840.              the noun list generated by the menu-driven input option.
  841.              Examples of situations where you might want to be able to test
  842.              or set flags for a location include: (1) a flag to indicate
  843.              the location is "outside", (2) a flag to indicate that this
  844.              location is one where a particular CREATURE might appear at
  845.              random, and (3) a flag to indicate that the player must be
  846.              wearing a "space-suit" or he/she will die from lack of oxygen.
  847.  
  848.              The way to accomplish this is to not add the flag to the
  849.              FLAG_NOUNS list.  For example, to create a flag for a room
  850.              being "outside," we could add the following definition:
  851.  
  852.              #DEFINE [Outside]  8
  853.  
  854.              Then to specify that the "Drawbridge" location was "outside",
  855.              we would just add it to the room's FLAG list:
  856.  
  857.              ROOM [18 Drawbridge]
  858.              Drawbridge
  859.              NORTH [20 Moat]
  860.              SOUTH [20 Moat]
  861.              EAST [15 Waiting Room]
  862.              WEST [Front of Castle]
  863.              FLAGS [Castle] [Water] [Bridge] [Outside]
  864.              END_ROOM
  865.  
  866.              Because [Outside] is not in the FLAG_NOUNS list, the word
  867.              OUTSIDE will not appear on the noun list that the menu-driven
  868.              input option generates.
  869.  
  870.                                      146
  871.  
  872.  
  873.  
  874.  
  875.    INITIAL DESCRIPTIONS FOR ROOMS, NOUNS AND CREATURES
  876.  
  877.  
  878.    NOUN INITIAL DESCRIPTIONS
  879.  
  880.    Let's begin with an example of using "initial" descriptions for nouns.
  881.  
  882.    Often you will want to have a noun's short description change after you
  883.    move it or take it.  For example, we might want to have the initial
  884.    short description of a chrome key "attached" to objects in the key's
  885.    initial location as follows:
  886.  
  887.         You are on a large ledge only a couple of meters below the top of
  888.         the spire.  There is a large nest just out of your reach.
  889.            Dangling from the nest on a red string is a chrome key.
  890.  
  891.    Once you move the key, you would want its short description to be "free"
  892.    of the nest -- for example:
  893.  
  894.         There is a chrome key on a string here.
  895.  
  896.    You can do this by specifying the noun's INITIAL value to be the number
  897.    of a message.  This message will be printed as the noun's short
  898.    description until such time as the noun is moved by getting it, wearing
  899.    it, or placing it.  After the noun is moved from its initial location,
  900.    the noun's "normal" short description will be used.
  901.  
  902.    For example, here is how the chrome key might be specified:
  903.  
  904.         ROOM [Top of the spire]
  905.         Top of the spire
  906.         DOWN [Half-way up the Spire]
  907.         END_ROOM
  908.  
  909.         ROOM_DESCR [Top of the spire]
  910.         You are on a large ledge only a couple of meters below the top of
  911.         the spire.  There is a large nest just out of your reach.
  912.         END_ROOM_DESCR
  913.  
  914.         NOUN [Chrome key]
  915.         key
  916.         Chrome
  917.         There is a chrome key on a string here.
  918.         WEIGHT 1
  919.         SIZE 1
  920.         POINTS 2
  921.         WEARABLE ; can be worn
  922.         LOCATION [Top of the spire]
  923.         INITIAL [Initial Chrome key description]
  924.         END_NOUN
  925.  
  926.  
  927.  
  928.                                      147
  929.  
  930.  
  931.  
  932.  
  933.         NOUN_DESCR [Chrome key]
  934.         The key is made of chrome and is on a string.  It looks like it
  935.         might come in handy.
  936.         END_NOUN_DESCR
  937.  
  938.         MESSAGE [Initial Chrome key description]
  939.         Dangling from the nest on a red string is a chrome key.
  940.         END_MESSAGE
  941.  
  942.    You have the option of specifying "short-cut" initial messages just like
  943.    you can with "short-cut" messages within a meta-command.  For example, 
  944.    we could have defined the initial message as follows:
  945.  
  946.         NOUN [Chrome key]
  947.         key
  948.         Chrome
  949.         There is a chrome key on a string here.
  950.         WEIGHT 1
  951.         SIZE 1
  952.         POINTS 2
  953.         WEARABLE ; can be worn
  954.         LOCATION [Top of the spire]
  955.         INITIAL "Dangling from the nest on a red string is a chrome key."
  956.         END_NOUN
  957.  
  958.    If we went a longer (i.e., multi-line) initial message we can do that as
  959.    well. For example, we could define a multi-line initial message as
  960.    follows:
  961.  
  962.         NOUN [Chrome key]
  963.         key
  964.         Chrome
  965.         There is a chrome key on a string here.
  966.         WEIGHT 1
  967.         SIZE 1
  968.         POINTS 2
  969.         WEARABLE ; can be worn
  970.         LOCATION [Top of the spire]
  971.         INITIAL
  972.         Dangling from the nest on a red string is a chrome key.  It looks
  973.         like it could be easily plucked from the nest -- if you wanted it
  974.         for some reason.  But heaven only knows why you would want a key
  975.         like this one.
  976.         END_INITIAL
  977.         END_NOUN
  978.  
  979.  
  980.    CREATURE INITIAL DESCRIPTIONS
  981.  
  982.    We can do the same sort of things with initial descriptions for
  983.    CREATUREs. For example, let's add a bald eagle to the above scenario
  984.    that swoops out of the sky the first time it is described -- but is
  985.  
  986.                                      148
  987.  
  988.  
  989.  
  990.  
  991.    sitting on the nest quite peacefully after the first description -- as
  992.    follows:
  993.  
  994.         CREATURE [Bald Eagle]
  995.         Eagle
  996.         Bald
  997.         A bald eagle is perched peacefully on top of the nest.
  998.         LOCATION [Top of the spire]
  999.         FRIENDLY
  1000.         INITIAL
  1001.         Suddenly, you hear a screech from high above you.  A big bird
  1002.         swoops down at you.  It is a giant bald eagle and it dive bombs at
  1003.         your head -- making several passes that very nearly knock you off
  1004.         your precarious perch.
  1005.  
  1006.         The eagle finally lands on the nest and seems to calm down.
  1007.         END_INITIAL
  1008.         END_CREATURE
  1009.  
  1010.    The first time you are in the same room with the bald eagle the INITIAL
  1011.    description will be printed.  Thereafter, the normal short description
  1012.    will be given -- e.g., "A bald eagle is perched peacefully on top of the
  1013.    nest."
  1014.  
  1015.  
  1016.    ROOM INITIAL DESCRIPTIONS
  1017.  
  1018.    We can do the same sort of things with initial descriptions for ROOMs. 
  1019.    For example, let's add some descriptive prose to describe your very
  1020.    first climb up to the ledge below the nest -- as follows:
  1021.  
  1022.         ROOM [Top of the spire]
  1023.         Top of the spire
  1024.         DOWN [Half-way up the Spire]
  1025.         INITIAL
  1026.           You put you knee between a crack in the spire to wedge yourself
  1027.         safely while you swing your foot up to the ledge.  Your foot lands
  1028.         on top of some loose stones and you grab at the ledge with your
  1029.         hands.  You just catch the ledge with your finger tips.  Finally,
  1030.         you manage to pull yourself up and you collapse exhausted on the
  1031.         ledge.  After resting awhile, you regain enough of your strength
  1032.         and aplomb to look around you.
  1033.  
  1034.           You are on a large ledge only a couple of meters below the top of
  1035.         the spire.  There is a large nest just out of your reach.
  1036.         END_INITIAL
  1037.         END_ROOM
  1038.  
  1039.         ROOM_DESCR [Top of the spire]
  1040.         You are on a large ledge only a couple of meters below the top of
  1041.         the spire.  There is a large nest just out of your reach.
  1042.         END_ROOM_DESCR
  1043.  
  1044.                                      149
  1045.  
  1046.  
  1047.  
  1048.  
  1049.    The first time you enter the room, the INITIAL description will be used
  1050.    to describe the room.  On subsequent visits to the room or whenever you
  1051.    give the command LOOK, the normal description will be given. e.g., ...
  1052.  
  1053.         You are on a large ledge only a couple of meters below the top of
  1054.         the spire.  There is a large nest just out of your reach.
  1055.  
  1056.  
  1057.    CHANGING DESCRIPTIONS
  1058.  
  1059.    Version 1.5 adds one other way to change the descriptions for NOUNS,
  1060.    CREATURES and ROOMS.  This is by using the new ChangeDescr meta-command
  1061.    token.  For example, to change the description of the CREATURE [Ogre] to
  1062.    the description contained in the MESSAGE [Angry Ogre], you would use the
  1063.    following meta-command:
  1064.  
  1065.         ChangeDescr [Ogre] [Angry Ogre]
  1066.  
  1067.    This capability will be particularly useful when you want to change
  1068.    descriptions for ROOMs to give the appearance of more rooms without
  1069.    really having more rooms.  For example, your game might have an
  1070.    earthquake that changes all of the rooms' descriptions to reflect the
  1071.    damage, but does not change the basic map of the game.  This could be
  1072.    done by a series of meta-commands similar to the following:
  1073.  
  1074.         ChangeDescr [Town Square] [Town Square -- after quake]
  1075.  
  1076.    Another example, you might want to have a NOUN which is window in a room
  1077.    that starts as being boarded-up, but after the player uses a crowbar on
  1078.    it, its description should change to "covered with loose boards."  This
  1079.    could be done with:
  1080.  
  1081.         ChangeDescr [window] [window --with loose boards]
  1082.  
  1083.  
  1084.    "AUTOEXEC" META-COMMANDS FOR ROOMS
  1085.  
  1086.    Version 1.5 of the Master's Edition adds the ability to execute a set of
  1087.    meta-commands immediately upon entering a room.  This is know as an
  1088.    "AutoExec" capability.  As an example, the game HOLMES (included with
  1089.    Version 1.5) uses this capability to select one of eighteen cases for
  1090.    the player to try to solve.  This is done, by have the starting room for
  1091.    the game a room that has an AUTOEXEC for the verb SELECTCASE (which must
  1092.    be defined as a verb).  The meta-commands for the verb SELECTCASE then
  1093.    prompts the player to select a case (from 1 to 18), check to see that a
  1094.    proper case was selected (i.e., number 1 to 18), and then changes the
  1095.    various ROOM DESCRIPTIONS to correspond to the case selected.  The logic
  1096.    to accomplish this is shown below:
  1097.  
  1098.         STARTING_ROOM [Select Case Room]
  1099.  
  1100.  
  1101.  
  1102.                                      150
  1103.  
  1104.  
  1105.  
  1106.  
  1107.         ROOM [Select Case Room]
  1108.         221B Baker Street
  1109.         ! Do SELECTCASE command to get Case number and change various
  1110.         ROOM_DESCR's
  1111.         AUTOEXEC SELECTCASE
  1112.         END_ROOM
  1113.  
  1114.         ROOM_DESCR [Select Case Room]
  1115.         You need to select one of the following cases to solve.
  1116.  
  1117.             1 - The Adventure of the Dead Inventor
  1118.             2 - The Adventure of the Missing Cuckoo
  1119.             3 - The Case of Murder in the Park
  1120.             4 - The Adventure of the Vanishing Lady
  1121.             5 - The Case of the Vicious Viper
  1122.             6 - The Adventure of the Missing Knife
  1123.             7 - The Adventure of the Mysterious Message
  1124.             8 - The Case of the Missing Rolls Royce
  1125.             9 - The Adventure of the Golden Coins
  1126.            10 - The Case of the Code Crossword
  1127.            11 - The Case of the Crashed Cab
  1128.            12 - The Silenced Maintenance Man
  1129.            13 - The Case of the Jilted Jockey
  1130.            14 - The Case of the Northern Cross
  1131.            15 - The Case of the Dead Letter Murders
  1132.            16 - The Adventure of West Landings Ghost
  1133.            17 - The Case of the Vanishing Silver
  1134.            18 - The Case of the Last Alibi
  1135.         END_ROOM_DESCR
  1136.  
  1137.         COMMAND SELECTCASE
  1138.         PrintMessage "Enter the number of the case you wish to solve"
  1139.         GetVariable [Case]
  1140.         SetVariableTo [Money] 25
  1141.         SetVariableTo [Number of Passes] 2
  1142.         SetVariableTo [Starting Time] 1302
  1143.         SetTimeToVariable [Starting Time]
  1144.         END_COMMAND
  1145.  
  1146.         MESSAGE [Please enter a number from 1 to 18 only!]
  1147.         Please enter a number from 1 to 18 only!
  1148.         END_MESSAGE
  1149.  
  1150.         COMMAND SELECTCASE
  1151.         ! Check for Valid Case number
  1152.         VariableLT [Case] 1
  1153.         GoToRoom [Select Case Room]
  1154.         PrintMessage [Please enter a number from 1 to 18 only!]
  1155.         ReDirectTo SELECTCASE
  1156.         DoneWithTurn
  1157.         END_COMMAND
  1158.  
  1159.  
  1160.                                      151
  1161.  
  1162.  
  1163.  
  1164.  
  1165.         COMMAND SELECTCASE
  1166.         ! Check for Valid Case number
  1167.         VariableGT [Case] 18
  1168.         GoToRoom [Select Case Room]
  1169.         PrintMessage [Please enter a number from 1 to 18 only!]
  1170.         ReDirectTo SELECTCASE
  1171.         DoneWithTurn
  1172.         END_COMMAND
  1173.  
  1174.         COMMAND SELECTCASE
  1175.         ! Change all of the ROOM_DESCR's to the those for the Case 1
  1176.         VariableEquals [Case] 1
  1177.         ChangeDescr [Starting Room] [Case1 Starting Room]
  1178.         ChangeDescr [Loire Gallery] [Case1 Loire Gallery]
  1179.         ChangeDescr [Scotland Yard] [Case1 Scotland Yard]
  1180.         ChangeDescr [Seymore Park] [Case1 Seymore Park]
  1181.         ...
  1182.  
  1183.         ChangeDescr [Stock Exchange] [Case1 Stock Exchange]
  1184.         ChangeDescr [Cab Company] [Case1 Cab Company]
  1185.         ChangeDescr [Newspaper] [Case1 Newspaper]
  1186.         ChangeDescr [Pub] [Case1 Pub]
  1187.         ChangeDescr [Shipping Company] [Case1 Shipping Company]
  1188.         GoToRoom [Starting Room]
  1189.         DoneWithTurn
  1190.         END_COMMAND
  1191.  
  1192.         COMMAND SELECTCASE
  1193.         ! Change all of the ROOM_DESCR's to the those for the Case 2
  1194.         VariableEquals [Case] 2
  1195.         ChangeDescr [Starting Room] [Case2 Starting Room]
  1196.         ChangeDescr [Loire Gallery] [Case2 Loire Gallery]
  1197.         ChangeDescr [Scotland Yard] [Case2 Scotland Yard]
  1198.         ChangeDescr [Seymore Park] [Case2 Seymore Park]
  1199.         ...
  1200.  
  1201.         ChangeDescr [Stock Exchange] [Case2 Stock Exchange]
  1202.         ChangeDescr [Cab Company] [Case2 Cab Company]
  1203.         ChangeDescr [Newspaper] [Case2 Newspaper]
  1204.         ChangeDescr [Pub] [Case2 Pub]
  1205.         ChangeDescr [Shipping Company] [Case2 Shipping Company]
  1206.         GoToRoom [Starting Room]
  1207.         DoneWithTurn
  1208.         END_COMMAND
  1209.  
  1210.    These sets of ChangeDescr commands would be repeated for all 18 cases.
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.                                      152
  1219.  
  1220.  
  1221.  
  1222.  
  1223.    SETTING COLORS WITHIN MESSAGES AND DESCRIPTIONS
  1224.  
  1225.    The Master's Edition allows you to change colors of words within your
  1226.    messages and descriptions and to mix and match colors to suit your
  1227.    needs.  You can even cause some words to blink -- if you want.
  1228.  
  1229.    The way this is done is to insert "control characters" within your text
  1230.    wherever you wish to change colors from the "normal" text colors.  These
  1231.    "control characters" are formed while using your text editor or word
  1232.    processor by simultaneously holding down the ALT key and a number key on
  1233.    the numeric key pad.
  1234.  
  1235.    The ALT-number combinations and their associated colors are as follows:
  1236.  
  1237.         Black     = ALT 0
  1238.         Blue      = ALT 1
  1239.         Green     = ALT 2
  1240.         Cyan      = ALT 3
  1241.         Red       = ALT 4
  1242.         Magenta   = ALT 5
  1243.         Brown     = ALT 6
  1244.         "Normal"  = ALT 7
  1245.         Blinking  = ALT 8
  1246.  
  1247.    These ALT-numeric key combination each create a special character in the
  1248.    text. For example, the ALT-1 key combination creates a "happy face"
  1249.    character which will cause the words that follow it to be printed on a
  1250.    color monitor in blue. This blue color will remain in effect until
  1251.    either (1) you change color again using another special character within
  1252.    the message or description, or (2) the game's "turn" is done and AGT
  1253.    asks the player to enter another command -- which ever comes first. 
  1254.    Each new turn of the game will cause AGT to revert to the game's
  1255.    "normal" text color.
  1256.  
  1257.    When AGT's MRUN program encounters these special control characters
  1258.    within a message or description, it will change the color accordingly
  1259.    and in place of the special character it will print a space -- so your
  1260.    spacing within your text will remain the same.  For example, in the
  1261.    following message, we will change the color of the text to blue at the
  1262.    word "blue" by using our "happy face" character:
  1263.  
  1264.         MESSAGE [Example of color changes]    
  1265.         The message should be blue now.
  1266.         END_MESSAGE
  1267.  
  1268.    Where the happy face is will be a space in the final printed message,
  1269.    but all of the text after that will be shown on the screen in blue.
  1270.  
  1271.    If you wish to make only the word "blue" blue and revert to the "normal"
  1272.    text color for the word "now," you would do this by inserting an ALT-7
  1273.    color control character (a small "dot" character) between the words
  1274.    "blue" and "now" -- as shown below:
  1275.  
  1276.                                      153
  1277.  
  1278.  
  1279.  
  1280.  
  1281.         MESSAGE [Example of color changes]
  1282.         The message should be blue∙now.
  1283.         END_MESSAGE
  1284.  
  1285.  
  1286.    "ILLEGAL" DIRECTION MESSAGES
  1287.  
  1288.    There is now a way to print "customized" messages when you attempt to go
  1289.    in "illegal" directions.  This is done by printing a message whenever
  1290.    the room number for a given direction is greater than a 1000.
  1291.    Specifically, if you give a room number of 1005 for going EAST from the
  1292.    current location, you will get message number five printed whenever you
  1293.    try to go EAST from the current location.
  1294.  
  1295.    For example, let's say that you are on top of a cliff and your want to
  1296.    give the message "You will fall to your death if you go $verb$." if you
  1297.    go NORTH or NORTHEAST and the message "You take a few steps and decide
  1298.    that it would be safer to return to where you were." if you go NORTHWEST
  1299.    or WEST.  You could do this by putting the following in the first part
  1300.    of your game's source file:
  1301.  
  1302.         #DEFINE [You'll fall and die message] 1001
  1303.         #DEFINE [You decide to retreat to safety message] 1002
  1304.  
  1305.         MESSAGE [First message in game file]
  1306.         You will fall to your death if you go $verb$.
  1307.         END_MESSAGE
  1308.  
  1309.         MESSAGE [Second message in game file]
  1310.         You take a few steps and decide that it would be safer to return to
  1311.         where you were.
  1312.         END_MESSAGE
  1313.  
  1314.    You would get these messages to work by using the following in the ROOM
  1315.    definition:
  1316.  
  1317.         ROOM [Top of Cliff]
  1318.         Top of Cliff
  1319.         NORTH [You'll fall and die message]
  1320.         NORTHEAST [You'll fall and die message]
  1321.         NORTHWEST [You decide to retreat to safety message]
  1322.         WEST [You decide to retreat to safety message]
  1323.         SOUTH [Path leading down the cliff]
  1324.         END_ROOM
  1325.  
  1326.         ROOM_DESCR [Top of Cliff]
  1327.         You are on the top of a high cliff.  The path you climbed up to
  1328.         reach   your current location is to the south.
  1329.         END_ROOM_DESCR
  1330.  
  1331.  
  1332.  
  1333.  
  1334.                                      154
  1335.  
  1336.  
  1337.  
  1338.  
  1339.    CUSTOM FONTS
  1340.  
  1341.    If the game is being played on an EGA or VGA monitor, it is possible to
  1342.    use "customizeable" fonts with the normal text-based output. 
  1343.    Specifically, the default font will be contained in a file called
  1344.    GAMENAME.FNT.  This font will be loaded automatically at the beginning
  1345.    of the game.  If the game is being played on a monochrome or CGA monitor
  1346.    (or if the GAMENAME.FNT font file can not be found on the current
  1347.    directory) the game will continue to use its "standard" font.
  1348.  
  1349.    During the game, you may change fonts using the LoadFont meta-command. 
  1350.    For example:
  1351.  
  1352.         LoadFont [Old English]
  1353.  
  1354.    will change the default font to "Old English."  If the game is being
  1355.    played on a monochrome or CGA monitor (or if the font file can not be
  1356.    found on the current directory) the LoadFont meta-command will have no
  1357.    effect and the game will continue to use its current font.
  1358.  
  1359.    In order to use different fonts, you must define the font files you plan
  1360.    to use in the game source code as follows:
  1361.  
  1362.         FONTS
  1363.         [Old English] OLDENG
  1364.         [Digital] DIGITAL
  1365.         [Runic] RUNIC
  1366.         [Standard Font] STANDARD
  1367.         END_FONTS
  1368.  
  1369.    Where the words follow the bracket definitions are the *.FNT file names
  1370.    to be found on the current directory, e.g., OLDENG.FNT contains the "Old
  1371.    English" font.
  1372.  
  1373.    A collection of about 30 fonts can be found in the FONTSTUF.ZIP file.
  1374.    FONTSTUF.ZIP also contains a font editor FONTEDIT.EXE that will enable
  1375.    you to design your own custom fonts or edit the 30 or so fonts provided.
  1376.  
  1377.    By the way, the font loaded by AGT's MRUN or by FONTEDIT will remain as
  1378.    the active display font for your computer after this program is
  1379.    finished.  To restore the font that is the "default" for your monitor,
  1380.    you will need to give the DOS command MODE CO80.
  1381.  
  1382.  
  1383.    NOTIFY COMMAND
  1384.  
  1385.    You can use the command NOTIFY to have the game give you a specific
  1386.    message whenever your score changes.  This is often useful when
  1387.    debugging a game.
  1388.  
  1389.  
  1390.  
  1391.  
  1392.                                      155
  1393.  
  1394.  
  1395.  
  1396.  
  1397.    USER SPECIFIED "STRINGS"
  1398.  
  1399.    The Master's Edition adds the capability to have up to 25 user defined
  1400.    strings that may be initialized in the AGT game source file(s) or input
  1401.    during the game by the player.  These strings maybe up to 15 characters
  1402.    in length.
  1403.  
  1404.    To initialize them in the source files for the game, do something like
  1405.    the following:
  1406.  
  1407.         STRINGS
  1408.         [Name] John
  1409.         [Sex] Male
  1410.         [Eyes] Blue
  1411.         [Hair] Brown
  1412.         [City1] San
  1413.         [City2] Francisco
  1414.         [State] California
  1415.         END_STRING
  1416.  
  1417.    Notice that each string must be only one word, that is why "San" had to
  1418.    be a sperate string from "Francisco."
  1419.  
  1420.    Then to print these strings out in messages, you would something like
  1421.    the following:
  1422.  
  1423.         MESSAGE [Vital Statistics]
  1424.         Hi, my name is $Str[Name]$ and I am a red-blooded $str[Sex]$ living
  1425.         in $Str[City1]$ $Str[City2]$, $Str[State]$.
  1426.  
  1427.         I have $str[Eyes]$ eyes and $str[Hair]$ hair.
  1428.         END_MESSAGE
  1429.  
  1430.    Just like $NOUN$, $noun$ or $Noun$, the user defined strings would be
  1431.    capitalized based on how $STR1$, $str1$ or $Str1$ is capitalized.
  1432.    You may only use the GetString metacommand token to get the values for
  1433.    these strings from the Player's keyboard input as follows:
  1434.  
  1435.         #DEFINE [Player] 1
  1436.         #DEFINE [Age] 4
  1437.  
  1438.         COMMAND ANY
  1439.         FlagOFF [Game started]
  1440.         TurnFlagON [Game started]
  1441.         PrintMessage "What is your first name?"
  1442.         GetString [Player]
  1443.         PrintMessage "What is your age?"
  1444.         GetVariable [Age]
  1445.         VariableGT [Age] 30
  1446.         PrintMessage "#Var[Age]#!!! .... my or my ... that is really old!"
  1447.         END_COMMAND
  1448.  
  1449.  
  1450.                                      156
  1451.  
  1452.  
  1453.  
  1454.  
  1455.           ...
  1456.  
  1457.         COMMAND ANY
  1458.         Chance 5
  1459.         PrintMessage [Strange Voice]
  1460.         END_COMMAND
  1461.  
  1462.         MESSAGE [Strange Voice]
  1463.         You hear a strange voices calling "$Str[Player]$... $Str[Player]$."
  1464.         END_MESSAGE
  1465.  
  1466.  
  1467.    ENHANCED QUESTION AND ANSWER CAPABILITIES
  1468.  
  1469.    Version 1.5 greatly expands the Master's Edition's capability for
  1470.    dealing with questions and answers.  Now you can have up to 100 sets of
  1471.    questions and associated answers.  Further, you can have answers that
  1472.    can include "logical" relations of AND and OR.  For example, the
  1473.    following series of questions and answers represent the solution to case
  1474.    5 in the game HOLMES:
  1475.  
  1476.         QUESTION [Case5 Who ?] Who killed Harry Wilcox?
  1477.         ANSWER [Case5 Who ?] Robert OR Simms OR Assistant
  1478.  
  1479.         QUESTION [Case5 How ?] How was he killed?
  1480.         ANSWER [Case5 How ?] Fork
  1481.  
  1482.         QUESTION [Case5 Why ?] What was the motive?
  1483.         ANSWER [Case5 Why ?] Revenge OR Pregnant OR Sister OR Pregnancy
  1484.  
  1485.    For example, if the answer the player gives to the "Why ?" question
  1486.    includes any of the words "revenge" or "pregnant" or "sister" and/or
  1487.    "pregnancy" -- the answer would be determined to be correct.
  1488.  
  1489.    You can also use "AND" relations as shown by the following example:
  1490.  
  1491.         QUESTION [Explorers ?] Which explorers found the Columbia River?
  1492.         ANSWER [Explorers ?] Lewis AND Clark
  1493.  
  1494.    The player must give an answer that has both of the words "Lewis" and
  1495.    "Clark" for AGT to determine the answer as correct.  The words may be in
  1496.    any order and may be part of a much longer answer.
  1497.  
  1498.  
  1499.    BUILT-IN TIME CAPABILITIES
  1500.  
  1501.    The Master's Edition has built-in time capabilities that can be set,
  1502.    tested and displayed.
  1503.  
  1504.    To set the starting time for your adventure, put something like the
  1505.    following in your game's AGT source file:
  1506.  
  1507.  
  1508.                                      157
  1509.  
  1510.  
  1511.  
  1512.  
  1513.         STARTING_TIME 1247
  1514.  
  1515.         DELTA_TIME 15
  1516.  
  1517.    This would cause your game to start at 12:47 PM (12:47 AM would have a
  1518.    STARTING_TIME of 47) and to be incremented by a random number of minutes
  1519.    (from 0 to 15) after each turn of the game.
  1520.  
  1521.    The current time may be printed out in messages by using $TIME$ (e.g.,
  1522.    12:47 PM) or $time$ (e.g., 12:47 pm).
  1523.  
  1524.    There are several metacommand tokens that be used with time:
  1525.  
  1526.         TimeGT {num1}    -- This is a conditional meta-command and will
  1527.                             return a TRUE or FALSE depending upon whether
  1528.                             the current time is greater than num1.
  1529.  
  1530.         TimeLT {num1}    -- This is a conditional meta-command and will
  1531.                             return a TRUE or FALSE depending upon whether
  1532.                             the current time is less than num1.
  1533.  
  1534.         SetVariableToTime {num1} --   This sets variable num1 to the
  1535.                                       current time.
  1536.  
  1537.         SetTimeToVariable {num1} --   This sets the current time to
  1538.                                       variable num1.
  1539.  
  1540.         SetTime {num1}   -- This sets the current time to num1.
  1541.  
  1542.         SetDeltaTime {num1} --   This sets the current value of DELTA_TIME
  1543.                                  to num1.
  1544.  
  1545.         AddToTime {num1} -- This adds num1 to the current time.  Note: For
  1546.                             1 hour and 10 minutes, you would have num1 set
  1547.                             to 110 -- not 70.
  1548.  
  1549.  
  1550.    OPTIONS FOR DISPLAYING SCORE AND STATUS LINE
  1551.  
  1552.    The Master's Edition allows the game designer to select options for how
  1553.    the game will display the SCORE and display the STATUS LINE.
  1554.  
  1555.    Specifically, to set the SCORE option to 2, put the following line in
  1556.    your game's source file:
  1557.  
  1558.         SCORE_OPTION 2
  1559.  
  1560.    The available options are:
  1561.  
  1562.         0 -- The "Default" -- shows everything in the SCORE display.
  1563.  
  1564.         1 -- Don't show the maximum number of rooms.
  1565.  
  1566.                                      158
  1567.  
  1568.  
  1569.  
  1570.  
  1571.         2 -- Don't show the maximum possible score.
  1572.  
  1573.         3 -- Don't show either the maximum rooms or possible score.
  1574.  
  1575.    There is no need to have a "SCORE_OPTION 0" line, since AGT will
  1576.    automatically use the default if not SCORE_OPTION is encountered in the
  1577.    game's source file(s).
  1578.  
  1579.    To set the STATUS LINE option to 2, put the following line in the game's
  1580.    source files:
  1581.  
  1582.         STATUS_OPTION 2
  1583.  
  1584.    The available option are:
  1585.  
  1586.         0 -- The "Default" -- shows "standard" STATUS LINE display
  1587.              consisting of current "Room Name", "Score", and "Move."
  1588.  
  1589.         1 -- Same as "Default" except "Time" rather than "Move" -- i.e., a
  1590.              STATUS LINE display consisting of current "Room Name",
  1591.              "Score", and "Time."
  1592.  
  1593.         2 -- Same as "Default" except "Score" is omitted -- i.e., a STATUS
  1594.              LINE display consisting current "Room Name" and "Move."
  1595.  
  1596.         3 -- A STATUS LINE display consisting only of current "Room Name"
  1597.              and "Time."
  1598.  
  1599.    There is no need to have a "STATUS_OPTION 0" line, since AGT will
  1600.    automatically use the default if no STATUS_OPTION is encountered in the
  1601.    game's source file(s).
  1602.  
  1603.  
  1604.    OTHER NEW META-COMMAND TOKENS
  1605.  
  1606.    New Conditional Tokens:
  1607.  
  1608.         NOUNIsMan {none}        --    This is a conditional meta-command
  1609.                                       and will return a TRUE or FALSE
  1610.                                       depending upon whether the NOUN is a
  1611.                                       creature and a Man
  1612.  
  1613.         NOUNIsWoman {none}      --    This is a conditional meta-command
  1614.                                       and will return a TRUE or FALSE
  1615.                                       depending upon whether the NOUN is a
  1616.                                       creature and a Woman
  1617.  
  1618.         NOUNIsThing {none}      --    This is a conditional meta-command
  1619.                                       and will return a TRUE or FALSE
  1620.                                       depending upon whether the NOUN is a
  1621.                                       creature and a Thing
  1622.  
  1623.  
  1624.                                      159
  1625.  
  1626.  
  1627.  
  1628.  
  1629.         OBJECTIsMan {none}      --    This is a conditional meta-command
  1630.                                       and will return a TRUE or FALSE
  1631.                                       depending upon whether the OBJECT is
  1632.                                       a creature and a Man
  1633.  
  1634.         OBJECTIsWoman {none}    --    This is a conditional meta-command
  1635.                                       and will return a TRUE or FALSE
  1636.                                       depending upon whether the OBJECT is
  1637.                                       a creature and a Woman
  1638.  
  1639.         OBJECTIsThing {none}    --    This is a conditional meta-command
  1640.                                       and will return a TRUE or FALSE
  1641.                                       depending upon whether the OBJECT is
  1642.                                       a creature and a Thing
  1643.  
  1644.         DirectionOK {none}       --   Returns TRUE or FALSE depending upon
  1645.                                       current direction leading to another
  1646.                                       valid location.  Will return FALSE if
  1647.                                       current verb is not a direction.
  1648.  
  1649.         DirectionIS {num1}       --   Returns TRUE or FALSE depending upon
  1650.                                       current direction being num1 (i.e.,
  1651.                                       num1 = 1 for north, etc.)  Will
  1652.                                       return FALSE if current verb is not a
  1653.                                       direction.
  1654.  
  1655.         BetweenRooms {n1} (n2}   --   Returns TRUE or FALSE depending upon
  1656.                                       current location being between (and
  1657.                                       including) rooms n1 and n2.
  1658.  
  1659.         HasVisitedRoom {num1}    --   Returns TRUE or FALSE depending upon
  1660.                                       whether player has visited room num1.
  1661.  
  1662.         EnteredOBJECT {none}     --   Returns TRUE or FALSE depending upon
  1663.                                       whether current command has a valid
  1664.                                       OBJECT.
  1665.  
  1666.    New Action Tokens:
  1667.  
  1668.         ToggleMovable {num1}     --   Toggles "movable status" for NOUN
  1669.                                       num1.
  1670.  
  1671.         ChangePoints {itm} {pts} --   Changes point value of item (ROOM,
  1672.                                       NOUN or CREATURE) to pts points.
  1673.  
  1674.         DestroyOBJECT {none}     --   Destroys OBJECT (if any)
  1675.  
  1676.         GetVariable {num1}       --   Gets variable num1 (1 to 25) from
  1677.                                       player's keyboard input.
  1678.  
  1679.         SetVariableToTime {num1} --   Sets variable num1 to the current
  1680.                                       time.
  1681.  
  1682.                                      160
  1683.  
  1684.  
  1685.  
  1686.  
  1687.         SetTimeToVariable {num1} --   Sets the current time to variable
  1688.                                       num1.
  1689.  
  1690.         AddToTime {num1} -- This adds num1 to the current time.  Note: For
  1691.                             1 hour and 10 minutes, you would have num1 set
  1692.                             to 110 -- not 70.
  1693.  
  1694.  
  1695.    SUMMARY OF ALL NEW MASTER'S EDITION META-COMMAND TOKENS
  1696.  
  1697.    New Conditional Tokens:
  1698.  
  1699.         NOUNIsMan {none}        --    This is a conditional meta-command
  1700.                                       and will return a TRUE or FALSE
  1701.                                       depending upon whether the NOUN is a
  1702.                                       creature and a Man
  1703.  
  1704.         NOUNIsWoman {none}      --    This is a conditional meta-command
  1705.                                       and will return a TRUE or FALSE
  1706.                                       depending upon whether the NOUN is a
  1707.                                       creature and a Woman
  1708.  
  1709.         NOUNIsThing {none}      --    This is a conditional meta-command
  1710.                                       and will return a TRUE or FALSE
  1711.                                       depending upon whether the NOUN is a
  1712.                                       creature and a Thing
  1713.  
  1714.         OBJECTIsMan {none}      --    This is a conditional meta-command
  1715.                                       and will return a TRUE or FALSE
  1716.                                       depending upon whether the OBJECT is
  1717.                                       a creature and a Man
  1718.  
  1719.         OBJECTIsWoman {none}    --    This is a conditional meta-command
  1720.                                       and will return a TRUE or FALSE
  1721.                                       depending upon whether the OBJECT is
  1722.                                       a creature and a Woman
  1723.  
  1724.         OBJECTIsThing {none}    --    This is a conditional meta-command
  1725.                                       and will return a TRUE or FALSE
  1726.                                       depending upon whether the OBJECT is
  1727.                                       a creature and a Thing
  1728.  
  1729.         SongPlaying {none}      --    This is a conditional meta-command
  1730.                                       and will return a TRUE or FALSE
  1731.                                       depending upon whether there is a
  1732.                                       song playing or not at the current
  1733.                                       moment.
  1734.  
  1735.         SoundIsON {none}         --   This is a conditional meta-command
  1736.                                       and will return a TRUE or FALSE
  1737.                                       depending upon whether the player has
  1738.                                       the sound option ON.
  1739.  
  1740.                                      161
  1741.  
  1742.  
  1743.  
  1744.  
  1745.         DirectionOK {none}       --   Returns TRUE or FALSE depending upon
  1746.                                       current direction leading to another
  1747.                                       valid location.  Will return FALSE if
  1748.                                       current verb is not a direction.
  1749.  
  1750.         DirectionIS {num1}       --   Returns TRUE or FALSE depending upon
  1751.                                       current direction being num1 (i.e.,
  1752.                                       num1 = 1 for north, etc.  Will return
  1753.                                       FALSE if current verb is not a
  1754.                                       direction.
  1755.  
  1756.         BetweenRooms {n1} (n2}   --   Returns TRUE or FALSE depending upon
  1757.                                       current location being between (and
  1758.                                       including) rooms n1 and n2.
  1759.  
  1760.         HasVisitedRoom {num1}    --   Returns TRUE or FALSE depending upon
  1761.                                       whether player has visited room num1.
  1762.  
  1763.         EnteredOBJECT {none}     --   Returns TRUE or FALSE depending upon
  1764.                                       whether current command has a valid
  1765.                                       OBJECT.
  1766.  
  1767.         TimeGT {num1}           --    This is a conditional meta-command
  1768.                                       and will return a TRUE or FALSE
  1769.                                       depending upon whether the current
  1770.                                       time is greater than num1.
  1771.  
  1772.         TimeLT {num1}           --    This is a conditional meta-command
  1773.                                       and will return a TRUE or FALSE
  1774.                                       depending upon whether the current
  1775.                                       time is less than num1.
  1776.  
  1777.         Room_PixHere {num1}     --    This is a conditional meta-command
  1778.                                       and will return a TRUE or FALSE
  1779.                                       depending on whether the num1
  1780.                                       ROOM_PIX picture may be viewed in the
  1781.                                       current room.
  1782.  
  1783.    New Action Tokens:
  1784.  
  1785.         LoadFont {num1}          --   Loads and uses font num1 (from FONT
  1786.                                       list)
  1787.  
  1788.         ShowPicture {num1}       --   Shows "global" picture num1 (from 1
  1789.                                       to 250)
  1790.  
  1791.         IfYShowPicture {num1}    --   Shows "global" picture num1 (from 1
  1792.                                       to 250) if Player answers YES to
  1793.                                       query about showing the picture.
  1794.  
  1795.         ShowROOM_PIX {num1}      --   Shows "ROOM_PIX" picture num1 (from 1
  1796.                                       to 30)
  1797.  
  1798.                                      162
  1799.  
  1800.  
  1801.  
  1802.  
  1803.         IfYShowROOM_PIX {num1}   --   Shows "ROOM_PIX" picture num1 (from 1
  1804.                                       to 30) if Player answers YES to query
  1805.                                       about showing the picture.
  1806.  
  1807.         PlaySong {num1}          --   Plays the song/sound file num1 once. 
  1808.                                       The standard mode is to play the song
  1809.                                       until it is finished and then to
  1810.                                       stop.
  1811.  
  1812.         RepeatSong {num1}        --   Plays the song/sound file num1
  1813.                                       repeatedly.  When the song is
  1814.                                       finished it would automatically be
  1815.                                       started again.
  1816.  
  1817.         PlayRandom {num1} {num2} --   Plays a random song/sound file
  1818.                                       between num1 and num2 once.  The
  1819.                                       song/sound will be played until it is
  1820.                                       finished and then it will stop.
  1821.  
  1822.         EndRepeatSong {none}     --   Causes the current song/sound to stop
  1823.                                       when it is finished, i.e., the
  1824.                                       repeating feature would be turns off.
  1825.  
  1826.         StopSong {none}          --   Causes the current song/sound to stop 
  1827.                                          immediately.  Once the StopSong
  1828.                                       command has been given, the song can
  1829.                                       not be resumed without giving a new
  1830.                                       PlaySong or RepeatSong token.
  1831.  
  1832.         SuspendSong {none}       --   Causes the current song/sound to stop 
  1833.                                       immediately -- but it can be resumed
  1834.                                       at the current spot at a later time.
  1835.  
  1836.         ResumeSong {none}        --   Resumes playing a song that had been
  1837.                                       suspended by a SuspendSong token at
  1838.                                       the spot where it was suspended.
  1839.  
  1840.         ToggleMovable {num1}     --   Toggles "movable status" for NOUN
  1841.                                       num1.
  1842.  
  1843.         ChangePoints {itm} {pts} --   Changes point value of item (ROOM,
  1844.                                       NOUN or CREATURE) to pts points.
  1845.  
  1846.         DestroyOBJECT {none}     --   Destroys OBJECT (if any)
  1847.  
  1848.         GetString {num1}         --   Gets string num1 (1 to 25) from
  1849.                                       player's  keyboard input.  String
  1850.                                       length will be truncated to 15
  1851.                                       characters if necessary.
  1852.  
  1853.         GetVariable {num1}       --   Gets variable num1 (1 to 25) from
  1854.                                       player's keyboard input.
  1855.  
  1856.                                      163
  1857.  
  1858.  
  1859.  
  1860.  
  1861.         SetVariableToTime {num1} --   Sets variable num1 to the current
  1862.                                       time.
  1863.  
  1864.         SetTimeToVariable {num1} --   Sets the current time to variable
  1865.                                       num1.
  1866.  
  1867.         SetTime {num1}           --   Sets the current time to num1.
  1868.  
  1869.         SetDeltaTime {num1}      --   Sets the current value of DELTA_TIME
  1870.                                       to num1.
  1871.  
  1872.         AddToTime {num1}           -- This adds num1 to the current time. 
  1873.                                       Note: For 1 hour and 10 minutes, you
  1874.                                       would have num1 set to 110 -- not 70.
  1875.  
  1876.         DoSubroutine {num1}      --   Causes the meta-commands in
  1877.                                       Subroutine num1 to be executed
  1878.  
  1879.         Return                   --   Causes an immediate exit from the
  1880.                                       currently executing Subroutine (if
  1881.                                       any), i.e., meta-command processing
  1882.                                       would resume immediately after the
  1883.                                       DoSubroutine token that called the
  1884.                                       Subroutine in the first place.  Each  
  1885.                                       Subroutine must have at least one
  1886.                                       "Return"!
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.                                      164
  1915.  
  1916.  
  1917.  
  1918.  
  1919.    APPENDIX A:  AGT ERROR MESSAGES
  1920.  
  1921.  
  1922.    ERRORS DURING GAME COMPILATION
  1923.  
  1924.    Error: "VERB is not a valid verb" -- VERB is not a standard AGT verb, 
  1925.    nor has it been defined (so far) as a synonym for another verb.  This
  1926.    error is in the *.AGT file.
  1927.  
  1928.    Error: ">>> Ignored: ASCII text" -- ASCII text encountered during
  1929.    reading of  *.AGT file.  Text does not correspond to anything normally
  1930.    expected in  this file.  Probably, just a comment by the game designer.
  1931.  
  1932.    Error: "Too many commands -- Processing halted" -- AGT only allows 900
  1933.    meta-commands.  The current meta-command being read from the  *.AGT file
  1934.    would have been number 901.  This is a game designer error.
  1935.  
  1936.    Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL VERB" -- This
  1937.    meta-command has a VERB which the parser does not recognize as a
  1938.    standard AGT verb, a custom verb or a synonym for a valid verb.  This is
  1939.    a game designer error.
  1940.  
  1941.    Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL NOUN or OBJECT" -- This
  1942.    meta-command has a NOUN or OBJECT which the parser does not recognize as
  1943.    a standard AGT noun or a synonym for a valid noun.  This is a game
  1944.    designer error.
  1945.  
  1946.    Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL TOKEN" -- This meta-com-
  1947.    mand has something in it that the program does not recognize as a token. 
  1948.    Probably, a game designer comment or a spelling mistake.
  1949.  
  1950.  
  1951.    ERRORS DURING RESTORING GAME
  1952.  
  1953.    Error: "File not found, can't restore FileName" -- FileName is not on
  1954.    disk.
  1955.  
  1956.  
  1957.    ERRORS DURING GAME PLAY
  1958.  
  1959.    Error: "I don't understand VERB as a verb." -- Try another VERB. 
  1960.    Probably a spelling mistake.
  1961.  
  1962.    Error: "I don't understand NOUN as a noun." -- Try another word to
  1963.    identify this noun.  May be a noun that does not really play a
  1964.    significant part in the game, i.e., something described in general in
  1965.    the room description, but not a separate object in the room.  May also
  1966.    be a spelling mistake.
  1967.  
  1968.    Error: "I don't understand PREP as a preposition." -- Try another
  1969.    preposition.  May be a spelling mistake.
  1970.  
  1971.  
  1972.                                      165
  1973.  
  1974.  
  1975.  
  1976.  
  1977.    Error: "I don't understand OBJECT as the object of a preposition." --
  1978.    Try another word to identify this noun.  May be a noun that does not
  1979.    really play a significant part in the game, i.e., something described in
  1980.    general in the room description, but not a separate object in the room. 
  1981.    May also be a spelling mistake.
  1982.  
  1983.    Error: "Which NOUN do you mean, the ADJ1 NOUN or the ADJ2 NOUN?" -- Two
  1984.    or more nouns with the same name are present in the current room. 
  1985.    Specify the one you mean by some phrase that includes the appropriate
  1986.    NOUN's adjective.
  1987.  
  1988.    Error :"I don't understand WORD as either a verb or a noun".  Try
  1989.    another word to convey what you mean.  May be a spelling mistake.
  1990.  
  1991.    Error: "You need a preposition and an object whenever you try to VERB a
  1992.    NOUN."  Some verbs require prepositions and objects in order to work
  1993.    properly.  For example, PLACE BOOK ON THE TABLE is fine, but PLACE BOOK
  1994.    by itself will generate this error.
  1995.  
  1996.    Error: "Too many words in command".  AGT allows for a maximum of 12
  1997.    words in each part of a compound command (i.e., between AND's and
  1998.    THEN's).  Re-phrase your command to be more succinct.
  1999.  
  2000.  
  2001.    TURBO PASCAL RUN-TIME ERRORS
  2002.  
  2003.    In addition to the above errors which are generated by AGT, it is
  2004.    possible to get errors from Turbo Pascal -- the language in which AGT is
  2005.    written.  Specifically, you might get the following two run-time errors
  2006.    from Turbo:
  2007.  
  2008.         101  "Disk Write Error" -- You would get this error when there is
  2009.              no more room on your disk, i.e., it is full.  This situation
  2010.              might occur when (1) you are compiling a game and there is not
  2011.              enough room for the various files being created by the
  2012.              MCOMPILE program (i.e., *.D$$, *.DA1, etc) or (2) you trying
  2013.              to save a game and there is not enough room on the disk for
  2014.              the data being saved.
  2015.  
  2016.         201  "Out of Range Error" -- You would get this error if your game
  2017.              source code has a value that is out of range -- like a
  2018.              "illegal" negative number or a label that is too long.
  2019.  
  2020.         203  "Heap Overflow Error" -- You would get this error if your
  2021.              computer does not have enough internal memory.  AGT requires a
  2022.              computer with at least 512K of available memory -- after
  2023.              counting for all of the memory resident or TSR programs.
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.                                      166
  2031.  
  2032.  
  2033.  
  2034.  
  2035.    APPENDIX B:  RECOMMENDED SHAREWARE UTILITIES
  2036.  
  2037.  
  2038.    PIANOMAN 4.0
  2039.  
  2040.    PIANOMAN lets you play the keyboard of an IBM-PC (or close compatible)
  2041.    like an electronic piano.  The keys sound a tone as long as you hold
  2042.    them down, and stop when you release them.  You can record and edit
  2043.    music, insert and delete notes, adjust pitch and length, make global
  2044.    changes, and save/retrieve files.
  2045.  
  2046.    To register PIANOMAN, send $25 to:
  2047.  
  2048.         Support Group Inc.
  2049.         P.O. Box 130
  2050.         McHenry, MD  21541
  2051.  
  2052.    You may also register using MasterCard or VISA by calling 800/USA-GROUP
  2053.    or 301/889-7893.
  2054.  
  2055.  
  2056.    MELODY MASTER
  2057.  
  2058.    Melody Master lets you create, save, edit, and play music on a PC.  The
  2059.    easy-to-use graphic interface contains a staff on which basic music
  2060.    notation is placed and includes on-screen help.  You can configure
  2061.    tempos, and note-lengths and modify the program's colors.  Melody Master
  2062.    will also help you to insert music in your own programs whether you
  2063.    program in C, Pascal, BASIC or in DOS batch files.  You don't have to
  2064.    know how to write music - Melody Master includes a large collection of
  2065.    ready-to-play melodies!  Supports Hercules, CGA, EGA and VGA. ASP
  2066.    member.
  2067.  
  2068.    Registration Information:
  2069.    -------------------------
  2070.  
  2071.         Regular             -  $19
  2072.         Commercial License  -  $49
  2073.  
  2074.    Send registrations to:
  2075.  
  2076.         Shareable Software International
  2077.         PO Box 59102
  2078.         Schaumburg, IL  60159
  2079.  
  2080.         800-622-2793 (orders only)
  2081.         708-397-1221 (voice)
  2082.         708-397-0381 (fax)
  2083.         215-623-6203 (BBS, Join Conference 77)
  2084.         CompuServe:  76226,2652
  2085.         Internet:    76226.2652@compuserve.com
  2086.  
  2087.  
  2088.                                      167
  2089.  
  2090.  
  2091.  
  2092.  
  2093.    GRAPHIC WORKSHOP
  2094.  
  2095.    Graphic workshop is a simple, menu driven environment which will let you
  2096.    perform the following operations on graphic files:
  2097.  
  2098.         -    View them.
  2099.         -    Convert between any two formats (with a few restrictions).
  2100.         -    Print them to any LaserJet Plus compatible or PostScript laser
  2101.              and many dot matrix printers.  Graphic Workshop can print
  2102.              color pictures to color PostScript and inkjet printers.
  2103.         -    Dither the color ones to black and white.
  2104.         -    Reverse them.
  2105.         -    Rotate and flip them.
  2106.         -    Scale them.
  2107.         -    Reduce the number of colors in them and do color dithering.
  2108.         -    Sharpen, soften and otherwise wreak special effects on them.
  2109.         -    Crop them down to smaller files
  2110.         -    Scan in completely new files, assuming that you have a
  2111.              supported scanner.
  2112.         -    Adjust the brightness and color balance of the color ones.
  2113.  
  2114.    Versions of Graphics Workshop are available for both DOS and WINDOWS.
  2115.    Using Graphic Workshop, you can have your image files in the formats
  2116.    that your software recognizes, all without keeping track of numerous
  2117.    funky utilities. In addition, using the halftoning and dithering
  2118.    facilities of Graphic Workshop, you can convert full color digitized
  2119.    photographs for use as superb black and white clip art, suitable for
  2120.    inclusion in your documents.
  2121.  
  2122.    You can register Graphic Workshop by send $40.00 to:
  2123.  
  2124.         Alchemy Mindworks Inc.
  2125.         P.O. Box 500
  2126.         Beeton, Ontario
  2127.         L0G 1A0
  2128.         Canada
  2129.  
  2130.  
  2131.    IMPROCES
  2132.  
  2133.    IMPROCES is the DOS-only "jack of all trades" for PC graphics.  It has
  2134.    many features: Image contrast enhancement, Histograms, Sharpening by
  2135.    convolution, Custom filters, Full control of the VGA palette, Clipboard,
  2136.    Five stroke Fonts in five sizes and the ability to import bit-map fonts,
  2137.    FAT BIT editor, many drawing tools, flips, mirror, Color Cycling, Plasma
  2138.    and terrain fractals, UNDO, XMS/EMS support, edit up to five images at
  2139.    one time, etc...  IMPROCES can use a wide variety of SVGA video cards in
  2140.    resolutions up to 1024x768x256. The IMPROCES package is incredibly fast
  2141.    and powerful, but it is also incredibly easy to use.
  2142.  
  2143.    You may register IMPROCES with your Master Card or VISA.  There are
  2144.    three ways to do this:
  2145.  
  2146.                                      168
  2147.  
  2148.  
  2149.  
  2150.  
  2151.    Ted Gruber Software:       
  2152.    VOICE: (702)735-1980       Monday - Friday, 10am - 5pm PST
  2153.  
  2154.    Software Excitement!:
  2155.    VOICE: (800)444-5457       24 hours a day.       
  2156.  
  2157.    IMPORTANT: Be sure to *SPECIFY* that you want to order the *REGISTERED*
  2158.    version of IMPROCES.  Software Excitement! is a shareware distributor
  2159.    and an authorized distributor of the shareware version of IMPROCES, so
  2160.    if you don't specify the registered version, they might send you a copy
  2161.    of the unregistered version!
  2162.  
  2163.    COMPUSERVE: Type GO SE to visit the Software Excitement! on-line store.
  2164.  
  2165.    Specify floppy disk format, 5 1/4" 360K or 3 1/2" 1.44 meg.  Your card
  2166.    will be charged $25 ($35 outside of North America) and IMPROCES will be
  2167.    shipped as soon as possible.
  2168.  
  2169.    If you are using a check or money order, mail your registration to
  2170.    directly to the author of IMPROCES at: ($25, $35 outside of North
  2171.    America)
  2172.  
  2173.         John Wagner
  2174.         6161 El Cajon Blvd, Suite B-246
  2175.         San Diego, CA 92115
  2176.  
  2177.    California residents, please add the appropriate sales tax.  Outside of
  2178.    the United States and Canada, registration is $35.  Please ensure that
  2179.    your check is in U.S. dollars, _DRAWN_ on a U.S. Bank.
  2180.  
  2181.  
  2182.    PAINT SHOP PRO
  2183.  
  2184.    PAINT SHOP PRO is a wonderful graphics utility that runs under WINDOWS. 
  2185.    It does everything that GRAPHICS WORKSHOP and IMPROCES do (see above).
  2186.    PAINT SHOP PRO is available for $49 from:
  2187.  
  2188.         JASC, Inc.
  2189.         17743 Evener Way
  2190.         Eden Prairie, MN  55346
  2191.         (612) 934-7117
  2192.     
  2193.  
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.  
  2203.  
  2204.                                      169
  2205.  
  2206.  
  2207.  
  2208.  
  2209.    APPENDIX C:  ANNUAL AGT CONTEST
  2210.  
  2211.  
  2212.    Each year, Softworks sponsors an annual contest for the best computer
  2213.    text adventure game developed using the Adventure Game Toolkit (AGT).
  2214.  
  2215.    The Annual Adventure Game Toolkit game writing contest offers a grand
  2216.    prize of $100 for the best game submitted.  Additional prizes may be
  2217.    added if the judges decide that more than one entry is outstanding. 
  2218.    game writers, including the contest winner(s), will also retain all
  2219.    rights to their games.
  2220.  
  2221.    "The main purpose of this contest is to encourage people to share the
  2222.    games they've written using the Adventure Game Toolkit," said Mark
  2223.    Welch, one of two co-authors of the program.  "A lot of people start to
  2224.    write a game, and spend quite a few hours on it, but stop before they
  2225.    really finished the game, or before it's really playable," said Welch. 
  2226.    "We are hoping that the contest will inspire people to create
  2227.    full-featured, playable games that can be enjoyed by other adventure
  2228.    game fans."
  2229.  
  2230.  
  2231.    PREVIOUS CONTESTS
  2232.  
  2233.    Softworks has sponsored three prior adventure game writing contests. 
  2234.    The winner of the first contest was "Alice" written by Douglas Asherman
  2235.    of Oakland, California.  Alice put the player in the role of Alice in
  2236.    Wonderland, meeting many of the same characters described in Lewis
  2237.    Carroll's 19th-century book while also adding some humorous 20th-century
  2238.    perspective.
  2239.  
  2240.    The 1988 contest winner was "A Dudley Dilemma" by Lane Barrow, a Ph.D
  2241.    candidate at Harvard.  In this game, the player assumes the role of a
  2242.    Harvard student in his/her quest for knowledge, adventure and a diploma. 
  2243.    Along the way, the player experiences a student sit-in and meets
  2244.    panhandlers, MIT students and other bizarre characters roaming Harvard
  2245.    Square.
  2246.  
  2247.    "Son of Stagefright" by Mike McCauley was the 1989 winner.  In this
  2248.    game, you play the role of an actor (or actress) trying to get out of an
  2249.    old, abandoned theater.  This is an adventure game in three "Acts",
  2250.    where each Act has a different theme and a different challenge.  The
  2251.    game is fun(ny), frightening and very clever.
  2252.  
  2253.    "Crime to the Ninth Power" by Patrick Farley was the 1990 contest
  2254.    winner.  In this game, the player helps Cliff Diver, a San Francisco
  2255.    private investigator escape from the deadly milieu of the Zamboni crime
  2256.    family's secret headquarters.  Cliff Diver is cut from the same cloth as
  2257.    such famous PI's as Dashiell Hammett's Sam Spade and Raymond Chandler's
  2258.    Philip Marlowe.
  2259.  
  2260.  
  2261.  
  2262.                                      170
  2263.  
  2264.  
  2265.  
  2266.  
  2267.    In 1991, the contest had two games that tied for 1st place: "CosmosServe
  2268.    -- An Adventure Game for the BBS-Enslaved" by Judith Pintar, and "The
  2269.    Multi-Dimensional Thief" by Joel Finch.  In "CosmoServe," your world and
  2270.    your adventure are set inside a BBS (complete with sound effects for
  2271.    logging on, switching the computer ON and OFF, etc.)  It is a very, very
  2272.    original, innovative and unusual game!  In "The Multi-Dimensional
  2273.    Thief," you are a thief.  Naturally, you aspire to join the largest and
  2274.    most prestigious of organized thieving bodies, the Multi-Dimensional
  2275.    Thieves' Guild.  All you have to do is pass a simple test -- escape from
  2276.    a specially prepared set of rooms which have been "borrowed" from other
  2277.    universes and filled with strange items -- including the infamous
  2278.    "portable hole."  This game is filled with wonderful puzzles and will
  2279.    remind you of Infocom's finest.
  2280.  
  2281.  
  2282.    CONTEST DETAILS
  2283.  
  2284.    To be eligible for the contest, entries must be designed using the
  2285.    Adventure Game Toolkit, and must not have been publicly released before
  2286.    January 1st of the contest year.  Contest entries must be postmarked by
  2287.    December 31st of the contest year and received by Softworks no later
  2288.    than January 15 of the following year.  For example, the 1993 contest
  2289.    will consider games written between January 1, 1993 and December 31,
  2290.    1993 and received by Softworks no later than January 15, 1994.
  2291.  
  2292.    Judging begins approximately February 1st and the winner is announced in
  2293.    the spring following the contest year.  The judges consider each game's
  2294.    originality, cleverness, fiendishness, humor, raw cunning and
  2295.    professionalism in arriving at their decision about the contest's
  2296.    winner.
  2297.  
  2298.    Entries must be submitted on disks for the IBM PC (or compatible
  2299.    computer), or for the Apple Macintosh, the Amiga or for the Atari ST
  2300.    computer.  AGT source code for the game must be provided, but will not
  2301.    be publicly disclosed without the consent of the author.  In addition to
  2302.    the AGT source code, each entry must be accompanied by a game "walk-
  2303.    thru" or solution to be used by the contest judges.  A map of the game
  2304.    would also be very helpful, but is not required.
  2305.  
  2306.    No purchase or fee is required to enter.  Game authors need not be
  2307.    registered users of AGT to enter the contest.  Game writers, including
  2308.    the contest winner(s), will also retain all rights to their games --
  2309.    including the right to copyright and sell their games -- if they wish. 
  2310.    However, it is "customary" for the contest game authors to allow their
  2311.    games' source code to be distributed (to registered AGT user only) -- if
  2312.    their games are judged as one of the "Best of the Contest."
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.  
  2320.                                      171
  2321.  
  2322.  
  2323.  
  2324.  
  2325.    APPENDIX D:  ABOUT THE AUTHOR
  2326.  
  2327.  
  2328.    David Malmberg has been active in the world of personal computer since
  2329.    1977.  He is the author or co-author of seven published software
  2330.    products.  His most recent software product is P-ROBOTS, which is also
  2331.    available from Softworks.
  2332.  
  2333.    His most successful products were the Turtle Graphics series published
  2334.    by HESware.  These two programs have sold over 80,000 copies world-wide,
  2335.    were translated into Spanish, and won two Consumer Electronic Software
  2336.    Showcase awards as some of the best software of 1983.  These programs
  2337.    are widely used in schools to teach computer literacy to children and
  2338.    other computer novices.
  2339.  
  2340.    Dave has also published numerous articles and programs in various
  2341.    computer magazines.  He has been a Contributing Editor of both
  2342.    COMPUTE!'s HOME & EDUCATIONAL COMPUTING and MICRO magazines.  He was one
  2343.    of the principal authors of COMPUTE!'s FIRST BOOK OF VIC, the best
  2344.    selling computer book of 1983.  He has written regular columns on
  2345.    educational uses of computers and on LOGO for COMMODORE and POWER/PLAY
  2346.    magazines.
  2347.  
  2348.  
  2349.  
  2350.    June 1993
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.                                      172
  2379.  
  2380.