DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T o

⟦5da288c94⟧ TextFile

    Length: 27638 (0x6bf6)
    Types: TextFile
    Names: »odefs.h«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Omega/odefs.h« 

TextFile

/* omega copyright (c) 1987,1988 by Laurence Raphael Brothers */
/* This file is the header file for all omega modules */
/* odefs.h */

/* omega will NOT function unless the implementor sets the appropriate
definitions in the following section. */

/*--------------------------USER DEFINITIONS--------------------------*/

/* The average system V user should probably uncomment the following
two definitions. */

/* Implementor should uncomment the following if his system uses
string.h instead of strings.h (try man strings) */

/* #define STRING */

/* Implementor should uncomment the following if random and srandom 
   are not available  (try man random) */

/* #define NORANDOM */

/* Implementor should uncomment the following if omega appears to
redraw the screen excessively. */

/* #define EXCESSIVE_REDRAW */

/* The following definition is recommended. Remove it only if you have
huge amounts of disk space and are annoyed at waiting a few more seconds
on save and restore. */

#define COMPRESS_SAVE_FILES

/* Implementor should set the following three definitions: */

/* OMEGALIB is where all the data files reside. 
   Note the final / is necessary.
   This might usually be "/usr/games/lib/omegalib/" */

#define OMEGALIB "/grad/u4/brothers/omega/lib/"

/* set WIZARD to implementor's username */

#define WIZARD "brothers"

/* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */
/* dbx still intercepts the signals first, so it's ok for debugging */

#define CATCH_SIGNALS 1


/*---------------------------SYSTEM DEFINITIONS---------------------------*/

/* Don't change anything from here on (unless you know what you're doing) */
#define VERSION 71
#define VERSIONSTRING "omega version 0.71 (beta)"

#define VACANT 0
#define ABORT -1
#define CASHVALUE -2

/* moderately arbitrary but probably cannot be easily changed */
#define MAXWIDTH 64
#define MAXLENGTH 64
#define SMALLSCREENLENGTH 16

/* number of slots in inventory. Cannot be changed without work */
#define MAXITEMS 16

/* number of slots in pack. Should be <= 26. */
#define MAXPACK 26

/* number of items in pawn shop. Should be <= 26 */
#define PAWNITEMS 10

/* Verbosity levels */
#define TERSE 0
#define MEDIUM 1
#define VERBOSE 2 

/* Arbitrary. Max of the levels in the dungeons */
#define MAXLEVELS 21

/* levels in each dungeon */
#define ASTRALLEVELS 5
#define SEWERLEVELS 18
#define CASTLELEVELS 16
#define CAVELEVELS 10
#define VOLCANOLEVELS 20

/* Overall Game Progress Vector Bits */
/* Long had BETTER have at least 32 bits.... */
#define SPOKE_TO_DRUID 1L
#define COMPLETED_CAVES 2L
#define COMPLETED_SEWERS 4L
#define COMPLETED_CASTLE 8L
#define COMPLETED_ASTRAL 16L
#define COMPLETED_VOLCANO 32L
#define KILLED_DRAGONLORD 64L
#define KILLED_EATER 128L
#define KILLED_LAWBRINGER 256L
#define COMPLETED_CHALLENGE 512L
#define SOLD_CONDO 1024L
#define FAST_MOVE 2048L
#define SKIP_PLAYER 4096L
#define SKIP_MONSTERS 8192L
#define MOUNTED 16384L
#define SUPPRESS_PRINTING 32768L
#define LOST 65536L
#define ARENA_MODE 131072L
#define CHEATED 262144L
#define BANK_BROKEN 524288L
#define CLUB_MEMBER 1048576L
#define PREPARED_VOID 2097152L
#define DESTROYED_ORDER 4194304L
#define GAVE_STARGEM 8388608L
#define ATTACKED_ORACLE 16777216L
#define UNDEAD_GUARDS 33554432L

/* general environment types */
#define E_NEVER_NEVER_LAND 0
#define E_COUNTRYSIDE 1
#define E_CITY 2
#define E_VILLAGE 3
#define E_TACTICAL_MAP 4
#define E_SEWERS 5
#define E_CASTLE 6
#define E_CAVES 7
#define E_VOLCANO 8
#define E_ASTRAL 9
#define E_ARENA 10
#define E_HOVEL 11
#define E_MANSION 12
#define E_HOUSE 13
#define E_DLAIR 14
#define E_ABYSS 15
#define E_STARPEAK 16
#define E_MAGIC_ISLE 17
#define E_TEMPLE 18
#define E_CIRCLE 19
#define E_COURT 20

/* player game status */
#define DEAD 1
#define QUIT 2
#define WIN 3
#define BIGWIN 4

