home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fatal Distractions!
/
fataldistractions.bin
/
appndxa
/
masters
/
mast-doc.pt3
< prev
next >
Wrap
Text File
|
1993-06-13
|
94KB
|
2,380 lines
PICTURE [Picture of Small Building]
PIX [Sky pix] [Tree pix]
END_ROOM
By adding the [Sky pix] and [Tree pix] labels to the PIX line for the
room, we will cause the SKY and the TREE to be displayed as pictures
whenever the player is in this room -- if the player gives the proper
VIEW command.
META-COMMANDS AND PICTURES
Most pictures or animations will be seen when the player gives a command
to VIEW something. However, there will be times in the game when the
game designer will want to initiate the display a picture or animation.
For example, when the player wins the game (or loses) you may want to
display as special picture to mark the occasion. These occasions will
be handled by using meta-commands to display the pictures or animations.
The game designer initiates these picture displays by using the
ShowPicture or IfYShowPicture meta-command tokens. The following are
two examples of how pictures might be shown by using meta-commands:
#COMMENT ------- random "cameo" appearances in cave
COMMAND ANY
Chance 3
AtLocationGT [hall of mists]
AtLocationLT [cylindrical chamber] ;most of cave area
FlagOFF [Dwarf here]
PrintMessage [IRS men appear]
WaitForReturn ; Show picture when player hits RETURN
ShowPicture [Picture of IRS men]
PrintMessage [IRS men disappear]
END_MESSAGE
MESSAGE [IRS men appear]
Seven men, wearing gray business suits and carrying briefcases,
suddenly appear out of the shadows and surround you. They identify
themselves as representatives of the Internal Revenue Service!
With absolutely no show of emotion, they report: "We understand
that you have been accumulating some un-declared income. We wish
to warn you that we are watching you closely as you play this game,
and all of this income must be properly and totally accounted for
on your next tax return. If it isn't, you will go to jail or
worse!"
END_MESSAGE
MESSAGE [IRS men disappear]
They then disappear in a >POOF< of red, white and blue smoke.
END_MESSAGE
132
COMMAND ANY
Chance 3
AtLocationGT [hall of mists]
AtLocationLT [cylindrical chamber] ;most of cave area
FlagOFF [Dwarf here]
PrintMessage [Mining Robot appears]
IfYShowPicture [Picture of Mining Robot] ; Asks if player wants to
; see picture -- and display it only if player responds with a YES
PrintMessage [Mining Robot disappears]
END_MESSAGE
MESSAGE [Mining Robot appears]
From somewhere nearby, there suddenly comes a sound of something
mechanical in motion. As you turn toward it, an incredible figure
rolls into the light of your lamp. It stands about five feet high
on a wheeled metal pedestal, and has a globular light-filled head,
accordion-pleated metal arms, and a cylindrical body the size
of an oil drum with a plastic panel on the front. It rolls past
without taking any notice of you, all the while waving its arms,
flashing a light behind its front panel and bellowing "WARNING!
WARNING! DANGER!" at the top of its not inconsiderable voice.
END_MESSAGE
MESSAGE [Mining Robot disappears]
It rolls on out of sight, and moments later there is an immense
flash of light and a tremendous blast of sparks and smoke. When
the air clears, you find that no trace remains of the strange
apparition.
END_MESSAGE
Remember -- these pictures or animations will be displayed until a key
is pressed and then the display will return to the normal AGT text-based
screen -- ready for the next game command from the player.
IMPORTANT NOTE: Both of the meta-command picture examples above assume
that the picture being referenced is one of the up-to-250 pictures or
animations defined in the PICTURE list -- i.e., [Picture of IRS men] and
[Picture of Mining Robot] were both defined by something similar to:
PICTURES
[Intro Picture] INTRO
[First Jungle Scene] JUNGLE1
...
[Picture of IRS men] IRSGUYS
[Picture of Mining Robot] M-ROBOT
. . .
[Victory Picture] VICTORY
END_PICTURES
If [Picture of IRS men] and [Picture of Mining Robot] were defines as
some of the up-to-30 ROOM_PIX, you would have to use different meta-
command tokens. Specifically, rather than ...
133
ShowPicture [Picture of IRS men]
and
IfYShowPicture [Picture of Mining Robot]
you would have to use:
ShowROOM_PIX [Picture of IRS men]
and
IfYShowROOM_PIX [Picture of Mining Robot]
Obviously, if the proper picture/animation can not be found on the disk
and/or the player's screen is not capable of displaying the resolution
of the picture or animation, then these meta-command tokens will have no
effect.
Another meta-command token that you will find useful is:
Room_PixHere [Tree pix]
which will check if the [Tree pix] picture may be viewed in the current
room.
134
PART 7: OPTIONAL MUSIC AND SOUND EFFECTS
The Master's Edition allows you to play music or have other sound
effects (like a telephone ringing) in the background of your AGT
Adventure game. In the background means that once you start the sound
effect or music playing, you can continue on with the rest of your game
and the sound or music keeps playing without any additional effort on
your part until the song or sound is finished. You can use this to
provide special sound effects in your games or just to add a cute
indication that your program is still doing something -- even when it is
reacting to or waiting for the player's various commands. You can turn
songs on and off using meta-commands and change the music to fit the
mood of the current game situation -- e.g., eerie, spooky music for
exploring a haunted house, or calliope music for an adventure set at a
circus.
The Master's Edition can use (1) music files from Neil Rubenking's
PianoMan program version 4.0, or (2) music and sound effects that are in
the form required by BASIC's PLAY statements or (3) you can create your
own sound effects using a Turbo Pascal source program (provided as part
of the Master's Edition "package"). All of AGT's sound effect or music
files must have a .MUC file extension. You can have up to 50 .MUC files
for each AGT game.
In addition, Version 1.5 of the Master's Edition can use SoundBlaster
and Adlib compatible sound/music files. Just how, will be described a
little later in the manual.
SOUND CONVERSION UTILITIES
To help convert to AGT-useable sound/music files, several conversion
programs are provided as part of The Master's Edition package.
CNVT_MUZ.EXE will convert any PianoMan 4.0 (.MUZ) file into an AGT .MUC
file. CONVT_PLY.EXE will convert any BASIC PLAY music strings (in ASCII
or text) into an AGT .MUC file. See a couple of the .PLY files for
examples of the format CNVT_PLY is expecting.
To create sound effects like water dripping or telephones ringing, you
should use the AGTSOUND.EXE program. The Turbo Pascal source code to
this program (AGTSOUND.PAS) is also provided so you can create
customized sounds.
Each of these conversion/creation programs produces a .MUC file that AGT
can play/sound in the background.
These MUC. files use the IBM PC's built-in speaker. No special sound
board is required.
Blatant Plug: Neil's PianoMan is an excellent shareware product and is
available from many bulletin boards on in the IBM Software forum on
135
Compuserve. It allows you to play your computer's keyboard like a piano
keyboard and record and edit music entered in real time or from sheet
music. There are also many files of songs already entered that you can
use. One sample archive for instance contains over 50 sample songs.
PianoMan is described in more detail in the section entitled RECOMMENDED
SHAREWARE UTILITIES.
ADLIB AND SOUNDBLASTER SUPPORT
With version 1.5 of the Master's Edition, we have added the capability
to use AdLib or SoundBlaster (or compatible) sound cards -- if one is
available on the computer where the game is being played. Using these
sound cards, your game can now have sounds ranging from a full symphony
to speech. In addition to its own music/sound format .MUC files, the
Master's Edition can now play .CMF, .MID, or .VOC files.
USING SOUND AND MUSIC
The song/sound files are indicated in your AGT source files by something
similar to the following:
SOUNDS
[Intro Music] INTRO <-- actual disk file must be named INTRO.MUC
[Jungle Drums] TOM-TOMS <-- actual file must be named TOM-TOMS.MUC
[Death Dirge] DEATH <-- actual file must be named DEATH.MUC
. . .
[Victory March] VICTORY <-- actual file must be named VICTORY.MUC
END_SOUNDS
There can be up to 50 song/sound files in each AGT game.
Playing these songs and sound effects must be controlled via
meta-commands. The following examples demonstrate how these
meta-commands should be used:
PlaySong [Jungle Drums] <-- This plays the song/sound file
TOM-TOMS.MUC once. The standard
mode is to play the song until
it is finished and then to stop.
RepeatSong [Jungle Drums] <-- This plays the song/sound file
TOM-TOMS.MUC repeatedly. When
the song is finished it would
automatically be started again.
EndRepeatSong <-- This causes the current
song/sound to stop when it is
finished, i.e., the repeating
feature would be turned off.
136
PlayRandom {num1} {num2} <-- This plays a random song/sound
file between num1 and num2 once.
The song/sound will be played
until it is finished and then it
will stop.
StopSong <-- This causes the current
song/sound to stop immediately.
Once the StopSong command has
been given, the song can not be
resumed without giving a new
PlaySong or RepeatSong
meta-command. If you wish to
change songs/sounds before the
current sound/song is finished,
you must first use a StopSong
token before starting the new
sound/song with either a
StartSong or RepeatSong token.
SuspendSong <-- This causes the current
song/sound to stop immediately
-- but it can be resumed at the
current spot at a later time.
ResumeSong <-- This resumes playing a song that
had been suspended by a
SuspendSong meta-command at the
spot where it had been
suspended.
SongPlaying <-- This is a conditional
meta-command and will return a
TRUE or FALSE depending upon
whether there is a song playing
at the current moment.
There is a utility provided called AGT_PLAY.EXE which allows you to try
out your music and sound effects before you incorporate them into the
actual AGT game. AGT_PLAY can be used to test/play .MUC, .CMF, .MID,
and .VOC music/sound files. Try it to get a feel for what is possible.
IMPORTANT NOTE ABOUT SOUND AND MUSIC
There are a couple of potential limitations about using .MUC sound that
you need to understand. NOTE: The following limitations/discussion
do/does not apply to Adlib or SoundBlaster sound cards.
First, sounds and/or songs within AGT are played in the background. The
way in which this is done is to check and potentially change the sound
parameters every time the computer's internal clock "ticks" -- roughly
137
18 times a second. The fact that AGT can only adjust the sound every
1/18th of a second means that some sounds can not be played successfully
-- specifically, it is impossible to play sounds that change very
quickly or have tones that last a very short time. An obvious example
of this problem is music that has multiple voices where each voice gets
a very short period of time for its note before switching to the next
voice. Good examples of this are some of the songs from PIANOMAN that
are written for four voice harmony. These songs are almost impossible
for AGT to play successfully. Other sounds that AGT will have problems
with are sound effects which are made up of a number tones of very short
duration -- such as some whistles, sirens, and like sounds. The best
way to test whether a sound/song can be used in AGT is to play it using
PLAY_MUC. If you try to play it with PLAY_MUC and it works, then it
will work in AGT. Conversely, if it does not work (i.e., you get no
sound at all or it doesn't sound right), then it won't work correctly in
AGT.
The second limitation will only apply to some computers, principally
older machines with "slow" hard disks. Again, the clock "tick rate" of
once every 1/18th of a second may not allow you to make all of the
sound/song changes that a sound file may require when you are also
reading the descriptions off the disk at the same time. Some computers
will complete a disk read (or write) and not interrupt the disk access
just because of a clock tick every 1/18th of a second. If your disk is
one of these, the sounds may be distorted by slow downs while the disk
is being accessed. The best solution to this problem is to put your
game (and all its associated files) on a ram disk. If you don't have a
ram disk, you may wish to turn the SOUND OFF.
The last limitation with AGT's sound/music capabilities is that the
number of separate notes is limited to about 5000. The best way to
check if a particular song or sound has less than 5000 notes is to use
the program PLAY_MUC and check the size of the file. IF PLAY_MUC shows
the song/sound files is 5000 bytes or less, then you should not have any
problems in getting it to work properly within an AGT game.
138
PART 8: OTHER NEW FEATURES UNIQUE TO MASTER'S EDITION
CUSTOMIZEABLE "DEFAULT" MESSAGES
At long last, you can "die" in some other fashion than disappearing in a
cloud of orange smoke. All (well -- almost all) of the messages in the
Master's Edition can be customized by the game designer.
The Master's Edition of AGT gets its standard "default" messages by
reading a file of such standard messages. These files will have a .STD
extension. When the Master's Edition MCOMPILE program is started it
will first look for a .STD file for the specific game being played,
i.e., GAMENAME.STD. If that file is not found on the current directory,
MCOMPILE will look for the "default" .STD file which is AGT.STD. If
AGT.STD is also not on the current directory, MRUN will quit with an
error message.
The Master's Edition package has two .STD file for you to play with:
AGT.STD and IRUN.STD. AGT.STD is the "standard" set of AGT messages
that use to be "hard-coded" into the MRUN program. IRUN.STD is a set of
messages that change the player's perspective to the "first-person" from
the normal perspective of "third-person," i.e., all of the messages are
changed to use "I" rather than "You" -- such as, "I shoot the gun at the
bandit." IRUN.STD is the set of messages that Pat Farley developed for
CRIME TO THE 9TH POWER, the first place winning game in the 1990 AGT
adventure game writing contest.
There must be exactly 185 standard messages numbered STANDARD 1 to
STANDARD 185 in a .STD file (either GAMENAME.STD, AGT.STD or IRUN.STD).
You may edit these messages as you see fit. However, you must keep them
in the same order and you must keep their meaning consistent with the
current meaning. For example, below is STANDARD 38 which is the
standard message that will be printed whenever the player tries to WEAR
something that weights over 100 pounds:
STANDARD 38
It's too heavy! You aren't strong enough to carry or wear the
$noun$!
END_STANDARD
You can feel free to change this message in any way you wish -- but,
however you change STANDARD 38 -- it will still be printed if and only
if the player tries to WEAR a noun weighing over 100 pounds.
There are several "string variables" that may be used freely in messages
-- specifically:
$verb$ is the current VERB
$noun$ is the current NOUN
$prep$ is the current PREPOSITION
$object$ is the current OBJECT
139
$adjective$ is the current NOUN's adjective
$n_pro$ is the NOUN's pronoun, i.e., "it" "they" "he" or "she"
$o_pro$ is the OBJECT's pronoun, i.e., "it" "they" "he" or "she"
$n_indir$ is the NOUN's indirect pronoun - "it" "them" "him" or
"her"
$o_indir$ is the OBJECT's indirect pronoun: "it" "them" "him" or
"her"
$n_is$ is either "is" or "are" based upon NOUN being singular or
plural
$o_is$ is either "is" or "are" based upon OBJECT being singular or
plural
$c_name$ is the NAME of the HOSTILE creature that is attacking the
player
Any of the above string variables can be capitalized by making the
appropriate letters between the $'s upper case. For example $Noun$ will
capitalize the first letter of the NOUN's name, or $OBJECT$ will display
the OBJECT's name in all caps.
CUSTOMIZEABLE USER INTERFACE
The Master's Edition of AGT allows the user to customize the manner in
which the game's general interface is defined and to specify the game's
overall "look-and-feel." The user may define color schemes, status line
options, command input method, size and "layout" of the screen, etc.
Once the player has a set of "look-and-feel" options he or she likes,
these options may be saved as the standard defaults for this game and
any other AGT game the user plays.
The "look-and-feel" options are accessed by hitting the ESC key during
the game.
If you create an user interface that you like, it may be saved by
selecting the item on the options menu. This creates a file with the
extension GAMENAME.OPT which has your options for this game.
Thereafter, whenever you start the game, the fiel GAMENAME.OPT file will
be read and your saved "look-and-feel" options will automatically be
used.
"FREEZING" THE USER INTERFACE
If you have saved a particular set of "look-and-feel" options (in a file
named GAMENAME,OPT) for a game, you can "freeze" those options, so that
whoever is playing the game can not change the "look-and-feel." This is
done by putting the word FREEZE on a separate line in the game's .AGT
before the game is compiled. As an example, the game HOLMES forces the
player to always use a MENU-DRIVEN option for the game.
140
ADAPTING YOUR GAME FOR THE "MENU-DRIVEN" PLAYER INPUT
One of the options available in the Master's Edition is a unique
"menu-driven" player input that allows the player to enter game commands
by selecting words from a menu. This option is particularly helpful for
players who are often frustrated by their inability to figure out an
adventure game's vocabulary -- since the menu always displays a list of
"feasible" (though not always "smart" or even appropriate) commands from
which the player may make a selection.
However, the "menus" do show some intelligence -- if the player selects
the verb DROP from the menu, then he/she will be shown a menu of nouns
that can be selected to be dropped. This list will be composed only of
nouns that the player is currently carrying or wearing, i.e., logical
candidates for being DROPped. This level of inherent intelligence is
not extended to all verbs, however. For example, if the player selects
the verb EAT, the nouns shown will be all of the nouns and creatures
visible at the location plus special "related" or "room" specific or
"ubiquitous" nouns (to be discussed a little later). In other words,
the noun list will not be limited to nouns that have been defined as
EDIBLE and happen to be visible at the current location. I firmly
believe the "menu-driven" input should not limit either the player's or
the game designer's ability to have such game commands as EAT THE TRASH
CAN or PUSH THE STRING WITH MY NOSE.
The "menu-driven" input option may be accessed by hitting the ESC key
during the game and toggling the MENU option to ON.
The Master's Edition of AGT gets its standard "menu-driven" verb list by
reading a file with the list of verbs to be displayed in the menu. This
file will have a .VOC extension. When the Master's Edition MRUN program
is started it will first look for a .VOC file for the specific game
being played, i.e., GAMENAME.VOC. If that file is not found on the
current directory, MRUN will look for the "default" .VOC file which is
AGT.VOC. If AGT.VOC is also not on the current directory, MRUN will
quit with an error message.
The Master's Edition package has two .VOC files for you to play with:
AGT.VOC and SQUYNCH.VOC. AGT.VOC is the "standard" set of AGT verbs for
potential use by the "menu-driven" player input. SQUYNCH.VOC is a set
of verbs that were selected specifically for the game SQUYNCH. By
looking at the differences between these two files, you can get an idea
of how and why you might want to "customize" your verb menu.
When setting up our own .VOC file please follow these guidelines:
1. The verb menu will be displayed in the exact order as the
verbs in the vocabulary file, i.e., the .VOC file.
2. It is important that some verbs be included in a particular
order. For example, the directions should be shown before
other verbs beginning with the same letter, e.g., SOUTH should
141
be the first S-verb, so that hitting a single letter on the
keyboard will jump to the most frequently used verbs
(commands).
3. There should be a number in the first column of each verb
entry in the .VOC file. The number should be a 1 if the verb
does not need a noun, e.g., SOUTH, HELP. The number should be
a 2 if the verb always needs a noun, e.g., GET. The number
should be a 3 if the verb is a compound verb such as PUT IN
that always needs both a noun and an object, e.g., PUT noun IN
object. If the number is a 3, then the verb MUST consist of
two words, e.g., PUT IN, or an error message will be
generated. Any number other than 1, 2, or 3 will also
generate an error message.
IMPORTANT WARNING: Your verb list is limited to a maximum of 200 verbs.
Also, each verb (compound or otherwise) must be limited to 15 characters
or less.
For example, the AGT.VOC starts off with the following entries:
! AGAIN should be the first A-verb
1 Again
2 Attack
3 Attack With
3 Ask about
1 Brief
3 Block with
2 Break
3 Break with
2 Close
1 Climb
2 Climb up
2 Climb down
This would cause the following actions:
! AGAIN should be the first A-verb <- A comment line -- ignored
1 Again <- Will be selected when an A is hit on the keyboard
2 Attack <- ATTACK noun -- i.e., ATTACK ORC
3 Attack With <- ATTACK noun WITH object
3 Ask about <- ASK noun ABOUT object -- i.e., ASK ORC ABOUT GOLD
1 Brief <- Will be selected when an B is hit on the keyboard
3 Block with <- BLOCK noun WITH object
2 Break <- BREAK noun - i.e., BREAK EGG
3 Break with <- BREAK noun WITH object -- i.e., BREAK DOOR WITH AXE
2 Close <- CLOSE noun -- i.e., CLOSE DOOR
1 Climb <- CLIMB -- i.e., no noun
2 Climb up <- CLIMB UP noun -- i.e., CLIMB UP TREE
2 Climb down <- CLIMB DOWN noun -- i.e., CLIMB DOWN TREE
142
The biggest challenge the game designer will have in converting a
Classic Edition AGT game to work with the new menu-driven player input
will be making sure that the nouns that should be displayed in a
particular location or situation will (in fact) be displayed. The
menu-driven input option shows only a subset of all of the potential
nouns -- and your challenge as a game designer is to make sure that the
nouns you want get selected for these subsets.
To help you understand how to accomplish this feat, let's review just
how this list of nouns to be displayed is determined. This list is
formed from:
1. All "visible" nouns and creatures
2. All "related" names
3. All "ubiquitous" nouns
4. All "room specific" nouns
More details follow on each of these:
1. All nouns and creatures that are "visible" at the current
location, i.e., all creatures present in the room plus all
nouns that are either being carried or worn, in the room, or
inside another noun (which is inside the room) that is open.
2. All nouns or names that are "related" to one of the visible
nouns, i.e., "related" to nouns covered by (1) above. As an
example, see the magic carpet in SQUYNCH that has a "label"
attached to it. You want the player to be able to READ THE
LABEL whenever the magic carpet is present. By making LABEL a
"related name" for the magic carpet, the word LABEL will
appear whenever the word CARPET would also appear on a noun
list. Another example from SQUYNCH is the need to have the
word NOSE to appear on the noun lists whenever the player has
the CLOTHPIN. This allows the player to use the menu-driven
player input to enter a command like PIN NOSE WITH CLOTHPIN or
PUT CLOTHPIN ON NOSE. This objective is accomplished by
having NOSE as a "related name" of the noun CLOTHPIN.
As an example, below is the NOUN definition for the CLOTHPIN:
NOUN [247 WOODEN CLOTHPIN]
CLOTHPIN
WOODEN
There is a wooden clothpin here.
LOCATION [27 Royal Laundry Room]
WEIGHT 5
POSITION on clothline
NOUN_SYNONYMS PIN
RELATED_NAME NOSE
143
END_NOUN
NOUN_DESCR [247 WOODEN CLOTHPIN]
The wooden clothpin is about 3 inches long.
END_NOUN_DESCR
3. All nouns that have been defined by the game designer as
"ubiquitous" for the particular game. Examples of possible
ubiquitous nouns include such things/names as "ME", "GROUND,"
or "SKY." These nouns will appear on EVERY noun list the
menu-driven player input generates. There can be at most 100
of these global nouns in a game. Below is an example of how
these nouns would be specified in the .AGT file:
GLOBAL_NOUNS
Me
Ground <-- Maximum of 100 of these!
END_GLOBAL_NOUNS
IMPORTANT NOTE: You should use the GLOBAL NOUNS to do the
same thing for nouns that "Dummy Verbs" does for verbs. In
other words, a GLOBAL NOUN will be recognized by the parser as
a valid noun without having been defined as a separate NOUN
(and using up one of your very precious 200 NOUN definitions).
However, because they are not one of the "standard" NOUN
definitions, you MUST handle all references to your GLOBAL
NOUNS via metacommands!! For example, let's say that GROUND
is defined as a GLOBAL NOUN (and is not a separate NOUN
definition). You must have metacommands to handle such player
inputs as GET GROUND, EXAMINE GROUND, etc. The standard
"built-in" routines for AGT can only deal with things that are
defined as either NOUNs or CREATUREs -- and obviously, GROUND
does not apply in this case.
4. All nouns that have been defined by the game designer as "room
specific" for the current room. Examples of possible "room
specific" nouns might include such things as "TREES", "WATER,"
or "SNOW," i.e., things that can be expected to be found in
multiple locations through out the game and which are unlikely
to have specific NOUN definitions in each of these locations.
For example, you may want the player to GET WATER at multiple
locations within the game such as at wells, streams, lakes,
etc. By using a "room specific" noun of WATER for each of
these locations, you can assure that WATER will always appear
on any noun list the menu-driven input generates at any of
these locations. Within the Master's Edition, you are allowed
up to 30 "room specific" nouns (or flags). This is 30 in
total -- not 30 per room.
Here is an example of how these flags/nouns should be
specified in the game's .AGT file:
144
REM ---- Flag Noun Numbers
FLAG_NOUNS
[Castle] Castle
[Cave] Cave
[Cove] Cove
[Water] Water
[Moat] Moat
[Bridge] Bridge
[Stairs] Stairs <-- Maximum of 30 of these!
END_FLAG_NOUNS
Once these flags/nouns have been defined they can be specified
for a room in the game as the following examples shows:
ROOM [18 Drawbridge]
Drawbridge
NORTH [20 Moat]
SOUTH [20 Moat]
EAST [15 Waiting Room]
WEST [Front of Castle]
FLAGS [Castle] [Water] [Bridge]
END_ROOM
ROOM_DESCR [18 Drawbridge]
You are now on the drawbridge in front of Squeeb's castle
which lies to the east. There is another exit to the west.
END_ROOM_DESCR
The Drawbridge location has the flags/nouns for WATER, CASTLE,
and BRIDGE. These nouns will be displayed on any noun list
that the menu-driven input generates while at this location.
You can test the status and/or change the status of these
flags using the following meta-commands:
RoomFlagON num <-- Tests if RoomFlag num is ON
RoomFlagOFF num <-- Tests if RoomFlag num is OFF
TurnRoomFlagON num <-- Will turn RoomFlag num ON
TurnRoomFlagOFF num <-- Will turn RoomFlag num OFF
ToggleRoomFlag num <-- Will toggle or switch RoomFlag num
Here are a few examples of how the WATER room flag might be
used to deal properly with the commands GET WATER and EXAMINE
WATER:
COMMAND GET WATER
Present [231 WOODEN PAIL]
RoomFlagOFF [Water] ; there isn't any water here
PrintMessage [No water here!]
DoneWithTurn
END_COMMAND
145
MESSAGE [No water here!]
There isn't any water here. Perhaps, you meant to MAKE WATER!
END_MESSAGE
COMMAND GET WATER
Present [231 WOODEN PAIL]
RoomFlagON [Water] ; there is water here
ReDirectTo FILL PAIL
DoneWithTurn
END_COMMAND
COMMAND EXAMINE WATER
RoomFlagON [Water]
PrintMessage [Water description]
DoneWithTurn
END_COMMAND
MESSAGE [Water description]
The water looks dark, murky and polluted! It also stinks
something awful!
END_MESSAGE
Room flags can also be used without having any nouns added to
the noun list generated by the menu-driven input option.
Examples of situations where you might want to be able to test
or set flags for a location include: (1) a flag to indicate
the location is "outside", (2) a flag to indicate that this
location is one where a particular CREATURE might appear at
random, and (3) a flag to indicate that the player must be
wearing a "space-suit" or he/she will die from lack of oxygen.
The way to accomplish this is to not add the flag to the
FLAG_NOUNS list. For example, to create a flag for a room
being "outside," we could add the following definition:
#DEFINE [Outside] 8
Then to specify that the "Drawbridge" location was "outside",
we would just add it to the room's FLAG list:
ROOM [18 Drawbridge]
Drawbridge
NORTH [20 Moat]
SOUTH [20 Moat]
EAST [15 Waiting Room]
WEST [Front of Castle]
FLAGS [Castle] [Water] [Bridge] [Outside]
END_ROOM
Because [Outside] is not in the FLAG_NOUNS list, the word
OUTSIDE will not appear on the noun list that the menu-driven
input option generates.
146
INITIAL DESCRIPTIONS FOR ROOMS, NOUNS AND CREATURES
NOUN INITIAL DESCRIPTIONS
Let's begin with an example of using "initial" descriptions for nouns.
Often you will want to have a noun's short description change after you
move it or take it. For example, we might want to have the initial
short description of a chrome key "attached" to objects in the key's
initial location as follows:
You are on a large ledge only a couple of meters below the top of
the spire. There is a large nest just out of your reach.
Dangling from the nest on a red string is a chrome key.
Once you move the key, you would want its short description to be "free"
of the nest -- for example:
There is a chrome key on a string here.
You can do this by specifying the noun's INITIAL value to be the number
of a message. This message will be printed as the noun's short
description until such time as the noun is moved by getting it, wearing
it, or placing it. After the noun is moved from its initial location,
the noun's "normal" short description will be used.
For example, here is how the chrome key might be specified:
ROOM [Top of the spire]
Top of the spire
DOWN [Half-way up the Spire]
END_ROOM
ROOM_DESCR [Top of the spire]
You are on a large ledge only a couple of meters below the top of
the spire. There is a large nest just out of your reach.
END_ROOM_DESCR
NOUN [Chrome key]
key
Chrome
There is a chrome key on a string here.
WEIGHT 1
SIZE 1
POINTS 2
WEARABLE ; can be worn
LOCATION [Top of the spire]
INITIAL [Initial Chrome key description]
END_NOUN
147
NOUN_DESCR [Chrome key]
The key is made of chrome and is on a string. It looks like it
might come in handy.
END_NOUN_DESCR
MESSAGE [Initial Chrome key description]
Dangling from the nest on a red string is a chrome key.
END_MESSAGE
You have the option of specifying "short-cut" initial messages just like
you can with "short-cut" messages within a meta-command. For example,
we could have defined the initial message as follows:
NOUN [Chrome key]
key
Chrome
There is a chrome key on a string here.
WEIGHT 1
SIZE 1
POINTS 2
WEARABLE ; can be worn
LOCATION [Top of the spire]
INITIAL "Dangling from the nest on a red string is a chrome key."
END_NOUN
If we went a longer (i.e., multi-line) initial message we can do that as
well. For example, we could define a multi-line initial message as
follows:
NOUN [Chrome key]
key
Chrome
There is a chrome key on a string here.
WEIGHT 1
SIZE 1
POINTS 2
WEARABLE ; can be worn
LOCATION [Top of the spire]
INITIAL
Dangling from the nest on a red string is a chrome key. It looks
like it could be easily plucked from the nest -- if you wanted it
for some reason. But heaven only knows why you would want a key
like this one.
END_INITIAL
END_NOUN
CREATURE INITIAL DESCRIPTIONS
We can do the same sort of things with initial descriptions for
CREATUREs. For example, let's add a bald eagle to the above scenario
that swoops out of the sky the first time it is described -- but is
148
sitting on the nest quite peacefully after the first description -- as
follows:
CREATURE [Bald Eagle]
Eagle
Bald
A bald eagle is perched peacefully on top of the nest.
LOCATION [Top of the spire]
FRIENDLY
INITIAL
Suddenly, you hear a screech from high above you. A big bird
swoops down at you. It is a giant bald eagle and it dive bombs at
your head -- making several passes that very nearly knock you off
your precarious perch.
The eagle finally lands on the nest and seems to calm down.
END_INITIAL
END_CREATURE
The first time you are in the same room with the bald eagle the INITIAL
description will be printed. Thereafter, the normal short description
will be given -- e.g., "A bald eagle is perched peacefully on top of the
nest."
ROOM INITIAL DESCRIPTIONS
We can do the same sort of things with initial descriptions for ROOMs.
For example, let's add some descriptive prose to describe your very
first climb up to the ledge below the nest -- as follows:
ROOM [Top of the spire]
Top of the spire
DOWN [Half-way up the Spire]
INITIAL
You put you knee between a crack in the spire to wedge yourself
safely while you swing your foot up to the ledge. Your foot lands
on top of some loose stones and you grab at the ledge with your
hands. You just catch the ledge with your finger tips. Finally,
you manage to pull yourself up and you collapse exhausted on the
ledge. After resting awhile, you regain enough of your strength
and aplomb to look around you.
You are on a large ledge only a couple of meters below the top of
the spire. There is a large nest just out of your reach.
END_INITIAL
END_ROOM
ROOM_DESCR [Top of the spire]
You are on a large ledge only a couple of meters below the top of
the spire. There is a large nest just out of your reach.
END_ROOM_DESCR
149
The first time you enter the room, the INITIAL description will be used
to describe the room. On subsequent visits to the room or whenever you
give the command LOOK, the normal description will be given. e.g., ...
You are on a large ledge only a couple of meters below the top of
the spire. There is a large nest just out of your reach.
CHANGING DESCRIPTIONS
Version 1.5 adds one other way to change the descriptions for NOUNS,
CREATURES and ROOMS. This is by using the new ChangeDescr meta-command
token. For example, to change the description of the CREATURE [Ogre] to
the description contained in the MESSAGE [Angry Ogre], you would use the
following meta-command:
ChangeDescr [Ogre] [Angry Ogre]
This capability will be particularly useful when you want to change
descriptions for ROOMs to give the appearance of more rooms without
really having more rooms. For example, your game might have an
earthquake that changes all of the rooms' descriptions to reflect the
damage, but does not change the basic map of the game. This could be
done by a series of meta-commands similar to the following:
ChangeDescr [Town Square] [Town Square -- after quake]
Another example, you might want to have a NOUN which is window in a room
that starts as being boarded-up, but after the player uses a crowbar on
it, its description should change to "covered with loose boards." This
could be done with:
ChangeDescr [window] [window --with loose boards]
"AUTOEXEC" META-COMMANDS FOR ROOMS
Version 1.5 of the Master's Edition adds the ability to execute a set of
meta-commands immediately upon entering a room. This is know as an
"AutoExec" capability. As an example, the game HOLMES (included with
Version 1.5) uses this capability to select one of eighteen cases for
the player to try to solve. This is done, by have the starting room for
the game a room that has an AUTOEXEC for the verb SELECTCASE (which must
be defined as a verb). The meta-commands for the verb SELECTCASE then
prompts the player to select a case (from 1 to 18), check to see that a
proper case was selected (i.e., number 1 to 18), and then changes the
various ROOM DESCRIPTIONS to correspond to the case selected. The logic
to accomplish this is shown below:
STARTING_ROOM [Select Case Room]
150
ROOM [Select Case Room]
221B Baker Street
! Do SELECTCASE command to get Case number and change various
ROOM_DESCR's
AUTOEXEC SELECTCASE
END_ROOM
ROOM_DESCR [Select Case Room]
You need to select one of the following cases to solve.
1 - The Adventure of the Dead Inventor
2 - The Adventure of the Missing Cuckoo
3 - The Case of Murder in the Park
4 - The Adventure of the Vanishing Lady
5 - The Case of the Vicious Viper
6 - The Adventure of the Missing Knife
7 - The Adventure of the Mysterious Message
8 - The Case of the Missing Rolls Royce
9 - The Adventure of the Golden Coins
10 - The Case of the Code Crossword
11 - The Case of the Crashed Cab
12 - The Silenced Maintenance Man
13 - The Case of the Jilted Jockey
14 - The Case of the Northern Cross
15 - The Case of the Dead Letter Murders
16 - The Adventure of West Landings Ghost
17 - The Case of the Vanishing Silver
18 - The Case of the Last Alibi
END_ROOM_DESCR
COMMAND SELECTCASE
PrintMessage "Enter the number of the case you wish to solve"
GetVariable [Case]
SetVariableTo [Money] 25
SetVariableTo [Number of Passes] 2
SetVariableTo [Starting Time] 1302
SetTimeToVariable [Starting Time]
END_COMMAND
MESSAGE [Please enter a number from 1 to 18 only!]
Please enter a number from 1 to 18 only!
END_MESSAGE
COMMAND SELECTCASE
! Check for Valid Case number
VariableLT [Case] 1
GoToRoom [Select Case Room]
PrintMessage [Please enter a number from 1 to 18 only!]
ReDirectTo SELECTCASE
DoneWithTurn
END_COMMAND
151
COMMAND SELECTCASE
! Check for Valid Case number
VariableGT [Case] 18
GoToRoom [Select Case Room]
PrintMessage [Please enter a number from 1 to 18 only!]
ReDirectTo SELECTCASE
DoneWithTurn
END_COMMAND
COMMAND SELECTCASE
! Change all of the ROOM_DESCR's to the those for the Case 1
VariableEquals [Case] 1
ChangeDescr [Starting Room] [Case1 Starting Room]
ChangeDescr [Loire Gallery] [Case1 Loire Gallery]
ChangeDescr [Scotland Yard] [Case1 Scotland Yard]
ChangeDescr [Seymore Park] [Case1 Seymore Park]
...
ChangeDescr [Stock Exchange] [Case1 Stock Exchange]
ChangeDescr [Cab Company] [Case1 Cab Company]
ChangeDescr [Newspaper] [Case1 Newspaper]
ChangeDescr [Pub] [Case1 Pub]
ChangeDescr [Shipping Company] [Case1 Shipping Company]
GoToRoom [Starting Room]
DoneWithTurn
END_COMMAND
COMMAND SELECTCASE
! Change all of the ROOM_DESCR's to the those for the Case 2
VariableEquals [Case] 2
ChangeDescr [Starting Room] [Case2 Starting Room]
ChangeDescr [Loire Gallery] [Case2 Loire Gallery]
ChangeDescr [Scotland Yard] [Case2 Scotland Yard]
ChangeDescr [Seymore Park] [Case2 Seymore Park]
...
ChangeDescr [Stock Exchange] [Case2 Stock Exchange]
ChangeDescr [Cab Company] [Case2 Cab Company]
ChangeDescr [Newspaper] [Case2 Newspaper]
ChangeDescr [Pub] [Case2 Pub]
ChangeDescr [Shipping Company] [Case2 Shipping Company]
GoToRoom [Starting Room]
DoneWithTurn
END_COMMAND
These sets of ChangeDescr commands would be repeated for all 18 cases.
152
SETTING COLORS WITHIN MESSAGES AND DESCRIPTIONS
The Master's Edition allows you to change colors of words within your
messages and descriptions and to mix and match colors to suit your
needs. You can even cause some words to blink -- if you want.
The way this is done is to insert "control characters" within your text
wherever you wish to change colors from the "normal" text colors. These
"control characters" are formed while using your text editor or word
processor by simultaneously holding down the ALT key and a number key on
the numeric key pad.
The ALT-number combinations and their associated colors are as follows:
Black = ALT 0
Blue = ALT 1
Green = ALT 2
Cyan = ALT 3
Red = ALT 4
Magenta = ALT 5
Brown = ALT 6
"Normal" = ALT 7
Blinking = ALT 8
These ALT-numeric key combination each create a special character in the
text. For example, the ALT-1 key combination creates a "happy face"
character which will cause the words that follow it to be printed on a
color monitor in blue. This blue color will remain in effect until
either (1) you change color again using another special character within
the message or description, or (2) the game's "turn" is done and AGT
asks the player to enter another command -- which ever comes first.
Each new turn of the game will cause AGT to revert to the game's
"normal" text color.
When AGT's MRUN program encounters these special control characters
within a message or description, it will change the color accordingly
and in place of the special character it will print a space -- so your
spacing within your text will remain the same. For example, in the
following message, we will change the color of the text to blue at the
word "blue" by using our "happy face" character:
MESSAGE [Example of color changes]
The message should be blue now.
END_MESSAGE
Where the happy face is will be a space in the final printed message,
but all of the text after that will be shown on the screen in blue.
If you wish to make only the word "blue" blue and revert to the "normal"
text color for the word "now," you would do this by inserting an ALT-7
color control character (a small "dot" character) between the words
"blue" and "now" -- as shown below:
153
MESSAGE [Example of color changes]
The message should be blue∙now.
END_MESSAGE
"ILLEGAL" DIRECTION MESSAGES
There is now a way to print "customized" messages when you attempt to go
in "illegal" directions. This is done by printing a message whenever
the room number for a given direction is greater than a 1000.
Specifically, if you give a room number of 1005 for going EAST from the
current location, you will get message number five printed whenever you
try to go EAST from the current location.
For example, let's say that you are on top of a cliff and your want to
give the message "You will fall to your death if you go $verb$." if you
go NORTH or NORTHEAST and the message "You take a few steps and decide
that it would be safer to return to where you were." if you go NORTHWEST
or WEST. You could do this by putting the following in the first part
of your game's source file:
#DEFINE [You'll fall and die message] 1001
#DEFINE [You decide to retreat to safety message] 1002
MESSAGE [First message in game file]
You will fall to your death if you go $verb$.
END_MESSAGE
MESSAGE [Second message in game file]
You take a few steps and decide that it would be safer to return to
where you were.
END_MESSAGE
You would get these messages to work by using the following in the ROOM
definition:
ROOM [Top of Cliff]
Top of Cliff
NORTH [You'll fall and die message]
NORTHEAST [You'll fall and die message]
NORTHWEST [You decide to retreat to safety message]
WEST [You decide to retreat to safety message]
SOUTH [Path leading down the cliff]
END_ROOM
ROOM_DESCR [Top of Cliff]
You are on the top of a high cliff. The path you climbed up to
reach your current location is to the south.
END_ROOM_DESCR
154
CUSTOM FONTS
If the game is being played on an EGA or VGA monitor, it is possible to
use "customizeable" fonts with the normal text-based output.
Specifically, the default font will be contained in a file called
GAMENAME.FNT. This font will be loaded automatically at the beginning
of the game. If the game is being played on a monochrome or CGA monitor
(or if the GAMENAME.FNT font file can not be found on the current
directory) the game will continue to use its "standard" font.
During the game, you may change fonts using the LoadFont meta-command.
For example:
LoadFont [Old English]
will change the default font to "Old English." If the game is being
played on a monochrome or CGA monitor (or if the font file can not be
found on the current directory) the LoadFont meta-command will have no
effect and the game will continue to use its current font.
In order to use different fonts, you must define the font files you plan
to use in the game source code as follows:
FONTS
[Old English] OLDENG
[Digital] DIGITAL
[Runic] RUNIC
[Standard Font] STANDARD
END_FONTS
Where the words follow the bracket definitions are the *.FNT file names
to be found on the current directory, e.g., OLDENG.FNT contains the "Old
English" font.
A collection of about 30 fonts can be found in the FONTSTUF.ZIP file.
FONTSTUF.ZIP also contains a font editor FONTEDIT.EXE that will enable
you to design your own custom fonts or edit the 30 or so fonts provided.
By the way, the font loaded by AGT's MRUN or by FONTEDIT will remain as
the active display font for your computer after this program is
finished. To restore the font that is the "default" for your monitor,
you will need to give the DOS command MODE CO80.
NOTIFY COMMAND
You can use the command NOTIFY to have the game give you a specific
message whenever your score changes. This is often useful when
debugging a game.
155
USER SPECIFIED "STRINGS"
The Master's Edition adds the capability to have up to 25 user defined
strings that may be initialized in the AGT game source file(s) or input
during the game by the player. These strings maybe up to 15 characters
in length.
To initialize them in the source files for the game, do something like
the following:
STRINGS
[Name] John
[Sex] Male
[Eyes] Blue
[Hair] Brown
[City1] San
[City2] Francisco
[State] California
END_STRING
Notice that each string must be only one word, that is why "San" had to
be a sperate string from "Francisco."
Then to print these strings out in messages, you would something like
the following:
MESSAGE [Vital Statistics]
Hi, my name is $Str[Name]$ and I am a red-blooded $str[Sex]$ living
in $Str[City1]$ $Str[City2]$, $Str[State]$.
I have $str[Eyes]$ eyes and $str[Hair]$ hair.
END_MESSAGE
Just like $NOUN$, $noun$ or $Noun$, the user defined strings would be
capitalized based on how $STR1$, $str1$ or $Str1$ is capitalized.
You may only use the GetString metacommand token to get the values for
these strings from the Player's keyboard input as follows:
#DEFINE [Player] 1
#DEFINE [Age] 4
COMMAND ANY
FlagOFF [Game started]
TurnFlagON [Game started]
PrintMessage "What is your first name?"
GetString [Player]
PrintMessage "What is your age?"
GetVariable [Age]
VariableGT [Age] 30
PrintMessage "#Var[Age]#!!! .... my or my ... that is really old!"
END_COMMAND
156
...
COMMAND ANY
Chance 5
PrintMessage [Strange Voice]
END_COMMAND
MESSAGE [Strange Voice]
You hear a strange voices calling "$Str[Player]$... $Str[Player]$."
END_MESSAGE
ENHANCED QUESTION AND ANSWER CAPABILITIES
Version 1.5 greatly expands the Master's Edition's capability for
dealing with questions and answers. Now you can have up to 100 sets of
questions and associated answers. Further, you can have answers that
can include "logical" relations of AND and OR. For example, the
following series of questions and answers represent the solution to case
5 in the game HOLMES:
QUESTION [Case5 Who ?] Who killed Harry Wilcox?
ANSWER [Case5 Who ?] Robert OR Simms OR Assistant
QUESTION [Case5 How ?] How was he killed?
ANSWER [Case5 How ?] Fork
QUESTION [Case5 Why ?] What was the motive?
ANSWER [Case5 Why ?] Revenge OR Pregnant OR Sister OR Pregnancy
For example, if the answer the player gives to the "Why ?" question
includes any of the words "revenge" or "pregnant" or "sister" and/or
"pregnancy" -- the answer would be determined to be correct.
You can also use "AND" relations as shown by the following example:
QUESTION [Explorers ?] Which explorers found the Columbia River?
ANSWER [Explorers ?] Lewis AND Clark
The player must give an answer that has both of the words "Lewis" and
"Clark" for AGT to determine the answer as correct. The words may be in
any order and may be part of a much longer answer.
BUILT-IN TIME CAPABILITIES
The Master's Edition has built-in time capabilities that can be set,
tested and displayed.
To set the starting time for your adventure, put something like the
following in your game's AGT source file:
157
STARTING_TIME 1247
DELTA_TIME 15
This would cause your game to start at 12:47 PM (12:47 AM would have a
STARTING_TIME of 47) and to be incremented by a random number of minutes
(from 0 to 15) after each turn of the game.
The current time may be printed out in messages by using $TIME$ (e.g.,
12:47 PM) or $time$ (e.g., 12:47 pm).
There are several metacommand tokens that be used with time:
TimeGT {num1} -- This is a conditional meta-command and will
return a TRUE or FALSE depending upon whether
the current time is greater than num1.
TimeLT {num1} -- This is a conditional meta-command and will
return a TRUE or FALSE depending upon whether
the current time is less than num1.
SetVariableToTime {num1} -- This sets variable num1 to the
current time.
SetTimeToVariable {num1} -- This sets the current time to
variable num1.
SetTime {num1} -- This sets the current time to num1.
SetDeltaTime {num1} -- This sets the current value of DELTA_TIME
to num1.
AddToTime {num1} -- This adds num1 to the current time. Note: For
1 hour and 10 minutes, you would have num1 set
to 110 -- not 70.
OPTIONS FOR DISPLAYING SCORE AND STATUS LINE
The Master's Edition allows the game designer to select options for how
the game will display the SCORE and display the STATUS LINE.
Specifically, to set the SCORE option to 2, put the following line in
your game's source file:
SCORE_OPTION 2
The available options are:
0 -- The "Default" -- shows everything in the SCORE display.
1 -- Don't show the maximum number of rooms.
158
2 -- Don't show the maximum possible score.
3 -- Don't show either the maximum rooms or possible score.
There is no need to have a "SCORE_OPTION 0" line, since AGT will
automatically use the default if not SCORE_OPTION is encountered in the
game's source file(s).
To set the STATUS LINE option to 2, put the following line in the game's
source files:
STATUS_OPTION 2
The available option are:
0 -- The "Default" -- shows "standard" STATUS LINE display
consisting of current "Room Name", "Score", and "Move."
1 -- Same as "Default" except "Time" rather than "Move" -- i.e., a
STATUS LINE display consisting of current "Room Name",
"Score", and "Time."
2 -- Same as "Default" except "Score" is omitted -- i.e., a STATUS
LINE display consisting current "Room Name" and "Move."
3 -- A STATUS LINE display consisting only of current "Room Name"
and "Time."
There is no need to have a "STATUS_OPTION 0" line, since AGT will
automatically use the default if no STATUS_OPTION is encountered in the
game's source file(s).
OTHER NEW META-COMMAND TOKENS
New Conditional Tokens:
NOUNIsMan {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Man
NOUNIsWoman {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Woman
NOUNIsThing {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Thing
159
OBJECTIsMan {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Man
OBJECTIsWoman {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Woman
OBJECTIsThing {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Thing
DirectionOK {none} -- Returns TRUE or FALSE depending upon
current direction leading to another
valid location. Will return FALSE if
current verb is not a direction.
DirectionIS {num1} -- Returns TRUE or FALSE depending upon
current direction being num1 (i.e.,
num1 = 1 for north, etc.) Will
return FALSE if current verb is not a
direction.
BetweenRooms {n1} (n2} -- Returns TRUE or FALSE depending upon
current location being between (and
including) rooms n1 and n2.
HasVisitedRoom {num1} -- Returns TRUE or FALSE depending upon
whether player has visited room num1.
EnteredOBJECT {none} -- Returns TRUE or FALSE depending upon
whether current command has a valid
OBJECT.
New Action Tokens:
ToggleMovable {num1} -- Toggles "movable status" for NOUN
num1.
ChangePoints {itm} {pts} -- Changes point value of item (ROOM,
NOUN or CREATURE) to pts points.
DestroyOBJECT {none} -- Destroys OBJECT (if any)
GetVariable {num1} -- Gets variable num1 (1 to 25) from
player's keyboard input.
SetVariableToTime {num1} -- Sets variable num1 to the current
time.
160
SetTimeToVariable {num1} -- Sets the current time to variable
num1.
AddToTime {num1} -- This adds num1 to the current time. Note: For
1 hour and 10 minutes, you would have num1 set
to 110 -- not 70.
SUMMARY OF ALL NEW MASTER'S EDITION META-COMMAND TOKENS
New Conditional Tokens:
NOUNIsMan {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Man
NOUNIsWoman {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Woman
NOUNIsThing {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the NOUN is a
creature and a Thing
OBJECTIsMan {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Man
OBJECTIsWoman {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Woman
OBJECTIsThing {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the OBJECT is
a creature and a Thing
SongPlaying {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether there is a
song playing or not at the current
moment.
SoundIsON {none} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the player has
the sound option ON.
161
DirectionOK {none} -- Returns TRUE or FALSE depending upon
current direction leading to another
valid location. Will return FALSE if
current verb is not a direction.
DirectionIS {num1} -- Returns TRUE or FALSE depending upon
current direction being num1 (i.e.,
num1 = 1 for north, etc. Will return
FALSE if current verb is not a
direction.
BetweenRooms {n1} (n2} -- Returns TRUE or FALSE depending upon
current location being between (and
including) rooms n1 and n2.
HasVisitedRoom {num1} -- Returns TRUE or FALSE depending upon
whether player has visited room num1.
EnteredOBJECT {none} -- Returns TRUE or FALSE depending upon
whether current command has a valid
OBJECT.
TimeGT {num1} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the current
time is greater than num1.
TimeLT {num1} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending upon whether the current
time is less than num1.
Room_PixHere {num1} -- This is a conditional meta-command
and will return a TRUE or FALSE
depending on whether the num1
ROOM_PIX picture may be viewed in the
current room.
New Action Tokens:
LoadFont {num1} -- Loads and uses font num1 (from FONT
list)
ShowPicture {num1} -- Shows "global" picture num1 (from 1
to 250)
IfYShowPicture {num1} -- Shows "global" picture num1 (from 1
to 250) if Player answers YES to
query about showing the picture.
ShowROOM_PIX {num1} -- Shows "ROOM_PIX" picture num1 (from 1
to 30)
162
IfYShowROOM_PIX {num1} -- Shows "ROOM_PIX" picture num1 (from 1
to 30) if Player answers YES to query
about showing the picture.
PlaySong {num1} -- Plays the song/sound file num1 once.
The standard mode is to play the song
until it is finished and then to
stop.
RepeatSong {num1} -- Plays the song/sound file num1
repeatedly. When the song is
finished it would automatically be
started again.
PlayRandom {num1} {num2} -- Plays a random song/sound file
between num1 and num2 once. The
song/sound will be played until it is
finished and then it will stop.
EndRepeatSong {none} -- Causes the current song/sound to stop
when it is finished, i.e., the
repeating feature would be turns off.
StopSong {none} -- Causes the current song/sound to stop
immediately. Once the StopSong
command has been given, the song can
not be resumed without giving a new
PlaySong or RepeatSong token.
SuspendSong {none} -- Causes the current song/sound to stop
immediately -- but it can be resumed
at the current spot at a later time.
ResumeSong {none} -- Resumes playing a song that had been
suspended by a SuspendSong token at
the spot where it was suspended.
ToggleMovable {num1} -- Toggles "movable status" for NOUN
num1.
ChangePoints {itm} {pts} -- Changes point value of item (ROOM,
NOUN or CREATURE) to pts points.
DestroyOBJECT {none} -- Destroys OBJECT (if any)
GetString {num1} -- Gets string num1 (1 to 25) from
player's keyboard input. String
length will be truncated to 15
characters if necessary.
GetVariable {num1} -- Gets variable num1 (1 to 25) from
player's keyboard input.
163
SetVariableToTime {num1} -- Sets variable num1 to the current
time.
SetTimeToVariable {num1} -- Sets the current time to variable
num1.
SetTime {num1} -- Sets the current time to num1.
SetDeltaTime {num1} -- Sets the current value of DELTA_TIME
to num1.
AddToTime {num1} -- This adds num1 to the current time.
Note: For 1 hour and 10 minutes, you
would have num1 set to 110 -- not 70.
DoSubroutine {num1} -- Causes the meta-commands in
Subroutine num1 to be executed
Return -- Causes an immediate exit from the
currently executing Subroutine (if
any), i.e., meta-command processing
would resume immediately after the
DoSubroutine token that called the
Subroutine in the first place. Each
Subroutine must have at least one
"Return"!
164
APPENDIX A: AGT ERROR MESSAGES
ERRORS DURING GAME COMPILATION
Error: "VERB is not a valid verb" -- VERB is not a standard AGT verb,
nor has it been defined (so far) as a synonym for another verb. This
error is in the *.AGT file.
Error: ">>> Ignored: ASCII text" -- ASCII text encountered during
reading of *.AGT file. Text does not correspond to anything normally
expected in this file. Probably, just a comment by the game designer.
Error: "Too many commands -- Processing halted" -- AGT only allows 900
meta-commands. The current meta-command being read from the *.AGT file
would have been number 901. This is a game designer error.
Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL VERB" -- This
meta-command has a VERB which the parser does not recognize as a
standard AGT verb, a custom verb or a synonym for a valid verb. This is
a game designer error.
Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL NOUN or OBJECT" -- This
meta-command has a NOUN or OBJECT which the parser does not recognize as
a standard AGT noun or a synonym for a valid noun. This is a game
designer error.
Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL TOKEN" -- This meta-com-
mand has something in it that the program does not recognize as a token.
Probably, a game designer comment or a spelling mistake.
ERRORS DURING RESTORING GAME
Error: "File not found, can't restore FileName" -- FileName is not on
disk.
ERRORS DURING GAME PLAY
Error: "I don't understand VERB as a verb." -- Try another VERB.
Probably a spelling mistake.
Error: "I don't understand NOUN as a noun." -- Try another word to
identify this noun. May be a noun that does not really play a
significant part in the game, i.e., something described in general in
the room description, but not a separate object in the room. May also
be a spelling mistake.
Error: "I don't understand PREP as a preposition." -- Try another
preposition. May be a spelling mistake.
165
Error: "I don't understand OBJECT as the object of a preposition." --
Try another word to identify this noun. May be a noun that does not
really play a significant part in the game, i.e., something described in
general in the room description, but not a separate object in the room.
May also be a spelling mistake.
Error: "Which NOUN do you mean, the ADJ1 NOUN or the ADJ2 NOUN?" -- Two
or more nouns with the same name are present in the current room.
Specify the one you mean by some phrase that includes the appropriate
NOUN's adjective.
Error :"I don't understand WORD as either a verb or a noun". Try
another word to convey what you mean. May be a spelling mistake.
Error: "You need a preposition and an object whenever you try to VERB a
NOUN." Some verbs require prepositions and objects in order to work
properly. For example, PLACE BOOK ON THE TABLE is fine, but PLACE BOOK
by itself will generate this error.
Error: "Too many words in command". AGT allows for a maximum of 12
words in each part of a compound command (i.e., between AND's and
THEN's). Re-phrase your command to be more succinct.
TURBO PASCAL RUN-TIME ERRORS
In addition to the above errors which are generated by AGT, it is
possible to get errors from Turbo Pascal -- the language in which AGT is
written. Specifically, you might get the following two run-time errors
from Turbo:
101 "Disk Write Error" -- You would get this error when there is
no more room on your disk, i.e., it is full. This situation
might occur when (1) you are compiling a game and there is not
enough room for the various files being created by the
MCOMPILE program (i.e., *.D$$, *.DA1, etc) or (2) you trying
to save a game and there is not enough room on the disk for
the data being saved.
201 "Out of Range Error" -- You would get this error if your game
source code has a value that is out of range -- like a
"illegal" negative number or a label that is too long.
203 "Heap Overflow Error" -- You would get this error if your
computer does not have enough internal memory. AGT requires a
computer with at least 512K of available memory -- after
counting for all of the memory resident or TSR programs.
166
APPENDIX B: RECOMMENDED SHAREWARE UTILITIES
PIANOMAN 4.0
PIANOMAN lets you play the keyboard of an IBM-PC (or close compatible)
like an electronic piano. The keys sound a tone as long as you hold
them down, and stop when you release them. You can record and edit
music, insert and delete notes, adjust pitch and length, make global
changes, and save/retrieve files.
To register PIANOMAN, send $25 to:
Support Group Inc.
P.O. Box 130
McHenry, MD 21541
You may also register using MasterCard or VISA by calling 800/USA-GROUP
or 301/889-7893.
MELODY MASTER
Melody Master lets you create, save, edit, and play music on a PC. The
easy-to-use graphic interface contains a staff on which basic music
notation is placed and includes on-screen help. You can configure
tempos, and note-lengths and modify the program's colors. Melody Master
will also help you to insert music in your own programs whether you
program in C, Pascal, BASIC or in DOS batch files. You don't have to
know how to write music - Melody Master includes a large collection of
ready-to-play melodies! Supports Hercules, CGA, EGA and VGA. ASP
member.
Registration Information:
-------------------------
Regular - $19
Commercial License - $49
Send registrations to:
Shareable Software International
PO Box 59102
Schaumburg, IL 60159
800-622-2793 (orders only)
708-397-1221 (voice)
708-397-0381 (fax)
215-623-6203 (BBS, Join Conference 77)
CompuServe: 76226,2652
Internet: 76226.2652@compuserve.com
167
GRAPHIC WORKSHOP
Graphic workshop is a simple, menu driven environment which will let you
perform the following operations on graphic files:
- View them.
- Convert between any two formats (with a few restrictions).
- Print them to any LaserJet Plus compatible or PostScript laser
and many dot matrix printers. Graphic Workshop can print
color pictures to color PostScript and inkjet printers.
- Dither the color ones to black and white.
- Reverse them.
- Rotate and flip them.
- Scale them.
- Reduce the number of colors in them and do color dithering.
- Sharpen, soften and otherwise wreak special effects on them.
- Crop them down to smaller files
- Scan in completely new files, assuming that you have a
supported scanner.
- Adjust the brightness and color balance of the color ones.
Versions of Graphics Workshop are available for both DOS and WINDOWS.
Using Graphic Workshop, you can have your image files in the formats
that your software recognizes, all without keeping track of numerous
funky utilities. In addition, using the halftoning and dithering
facilities of Graphic Workshop, you can convert full color digitized
photographs for use as superb black and white clip art, suitable for
inclusion in your documents.
You can register Graphic Workshop by send $40.00 to:
Alchemy Mindworks Inc.
P.O. Box 500
Beeton, Ontario
L0G 1A0
Canada
IMPROCES
IMPROCES is the DOS-only "jack of all trades" for PC graphics. It has
many features: Image contrast enhancement, Histograms, Sharpening by
convolution, Custom filters, Full control of the VGA palette, Clipboard,
Five stroke Fonts in five sizes and the ability to import bit-map fonts,
FAT BIT editor, many drawing tools, flips, mirror, Color Cycling, Plasma
and terrain fractals, UNDO, XMS/EMS support, edit up to five images at
one time, etc... IMPROCES can use a wide variety of SVGA video cards in
resolutions up to 1024x768x256. The IMPROCES package is incredibly fast
and powerful, but it is also incredibly easy to use.
You may register IMPROCES with your Master Card or VISA. There are
three ways to do this:
168
Ted Gruber Software:
VOICE: (702)735-1980 Monday - Friday, 10am - 5pm PST
Software Excitement!:
VOICE: (800)444-5457 24 hours a day.
IMPORTANT: Be sure to *SPECIFY* that you want to order the *REGISTERED*
version of IMPROCES. Software Excitement! is a shareware distributor
and an authorized distributor of the shareware version of IMPROCES, so
if you don't specify the registered version, they might send you a copy
of the unregistered version!
COMPUSERVE: Type GO SE to visit the Software Excitement! on-line store.
Specify floppy disk format, 5 1/4" 360K or 3 1/2" 1.44 meg. Your card
will be charged $25 ($35 outside of North America) and IMPROCES will be
shipped as soon as possible.
If you are using a check or money order, mail your registration to
directly to the author of IMPROCES at: ($25, $35 outside of North
America)
John Wagner
6161 El Cajon Blvd, Suite B-246
San Diego, CA 92115
California residents, please add the appropriate sales tax. Outside of
the United States and Canada, registration is $35. Please ensure that
your check is in U.S. dollars, _DRAWN_ on a U.S. Bank.
PAINT SHOP PRO
PAINT SHOP PRO is a wonderful graphics utility that runs under WINDOWS.
It does everything that GRAPHICS WORKSHOP and IMPROCES do (see above).
PAINT SHOP PRO is available for $49 from:
JASC, Inc.
17743 Evener Way
Eden Prairie, MN 55346
(612) 934-7117
169
APPENDIX C: ANNUAL AGT CONTEST
Each year, Softworks sponsors an annual contest for the best computer
text adventure game developed using the Adventure Game Toolkit (AGT).
The Annual Adventure Game Toolkit game writing contest offers a grand
prize of $100 for the best game submitted. Additional prizes may be
added if the judges decide that more than one entry is outstanding.
game writers, including the contest winner(s), will also retain all
rights to their games.
"The main purpose of this contest is to encourage people to share the
games they've written using the Adventure Game Toolkit," said Mark
Welch, one of two co-authors of the program. "A lot of people start to
write a game, and spend quite a few hours on it, but stop before they
really finished the game, or before it's really playable," said Welch.
"We are hoping that the contest will inspire people to create
full-featured, playable games that can be enjoyed by other adventure
game fans."
PREVIOUS CONTESTS
Softworks has sponsored three prior adventure game writing contests.
The winner of the first contest was "Alice" written by Douglas Asherman
of Oakland, California. Alice put the player in the role of Alice in
Wonderland, meeting many of the same characters described in Lewis
Carroll's 19th-century book while also adding some humorous 20th-century
perspective.
The 1988 contest winner was "A Dudley Dilemma" by Lane Barrow, a Ph.D
candidate at Harvard. In this game, the player assumes the role of a
Harvard student in his/her quest for knowledge, adventure and a diploma.
Along the way, the player experiences a student sit-in and meets
panhandlers, MIT students and other bizarre characters roaming Harvard
Square.
"Son of Stagefright" by Mike McCauley was the 1989 winner. In this
game, you play the role of an actor (or actress) trying to get out of an
old, abandoned theater. This is an adventure game in three "Acts",
where each Act has a different theme and a different challenge. The
game is fun(ny), frightening and very clever.
"Crime to the Ninth Power" by Patrick Farley was the 1990 contest
winner. In this game, the player helps Cliff Diver, a San Francisco
private investigator escape from the deadly milieu of the Zamboni crime
family's secret headquarters. Cliff Diver is cut from the same cloth as
such famous PI's as Dashiell Hammett's Sam Spade and Raymond Chandler's
Philip Marlowe.
170
In 1991, the contest had two games that tied for 1st place: "CosmosServe
-- An Adventure Game for the BBS-Enslaved" by Judith Pintar, and "The
Multi-Dimensional Thief" by Joel Finch. In "CosmoServe," your world and
your adventure are set inside a BBS (complete with sound effects for
logging on, switching the computer ON and OFF, etc.) It is a very, very
original, innovative and unusual game! In "The Multi-Dimensional
Thief," you are a thief. Naturally, you aspire to join the largest and
most prestigious of organized thieving bodies, the Multi-Dimensional
Thieves' Guild. All you have to do is pass a simple test -- escape from
a specially prepared set of rooms which have been "borrowed" from other
universes and filled with strange items -- including the infamous
"portable hole." This game is filled with wonderful puzzles and will
remind you of Infocom's finest.
CONTEST DETAILS
To be eligible for the contest, entries must be designed using the
Adventure Game Toolkit, and must not have been publicly released before
January 1st of the contest year. Contest entries must be postmarked by
December 31st of the contest year and received by Softworks no later
than January 15 of the following year. For example, the 1993 contest
will consider games written between January 1, 1993 and December 31,
1993 and received by Softworks no later than January 15, 1994.
Judging begins approximately February 1st and the winner is announced in
the spring following the contest year. The judges consider each game's
originality, cleverness, fiendishness, humor, raw cunning and
professionalism in arriving at their decision about the contest's
winner.
Entries must be submitted on disks for the IBM PC (or compatible
computer), or for the Apple Macintosh, the Amiga or for the Atari ST
computer. AGT source code for the game must be provided, but will not
be publicly disclosed without the consent of the author. In addition to
the AGT source code, each entry must be accompanied by a game "walk-
thru" or solution to be used by the contest judges. A map of the game
would also be very helpful, but is not required.
No purchase or fee is required to enter. Game authors need not be
registered users of AGT to enter the contest. Game writers, including
the contest winner(s), will also retain all rights to their games --
including the right to copyright and sell their games -- if they wish.
However, it is "customary" for the contest game authors to allow their
games' source code to be distributed (to registered AGT user only) -- if
their games are judged as one of the "Best of the Contest."
171
APPENDIX D: ABOUT THE AUTHOR
David Malmberg has been active in the world of personal computer since
1977. He is the author or co-author of seven published software
products. His most recent software product is P-ROBOTS, which is also
available from Softworks.
His most successful products were the Turtle Graphics series published
by HESware. These two programs have sold over 80,000 copies world-wide,
were translated into Spanish, and won two Consumer Electronic Software
Showcase awards as some of the best software of 1983. These programs
are widely used in schools to teach computer literacy to children and
other computer novices.
Dave has also published numerous articles and programs in various
computer magazines. He has been a Contributing Editor of both
COMPUTE!'s HOME & EDUCATIONAL COMPUTING and MICRO magazines. He was one
of the principal authors of COMPUTE!'s FIRST BOOK OF VIC, the best
selling computer book of 1983. He has written regular columns on
educational uses of computers and on LOGO for COMMODORE and POWER/PLAY
magazines.
June 1993
172