Annotation of early-roguelike/arogue7/rogue.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * rogue.c - Global game variables
! 3: *
! 4: * Advanced Rogue
! 5: * Copyright (C) 1984, 1985, 1986 Michael Morgan, Ken Dalka and AT&T
! 6: * All rights reserved.
! 7: *
! 8: * Based on "Rogue: Exploring the Dungeons of Doom"
! 9: * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
! 10: * All rights reserved.
! 11: *
! 12: * See the file LICENSE.TXT for full copyright and licensing information.
! 13: */
! 14:
! 15: #include <ctype.h>
! 16: #include "curses.h"
! 17: #include "rogue.h"
! 18: #ifdef PC7300
! 19: #include <sys/window.h>
! 20: #endif
! 21:
! 22: #ifdef BSD
! 23: char
! 24: tolower(c)
! 25: {
! 26: if (isupper(c)) return(_tolower(c));
! 27: else return(c);
! 28: }
! 29: char
! 30: toupper(c)
! 31: {
! 32: if (islower(c)) return(_toupper(c));
! 33: else return(c);
! 34: }
! 35: #endif
! 36:
! 37: /*
! 38: * Now all the global variables
! 39: */
! 40: struct trap traps[MAXTRAPS];
! 41: struct room rooms[MAXROOMS]; /* One for each room -- A level */
! 42: struct room *oldrp; /* Roomin(&player.t_oldpos) */
! 43: struct thing player; /* The rogue */
! 44: struct object *cur_armor; /* What a well dresssed rogue wears */
! 45: struct object *cur_ring[NUM_FINGERS]; /* Which rings are being worn */
! 46: struct object *cur_misc[NUM_MM]; /* which MM's are in use */
! 47: int cur_relic[MAXRELIC]; /* Currently used relics */
! 48: struct linked_list *lvl_obj = NULL;
! 49: struct linked_list *mlist = NULL;
! 50: struct linked_list *tlist = NULL; /* list of monsters fallen down traps */
! 51: struct linked_list *monst_dead = NULL; /* monster killed by monster */
! 52: struct object *cur_weapon = NULL;
! 53: int char_type = -1; /* what type of character is player */
! 54: int foodlev = 1; /* how fast he eats food */
! 55: int ntraps; /* Number of traps on this level */
! 56: int trader = 0; /* no. of purchases */
! 57: int curprice = -1; /* current price of item */
! 58: int seed; /* Random number seed */
! 59: int dnum; /* Dungeon number */
! 60: int max_level; /* Deepest player has gone ever */
! 61: int cur_max; /* Deepest player has gone currently */
! 62: int mpos = 0;
! 63: int level = 0;
! 64: int purse = 0;
! 65: int inpack = 0;
! 66: int total = 0;
! 67: int no_food = 0; /* how long has he gone with no food */
! 68: int foods_this_level = 0; /* foods made per level */
! 69: int count = 0;
! 70: int food_left = STOMACHSIZE-MORETIME-1;
! 71: int group = 1;
! 72: int hungry_state = F_OKAY;
! 73: int infest_dam=0;
! 74: int lost_str=0;
! 75: int lastscore = -1;
! 76: int hold_count = 0;
! 77: int trap_tries = 0;
! 78: int chant_time = 0;
! 79: int pray_time = 0;
! 80: int spell_power = 0;
! 81: int turns = 0; /* Number of turns player has taken */
! 82: int quest_item = 0; /* Item player is looking for */
! 83: int cols = 0; /* number of columns in terminal */
! 84: int lines = 0; /* number of lines on the terminal */
! 85: char nfloors = -1; /* Number of floors in this dungeon */
! 86: char curpurch[LINELEN]; /* name of item ready to buy */
! 87: char PLAYER = VPLAYER; /* what the player looks like */
! 88: char take; /* Thing the rogue is taking */
! 89: char prbuf[LINELEN*2]; /* Buffer for sprintfs */
! 90: char outbuf[BUFSIZ]; /* Output buffer for stdout */
! 91: char runch; /* Direction player is running */
! 92: char *s_names[MAXSCROLLS]; /* Names of the scrolls */
! 93: char *p_colors[MAXPOTIONS]; /* Colors of the potions */
! 94: char *r_stones[MAXRINGS]; /* Stone settings of the rings */
! 95: char *ws_made[MAXSTICKS]; /* What sticks are made of */
! 96: char whoami[LINELEN]; /* Name of player */
! 97: char huh[LINELEN]; /* The last message printed */
! 98: char *s_guess[MAXSCROLLS]; /* Players guess at what scroll is */
! 99: char *p_guess[MAXPOTIONS]; /* Players guess at what potion is */
! 100: char *r_guess[MAXRINGS]; /* Players guess at what ring is */
! 101: char *ws_guess[MAXSTICKS]; /* Players guess at what wand is */
! 102: char *m_guess[MAXMM]; /* Players guess at what MM is */
! 103: char *ws_type[MAXSTICKS]; /* Is it a wand or a staff */
! 104: char file_name[LINELEN]; /* Save file name */
! 105: char score_file[LINELEN]; /* Score file name */
! 106: char home[LINELEN]; /* User's home directory */
! 107: WINDOW *cw; /* Window that the player sees */
! 108: WINDOW *hw; /* Used for the help command */
! 109: WINDOW *mw; /* Used to store monsters */
! 110: WINDOW *msgw; /* Used to display messages */
! 111: bool pool_teleport = FALSE; /* just teleported from a pool */
! 112: bool inwhgt = FALSE; /* true if from wghtchk() */
! 113: bool after; /* True if we want after daemons */
! 114: bool waswizard; /* Was a wizard sometime */
! 115: bool s_know[MAXSCROLLS]; /* Does he know what a scroll does */
! 116: bool p_know[MAXPOTIONS]; /* Does he know what a potion does */
! 117: bool r_know[MAXRINGS]; /* Does he know what a ring does */
! 118: bool ws_know[MAXSTICKS]; /* Does he know what a stick does */
! 119: bool m_know[MAXMM]; /* Does he know what a MM does */
! 120: bool playing = TRUE;
! 121: bool running = FALSE;
! 122: bool wizard = FALSE;
! 123: bool notify = TRUE;
! 124: bool fight_flush = FALSE;
! 125: bool terse = FALSE;
! 126: bool auto_pickup = TRUE;
! 127: bool menu_overlay = TRUE;
! 128: bool door_stop = FALSE;
! 129: bool jump = FALSE;
! 130: bool slow_invent = FALSE;
! 131: bool firstmove = FALSE;
! 132: bool askme = TRUE;
! 133: bool in_shell = FALSE;
! 134: bool daytime = TRUE;
! 135: bool use_savedir = FALSE;
! 136: FILE *scoreboard = NULL; /* Score file */
! 137: FILE *logfile = NULL;
! 138: LEVTYPE levtype; /* type of level i'm on */
! 139:
! 140: char *nothing = "Nothing seems to happen.";
! 141: char *spacemsg = "--Press space to continue--";
! 142: char *morestr = "-- More --";
! 143: char *retstr = "[Press return to continue]";
! 144: #ifdef PC7300
! 145: struct uwdata wdata, oldwin; /* Static window information */
! 146: char oldtext[WTXTNUM][WTXTLEN]; /* Saved window text */
! 147: #endif
! 148:
! 149: /*
! 150: * This lays out all the class specific details
! 151: *
! 152: * Here are the beginning experience levels for all players.
! 153: * All further experience levels are computed by muliplying by 2
! 154: * up through MAXDOUBLE. Then exp pts are calculated by adding
! 155: * in the cap figure. You must change MAXDOUBLE if you change the
! 156: * cap figure.
! 157: */
! 158: struct character_types char_class[NUM_CHARTYPES] = {
! 159: /* name exppts cap hitpts Base Maxlvl, Factor, Offset, Range */
! 160: { "fighter", 80, 1310720, 12, 10, 30, 2, 1, 2 },
! 161: { "ranger", 140, 2293760, 8, 10, 20, 2, 1, 2 },
! 162: { "paladin", 120, 1966080, 10, 10, 23, 2, 1, 2 },
! 163: { "magician", 130, 2129920, 6, 9, 18, 2, 1, 5 },
! 164: { "cleric", 110, 1802240, 8, 10, 19, 2, 1, 3 },
! 165: { "thief", 75, 1228800, 6, 10, 25, 2, 1, 4 },
! 166: { "assassin", 85, 1392640, 6, 10, 25, 2, 1, 4 },
! 167: { "druid", 100, 1638400, 8, 10, 19, 2, 1, 3 },
! 168: { "monk", 95, 1556480, 6, 10, 25, 2, 1, 3 },
! 169: { "monster", 0, 0, 8, 7, 30, 1, 0, 2 },
! 170: };
! 171:
! 172:
! 173: /*
! 174: * This array lists the names of the character's abilities. It must be ordered
! 175: * according to the ability definitions in rogue.h.
! 176: */
! 177:
! 178: char *abilities[NUMABILITIES] = {
! 179: "Intelligence", "Strength", "Wisdom", "Dexterity", "Constitution", "Charisma"
! 180: };
! 181:
! 182: /*
! 183: * NOTE: the ordering of the points in this array is critical. They MUST
! 184: * be listed in the following sequence:
! 185: *
! 186: * 7 4 6
! 187: * 1 0 2
! 188: * 5 3 8
! 189: */
! 190:
! 191: coord grid[9] = {{0,0},
! 192: { 0,-1}, { 0, 1}, {-1, 0}, { 1, 0},
! 193: {-1,-1}, { 1, 1}, { 1,-1}, {-1, 1}
! 194: };
! 195:
! 196: struct death_type deaths[DEATHNUM] = {
! 197: { D_ARROW, "an arrow"},
! 198: { D_DART, "a dart"},
! 199: { D_BOLT, "a bolt"},
! 200: { D_POISON, "poison"},
! 201: { D_POTION, "a cursed potion"},
! 202: { D_PETRIFY, "petrification"},
! 203: { D_SUFFOCATION, "suffocation"},
! 204: { D_INFESTATION, "a parasite"},
! 205: { D_DROWN, "drowning"},
! 206: { D_ROT, "body rot"},
! 207: { D_CONSTITUTION, "poor health"},
! 208: { D_STRENGTH, "being too weak"},
! 209: { D_SIGNAL, "a bug"},
! 210: { D_CHOKE, "dust of choking"},
! 211: { D_STRANGLE, "strangulation"},
! 212: { D_FALL, "a fall"},
! 213: { D_RELIC, "an artifact's wrath"},
! 214: { D_STARVATION, "starvation"},
! 215: { D_FOOD_CHOKE, "choking on food"},
! 216: { D_SCROLL, "reading a scroll"},
! 217: };
! 218:
! 219:
! 220: /*
! 221: * weapons and their attributes
! 222: */
! 223: struct init_weps weaps[MAXWEAPONS] = {
! 224: { "mace", "2d4", "1d3", NONE, ISMETAL, 3, 100, 8 },
! 225: { "long sword", "1d12", "1d2", NONE, ISMETAL, 4, 60, 18 },
! 226: { "short bow", "1d1", "1d1", NONE, 0, 6, 40, 15 },
! 227: { "arrow", "1d1", "1d6", BOW, ISMANY|ISMISL, 1, 5, 1 },
! 228: { "dagger", "1d6", "1d4", NONE, ISMETAL|ISMISL|ISMANY,1,7,2},
! 229: { "rock", "1d2", "1d4", SLING, ISMANY|ISMISL, 1, 5, 1 },
! 230: { "two-handed sword","3d6", "1d2", NONE, ISMETAL, 5, 250, 40 },
! 231: { "sling", "0d0", "0d0", NONE, 0, 1, 5, 1 },
! 232: { "dart", "1d1", "1d3", NONE, ISMANY|ISMISL, 1, 5, 1 },
! 233: { "crossbow", "1d1", "1d1", NONE, 0, 6, 100, 15 },
! 234: { "crossbow bolt", "1d2", "1d12", CROSSBOW,ISMANY|ISMISL, 1, 7, 1 },
! 235: { "spear", "1d8", "2d6", NONE, ISMANY|ISMETAL|ISMISL,2,20,8},
! 236: { "trident", "3d4", "1d4", NONE, ISMETAL, 4, 50, 20 },
! 237: { "spetum", "2d6", "1d3", NONE, ISMETAL, 4, 50, 20 },
! 238: { "bardiche", "3d4", "1d2", NONE, ISMETAL, 4, 125, 20 },
! 239: { "pike", "1d12", "1d8", NONE, ISMETAL, 4, 80, 18 },
! 240: { "bastard sword", "2d8", "1d2", NONE, ISMETAL, 5, 100, 30 },
! 241: { "halberd", "2d6", "1d3", NONE, ISMETAL, 4, 175, 10 },
! 242: { "battle axe", "1d8", "1d3", NONE, ISMETAL, 3, 80, 10 },
! 243: };
! 244:
! 245: struct init_armor armors[MAXARMORS] = {
! 246: { "leather armor", 11, 8, 70, 100 },
! 247: { "ring mail", 22, 7, 50, 250 },
! 248: { "studded leather armor", 33, 7, 50, 200 },
! 249: { "scale mail", 45, 6, 70, 250 },
! 250: { "padded armor", 57, 6, 150, 150 },
! 251: { "chain mail", 69, 5, 100, 300 },
! 252: { "splint mail", 80, 4, 150, 350 },
! 253: { "banded mail", 90, 4, 150, 350 },
! 254: { "plate mail", 96, 3, 400, 400 },
! 255: { "plate armor", 100, 2, 650, 450 },
! 256: };
! 257:
! 258: struct magic_item things[NUMTHINGS] = {
! 259: { "potion", 260, 10 }, /* potion */
! 260: { "scroll", 260, 30 }, /* scroll */
! 261: { "food", 180, 20 }, /* food */
! 262: { "weapon", 80, 0 }, /* weapon */
! 263: { "armor", 80, 0 }, /* armor */
! 264: { "ring", 50, 5 }, /* ring */
! 265: { "stick", 60, 0 }, /* stick */
! 266: { "miscellaneous magic", 30, 50 }, /* miscellaneous magic */
! 267: { "artifact", 0, 10 }, /* artifact */
! 268: };
! 269:
! 270: struct magic_item s_magic[MAXSCROLLS] = {
! 271: { "monster confusion", 50, 125, 0, 0 },
! 272: { "magic mapping", 50, 150, 0, 0 },
! 273: { "light", 70, 100, 21, 15 },
! 274: { "hold monster", 30, 200, 33, 20 },
! 275: { "sleep", 20, 150, 20, 0 },
! 276: { "enchantment", 170, 200, 9, 9 },
! 277: { "identify", 200, 100, 0, 25 },
! 278: { "scare monster", 40, 250, 27, 21 },
! 279: { "gold detection", 30, 110, 0, 0 },
! 280: { "teleportation", 60, 165, 10, 20 },
! 281: { "create monster", 30, 75, 0, 0 },
! 282: { "remove curse", 70, 120, 9, 15 },
! 283: { "petrification", 10, 185, 0, 0 },
! 284: { "genocide", 10, 300, 0, 0 },
! 285: { "cure disease", 80, 160, 0, 0 },
! 286: { "acquirement", 10, 700, 0, 0 },
! 287: { "protection", 30, 190, 20, 0 },
! 288: { "trap finding", 10, 180, 0, 0 },
! 289: { "runes", 10, 50, 0, 0 },
! 290: { "charm monster", 20, 275, 0, 15 },
! 291: };
! 292:
! 293: struct magic_item p_magic[MAXPOTIONS] = {
! 294: { "clear thought", 50, 180, 27, 10 },
! 295: { "gain ability", 160, 210, 15, 15 },
! 296: { "see invisible", 50, 150, 25, 15 },
! 297: { "healing", 160, 130, 27, 27 },
! 298: { "monster detection", 60, 120, 0, 0 },
! 299: { "magic detection", 60, 105, 0, 0 },
! 300: { "raise level", 10, 450, 11, 10 },
! 301: { "haste self", 90, 180, 30, 5 },
! 302: { "restore abilities", 140, 140, 0, 10 },
! 303: { "phasing", 50, 210, 21, 20 },
! 304: { "invisibility", 50, 230, 0, 15 },
! 305: { "flying", 40, 130, 0, 20 },
! 306: { "food detection", 10, 150, 0, 0 },
! 307: { "skill", 10, 200, 20, 10 },
! 308: { "fire resistance", 10, 250, 0, 10 },
! 309: { "cold resistance", 10, 250, 0, 10 },
! 310: { "lightning protection", 10, 250, 0, 10 },
! 311: { "poison", 30, 205, 0, 0 },
! 312: };
! 313:
! 314: struct magic_item r_magic[MAXRINGS] = {
! 315: { "protection", 50, 200, 33, 25 },
! 316: { "add strength", 60, 200, 33, 25 },
! 317: { "sustain ability", 50, 500, 0, 0 },
! 318: { "searching", 50, 400, 0, 0 },
! 319: { "extra sight", 40, 350, 0, 0 },
! 320: { "alertness", 40, 380, 0, 0 },
! 321: { "aggravate monster", 30, 100, 100, 0 },
! 322: { "dexterity", 60, 220, 33, 25 },
! 323: { "increase damage", 60, 220, 33, 25 },
! 324: { "regeneration", 40, 600, 0, 0 },
! 325: { "slow digestion", 40, 240, 15, 15 },
! 326: { "teleportation", 20, 100, 100, 0 },
! 327: { "stealth", 30, 300, 0, 0 },
! 328: { "add intelligence", 60, 240, 33, 25 },
! 329: { "increase wisdom", 60, 220, 33, 25 },
! 330: { "sustain health", 80, 500, 0, 0 },
! 331: { "carrying", 20, 100, 100, 0 },
! 332: { "illumination", 30, 520, 0, 0 },
! 333: { "delusion", 20, 100, 75, 0 },
! 334: { "fear", 20, 100, 100, 0},
! 335: { "heroism", 30, 390, 0, 0 },
! 336: { "fire resistance", 40, 400, 0, 0 },
! 337: { "warmth", 40, 400, 0, 0 },
! 338: { "vampiric regeneration", 10,1000, 0, 0},
! 339: { "free action", 10, 370, 0, 0},
! 340: { "teleport control", 10, 700, 0, 0},
! 341: };
! 342:
! 343: struct magic_item ws_magic[MAXSTICKS] = {
! 344: { "light", 90, 120, 20, 20 },
! 345: { "striking", 60, 115, 0, 0 },
! 346: { "lightning", 35, 200, 0, 0 },
! 347: { "fire", 35, 200, 0, 0 },
! 348: { "cold", 35, 200, 0, 0 },
! 349: { "polymorph", 80, 150, 0, 0 },
! 350: { "magic missile", 80, 170, 0, 0 },
! 351: { "slow", 80, 220, 25, 20 },
! 352: { "drain life", 80, 210, 20, 0 },
! 353: { "charging", 70, 400, 0, 0 },
! 354: { "teleport", 90, 140, 25, 20 },
! 355: { "cancellation", 40, 130, 0, 0 },
! 356: { "confusion", 35, 100, 15, 0},
! 357: { "disintegration", 10, 300, 33, 0},
! 358: { "petrification", 30, 240, 0, 0},
! 359: { "paralyzation", 30, 180, 15, 0},
! 360: { "degeneration", 30, 250, 30, 0},
! 361: { "curing", 10, 250, 25, 0},
! 362: { "wonder", 50, 110, 0, 0},
! 363: { "fear", 30, 180, 0, 0},
! 364: };
! 365:
! 366: /*
! 367: * WARNING: unique miscellaneous magic items must be put at the end
! 368: * of this list. They MUST be the last items. The function
! 369: * create_obj() in wizard.c depends on it.
! 370: */
! 371: struct magic_item m_magic[MAXMM] = {
! 372: { "alchemy jug", 40, 240, 0, 0},
! 373: { "beaker of potions", 60, 300, 0, 0},
! 374: { "book of spells", 60, 300, 0, 0},
! 375: { "boots of elvenkind", 50, 500, 0, 0},
! 376: { "bracers of defense", 140, 100, 15, 0},
! 377: { "chime of opening", 50, 250, 0, 0},
! 378: { "chime of hunger", 50, 100,100, 0},
! 379: { "cloak of displacement", 60, 500, 0, 0},
! 380: { "cloak of protection", 70, 200, 15, 0},
! 381: { "drums of panic", 40, 350, 0, 0},
! 382: { "dust of disappearance", 40, 300, 0, 0},
! 383: { "dust of choking", 30, 100,100, 0},
! 384: { "gauntlets of dexterity", 30, 600, 25, 0},
! 385: { "gauntlets of ogre power", 30, 600, 25, 0},
! 386: { "jewel of attacks", 40, 150,100, 0},
! 387: { "keoghtoms ointment", 50, 200, 0, 0},
! 388: { "robe of powerlessness", 30, 100,100, 0},
! 389: { "gauntlets of fumbling", 30, 100,100, 0},
! 390: { "necklace of adaptation", 20, 500, 0, 0},
! 391: { "necklace of strangulation",30, 110,100, 0},
! 392: { "boots of dancing", 30, 120,100, 0},
! 393: { "book of skills", 20, 650, 0, 0},
! 394: };
! 395:
! 396:
! 397: struct magic_item rel_magic[MAXRELIC] = {
! 398: { "Daggers of Musty Doit", 0, 50000, 0, 0},
! 399: { "Cloak of Emori", 0, 50000, 0, 0},
! 400: { "Ankh of Heil", 0, 50000, 0, 0},
! 401: { "Staff of Ming", 0, 50000, 0, 0},
! 402: { "Wand of Orcus", 0, 50000, 0, 0},
! 403: { "Rod of Asmodeus", 0, 50000, 0, 0},
! 404: { "Amulet of Yendor", 0, 50000, 0, 0},
! 405: { "Mandolin of Brian", 0, 50000, 0, 0},
! 406: { "Horn of Geryon", 0, 50000, 0, 0},
! 407: { "Morning Star of Hruggek", 0, 50000, 0, 0},
! 408: { "Flail of Yeenoghu", 0, 50000, 0, 0},
! 409: { "Eye of Vecna", 0, 50000, 0, 0},
! 410: { "Axe of Aklad", 0, 50000, 0, 0},
! 411: { "Quill of Nagrom", 0, 50000, 0, 0},
! 412: { "Amulet of Stonebones", 0, 50000, 0, 0},
! 413: { "Ring of Surtur", 0, 50000, 0, 0},
! 414: };
! 415: /*
! 416: * food and fruits that you get
! 417: */
! 418: struct magic_item foods[MAXFOODS] = {
! 419: { "food ration", 800, 50, 750, 0},
! 420: { "apple", 10, 20, 300, 0},
! 421: { "banana", 10, 20, 300, 0},
! 422: { "blueberry", 10, 20, 300, 0},
! 423: { "candleberry", 10, 20, 300, 0},
! 424: { "caprifig", 10, 20, 300, 0},
! 425: { "dewberry", 10, 20, 300, 0},
! 426: { "elderberry", 10, 20, 300, 0},
! 427: { "gooseberry", 10, 20, 300, 0},
! 428: { "guanabana", 10, 20, 300, 0},
! 429: { "hagberry", 10, 20, 300, 0},
! 430: { "jaboticaba", 10, 20, 300, 0},
! 431: { "peach", 10, 20, 300, 0},
! 432: { "pitanga", 10, 20, 300, 0},
! 433: { "prickly pear", 10, 20, 300, 0},
! 434: { "rambutan", 10, 20, 300, 0},
! 435: { "sapodilla", 10, 20, 300, 0},
! 436: { "soursop", 10, 20, 300, 0},
! 437: { "strawberry", 10, 20, 300, 0},
! 438: { "sweetsop", 10, 20, 300, 0},
! 439: { "whortleberry", 10, 20, 300, 0},
! 440: };
! 441:
! 442: /*
! 443: * these are the spells that a magic user can cast
! 444: */
! 445: struct spells magic_spells[MAXSPELLS] = {
! 446: { P_TFIND, 3, TYP_POTION, 0 },
! 447: { S_IDENT, 5, TYP_SCROLL, 0 },
! 448: { S_LIGHT, 7, TYP_SCROLL, ISBLESSED },
! 449: { S_REMOVE, 7, TYP_SCROLL, 0 },
! 450: { S_CONFUSE, 10, TYP_SCROLL, 0 },
! 451: { WS_MISSILE, 15, TYP_STICK, 0 },
! 452: { S_TELEP, 20, TYP_SCROLL, 0 },
! 453: { S_SLEEP, 20, TYP_SCROLL, 0 },
! 454: { P_FLY, 20, TYP_POTION, 0 },
! 455: { P_SEEINVIS, 20, TYP_POTION, 0 },
! 456: { WS_COLD, 25, TYP_STICK, 0 },
! 457: { WS_ELECT, 25, TYP_STICK, 0 },
! 458: { WS_FIRE, 25, TYP_STICK, 0 },
! 459: { P_HASTE, 30, TYP_POTION, 0 },
! 460: { WS_CANCEL, 30, TYP_STICK, 0 },
! 461: { P_PHASE, 40, TYP_POTION, 0 },
! 462: { S_HOLD, 50, TYP_SCROLL, 0 },
! 463: { WS_CHARGE, 55, TYP_STICK, ISBLESSED },
! 464: { S_PROTECT, 60, TYP_SCROLL, 0 },
! 465: { S_ALLENCH, 70, TYP_SCROLL, 0 },
! 466: };
! 467:
! 468: /*
! 469: * these are the spells that a cleric can cast
! 470: */
! 471: struct spells cleric_spells[MAXPRAYERS] = {
! 472: { P_MFIND, 3, TYP_POTION, 0 },
! 473: { P_TFIND, 7, TYP_POTION, 0 },
! 474: { S_LIGHT, 10, TYP_SCROLL, ISBLESSED },
! 475: { S_REMOVE, 15, TYP_SCROLL, 0 },
! 476: { P_HEALING, 20, TYP_POTION, 0 },
! 477: { P_FFIND, 24, TYP_POTION, 0 },
! 478: { S_FINDTRAPS, 26, TYP_SCROLL, 0 },
! 479: { S_CURING, 27, TYP_SCROLL, 0 },
! 480: { WS_PARALYZE, 30, TYP_STICK, ISBLESSED },
! 481: { S_MAP, 31, TYP_SCROLL, 0 },
! 482: { P_CLEAR, 32, TYP_POTION, 0 },
! 483: { WS_FEAR, 33, TYP_STICK, ISBLESSED },
! 484: { P_SEEINVIS, 35, TYP_POTION, 0 },
! 485: { P_RESTORE, 40, TYP_POTION, 0 },
! 486: { P_PHASE, 43, TYP_POTION, 0 },
! 487: { S_TELEP, 45, TYP_SCROLL, 0 },
! 488: { WS_CURING, 50, TYP_STICK, ISBLESSED },
! 489: { WS_DRAIN, 50, TYP_STICK, 0 },
! 490: };
! 491:
! 492: /*
! 493: * these are the spells that a druid can chant
! 494: */
! 495: struct spells druid_spells[MAXCHANTS] = {
! 496: { P_TFIND, 3, TYP_POTION, 0 },
! 497: { P_MFIND, 3, TYP_POTION, 0 },
! 498: { S_LIGHT, 7, TYP_SCROLL, ISBLESSED },
! 499: { S_CONFUSE, 10, TYP_SCROLL, 0 },
! 500: { S_MAP, 10, TYP_SCROLL, 0 },
! 501: { P_FFIND, 15, TYP_POTION, 0 },
! 502: { P_HEALING, 20, TYP_POTION, 0 },
! 503: { S_CURING, 25, TYP_SCROLL, 0 },
! 504: { P_FLY, 27, TYP_POTION, ISBLESSED },
! 505: { P_FIRE, 30, TYP_POTION, ISBLESSED },
! 506: { P_COLD, 30, TYP_POTION, ISBLESSED },
! 507: { P_LIGHTNING, 30, TYP_POTION, ISBLESSED },
! 508: { S_HOLD, 35, TYP_SCROLL, 0 },
! 509: { WS_CURING, 40, TYP_STICK, ISBLESSED },
! 510: { P_PHASE, 45, TYP_POTION, 0 },
! 511: { S_CHARM, 50, TYP_SCROLL, ISBLESSED },
! 512: };
! 513:
! 514:
! 515: /*
! 516: * these are the scrolls that a quill can write
! 517: */
! 518: struct quill quill_scrolls[MAXQUILL] = {
! 519: { S_GFIND, 4, },
! 520: { S_IDENT, 5, },
! 521: { S_LIGHT, 6, },
! 522: { S_REMOVE, 7, },
! 523: { S_MAP, 10, },
! 524: { S_SLEEP, 20, },
! 525: { S_TELEP, 30, },
! 526: { S_CONFUSE, 40, },
! 527: { S_CURING, 50, },
! 528: { S_HOLD, 70, },
! 529: { S_PROTECT, 90, },
! 530: { S_SCARE, 110, },
! 531: { S_ALLENCH, 130, },
! 532: };
! 533:
! 534: char *cnames[NUM_CHARTYPES-1][NUM_CNAMES] = {
! 535: { "Veteran", "Warrior", /* Fighter */
! 536: "Swordsman", "Hero",
! 537: "Swashbuckler", "Myrmidon",
! 538: "Champion", "Superhero",
! 539: "Lord", "Lord",
! 540: "Lord", "Lord",
! 541: "Lord", "Lord",
! 542: "Lord", "Lord",
! 543: "Lord"
! 544: },
! 545: { "Runner", "Strider", /* Ranger */
! 546: "Scout", "Courser",
! 547: "Tracker", "Guide",
! 548: "Pathfinder", "Ranger",
! 549: "Ranger Knight", "Ranger Lord",
! 550: "Ranger Lord", "Ranger Lord",
! 551: "Ranger Lord", "Ranger Lord",
! 552: "Ranger Lord", "Ranger Lord",
! 553: "Ranger Lord"
! 554: },
! 555: { "Gallant", "Keeper", /* Paladin */
! 556: "Protector", "Defender",
! 557: "Warder", "Guardian",
! 558: "Chevalier", "Justiciar",
! 559: "Paladin", "Paladin",
! 560: "Paladin", "Paladin",
! 561: "Paladin", "Paladin",
! 562: "Paladin", "Paladin",
! 563: "Paladin"
! 564: },
! 565: { "Prestidigitator", "Evoker", /* Magic User */
! 566: "Conjurer", "Theurgist",
! 567: "Thaumaturgist", "Magician",
! 568: "Enchanter", "Warlock",
! 569: "Sorcerer", "Necromancer",
! 570: "Wizard I", "Wizard II",
! 571: "Wizard III", "Wizard IV",
! 572: "Wizard V", "Wizard VI",
! 573: "High Wizard"
! 574: },
! 575: { "Acolyte", "Adept", /* Cleric */
! 576: "Priest", "Curate",
! 577: "Prefect", "Canon",
! 578: "Lama", "Patriarch",
! 579: "High Priest", "High Priest",
! 580: "High Priest", "High Priest",
! 581: "High Priest", "High Priest",
! 582: "High Priest", "High Priest",
! 583: "High Priest"
! 584: },
! 585: { "Rogue", "Footpad", /* Thief */
! 586: "Cutpurse", "Robber",
! 587: "Burglar", "Filcher",
! 588: "Sharper", "Magsman",
! 589: "Thief", "Master Thief",
! 590: "Master Thief", "Master Thief",
! 591: "Master Thief", "Master Thief",
! 592: "Master Thief", "Master Thief",
! 593: "Master Thief"
! 594: },
! 595: { "Bravo", "Rutterkin", /* Assassin */
! 596: "Waghalter", "Murderer",
! 597: "Thug", "Killer",
! 598: "Cutthroat", "Executioner",
! 599: "Assassin", "Expert Assassin",
! 600: "Senior Assassin", "Chief Assassin",
! 601: "Prime Assassin", "Guildmaster Assassin",
! 602: "Grandfather Assassin", "Grandfather Assassin",
! 603: "Grandfather Assassin"
! 604: },
! 605: { "Aspirant", "Ovate", /* Druid */
! 606: "Initiate 1st Circle", "Initiate 2nd Circle",
! 607: "Initiate 3rd Circle", "Initiate 4th Circle",
! 608: "Initiate 5th Circle", "Initiate 6th Circle",
! 609: "Initiate 7th Circle", "Initiate 8th Circle",
! 610: "Initiate 9th Circle", "Druid",
! 611: "Archdruid", "The Great Druid",
! 612: "The Great Druid", "The Great Druid",
! 613: "The Great Druid",
! 614: },
! 615: { "Novice", "Initiate", /* Monk */
! 616: "Brother", "Disciple",
! 617: "Immaculate", "Master",
! 618: "Superior Master", "Master of Dragons",
! 619: "Master of North Wind", "Master of West Wind",
! 620: "Master of South Wind", "Master of East Wind",
! 621: "Master of Winter", "Master of Autumn",
! 622: "Master of Summer", "Master of Spring",
! 623: "Grand Master"
! 624: }
! 625: } ;
! 626:
! 627: struct h_list helpstr[] = {
! 628: { '?', " prints help" },
! 629: { '/', " identify object" },
! 630: { '=', " identify screen character" },
! 631: { 'h', " left" },
! 632: { 'j', " down" },
! 633: { 'k', " up" },
! 634: { 'l', " right" },
! 635: { 'y', " up & left" },
! 636: { 'u', " up & right" },
! 637: { 'b', " down & left" },
! 638: { 'n', " down & right" },
! 639: { 'H', " run left" },
! 640: { 'J', " run down" },
! 641: { 'K', " run up" },
! 642: { 'L', " run right" },
! 643: { 'Y', " run up & left" },
! 644: { 'U', " run up & right" },
! 645: { 'B', " run down & left" },
! 646: { 'N', " run down & right" },
! 647: { 't', "<dir> throw something" },
! 648: { 'f', "<dir> forward until find something" },
! 649: { 'z', "<dir> zap a wand or staff" },
! 650: { '>', " go down a staircase" },
! 651: { '<', " go up a staircase" },
! 652: { 's', " search for trap/secret door" },
! 653: { '.', " rest for a while" },
! 654: { 'i', " inventory" },
! 655: { 'I', " inventory single item" },
! 656: { 'q', " quaff potion" },
! 657: { 'r', " read paper" },
! 658: { 'e', " eat food" },
! 659: { 'w', " wield a weapon" },
! 660: { 'W', " wear something" },
! 661: { 'T', " take off something" },
! 662: { 'd', " drop object" },
! 663: { 'P', " pick up object(s)" },
! 664: { CTRL('N'), " name object or monster" },
! 665: { 'm', " mark object (specific)" },
! 666: { 'o', " examine/set options" },
! 667: { 'c', " chant" },
! 668: { 'C', " cast a spell" },
! 669: { 'p', " pray" },
! 670: { 'a', " affect the undead" },
! 671: { '^', " set a trap" },
! 672: { 'G', " sense gold" },
! 673: { 'D', " dip something (into a pool)" },
! 674: { '*', " count up gold pieces" },
! 675: { CTRL('T'), "<dir> take (steal) from (direction)" },
! 676: { CTRL('U'), " use miscellaneous magic item" },
! 677: { CTRL('L'), " redraw screen" },
! 678: { CTRL('R'), " repeat last message" },
! 679: { ESCAPE, " cancel command" },
! 680: { 'v', " print program version number" },
! 681: { '!', " shell escape" },
! 682: { 'S', " save game" },
! 683: { 'Q', " quit" },
! 684: { 0, 0 }
! 685: } ;
! 686:
! 687: struct h_list wiz_help[] = {
! 688: { CTRL('A'), " system activity" },
! 689: { CTRL('C'), " move to another dungeon level" },
! 690: { CTRL('D'), " down 1 dungeon level" },
! 691: { CTRL('E'), " food remaining" },
! 692: { CTRL('F'), " display entire level" },
! 693: { CTRL('H'), " jump 9 experience levels" },
! 694: { CTRL('I'), " inventory of level" },
! 695: { CTRL('J'), " teleport" },
! 696: { CTRL('M'), " recharge staff" },
! 697: { CTRL('P'), " toggle wizard status" },
! 698: { CTRL('U'), " up 1 dungeon level" },
! 699: { CTRL('X'), " detect monsters" },
! 700: { CTRL('Z'), " identify" },
! 701: { 'M', " make object" },
! 702: { 0, 0 }
! 703: };
! 704:
! 705:
! 706: #define HPT(x) x
! 707: struct monster monsters[NUMMONST+1] = {
! 708: /* {"Name",
! 709: CARRY, NORMAL, WANDER, APPEAR, INTEL,
! 710: {ATTRIBUTES},
! 711: "SUMMONED_CREATURE", NUMBER_SUMMONED,
! 712: ADDED_EXPERIENCE/HIT_POINT,
! 713: {str dex, move, exp, level, "armor", hit_points,
! 714: "damage"}}, */
! 715: {"unknown",
! 716: 0, FALSE, FALSE, '\0', "",
! 717: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
! 718: 0,
! 719: 0, 0,
! 720: {0, 0, 0, 0, 0, 0, HPT(""),
! 721: ""}},
! 722: {"giant rat",
! 723: 0, TRUE, TRUE, 'R', "2-4",
! 724: {ISMEAN, CANDISEASE},
! 725: 0, 0,
! 726: 1,
! 727: {10, 10, 6, 7, 1, 7, HPT("1d4"),
! 728: "1d3"}},
! 729: {"kobold",
! 730: 10, TRUE, TRUE, 'K', "8",
! 731: {ISMEAN, CANSHOOT, CARRYWEAPON},
! 732: 0, 0,
! 733: 1,
! 734: {9, 10, 6, 5, 1, 7, HPT("1d4"),
! 735: "1d4"}},
! 736: {"gnome",
! 737: 10, TRUE, FALSE, 'G', "11-12",
! 738: {CANSHOOT, CARRYPOTION, CARRYWEAPON},
! 739: 0, 0,
! 740: 1,
! 741: {10, 10, 6, 8, 1, 5, HPT("1d6"),
! 742: "1d6"}},
! 743: {"bat",
! 744: 0, TRUE, TRUE, 'b', "2-4",
! 745: {ISMEAN, CANDISEASE, ISFLY, AREMANY},
! 746: 0, 0,
! 747: 0,
! 748: {10, 10, 6, 5, 1, 10, HPT("1d4"),
! 749: "1d1"}},
! 750: {"halfling",
! 751: 10, TRUE, FALSE, 'H', "11-12",
! 752: {CANSHOOT, CARRYPOTION, CARRYWEAPON},
! 753: 0, 0,
! 754: 1,
! 755: {8, 10, 6, 9, 1, 4, HPT("1d6"),
! 756: "1d6"}},
! 757: {"dwarf",
! 758: 15, TRUE, FALSE, 'D', "11-12",
! 759: {CANSHOOT, CARRYPOTION, CARRYWEAPON},
! 760: 0, 0,
! 761: 1,
! 762: {10, 10, 6, 10, 1, 4, HPT("1d8"),
! 763: "1d8"}},
! 764: {"orc",
! 765: 15, TRUE, TRUE, 'O', "8",
! 766: {ISMEAN, CANSHOOT, CARRYGOLD, CARRYWEAPON},
! 767: 0, 0,
! 768: 1,
! 769: {12, 10, 6, 10, 1, 6, HPT("1d8"),
! 770: "1d8"}},
! 771: {"xvart",
! 772: 100, TRUE, TRUE, 'x', "14-15",
! 773: {ISMEAN, CARRYDAGGER, AREMANY},
! 774: 0, 0,
! 775: 1,
! 776: {8, 10, 6, 7, 1, 7, HPT("1d4"),
! 777: "1d4"}},
! 778: {"manes",
! 779: 0, TRUE, TRUE, 'M', "2-4",
! 780: {ISMEAN, MAGICHIT, ISUNDEAD, TURNABLE},
! 781: 0, 0,
! 782: 1,
! 783: {10, 10, 6, 18, 1, 7, HPT("1d8"),
! 784: "1d2/1d2/1d4"}},
! 785: {"elf",
! 786: 50, TRUE, FALSE, 'E', "13-20",
! 787: {CANSHOOT, CARRYPOTION, CARRYSCROLL, CARRYWEAPON},
! 788: 0, 0,
! 789: 2,
! 790: {12, 10, 6, 20, 1, 5, HPT("1d8+1"),
! 791: "1d10"}},
! 792: {"hobgoblin",
! 793: 10, TRUE, TRUE, 'h', "8-10",
! 794: {ISMEAN, CANSHOOT, CARRYWEAPON},
! 795: 0, 0,
! 796: 2,
! 797: {14, 10, 6, 20, 1, 5, HPT("1d8+1"),
! 798: "1d8"}},
! 799: {"fire beetle",
! 800: 0, TRUE, TRUE, 'B', "0",
! 801: {ISMEAN, HASFIRE},
! 802: 0, 0,
! 803: 2,
! 804: {10, 10, 6, 20, 1, 4, HPT("1d8+2"),
! 805: "2d4"}},
! 806: {"giant ant",
! 807: 0, TRUE, TRUE, 'A', "1",
! 808: {ISMEAN, CANPOISON},
! 809: 0, 0,
! 810: 3,
! 811: {10, 10, 6, 40, 2, 3, HPT("2d8"),
! 812: "1d6/1d6"}},
! 813: {"zombie",
! 814: 0, TRUE, TRUE, 'Z', "0",
! 815: {ISMEAN, ISUNDEAD, TURNABLE},
! 816: 0, 0,
! 817: 2,
! 818: {10, 10, 6, 20, 2, 8, HPT("2d8"),
! 819: "1d8"}},
! 820: {"ear seeker",
! 821: 0, TRUE, TRUE, 'e', "0",
! 822: {ISMEAN, CANINFEST, AREMANY, CANSURPRISE},
! 823: 0, 0,
! 824: 0,
! 825: {10, 10, 6, 5, 1, 9, HPT("1d1"),
! 826: "1d1"}},
! 827: {"shrieker",
! 828: 0, TRUE, FALSE, 'S', "0",
! 829: {CANSHRIEK, NOMOVE, NOSTAB},
! 830: 0, 0,
! 831: 1,
! 832: {10, 10, 6, 10, 3, 7, HPT("3d8"),
! 833: "0d0"}},
! 834: {"stirge",
! 835: 0, TRUE, TRUE, 's', "1",
! 836: {ISMEAN, CANDRAW, ISFLY},
! 837: 0, 0,
! 838: 2,
! 839: {10, 10, 6, 36, 4, 8, HPT("1d8+1"),
! 840: "1d3"}},
! 841: {"gas spore",
! 842: 0, TRUE, FALSE, 'a', "0",
! 843: {ISMEAN, CANEXPLODE, CANINFEST, ISFLY},
! 844: 0, 0,
! 845: 5,
! 846: {10, 10, 18, 90, 1, 9, HPT("1d1"),
! 847: "1d1"}},
! 848: {"troglodyte",
! 849: 5, TRUE, TRUE, 'T', "5-7",
! 850: {ISMEAN, CANSMELL, CANSHOOT, CARRYGOLD, CARRYWEAPON},
! 851: 0, 0,
! 852: 2,
! 853: {10, 10, 6, 36, 2, 5, HPT("2d8"),
! 854: "1d3/1d3/2d5"}},
! 855: {"lemure",
! 856: 0, TRUE, FALSE, 'L', "2-4",
! 857: {ISMEAN, ISREGEN, MAGICHIT, ISUNDEAD, TURNABLE},
! 858: 0, 0,
! 859: 3,
! 860: {10, 10, 9, 65, 3, 7, HPT("3d8"),
! 861: "1d3"}},
! 862: {"bugbear",
! 863: 5, TRUE, TRUE, 'b', "5-8",
! 864: {ISMEAN, CANSHOOT, CANSURPRISE, CARRYGOLD, CARRYPOTION,
! 865: CARRYWEAPON},
! 866: 0, 0,
! 867: 4,
! 868: {16, 10, 6, 135, 3, 5, HPT("3d8+1"),
! 869: "2d4"}},
! 870: {"wererat",
! 871: 20, TRUE, TRUE, 'r', "11-12",
! 872: {ISMEAN, MAGICHIT, CARRYFOOD, CANSUMMON},
! 873: "giant rat", 2,
! 874: 4,
! 875: {10, 10, 6, 150, 3, 6, HPT("3d8+1"),
! 876: "1d8"}},
! 877: {"ghoul",
! 878: 0, TRUE, TRUE, 'g', "5-7",
! 879: {ISMEAN, CANPARALYZE, ISUNDEAD, TURNABLE},
! 880: 0, 0,
! 881: 2,
! 882: {10, 10, 6, 65, 2, 6, HPT("2d8"),
! 883: "1d3/1d3/1d6"}},
! 884: {"leprechaun",
! 885: 100, TRUE, FALSE, 'l', "15-16",
! 886: {CARRYGOLD, STEALGOLD},
! 887: 0, 0,
! 888: 1,
! 889: {10, 10, 3, 80, 6, 3, HPT("1d4+1"),
! 890: "0d0"}},
! 891: {"gray ooze",
! 892: 50, TRUE, FALSE, 'o', "1",
! 893: {ISMEAN, CANRUST, ISSCAVENGE, NOCOLD, NOFIRE, NOSTAB,CARRYFOOD},
! 894: 0, 0,
! 895: 5,
! 896: {10, 10, 10, 200, 3, 8, HPT("3d8+3"),
! 897: "2d8"}},
! 898: {"giant tick",
! 899: 0, TRUE, TRUE, 't', "0",
! 900: {ISMEAN, CANDRAW, CANDISEASE},
! 901: 0, 0,
! 902: 2,
! 903: {10, 10, 9, 105, 3, 3, HPT("3d8"),
! 904: "1d4"}},
! 905: {"ogre",
! 906: 50, TRUE, TRUE, 'O', "5-7",
! 907: {ISMEAN, CARRYGOLD, CARRYWEAPON},
! 908: 0, 0,
! 909: 5,
! 910: {18, 10, 7, 90, 4, 5, HPT("4d8+1"),
! 911: "1d10"}},
! 912: {"very young dragon",
! 913: 10, TRUE, FALSE, 'd', "15-16",
! 914: {ISMEAN, CANBRANDOM, ISGREED, CARRYGOLD},
! 915: 0, 0,
! 916: 9,
! 917: {10, 10, 6, 100, 9, -1, HPT("9d1"),
! 918: "1d4/1d4/2d4"}},
! 919: {"centaur",
! 920: 15, TRUE, FALSE, 'C', "5-10",
! 921: {CANSHOOT, CARRYPOTION, CARRYGOLD, CARRYWEAPON},
! 922: 0, 0,
! 923: 4,
! 924: {10, 10, 2, 85, 4, 4, HPT("4d8"),
! 925: "1d6/1d6"}},
! 926: {"nymph",
! 927: 100, TRUE, FALSE, 'N', "15-16",
! 928: {STEALMAGIC, CARRYSCROLL, CARRYPOTION, CARRYSTICK},
! 929: 0, 0,
! 930: 3,
! 931: {10, 10, 6, 350, 4, 9, HPT("3d8"),
! 932: "0d0"}},
! 933: {"violet fungi",
! 934: 0, TRUE, FALSE, 'F', "0",
! 935: {ISMEAN, CANHOLD, NOMOVE, CANROT, NOSTAB},
! 936: 0, 0,
! 937: 4,
! 938: {10, 10, 6, 135, 3, 7, HPT("3d8"),
! 939: "5d1"}},
! 940: {"gelatinous cube",
! 941: 90, TRUE, TRUE, 'c', "0",
! 942: {ISMEAN, ISSCAVENGE, CANPARALYZE, NOSTAB, CARRYFOOD},
! 943: 0, 0,
! 944: 4,
! 945: {10, 10, 8, 150, 4, 8, HPT("4d8"),
! 946: "2d4"}},
! 947: {"fire toad",
! 948: 0, TRUE, TRUE, 'f', "5-7",
! 949: {ISMEAN, CANBFIRE, NOFIRE},
! 950: 0, 0,
! 951: 4,
! 952: {10, 10, 6, 150, 4, 10, HPT("4d8+1"),
! 953: "2d4"}},
! 954: {"blink dog",
! 955: 0, TRUE, TRUE, 'B', "8-10",
! 956: {ISMEAN, CANBLINK},
! 957: 0, 0,
! 958: 5,
! 959: {10, 10, 6, 170, 4, 5, HPT("4d8"),
! 960: "1d6"}},
! 961: {"rust monster",
! 962: 0, TRUE, TRUE, 'R', "1",
! 963: {ISMEAN, CANRUST},
! 964: 0, 0,
! 965: 4,
! 966: {10, 10, 6, 185, 5, 2, HPT("3d8"),
! 967: "0d0/0d0"}},
! 968: {"ghast",
! 969: 0, TRUE, TRUE, 'G', "11-12",
! 970: {CANPARALYZE, CANSTINK, ISMEAN, ISUNDEAD, TURNABLE},
! 971: 0, 0,
! 972: 4,
! 973: {10, 10, 6, 190, 4, 4, HPT("4d8"),
! 974: "1d4/1d4/1d8"}},
! 975: {"blindheim",
! 976: 0, TRUE, FALSE, 'b', "1",
! 977: {CANBLIND, ISMEAN},
! 978: 0, 0,
! 979: 4,
! 980: {8, 10, 6, 200, 2, 1, HPT("4d8+2"),
! 981: "1d8"}},
! 982: {"shadow",
! 983: 0, TRUE, TRUE, 'S', "5-7",
! 984: {ISSHADOW, ISMEAN, CANCHILL, ISUNDEAD, TURNABLE},
! 985: 0, 0,
! 986: 4,
! 987: {10, 10, 6, 255, 3, 7, HPT("3d8+3"),
! 988: "1d4+1"}},
! 989: {"gargoyle",
! 990: 5, TRUE, TRUE, 'g', "5-7",
! 991: {ISMEAN, MAGICHIT},
! 992: 0, 0,
! 993: 5,
! 994: {10, 10, 6, 165, 4, 5, HPT("4d8+4"),
! 995: "1d3/1d3/1d6/1d4"}},
! 996: {"quasit",
! 997: 30, TRUE, TRUE, 'Q', "5-7",
! 998: {ISMEAN, ISREGEN, MAGICHIT, CANSURPRISE, CANITCH, CARRYSTICK,
! 999: CARRYSCROLL, CARRYGOLD, CARRYPOTION, NOCOLD, NOFIRE, NOBOLT},
! 1000: 0, 0,
! 1001: 3,
! 1002: {10, 10, 6, 325, 7, 2, HPT("3d8"),
! 1003: "1d2/1d2/1d4"}},
! 1004: {"imp",
! 1005: 25, TRUE, TRUE, 'I', "8-10",
! 1006: {ISMEAN, ISREGEN, MAGICHIT, CANPOISON, CANSURPRISE,
! 1007: CANTELEPORT, CARRYRING, CARRYSTICK, NOCOLD, NOBOLT, NOFIRE},
! 1008: 0, 0,
! 1009: 3,
! 1010: {10, 10, 6, 275, 2, 2, HPT("2d8+2"),
! 1011: "1d4"}},
! 1012: {"su-monster", 10, TRUE, TRUE, 's', "8-10",
! 1013: {ISMEAN, CARRYSCROLL, CARRYGOLD, CARRYFOOD},
! 1014: 0, 0,
! 1015: 6,
! 1016: {10, 10, 5, 225, 5, 6, HPT("5d8+5"),
! 1017: "4d4/2d4"}},
! 1018: {"owlbear",
! 1019: 5, TRUE, TRUE, 'O', "5-7",
! 1020: {ISMEAN, CANHUG, CARRYRING, CARRYFOOD},
! 1021: 0, 0,
! 1022: 8,
! 1023: {10, 10, 8, 225, 5, 5, HPT("5d8+2"),
! 1024: "1d6/1d6/2d6"}},
! 1025: {"doppleganger",
! 1026: 0, TRUE, TRUE, 'D', "11-12",
! 1027: {ISMEAN, CANSURPRISE},
! 1028: 0, 0,
! 1029: 4,
! 1030: {10, 10, 6, 330, 10, 5, HPT("4d8"),
! 1031: "1d12"}},
! 1032: {"yeti",
! 1033: 30, TRUE, TRUE, 'Y', "8-10",
! 1034: {ISMEAN, CANPARALYZE, CANHUG, NOCOLD, CANSURPRISE,
! 1035: CARRYGOLD, CARRYPOTION},
! 1036: 0, 0,
! 1037: 8,
! 1038: {13, 10, 6, 500, 6, 6, HPT("4d8+4"),
! 1039: "1d6/1d6"}},
! 1040: {"leucrotta",
! 1041: 0, TRUE, FALSE, 'L', "8-10",
! 1042: {ISMEAN},
! 1043: 0, 0,
! 1044: 8,
! 1045: {10, 10, 2, 475, 6, 4, HPT("6d8+1"),
! 1046: "3d6/1d6/1d6"}},
! 1047: {"cockatrice",
! 1048: 0, TRUE, TRUE, 'C', "1",
! 1049: {ISMEAN, TOUCHSTONE},
! 1050: 0, 0,
! 1051: 5,
! 1052: {10, 10, 5, 315, 5, 6, HPT("5d8"),
! 1053: "1d3"}},
! 1054: {"wight",
! 1055: 0, TRUE, TRUE, 'W', "8-10",
! 1056: {ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE},
! 1057: 0, 0,
! 1058: 5,
! 1059: {10, 10, 6, 540, 4, 5, HPT("4d8+3"),
! 1060: "1d4"}},
! 1061: {"troll",
! 1062: 50, TRUE, FALSE, 'T', "5-7",
! 1063: {ISMEAN, ISREGEN, CARRYFOOD, CARRYGOLD},
! 1064: 0, 0,
! 1065: 8,
! 1066: {18, 10, 8, 600, 6, 4, HPT("6d8+6"),
! 1067: "1d4+4/1d4+4/2d6"}},
! 1068: {"jackalwere",
! 1069: 50, TRUE, TRUE, 'J', "11-12",
! 1070: {ISMEAN, CANSHOOT, CANSNORE, MAGICHIT, CARRYFOOD, CARRYGOLD,
! 1071: CARRYSCROLL},
! 1072: 0, 0,
! 1073: 4,
! 1074: {10, 10, 6, 800, 4, 4, HPT("4d8"),
! 1075: "2d4"}},
! 1076: {"wraith",
! 1077: 0, TRUE, TRUE, 'w', "11-12",
! 1078: {ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE},
! 1079: 0, 0,
! 1080: 6,
! 1081: {10, 10, 6, 575, 5, 4, HPT("5d8+3"),
! 1082: "1d6"}},
! 1083: {"mimic",
! 1084: 20, TRUE, FALSE, 'M', "2-10",
! 1085: {ISMEAN, ISDISGUISE, NODETECT, CANHOLD, CARRYFOOD, CARRYRING,
! 1086: CARRYGOLD, NOMOVE},
! 1087: 0, 0,
! 1088: 12,
! 1089: {10, 10, 6, 1300, 9, 7, HPT("10d8"),
! 1090: "3d4"}},
! 1091: {"erinyes",
! 1092: 25, TRUE, TRUE, 'E', "8-10",
! 1093: {ISMEAN, CANFRIGHTEN, CANSUMMON, TURNABLE, CANPAIN, CANSEE,
! 1094: NOFIRE, CANTELEPORT, CARRYRING, CARRYSTICK},
! 1095: "ghoul", 3,
! 1096: 8,
! 1097: {10, 10, 6, 875, 7, 2, HPT("6d8+6"),
! 1098: "2d4"}},
! 1099: {"lava child",
! 1100: 0, TRUE, TRUE, 'l', "8-10",
! 1101: {ISMEAN, NOMETAL},
! 1102: 0, 0,
! 1103: 8,
! 1104: {10, 10, 6, 950, 5, 4, HPT("5d8+1"),
! 1105: "1d6/1d6/2d12"}},
! 1106: {"basilisk",
! 1107: 0, TRUE, FALSE, 'B', "1",
! 1108: {ISMEAN, LOOKSTONE},
! 1109: 0, 0,
! 1110: 8,
! 1111: {10, 10, 6, 1000, 6, 4, HPT("6d8+1"),
! 1112: "1d10"}},
! 1113: {"mummy",
! 1114: 20, TRUE, FALSE, 'm', "5-7",
! 1115: {ISMEAN,CANINFEST, MAGICHIT, CANFRIGHTEN, HALFDAMAGE, ISUNDEAD,
! 1116: TURNABLE, CARRYRING},
! 1117: 0, 0,
! 1118: 8,
! 1119: {10, 10, 6, 1150, 6, 3, HPT("6d8+3"),
! 1120: "1d12"}},
! 1121: {"otyugh",
! 1122: 0, TRUE, TRUE, 'o', "5-10",
! 1123: {ISMEAN, CANDISEASE},
! 1124: 0, 0,
! 1125: 8,
! 1126: {10, 10, 6, 700, 7, 3, HPT("7d8"),
! 1127: "1d8/1d8/1d4+1"}},
! 1128: {"adult dragon",
! 1129: 30, TRUE, FALSE, 'd', "15-16",
! 1130: {ISMEAN, CANBRANDOM, ISGREED, CANFRIGHTEN, CARRYGOLD,
! 1131: CARRYPOTION},
! 1132: 0, 0,
! 1133: 9,
! 1134: {10, 10, 6, 1000, 9, -1, HPT("45d1"),
! 1135: "1d6/1d6/2d6"}},
! 1136: {"invisible stalker",
! 1137: 0, TRUE, TRUE, 'i', "13-14",
! 1138: {ISMEAN, ISINVIS},
! 1139: 0, 0,
! 1140: 10,
! 1141: {10, 10, 4, 1090, 8, 3, HPT("8d8"),
! 1142: "4d4"}},
! 1143: {"xorn",
! 1144: 0, TRUE, TRUE, 'X', "8-10",
! 1145: {ISMEAN, CANINWALL, NOCOLD, NOFIRE, CANSURPRISE, NOBOLT},
! 1146: 0, 0,
! 1147: 10,
! 1148: {10, 10, 6, 1275, 7, -2, HPT("7d8+7"),
! 1149: "1d3/1d3/1d3/4d6"}},
! 1150: {"chimera",
! 1151: 0, TRUE, FALSE, 'c', "2-4",
! 1152: {ISMEAN, CANBFIRE, NOFIRE},
! 1153: 0, 0,
! 1154: 12,
! 1155: {10, 10, 6, 1000, 9, 6, HPT("9d8"),
! 1156: "1d3/1d3/1d4/1d4/2d4/3d4"}},
! 1157: {"horned devil",
! 1158: 5, TRUE, TRUE, 'H', "13-14",
! 1159: {ISMEAN, CANFRIGHTEN, CANINFEST, CANPOISON, MAGICHIT, CANSUMMON,
! 1160: NOFIRE, CANTELEPORT, CARRYGOLD, CARRYRING, CARRYSTICK},
! 1161: "wight", 2,
! 1162: 6,
! 1163: {10, 10, 6, 1320, 7, -3, HPT("5d8+5"),
! 1164: "1d4/1d4/1d4+1/1d3"}},
! 1165: {"specter",
! 1166: 0, TRUE, TRUE, 'S', "13-14",
! 1167: {ISMEAN, DOUBLEDRAIN, ISUNDEAD, TURNABLE},
! 1168: 0, 0,
! 1169: 10,
! 1170: {10, 10, 6, 1650, 7, 2, HPT("7d8+3"),
! 1171: "1d8"}},
! 1172: {"will-o-wisp", 100, TRUE, FALSE, 'W', "15-16",
! 1173: {ISMEAN, CANSURPRISE, ISFLY, CARRYGOLD, CARRYMISC, NOBOLT},
! 1174: 0, 0,
! 1175: 12,
! 1176: {10, 10, 5, 2000, 9, -8, HPT("9d8"),
! 1177: "2d8"}},
! 1178: {"lamia",
! 1179: 0, TRUE, TRUE, 'L', "13-14",
! 1180: {ISMEAN, TAKEWISDOM},
! 1181: 0, 0,
! 1182: 9,
! 1183: {10, 10, 2, 1500, 9, 3, HPT("9d8"),
! 1184: "1d4/1d4"}},
! 1185: {"neo-otyugh",
! 1186: 0, TRUE, TRUE, 'N', "10-12",
! 1187: {ISMEAN, CANDISEASE},
! 1188: 0, 0,
! 1189: 10,
! 1190: {12, 10, 6, 1500, 10, 0, HPT("12d8"),
! 1191: "2d6/2d6/1d3"}},
! 1192: {"barbed devil",
! 1193: 0, TRUE, TRUE, 'B', "11-12",
! 1194: {TOUCHFEAR, CANSUMMON, ISMEAN, CANHOLD, TURNABLE, NOFIRE,
! 1195: CANTELEPORT},
! 1196: "ghast", 4,
! 1197: 10,
! 1198: {10, 10, 6, 1425, 8, 0, HPT("8d8"),
! 1199: "2d4/2d4/3d4"}},
! 1200: {"vrock",
! 1201: 10, TRUE, TRUE, 'V', "5-7",
! 1202: {ISMEAN, CANSUMMON, CANSEE, TURNABLE, CANTELEPORT, CARRYGOLD,
! 1203: CARRYRING, CARRYSTICK},
! 1204: "erinyes", 2,
! 1205: 10,
! 1206: {10, 10, 6, 1500, 8, 0, HPT("8d8"),
! 1207: "1d4/1d4/1d8/1d8/1d6"}},
! 1208: {"shambling mound",
! 1209: 25, TRUE, TRUE, 's', "5-7",
! 1210: {ISMEAN, CANSUFFOCATE, NOCOLD, NOFIRE, CANHOLD, CARRYGOLD,
! 1211: CARRYFOOD, CARRYRING},
! 1212: 0, 0,
! 1213: 10,
! 1214: {10, 10, 7, 1800, 9, 0, HPT("9d8"),
! 1215: "2d8/2d8"}},
! 1216: {"umber hulk",
! 1217: 40, TRUE, TRUE, 'U', "8-10",
! 1218: {ISMEAN, CANHUH, CANINWALL, CANTUNNEL, CARRYSCROLL,
! 1219: CARRYPOTION, CARRYFOOD},
! 1220: 0, 0,
! 1221: 12,
! 1222: {10, 10, 6, 1700, 8, 2, HPT("8d8+8"),
! 1223: "3d4/3d4/2d5"}},
! 1224: {"ettin",
! 1225: 0, TRUE, TRUE, 'e', "5-7",
! 1226: {ISMEAN, CANSHOOT, AREMANY},
! 1227: 0, 0,
! 1228: 14,
! 1229: {10, 10, 6, 1950, 10, 3, HPT("10d8"),
! 1230: "2d8/3d6"}},
! 1231: {"black pudding",
! 1232: 30, TRUE, FALSE, 'P', "0",
! 1233: {ISMEAN, CANRUST, NOCOLD, BOLTDIVIDE, BLOWDIVIDE, ISSCAVENGE,
! 1234: NOSTAB, CARRYSCROLL, CARRYPOTION, CARRYRING},
! 1235: 0, 0,
! 1236: 14,
! 1237: {10, 10, 6, 2000, 10, 6, HPT("10d8"),
! 1238: "3d8"}},
! 1239: {"hezrou",
! 1240: 15, TRUE, TRUE, 'h', "5-7",
! 1241: {ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, TURNABLE, CANTELEPORT,
! 1242: CARRYPOTION, CARRYRING, CARRYSTICK},
! 1243: "wight", 3,
! 1244: 12,
! 1245: {10, 10, 6, 2000, 9, -2, HPT("9d8"),
! 1246: "1d3/1d3/4d4"}},
! 1247: {"glabrezu",
! 1248: 25, TRUE, FALSE, 'G', "8-10",
! 1249: {ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, TURNABLE, CANTELEPORT,
! 1250: CARRYSCROLL, CARRYPOTION, CARRYGOLD},
! 1251: "wraith", 3,
! 1252: 14,
! 1253: {10, 10, 6, 2400, 10, -4, HPT("10d8"),
! 1254: "2d6/2d6/1d3/1d3/1d4+1"}},
! 1255: {"bone devil",
! 1256: 0, TRUE, TRUE, 'b', "11-12",
! 1257: {ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, CANSURPRISE, CANCHILL,
! 1258: TURNABLE, NOFIRE, NOCOLD, CANTELEPORT},
! 1259: "ghast", 3,
! 1260: 12,
! 1261: {10, 10, 6, 2800, 9, -1, HPT("9d8"),
! 1262: "2d4"}},
! 1263: {"white pudding",
! 1264: 30, TRUE, FALSE, 'w', "0",
! 1265: {ISMEAN, CANDISSOLVE, NOCOLD, BOLTDIVIDE, BLOWDIVIDE,
! 1266: ISSCAVENGE, NOSTAB, CARRYRING, CARRYSCROLL,
! 1267: CARRYPOTION},
! 1268: 0, 0,
! 1269: 14,
! 1270: {10, 10, 6, 2200, 9, 8, HPT("10d8"),
! 1271: "7d4"}},
! 1272: {"vampire",
! 1273: 20, TRUE, TRUE, 'v', "15-16",
! 1274: {ISMEAN, ISREGEN, CANSUCK, ISUNDEAD, TURNABLE, CARRYMISC},
! 1275: 0, 0,
! 1276: 12,
! 1277: {20, 10, 6, 3800, 8, 1, HPT("8d8+3"),
! 1278: "1d6+4"}},
! 1279: {"ghost",
! 1280: 20, TRUE, FALSE, 'g', "13-14",
! 1281: {ISMEAN, CANFRIGHTEN, CANAGE, ISUNDEAD, TURNABLE, CARRYMISC,
! 1282: CMAGICHIT, CANINWALL},
! 1283: 0, 0,
! 1284: 10,
! 1285: {13, 10, 5, 5000, 12, 0, HPT("10d8"),
! 1286: "1d12"}},
! 1287: {"intellect devourer",
! 1288: 0, TRUE, FALSE, 'D', "11-12",
! 1289: {ISMEAN, TAKEINTEL, CMAGICHIT, HALFDAMAGE, CANSURPRISE, NOFIRE,
! 1290: NOCOLD},
! 1291: 0, 0,
! 1292: 9,
! 1293: {10, 10, 4, 5000, 7, 4, HPT("6d8+6"),
! 1294: "1d4/1d4/1d4/1d4"}},
! 1295: {"ice devil",
! 1296: 30, TRUE, FALSE, 'I', "13-14",
! 1297: {ISMEAN, CANSEE, ISREGEN, CANFRIGHTEN, CANSUMMON, CANBICE,
! 1298: NOCOLD, NOFIRE, TOUCHSLOW, CANTELEPORT, CARRYSCROLL, CARRYRING,
! 1299: CARRYSTICK},
! 1300: "bone devil", 2,
! 1301: 16,
! 1302: {20, 10, 6, 4400, 11, -4, HPT("11d8"),
! 1303: "1d4/1d4/2d4/3d4"}},
! 1304: {"purple worm",
! 1305: 70, TRUE, TRUE, 'p', "0",
! 1306: {ISMEAN, CANPOISON, CANINWALL, CANTUNNEL, CARRYFOOD, CARRYGOLD},
! 1307: 0, 0,
! 1308: 20,
! 1309: {10, 10, 6, 4900, 15, 6, HPT("15d8"),
! 1310: "2d12/2d4"}},
! 1311: {"ancient brass dragon",
! 1312: 70, TRUE, FALSE, 'r', "13-14",
! 1313: {CANBSGAS, CANBFGAS, ISGREED, CANSEE, NOSLEEP, NOFEAR,
! 1314: CARRYGOLD, CARRYRING},
! 1315: 0, 0,
! 1316: 50,
! 1317: {10, 10, 6, 10000, 8, 2, HPT("0d8+64"),
! 1318: "1d4/1d4/4d4"}},
! 1319: {"pit fiend",
! 1320: 100, TRUE, TRUE, 'f', "15-16",
! 1321: {ISMEAN, CANSEE, BMAGICHIT, CANFRIGHTEN, CANHOLD, CANSUMMON,
! 1322: CANBFIRE, NOFIRE, CANTELEPORT, CARRYSTICK, HASFIRE, ISFLY},
! 1323: "barbed devil", 3,
! 1324: 18,
! 1325: {22, 10, 6, 10000, 13, -3, HPT("13d8"),
! 1326: "1d4+4/1d6+6"}},
! 1327: {"ancient white dragon",
! 1328: 70, TRUE, TRUE, 'W', "8-9",
! 1329: {ISMEAN, CANBICE, ISGREED, CANSEE, NOCOLD, CARRYGOLD,
! 1330: CARRYRING},
! 1331: 0, 0,
! 1332: 50,
! 1333: {10, 10, 6, 15000, 7, 3, HPT("0d8+56"),
! 1334: "1d4/1d4/2d8"}},
! 1335: {"ancient black dragon",
! 1336: 70, TRUE, TRUE, 'a', "8-10",
! 1337: {ISMEAN, CANBACID, NOACID, ISGREED, CANSEE, CARRYGOLD,
! 1338: CARRYSTICK},
! 1339: 0, 0,
! 1340: 50,
! 1341: {10, 10, 6, 20000, 8, 3, HPT("0d8+64"),
! 1342: "1d4/1d4/3d6"}},
! 1343: {"lich",
! 1344: 60, TRUE, TRUE, 'l', "19-20",
! 1345: {ISMEAN, CANDRAIN, CANSEE, CANPARALYZE, CANFRIGHTEN, MAGICHIT,
! 1346: ISUNDEAD, TURNABLE, NOBOLT, CANMISSILE, CANSUMMON, CARRYGOLD,
! 1347: CARRYSCROLL, CARRYPOTION, CARRYRING, CARRYSTICK},
! 1348: "specter", 2,
! 1349: 16,
! 1350: {10, 10, 6, 20000, 17, 0, HPT("11d8"),
! 1351: "1d10"}},
! 1352: {"titan",
! 1353: 80, TRUE, FALSE, 't', "17-20",
! 1354: {ISMEAN, ISSHADOW, CANSEE, CANMISSILE, CARRYRING, CARRYSTICK,
! 1355: CANTELEPORT},
! 1356: 0, 0,
! 1357: 30,
! 1358: {13, 10, 5, 20000, 19, -3, HPT("22d8"),
! 1359: "8d6"}},
! 1360: {"ancient copper dragon",
! 1361: 70, TRUE, FALSE, 'c', "13-14",
! 1362: {CANBACID, NOACID, CANBSLGAS, ISGREED, CANSEE, NOSLOW,
! 1363: CARRYGOLD, CARRYSTICK},
! 1364: 0, 0,
! 1365: 50,
! 1366: {10, 10, 6, 20000, 9, 1, HPT("0d8+72"),
! 1367: "1d4/1d4/5d4"}},
! 1368: {"ancient green dragon",
! 1369: 50, TRUE, TRUE, 'E', "10-12",
! 1370: {ISMEAN, CANBGAS, ISGREED, CANSEE, NOGAS, CARRYGOLD,
! 1371: CARRYRING, CARRYSTICK},
! 1372: 0, 0,
! 1373: 50,
! 1374: {10, 10, 6, 20000, 9, 2, HPT("0d8+72"),
! 1375: "1d6/1d6/2d10"}},
! 1376: {"ancient bronze dragon",
! 1377: 50, TRUE, FALSE, 'L', "15-16",
! 1378: {CANBCGAS, CANBBOLT, CANBFGAS, ISGREED, CANSEE, NOFEAR, NOBOLT,
! 1379: ISCLEAR, CARRYGOLD, CARRYRING, CARRYSTICK},
! 1380: 0, 0,
! 1381: 50,
! 1382: {10, 10, 6, 20000, 10, 0, HPT("0d8+80"),
! 1383: "1d6/1d6/4d6"}},
! 1384: {"ancient blue dragon",
! 1385: 50, TRUE, TRUE, 'u', "12-14",
! 1386: {ISMEAN, CANBBOLT, ISGREED, CANSEE, NOBOLT, CARRYGOLD,
! 1387: CARRYSCROLL, CARRYRING, CARRYSTICK},
! 1388: 0, 0,
! 1389: 50,
! 1390: {10, 10, 6, 20000, 10, 2, HPT("0d8+80"),
! 1391: "1d6/1d6/3d8"}},
! 1392: {"ancient silver dragon",
! 1393: 40, TRUE, FALSE, 'S', "15-16",
! 1394: {CANBICE, CANBPGAS, ISGREED, CANSEE, CANMISSILE, NOCOLD,
! 1395: NOPARALYZE, CARRYGOLD, CARRYSCROLL, CARRYRING, CARRYSTICK},
! 1396: 0, 0,
! 1397: 50,
! 1398: {10, 10, 6, 20000, 11, -1, HPT("0d8+88"),
! 1399: "1d6/1d6/5d6"}},
! 1400: {"frost giant",
! 1401: 50, TRUE, TRUE, 'F', "5-10",
! 1402: {ISMEAN, NOCOLD, CARRYGOLD, AREMANY},
! 1403: 0, 0,
! 1404: 40,
! 1405: {25, 10, 5, 20000, 15, 4, HPT("10d8+4"),
! 1406: "4d6"}},
! 1407: {"ancient red dragon",
! 1408: 40, TRUE, TRUE, 'R', "15-16",
! 1409: {ISMEAN, CANBFIRE, ISGREED, CANSEE, NOFIRE, CARRYGOLD,
! 1410: CARRYPOTION, CARRYRING, CARRYSTICK},
! 1411: 0, 0,
! 1412: 50,
! 1413: {10, 10, 6, 20000, 11, -1, HPT("0d8+88"),
! 1414: "1d8/1d8/3d10"}},
! 1415: {"ancient gold dragon",
! 1416: 50, TRUE, FALSE, 'G', "17-18",
! 1417: {CANBFIRE, CANBGAS, ISGREED, CANSEE, CANMISSILE, NOFIRE, NOGAS,
! 1418: CARRYGOLD, CARRYPOTION, CARRYRING, CARRYSTICK, CANTELEPORT},
! 1419: 0, 0,
! 1420: 50,
! 1421: {10, 10, 6, 20000, 12, -2, HPT("0d8+96"),
! 1422: "1d8/1d8/6d6"}},
! 1423: {"fire giant",
! 1424: 30, TRUE, TRUE, 'f', "6-10",
! 1425: {ISMEAN, CARRYGOLD, NOFIRE, AREMANY},
! 1426: 0, 0,
! 1427: 45,
! 1428: {27, 10, 5, 26000, 15, 4, HPT("11d8+5"),
! 1429: "5d6"}},
! 1430: {"storm giant",
! 1431: 30, TRUE, TRUE, 's', "8-10",
! 1432: {ISMEAN, NOBOLT, CANBBOLT, CARRYRING},
! 1433: 0, 0,
! 1434: 50,
! 1435: {30, 10, 5, 30000, 15, 2, HPT("15d8+8"),
! 1436: "7d6"}},
! 1437: {"dwarven thief (Musty Doit)",
! 1438: 50, TRUE, TRUE, 'm', "16",
! 1439: {ISMEAN, ISUNIQUE, ISINVIS, NOFIRE, NOGAS, NOSTAB, STEALGOLD,
! 1440: STEALMAGIC, CANPAIN, ISFLY, CARRYGOLD, CANSURPRISE, CANSEE,
! 1441: CARRYMDAGGER, CARRYMISC, CARRYPOTION, CANBSTAB, ISSCAVENGE,
! 1442: NODETECT},
! 1443: 0, 0,
! 1444: 0,
! 1445: {9, 18, 8, 300000, 22, -5, HPT("0d8+95"),
! 1446: "6d4+70/6d4+70"}},
! 1447: {"demon prince (Jubilex)",
! 1448: 100, TRUE, FALSE, 'J', "18",
! 1449: {ISMEAN, ISUNIQUE, CANFRIGHTEN, ISREGEN, BMAGICHIT, ISSHADOW,
! 1450: CANHOLD, CANDISEASE, CANSUMMON, CANSEE, CANROT, CANINFEST,
! 1451: CANRUST, NOSTAB, CANTELEPORT, CARRYMISC, CANSMELL, CANSTINK,
! 1452: NOFIRE},
! 1453: "black pudding", 4,
! 1454: 0,
! 1455: {18, 18, 5, 100000, 20, -7, HPT("0d8+88"),
! 1456: "4d10"}},
! 1457: {"arch devil (Geryon)",
! 1458: 100, TRUE, FALSE, 'g', "16",
! 1459: {ISMEAN, ISUNIQUE, BMAGICHIT, CANSEE, ISSHADOW, CANFRIGHTEN,
! 1460: CANHUH, CANPOISON, CANSUMMON, NOFIRE, CANTELEPORT, NOFIRE,
! 1461: CARRYMISC, CARRYHORN},
! 1462: "ice devil", 5,
! 1463: 0,
! 1464: {18, 18, 5, 110000, 30, -3, HPT("0d8+133"),
! 1465: "3d6/3d6/2d4"}},
! 1466: {"arch devil (Dispater)",
! 1467: 100, TRUE, FALSE, 'd', "18",
! 1468: {ISMEAN, ISUNIQUE, CANSEE, CANFRIGHTEN, CANHUH, BMAGICHIT,
! 1469: CANSUMMON, CARRYSTICK, NOFIRE, CANTELEPORT, CARRYMISC},
! 1470: "ghost", 9,
! 1471: 0,
! 1472: {18, 18, 5, 120000, 36, -2, HPT("0d8+144"),
! 1473: "4d6"}},
! 1474: {"demon prince (Yeenoghu)",
! 1475: 100, TRUE, FALSE, 'Y', "16",
! 1476: {ISMEAN, ISREGEN, ISUNIQUE, MAGICHIT, CANSEE, ISSHADOW, CANHOLD,
! 1477: CARRYFLAIL, CANFRIGHTEN, CANPARALYZE, CANSUMMON, CANHUH,
! 1478: CANMISSILE, CANTELEPORT, CARRYMISC, NOFIRE},
! 1479: "lich", 5,
! 1480: 0,
! 1481: {18, 18, 5, 130000, 23, -5, HPT("0d8+100"),
! 1482: "3d6/3d6"}},
! 1483: {"witch (Emori)",
! 1484: 50, TRUE, TRUE, 'w', "18",
! 1485: {ISMEAN, CANMISSILE, ISINVIS, CANBBOLT, CANBFIRE, CANBICE,
! 1486: CANSEE, CANSUMMON, ISUNIQUE, CANSNORE, ISFLY, TAKEINTEL,
! 1487: CANDANCE, CANDISEASE, NOBOLT, NOCOLD, NOFIRE, CARRYCLOAK,
! 1488: ISCLEAR, CARRYSCROLL, CARRYSTICK, CANTELEPORT, CANSLOW},
! 1489: "shambling mound", 7,
! 1490: 0,
! 1491: {21, 12, 6, 140000, 25, 0, HPT("0d8+102"),
! 1492: "1d4/1d4"}},
! 1493: {"cleric of Thoth (Heil)",
! 1494: 100, TRUE, TRUE, 'h', "16",
! 1495: {ISMEAN, CANSEE, NOFEAR, ISREGEN, CANHOLD, CANBFIRE, ISUNIQUE,
! 1496: DOUBLEDRAIN, CANSUMMON, NOFIRE, TOUCHFEAR, CANDISEASE, CANSUCK,
! 1497: CANSEE, TAKEWISDOM, CARRYANKH, CARRYRING, ISINVIS, ISFLY},
! 1498: "vampire", 9,
! 1499: 0,
! 1500: {25, 15, 6, 150000, 25, -8, HPT("0d8+116"),
! 1501: "0d6+11"}},
! 1502: {"magician (Tsoming Zen)",
! 1503: 80, TRUE, FALSE, 'z', "18",
! 1504: {ISMEAN, ISUNIQUE, ISINVIS, ISREGEN, CANBFIRE, CANBICE,
! 1505: CANBBOLT, CANMISSILE, NOFIRE, CANHOLD, CANFRIGHTEN, CANDISEASE,
! 1506: CANPAIN, CANSUMMON, CANSEE, ISFLY, CANTELEPORT,
! 1507: CARRYSTAFF, CARRYSTICK, NOSLOW, NOBOLT, NOCOLD},
! 1508: "ancient black dragon", 5,
! 1509: 0,
! 1510: {18, 16, 6, 160000, 21, -4, HPT("0d8+125"),
! 1511: "2d4+1/2d4+1/2d4+1/2d4+1"}},
! 1512: {"poet (Brian)",
! 1513: 80, TRUE, TRUE, 'p', "16",
! 1514: {ISMEAN, ISUNIQUE, STEALGOLD, ISSHADOW, CANSUMMON, ISREGEN,
! 1515: CANDISEASE, NOCOLD, NOBOLT, NOFIRE, NOFEAR, CANTUNNEL, CANSEE,
! 1516: CANINWALL, ISCLEAR, CARRYMANDOLIN, CARRYPOTION, CARRYRING},
! 1517: "umber hulk", 6,
! 1518: 0,
! 1519: {19, 18, 5, 170000, 20, -2, HPT("0d8+156"),
! 1520: "8d8+48/4d4+36"}},
! 1521: {"lesser god (Hruggek)",
! 1522: 100, TRUE, FALSE, 'H', "17",
! 1523: {ISMEAN, CANSEE, ISUNIQUE, CANSUMMON, ISREGEN, CANFRIGHTEN,
! 1524: CANTELEPORT, CARRYMISC, CARRYMSTAR, CANSMELL, CANBLINK},
! 1525: "purple worm", 6,
! 1526: 0,
! 1527: {19, 18, 5, 180000, 25, 0, HPT("0d8+221"),
! 1528: "2d8/2d8"}},
! 1529: {"lesser god (Kurtulmak)",
! 1530: 100, TRUE, TRUE, 'K', "19",
! 1531: {ISMEAN, CANFRIGHTEN, CANPOISON, CANSEE, ISUNIQUE, CANSUMMON,
! 1532: CANTELEPORT, CARRYMISC, CANBLINK},
! 1533: "lich", 3,
! 1534: 0,
! 1535: {19, 18, 5, 190000, 27, 0, HPT("0d8+219"),
! 1536: "2d12/1d6"}},
! 1537: {"demigod (Vaprak \"The Destroyer\")",
! 1538: 100, TRUE, TRUE, 'v', "18",
! 1539: {ISMEAN, ISUNIQUE, ISREGEN, MAGICHIT, CANSEE, CANSUMMON,
! 1540: CANTELEPORT, CARRYMISC, CANSMELL},
! 1541: "troll", 9,
! 1542: 0,
! 1543: {18, 18, 5, 200000, 26, 0, HPT("0d8+198"),
! 1544: "2d10/2d10/1d12"}},
! 1545: {"hero (Aklad)",
! 1546: 100, TRUE, FALSE, 'k', "16",
! 1547: {ISMEAN, ISUNIQUE, CANSUMMON, ISREGEN, NOCOLD, NOBOLT, NOFIRE,
! 1548: NOPARALYZE, NOFEAR, CANSEE, ISCLEAR, CARRYAXE, CARRYRING,
! 1549: CARRYMISC, CANBLINK},
! 1550: "ancient green dragon", 4,
! 1551: 0,
! 1552: {25, 16, 4, 210000, 25, -10, HPT("0d8+196"),
! 1553: "2d8+23/2d8+23/1d6+19/1d6+19"}},
! 1554: {"magician/thief (Nagrom)",
! 1555: 100, TRUE, TRUE, 'N', "19",
! 1556: {ISMEAN, ISUNIQUE, STEALMAGIC, ISINVIS, CANSUMMON, ISREGEN,
! 1557: CANMISSILE, CANSEE, CARRYQUILL, CARRYSCROLL, CARRYRING, ISFLY,
! 1558: CANBSTAB, CANBFIRE, CANBBOLT, CANBICE, NOCOLD, NOBOLT, NOFIRE,
! 1559: CANSURPRISE, NODETECT, CANTELEPORT, CANSLOW,
! 1560: CARRYSTICK},
! 1561: "ancient blue dragon", 5,
! 1562: 0,
! 1563: {18, 18, 8, 220000, 26, -2, HPT("0d8+150"),
! 1564: "1d10+3/1d4+3"}},
! 1565: {"platinum dragon (Bahamut)",
! 1566: 100, TRUE, FALSE, 'P', "20",
! 1567: {ISUNIQUE, CANBICE, CANBGAS, CANBBOLT, CANBRANDOM, CANSEE,
! 1568: NOCOLD, NOBOLT, NOGAS, NOFIRE, NOFEAR, NOSLEEP, NOSLOW,
! 1569: NOPARALYZE, CANMISSILE, CANSONIC, CANFRIGHTEN, CANSUMMON,
! 1570: CARRYMISC, CANTELEPORT, ISFLY},
! 1571: "ancient gold dragon", 4,
! 1572: 0,
! 1573: {18, 18, 5, 230000, 38, -3, HPT("0d8+168"),
! 1574: "2d6/2d6/6d8"}},
! 1575: {"arch devil (Baalzebul)",
! 1576: 100, TRUE, FALSE, 'B', "18",
! 1577: {ISMEAN, ISSHADOW, ISUNIQUE, BMAGICHIT, CANHOLD, CANPOISON,
! 1578: CANFRIGHTEN, CANHUH, CANSUMMON, CANSEE, NOFIRE, CANTELEPORT,
! 1579: CARRYMISC, CARRYSTICK, CANDRAIN},
! 1580: "ice devil", 9,
! 1581: 0,
! 1582: {18, 18, 5, 240000, 37, -5, HPT("0d8+166"),
! 1583: "2d6"}},
! 1584: {"chromatic dragon (Tiamat)",
! 1585: 100, TRUE, FALSE, 'C', "18",
! 1586: {ISMEAN, ISUNIQUE, CANBFIRE, CANBACID, CANBBOLT, CANBICE,
! 1587: CANBGAS, CANBRANDOM, CANSEE, NOFIRE, NOBOLT, NOCOLD, NOACID,
! 1588: NOGAS, CANSUMMON, CANMISSILE, CANFRIGHTEN, CARRYMISC,
! 1589: CARRYRING, CANTELEPORT, ISFLY},
! 1590: "ancient red dragon", 6,
! 1591: 0,
! 1592: {18, 18, 5, 250000, 29, 0, HPT("0d8+128"),
! 1593: "2d8/3d6/2d10/3d8/3d10/1d6"}},
! 1594: {"demon prince (Orcus)",
! 1595: 100, TRUE, FALSE, 'O', "20",
! 1596: {ISMEAN, ISUNIQUE, BMAGICHIT, CANPOISON, CANFRIGHTEN, CANSEE,
! 1597: CANBBOLT, CANSUMMON, NOBOLT, CANTELEPORT, CARRYWAND, NOFIRE,
! 1598: CARRYMISC, ISFLY, CARRYSTICK},
! 1599: "vampire", 9,
! 1600: 0,
! 1601: {18, 18, 5, 260000, 27, -6, HPT("0d8+120"),
! 1602: "1d10+3/2d4"}},
! 1603: {"arch devil (Asmodeus)",
! 1604: 100, TRUE, FALSE, 'A', "20",
! 1605: {ISMEAN, ISUNIQUE, CANSEE, ISSHADOW, CANHOLD, BMAGICHIT,
! 1606: CANFRIGHTEN, CANHUH, TOUCHSLOW, CANSUMMON, NOFIRE,
! 1607: CANTELEPORT, CARRYROD, CARRYMISC, CARRYSTICK, CANDRAIN},
! 1608: "pit fiend", 5,
! 1609: 0,
! 1610: {18, 18, 5, 270000, 45, -7, HPT("0d8+199"),
! 1611: "1d10+4"}},
! 1612: {"demon prince (Demogorgon)",
! 1613: 100, TRUE, FALSE, 'D', "20",
! 1614: {ISMEAN, CANHUH, BMAGICHIT, DOUBLEDRAIN, CANINFEST, CANSEE,
! 1615: CANFRIGHTEN, ISUNIQUE, CANSUMMON, CANROT, CANTELEPORT, NOFIRE,
! 1616: CANDISEASE, CARRYMISC, CANSUCK, CARRYSTICK},
! 1617: "pit fiend", 9,
! 1618: 0,
! 1619: {18, 18, 5, 280000, 45, -8, HPT("0d8+200"),
! 1620: "1d6/1d6"}},
! 1621: {"greater god (Maglubiyet)",
! 1622: 100, TRUE, FALSE, 'M', "19",
! 1623: {ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON,
! 1624: CANTELEPORT, CARRYMISC, CANFRIGHTEN, CARRYSTICK},
! 1625: "lich", 6,
! 1626: 0,
! 1627: {19, 18, 5, 290000, 45, -1, HPT("0d8+350"),
! 1628: "2d10/2d10"}},
! 1629: {"greater god (Gruumsh)",
! 1630: 100, TRUE, FALSE, 'G', "19",
! 1631: {ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON,
! 1632: CANTELEPORT, CARRYMISC, CANFRIGHTEN, CARRYSTICK},
! 1633: "lich", 9,
! 1634: 0,
! 1635: {19, 18, 5, 300000, 45, -1, HPT("0d8+350"),
! 1636: "3d10/3d10"}},
! 1637: {"lesser god (Thrym)",
! 1638: 100, TRUE, FALSE, 'T', "16",
! 1639: {ISMEAN, NOCOLD, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE,
! 1640: CANSUMMON, CARRYMISC, CANTELEPORT, CANFRIGHTEN, CARRYSTICK},
! 1641: "frost giant", 9,
! 1642: 0,
! 1643: {25, 18, 5, 310000, 45, -2, HPT("0d8+360"),
! 1644: "4d10/4d10"}},
! 1645: {"lesser god (Surtur)",
! 1646: 100, TRUE, FALSE, 't', "19",
! 1647: {ISMEAN, NOFIRE, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE,
! 1648: CANFRIGHTEN, CANSUMMON, CANMISSILE, CANTELEPORT, CARRYMISC,
! 1649: CARRYSTICK, CARRYFOOD, CARRYSURTURRING},
! 1650: "fire giant", 9,
! 1651: 0,
! 1652: {25, 18, 5, 320000, 45, -2, HPT("0d8+380"),
! 1653: "5d10/5d10"}},
! 1654: {"lesser god (Skoraeus Stonebones)",
! 1655: 100, TRUE, FALSE, 'b', "19",
! 1656: {ISMEAN, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, CANSUMMON, ISFLY,
! 1657: CANMISSILE, CANINWALL, CANTELEPORT, CARRYMISC, CARRYSTICK,
! 1658: CANFRIGHTEN, CARRYBAMULET},
! 1659: "storm giant", 9,
! 1660: 0,
! 1661: {25, 25, 6, 330000, 45, -1, HPT("0d8+380"),
! 1662: "6d10/6d10"}},
! 1663: {"ruler of greater titans (Yendor)",
! 1664: 100, TRUE, TRUE, 'y', "25",
! 1665: {ISMEAN, CANINWALL, ISUNIQUE, ISREGEN, CMAGICHIT,ISFLY,
! 1666: CANSUMMON, CANMISSILE, CANFRIGHTEN, CANBFIRE, NOFIRE,
! 1667: CANHOLD, CARRYYAMULET, CANSEE, CANDANCE, ISSHADOW,
! 1668: CANTELEPORT, CARRYMISC, CARRYRING, CARRYSTICK},
! 1669: "titan", 15,
! 1670: 0,
! 1671: {25, 25, 6, 340000, 45, -6, HPT("0d8+400"),
! 1672: "7d10/7d10"}},
! 1673: {"the creator of liches (Vecna)",
! 1674: 100, TRUE, TRUE, 'V', "25",
! 1675: {ISMEAN, CANINWALL, ISUNIQUE, ISREGEN, CMAGICHIT, CANSNORE,
! 1676: CANSUMMON, CANMISSILE, CANFRIGHTEN, CANBFIRE, NOFIRE, ISFLY,
! 1677: CANHOLD, CARRYEYE, CANSEE, CANDANCE, ISINVIS, HALFDAMAGE,
! 1678: CANTELEPORT, CARRYMISC, CARRYRING, CARRYSTICK, LOOKSTONE,
! 1679: CANSLOW, CANBLIND},
! 1680: "lich", 15,
! 1681: 0,
! 1682: {25, 25, 6, 350000, 47, -8, HPT("0d8+450"),
! 1683: "6d10/6d10"}},
! 1684: {"quartermaster",
! 1685: 0, FALSE, TRUE, 'q', "18",
! 1686: {CANSELL, ISCLEAR, CANTELEPORT, ISFLY, CANSEE, STEALMAGIC,
! 1687: NOFEAR, CANBSTAB},
! 1688: 0, 0,
! 1689: 50,
! 1690: {25, 18, 12, 20, 1, -4, HPT("1d8+1"),
! 1691: "1d10"}},
! 1692: };
CVSweb