/* kind of arbitrary */
#define MAXROOMS 48
#define MAXCONNECTIONS 4 

/* some random characters */
#define ESCAPE 27
#define RETURN 13
#define LINEFEED 10
#define BACKSPACE 8
#define DELETE 127


/* tac mode action definitions */
/* have to remember to find where these are used, mostly unused, now! */
#define DISENGAGE 10
#define BLOCK 20
#define CUT 30
#define THRUST 40
#define MAGIC 50
#define LUNGE 60
#define RIPOSTE 70
#define WIELD 80
#define PICK_UP 90

/* as in attack low, block high, etc. */
/* These values may be added to the ones above to get things like
   block high, cut low, etc. CLEVER is only used by some monsters
   to cheat with.... */
#define LOW 1
#define CENTER 2
#define HIGH 3
#define CLEVER 4


/* weapon types */
#define CUTTING 1
#define THRUSTING 2
#define STRIKING 3
#define MISSILE 4

/* random aux constants */
/* aux field for private residences in city */
#define BURGLED 2
#define LOCKED 3
#define UNLOCKED 0

/* cannot use M command on site with this aux value */
#define NOCITYMOVE 666

/* bow and crossbow object aux fields */
#define LOADED 1
#define UNLOADED 0

/* alignment used randomly throughout*/
#define LAWFUL 1
#define CHAOTIC 2
#define NEUTRAL 3

/* spells */
#define NUMSPELLS 41

#define S_MON_DET 0
#define S_OBJ_DET 1
#define S_MISSILE 2
#define S_FIREBOLT 3
#define S_TELEPORT 4
#define S_LBALL 5
#define S_SLEEP 6
#define S_DISRUPT 7
#define S_DISINTEGRATE 8
#define S_POLYMORPH 9
#define S_HEAL 10
#define S_DISPEL 11
#define S_IDENTIFY 12
#define S_BREATHE 13
#define S_INVISIBLE 14
#define S_WARP 15
#define S_ENCHANT 16
#define S_BLESS 17
#define S_RESTORE 18
#define S_CURE 19
#define S_TRUESIGHT 20
#define S_HELLFIRE 21
#define S_KNOWLEDGE 22
#define S_HERO 23
#define S_RETURN 24
#define S_DESECRATE 25
#define S_HASTE 26
#define S_SUMMON 27
#define S_SANCTUARY 28
#define S_ACCURACY 29
#define S_RITUAL 30
#define S_FEAR 31
#define S_APPORT 32
#define S_SHADOWFORM 33
#define S_ALERT 34
#define S_REGENERATE 35
#define S_SANCTIFY 36
#define S_CLAIRVOYANCE 37
#define S_DRAIN 38
#define S_LEVITATE 39
#define S_WISH 40

/* ranks in guilds, etc */
#define NUMRANKS 9

#define LEGION 0
#define ARENA 1
#define COLLEGE 2
#define THIEVES 3
#define ORDER 4
#define CIRCLE 5
#define NOBILITY 6
#define PRIESTHOOD 7
#define ADEPT 8

#define LEGIONAIRE 1
#define CENTURION 2
#define FORCE_LEADER 3
#define COLONEL 4
#define COMMANDANT 5

#define TRAINEE 1
#define BESTIARIUS 2
#define RETIARIUS 3
#define GLADIATOR 4
#define CHAMPION 5

#define NOVICE 1
#define STUDENT 2
#define PRECEPTOR 3
#define MAGE 4
#define ARCHMAGE 5

#define TMEMBER 1
#define ATHIEF 2
#define THIEF 3
#define TMASTER 4
#define SHADOWLORD 5

#define GALLANT 1
#define GUARDIAN 2
#define CHEVALIER 3
#define PALADIN 4
#define JUSTICIAR 5

#define INITIATE 1
#define ENCHANTER 2
#define SORCEROR 3
#define HIGHSORCEROR 4
#define PRIME 5

#define COMMONER 1
#define ESQUIRE 2
#define KNIGHT 3
#define LORD 4
#define DUKE 5

#define LAY 1
#define ACOLYTE 2
#define PRIEST 3
#define SPRIEST 4
#define HIGHPRIEST 5

/* different priesthoods */
#define ODIN 1
#define SET 2
#define ATHENA 3
#define HECATE 4
#define DRUID 5
#define DESTINY 6



/* MONSTER STATUS/ABILITY BITS */
#define AWAKE 1
#define MOBILE 2
#define HOSTILE 4
#define WANDERING 16
#define HUNGRY 32
#define GREEDY 64
#define NEEDY  128
#define ONLYSWIM 256
#define FLYING 512
#define INTANGIBLE 1024
#define M_INVISIBLE 2048
#define SWIMMING 4096
#define POISONOUS 8192
#define EDIBLE 16384


