(This is the "Dungeon Designs" column from the September 1992 issue of the Eamon Adventurer's Guild newsletter.  Copyright 1992 Eamon Adventurer's Guild, 7625 Hawkhaven Dr., Clemmons, NC 27012-9408.  You may reproduce this freely as long as this credit remains attached to the article.)


A complete listing of all variables in the MAIN PGM:

A    Temporary variable and counter
A$   String read in from EAMON.DESC
     Full command typed by player
     Name of Art. being PUT or GIVEn
A$(*)     Artifact names
A%(x,y)   Artifact data; 'x' is Art. number;
     (see below for values of 'y')
A2   Temporary variable and counter
AC   Armor Class of armor brought by player
      from Main Hall
AE   Armor Expertise; affects combat odds
AR   Artifact number of ARmor being worn
B    FAST.START parm byte; used to compute if
     FAST.START file is valid.
B$   Name of Monster being GIVEn to
     Name of Monster being REQUESTed from
     Name of Artifact being PUT
B%   Ampersand Integer array search variable
      used to pass the last location to be
      searched to the ampersand routine
     Temporary variable.
BA   Money in BAnk
BV$(*) Attack Verbs used during melees
C    Command array number of current command
C%   Ampersand search routine Counter
C$(*) Command verb array
CC   Line counter for printing valid commands
CH   Player's CHarisma
CP   Number of Columns of display (40 or 80)
CZ$  Command given in last round of play
D    Temporary variable
     Direction being moved (123456 = NSEWUD)
     Number of dice for combat resolution
D$   CHR$(4) for DOS
D%   Value to be searched for by Ampersand
      Integer array search routine
D2   Damage points taken by Defender in combat
D3   Counter variable
DF   Monster number of DeFender in combat
DI   "DIe" flag-set to 1 if player is killed
EA   Armor Expertise weighting factor
ED$  String: "EAMON.DESC"
EM   "EMbedded" location checked by Artifact
       search routine at 4800
ER$  String: "EAMON.ROOMS"
F    "Found" flag-set to 1 if a match is found
      by the search routines at 4700 and 4800
F(*) Total hits taken in combat:
      F(1) = enemies in room
      F(3) = player and friends in room
F1   Low byte of top of free memory before
      string is read in from EAMON.DESC
F2   High byte of top of free memory before
      string is read in from EAMON.DESC
FF$  Form Feed character CHR$(12) required by
      Videx 80-column cards
FR   Temporary variable used to compute
      FRiendliness of newly met monsters
G    Monster number of Guard of bound monster
GO   Player's GOld
HA   "HAve" (being carried) location checked by
      Artifact search routine at 4800
HI   "HIt" flag-set to 1 if defender has been
      hit in combat
HM   "HIMEM" variable; used to compute if
      FAST.START file is valid
K    Temporary variable used when attacking
      artifacts and freeing bound monsters
L    Line counter for screen pause
LA   Length of records in EAMON.ARTIFACTS
LK   Temporary flag variable-set to 1 if
      INVENTORY finds artifacts being carried
      or if OPEN finds artifacts in a container
LL   Number of lines in string read in from
      EAMON.DESC
LM   Length of records in EAMON.MONSTERS
LR   Length of records in EAMON.ROOMS
LS   Artifact number of artifact being carried
      that is current Light Source
LT   LiT Room flag-set to 1 if room is lit
M    Temporary counter variable
M$   Monster name being searched by array
      search routine at 4700
M$(*) Monster names
M%(x,y) Monster data; 'x' is monster number; (Monster '0' is the player)
  M%(x,0)  'Seen' flag   
  M%(x,1)  Hardiness
  M%(x,2)  Agility
  M%(x,3)  # of members in group
  M%(x,4)  Courage
  M%(x,5)  Room number
  M%(x,6)  Weight (not currently used)
  M%(x,7)  Armor thickness
  M%(x,8)  Weapon number
  M%(x,9)  Number of dice (natural weapon)
  M%(x,10) No. of dice sides (natural weapons)
  M%(x,11) Friendliness
  M%(x,12) Original size of group
  M%(x,13) Damage or hits taken
M2   Temporary variable and counter
MC   Counter for group Monsters during combat
MR%  Number of monsters that flee from combat
NA   Number of Artifacts (including those
      brought by player from the Main Hall)
NC   Number of valid Commands
ND   Number of valid Directions
NE   Number of Effects
NL   Flag set to 1 if room is Naturally Lit
NM   Number of Monsters
NR   Number of Rooms
NX   Number of eXits from room
NZ   Number of artifacts in database (not
      including those brought by player)
OF   Monster number of attacker in combat
Q    Temporary variable used in GIVE, PUT
Q$   Temporary input string used in GIVE, PUT
R    Record number to be read in from
      EAMON.DESC
     Temporary random number
R2   Number of room being moved to
R3   Number of room last moved from
RB$(*) Verb that describes non-hit attack result
RD%(*) Array containing exits from room
RE   REcord number of player character in
      CHARACTERS file on Main Hall disk.
RL   Temporary random number; temporary variable
RN$  Room Name of present room
RO   ROom number of present room
S    Number of dice Sides used to compute
      damage in combat
     Array location of Spell data for spell
      being cast
S$   Subject (object) of command
S2%(*) Current level of Spell abilities
SA%(*) Absolute level of Spell abilities
SE$  SEx of player character
SH   Artifact number of SHield being worn
SL   Temporary variable used for S$ String
      Length during array searches.
