Reserved Version Numbers
------------------------

Authors wishing to add new versions of Adventure are asked to use the
following values for vnumber.   Note that the source for most versions can
be obtained from the if-archive directory - see

http://www.ifarchive.org/games/source

0: 350-point   The original Crowther/Woods game.
1: 551-point   Extensions by David Long and A.N. Other including the
               Wumpus, the Lost River Canyon and the Rainbow Room.
2: 550-point   Extensions by David Platt including a beach on an alien
               planet, and an area on the far side of the Volcano.
3: 660-point   A combined version of the 440-point and 550-point games
               by Mike Arnautov.  He has now released the source for this
               version.
4: 370-point   Modified version by Paul Munoz-Colman.  (However, it is
               believed that this version differs from the original only in
               score values.)
5: 430-point   Further additions by Don Woods, alias Adventure 2.5 including
               an area beyond the Vending Machine and an extended surface
               area.  (N.B. the Adventure II version referred to by the NEWS
               command was an earlier version of this game, and should not
               be confused with Jack Pike's version.)
6: 440-point   An extended version by Peter Luckett and Jack Pike.  This 
               version was recently rediscovered, and Mike Arnautov has
               collaborated with the author to produce a working Fortran 77
               version, now available on the IF archive.
7: 580-point   CP/M version based on the 550-point game, with extra treasures 
               in the Antechamber area.
8: 501-point   An earlier version of the 551-point game, without the
               castle, and with an incomplete extension near the cave entrance. 
9: 751-point   This appears to have been derived from the 501 or 551-point 
               version. Once playable on Compuserve.
10: 1000-point Humongous cave: AGT source available on the if-archive.
11: 701+ point A further extension to the 701-point game by David Picton.
12: 770-point  This is Mike Arnautov's extended version of his 660-point game
               (released in 2003)
13: 370-point  "Funadv" (version by Neale White III with various changes 
               including a mongoose in place of the bird) - see

               ftp://sunsite.doc.ic.ac.uk/usenet/comp.sources.games/vmsnet.sources.games/funadv/

14: 375-point  Modest extension of original, with a few extra treasures 
	       and locations, such as the troll's home, and a region beyond
	       the Dark Room. Ends by making the player a wizard.
15: 701-point  David Picton's new combined edition of both the 550-point and
               551-point games. (Exclusive to Polyadv).

New generalized scheme for version handling.
--------------------------------------------

Static definitions of Room/ Object locations:

location - object location unless locationvvv is defined where vvv is the
           version being played.  In the latter case the location property
           will be changed to the value of locationvvv during the init phase.

location350, location550, location551 etc - locations in different versions

loclist - list of locations for floatingDecoration objects unless loclistvvv
          is defined where vvv is the version being played.  In the latter
          case the loclist property will be changed to the value of the
          loclistvvv property during the init phase.

loclist350 etc - version-dependent loclist properties.  Note that these are
          often unnecessary, because it's OK for a loclist to include rooms
          which are inaccessible in the game version being played.  You only
          need to use these properties when a player can actually see a
          version-dependent difference.

game350, game550, game551 etc - flags which evaluate to 'true' for those
                                game versions in which the object exists
                                (but see allversions below).
                                If an object doesn't exist in the version 
                                being played, it is excluded from lists of 
                                point-scoring objects and the 'deleted' 
                                property is set to true.  If the
                                location of the object is a simple object, it
                                will be changed to nil.  If the object is
                                of type floatingDecoration, its loclist will
                                be set to [].

                                General defaults can be set for gamevvv
                                variables, so that an object which is 
                                present in one version will automatically
                                exist in later versions derived from it.  See
                                below.

allversions: automatically set to true for all objects whose gamevvv
             properties are all nil.  Objects in this category are present
             in all game versions.  This applies to most of the objects in
             the 350-point game.

Global properties:

vmax: Maximum version number.  Note that not all version numbers actually
      need to be used - it is legitimate to reserve some of them for
      future extensions.  Preinit will detect which versions actually
      exist by looking for objects in the oldglob class, each of which
      must define a unique value for vnumber.

locproplist: list of version-specific location properties for versions
             0,1,2,3 etc, e.g. 
             [&location350, &location550, &location551]

loclproplist: list of version-specific loclist properties for versions
             0,1,2,3 etc, e.g.
             [&loclist350, &loclist550, &loclist551]

gameflaglist: list of game flags e.g.
             [&game350, &game550, &game551]
              

vnumber: version number (default value is in global, also defined in
         oldglob objects.)


For historical reasons, these derived properties are also defined in
init (for the global object):

newgame     : derived parameter, which if true indicates the 551-point game
              or a later derivative.  (Effects include: can't catch bird
              if rod is visible anywhere in the room, changed directions from
              some rooms, more complex conditions for depositing treasures,
              weights of objects are taken into account as well as bulk).

oldgame     : if true, indicates that the game lacks 551-point features.
              Either oldgame or newgame is true, never both.               

game550     : The 550-point game or a later derivative (550-, 580-, 660-, 
              770-point etc.)  

game551     : game with 551-point features (551-point or 701-point)

game701     : 701-point game combining both the 550-point and 551-point 
              games; note that oldgame is false but game550 and game551 are
              both true.

The properties 'oldgame' and 'newgame' are now only used with the global
object.   For items and rooms, one or more 'numbered' properties (e.g. game551,
game701 etc) may be defined as true, to indicate the game versions in which 
the room or object exists.  For example, the Sea_Water object has both game551
and game550 set to true, to indicate that the object is present in both
game versions.  (N.B. if *all* the game<nnn> properties for an object evaluate
to nil, the object will be present in all versions).

When developing a new version which is an extension of an existing one, it
is useful to define defaults so that the new version will inherit all the
extensions of the old one.  The following steps will do most of what is
needed:

1.  Define the appropriate global properties in the following lists
(in ccr-std.t): gameflaglist, locproplist, loclproplist.  For example, if
you implement the 660-point game you would define the game property as
&game660, the location property as &location660 and the loclist property as
&loclist660.

2.  Extend the global.game<nnn> methods as appropriate.  For example, the
implementation of the 580-point game (vnumber=7) required the addition of
a new global.game580 method which evaluates to true in the 580-point mode.
It also required modifications to the oldgame method (which returns true for 
versions which lack 551-point features) and the game550 method (which should
return true for any version which has the 550-point extensions).

3. Define defaults for the relevant game<nnn>, location<nnn> and
loclist<nnn> properties in the last section of ccr-thx.t.   These ensure that
the objects which are present in the earlier version will also be present
in the new version - and in the same locations.  For example, the definitions
for the 580-point game are:

/* BJS: Everything in the 550-point version is also in the 580-point
 * version. */
   game580 = {
        return (self.game550);
   }
   location580 = {
        if (defined(self,&location550)) return self.location550;
        else return self.location;
   }
   loclist580 = {
        if (self.loclist550 <> nil) return self.loclist550;
        else return nil;
   }

4.  Update any other code which makes explicit reference to version numbers.

Be sure to update the Dwarves.doAttackWith method, otherwise players will
see an error message when they try to fight the dwarves!