/* PLAYER STATUS INDICES */
#define NUMSTATI 25

#define ACCURACY 0
#define BLINDED 1
#define SLOWED 2
#define DISPLACED 3
#define SLEPT 4
#define DISEASED 5
#define POISONED 6
#define HASTED 7
#define BREATHING 8
#define INVISIBLE 9
#define REGENERATING 10
#define VULNERABLE 11
#define BERSERK 12
#define IMMOBILE 13
#define ALERT 14
#define AFRAID 15
#define HERO 16
#define LEVITATING 17
#define ACCURATE 18
#define TRUESIGHT 19
#define SHADOWFORM 20
#define ILLUMINATION 21
#define DEFLECTION 22
#define PROTECTION 23
/* PROTECTION is deviant -- indicates protective value, not duration */
#define RETURNING 24
/* RETURNING is somewhat deviant--how many turns 'til RETURN spell goes off */

/* player immunity indices */
/* also monster immunity bits (2^n) */
/* also damage types */
#define NUMIMMUNITIES 14

#define UNSTOPPABLE 0 
#define NORMAL_DAMAGE 1
#define FLAME 2
#define COLD 3
#define ELECTRICITY 4
#define POISON 5
#define ACID 6
#define FEAR 7
#define SLEEP 8
#define NEGENERGY 9
#define OTHER_MAGIC 10
#define THEFT 11
#define GAZE 12
#define INFECTION 13
#define EVERYTHING -1


/* location lstatus bits */
#define SEEN 1
#define LIT 2
#define SECRET 4
#define STOPS 8


/* room string id */
/* for use in roomname() */
#define NUMROOMNAMES 30

/* normal room name indices start after the RS_ constants */
#define ROOMBASE 39
#define RS_COURT 38
#define RS_ZORCH 37
#define RS_CIRCLE 36
#define RS_MAGIC_ISLE 35
#define RS_STARPEAK 34
#define RS_VOLCANO 33
#define RS_HIGHASTRAL 32
#define RS_FIREPLANE 31
#define RS_AIRPLANE 30
#define RS_WATERPLANE 29
#define RS_EARTHPLANE 28
#define RS_LOWERASTRAL 27
#define RS_CLOSET 26
#define RS_SECRETPASSAGE 25
#define RS_DININGROOM 24
#define RS_BATHROOM 23
#define RS_BEDROOM 22
#define RS_KITCHEN 21
#define RS_DROWNED_SEWER 20
#define RS_DRAINED_SEWER 19
#define RS_SEWER_DUCT 18
#define RS_ARENA 17
#define RS_COUNTRYSIDE 16
#define RS_DRUID 15
#define RS_HECATE 14
#define RS_ATHENA 13
#define RS_SET 12
#define RS_ODIN 11
#define RS_DESTINY 10
#define RS_ADEPT 9
#define RS_WYRM 8
#define RS_OCEAN 7 
#define RS_PONDS 6
#define RS_DRAGONLORD 5
#define RS_GOBLINKING 4
#define RS_CAVERN 3
#define RS_CORRIDOR 2
#define RS_WALLSPACE 1

/* objects, locations, and terrain; characters to draw */
#define SPACE ' '
#define WALL '#'
#define PORTCULLIS '7'
#define OPEN_DOOR '|'
#define CLOSED_DOOR '-'
#define WHIRLWIND '6'
#define ABYSS '0'
#define LAVA '`'
#define HEDGE '\"'
#define WATER '~' 
#define FIRE ';'
#define TRAP '^'
#define LIFT '_'
#define UP '<'
#define DOWN '>'
#define FLOOR '.'
#define PLAYER '@'
#define CORPSE '+'
#define STATUE '1'
#define RUBBLE '4'
#define ALTAR '8'
#define CASH '$'      /* various kinds of money */
#define PILE '*'      /* several objects in one place */
#define FOOD '%'
#define WEAPON ')'
#define MISSILEWEAPON '('
#define SCROLL '?'
#define POTION '!'
#define ARMOR ']'
#define SHIELD '['
#define CLOAK '}'
#define BOOTS '{'
#define STICK '/'

#define RING '='
#define THING '\\'
#define ARTIFACT '&'

/* TERRAIN TYPES */
#define PLAINS '-'
#define TUNDRA '_'
#define ROAD '.'
#define MOUNTAINS '^'
#define PASS 'v'
#define RIVER '~'
#define CITY 'O'
#define VILLAGE 'o'
#define FOREST '('
#define JUNGLE ')'
#define SWAMP '='
#define VOLCANO '!'
#define CASTLE '%'
#define TEMPLE 'X'
#define CAVES '*'
#define DESERT '\"'
#define CHAOS_SEA '+'
#define STARPEAK '|'
#define DRAGONLAIR '$'
#define MAGIC_ISLE '&'

