home *** CD-ROM | disk | FTP | other *** search
/ Fatal Distractions! / fataldistractions.bin / appndxa / masters / agtlabel.doc < prev    next >
Text File  |  1992-01-03  |  24KB  |  610 lines

  1.  
  2.                                     AGTLABEL                                    AGTLABEL
  3.  
  4.                    The Adventure Game Toolkit Label Generator                   The Adventure Game Toolkit Label Generator
  5.                            Version 1.02; July 12, 1991
  6.  
  7.                                 by Bill Martinson
  8.  
  9.    The Adventure Game Toolkit Label Generator (AGTLABEL), including all source
  10.    code, object code, and manuals on paper or on disk, is Copyright 1991 by
  11.    Bill Martinson Software.  AGTLABEL is distributed by Softworks.
  12.  
  13.    AGTLABEL is provided to registered users of the Adventure Game Toolkit
  14.    (AGT), and as such is subject to the copyright, warranty, and license
  15.    conditions of AGT.  Specifically, all such conditions that apply to
  16.    COMPILE.EXE shall be construed as applying also to AGTLABEL.EXE.
  17.  
  18.  
  19.    INTRODUCTION
  20.  
  21.    AGTLABEL is a companion program for AGTNUM.  It takes an adventure game in
  22.    standard AGT format (with or without AGTIF commands) and converts it to
  23.    AGTNUM format, by generating AGTNUM-style labels for as many numbers as
  24.    possible.  In fact, you might say that AGTLABEL does just the opposite of
  25.    what AGTNUM does.
  26.  
  27.    This document uses terminology defined in the documentation for AGTNUM, and
  28.    assumes a certain level of familiarity with both AGT and AGTNUM.
  29.  
  30.  
  31.    OVERVIEW
  32.  
  33.    The primary job of AGTLABEL is to convert existing AGT games to AGTNUM
  34.    format.  It is not intended to become a regular part of your game
  35.    development cycle, but rather to be a one-time tool that constructs labels
  36.    for an existing AGT game.  Once you have run AGTLABEL on an adventure game,
  37.    you can put it (and your old source files) on the shelf; the resultant .AGT
  38.    file will be your new original source file.
  39.  
  40.    The usual sequence goes like this:
  41.  
  42.         A.   Make backup copies of your original AGT files (.DAT, .CMD, .MSG,
  43.              .TTL, and .INS), just in case.
  44.  
  45.         B.   Use AGTLABEL to create a single .AGT source file from those
  46.              files.
  47.  
  48.         C.   Examine the new file carefully to ensure that the conversion was
  49.              successful.
  50.  
  51.         D.   Archive the old AGT files and use the new file in conjunction
  52.              with AGTNUM for all subsequent game modifications.
  53.  
  54.    For example, the following series of DOS commands could be used to convert
  55.    the  Colossal Cave  adventure:
  56.  
  57.         COPY CAVE.* C:\BACKUP               (back up CAVE.DAT, CAVE.CMD, etc.)
  58.         AGTLABEL CAVE                                        (create CAVE.AGT)
  59.         EDIT CAVE.AGT                                  (verify the conversion)
  60.         AGTNUM CAVE      (recreate CAVE.DAT, CAVE.CMD, etc. this clobbers your
  61.                  old original files so be sure you really made those backups!)
  62.         COMPILE CAVE                       (generate the final adventure game)
  63.  
  64.    AGTLABEL also has two other potential uses:  First, it can be used as a
  65.    final quality check on a completed game.  Carefully back up your .AGT file
  66.    and run AGTLABEL on the intermediate files using the +Test option.  This
  67.    can identify some (but not all) errors such as using a room label where a
  68.    noun number is expected, not having enough numeric parameters for a meta-
  69.    command token, or forgetting the final number sign (#) on a reference such
  70.    as #VAR9#.
  71.  
  72.    Second, if something horrible should happen to your original .AGT file,
  73.    AGTLABEL can help you reconstruct it from the intermediate files.  (Don't
  74.    try this little exercise on purpose, though, because the conversion isn't
  75.    perfect.  AGTLABEL cannot create macros, enumerations, or short-cut
  76.    messages, and it can't always tell whether a number should be converted to
  77.    a label or not.)
  78.  
  79.  
  80.    LABELS
  81.  
  82.    AGTLABEL automatically generates labels for all room, noun, creature,
  83.    message, question, flag, counter, and variable references.  The following
  84.    describes the various methods used to generate labels.
  85.  
  86.    ROOM labels are created using the first five words of description line,
  87.    e.g.,
  88.  
  89.     ROOM 17                            ROOM [Witt's End]
  90.     Witt's End                         Witt's End
  91.     END_ROOM                           END_ROOM
  92.  
  93.     ROOM 18                            ROOM [At a fork in the]
  94.     At a fork in the brick road        At a fork in the brick road
  95.     END_ROOM                           END_ROOM
  96.  
  97.    NOUN and CREATURE labels are created by combining the adjective with the
  98.    noun's or creature's name , e.g.,
  99.  
  100.     NOUN 235                           NOUN [red wand]
  101.     wand                               wand
  102.     red                                red
  103.     There's a red wand here.           There's a red wand here.
  104.  
  105.     CREATURE 316                       CREATURE [BIG BEAR]
  106.     BEAR                               BEAR
  107.     BIG                                BIG
  108.     There's a big bear here.           There's a big bear here.
  109.  
  110.    MESSAGE labels are created using the first five (non-blank) words of the
  111.    message, e.g.,
  112.  
  113.     MESSAGE 109                         MESSAGE [the wolf doesn't want your]
  114.     The wolf doesn't want your dumb     The wolf doesn't want your dumb
  115.     old sandwich.                       dumb old sandwich.
  116.     END_MESSAGE                         END_MESSAGE
  117.  
  118.     MESSAGE 110                         MESSAGE [DO NOT ENTER!]
  119.  
  120.         DO NOT ENTER!                       DO NOT ENTER!
  121.  
  122.     END_MESSAGE                         END_MESSAGE
  123.  
  124.    QUESTION labels are created using the first five words of the question,
  125.     e.g.,
  126.  
  127.     QUESTION 5 How is a pig made blue?  QUESTION [How is a pig made] How is...
  128.  
  129.     QUESTION 6 Who are you?             QUESTION [Who are you?] Who are you?
  130.  
  131.    FLAG, COUNTER and VARIABLE labels are all created using the item name plus
  132.    the item number, e.g.,
  133.  
  134.     TurnFlagON 7                        TurnFlagON [Flag 7]
  135.  
  136.     It was on for #CTR5# turns.         It was on for #CTR[Counter 5]# turns.
  137.  
  138.     VariableLT 22 150                   VariableLT [Variable 22] 150
  139.  
  140.    In addition, AGTLABEL makes use of the predefined labels found in
  141.    STDDEFS.AGT:
  142.  
  143.         [Nowhere]      [Carried]       [Worn]
  144.         [Nothing]      [Any Light]
  145.         [Debug]
  146.         [North]        [South]         [East]        [West]
  147.         [NorthEast]    [NorthWest]     [SouthEast]   [SouthWest]
  148.         [Up]           [Down]          [Enter]       [Exit]
  149.  
  150.    Before a generated label is used, AGTLABEL may modify it in a couple of
  151.    ways:
  152.  
  153.         (1)  If the label includes any opening or closing label delimiters as
  154.              part of the text, those characters are changed to blanks.
  155.  
  156.         (2)  If the label is identical to a previously generated label, the
  157.              code  (B)  is appended to the new label.  If there is also a B
  158.              label already in existence, the new label is  bumped  up to C,
  159.              and so on.  After Z, a label is bumped to AA, then AB, etc.
  160.  
  161.    The following presents some examples of these label modifications.
  162.  
  163.  
  164.          Original File                   Output File
  165.  
  166.          ROOM 93                         ROOM [The End of the  Second tunnel]
  167.          The End of the [Second] Tunnel  The End of the [Second] Tunnel
  168.          END_ROOM                        END_ROOM
  169.  
  170.          ROOM 101                        ROOM [Twisty Little Passage]
  171.          Twisty Little Passage           Twisty Little Passage
  172.          END_ROOM                        END_ROOM
  173.  
  174.          ROOM 102                        ROOM [Twisty Little Passage (B)]
  175.          Twisty Little Passage           Twisty Little Passage
  176.          END_ROOM                        END_ROOM
  177.  
  178.          ROOM 103                        ROOM [Twisty Little Passage (C)]
  179.          Twisty Little Passage           Twisty Little Passage
  180.          END_ROOM                        END_ROOM
  181.  
  182.          ...                           ...
  183.  
  184.          ROOM 126                        ROOM [Twisty Little Passage (Z)]
  185.          Twisty Little Passage           Twisty Little Passage
  186.          END_ROOM                        END_ROOM
  187.  
  188.          ROOM 127                        ROOM [Twisty Little Passage (AA)]
  189.          Twisty Little Passage           Twisty Little Passage
  190.          END_ROOM                        END_ROOM
  191.  
  192.          ROOM 128                        ROOM [Twisty Little Passage (AB)]
  193.          Twisty Little Passage           Twisty Little Passage
  194.          END_ROOM                        END_ROOM
  195.  
  196.  
  197.    For each flag, counter, and variable label generated, AGTLABEL will write a
  198.    definition line at the end of the .AGT file (see the next section).
  199.  
  200.  
  201.    STRUCTURE OF THE .AGT FILE
  202.  
  203.    The .AGT file produced by AGTLABEL will have the following kind of
  204.    structure:
  205.  
  206.          TITLE
  207.          The Arachnoid Adventure
  208.          By Ernie Eightlegs
  209.          END_TITLE
  210.  
  211.          INSTRUCTIONS
  212.          Here's whatcha do ta play...
  213.          END_INSTRUCTIONS
  214.  
  215.          #INCLUDE stddefs.agt
  216.  
  217.          ROOM [The dark hallway]
  218.           ...
  219.          ROOM_DESCR [The dark hallway]
  220.           ...
  221.          HELP [The dark hallway]
  222.           ...
  223.          SPECIAL [The dark hallway]
  224.           ...
  225.  
  226.          NOUN [dusty book]
  227.           ...
  228.          NOUN_DESCR [dusty book]
  229.           ...
  230.          TEXT [dusty book]
  231.           ...
  232.          TURN_DESCR [dusty book]
  233.           ...
  234.  
  235.          CREATURE [ugly troll]
  236.           ...
  237.          CREATURE_DESCR [ugly troll]
  238.           ...
  239.  
  240.          COMMAND EAT TROLL
  241.          Present [ugly troll]
  242.          FlagOn [Flag 7]
  243.          PrintMessage [You fish out your fork]
  244.          DoneWithTurn
  245.          END_COMMAND
  246.  
  247.           ...
  248.  
  249.          MESSAGE [You fish out your fork]
  250.          You fish out your fork from your knapsack and go to work on the
  251.          troll's leathery hide.  You've never tasted a moldy sailor's shoe
  252.          that's been soaking in the fish barrel, but you imagine that this is
  253.          what it would probably taste like.
  254.          END_MESSAGE
  255.  
  256.           ...
  257.  
  258.          FLAG [Flag 7]
  259.          COUNTER [Counter 5]
  260.          VARIABLE [Variable 22]
  261.  
  262.  
  263.    DEFINING YOUR OWN LABELS USING THE .OVR FILE
  264.  
  265.    If you don't like the labels AGTLABEL creates, you can make an  override
  266.    file  that overrides some or all of them.  Just supply a file with the same
  267.    name as your game and an extension of .OVR, and fill it with lines like
  268.    these:
  269.  
  270.         ROOM 2 grassy knoll
  271.         NOUN 232 phony plover egg
  272.         NOUN 250 magic dust
  273.         FLAG 1 player hungry
  274.         COUNTER 7 torch activity left
  275.         VARIABLE 18 gold coins in pouch
  276.  
  277.    (Don't use any label delimiters in this file.)  Since AGTLABEL normally
  278.    produces flag, counter, and variable labels that are totally
  279.    nondescriptive, this is a good way to make better labels for those items.
  280.  
  281.  
  282.    CUSTOMIZING AGTLABEL
  283.  
  284.    AGTLABEL uses many of the same options as AGTNUM.  They can be used in the
  285.    environment variable or on the command line, but because AGTLABEL has no
  286.    #OPTIONS directive they cannot be placed in the game files.  The following
  287.    AGTNUM options are available in AGTLABEL:
  288.  
  289.         Audit                                   (this option is on by default)
  290.         BigVersion
  291.         CaseSensitive
  292.         KeywordDelimiter  (used only to write the  #INCLUDE stddefs.agt  line)
  293.         LabelDelimiters
  294.         MessageDelimiters            (this option is not used in version 1.02)
  295.         Test
  296.         UserVersion
  297.         Video
  298.         Warnings
  299.         Xtension
  300.  
  301.    In addition, there is an +Overwrite option that causes AGTLABEL to
  302.    overwrite the .AGT file (if it already exists) without asking you for
  303.    confirmation.
  304.  
  305.  
  306.    THINGS TO WATCH FOR
  307.  
  308.    AGTLABEL is not perfect it can be fooled.  It performs relatively simple
  309.    pattern-matching in order to correlate labels and numbers.  For example, if
  310.    the number 5 appears in a game file, it might refer to a room, a message, a
  311.    question, a flag, a counter, a variable, or a ChangePassageway direction or
  312.    to none of these.  AGTLABEL decides what the 5 represents by examining the
  313.    first word on the line.  If the word is  ROOM , then this must be room
  314.    five.  If it's  VariableLT , then the 5 must be a variable reference, and
  315.    so on.
  316.  
  317.    This strategy works well most of the time, but there are some situations in
  318.    which it breaks down.  This is why it is very important to carefully
  319.    inspect the resulting game file after running AGTLABEL.  A few examples of
  320.    the kinds of things that need to be manually corrected are listed below.
  321.  
  322.    Variables Set To Item Numbers
  323.  
  324.    Consider this example:
  325.  
  326.         SetVariableTo 4 106             (* set variable 4 to the silly room *)
  327.         GoToVariableRoom 4                          (* go to the silly room *)
  328.  
  329.    AGTLABEL can figure out that the 4 represents a variable that's no problem. 
  330.    However, there's no simple way for it to know that the 106 should be
  331.    interpreted as a room.  Variables are general-purpose beasts, and the 106
  332.    might just as easily be 106 pieces of gold going into a pouch or 106 turns
  333.    of torch flammability remaining, or even message number 106:
  334.  
  335.         SetVariableTo 4 106
  336.         PrintVariableMessage 4
  337.  
  338.    It is advisable to use your text editor to search for all occurrences of
  339.    Variable in the output file, watching for numbers that should really be
  340.    labels.
  341.  
  342.    References to Nonexistent Items
  343.  
  344.    It is perfectly legal for a meta-command token to reference a non-existent
  345.    room, but since there is no ROOM definition, AGTLABEL does not define a
  346.    label for that number.  To make your game as bullet-proof as possible, you
  347.    should rewrite any meta-commands that reference phantom items.
  348.  
  349.    This usually happens with the meta-command tokens AtLocationGT and
  350.    AtLocationLT.  For example, let's suppose your game has a swamp composed of
  351.    five  rooms :
  352.  
  353.         ROOM 27 (* East End of Swamp *)
  354.         ROOM 28 (* Eastern Swamp *)
  355.         ROOM 29 (* Middle of Swamp *)
  356.         ROOM 30 (* Western Swamp *)
  357.         ROOM 31 (* West End of Swamp *)
  358.  
  359.    And you've been testing whether the player is in the swamp like this:
  360.  
  361.         AtLocationGT 26
  362.         AtLocationLT 32
  363.  
  364.    This worked fine before you wanted to use AGTNUM, but now there's no way to
  365.    guarantee that the east end of the swamp is going to end up as room 27. 
  366.    And even if rooms 26 and 32 happen to be real rooms with real labels you
  367.    can use, what happens if you later insert a new room after room 26?
  368.  
  369.    Ideally, we would like the conditional tests to reference only rooms that
  370.    are actually part of the swamp.  Instead of asking whether the player is
  371.    between rooms 26 and 32, exclusive, it would be nice if we could ask
  372.    whether he or she is between rooms 27 and 31, inclusive.  Unfortunately,                                                 _________
  373.    AGT does not have an explicit  at this location or greater  token, but
  374.    there is a way to produce the same result:
  375.  
  376.         NOT AtLocationLT 27
  377.         NOT AtLocationGT 31
  378.  
  379.    Since this  backwards logic  can tend to make us have to think too hard
  380.    about what the meta-command test is really asking, it's handy to use macros
  381.    to create a couple of new conditional tokens:
  382.  
  383.         #COMMENT at location Greater than or Equal to, Less than or Equal to
  384.         #DEFINE [AtLocationGE] NOT AtLocationLT
  385.         #DEFINE [AtLocationLE] NOT AtLocationGT
  386.  
  387.    and then just do this:
  388.  
  389.         [AtLocationGE] [East End of Swamp]
  390.         [AtLocationLE] [West End of Swamp]
  391.  
  392.    Resequencing Problems
  393.  
  394.    The rooms in an AGT-format game can appear in basically any order.  That
  395.    is, you can describe room 183, then room 2, then room 77 if you like.  This
  396.    presents a couple of problems.
  397.  
  398.    The first one is simple:  Unless your game includes a STARTING_ROOM
  399.    designation, whatever room is listed first will ultimately become the new
  400.    room 2 and therefore the starting room.  For example, assume these are the
  401.    first two rooms described in the .DAT file:
  402.  
  403.         ROOM 51
  404.         Hall of Mists
  405.         END_ROOM
  406.  
  407.         ROOM 2
  408.         Grassy Knoll
  409.         END_ROOM
  410.  
  411.    AGTLABEL will convert those definitions to these:
  412.  
  413.         ROOM [Hall of Mists]
  414.         Hall of Mists
  415.         END_ROOM
  416.  
  417.         ROOM [Grassy Knoll]
  418.         Grassy Knoll
  419.         END_ROOM
  420.  
  421.    and AGTNUM will convert them to these:
  422.  
  423.         ROOM 2
  424.         Hall of Mists
  425.         END_ROOM
  426.  
  427.         ROOM 3
  428.         Grassy Knoll
  429.         END_ROOM
  430.  
  431.    and the Hall of Mists will become the new starting room.  This problem is a
  432.    simple one because it is easily solved like this:
  433.  
  434.         STARTING_ROOM [Grassy Knoll]
  435.  
  436.    The second problem is more subtle, and more time-consuming to correct. 
  437.    Suppose you have a command like this:
  438.  
  439.         COMMAND ANY
  440.         IsCarrying [mysterious powder]
  441.         Chance 5
  442.         PrintMessage [Suddenly you sneeze and everything]
  443.         GoToRandomRoom [mop closet] [grimy bathtub]
  444.         DoneWithTurn
  445.         END_COMMAND
  446.  
  447.    If all of the rooms from [mop closet] to [grimy bathtub] appear in the
  448.    proper sequence, everything is fine.  But if they are out of sequence, or
  449.    if there are other rooms described between them, the outcome of this meta-
  450.    command will be changed because other (unrelated) rooms will now be
  451.    included in the range of rooms for the GoToRandomRoom token.  The same
  452.    thing can happen with the PrintRandomMessage token.
  453.  
  454.    As a general rule of thumb, you should use your text editor to search for
  455.    each occurrence of the word  random  (without case sensitivity) and verify
  456.    that things are as they should be.  Print out the audit file (.AUD) and
  457.    make sure that all of the items from the first one to the last do indeed
  458.    belong to the sequence, and that they are all accounted for.
  459.  
  460.    Always remember that all of your game elements are going to be renumbered
  461.    based on their order of appearance.  One way to avoid these problems is to
  462.    make sure that your game elements are properly sequenced before running
  463.    AGTLABEL.
  464.  
  465.     Special  Descriptions
  466.  
  467.    AGTLABEL knows that some tokens signal the beginning of a block of game
  468.    text, while others do not.  This is important because game text is
  469.    processed differently from other text.  For example, the word  room 
  470.    normally must be followed by a valid room number; if it isn't, AGTLABEL
  471.    reports a  Number expected  error.  However, if a textual description just
  472.    happens to have the word  room  at the beginning of a line, such an error
  473.    message is inappropriate.  Therefore, when AGTLABEL encounters a token like
  474.     ROOM_DESCR,   MESSAGE,  or  HELP,  it suspends the usual conversion of
  475.    numbers to labels until a line beginning with  END_  is encountered, and
  476.    instead tries to convert references like #CTR5# and #VAR12#.
  477.  
  478.    This works very well, except for specials.  The word  SPECIAL  is used both
  479.    as a stand-alone token and as a text block initiator but AGTLABEL must
  480.    pretend it isn't an initiator.  Consider this example:
  481.  
  482.         ROOM [Bathroom]
  483.         Bathroom
  484.         SPECIAL [A Violent Flood]
  485.         KEY [leaky faucet]
  486.         NORTH [Bedroom]
  487.         END_ROOM
  488.  
  489.    If  SPECIAL  was treated as a text block initiator, the KEY and NORTH lines
  490.    would be considered game text and would never be labeled.  Therefore,
  491.    SPECIAL is treated as a self-contained, one-line token.  This means, of
  492.    course, that any text in a SPECIAL description is fair game for regular
  493.    conversion instead of Variable/Counter conversion.  So things like the word
  494.     room  at the beginning of a line yield false error messages, and things
  495.    like #VAR21# don't get converted to labels as they should.  Be sure to
  496.    check out all of your specials very carefully (and use the audit file to             ___
  497.    help you manually convert any variable/counter references).
  498.  
  499.  
  500.    ERROR MESSAGES
  501.  
  502.    Warnings
  503.  
  504.    Option ignored
  505.  
  506.         An option was found which cannot be implemented during the program's
  507.         current phase.
  508.  
  509.    Unrecognized option
  510.  
  511.         An option was found which does not begin with a recognized key letter. 
  512.         Probably a typo.
  513.  
  514.    Unrecognized video method
  515.  
  516.         An invalid video access keyword or output override keyword was found. 
  517.         Only keywords beginning with D, A, B, F, C, or M are valid.
  518.  
  519.  
  520.    Errors
  521.  
  522.    Undefined number
  523.  
  524.         A number was found and AGTLABEL would really like to convert it, but
  525.         no label was defined for it.  This is often a reference to a
  526.         nonexistent room, noun, creature, etc.
  527.  
  528.    Number redefined
  529.  
  530.         A definable number was found, but a label was already defined for that
  531.         number.  For example, you might have two NOUN 135s or two CREATURE
  532.         301s.
  533.  
  534.    Number expected
  535.  
  536.         Non-numeric text was found following a keyword that is normally
  537.         followed by one or more numbers.
  538.  
  539.    ROOM # expected (NOUN, CREATURE, etc.)
  540.  
  541.         An inappropriate number was found following a keyword (for example, a
  542.         noun number where a creature number was expected).
  543.  
  544.    Item # expected
  545.  
  546.         A number that does not represent a room, noun, or creature was found
  547.         following a keyword that requires such a number (for example, a number
  548.         larger than the highest creature number).
  549.  
  550.    '#' expected
  551.  
  552.         An apparent textual reference to a counter or variable was not
  553.         immediately followed by a closing number sign (for example,  it has
  554.         been #CTR2 turns  or  you have #VAR11 # arrows ).
  555.  
  556.  
  557.    Fatal Errors
  558.  
  559.    Line too long
  560.  
  561.         A line was found that was longer than 254 characters.  Split it into
  562.         two or more lines.
  563.  
  564.    Disk full
  565.  
  566.         A DOS error occurred while attempting to write to an output file.  The
  567.         disk may be full.
  568.  
  569.    No user data file
  570.  
  571.         The +UserVersion option was selected, but the required AGTLABEL.USR
  572.         file was not found in the current directory.
  573.  
  574.    Out of memory
  575.  
  576.         AGTLABEL ran out of memory while allocating space for labels, or while
  577.         trying to generate a label.  If you are using a shell or multi-tasking
  578.         environment, or any memory-resident utilities (TSRs), you will need to
  579.         remove some processes or utilities to free up additional memory.  If
  580.         that doesn't work, try the +UserVersion option with the following
  581.         AGTLABEL.USR file:
  582.  
  583.            ;  agtlabel.usr -- last-ditch effort to conserve memory
  584.            ;  omitted parameters (VARIABLE, QUESTION, etc.) will be unaffected
  585.            ROOM        2  149              (* reduce ROOMs allowed by  50 *)
  586.            NOUN      200  249              (* reduce NOUNs allowed by  50 *)
  587.            CREATURE  300  349          (* reduce CREATUREs allowed by  50 *)
  588.            MESSAGE     1  200           (* reduce MESSAGEs allowed by  50 *)
  589.            FLAG        1   55              (* reduce FLAGs allowed by 200 *)
  590.  
  591.         This configuration will free up 400 labels' worth of memory.  You can
  592.         adjust the numbers of ROOMs, NOUNs, etc. to suit the sizes of your
  593.         game files.
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.    The Adventure Game Toolkit Label Generator                               13   __________________________________________
  610.