Adventure Game Toolkit -- Version 1.19 Changes ============================================== WARNING: Version 1.19 is totally compatible with version 1.0 at the AGT game source level. However, compiled AGT games are NOT compatible between the two versions. This means that if you wish to use the new features of version 1.19 with your old version 1.0 AGT games, these games need to be recompiled using the version 1.19 COMPILE.EXE program and then run using the version 1.19 RUN.EXE. New Features -- Not in Version 1.0 (and not in the other documentation) ----------------------------------------------------------------------- 1. A ROOM can now contain a PLAYER_DEAD specification that will cause the player to die when he or she first enters the room. An example of how this feature might be used is as follows: ROOM 35 You have drowned! PLAYER_DEAD END_ROOM ROOM_DESCR 35 Now you've done it! You've slid off the floe into the frigid water. Your life passes before your eyes. They say drowning is not such a bad way to go, but whoever said that must have drowned in warm water. Your frozen little body bobs to the surface for a second then flips upside down and you sink to the bottom of the ocean. You're dead! END_ROOM_DESCR 2. You can now specify a room to have the player resurrected in. In version 1.0, the player was always resurrected in the starting room. The starting room is still the default resurrection location, but you can now specify an alternative room. For example, by putting the following line in your .DAT file, you can cause the player to be resurrected in room number 12: RESURRECTION_ROOM 12 3. You can also specify the number of times the player can be resurrected in the game. For example, by putting the following in the .DAT file, you would set the number of player lives to 5: MAX_LIVES 5 The default is still 3 lives -- just as in version 1.0 of AGT. If you set MAX_LIVES to zero, the player will never be resurrected. 4. AGAIN or G will repeat the last command. 5. Versions 1.19 adds several new meta-commands. Specifically: NOUNIsNumber num -- will test whether the NOUN in the player's current input command is NOUN num and return a TRUE condition if the noun's number was num and a FALSE condition otherwise. ObjectIsNumber num -- will perform a similar test on the OBJECT in the player's current input command. These two meta-command tokens will be useful whenever the game has a variety of nouns and objects with the same name and the game designer only wants to allow certain actions to occur when specific nouns and/or objects are used in the player's input command. For example, let's consider a scenario where there are multiple "drawers" and multiple "keys" -- potentially all in the same room -- and we want the "brass key" (NOUN 210) to break whenever it is used to unlock the "middle drawer" (NOUN 203). This could be done using these two new tokens as follows: COMMAND UNLOCK DRAWER WITH KEY Present 210 (* Brass key is here *) Present 203 (* Middle drawer is here *) NOUNIsNumber 203 (* The middle drawer was specified in input *) ObjectIsNumber 210 (* The brass key was also specified in input *) SwapLocations 210 211 (* Swap brass key for broken key *) PrintMessage 59 (* The key broke in the lock *) UnLockIt 203 (* Unlock middle drawer *) DoneWithTurn END_COMMAND In addition to the above new tokens, version 1.11 also added the following two tokens that will be useful when you needed to deal with the contents of ROOMs, NOUNs or CREATUREs: SomethingInside num -- will test whether entity num has something inside it. Num can be a number for a ROOM, a NOUN or a CREATURE. ShowContents num -- will display the contents of the entity num if that entity has something inside it. If there is nothing inside the entity num, this token will have no effect. As an example of how these tokens, might be used, let's continue with the above scenario. Specifically, let's develop some meta-commands for the situation where the player wishes to SEARCH THE MIDDLE DRAWER: COMMAND SEARCH THE DRAWER Present 203 (* Middle drawer is here *) NOUNIsNumber 203 (* The middle drawer was specified in input *) IsLocked 203 (* The middle drawer is locked *) PrintMessage 65 (* The $ADJECTIVE$ $NOUN$ is locked. *) DoneWithTurn END_COMMAND COMMAND SEARCH THE DRAWER Present 203 (* Middle drawer is here *) NOUNIsNumber 203 (* The middle drawer was specified in input *) IsUnLocked 203 (* The middle drawer is unlocked *) OpenIt 203 (* Open the middle drawer -- first *) NOT SomethingInside 203 (* The middle drawer is empty. *) PrintMessage 66 (* The $ADJECTIVE$ $NOUN$ is empty. *) DoneWithTurn END_COMMAND COMMAND SEARCH THE DRAWER Present 203 (* Middle drawer is here *) NOUNIsNumber 203 (* The middle drawer was specified in input *) IsUnLocked 203 (* The middle drawer is unlocked *) OpenIt 203 (* Open the middle drawer -- first *) SomethingInside 203 (* The middle drawer is NOT empty. *) PrintMessage 67 (* The $ADJECTIVE$ $NOUN$ contains: *) ShowContents 203 (* Display contents of middle drawer *) DoneWithTurn END_COMMAND Since version 1.0 was released, many people have requested some easy way to convert ROOM, NOUN and OBJECT numbers to variables. Version 1.19 has this capability in spades. Specifically, new tokens added in version 1.19 include: MakeVarRoomNum Var# -- will make Var# equal current room number MakeVarNounNum Var# -- will make Var# equal current noun number MakeVarObjectNum Var# -- will make Var# equal object room number GoToVariableRoom Var# -- will send player to room number Var# SendToVariableRoom Item# Var# -- will send Item# to room number Var# GetVariableIt Var# -- will get Var# item for player PrintVariableMessage -- will print message number Var# Version 1.19 also adds several other tokens that have been requested by AGT users: NounIsCreature -- TRUE if noun is a creature, FALSE otherwise ObjectIsCreature -- TRUE if object is a creature, FALSE otherwise ObjectPresent -- TRUE if object is present in room RelocateAll Loc1 Loc2 -- Moves everything at Loc1 to Loc2 Other Changes from Version 1.0 ------------------------------ There have been several changes made in version 1.19 that cause it to behave slightly differently that version 1.0. Most of these changes are "cosmetic" in nature. Specific changes include: 1. Several mis-spellings in the output descriptions of the game have been corrected. 2. Introductory text no longer displays the INTRO or INTRODUCTION line. 3. "." is no longer a synonym for EXAMINE and "!" is no longer a synonym for ATTACK. 4. You can now have up to 25 variables, 25 counters and 25 questions (and answers) in an AGT game -- up from the version 1.0 limit of 9 each. "Bugs Killed" since version 1.0 ------------------------------- There have been several "bugs killed" since version 1.0 of AGT. Most of these were fairly subtle, so most AGT games will behave no differently under version 1.19 than they did under version 1.0. Specific "bugs killed" include: 1. Title files that contain a line with only one character on it are now displayed properly. 2. The NOUNIsLocated and IsLocated tokens now behave properly when the NOUN being tested is inside something else. 3. GET ALL, DROP ALL, WEAR ALL and REMOVE ALL now work correctly when there are multiple items present with the same name. 4. The BRIEF command now produces the desired effect. 5. The default treatement of PUT and/or PLACE commands have been modified not to allow the player to try to reference a CREATURE. For example, PUT THE RUG UNDER THE DWARF PLACE THE DWARF BESIDE THE TREE will both produce the default response "The dwarf won't let you." However, PUT/PLACE commands that just reference NOUNs (not CREATUREs) will continue to work as expected. For example, PLACE THE RUG BESIDE THE TREE will produce the response "You place the rug beside the tree" and the rug's description will be modified with the addition of "(beside the tree)". Of course, the game designer may over-ride these defaults by using meta-commands. 6. CHANGE_LOCATIONS and CHANGE_LOCATION are now both acceptable. 7. CHANGE_LOCATION will now work properly when there is no CREATURE in the game. 8. Female Creatures are now referenced as "She", "she" and "her" -- as they should be. 9. SAVE will work properly for "short" file names. 10. Trying to EAT or DRINK a creature will result in an appropriate "error" message. 11. Asking and answering question is now handled properly. 12. KILLing a creature now gives the correct response.