#define CHAIR '5'
#define SAFE '3'
#define FURNITURE '2'
#define BED '9'

/* wow, all characters used! */


/* total number of player options */
#define NUMOPTIONS 9

/* number of options with TRUE/FALSE values */
#define NUMTFOPTIONS 7

/* The slot number of the two options not in Player.options */
#define VERBOSITY_LEVEL 8
#define SEARCH_DURATION 9

/* Player.options bits */
#define BELLICOSE 1 
#define JUMPMOVE 2
#define RUNSTOP 4
#define PICKUP 8
#define CONFIRM 16
#define TOPINV 32
#define PACKADD 64

/* This has to be changed whenever an item is added */
#define NUMSCROLLS 24
#define NUMPOTIONS 18
#define NUMFOODS 16
#define NUMTHINGS 26
#define NUMWEAPONS 41
#define NUMARMOR 17
#define NUMSHIELDS 8
#define NUMCLOAKS 7
#define NUMBOOTS 7
#define NUMRINGS 10
#define NUMSTICKS 17
#define NUMARTIFACTS 24

/* running sum of itemtypes, for indexing into Objects array */
#define THINGID 0 
#define FOODID NUMTHINGS
#define SCROLLID (FOODID + NUMFOODS)
#define POTIONID (SCROLLID + NUMSCROLLS)
#define WEAPONID (POTIONID + NUMPOTIONS)
#define ARMORID (WEAPONID + NUMWEAPONS)
#define SHIELDID (ARMORID + NUMARMOR)
#define CLOAKID (SHIELDID + NUMSHIELDS)
#define BOOTID (CLOAKID + NUMCLOAKS)
#define RINGID (BOOTID + NUMBOOTS)
#define STICKID (RINGID + NUMRINGS)
#define ARTIFACTID (STICKID + NUMSTICKS)
#define CASHID (ARTIFACTID+NUMARTIFACTS)
/* Corpse's aux field is monster id */
#define CORPSEID (CASHID+1)

#define TOTALITEMS (CORPSEID+1) 

/* describing unique items and monsters */
#define COMMON 0
#define UNIQUE_UNMADE 1
#define UNIQUE_MADE 2

/* general item function id's */
#define I_NO_OP 0
#define I_NOTHING 1

  /* note some of these functions are for other types of items too */

    /* scroll functions */
#define I_BLESS 101
#define I_ACQUIRE 102
#define I_ENCHANT 103
#define I_TELEPORT 104
#define I_WISH 105
#define I_CLAIRVOYANCE 106
#define I_DISPLACE 107
#define I_ID 108
#define I_FIREFLASH 109
#define I_SPELLS 110
#define I_JANE_T 111
#define I_ALERT 112
#define I_FLUX 113
#define I_CHARGE 114
#define I_WARP 115
#define I_KNOWLEDGE 116
#define I_LAW 117
#define I_HINT 118
#define I_HERO 119
#define I_TRUESIGHT 120
#define I_ILLUMINATE 121
#define I_DEFLECT 122

    /* potion functions */
#define I_HEAL 201
#define I_OBJDET 202
#define I_MONDET 203
#define I_SLEEP_SELF 204
#define I_RESTORE 205
#define I_NEUTRALIZE_POISON 206
#define I_SPEED 207
#define I_AZOTH 208
#define I_REGENERATE 210
#define I_INVISIBLE 211
#define I_BREATHING 212
#define I_FEAR_RESIST 213
#define I_AUGMENT 214
#define I_CHAOS 215
#define I_ACCURACY 216
#define I_LEVITATION 217
#define I_CURE 218

    /* stick functions */
#define I_FIREBOLT 301
#define I_LBOLT 302
#define I_MISSILE 303
#define I_SLEEP_OTHER 304
#define I_FIREBALL 305
#define I_LBALL 306
#define I_SUMMON 307
#define I_HIDE 308
#define I_DISRUPT 309
#define I_DISINTEGRATE 310
#define I_SNOWBALL 311
#define I_APPORT 312
#define I_DISPEL 313
#define I_POLYMORPH 314
#define I_FEAR 315

    /* food functions */
#define I_FOOD 401
#define I_LEMBAS 402
#define I_STIM 403
#define I_POW 404
#define I_IMMUNE 405
#define I_POISON_FOOD 406
#define I_CORPSE 407
#define I_PEPPER_FOOD 408
#define I_CANNIBAL 409
#define I_INEDIBLE 410

    /* boots functions */
