comparison arogue5/rogue.c @ 63:0ed67132cf10

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