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