#define I_PERM_SPEED 501
#define I_PERM_HERO 502
#define I_PERM_LEVITATE 503
#define I_PERM_AGILITY 504
#define I_BOOTS_JUMPING 505
#define I_BOOTS_7LEAGUE 506

    /* cloak functions */
#define I_PERM_DISPLACE 601
#define I_PERM_NEGIMMUNE 602
#define I_PERM_INVISIBLE 603
#define I_PERM_ACCURACY 604
#define I_PERM_PROTECTION 605
#define I_PERM_TRUESIGHT 606

    /* ring functions */
#define I_PERM_VISION 701
#define I_PERM_BURDEN 702
#define I_PERM_STRENGTH 703
#define I_PERM_GAZE_IMMUNE 704
#define I_PERM_FIRE_RESIST 705
#define I_PERM_POISON_RESIST 706
#define I_PERM_REGENERATE 707
#define I_PERM_KNOWLEDGE 708

    /* armor functions */
#define I_PERM_ENERGY_RESIST 801
#define I_PERM_BREATHING 802
#define I_PERM_FEAR_RESIST 803
#define I_NORMAL_ARMOR 804

/* artifact functions */
#define I_ORBFIRE 901
#define I_ORBWATER 902
#define I_ORBEARTH 903
#define I_ORBAIR 904
#define I_ORBMASTERY 905
#define I_ORBDEAD 906
#define I_CRYSTAL 907
#define I_ANTIOCH 908
#define I_KOLWYNIA 909
#define I_DEATH 910
#define I_ENCHANTMENT 911
#define I_HELM 912
#define I_LIFE 913
#define I_JUGGERNAUT 914
#define I_SYMBOL 915
#define I_STARGEM 916
#define I_SCEPTRE 917
#define I_PLANES 918

/* weapons functions */
#define I_NORMAL_WEAPON 1001
#define I_LIGHTSABRE 1002
#define I_DEMONBLADE 1003
#define I_MACE_DISRUPT 1004
#define I_TANGLE 1005
#define I_ARROW 1006
#define I_BOLT 1007
#define I_VORPAL 1008
#define I_DESECRATE 1009
#define I_FIRESTAR 1010
#define I_DEFEND 1011
#define I_VICTRIX 1012
#define I_EMPIRE 1013
#define I_SCYTHE 1014
#define I_ACIDWHIP 1015

/* thing functions */
#define I_PICK 1101
#define I_KEY 1102
#define I_SHOVEL 1103 /* unused */
#define I_EXCAVATOR 1104 /* unused */
#define I_PERM_ILLUMINATE 1105
#define I_TRAP 1106
#define I_RAISE_PORTCULLIS 1107

/* shield functions */
#define I_PERM_DEFLECT 1201
#define I_NORMAL_SHIELD 1202

/* monster function ids */
/* Its conceivable for a function of one type to be called when another
would usually occur. A monster's special function may be an extra move,
for example. */

#define M_NO_OP -1

/* talk functions */
#define M_TALK_STUPID 101
#define M_TALK_SILENT 102
#define M_TALK_HUNGRY 103
#define M_TALK_GREEDY 104
#define M_TALK_TITTER 105
#define M_TALK_MAN 106
#define M_TALK_ROBOT 107
#define M_TALK_EVIL 108
#define M_TALK_BURBLE 109
#define M_TALK_SLITHY 110
#define M_TALK_MIMSY 111
#define M_TALK_SEDUCTOR 112
#define M_TALK_MP 113
#define M_TALK_IM 114
#define M_TALK_GUARD 115
#define M_TALK_GHOST 116
#define M_TALK_HINT 117
#define M_TALK_BEG 118
#define M_TALK_EF 119
#define M_TALK_GF 120
#define M_TALK_MORGON 121
#define M_TALK_LB 122
#define M_TALK_DEMONLOVER 123
#define M_TALK_ASSASSIN 124
#define M_TALK_NINJA 125
#define M_TALK_THIEF 126
#define M_TALK_MERCHANT 127
#define M_TALK_HORSE 128
#define M_TALK_PARROT 129
#define M_TALK_ANIMAL 130
#define M_TALK_HYENA 131
#define M_TALK_SERVANT 132
#define M_TALK_SCREAM 133
#define M_TALK_DRUID 134
#define M_TALK_ARCHMAGE 135
#define M_TALK_PRIME 136