SM$(*) SMILE response verbs
SP   SPEED spell counter until expiration
SU   Flag set to 1 if spellcast was SUccessful
SX   Temporary variable used when ATTACKing
      artifacts
SY   Artifact number of SYnonym
SY$  Name of SYnonym
T(*) Total hardiness of combat groups:
      T(1) = enemies
      T(3) = friends
TA   Flag set to 1 to tell ATTACK code that
      it is handling a BLAST spellcast
TP   Total value of loot sold at end of game
UP   Flag to increase weapon ability
V$   Command Verb
V%(*) 'Seen' flag for rooms
W    Weapon number of player
     Counter at end of game for player's Weapons
W2   Complexity of readied Weapon
     Counter used at initialization to search
      for duplicate artifact names
     Number of Weapons carried by player at end
      of game
W5   Input variable for Weapon number that
      player is selling at end of game.
WA%(*) Player Weapon type Abilities
WD%(*,*) Weapon Data for weapons taken back to
      the Main Hall
WH   "WHere" location checked by Artifact
       search routine at 4800
WM   Computed odds of achieving a hit during
      combat
WP$(*) Names of all Weapons being carried by
      Player at end of game
WP%(*) Artifact number of all Weapons being
      carried by Player at end of game
WT   Combined WeighT of all artifacts being
      carried by player
X    Temporary variable and counter
Z    Number of artifact that is being PUT

'Seen' flags  These variables tell the YOU SEE routine whether it should print the long description of the room, artifact, or monster.  If the 'Seen' flag is zero, the description is printed.

Search Routine Variables  The variables EM, HA and WH are used by the various command routines to pass location search parameters to the artifact array search routine at 4800 and the monster array search routine at 4700.  The default values for these are:

     EM   <EMbedded> Room number + 200
     HA   <HAve it>  - 1 (carried by player)
     WH   <WHere>    Room number

For example, the EXAMINE command would use these defaults, in order to look for artifacts in the room, both seen and unseen, and carried by the player.  But the DROP command will set all three of these to (-1) so that only artifacts being carried by the player will be found by the search routine.  The GET routine sets HA = WH so that the player can't GET something that he is already carrying.

When the search routines at 4700 or 4800 have completed  their search,  they set the variable F = 1 if an artifact or monster is matched to the object specified by the player's command, but set F = 0 if no match was found;

Artifact Arrays  The first five array locations of all artifacts are identical:

     A%(x,0)   'Seen' flag
     A%(x,1)   Value
     A%(x,2)   Type
     A%(x,3)   Weight
     A%(x,4)   Location

There are ten different formats for the next four array locations, depending on what the artifact type is:

Type 0 (Gold), 1 (Treasure):
     A%(x,5)   Not used
     A%(x,6)   Not used
     A%(x,7)   Not used
     A%(x,8)   Not used

Type 2 (Weapon), 3 (Magic Weapon)
     A%(x,5)   Weapon type
     A%(x,6)   Complexity
     A%(x,7)   Number of dice
     A%(x,8)   Number of dice sides

Type 4 (Container)
     A%(x,5)   Artifact number of key
     A%(x,6)   Strength
     A%(x,7)   Set to 1 if open
     A%(x,8)   Not used

Type 5 (Lightable)
     A%(x,5)   Counter until extinguished
     A%(x,6)   Not used
     A%(x,7)   Not used
     A%(x,8)   Not used

Type 6 (Drinkable)
     A%(x,5)   Healing amount
     A%(x,6)   Number of uses
     A%(x,7)   Set to 1 if open
     A%(x,8)   Not used

Type 7 (Readable)
     A%(x,5)   Record number of 1st Effect
     A%(x,6)   Number of Effects to print
     A%(x,7)   Set to 1 if open
     A%(x,8)   Not used

Type 8 (Door/Gate)
     A%(x,5)   Number of room beyond
     A%(x,6)   Artifact number of key
     A%(x,7)   Strength
     A%(x,8)   Set to 1 if hidden

Type 9 (Key)
     A%(x,5)   Not used
     A%(x,6)   Not used
     A%(x,7)   Not used
     A%(x,8)   Not used

Type 10 (Bound Monster)
     A%(x,5)   Monster number when freed
     A%(x,6)   Artifact number of key
     A%(x,7)   Monster number of Guard
     A%(x,8)   Not used

Type 11 (Wearable)
     A%(x,5)   Armor class (not implemented)
     A%(x,6)   Type (not implemented)
     A%(x,7)   Not used
     A%(x,8)   Not used


That pretty much covers all of the variables.  See the DDD manual for more information.

ProDOS NOTE:  Most of the DOS 3.3 MAIN PGM Init code at 31000 and 33000 is broken out into a separate program named MAKE.FAST.START.  The MAIN.PGM uses the FAST.START VAR file generated by this program to save memory and for much faster startups.  Once you have entered your data, run MAKE.FAST.START before testing the adventure.

Also note that ProDOS adventures as distributed by the EAG do not usually contain the data files EAMON.ARTIFACTS nor EAMON.MONSTERS.  This data is contained in the FAST.START file.  If you want to edit or list the adventure data, first run the program MAKE.ARTS.MONS to generate the two missing data files.  If you make a change to the artifact or monster data, be sure to rerun MAKE.FAST.START when done to update the FAST.START file.
