home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / DNDOOR45.ZIP / DNDDOOR.INC < prev    next >
Text File  |  2000-04-28  |  39KB  |  763 lines

  1.  Rem * Filename: dnddoor.inc  Version: v4.5 r1.0
  2.  Rem * Variables here are included common to all subprograms.
  3.  
  4.  DefInt A-Z   ' define all default variables as integers
  5.  Rem $Dynamic ' allocate common variables and arrays at runtime
  6.  
  7.  '  define register type for interrupt function
  8.  Type RegType
  9.   AX As Integer ' A register
  10.   BX As Integer ' B register
  11.   CX As Integer ' C register
  12.   DX As Integer ' D register
  13.   BP As Integer ' base pointer
  14.   SI As Integer ' source index
  15.   DI As Integer ' destination index
  16.   Flags As Integer ' cpu flags
  17.   DS AS Integer ' data segment
  18.   ES AS Integer ' extra segment
  19.  End Type
  20.  
  21.  '  define structure for containers
  22. Type ContainerType
  23.  Closed As Integer ' closed flag 1=closed, 0=n/a, -1=open
  24.  ContainerName As String*30 ' container name from treasure.dat file
  25.  Locked As Integer ' locked flag 1=locked, 0=n/a, -1=unlocked
  26.  Keyed As Integer ' container key number 1-32767
  27.  ShortName As String*30 ' mnemonic of container name from treasure.dat file
  28.  Charges(1 To 5) As Integer ' treasure charges of container contents
  29.  Inventory(1 To 5) As Integer ' index to treasure.dat of container contents
  30.  Invisible(1 To 5) As Integer ' invisible flag -1/0 of container contents
  31.  TreasureName(1 To 5) As String*30 ' treasure name of container contents
  32. End Type
  33.  
  34.  '  action structure
  35. Type ActionType
  36.  Attribute1 As Integer ' room attribute one, 0=lit/-1=unlit
  37.  Attribute2 As Integer  ' room attribute two, 0=land/1=air/2=underwater
  38.  EncounterRate As Integer ' rate of action prompts to encounter monster
  39.  Fumble As Integer ' fumble weapons/shield result
  40.  HealthRate As Integer ' rate of action prompts to increase user health
  41.  HitPoints As Integer ' negative/positive hits for vit/fat result
  42.  Inventory As Integer  ' weapons=1/shields=2/armor=3/magic items=4 breakage
  43.  Level As Integer ' negative/positive value=lower/highest user level to enter
  44.  MonsterTalk As Integer ' talk to monster number trigger
  45.  MonsterTrigger As Integer ' number of room monster trigger
  46.  Restrictions As Integer ' level direction is restricted to, 12 bit flags
  47.  RustRate As Integer ' rate of action prompts weapons/shields rust
  48.  SpellTrigger As Integer ' number of room spell trigger
  49.  StealRate As Integer ' rate of action prompts monsters steal
  50.  Teleport As Single ' teleport trap room number result
  51. End Type
  52.  
  53.  '  define room structure. this main data file contains room descriptions,
  54.  '  directions, one container, action number, object and treasure indexes.
  55. Type RoomType
  56.  Action As Integer ' index to action file
  57.  Direct(1 To 12) As Single  ' direction link values to next room number
  58.  Flags(1 To 20) As Integer ' hidden=1/trap=2/magically hidden=3
  59.  LongDesc(1 To 5) As String*80 ' four line long description of room
  60.  MonsterClass As Integer ' number of room monster class in monclass.dat file
  61.  Object(1 To 20) As Integer ' number of object from objects.dat file
  62.  ObjCharges(1 To 20) As Integer ' object charges
  63.  ShortDesc As String*80 ' one line short description of room for brief mode
  64.  Treasure(1 To 20) As Integer ' number of treasure from treasure.dat file
  65.  TreCharges(1 To 20) As Integer ' treasure charges
  66.  Container As ContainerType ' single container per room
  67. End Type
  68.  
  69.  '  define user structure. this main data file contains user statistics,
  70.  '  values, flags, object and treasure indexes.
  71. Type UserType
  72.  CodeName As String*30 ' encrypted user codename
  73.  PassWord As String*20 ' encrypted user password
  74.  ClassName As String*20 ' encrypted user classname
  75.  ClassType As Integer ' classname number 1-10
  76.  Container(1 To 3) As ContainerType ' user's maximum of 3 containers
  77.  Inv(1 To 20) As Integer ' user's inventory index to treasure.dat file
  78.  Charges(1 To 20) As Integer ' treasure's charges/plus
  79.  Object(1 To 20) As Integer ' user's object index to objects.dat file
  80.  ObjCharges(1 To 20) As Integer ' object's charges/plus
  81.  Stats(1 To 7) As Integer ' player statistics str/int/wis/dex/con/pie/cha
  82.  Weapons(1 To 4) As Integer ' weapons proficiency percent blu/pol/sha/thr
  83.  Room As Single ' room number
  84.  Level As Integer ' player's level
  85.  Experience As Double ' player's experience
  86.  Gold As Double ' collected gold
  87.  NumCalls As Integer ' number of calls during one day
  88.  Fatigue As Integer ' fatigue points during fighting
  89.  FatigueMax As Integer ' maximum possible fatigue points
  90.  Vitality As Integer ' vitality points during fighting
  91.  VitalityMax As Integer ' maximum possible vitality points
  92.  Magic As Integer ' magic points during fighting/using spells
  93.  MagicMax As Integer ' maximum possible magic points
  94.  Poison As Integer ' user is poisoned true/false, vitality decreasing
  95.  Borrow As Double ' gold borrowed from bank
  96.  Invisible As Integer ' user is invisible true/false
  97.  Race As Integer ' player's race 1-8, hum/elf/gno/dwa/hal/hal-elf/hal-orc/ogr
  98.  Proficiency As Integer ' weapon user is proficient in 1-4
  99.  Bank As Double ' amount gold stored in bank
  100.  Sort As Integer ' sort inventory (-1/0/1)
  101.  MonstersKilled As Single ' total of all monsters killed during play
  102.  Brief As Integer ' brief mode true/false
  103.  DateOn As String*10 ' last date user logged on, form: MM-DD-YYYY
  104.  Beauty As Integer ' lady class beauty points
  105.  Glamour As Integer ' lady class glamour points
  106.  Psionic As Integer ' psionic points during fighting/casting psi spells
  107.  PsionicMax As Integer ' maximum possible psionic points
  108.  Align1 As Integer ' alignment type 1, good/neutral/evil
  109.  Align2 As Integer ' alignment type 2, lawful/neutral/chaotic
  110.  Flags As Integer ' 1=rerolled/2-128=stat wish/256=wish/512=realigned/chars
  111.  MaxCalls As Integer ' maximum calls user is allowed per day
  112.  FromHour As Integer ' time restriction logon from hour,
  113.  FromMin As Integer ' time restriction logon from minute,
  114.  ToHour As Integer ' time restriction logon to hour,
  115.  ToMin As Integer ' time restriction logon to minute.
  116.  Echo As Integer ' echo mode 0=on,-1=off
  117.  LastMessage As Integer ' last message read
  118.  Linefeeds As Integer ' linefeed mode 0=on,-1=off
  119.  Linelength As Integer ' linelength for display
  120.  Pagelength As Integer ' pagelength for display
  121.  Wordwrap As Integer ' word wrap 0=on,-1=off
  122. End Type
  123.  
  124.  '  define spell structure. this data file contains spell statistics,
  125.  '  values, and flags. this struture is used by treasure and spells.
  126. Type SpellType
  127.  SpellName As String*30 ' full name of spell
  128.  Chant As String*80 ' chant to be used for spell
  129.  Level As Integer ' level of spell/level user must be at least to cast spell
  130.  SpellType As Integer ' spell type 1-28
  131.  Teleport As Single ' spell teleports when cast
  132.  Psionic As Integer ' spell is psionic, true/false
  133.  PsionicMode As Integer ' spell is psionic, 1=attack/2=defense
  134.  ClassType As Integer ' user class allowed to cast spell, flags 1-8
  135.  Desc As String*80 ' description displayed when spell is cast
  136.  Ingred(1 To 5) As Integer ' index to treasure.dat of required ingtedients
  137.  SpellFlag As Integer ' ingredients type required flag, 1=use/2=read/4=cast
  138. End Type
  139.  
  140.  '  define monster class structure. this data file contains lists of monsters.
  141. Type MonclassType
  142.  Monsters(1 To 10) As Integer ' indexed list of ten monsters from monster.dat
  143. End Type
  144.  
  145.  '  define object structure. this data file contains object statistics,
  146.  '  values, and flags. this struture is used by users and rooms.
  147. Type ObjectType
  148.  ObjectName As String*30 ' full name of object
  149.  ShortName As String*30 ' mnemonic of object name
  150.  RoomLink As Single ' link to room number for entering object
  151.  Invisible As Integer  ' is invisible
  152.  JailTrap As Integer ' jails user if attacked
  153.  DoorLock As Integer ' locked (0=n/a,1=unlocked/2=locked)
  154.  Destination As Integer ' n/a (used to be room object was created)
  155.  Permanent As Integer ' cannot be picked up. default.
  156.  Hidden As Integer ' hidden (cannot not be seen or searched for)
  157.  Closed As Integer  ' closed (-1=closed/0=open)
  158.  Keyed As Integer ' key number 1-32767
  159.  Relocks As Integer ' relocks after entering
  160.  LongDesc As String*80 ' description displayed when object looked at
  161.  FromHour As Integer ' lights room from hour,
  162.  FromMin As Integer ' lights room from minute,
  163.  ToHour As Integer ' lights room to hour,
  164.  ToMin As Integer ' lights room to minute.
  165.  LightRoom As Integer ' lights room (-1=true/0=false)
  166.  LightTime As Integer ' light time (-1=from-to/0=anytime)
  167.  ShortDesc As String*80 ' description displayed when object entered
  168.  Trap As Integer ' trapped portal (1=poison/2=teleport/3=hits for fat/vit)
  169.  Teleport As Single ' (room number, trap=2), (hits -fat/hits +vit, trap=3)
  170. End Type
  171.  
  172.  '  define monster structure. this data file contains monster statistics,
  173.  '  values, and flags.
  174. Type MonsterType
  175.  MonsterName As String*30 ' full name of monster
  176.  PluralName As String*30 ' mnemonic plural of monster name
  177.  Treasure(1 To 5) As Integer ' five indexes to treasure.dat
  178.  Experience As Double ' experience gained by killing monster
  179.  Gold As Double ' money gained by killing monster
  180.  NumberAppearing As Integer ' maximum monsters encontered at one time
  181.  Level As Integer ' monster level/level of user required to kill monster
  182.  Hits As Integer ' hit points monster has for user to kill
  183.  Poison As Integer ' monster can poison=-1/monster is poisoned>0
  184.  LevelDrain As Integer ' can drain user levels (-1/0)
  185.  Spell As Integer ' can cast spells (equal to spell record number)
  186.  Block As Integer ' can block user from exiting room
  187.  Prevent As Integer ' can prevent user from taking treasure
  188.  Follow As Integer ' can follow user
  189.  Magic As Integer ' casts magic spell (equals index to spell record number)
  190.  Jail As Integer ' can jail attacker (-1/0)
  191.  Teleport As Single ' can teleport (equals room number)
  192.  FollowPercent As Integer ' percentage to follow
  193.  BlockPercent As Integer ' percentage to block
  194.  PreventPercent As Integer ' percentage to prevent
  195.  SpellPercent As Integer ' percentage to cast spell
  196.  PoisonPercent As Integer ' percentage to poison
  197.  DrainPercent As Integer ' percentage to drain levels
  198.  Rate As Integer ' encounter rate (action prompts)
  199.  RatePercent As Integer ' percentage encountered at rate
  200.  Permanent As Integer ' monster is permanent to room
  201.  Talk(1 To 5) As Integer ' five indexes to montalk.dat
  202.  Psionic As Integer ' monster casts psionic spells
  203.  PsionicSpell As Integer ' psionic spell casted
  204. End Type
  205.  
  206.  '  define treasure structure. this data file contains treasure statistics,
  207.  '  values, and flags. this struture is used by users and rooms.
  208. Type TreasureType
  209.  TreasureName As String*30 ' full treasure name
  210.  ShortName As String*30 ' mnemonic treasure name
  211.  Weight As Integer ' weight in gold of treasure
  212.  Gold As Integer ' value in gold of treasure
  213.  Spell As Integer ' treasure is magical (index of spell record)
  214.  Plus As Integer ' treasure plus (0=normal treasure/greater>0=weapon plus)
  215.  Coin As Integer ' coins (-1/0)
  216.  Keyed As Integer ' key number (1-32767)
  217.  Scroll As Integer ' scroll (-1/0)
  218.  Charges As Integer ' charges for weapon/armor/shield/spell
  219.  Potion As Integer ' potion (-1/0)
  220.  Armor As Integer ' treasure is armor
  221.  Shield As Integer ' treasure is shield
  222.  Weapon As Integer ' treasure is weapon
  223.  Container As Integer ' container (-1/0)
  224.  Type As Integer ' treasure type (-1=shield/0=normal/1=armor/0,<plus>=weapon)
  225.  Locked As Integer ' container (1=locked,0=n/a,-1=unlocked)
  226.  Closed As Integer ' container (1=closed,0=n/a,-1=open)
  227.  Loadable As Integer ' can be loaded with ammunition (-1/0)
  228.  Ammunition As Integer ' is ammunition (-1/0)
  229.  AmmoLoads As Integer ' if ammunition, then index to treasure.dat it loads
  230.  Invisible As Integer ' invisible (-1/0)
  231.  Permanent As Integer ' treasure remains in room (not default)
  232.  Proficiency As Integer ' weapon proficiency related (1-4)
  233.  RingType As Integer ' is a ring (1=antipoison/2=antileveldrain/3=antispell)
  234.  RingSpell As Integer ' ring antispell (-1=generic/greater>0=spell number)
  235.  Edible As Integer ' edible (-1/0)
  236.  Rustable As Integer ' rusts (-1/0)
  237.  RustPercent As Integer ' percentage rusts during room rust rate
  238.  Stealable As Integer ' stealable (-1/0)
  239.  StealPercent As Integer ' percentage monster steals during room steal rate
  240.  Launchable As Integer ' can be launched with launch ammunition (-1/0)
  241.  LaunchLoads As Integer ' is launch ammunition (-1/0)
  242.  LaunchAmmo As Integer ' if launch ammo, then index to treasure.dat it loads
  243.  Movable As Integer ' launchable device can be moved (-1/0)
  244.  Vehicle As Integer ' vehicle (-1/0)
  245.  VehicleHits As Integer ' vehicle hit points for combat
  246.  VehicleType As Integer ' vehicle type (0=land,1=air,2=underwater,3=any)
  247.  LightType As Integer ' is a light (-1/0)
  248.  LightCharges As Integer ' light charges
  249.  FuelType As Integer ' is light fuel (-1/0)
  250.  FuelCharges As Integer ' fuel charges
  251. End Type
  252.  
  253.  '  define monster talk structure. this data file contains lists of strings
  254.  '  monsters can respond with when talked to.
  255. Type MonsterTalkType
  256.  TalkMessage As String*80 ' an 80 character string response
  257. End Type
  258.  
  259.  '  help file record structure. used for help command during play,
  260.  '  uses files help.dat, edithelp.dat, dmhelp.dat, and logon.dat.
  261. Type HelpType
  262.  Text As String*70 ' text to display
  263.  CName As String*15 ' command name of command to display
  264. End Type
  265.  
  266.  '  structure for messages text file. indexed by the table record structure.
  267. Type MessageType
  268.  Message As String*80 ' length of a message line
  269. End Type
  270.  
  271.  '  table for messages. stores subject, from/to, date entered, private message
  272.  '  and if the message is deleted. fields for start and length define the
  273.  '  position of the message in the messages text file.
  274. Type TableType
  275.  ClassType As Integer ' class type of the player who entered the message
  276.  Clock As String*21 ' stores the time the message was entered from FNclock$
  277.  Date As String*10 ' system date message was stored
  278.  Flags As Integer ' user record flags for special characters entered message
  279.  From As String*30 ' field storing user who entered the message
  280.  Killed As Integer ' true if the message is deleted
  281.  Length As Integer ' length of lines in messages text file
  282.  Private As Integer ' true if the message is private
  283.  Received As Integer ' flag indicating message was read
  284.  Reply As Integer ' flag for message reply
  285.  Start As Single ' beginning of the line of the message in the text file
  286.  Subject As String*20 ' stores the subject of the message
  287.  Thread As Integer ' number of message replied to
  288.  Time As String*10 ' stores system time message was entered
  289.  Timer As Single ' stores system time in seconds message was entered
  290.  TimesRead As Integer ' stores number of times message was read
  291.  To As String*30 ' stores name of the user the message is to, or empty for all
  292. End Type
  293.  
  294.  '  define variables, fixed length/variable strings, and
  295.  '  dynamic arrays common to all subprograms.
  296. Common Shared _
  297.  ActionRecord As ActionType,_ ' action structure
  298.  Action.Prompt As String,_ ' stores action prompt Next: or Command>
  299.  Alignment.Name1() As String*7,_ ' stores three type 1 alignment names
  300.  Alignment.Name2() As String*7,_ ' stores three type 2 alignment names
  301.  Allow.Break As Integer,_ ' allows control-k checking during file output
  302.  Array() As String,_ ' string array for mail
  303.  Array.List() As String*16,_ ' string array for command help
  304.  Array.Number As Integer,_ ' contains number of array element searched for
  305.  Baud.Override As Integer,_ ' command line baud override
  306.  BBS.Name As String,_ ' name of calling bbs name from rbbs .def file
  307.  Break As Integer,_ ' returns -1 is control-k pressed
  308.  Buffer As String,_ ' stores modem i/o
  309.  Carriage.Return As Integer,_ ' supresses linefeed during output
  310.  Charges.Number As Integer,_ ' contains charges of item searched for
  311.  Chained.Rooms As Integer,_ ' used in launch routine
  312.  Chat As Integer,_ ' chat mode flag
  313.  Choice As Integer,_ ' monster number selected
  314.  Class.Name() As String*15,_ ' stores ten class names
  315.  Color.Code As Integer,_ ' current ansi color
  316.  Color.Graphics As Integer,_ ' ansi color activated remote
  317.  Command.Name As String,_ ' storage of user command
  318.  Continue As Integer,_ ' flag for continuous output
  319.  ContainerRec As ContainerType,_ ' container structure
  320.  Direction As Integer,_ ' direction 1-11
  321.  Direction() As String*9,_ ' stores eleven direction names
  322.  Door.Name As String,_ ' name of calling bbs user from rbbs .def file
  323.  Door.Time As Single,_ ' time left from rbbs .def file
  324.  DOS.Major As Integer,_ ' dos major version
  325.  DOS.Minor As Integer,_ ' dos minor version
  326.  Dungeon.Master As Integer,_ ' user is dungeon master (-1/0)
  327.  Dungeon.Master.Assistant As Integer,_ ' user is asst. DM (-1/0)
  328.  Entry.Command As Integer,_ ' last command number used for room entry
  329.  FileName As String,_ ' file name storage
  330.  Func.Buffer As String,_ ' buffer of interactive pressed function key
  331.  Governor As Integer,_ ' user is governor (-1/0)
  332.  Graphics.Off As Integer,_ ' set ansi graphics off (to white) (-1/0)
  333.  Guild.Master As Integer,_ ' user is guild master (-1/0)
  334.  HelpRecord As HelpType,_ ' help record structure
  335.  Hidden.Player As Integer,_ ' player is hidden (-1/0)
  336.  Hidden As Integer,_ ' mask input for security i/o with Mask$
  337.  High.Class.Name() As String*15,_ ' ten high class names
  338.  Inpt As String,_ ' user i/o input
  339.  Index.Number As Integer,_ ' contains index number of an item searched for
  340.  Intoxicated As Integer,_ ' user is intoxicated (equal to action prompts)
  341.  Invisible As Integer,_ ' user is invisible (-1/0)
  342.  Last.Command As String,_ ' last command entered
  343.  Last.Command.Number As Integer,_ ' number of last command entered
  344.  Last.Monster As String,_ ' name of last monster attacked
  345.  Learned.Spells As String,_ ' string of 1's and 0's of spells learned
  346.  Line.Length As Integer,_ ' maximum length of input allowed
  347.  Line.Limit As Integer,_ ' used with word wrap
  348.  Local.Mode As Integer,_ ' user is logged in at console
  349.  Locks.Smashed As Integer,_ ' used in launch routine
  350.  Logged.In As Integer,_ ' flag indicating user is logged in
  351.  Magic.Spell As Integer,_ ' magic spell number of spells.dat being cast
  352.  Max.Row As Integer,_ ' maximum rows used for screen scrolling/output
  353.  Message1 As String,_ ' stores message when user killed for death routine
  354.  Message.Length As Integer,_ ' stores length of message in mail
  355.  Message.Reply As Integer,_ ' flag for message reply
  356.  Message.Thread As Integer,_ ' message number replied to
  357.  Message.To As String,_ ' stores message to in mail
  358.  MessageRecord As MessageType,_ ' message record structure for mail
  359.  Modem.Baud As Integer,_ ' connect speed, 00 truncated
  360.  Monclass As Integer,_ ' current room monster class
  361.  Monclass.Max As Integer,_ ' maximum monster classes in monclass array
  362.  MonclassRecord As MonclassType,_ ' monster class record structure
  363.  Monster.Class() As Integer,_ ' array of monster classes
  364.  Monster.Cycle As Integer,_ ' incrementing counter for monster attacks
  365.  Monster.Number As Integer,_ ' stores currently accessed monster number
  366.  Monster.Percent() As Integer,_ ' array of monster percents
  367.  Monster.Rate() As Integer,_ ' array of monster encounter rates
  368.  Monster.Rate1 As Integer,_ ' counts file monster rates
  369.  Monster.Rate2 As Integer,_ ' counts room monster rates
  370.  MonsterArray() As MonsterType,_ ' array of 20 monster record structures
  371.  MonsterIndex() As Integer,_ ' array of 20 indexes to monster.dat file
  372.  MonsterRecord As MonsterType,_ ' defines monster structure
  373.  Monsters.Killed As Integer,_ ' total monsters killed in session
  374.  MonsterTalkRecord As MonsterTalkType,_ ' monster class structure
  375.  Multiplier As Integer,_ ' multiplier used in combat
  376.  New.Room As Integer,_ ' added new room flag
  377.  Next.Room As Single,_ ' next room storage
  378.  No As Integer,_ ' entered N during input (-1/0)
  379.  No.Echo As Integer,_ ' do not echo user input
  380.  No.Input As Integer,_ ' null was entered (-1/0)
  381.  No.Input.Out As String,_ ' string to return if null entered during input
  382.  Node As String,_ ' node in string form
  383.  Node1 As Integer,_ ' node number (0-9,A-Z)
  384.  Node2 As Integer,_ ' node number (0-99)
  385.  Normal.User As Integer,_ ' user has special attributes (-1/0)
  386.  Number.Appearing As Integer,_ ' maximum monsters of one type encountered
  387.  Number.Monsters As Integer,_ ' current number of active monsters in room
  388.  ObjectRecord As ObjectType,_ ' object structure
  389.  Outpt As String,_ ' user i/o output
  390.  Outpts As String,_ ' temporary user i/o output variable
  391.  Parse.Count As Integer,_ ' parsed count to decrement
  392.  Parse.Number As Integer,_ ' stores command numbers (pound sign) quantity
  393.  Parsed.Command1 As String,_ ' first or second command parsed from input
  394.  Parsed.Command2 As String,_ ' first or second command parsed from input
  395.  Parser As Integer,_ ' position of command second word parsed 
  396.  Pass.Door As Integer,_ ' passdoor spell cast
  397.  Player.CodeName As String,_ ' storage for user codename
  398.  Player.PassWord As String,_ ' storage for user password
  399.  Port As Integer,_ ' modem port being used (0-7)
  400.  Port.Override As Integer,_ ' command line override
  401.  Prefix1 As String,_ ' the/or/an
  402.  Previous.Command As Integer,_ ' -1=use,0=n/a,equals last command number
  403.  Previous.Command1 As String,_ ' storage of previous command 
  404.  Previous.Command2 As String,_ ' storage of previous parsed command
  405.  Previous.Command3 As String,_ ' storage of previous second parsed command
  406.  Private.Message As Integer,_ ' flag for mail
  407.  Psi.Attack.Mode As Integer,_ ' last offense psi spell cast
  408.  Psi.Defense.Mode As Integer,_ ' last defense psi spell cast
  409.  Quit As Integer,_ ' true if Q entered
  410.  Race() As String*8,_ ' stores eight race names
  411.  Room As Single,_ ' current room number
  412.  Room.Health.Rate As Integer,_ ' number of action prompts for health update
  413.  Room.Monster.Rate As Integer,_ ' number of action promptsfor monster update
  414.  Room.Rate As Integer,_ ' counter of action prompts for room rate
  415.  Room.Rust.Rate As Integer,_ ' counter of room rust rate
  416.  Room.Steal.Rate As Integer,_ ' counter of room steal rate
  417.  RoomRecord As RoomType,_ ' room structure
  418.  Rust.Rate As Integer,_ ' rust rate in action prompts
  419.  Share.Installed As Integer,_ stores share setting
  420.  Sorting As Integer,_ ' inventory sorting (-1/0/1)
  421.  SpellRecord As SpellType,_ ' spell structure
  422.  Spell.Number As Integer,_ ' spell number being used
  423.  Spell.Cast.Type As Integer,_ ' type of spell being cast
  424.  Stat() As String*12,_ ' storage of eight statistics names
  425.  Steal.Rate As Integer,_ ' steal rate in action prompts
  426.  Stored.Parsed.Command1 As String,_ ' first parsed command from user input
  427.  Stored.Parsed.Command2 As String,_ ' second parsed command from user input
  428.  Subject As String,_ ' store mail subject
  429.  Sysop As Integer,_ ' contains -1 if player is sysop
  430.  TableRecord As TableType,_ ' message table for mail
  431.  Teleported As Integer,_ ' user entered room by teleporting (-1/0)
  432.  TempRecord As MessageType,_ ' temporary structure
  433.  Temp, Temp!, Temp$,_ ' global temporary variables
  434.  Temp.Array1() As Integer,_ ' global temporary variables
  435.  Temp.ArrayX() As Integer,_ ' global temporary variables
  436.  Temp.ArrayZ() As Double,_ ' global temporary variables
  437.  Temp0, Temp1, Temp2, Temp3, Temp4,_ ' global temporary variables
  438.  Temp5, Temp6, Temp7, Temp8, Temp9,_ ' global temporary variables
  439.  Time.Calc As Single,_ ' time storage variable
  440.  Time.Left As Single,_ ' amount of time user is allowed on in seconds
  441.  Time.On As String,_ ' time user logged on in Date$ format
  442.  Timeon As Single,_ ' time user logged on in Timer format
  443.  Timelogged.On As Double,_ ' time user logged on on double format
  444.  Town.Mayor As Integer,_ ' user is town mayor (-1/0)
  445.  Training.Stats() As Integer,_ ' storage for training statistics
  446.  TreasureRecord As TreasureType,_ ' treasure structure
  447.  Two.Minutes.Left As Integer,_ ' flag indicating two minutes warning shown
  448.  Type.Number As Integer,_ ' flag for type of object in room or inventory
  449.  Upper.Case As Integer,_ ' flag to force first character uppercase in io.i
  450.  User.Echo As Integer,_ ' stores online user echo preference
  451.  User.LineFeeds As Integer,_ ' stores online user linefeed preference
  452.  User.LineLength As Integer,_ ' stores online user linelength preference
  453.  User.PageLength As Integer,_ ' stores online user pagelength preference
  454.  User.Wordwrap As Integer,_ ' stores online user wordwrap preference
  455.  User.Command As String,_ ' stores original user input
  456.  User.Index As Integer,_ ' index of user number to users.dat file
  457.  User.Number As Integer,_ ' alternate user index variable
  458.  UserRecord As UserType,_ ' user structure
  459.  Vehicle1 As Integer,_ ' index to room treasure array (1-10)
  460.  Vehicle2 As Integer,_ ' charges in vehicle
  461.  Vehicle3 As Integer,_ ' index to treasure.dat file
  462.  Vehicle4 As Integer,_ ' vehicle type (0-3)
  463.  Weapon.Type.Name() As String*9,_ ' storage of four weapon names
  464.  Weapon1 As Integer,_ ' plus of armor worn
  465.  Weapon2 As Integer,_ ' plus of weapon held
  466.  Weapon3 As Integer,_ ' plus in shield held
  467.  Weapon4 As Integer,_ ' index to user inventory array of armor worn
  468.  Weapon5 As Integer,_ ' index to user inventory array of shield held
  469.  Weapon6 As Integer,_ ' index to user inventory array of weapon held
  470.  Weapon7 As Integer,_ ' index to user inventory array of ring worn
  471.  Weapon8 As Integer,_ ' ring type (1=antipoison/2=antileveldrain/3=antispell)
  472.  Weapon9 As Integer,_ ' ring antispell (-1=generic/greater>0=spell number)
  473.  Weapon10 As Integer,_ ' proficiency number of weapon held
  474.  Weight As Integer,_ ' total amount in gold of user's inventory
  475.  Win.Major As Integer,_ ' windows major version
  476.  Win.Minor As Integer,_ ' windows minor version
  477.  Word.Wrap As Integer,_ ' used for word wrap during input
  478.  Yes As Integer ' user entered Y during input (-1/0)
  479.  
  480.  Common Shared Inregs As RegType, Outregs As RegType ' register structures
  481.  
  482.  '  constants used in place of variables inline programs
  483.  Const Author$="Erik Jon Oredson" ' name of author
  484.  Const Dead$="-dead-" ' used internal to user file
  485.  Const Deleted$="<deleted>" ' used internal to data files
  486.  Const Enter$="<enter>" ' generic response substring
  487.  Const False=0 ' false
  488.  Const Mask$="#" ' define mask character
  489.  Const More$="More(y/n/c/q)?" ' generic response substring
  490.  Const MaxInt=32767 ' maximum integer
  491.  Const MaxStat=250 ' maximum player statistic
  492.  Const MinInt=-32768 ' minimum integer
  493.  Const None$="<null>" ' used internally
  494.  Const Nul="" ' empty string
  495.  Const Program$="DNDDOOR" ' program name
  496.  Const Range$="<range error>" ' generic response substring
  497.  Const Release$="2.0a" ' program minor version
  498.  Const True=Not False ' true
  499.  Const UnTrue=False+1 ' untrue
  500.  Const Version$="4.5b" ' program major version
  501.  
  502.  '  constant variables corresponding to last command entered
  503.  Const Picklock.Command=26 ' compare to picklock
  504.  Const Hide.Command=49 ' compare to hide
  505.  Const Identify.Command=52 ' compare to identify
  506.  
  507.  '  constant variables for driving vehicles
  508.  Const RideVehicle=48 ' ride vehicle command number
  509.  Const DriveVehicle=73 ' drive vehicle command number
  510.  
  511.  '  constant variables of weapon proficiency types
  512.  Const Blunt=1 ' blunt weapon number
  513.  Const Pole=2 ' pole weapon number
  514.  Const Sharp=3 ' sharp weapon number
  515.  Const Thrusting=4 ' thrusting weapon number
  516.  
  517.  '  bit constants of room record flags array attributes of room inventory
  518.  Const Hidden.Object=1 ' object was hidden with hide command
  519.  Const Magic.Trap=2 ' object was made into a trap with spell
  520.  Const Magically.Hidden=4 ' object was magically hidden with spell
  521.  
  522.  '  constant variable used to indicate spell method being used
  523.  Const Use.Spell.Type=1 ' spell cast is by the use command
  524.  Const Scroll.Spell.Type=2 ' spell cast by using a scroll
  525.  Const Cast.Spell.Type=4 ' spell cast with the cast command
  526.  
  527.  '  bit constants of player class, character, and command flags,
  528.  '  bits 2 through 128 correspond to the seven statistics players may wish for.
  529.  Const Rerolled=1 ' bit flag of user record flags field for rerolled player
  530.  Const Wished=256 ' bit flag of user record flags field of player wished
  531.  Const Alignmented=512 ' bit flag of user record flags field of player align
  532.  Const Locked.User=1024 ' bit for locked mailbox
  533.  Const Special.Char1=2048 ' bit flag of user record flags field town mayor
  534.  Const Special.Char2=4096 ' bit flag of user record flags field governor
  535.  Const Special.Char3=8192 ' bit flag of user record flags field guild master
  536.  Const Special.Char4=16384 ' bit flag of user record flags field sysop
  537.  
  538.  ' constants of class type numbers
  539.  Const Fighter=1 ' fighter class
  540.  Const MagicUser=2 ' MU class
  541.  Const Thief=3 ' thief class
  542.  Const Cleric=4 ' cleric class
  543.  Const Paladin=5 ' paladin class
  544.  Const Ranger=6 ' ranger class
  545.  Const Druid=7 ' druid class
  546.  Const Lady=8 ' lady class
  547.  Const AsstDM=9 ' asst. DM class
  548.  Const DM=10 ' DM class
  549.  
  550.  ' constants of attack command numbers
  551.  Const Charm=31 ' attack command number constant
  552.  Const Beguile=32 ' attack command number constant
  553.  Const Shield=34 ' attack command number constant
  554.  Const Guard=35 ' attack command number constant
  555.  Const Lunge=39 ' attack command number constant
  556.  Const Dodge=40 ' attack command number constant
  557.  Const Killed=55 ' attack command number constant
  558.  Const Backstab=59 ' attack command number constant
  559.  Const Circled=60 ' attack command number constant
  560.  Const Feint=61 ' attack command number constant
  561.  Const Parry=62 ' attack command number constant
  562.  Const Thrust=63 ' attack command number constant
  563.  Const Charge=64 ' attack command number constant
  564.  Const Turn=65 ' attack command number constant
  565.  Const Counter=66 ' attack command number constant
  566.  Const Bemuse=67 ' attack command number constant
  567.  Const Befuddle=68 ' attack command number constant
  568.  Const Pummel=69 ' attack command number constant
  569.  Const Resist=70 ' attack command number constant
  570.  Const PsiMode=71 ' attack command number constant
  571.  Const Beat=82 ' attack command number constant
  572.  Const Punch=83 ' attack command number constant
  573.  Const Bewitch=84 ' attack command number constant
  574.  Const Bewilder=85 ' attack command number constant
  575.  
  576.  ' constants of spell type numbers
  577.  Const Enchant=1 ' spell number constant
  578.  Const Offense=2 ' spell number constant
  579.  Const Bless=3 ' spell number constant
  580.  Const Wish=4 ' spell number constant
  581.  Const Poison=5 ' spell number constant
  582.  Const Vigor=6 ' spell number constant
  583.  Const Heal=7 ' spell number constant
  584.  Const CurePoison=8 ' spell number constant
  585.  Const LevelDrain=9 ' spell number constant
  586.  Const Teleport=10 ' spell number constant
  587.  Const Befuddled=11 ' spell number constant
  588.  Const TurnUndead=12 ' spell number constant
  589.  Const PassDoor=13 ' spell number constant
  590.  Const Conjure=14 ' spell number constant
  591.  Const Psionic=15 ' spell number constant
  592.  Const DetectLock=16 ' spell number constant
  593.  Const DetectEvil=17 ' spell number constant
  594.  Const DetectTrap=18 ' spell number constant
  595.  Const Intoxicate=19 ' spell number constant
  596.  Const SetTrap=20 ' spell number constant
  597.  Const Hiding=21 ' spell number constant
  598.  Const Search=22 ' spell number constant
  599.  Const Invisibility=23 ' spell number constant
  600.  Const Identify=24 ' spell number constant
  601.  Const Enlighten=25 ' spell number constant
  602.  Const Illuminate=26 ' spell number constant
  603.  Const Psyche=27 ' spell number constant
  604.  Const Telepathy=28 ' spell number constant (not used)
  605.  
  606.  ' constants for psionic spells
  607.  Const PsiAttack=1 ' psionic attack mode
  608.  Const PsiDefense=2 ' psionic attack mode
  609.  
  610.  ' constants for room attribute 1
  611.  Const LitRoom=0 ' flag constant for dark room
  612.  Const UnlitRoom=-1 ' bit flag constant for lit room
  613.  
  614.  ' constants for room attribute 2 and vehicle type
  615.  Const Land=0 ' flag value for ground type room
  616.  Const Air=1 ' flag value for above ground room
  617.  Const Water=2 ' flag value constant for underwater room
  618.  
  619.  ' constants of room entry command
  620.  Const Fly=74 ' entry command number
  621.  Const Swim=79 ' entry command number
  622.  
  623.  ' constants for vehicle type
  624.  Const AllTerrain=4 ' vehicle terrain type
  625.  
  626.  ' constants of file numbers
  627.  Const UserFile=1 ' file number
  628.  Const NonPlayerFile=2 ' file number
  629.  Const RoomFile=3 ' file number
  630.  Const ObjectFile=4 ' file number
  631.  Const MonsterFile=5 ' file number
  632.  Const TreasureFile=6 ' file number
  633.  Const MonTalkFile=7 ' file number
  634.  Const MonClassFile=8 ' file number
  635.  Const SpellFile=9 ' file number
  636.  Const TableFile=10 ' file number
  637.  Const MessageFile=11 ' file number
  638.  Const ActionFile=12 ' file number
  639.  Const TempFile=13 ' file number
  640.  Const TempFile2=14 ' file number
  641.  Const HelpFile=15 ' file number
  642.  
  643.  ' subroutine allows bios access. linked from VBDOS.LIB.
  644.  Declare Sub Interrupt(N As Integer,I As RegType,O As RegType)
  645.  
  646.  ' function creates a formatted string containing the date and time.
  647.  Def FNclock$=Format$(Now,"ddd dd mmm yy\, hh:mma/p")
  648.  
  649.  ' function creates a formatted string containing a double precision variable.
  650.  Def FNform$(X#)=Format$(X#, "#,##0;;"+Chr$(34)+"zero"+Chr$(34))
  651.  
  652. REM Notes on terminology:
  653.  
  654. '  The term 'mnemonic' refers to shortened words for common use, example,
  655. '    'A two-handed sword' would have a mnemonic 'sword' for the game to
  656. '    identify the long treasure name.
  657.  
  658. '  The term 'index' refers to a variable which points to an element of an
  659. '    array. For example, Temp7 could be an index to UserRecord.Inv array,
  660. '    if Temp7=10, then Temp7 is the index of UserRecord.Inv(Temp7).
  661.  
  662. '  The term 'structure' refers to a collection of fixed length strings,
  663. '    integers, and precision variable described in a common variable. For
  664. '    example, the UserType described in the include file would be used as a
  665. '    structure by assigning the type to the record, for example,
  666. '    Dim UserRecord As UserType. Then variables in the structure are
  667. '    accessed with the dot symbol, for example, UserRecord.Gold.
  668.  
  669. '  The term 'record' refers to a single structure which can be read or
  670. '    written to a random file using the get and put statements. For example,
  671. '    the user record could be placed into the user file with the statement
  672. '    Put UserFile,10,UserRecord, or Put 3,10,UserRecord.
  673.  
  674. '  The term 'parse' or 'parse temp' refers to the numeric specific to an
  675. '    item following the pound sign. For example, the parse temp for
  676. '    'an axe#2' is equal to 2. Since searching for an item during the game
  677. '    checks the room first then the user inventory, the parse temp must be
  678. '    decremented after the room inventory is checked. For example, 'an axe#2'
  679. '    would count one axe on the floor, decrement by one, then find the
  680. '    first axe in the user inventory, which is the second axe to find.
  681.  
  682. '  The term 'player', 'user', 'character', are used interchangeably. For
  683. '    example, 'player character' may refer to the statistics or points
  684. '    of the user and his/her record structure. Or, for example, 'user' may
  685. '    refer to the player and his or her codename, etc.
  686.  
  687. '  Usage of the variable 'Graphics.Off' usually with the comment 'reset color
  688. '    is used in this manner: When the player has remote ansi installed, and
  689. '    the game sends ansi codes, color graphics are sent to the player by
  690. '    cycling high intensity ansi codes for the 6 base colors. The variable
  691. '    Color.Graphics is set to true to send ansi codes. Thus, setting
  692. '    Graphics.Off to True sets remote ansi to high intensity white, and
  693. '    setting Graphics.Off to False resets the cycling high intensity ansi.
  694.  
  695. '  Usage of the output routine with no assignment to the output string,
  696. '    sends a blank carriage return/linefeed to the modem. For example,
  697. '    'Outpt=Nul' followed by 'Call IO.O' sends a blank line. Calling
  698. '    the output routine twice sends a blank line after the first message,
  699. '    for example, 'Outpt="Output line."', 'Call IO.O', 'Call IO.O', sends
  700. '    the first line, then a blank line.
  701.  
  702. '  Usage of the term 'string', or 'message' refer to an assignment or use of
  703. '    text imbedded in quotes, or assigned to a variable. For example:
  704. '    "This text line." could be called a message or string. And the line
  705. '    Outpt="This text line." could have a comment ' make message.
  706.  
  707. '  The term 'cr/lf' refers to carriage return/line feed which are the
  708. '    ascii characters 13 and 10, respectively. Note however that linefeeds
  709. '    are not normally used by terminal programs and are usually ignored.
  710.  
  711. '  The variable passing conventions for calling modules have two forms.
  712. '    A call to an example routine, 'Call Routine1(4)' where the routine
  713. '    has a variable with the value of 4 passed to it, 'Sub Routine1(Var)'
  714. '    allows the routine to accept a passed parameter. This is named
  715. '    calling by value. A call to the same routine with a variable,
  716. '    'Call Routine1(Temp)' passes the value contained in Temp. When the
  717. '    routine accepts the value in its own variable Var, then assigns a new
  718. '    value to Var, the return from the routine will change the value in
  719. '    Temp. This is named calling by reference. Passed variables should
  720. '    match in type.
  721.  
  722. REM Notes on memory usage:
  723.  
  724. '  Memory usage by arrays include three separate methods. Assigning a
  725. '  variable length string array, such as,
  726. '    Redim Array1(1 To 10) As String
  727. '  uses the near segment of the basic memory pool by using string descriptors
  728. '  which can be very costly as the array bounds increase. Secondly, assigning
  729. '  a fixed length array, such as,
  730. '    Redim Array2(1 To 10) As Sring*7
  731. '  uses the far segment which is an additional 64k memory storage area
  732. '  in basic. The last example using fixed length arrays whose length are a
  733. '  power of 2, such as,
  734. '    Redim Array3(1 To 1024) As String*128
  735. '  allows the array to excede the 64k upper bounds by using the basic heap
  736. '  segment memory pool, the remaining available memory after the program has
  737. '  initialized. To do this the /ah compiler switch must be used.
  738.  
  739. REM Instructions for compiling Dnd Door with VB 1.0 PRO:
  740.  
  741. ' VB 1.0 Basic compiler BC.EXE and linker LINK.EXE are required.
  742.  
  743. ' Libraries required: VBDOS.LIB, VBDCL10E.LIB.
  744.  
  745. ' Compile:
  746. '   BC DNDDOOR/AH/O/X;
  747. '   BC DNDS1/AH/O/X;
  748. '   BC DNDS2/AH/O/X;
  749. '   BC DNDS3/AH/O/X;
  750. '   BC DNDS4/AH/O/X;
  751. '   BC DNDS5/AH/O/X;
  752. '   BC DNDS6/AH/O/X;
  753. '   BC DNDS7/AH/O/X;
  754.  
  755. ' Linking:
  756. '   LINK DNDDOOR+(DNDS1)+(DNDS2)+(DNDS3)+(DNDS4)+(DNDS5)+(DNDS6)+(DNDS7),DNDDOOR.EXE,NUL,VBDOS.LIB;
  757.  
  758. REM If you change Dnddoor.Inc then all subprograms must be compiled.
  759.  
  760. REM Use Nmake.exe to recompile using the Makefile contents.
  761.  
  762. REM -end include file-
  763.