/* ability functions */
#define M_SP_SURPRISE 201
#define M_SP_MP 202
#define M_SP_THIEF 203
#define M_SP_AGGRAVATE 204
#define M_SP_POISON_CLOUD 205
#define M_SP_HUGE 206
#define M_SP_SUMMON 207
#define M_SP_ILLUSION 208
#define M_SP_FLUTTER 209
#define M_SP_ESCAPE 210
#define M_SP_SPELL 211
#define M_SP_EXPLODE 212
#define M_SP_DEMON 213
#define M_SP_ACID_CLOUD 214
#define M_SP_WHIRL 215
#define M_SP_GHOST 216
#define M_SP_WHISTLEBLOWER 217
#define M_SP_EATER 218
#define M_SP_LAWBRINGER 219
#define M_SP_DRAGONLORD 220
#define M_SP_DE 221
#define M_SP_DEMONLOVER 222
#define M_SP_SEDUCTOR 223
#define M_SP_MASTER 224
#define M_SP_WYRM 225
#define M_SP_BLACKOUT 226
#define M_SP_BOG 227
#define M_SP_MERCHANT 228
#define M_SP_WERE 229
#define M_SP_LEASH 230
#define M_SP_SERVANT 231
#define M_SP_AV 232
#define M_SP_LW 233
#define M_SP_SWARM 234
#define M_SP_ANGEL 235
#define M_SP_MB 236
#define M_SP_MIRROR 237
#define M_SP_RAISE 238
#define M_SP_DEATH 239
#define M_SP_COURT 240
#define M_SP_LAIR 241
#define M_SP_PRIME 242

/* rangestrike functions */
#define M_STRIKE_MISSILE 301
#define M_STRIKE_FBOLT 302
#define M_STRIKE_LBALL 303
#define M_STRIKE_FBALL 304
#define M_STRIKE_BLIND 305
#define M_STRIKE_SNOWBALL 306
#define M_STRIKE_MASTER 307
#define M_STRIKE_SONIC 308

/* combat functions */
#define M_MELEE_NORMAL 401
#define M_MELEE_FIRE 402
#define M_MELEE_DRAGON 403
#define M_MELEE_MP 404
#define M_MELEE_ELEC 405
#define M_MELEE_POISON 406
#define M_MELEE_NG 407
#define M_MELEE_SUCCUBUS 408
#define M_MELEE_SPIRIT 409
#define M_MELEE_DISEASE 410
#define M_MELEE_SLEEP 411
#define M_MELEE_COLD 412
#define M_MELEE_MASTER 413
#define M_MELEE_GRAPPLE 414
#define M_MELEE_DEATH 415

/* movement functions */
#define M_MOVE_NORMAL 501
#define M_MOVE_FLUTTER 502
#define M_MOVE_TELEPORT 503
#define M_MOVE_FOLLOW 504
#define M_MOVE_RANDOM 505
#define M_MOVE_SMART 506
#define M_MOVE_SPIRIT 507
#define M_MOVE_SCAREDY 508
#define M_MOVE_CONFUSED 509
#define M_MOVE_ANIMAL 510

/* MLx -> index to Monsters starting for level x */
/* MLx -> number of monsters of level x or less */
/* NML_x -> number of monsters of level x */
/* NML-X must be changed whenever a monster is added */
#define ML0 0
#define NML_0 9
#define ML1 (ML0 + NML_0)
#define NML_1 22
#define ML2 (ML1 + NML_1)
#define NML_2 14
#define ML3 (ML2 + NML_2)
#define NML_3 15
#define ML4 (ML3 + NML_3)
#define NML_4 18
#define ML5 (ML4 + NML_4)
#define NML_5 14
#define ML6 (ML5 + NML_5)
#define NML_6 13
#define ML7 (ML6 + NML_6)
#define NML_7 15
#define ML8 (ML7 + NML_7)
#define NML_8 12
#define ML9 (ML8 + NML_8)
#define NML_9 8
#define ML10 (ML9 + NML_9)
#define NML_10 10

#define NUMMONSTERS (ML10 + NML_10)

/* Some monster ID's : (Those that are explicitly named in code) */
/* Actually, there are still many magic constants floating around. */
/* Eventually I'll get around to making each monster's id a constant.... */
#define RANDOM -1
#define NPC (ML0+4)
#define HISCORE_NPC (ML0+8)
#define BUNNY (ML0+5)
#define BLACKSNAKE (ML1+14)
#define HAWK (ML1+13)
#define IMPALA (ML1+19)
#define WOLF (ML2+10)
#define LION (ML3+8)
#define BRIGAND (ML3+9)
#define QUAIL (ML1+11)
#define BADGER (ML1+12)
#define DEER (ML1+14)
#define BEAR (ML3+10)
#define ANTEATER (ML1+16)
#define PARROT (ML1+20)
#define MAMBA (ML3+11)
#define ANT (ML2+11)
#define HYENA (ML1+21)
#define ELEPHANT (ML2+12)
#define TROUT (ML1+18)
#define BASS (ML1+19)
#define MANOWAR (ML3+12)
#define CROC (ML4+8)
#define BOGTHING (ML5+8)
#define CAMEL (ML1+15)
#define SHEEP (ML0+5)
#define GHOST (ML2+6)
#define HAUNT (ML4+5)
#define SPECTRE (ML5+5)
#define LICHE (ML6+5)
#define HORSE (ML2+13)


