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 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 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, location and loclist 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!