/* location functions */
#define L_NO_OP 0

/* random sites */
#define L_LIFT 1
#define L_BALANCESTONE 2
#define L_FIRE 3
#define L_WHIRLWIND 4
#define L_VOIDSTONE 5
#define L_WARNING 6
#define L_ARENA_EXIT 7
#define L_HOUSE_EXIT 8
#define L_SAFE 9

/* city level shop and guild functions */
/* following are those in CitySiteList */
#define NUMCITYSITES 26
#define CITYSITEBASE 10
#define L_CHARITY 10
#define L_ARMORER 11
#define L_CLUB 12
#define L_GYM 13
#define L_THIEVES_GUILD 14
#define L_COLLEGE 15
#define L_HEALER 16
#define L_CASINO 17
#define L_TAVERN 18
#define L_MERC_GUILD 19
#define L_ALCHEMIST 20
#define L_SORCERORS 21
#define L_CASTLE 22
#define L_ARENA 23
#define L_DPW 24
#define L_LIBRARY 25
#define L_PAWN_SHOP 26
#define L_BANK 27
#define L_CONDO 28
#define L_ORACLE 29
#define L_ORDER 30
#define L_DINER 31
#define L_COMMANDANT 32
#define L_CRAP 33
#define L_TEMPLE 34
#define L_COUNTRYSIDE 35
/* end of city sites */

/* random sites */
#define L_JAIL 36
#define L_TEMPLE_WARNING 37
#define L_LAWSTONE 38
#define L_CHAOSTONE 39

/* final abyss sites ignore levitation*/
#define L_EARTH_STATION 40
#define L_FIRE_STATION 41
#define L_WATER_STATION 42
#define L_AIR_STATION 43
#define L_VOID_STATION 44
#define L_VOID 45
#define L_VOICE1 46
#define L_VOICE2 47
#define L_VOICE3 48

#define L_SACRIFICESTONE 49

/* circle hq sites */
#define L_TOME1 50
#define L_TOME2 51
#define L_ENTER_CIRCLE 52
#define L_CIRCLE_LIBRARY 53

/* other site functions */
#define L_BROTHEL 54
#define L_DRUID 55
#define L_ALTAR 56

#define L_GARDEN 57
#define L_ADEPT 58
#define L_SEWER 59

#define L_OMEGA 60
#define L_CARTOGRAPHER 61
#define L_STABLES 62
#define L_COMMONS 63
#define L_GRANARY 64
#define L_MAZE 65
#define L_HOVEL 66
#define L_HOUSE 67
#define L_MANSION 68
#define L_OCCUPIED_HOUSE 69
#define L_TACTICAL_EXIT 70
#define L_VAULT 71
#define L_CEMETARY 72
#define L_THRONE 73
#define L_ESCALATOR 74
#define L_ENTER_COURT 75

#define L_TRIFID 76
#define L_FINAL_ABYSS 77
#define L_RAISE_PORTCULLIS 78

#define L_MINDSTONE 79

/* above LEVITATION_AVOIDANCE, no effect if player is levitating */
#define LEVITATION_AVOIDANCE 80

/* random sites */
#define L_CHAOS 81
#define L_WATER 82
#define L_LAVA 83
#define L_MAGIC_POOL 84
#define L_PORTCULLIS_TRAP 85
#define L_DROP_EVERY_PORTCULLIS 87
#define L_PORTCULLIS 88


/* traps */
#define NUMTRAPS 13
#define TRAP_BASE 89

/* traps */
#define L_TRAP_DART 89
#define L_TRAP_PIT 90
#define L_TRAP_DOOR 91
#define L_TRAP_SNARE 92
#define L_TRAP_BLADE 93
#define L_TRAP_FIRE 94
#define L_TRAP_TELEPORT 95
#define L_TRAP_DISINTEGRATE 96
#define L_TRAP_SLEEP_GAS 97
#define L_TRAP_ACID 98
#define L_TRAP_MANADRAIN 99
#define L_TRAP_ABYSS 100
#define L_TRAP_SIREN 101

/* more random sites */
#define L_STATUE_WAKE 102
#define L_STATUE_RANDOM 103

#define L_HEDGE 104
#define L_RUBBLE 105

#define L_ABYSS 106

/* player possession slots */
/* slot 0 should not be filled when out of inventory_control() */

#define O_UP_IN_AIR 0
#define O_READY_HAND 1
#define O_WEAPON_HAND 2
#define O_LEFT_SHOULDER 3
#define O_RIGHT_SHOULDER 4
#define O_BELT1 5
#define O_BELT2 6
#define O_BELT3 7
#define O_SHIELD 8 
#define O_ARMOR 9
#define O_BOOTS 10
#define O_CLOAK 11
#define O_RING1 12
#define O_RING2 13
#define O_RING3 14
#define O_RING4 15

/* structure definitions */

struct room {
  int lighted; 
  int left,right,top,bottom;
  int rsi; /* index into roomname switch */
};



struct spell {
  char known;
  char id;
  char powerdrain;
} ;


struct monster {
  struct objectlist *possessions;
  int attacked,aux1,aux2,x,y,click;
  int id,hp,hit,ac,dmg,sense,wakeup,level,speed,sleep,treasure;
  int xpv,corpseweight,corpsevalue,transformid,startthing,uniqueness;
  int talkf,movef,meleef,strikef,specialf;
  long status,immunity;
  char monchar;
  char *monstring,*corpsestr,*meleestr;
};


struct monsterlist {
  struct monster *m;
  struct monsterlist *next;
};




struct player {
  int str,con,dex,agi,iq,pow,maxstr,maxcon,maxdex,maxagi,maxiq,maxpow;
  int xp,level,hp,maxhp,hit,dmg,absorption,speed,click;
  int defense,food,alignment,mana,maxmana;
  int cash,patron,birthday;
  char preference;
  int sx,sy; /* sanctuary coordinates */
  int x,y; /* current player coordinates */
  int itemweight,maxweight;
  int immunity[NUMIMMUNITIES];
  int status[NUMSTATI];
  long options;
  int rank[NUMRANKS];
  int guildxp[NUMRANKS];
  char name[64];
  char meleestr[64];
  struct object *possessions[MAXITEMS];
  struct object *pack[MAXPACK];
  int packptr;
};



struct object {
  int id,weight,plus,charge,dmg,hit,aux,number,fragility;
  int basevalue, known, used, blessing,type,uniqueness,usef,level;
  char objchar,*objstr,*truename,*cursestr;
};



struct objectlist {
  struct object *thing;
  struct objectlist *next;
};



/* terrain locations */
struct terrain {
  char base_terrain_type;
  char current_terrain_type;
  char aux;
  char explored;
};

/* dungeon locations */
struct location {
  char p_locf; /* function executed when moved on */
  int lstatus; /* seen,stopsrun,lit,secret, */
  char roomnumber; /* so room can be named */
  char locchar; /* terrain type */
  char showchar; /*char instantaneously drawn for site */
  int aux; /* signifies various things */
  int buildaux; /* used in constructing level */
  struct objectlist *things; 
  struct monster *creature;
 };


struct level {
  char depth; /* which level is this */
  struct level *next; /* pointer to next level in dungeon */
  struct location site[MAXWIDTH][MAXLENGTH]; /* dungeon data */
  char generated; /* has the level been made (visited) yet? */
  char numrooms; /* number of rooms on level */
  char tunnelled; /* amount of tunnelling done on this level */
  struct monsterlist *mlist; /* List of monsters on level */
  int environment; /* where kind of level is this? */
  int deepest; /*If level is dungeon head, deepest level made */
};

 
/* random typedef's */

typedef struct monsterlist mltype;
typedef mltype *pml;

typedef struct monster montype;
typedef montype *pmt;

typedef struct location loctype;
typedef loctype *plc;

typedef struct level levtype;
typedef levtype *plv;

typedef struct object objtype;
typedef objtype *pob;

typedef struct objectlist oltype;
typedef oltype *pol;

/* random  function declarations from system libraries */

char *malloc(),*calloc(),*getlogin();
int free();
long time();

#ifdef NORANDOM
int rand();
int srand();
#define RANDFUNCTION rand()
#define SRANDFUNCTION srand((int)(time((long *)NULL)+Seed))
#endif

#ifndef NORANDOM
long random();
int srandom();
#define RANDFUNCTION random()
#define SRANDFUNCTION srandom((int)(time((long *)NULL)+Seed))
#endif


#define pow2(n) (1 << n)


/* systemV for some reason uses string.h instead of strings.h */
/* Also, random and srandom are unlikely to be found on system V... */

#ifdef STRING
#include <string.h>
#endif

#ifndef STRING
#include <strings.h>
#endif

#include <stdio.h>

#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif