view arogue5/rogue.c @ 300:0250220d8cdd

Fix an assortment of compiler warnings. A few potential bugs were removed in the process. Much code cleanup remains to be done.
author John "Elwin" Edwards
date Fri, 22 Nov 2019 21:18:27 -0500
parents d3968e9cb98d
children 827441d05b3e
line wrap: on
line source

/*
 * global variable declaration
 *
 * Advanced Rogue
 * Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T
 * All rights reserved.
 *
 * Based on "Rogue: Exploring the Dungeons of Doom"
 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
 * All rights reserved.
 *
 * See the file LICENSE.TXT for full copyright and licensing information.
 */

#include <ctype.h>
#include "curses.h"
#include "rogue.h"

/*
 * Now all the global variables
 */
struct trap traps[MAXTRAPS];
struct room rooms[MAXROOMS];		/* One for each room -- A level */
struct room *oldrp;			/* Roomin(&player.t_oldpos) */
struct thing player;			/* The rogue */
struct object *cur_armor;		/* What a well dresssed rogue wears */
struct object *cur_ring[NUM_FINGERS];	/* Which rings are being worn */
struct object  *cur_misc[NUM_MM];	/* which MM's are in use */
int cur_relic[MAXRELIC];		/* Currently used relics */
struct linked_list *lvl_obj = NULL; 
struct linked_list *mlist = NULL;
struct linked_list *tlist = NULL;	/* list of monsters fallen down traps */
struct linked_list *monst_dead = NULL;	/* monster killed by monster	*/
struct object *cur_weapon = NULL;
int char_type = -1;			/* what type of character is player */
int foodlev = 1;			/* how fast he eats food */
int ntraps;				/* Number of traps on this level */
int trader = 0;				/* no. of purchases */
int curprice = -1;			/* current price of item */
int no_move;				/* Number of turns held in place */
int seed;				/* Random number seed */
int dnum;				/* Dungeon number */
int max_level;				/* Deepest player has gone ever */
int cur_max;				/* Deepest player has gone currently */
int lost_dext;				/* amount of lost dexterity */
int mpos = 0;
int no_command = 0;
int level = 1;
int purse = 0;
int inpack = 0;
int total = 0;
int no_food = 0;			/* how long has he gone with no food */
int foods_this_level = 0;		/* foods made per level */
int count = 0;
int food_left = HUNGERTIME;
int group = 1;
int hungry_state = F_OKAY;
int infest_dam=0;
int lost_str=0;
int lastscore = -1;
int hold_count = 0;
int trap_tries = 0;
int pray_time = 0;
int spell_power = 0;
int turns = 0;				/* Number of turns player has taken */
int quest_item = 0;			/* Item player is looking for */
char nfloors = -1;			/* Number of floors in this dungeon */
char curpurch[LINELEN*2];		/* name of item ready to buy */
char PLAYER = VPLAYER;			/* what the player looks like */
char take;				/* Thing the rogue is taking */
char prbuf[LINELEN*2];			/* Buffer for sprintfs */
char outbuf[BUFSIZ];			/* Output buffer for stdout */
char runch;				/* Direction player is running */
char *s_names[MAXSCROLLS];		/* Names of the scrolls */
char *p_colors[MAXPOTIONS];		/* Colors of the potions */
char *r_stones[MAXRINGS];		/* Stone settings of the rings */
char *ws_made[MAXSTICKS];		/* What sticks are made of */
char whoami[LINELEN];			/* Name of player */
char fruit[LINELEN];			/* Favorite fruit */
char huh[LINELEN];			/* The last message printed */
char *s_guess[MAXSCROLLS];		/* Players guess at what scroll is */
char *p_guess[MAXPOTIONS];		/* Players guess at what potion is */
char *r_guess[MAXRINGS];		/* Players guess at what ring is */
char *ws_guess[MAXSTICKS];		/* Players guess at what wand is */
char *m_guess[MAXMM];			/* Players guess at what MM is */
char *ws_type[MAXSTICKS];		/* Is it a wand or a staff */
char file_name[256];			/* Save file name */
char score_file[LINELEN];		/* Score file name */
char home[LINELEN];			/* User's home directory */
WINDOW *cw;				/* Window that the player sees */
WINDOW *hw;				/* Used for the help command */
WINDOW *mw;				/* Used to store mosnters */
WINDOW *msgw;				/* Used to display messages */
bool pool_teleport = FALSE;		/* just teleported from a pool */
bool inwhgt = FALSE;			/* true if from wghtchk() */
bool after;				/* True if we want after daemons */
bool waswizard;				/* Was a wizard sometime */
bool s_know[MAXSCROLLS];		/* Does he know what a scroll does */
bool p_know[MAXPOTIONS];		/* Does he know what a potion does */
bool r_know[MAXRINGS];			/* Does he know what a ring does */
bool ws_know[MAXSTICKS];		/* Does he know what a stick does */
bool m_know[MAXMM];			/* Does he know what a MM does */
bool playing = TRUE; 
bool running = FALSE; 
bool wizard = FALSE;
bool notify = TRUE; 
bool fight_flush = FALSE; 
bool terse = FALSE; 
bool auto_pickup = TRUE; 
bool door_stop = FALSE;
bool jump = FALSE; 
bool slow_invent = FALSE; 
bool firstmove = FALSE; 
bool askme = TRUE;
bool in_shell = FALSE; 
bool daytime = TRUE;
bool use_savedir = FALSE;
coord delta;				/* Change indicated to get_dir() */
LEVTYPE levtype;			/* type of level i'm on */

char *nothing  =	"Nothing seems to happen.";
char *spacemsg =	"--Press space to continue--";
char *morestr  =	"-- More --";
char *retstr   =	"[Press return to continue]";

FILE *scoreboard = NULL;		/* The scorefile */
FILE *logfile = NULL;

/*
 * NOTE: the ordering of the points in this array is critical. They MUST
 *	 be listed in the following sequence:
 *
 *		7   4   6
 *		1   0   2
 *		5   3   8
 */

coord grid[9] = {{0,0},
		 { 0,-1}, { 0, 1}, {-1, 0}, { 1, 0},
		 {-1,-1}, { 1, 1}, { 1,-1}, {-1, 1}
		};

struct death_type deaths[DEATHNUM] = {
    { D_ARROW,		"an arrow"},
    { D_DART,		"a dart"},
    { D_BOLT,		"a bolt"},
    { D_POISON,		"poison"},
    { D_POTION,		"a cursed potion"},
    { D_PETRIFY,	"petrification"},
    { D_SUFFOCATION,	"suffocation"},
    { D_INFESTATION,	"a parasite"},
    { D_DROWN,		"drowning"},
    { D_ROT,		"body rot"},
    { D_CONSTITUTION,	"poor health"},
    { D_STRENGTH,	"being too weak"},
    { D_SIGNAL,		"a bug"},
    { D_CHOKE,		"dust of choking"},
    { D_STRANGLE,	"strangulation"},
    { D_FALL,		"a fall"},
    { D_RELIC,		"an artifact's wrath"},
};


/*
 * weapons and their attributes
 */
struct init_weps weaps[MAXWEAPONS] = {
    { "mace",		"2d4",  "1d3", NONE,		ISMETAL, 100, 8 },
    { "long sword",	"1d12", "1d2", NONE,		ISMETAL, 60, 18 },
    { "short bow",	"1d1",  "1d1", NONE,		0, 40, 15 },
    { "arrow",		"1d1",  "1d6", BOW,		ISMANY|ISMISL, 5, 1 },
    { "dagger",		"1d6",  "1d4", NONE,		ISMETAL|ISMISL|ISMANY, 10, 2 },
    { "rock",		"1d2",  "1d4", SLING,		ISMANY|ISMISL, 5, 1 },
    { "two-handed sword","3d6",  "1d2", NONE,		ISMETAL, 250, 40 },
    { "sling",		"0d0",  "0d0", NONE,  		0, 5, 1 },
    { "dart",		"1d1",  "1d3", NONE,  		ISMANY|ISMISL, 5, 1 },
    { "crossbow",	"1d1",  "1d1", NONE,  		0, 100, 15 },
    { "crossbow bolt",	"1d2", "1d12", CROSSBOW,	ISMANY|ISMISL, 7, 1 },
    { "spear",		"1d6",  "1d8", NONE,		ISMETAL|ISMISL, 50, 8 },
    { "trident",	"3d4",  "1d4", NONE,		ISMETAL, 50, 20 },
    { "spetum",		"2d6",  "1d3", NONE,		ISMETAL, 50, 20 },
    { "bardiche",	"3d4",  "1d2", NONE,		ISMETAL, 125, 20 },
    { "pike",		"1d12", "1d8", NONE,		ISMETAL, 80, 18 },
    { "bastard sword",	"2d8",  "1d2", NONE,		ISMETAL, 100, 30 },
    { "halberd",	"2d6",  "1d3", NONE,		ISMETAL, 175, 10 },
    { "battle axe", 	"1d8",	"1d3", NONE,		ISMETAL, 80, 10 },
};

struct init_armor armors[MAXARMORS] = {
	{ "leather armor",		11,  8,  70, 100 },
	{ "ring mail",			22,  7,  50, 250 },
	{ "studded leather armor",	33,  7,  50, 200 },
	{ "scale mail",			45,  6,  70, 250 },
	{ "padded armor",		57,  6, 150, 150 },
	{ "chain mail",			69,  5, 100, 300 },
	{ "splint mail",		80,  4, 150, 350 },
	{ "banded mail",		90,  4, 150, 350 },
	{ "plate mail",		 	96,  3, 400, 400 },
	{ "plate armor",		100, 2, 650, 450 },
};

struct magic_item things[NUMTHINGS] = {
    { "potion",			260,   10 },	/* potion		*/
    { "scroll",			260,   30 },	/* scroll		*/
    { "food",			180,   20 },	/* food			*/
    { "weapon",			 80,	0 },	/* weapon		*/
    { "armor",			 80,	0 },	/* armor		*/
    { "ring",			 50,	5 },	/* ring			*/
    { "stick",			 60,	0 },	/* stick		*/
    { "miscellaneous magic",	 30,   50 },	/* miscellaneous magic	*/
    { "artifact",		  0,   10 },	/* artifact		*/
};

struct magic_item s_magic[MAXSCROLLS] = {
    { "monster confusion",	 60, 125, 0, 0 },
    { "magic mapping",		 50, 150, 0, 0 },
    { "light",			 80, 100, 21, 15 },
    { "hold monster",		 30, 200, 33, 20 },
    { "sleep",			 30, 150, 20, 0 },
    { "enchantment",		180, 200, 9, 9 },
    { "identify",		200, 100, 0, 25 },
    { "scare monster",		 40, 250, 27, 21 },
    { "gold detection",		 30, 110, 0, 0 },
    { "teleportation",		 60, 165, 10, 20 },
    { "create monster",		 30,  75, 0, 0 },
    { "remove curse",		 70, 120, 9, 15 },
    { "petrification",		 10, 185, 0, 0 },
    { "genocide",		 10, 300, 0, 0 },
    { "cure disease",		 80, 160, 0, 0 },
    { "acquirement",		 10, 400, 0, 0 },
    { "protection",		 30, 190, 20, 0 },
};

struct magic_item p_magic[MAXPOTIONS] = {
    { "clear thought",		 60, 180, 27, 10 },
    { "gain ability",		160, 210, 15, 15 },
    { "see invisible",		 60, 150, 25, 15 },
    { "healing",		170, 130, 27, 27 },
    { "monster detection",	 60, 120, 0, 0 },
    { "magic detection",	 60, 105, 0, 0 },
    { "raise level",		 20, 350, 11, 10 },
    { "haste self",		100, 180, 30, 5 },
    { "restore abilities",	160, 140, 0, 0 },
    { "phasing",		 50, 210, 21, 20 },
    { "invisibility",		 50, 230, 0, 15 },
    { "flying",			 50, 130, 0, 20 },
};

struct magic_item r_magic[MAXRINGS] = {
    { "protection",		 50, 200, 33, 25 },
    { "add strength",		 60, 200, 33, 25 },
    { "sustain ability",	 50, 500, 0, 0 },
    { "searching",		 60, 400, 0, 0 },
    { "extra sight",		 40, 350, 0, 0 },
    { "alertness",		 40, 380, 0, 0 },
    { "aggravate monster",	 30, 100, 100, 0 },
    { "dexterity",		 60, 220, 33, 25 },
    { "increase damage",	 60, 220, 33, 25 },
    { "regeneration",		 40, 600, 0, 0 },
    { "slow digestion",		 40, 240, 15, 15 },
    { "teleportation",		 20, 100, 100, 0 },
    { "stealth",		 40, 300, 0, 0 },
    { "add intelligence",	 60, 240, 33, 25 },
    { "increase wisdom",	 60, 220, 33, 25 },
    { "sustain health",		 80, 500, 0,  0 },
    { "burden",			 20, 100, 100, 0 },
    { "illumination",		 30, 520, 0, 0 },
    { "delusion",		 20, 100, 75, 0 },
    { "fear",			 20, 100, 100, 0},
    { "heroism",		 30, 390, 0, 0 },
    { "fire resistance",	 40, 400, 0, 0 },
    { "warmth",	 		 40, 400, 0, 0 },
    { "vampiric regeneration",	 10,1000, 0, 0},
};

struct magic_item ws_magic[MAXSTICKS] = {
    { "light",			 90, 120, 20, 20 },
    { "striking",		 60, 115, 0,  0 },
    { "lightning",		 35, 200, 0,  0 },
    { "fire",			 35, 200, 0,  0 },
    { "cold",			 35, 200, 0,  0 },
    { "polymorph",		 80, 150, 0,  0 },
    { "magic missile",		 80, 170, 0,  0 },
    { "slow monster",		 80, 220, 25, 20 },
    { "drain life",		 90, 210, 20, 0 },
    { "charging",		 80, 400, 0,  0 },
    { "teleport monster",	 90, 140, 25, 20 },
    { "cancellation",		 40, 130, 0,  0 },
    { "confuse monster",   	 35, 100, 15,  0},
    { "disintegration",	  	 10, 300, 33, 0},
    { "petrification",		 10, 300, 0,  0},
    { "paralyze monster",	 30, 180, 15,  0},
    { "degenerate monster",	 30, 250, 30, 0},
    { "curing",			 10, 250, 25, 0},
    { "wonder",			 50, 110,  0, 0},
    { "fear",			 30, 180,  0, 0},
};

/*
 * WARNING: unique miscellaneous magic items must be put at the end
 *	    of this list. They MUST be the last items. The function
 *	    create_obj() in wizard.c depends on it.
 */
struct magic_item m_magic[MAXMM] = {
    { "alchemy jug",	 	  40,   240,  0, 0},
    { "beaker of potions",	  60,   300,  0, 0},
    { "book of spells",		  60,   300,  0, 0},
    { "boots of elvenkind",	  50,   500,  0, 0},
    { "bracers of defense",	 140,   100, 15, 0},
    { "chime of opening",	  50,   250,  0, 0},
    { "chime of hunger",	  50,   100,100, 0},
    { "cloak of displacement",	  60,   500,  0, 0},
    { "cloak of protection",	  70,   200, 15, 0},
    { "drums of panic",		  40,   350,  0, 0},
    { "dust of disappearance",	  40,   300,  0, 0},
    { "dust of choking",	  30,   100,100, 0},
    { "gauntlets of dexterity",	  30,   600, 25, 0},
    { "gauntlets of ogre power",  30,   600, 25, 0},
    { "jewel of attacks",	  40,   150,100, 0},
    { "keoghtoms ointment",	  50,   200,  0, 0},
    { "robe of powerlessness",	  30,   100,100, 0},
    { "gauntlets of fumbling",	  30,   100,100, 0},
    { "necklace of adaptation",	  20,   500,  0, 0},
    { "necklace of strangulation",30,   110,100, 0},
    { "boots of dancing",	  30,	120,100, 0},
    { "book of skills",		  20,	650,  0, 0},
};


struct magic_item rel_magic[MAXRELIC] = {
    { "Daggers of Musty Doit",	   0, 50000,  0, 0},
    { "Cloak of Emori",		   0, 50000,  0, 0},
    { "Ankh of Heil",		   0, 50000,  0, 0},
    { "Staff of Ming",		   0, 50000,  0, 0},
    { "Wand of Orcus",		   0, 50000,  0, 0},
    { "Rod of Asmodeus",	   0, 50000,  0, 0},
    { "Amulet of Yendor",	   0, 50000,  0, 0},
    { "Mandolin of Brian",	   0, 50000,  0, 0},
    { "Horn of Geryon",		   0, 50000,  0, 0},
    { "Morning Star of Hruggek",   0, 50000,  0, 0},
    { "Flail of Yeenoghu",	   0, 50000,  0, 0},
};

/*
 * these are the spells that a magic user can cast
 */
struct spells magic_spells[MAXSPELLS] = {
	{ P_TFIND,		3,	TYP_POTION,	0	  },
	{ S_IDENT,		5,	TYP_SCROLL,	0	  },
	{ S_LIGHT,		7,	TYP_SCROLL,	ISBLESSED },
	{ S_REMOVE,		7,	TYP_SCROLL,	0	  },
	{ S_CONFUSE,		10,	TYP_SCROLL,	0	  },
	{ S_MAP,		10,	TYP_SCROLL,	0	  },
	{ WS_MISSILE,		15,	TYP_STICK,	0	  },
	{ P_CLEAR,		20,	TYP_POTION,	0	  },
	{ S_TELEP,		20,	TYP_SCROLL,	0	  },
	{ S_SLEEP,		20,	TYP_SCROLL,	0	  },
	{ P_SEEINVIS,		20,	TYP_POTION,	0	  },
	{ WS_COLD,		25,	TYP_STICK,	0	  },
	{ WS_ELECT,		25,	TYP_STICK,	0	  },
	{ WS_FIRE,		25,	TYP_STICK,	0	  },
	{ P_HASTE,		30,	TYP_POTION,	0	  },
	{ WS_CANCEL,		30,	TYP_STICK,	0	  },
	{ P_PHASE,		40,	TYP_POTION,	0	  },
	{ S_HOLD,		50,	TYP_SCROLL,	0	  },
	{ S_PROTECT,		60,	TYP_SCROLL,	0	  },
	{ S_ALLENCH,		70,	TYP_SCROLL,	0	  },
};

/*
 * these are the spells that a cleric can cast
 */
struct spells cleric_spells[MAXPRAYERS] = {
	{ P_MFIND,		3,	TYP_POTION,	0	  },
	{ P_TFIND,		7,	TYP_POTION,	0	  },
	{ S_IDENT,		15,	TYP_SCROLL,	0	  },
	{ S_LIGHT,		15,	TYP_SCROLL,	ISBLESSED },
	{ S_REMOVE,		20,	TYP_SCROLL,	0	  },
	{ P_HEALING,		25,	TYP_POTION,	0	  },
	{ S_CURING,		30,	TYP_SCROLL,	0	  },
	{ S_MAP,		30,	TYP_SCROLL,	0	  },
	{ P_CLEAR,		30,	TYP_POTION,	0	  },
	{ P_SEEINVIS,		35,	TYP_POTION,	0	  },
	{ P_RESTORE,		40,	TYP_POTION,	0	  },
	{ P_PHASE,		40,	TYP_POTION,	0	  },
	{ S_TELEP,		45,	TYP_SCROLL,	0	  },
	{ WS_CURING,		50,	TYP_STICK,	ISBLESSED },
	{ WS_DRAIN,		50,	TYP_STICK,	0	  },
};

char *cnames[4][11] = {
{	"Veteran",		"Warrior",	
	"Swordsman",		"Hero",
	"Swashbuckler",		"Myrmidon",	
	"Champion",		"Superhero",
	"Lord",			"Lord",		
	"Lord"
},
{	"Prestidigitator",	"Evoker",	
	"Conjurer",		"Theurgist",
	"Thaumaturgist",	"Magician",	
	"Enchanter",		"Warlock",
	"Sorcerer",		"Necromancer",
	"Wizard"
},
{	"Acolyte",		"Adept",
	"Priest",		"Curate",
	"Prefect",		"Canon",
	"Lama",			"Patriarch",
	"High Priest",		"High Priest",
	"High Priest"
},
{	"Rogue",		"Footpad",
	"Cutpurse",		"Robber",
	"Burglar",		"Filcher",
	"Sharper",		"Magsman",
	"Thief",		"Master Thief",
	"Master Thief"
}
} ;

struct h_list helpstr[] = {
    { '?',	"	prints help" },
    { '/',	"	identify object" },
    { 'h',	"	left" },
    { 'j',	"	down" },
    { 'k',	"	up" },
    { 'l',	"	right" },
    { 'y',	"	up & left" },
    { 'u',	"	up & right" },
    { 'b',	"	down & left" },
    { 'n',	"	down & right" },
    { 'H',	"	run left" },
    { 'J',	"	run down" },
    { 'K',	"	run up" },
    { 'L',	"	run right" },
    { 'Y',	"	run up & left" },
    { 'U',	"	run up & right" },
    { 'B',	"	run down & left" },
    { 'N',	"	run down & right" },
    { 't',	"<dir>	throw something" },
    { 'f',	"<dir>	forward until find something" },
    { 'z',	"<dir>	zap a wand or staff" },
    { '>',	"	go down a staircase" },
    { '<',	"	go up a staircase" },
    { 's',	"	search for trap/secret door" },
    { '.',	"	rest for a while" },
    { 'i',	"	inventory" },
    { 'I',	"	inventory single item" },
    { 'q',	"	quaff potion" },
    { 'r',	"	read paper" },
    { 'e',	"	eat food" },
    { 'w',	"	wield a weapon" },
    { 'W',	"	wear something" },
    { 'T',	"	take off something" },
    { 'd',	"	drop object" },
    { 'P',	"	pick up object(s)" },
    { 'c',	"	call object (generic)" },
    { 'm',	"	mark object (specific)" },
    { 'o',	"	examine/set options" },
    { 'C',	"	cast a spell" },
    { 'p',	"	pray" },
    { 'a',	"	affect the undead" },
    { '^',	"	set a trap" },
    { 'G',	"	sense gold" },
    { 'D',	"	dip something (into a pool)" },
    { CTRL('T'),	"<dir>	take (steal) from (direction)" },
    { CTRL('U'),	"	use miscellaneous magic item" },
    { CTRL('L'),	"	redraw screen" },
    { CTRL('R'),	"	repeat last message" },
    { ESCAPE,	"	cancel command" },
    { 'v',	"	print program version number" },
    { '!',	"	shell escape" },
    { 'S',	"	save game" },
    { 'Q',	"	quit" },
    { 0, 0 }
} ;

struct h_list wiz_help[] = {
    { CTRL('A'),	"	system activity" },
    { CTRL('C'),	"	move to	another	dungeon	level" },
    { CTRL('D'),	"	down 1 dungeon level" },
    { CTRL('E'),	"	food remaining" },
    { CTRL('F'),	"	display entire level" },
    { CTRL('H'),	"	jump 9 experience levels" },
    { CTRL('I'),	"	inventory of level" },
    { CTRL('J'),	"	teleport" },
    { CTRL('N'),	"	recharge staff" },
    { CTRL('P'),	"	toggle wizard status" },
    { CTRL('U'),	"	up 1 dungeon level" },
    { CTRL('X'),	"	detect monsters" },
    { CTRL('Z'),	"	identify" },
    { 'M',	"	make object" },
    { 0, 0 }
};


#define HPT(x) x
struct monster monsters[NUMMONST+1] = {
/* {"Name",
		CARRY,	NORMAL,	WANDER,	APPEAR,	INTEL,
		{ATTRIBUTES},
		"SUMMONED_CREATURE", NUMBER_SUMMONED,
		ADDED_EXPERIENCE/HIT_POINT,
		{str	exp,	level,	"armor", hit_points,
		"damage"}}, */
{"unknown",
		0,	FALSE,	FALSE,	'\0',	"",
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
		0,
		0, 0,
		{10,	0,	0,	0,	HPT(""),
		""}},
{"bat",
		0,	TRUE,	FALSE,	'b',	"2-4",
		{ISMEAN, ISHUH, CANDISEASE, ISFLY, ISHASTE},
		0, 0,
		0,
		{10,	5,	2,	1,	HPT("1d4"),
		"1d2"}},
{"giant rat",
		0,	TRUE,	TRUE,	'R',	"2-4",
		{ISMEAN, CANDISEASE},
		0, 0,
		1,
		{10,	7,	1,	7,	HPT("1d4"),
		"1d3"}},
{"kobold",
		10,	TRUE,	TRUE,	'K',	"8",
		{ISMEAN, CANSHOOT, CARRYWEAPON},
		0, 0,
		1,
		{9,	5,	1,	7,	HPT("1d4"),
		"1d4"}},
{"gnome",
		10,	TRUE,	TRUE,	'G',	"11-12",
		{CANSHOOT, CARRYPOTION, CARRYWEAPON},
		0, 0,
		1,
		{10,	8,	1,	5,	HPT("1d6"),
		"1d6"}},
{"halfling",
		10,	TRUE,	TRUE,	'H',	"11-12",
		{CANSHOOT, CARRYPOTION, CARRYWEAPON},
		0, 0,
		1,
		{8,	9,	1,	4,	HPT("1d6"),
		"1d6"}},
{"dwarf",
		15,	TRUE,	TRUE,	'D',	"11-12",
		{CANSHOOT, CARRYPOTION, CARRYWEAPON},
		0, 0,
		1,
		{14,	10,	1,	4,	HPT("1d8"),
		"1d8"}},
{"orc",
		15,	TRUE,	TRUE,	'O',	"8",
		{ISMEAN, CANSHOOT, CARRYGOLD, CARRYWEAPON},
		0, 0,
		1,
		{12,	10,	1,	6,	HPT("1d8"),
		"1d8"}},
{"manes",
		0,	TRUE,	TRUE,	'M',	"2-4",
		{ISMEAN, MAGICHIT, ISUNDEAD, TURNABLE},
		0, 0,
		1,
		{10,	18,	1,	7,	HPT("1d8"),
		"1d2/1d2/1d4"}},
{"elf",
		50,	TRUE,	TRUE,	'E',	"13-20",
		{CANSHOOT, CARRYPOTION, CARRYSCROLL, CARRYWEAPON},
		0, 0,
		2,
		{12,	20,	1,	5,	HPT("1d8+1"),
		"1d10"}},
{"hobgoblin",
		10,	TRUE,	TRUE,	'h',	"8-10",
		{ISMEAN, CANSHOOT, CARRYWEAPON},
		0, 0,
		2,
		{14,	20,	1,	5,	HPT("1d8+1"),
		"1d8"}},
{"fire beetle", 
		0,	TRUE,	TRUE,	'B',	"0",
		{ISMEAN, HASFIRE},
		0, 0,
		2,
		{10,	20,	1,	4,	HPT("1d8+2"),
		"2d4"}},
{"giant ant",
		0,	TRUE,	TRUE,	'A',	"1",
		{ISMEAN, CANPOISON},
		0, 0,
		3,
		{10,	40,	2,	3,	HPT("2d8"),
		"1d6/1d6"}},
{"zombie",
		0,	TRUE,	TRUE,	'Z',	"0",
		{ISMEAN, ISUNDEAD, TURNABLE},
		0, 0,
		2,
		{10,	20,	2,	8,	HPT("2d8"),
		"1d8"}},
{"ear seeker",
		0,	TRUE,	TRUE,	'e',	"0",
		{ISMEAN, CANINFEST},
		0, 0,
		0,
		{10,	0,	1,	9,	HPT("1d1"),
		"0d0"}},
{"shrieker",
		0,	TRUE,	FALSE,	'S',	"0",
		{CANSHRIEK, NOMOVE, NOSTAB},
		0, 0,
		1,
		{10,	5,	3,	7,	HPT("3d8"),
		"0d0"}},
{"stirge",
		0,	TRUE,	TRUE,	's',	"1",
		{ISMEAN, CANDRAW, ISFLY},
		0, 0,
		2,
		{10,	36,	4,	8,	HPT("1d8+1"),
		"1d3"}},
{"gas spore",
		0,	TRUE,	FALSE,	'a',	"0",
		{ISMEAN, CANEXPLODE, CANINFEST, ISFLY},
		0, 0,
		5,
		{10,	90,	1,	9,	HPT("1d1"),
		"1d1"}},
{"troglodyte",
		5,	TRUE,	TRUE,	'T',	"5-7",
		{ISMEAN, CANSMELL, CANSHOOT, CARRYGOLD, CARRYWEAPON},
		0, 0,
		2,
		{10,	36,	2,	5,	HPT("2d8"),
		"1d3/1d3/2d5"}},
{"lemure",
		0,	TRUE,	FALSE,	'L',	"2-4",
		{ISMEAN, ISREGEN, MAGICHIT, ISUNDEAD, TURNABLE},
		0, 0,
		3,
		{10,	65,	3,	7,	HPT("3d8"),
		"1d3"}},
{"bugbear",
		5,	TRUE,	TRUE,	'b',	"5-8",
		{ISMEAN, CANSHOOT, CANSURPRISE, CARRYGOLD, CARRYPOTION,
		 CARRYWEAPON},
		0, 0,
		4,
		{16,	135,	3,	5,	HPT("3d8+1"),
		"2d4"}},
{"wererat",
		20,	TRUE,	TRUE,	'r',	"11-12",
		{ISMEAN, MAGICHIT, CARRYFOOD},
		0, 0,
		4,
		{10,	150,	3,	6,	HPT("3d8+1"),
		"1d8"}},
{"ghoul",
		0,	TRUE,	TRUE,	'g',	"5-7",
		{ISMEAN, CANPARALYZE, ISUNDEAD, TURNABLE},
		0, 0,
		2,
		{10,	65,	2,	6,	HPT("2d8"),
		"1d3/1d3/1d6"}},
{"leprechaun",
		100,	TRUE,	FALSE,	'l',	"15-16",
		{CARRYGOLD, STEALGOLD},
		0, 0,
		1,
		{10,	80,	6,	3,	HPT("1d4+1"),
		"0d0"}},
{"ogre",
		50,	TRUE,	TRUE,	'o',	"5-7",
		{ISMEAN, CARRYGOLD, CARRYWEAPON},
		0, 0,
		5,
		{18,	90,	4,	5,	HPT("4d8+1"),
		"1d10"}},
{"centaur",
		15,	TRUE,	TRUE,	'C',	"5-10",
		{CANSHOOT, CARRYPOTION, CARRYGOLD},
		0, 0,
		4,
		{10,	85,	4,	4,	HPT("4d8"),
		"1d6/1d6"}},
{"nymph",
		100,	TRUE,	FALSE,	'N',	"15-16",
		{STEALMAGIC, CARRYSCROLL, CARRYPOTION},
		0, 0,
		3,
		{10,	350,	4,	9,	HPT("3d8"),
		"0d0"}},
{"violet fungi", 
		0,	TRUE,	FALSE,	'F',	"0",
		{ISMEAN, CANHOLD, NOMOVE, CANROT, NOSTAB},
		0, 0,
		4,
		{10,	135,	3,	7,	HPT("3d8"),
		"5d1"}},
{"giant tick",
		0,	TRUE,	TRUE,	't',	"0",
		{ISMEAN, CANDRAW, CANDISEASE},
		0, 0,
		2,
		{10,	105,	3,	3,	HPT("3d8"),
		"1d4"}},
{"gelatinous cube", 
		90, TRUE,	TRUE,	'c',	"0",
		{ISMEAN, ISSCAVENGE, CANPARALYZE, NOSTAB, CARRYFOOD},
		0, 0,
		4,
		{10,	150,	4,	8,	HPT("4d8"),
		"2d4"}},
{"blink dog",
		0,	TRUE,	TRUE,	'B',	"8-10",
		{ISMEAN, CANBLINK},
		0, 0,
		5,
		{10,	170,	4,	5,	HPT("4d8"),
		"1d6"}},
{"very young dragon", 
		10,	TRUE,	FALSE,	'd',	"15-16",
		{ISMEAN, CANBRANDOM, ISGREED, CARRYGOLD, CARRYSTICK},
		0, 0,
		9,
		{10,	100,	9,	-1,	HPT("9d1"),
		"1d4/1d4/2d4"}},
{"rust monster", 
		0,	TRUE,	TRUE,	'R',	"1",
		{ISMEAN, CANRUST},
		0, 0,
		4,
		{10,	185,	5,	2,	HPT("3d8"),
		"0d0/0d0"}},
{"ghast",
		0,	TRUE,	TRUE,	'G',	"11-12",
		{CANPARALYZE, CANSTINK, ISMEAN, ISUNDEAD, TURNABLE},
		0, 0,
		4,
		{10,	190,	4,	4,	HPT("4d8"),
		"1d4/1d4/1d8"}},
{"blindheim",
		0,	TRUE,	FALSE,	'b',	"1",
		{CANBLIND, ISMEAN},
		0, 0,
		4,
		{8,	200,	2,	1,	HPT("4d8+2"),
		"1d8"}},
{"shadow",
		0,	TRUE,	TRUE,	'S',	"5-7",
		{ISSHADOW, ISMEAN, CANCHILL, ISUNDEAD, TURNABLE},
		0, 0,
		4,
		{10,	255,	3,	7,	HPT("3d8+3"),
		"1d4+1"}},
{"gargoyle",
		5,	TRUE,	TRUE,	'g',	"5-7",
		{ISMEAN, MAGICHIT, CARRYSTICK},
		0, 0,
		5,
		{10,	165,	4,	5,	HPT("4d8+4"),
		"1d3/1d3/1d6/1d4"}},
{"su-monster", 10,	TRUE,	TRUE,	's',	"8-10",
		{ISMEAN, CARRYSCROLL, CARRYGOLD, CARRYFOOD},
		0, 0,
		6,
		{10,	225,	5,	6,	HPT("5d8+5"),
		"4d4/2d4"}},
{"gray ooze", 
		50,	TRUE,	FALSE,	'o',	"1",
		{ISMEAN, NOMOVE, CANRUST, ISSCAVENGE, NOCOLD, NOFIRE, NOSTAB,
		 CARRYSTICK, CARRYFOOD},
		0, 0,
		5,
		{10,	200,	3,	8,	HPT("3d8+3"),
		"2d8"}},
{"owlbear",
		5,	TRUE,	TRUE,	'O',	"5-7",
		{ISMEAN, CANHUG, CARRYRING, CARRYFOOD},
		0, 0,
		8,
		{10,	225,	5,	5,	HPT("5d8+2"),
		"1d6/1d6/2d6"}},
{"quasit",
		30,	TRUE,	TRUE,	'Q',	"5-7",
		{ISMEAN, ISREGEN, MAGICHIT, CANSURPRISE, CANITCH,
		 CARRYSCROLL, CARRYGOLD, CARRYPOTION, NOCOLD, NOFIRE, NOBOLT},
		0, 0,
		3,
		{10,	325,	7,	2,	HPT("3d8"),
		"1d2/1d2/1d4"}},
{"doppleganger", 
		0,	TRUE,	TRUE,	'D',	"11-12",
		{ISMEAN, CANSURPRISE},
		0, 0,
		4,
		{10,	330,	10,	5,	HPT("4d8"),
		"1d12"}},
{"yeti",	
		30,	TRUE,	TRUE,	'Y',	"8-10",
		{ISMEAN, CANPARALYZE, CANHUG, NOCOLD, CANSURPRISE,
		 CARRYGOLD, CARRYPOTION},
		0, 0,
		8,
		{13,	500,	6,	6,	HPT("4d8+4"),
		"1d6/1d6"}},
{"leucrotta", 
		0,	TRUE,	FALSE,	'L',	"8-10",
		{ISMEAN},
		0, 0,
		8,	
		{10,	475,	6,	4,	HPT("6d8+1"),
		"3d6/1d6/1d6"}},
{"imp", 
		25,	TRUE,	TRUE,	'I',	"8-10",
		{ISMEAN, ISREGEN, MAGICHIT, CANPOISON, CANSURPRISE,
		 CANTELEPORT, CARRYRING, CARRYSTICK, NOCOLD, NOBOLT, NOFIRE},
		0, 0,
		3,
		{10,	275,	2,	2,	HPT("2d8+2"),
		"1d4"}},
{"cockatrice", 
		0,	TRUE,	TRUE,	'C',	"1",
		{ISMEAN, TOUCHSTONE},
		0, 0,
		5,
		{10,	315,	5,	6,	HPT("5d8"),
		"1d3"}},
{"wight",
		0,	TRUE,	TRUE,	'W',	"8-10",
		{ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE},
		0, 0,
		5,
		{10,	540,	4,	5,	HPT("4d8+3"),
		"1d4"}},
{"troll",
		50,	TRUE,	FALSE,	'T',	"5-7",
		{ISMEAN, ISREGEN, CARRYFOOD, CARRYGOLD, CARRYSTICK},
		0, 0,
		8,
		{18,	600,	6,	4,	HPT("6d8+6"),
		"1d4+4/1d4+4/2d6"}},
{"jackalwere", 
		50,	TRUE,	TRUE,	'J',	"11-12",
		{ISMEAN, CANSHOOT, CANSNORE, MAGICHIT, CARRYFOOD, CARRYGOLD,
		 CARRYSCROLL},
		0, 0,
		4,
		{10,	800,	4,	4,	HPT("4d8"),
		"2d4"}},
{"wraith",
		0,	TRUE,	TRUE,	'w',	"11-12",
		{ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE},
		0, 0,
		6,
		{10,	575,	5,	4,	HPT("5d8+3"),
		"1d6"}},
{"erinyes",
		25,	TRUE,	TRUE,	'E',	"8-10",
		{ISMEAN, CANFRIGHTEN, CANSUMMON, TURNABLE, CANPAIN, CANSEE, 
		 NOFIRE, CANTELEPORT, CARRYRING, CARRYSTICK},
		"ghoul", 3, 
		8,
		{10,	875,	7,	2,	HPT("6d8+6"),
		"2d4"}},
{"lava child", 
		0,	TRUE,	TRUE,	'l',	"8-10",
		{ISMEAN, NOMETAL},
		0, 0,
		8,	
		{10,	950,	5,	4,	HPT("5d8+1"),
		"1d6/1d6/2d12"}},
{"basilisk",
		0,	TRUE,	FALSE,	'B',	"1",
		{ISMEAN, LOOKSTONE},
		0, 0,
		8,
		{10,	1000,	6,	4,	HPT("6d8+1"),
		"1d10"}},
{"mummy",
		20,	TRUE,	FALSE,	'm',	"5-7",
		{ISMEAN,CANINFEST, MAGICHIT, CANFRIGHTEN, HALFDAMAGE, ISUNDEAD, 
		 TURNABLE, CARRYRING, CARRYSTICK},
		0, 0,
		8,
		{10,	1150,	6,	3,	HPT("6d8+3"),
		"1d12"}},
{"otyugh",
		0,	TRUE,	TRUE,	'o',	"5-10",
		{ISMEAN, CANDISEASE},
		0, 0,
		8,
		{10,	700,	7,	3,	HPT("7d8"),
		"1d8/1d8/1d4+1"}},
{"adult dragon", 
		30,	TRUE,	FALSE,	'd',	"15-16",
		{ISMEAN, CANBRANDOM, ISGREED, CANFRIGHTEN, CARRYGOLD,
		 CARRYPOTION, CARRYSTICK},
		0, 0,
		9,
		{10,	1000,	9,	-1,	HPT("45d1"),
		"1d6/1d6/2d6"}},
{"invisible stalker", 
		0, TRUE,	TRUE,	'i',	"13-14",
		{ISMEAN, ISINVIS},
		0, 0,
		10,
		{10,	1090,	8,	3,	HPT("8d8"),
		"4d4"}},
{"xorn",
		0,	TRUE,	TRUE,	'X',	"8-10",
		{ISMEAN, CANINWALL, NOCOLD, NOFIRE, CANSURPRISE, NOBOLT},
		0, 0,
		10,
		{10,	1275,	7,	-2,	HPT("7d8+7"),
		"1d3/1d3/1d3/4d6"}},
{"will-o-wisp", 100,	TRUE,	FALSE,	'W',	"15-16",
		{ISMEAN, CANSURPRISE, ISFLY, CARRYGOLD, CARRYMISC, NOBOLT},
		0, 0,
		12,
		{10,	2000,	9,	-8,	HPT("9d8"),
		"2d8"}},
{"chimera",
		0,	TRUE,	FALSE,	'c',	"2-4",
		{ISMEAN, CANBFIRE, NOFIRE},
		0, 0,
		12,
		{10,	1000,	9,	6,	HPT("9d8"),
		"1d3/1d3/1d4/1d4/2d4/3d4"}},
{"mimic",
		20,	TRUE,	FALSE,	'M',	"2-10",
		{ISDISGUISE, CANHOLD, CARRYFOOD, CARRYRING, CARRYGOLD},
		0, 0,
		12,
		{10,	1300,	9,	7,	HPT("9d8"),
		"3d4"}},
{"horned devil", 
		5,	TRUE,	TRUE,	'H',	"13-14",
		{ISMEAN, CANFRIGHTEN, CANINFEST, CANPOISON, MAGICHIT, CANSUMMON,
		 NOFIRE, CANTELEPORT, CARRYGOLD, CARRYRING, CARRYSTICK},
		"wight", 2, 
		6,
		{10,	1320,	7,	-3,	HPT("5d8+5"),
		"1d4/1d4/1d4+1/1d3"}},
{"specter",
		0,	TRUE,	TRUE,	'S',	"13-14",
		{ISMEAN, DOUBLEDRAIN, ISUNDEAD, TURNABLE},
		0, 0,
		10,
		{10,	1650,	7,	2,	HPT("7d8+3"),
		"1d8"}},
{"lamia", 
		0,	TRUE,	TRUE,	'L',	"13-14",
		{ISMEAN, TAKEWISDOM},
		0, 0,
		9,	
		{10,	1500,	9,	3,	HPT("9d8"),
		"1d4/1d4"}},
{"neo-otyugh",
		0,	TRUE,	TRUE,	'N',	"10-12",
		{ISMEAN, CANDISEASE},
		0, 0,
		10,
		{12,	1500,	10,	0,	HPT("12d8"),
		"2d6/2d6/1d3"}},
{"barbed devil", 
		0,	TRUE,	TRUE,	'B',	"11-12",
		{TOUCHFEAR, CANSUMMON, ISMEAN, CANHOLD, TURNABLE, NOFIRE,
		 CANTELEPORT},
		"ghast", 4, 
		10,
		{10,	1425,	8,	0,	HPT("8d8"),
		"2d4/2d4/3d4"}},
{"vrock",
		10,	TRUE,	TRUE,	'V',	"5-7",
		{ISMEAN, CANSUMMON, CANSEE, TURNABLE, CANTELEPORT, CARRYGOLD,
		 CARRYRING, CARRYSTICK},
		"erinyes", 2, 
		10,
		{10,	1500,	8,	0,	HPT("8d8"),
		"1d4/1d4/1d8/1d8/1d6"}},
{"shambling mound", 
		25, TRUE,	TRUE,	's',	"5-7",
		{ISMEAN, CANSUFFOCATE, NOCOLD, NOFIRE, CANHOLD, CARRYGOLD,
		 CARRYFOOD, CARRYRING},
		0, 0,
		10,
		{10,	1800,	9,	0,	HPT("9d8"),
		"2d8/2d8"}},
{"umber hulk",
		40,	TRUE,	TRUE,	'U',	"8-10",
		{ISMEAN, CANHUH, CANINWALL, CANTUNNEL, CARRYSCROLL,
		 CARRYPOTION, CARRYFOOD},
		0, 0,
		12,
		{10,	1700,	8,	2,	HPT("8d8+8"),
		"3d4/3d4/2d5"}},
{"ettin",
		0,	TRUE,	TRUE,	'e',	"0",
		{ISMEAN, CANSHOOT},
		0, 0,
		14,
		{10,	1950,	10,	3,	HPT("10d8"),
		"2d8/3d6"}},
{"black pudding", 
		30,	TRUE,	FALSE,	'P',	"0",
		{ISMEAN, CANRUST, NOCOLD, BOLTDIVIDE, BLOWDIVIDE, ISSCAVENGE, 
		 NOSTAB, CARRYSCROLL, CARRYSTICK, CARRYPOTION, CARRYRING},
		0, 0,
		14,
		{10,	2000,	10,	6,	HPT("10d8"),
		"3d8"}},
{"hezrou",
		15,	TRUE,	TRUE,	'h',	"5-7",
		{ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, TURNABLE, CANTELEPORT,
		 CARRYPOTION, CARRYRING, CARRYSTICK},
		"wight", 3, 
		12,
		{10,	2000,	9,	-2,	HPT("9d8"),
		"1d3/1d3/4d4"}},
{"glabrezu",
		25,	TRUE,	FALSE,	'G',	"8-10",
		{ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, TURNABLE, CANTELEPORT,
		 CARRYSCROLL, CARRYPOTION, CARRYGOLD},
		"wraith", 3, 
		14,
		{10,	2400,	10,	-4,	HPT("10d8"),
		"2d6/2d6/1d3/1d3/1d4+1"}},
{"bone devil",
		0,	TRUE,	TRUE,	'b',	"11-12",
		{ISMEAN, CANFRIGHTEN, CANSEE, CANSUMMON, CANSURPRISE, CANCHILL, 
		 TURNABLE, NOFIRE, NOCOLD, CANTELEPORT},
		"ghast", 3, 
		12,
		{10,	2800,	9,	-1,	HPT("9d8"),
		"2d4"}},
{"white pudding", 
		30,	TRUE,	FALSE,	'w',	"0",
		{ISMEAN, CANDISSOLVE, NOCOLD, BOLTDIVIDE, BLOWDIVIDE, 
		 ISSCAVENGE, NOSTAB, CARRYRING, CARRYSTICK, CARRYSCROLL,
		 CARRYPOTION},
		0, 0,
		14,
		{10,	2200,	9,	8,	HPT("10d8"),
		"7d4"}},
{"vampire",
		20,	TRUE,	TRUE,	'v',	"15-16",
		{ISMEAN, ISREGEN, CANSUCK, ISUNDEAD, TURNABLE, CARRYMISC},
		0, 0,
		12,
		{20,	3800,	8,	1,	HPT("8d8+3"),
		"1d6+4"}},
{"ghost",	
		20,	TRUE,	FALSE,	'g',	"13-14",
		{ISMEAN, CANFRIGHTEN, CANAGE, ISUNDEAD, TURNABLE, CARRYMISC, 
		 CMAGICHIT, CANINWALL},
		0, 0,
		10,
		{13,	5000,	12,	0,	HPT("10d8"),
		"1d12"}},
{"intellect devourer",
		0,	TRUE,	FALSE,	'D',	HPT("11-12"),
		{ISMEAN, TAKEINTEL, CMAGICHIT, HALFDAMAGE, CANSURPRISE, NOFIRE, 
		 NOCOLD},
		0, 0,
		9,
		{10,	5000,	7,	4,	HPT("6d8+6"),	
		"1d4/1d4/1d4/1d4"}},
{"ice devil",
		30,	TRUE,	FALSE,	'I',	"13-14",
		{ISMEAN, CANSEE, ISREGEN, CANFRIGHTEN, CANSUMMON, CANBICE, 
		 NOCOLD, NOFIRE, CANSLOW, CANTELEPORT, CARRYSCROLL, CARRYRING,
		 CARRYSTICK},
		"bone devil", 2, 
		16,
		{20,	4400,	11,	-4,	HPT("11d8"),
		"1d4/1d4/2d4/3d4"}},
{"purple worm", 
		70,	TRUE,	TRUE,	'p',	"0",
		{ISMEAN, CANPOISON, CANINWALL, CANTUNNEL, CARRYFOOD, CARRYGOLD},
		0, 0,
		20,
		{10,	4900,	15,	6,	HPT("15d8"),
		"2d12/2d4"}},
{"ancient brass dragon", 
		70,	TRUE,	FALSE,	'r',	"13-14",
		{CANBSGAS, CANBFGAS, ISGREED, CANSEE, NOSLEEP, NOFEAR,
		 CARRYGOLD, CARRYRING},
		0, 0,
		50,
		{10,	10000,	8,	2,	HPT("0d8+64"),
		"1d4/1d4/4d4"}},
{"pit fiend",
		100,	TRUE,	TRUE,	'f',	"15-16",
		{ISMEAN, CANSEE, BMAGICHIT, CANFRIGHTEN, CANHOLD, CANSUMMON, 
		 CANBFIRE, NOFIRE, CANTELEPORT, CARRYSTICK, HASFIRE},
		"barbed devil", 3, 
		18,
		{22,	10000,	13,	-3,	HPT("13d8"),
		"1d4+4/1d6+6"}},
{"ancient white dragon", 
		70,	TRUE,	TRUE,	'W',	"8-9",
		{ISMEAN, CANBICE, ISGREED, CANSEE, NOCOLD, CARRYGOLD,
		 CARRYRING},
		0, 0,
		50,
		{10,	15000,	7,	3,	HPT("0d8+56"),
		"1d4/1d4/2d8"}},
{"ancient black dragon", 
		70,	TRUE,	TRUE,	'a',	"8-10",
		{ISMEAN, CANBACID, NOACID, ISGREED, CANSEE, CARRYGOLD,
		 CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	8,	3,	HPT("0d8+64"),
		"1d4/1d4/3d6"}},
{"lich",
		60,	TRUE,	TRUE,	'l',	"19-20",
		{ISMEAN, CANDRAIN, CANSEE, CANPARALYZE, CANFRIGHTEN, MAGICHIT, 
		 ISUNDEAD, TURNABLE, NOBOLT, CANMISSILE, CANSUMMON, CARRYGOLD,
		 CARRYSCROLL, CARRYPOTION, CARRYRING},
		"specter", 2,
		16,
		{10,	20000,	17,	0,	HPT("11d8"),
		"1d10"}},
{"titan",
		80,	TRUE,	FALSE,	't',	"17-20",
		{ISSHADOW, CANSEE, CANMISSILE, CARRYRING, CARRYSTICK, 
		 CANTELEPORT},
		0, 0,
		30,
		{13,	20000,	19,	-3,	HPT("22d8"),
		"8d6"}},
{"ancient copper dragon", 
		70,	TRUE,	FALSE,	'c',	"13-14",
		{CANBACID, NOACID, CANBSLGAS, ISGREED, CANSEE, NOSLOW,
		 CARRYGOLD, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	9,	1,	HPT("0d8+72"),
		"1d4/1d4/5d4"}},
{"ancient green dragon", 
		50,	TRUE,	TRUE,	'E',	"10-12",
		{ISMEAN, CANBGAS, ISGREED, CANSEE, NOGAS, CARRYGOLD,
		 CARRYRING, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	9,	2,	HPT("0d8+72"),
		"1d6/1d6/2d10"}},
{"ancient bronze dragon", 
		50,	TRUE,	FALSE,	'L',	"15-16",
		{CANBCGAS, CANBBOLT, CANBFGAS, ISGREED, CANSEE, NOFEAR, NOBOLT, 
		 ISCLEAR, CARRYGOLD, CARRYRING, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	10,	0,	HPT("0d8+80"),
		"1d6/1d6/4d6"}},
{"ancient blue dragon", 
		50,	TRUE,	TRUE,	'u',	"12-14",
		{ISMEAN, CANBBOLT, ISGREED, CANSEE, NOBOLT, CARRYGOLD,
		 CARRYSCROLL, CARRYRING, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	10,	2,	HPT("0d8+80"),
		"1d6/1d6/3d8"}},
{"ancient silver dragon", 
		40,	TRUE,	FALSE,	'S',	"15-16",
		{CANBICE, CANBPGAS, ISGREED, CANSEE, CANMISSILE, NOCOLD, 
		 NOPARALYZE, CARRYGOLD, CARRYSCROLL, CARRYRING, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	11,	-1,	HPT("0d8+88"),
		"1d6/1d6/5d6"}},
{"frost giant",
		50,	TRUE,	TRUE,	'F',	"5-10",
		{ISMEAN, NOCOLD, CARRYGOLD, CARRYSTICK},
		0, 0,
		40,
		{25,	20000,	15,	4,	HPT("10d8+4"),
		"4d6"}},
{"ancient red dragon", 
		40,	TRUE,	TRUE,	'R',	"15-16",
		{ISMEAN, CANBFIRE, ISGREED, CANSEE, NOFIRE, CARRYGOLD,
		 CARRYPOTION, CARRYRING, CARRYSTICK},
		0, 0,
		50,
		{10,	20000,	11,	-1,	HPT("0d8+88"),
		"1d8/1d8/3d10"}},
{"ancient gold dragon", 
		50,	TRUE,	TRUE,	'G',	"17-18",
		{CANBFIRE, CANBGAS, ISGREED, CANSEE, CANMISSILE, NOFIRE, NOGAS,
		 CARRYGOLD, CARRYPOTION, CARRYRING, CARRYSTICK, CANTELEPORT},
		0, 0,
		50,
		{10,	20000,	12,	-2,	HPT("0d8+96"),
		"1d8/1d8/6d6"}},
{"fire giant",
		30,	TRUE,	TRUE,	'f',	"6-10",
		{ISMEAN, CARRYGOLD, NOFIRE, CARRYSTICK},
		0, 0,
		45,
		{27,	26000,	15,	4,	HPT("11d8+5"),
		"5d6"}},
{"storm giant",
		30,	TRUE,	TRUE,	's',	"8-10",
		{ISMEAN, NOBOLT, CANBBOLT, CARRYRING},
		0, 0,
		50,
		{30,	30000,	15,	2,	HPT("15d8+8"),
		"7d6"}},
{"dwarven thief (Musty Doit)",
		50,	TRUE,	TRUE,	'm',	"16",
		{ISMEAN, ISUNIQUE, ISINVIS, NOFIRE, NOGAS, NOSTAB, STEALGOLD,
		 STEALMAGIC, CANPAIN, ISFLY, CARRYGOLD, CANSURPRISE, CANSEE,
		 CARRYDAGGER, CARRYMISC, CARRYPOTION, CANBSTAB, ISSCAVENGE},
		0, 0,
		0,
		{11,	300000,	20,	-5,	HPT("0d8+95"),
		"6d4+70/6d4+70"}},
{"demon prince (Jubilex)", 
		100,	TRUE,	FALSE,	'J',	"18",
		{ISMEAN, ISUNIQUE, CANFRIGHTEN, ISREGEN, BMAGICHIT, ISSHADOW, 
		 CANHOLD, CANDISEASE, CANSUMMON, CANSEE, CANROT, CANINFEST, 
		 CANRUST, NOSTAB, CANTELEPORT, CARRYMISC},
		"black pudding", 4, 
		0,
		{10,	100000,	20,	-7,	HPT("0d8+88"),
		"4d10"}},
{"arch devil (Geryon)", 
		100,	TRUE,	FALSE,	'g',	"16",
		{ISMEAN, ISUNIQUE, BMAGICHIT, CANSEE, ISSHADOW, CANFRIGHTEN, 
		 CANHUH, CANPOISON, CANSUMMON, NOFIRE, CANTELEPORT,
		 CARRYMISC, CARRYHORN},
		"ice devil", 5, 
		0,
		{13,	110000,	30,	-3,	HPT("0d8+133"),
		"3d6/3d6/2d4"}},
{"arch devil (Dispater)", 
		100,	TRUE,	FALSE,	'd',	"18",
		{ISMEAN, ISUNIQUE, CANSEE, CANFRIGHTEN, CANHUH, BMAGICHIT, 
		 CANSUMMON, NOFIRE, CANTELEPORT, CARRYMISC},
		"ghost", 9, 
		0,
		{10,	120000,	36,	-2,	HPT("0d8+144"),
		"4d6"}},
{"demon prince (Yeenoghu)", 
		100,	TRUE,	FALSE,	'Y',	"16",
		{ISMEAN, ISREGEN, ISUNIQUE, MAGICHIT, CANSEE, ISSHADOW, CANHOLD,
		 CARRYFLAIL, CANFRIGHTEN, CANPARALYZE, CANSUMMON, CANHUH, 
		 CANMISSILE, CANTELEPORT, CARRYMISC},
		"lich", 5, 
		0,
		{10,	130000,	23,	-5,	HPT("0d8+100"),
		"3d6/3d6"}},
{"witch (Emori)",
		50,	TRUE,	FALSE,	'w',	"18",
		{ISMEAN, CANMISSILE, ISINVIS, CANBBOLT, CANBFIRE, CANBICE,
		 CANSEE, CANSUMMON, ISUNIQUE, CANSNORE, ISFLY, TAKEINTEL,
		 CANDANCE, CANDISEASE, NOBOLT, NOCOLD, NOFIRE, CARRYCLOAK,
		 ISCLEAR, CARRYSCROLL, CARRYSTICK, CANTELEPORT},
		"shambling mound", 5,
		0,
		{11,	240000,	25,	 6,	HPT("0d8+102"),
		"1d4/1d4"}},
{"cleric of Thoth (Heil)",
		100,	TRUE,	FALSE,	'h',	"16",
		{ISMEAN, CANSEE, NOFEAR, ISREGEN, CANHOLD, CANBFIRE, ISUNIQUE, 
		 DOUBLEDRAIN, CANSUMMON, NOFIRE, TOUCHFEAR, CANDISEASE,
		 CANSEE, TAKEWISDOM, CARRYANKH, CARRYRING, ISINVIS, ISFLY},
		 "mummy", 9,
		 0,
		 {15,	295000,	20,	-8,	HPT("0d8+116"),
		 "0d6+11"}},
{"magician (Tsoming Zen)",
		80,	TRUE,	FALSE,	'z',	"18",
		{ISMEAN, ISUNIQUE, ISINVIS, ISREGEN, CANBFIRE, CANBICE,
		 CANBBOLT, CANMISSILE, NOFIRE, CANHOLD, CANFRIGHTEN, CANDISEASE,
		 CANPAIN, CANSUMMON, CANSEE, ISFLY, CANBLINK, CANTELEPORT,
		 CARRYSTAFF, CARRYSTICK, NOSLOW, NOBOLT, NOCOLD},
		 "blink dog", 5,
		 0,
		 {16,	310000,	21,	  0,	HPT("0d8+125"),
		 "2d4+1/2d4+1/2d4+1/2d4+1"}},
{"poet (Brian)",
		80,	TRUE,	TRUE,	'p',	"16",
		{ISMEAN, ISUNIQUE, STEALGOLD, ISSHADOW, CANSUMMON, ISREGEN,
		 CANDISEASE, NOCOLD, NOBOLT, NOFIRE, NOFEAR, CANTUNNEL, CANSEE,
		 CANINWALL, ISCLEAR, CARRYMANDOLIN, CARRYPOTION, CARRYRING},
		"umber hulk", 6,
		0,
		{19,	320000,	20,	-2,	HPT("0d8+153"),
		"8d8+48/4d4+36"}},
{"lesser god (Hruggek)",
		100,	TRUE,	FALSE,	'H',	"17",
		{ISMEAN, CANSEE, ISUNIQUE, CANSUMMON, ISREGEN, 
		 CANTELEPORT, CARRYMISC, CARRYMSTAR},
		"purple worm", 6,
		0,
		{19,	140000,	25,	0,	HPT("0d8+221"),
		"2d8/2d8"}},
{"lesser god (Kurtulmak)",
		100,	TRUE,	TRUE,	'K',	"19",
		{ISMEAN, CANFRIGHTEN, CANPOISON, CANSEE, ISUNIQUE, CANSUMMON,
		 CANTELEPORT, CARRYMISC},
		"lich", 3,
		0,
		{19,	150000,	27,	0,	HPT("0d8+219"),
		"2d12/1d6"}},
{"demigod (Vaprak \"The Destroyer\")",
		100,	TRUE,	TRUE,	'v',	"18",
		{ISMEAN, ISUNIQUE, ISREGEN, MAGICHIT, CANSEE, CANSUMMON,
		 CANTELEPORT, CARRYMISC},
		"troll", 9,
		0,
		{16,	160000,	26,	0,	HPT("0d8+198"),
		"2d10/2d10/1d12"}},
{"platinum dragon (Bahamut)", 
		100,	TRUE,	FALSE,	'P',	"20",
		{ISUNIQUE, CANBICE, CANBGAS, CANBBOLT, CANBRANDOM, CANSEE, 
		 NOCOLD, NOBOLT, NOGAS, NOFIRE, NOFEAR, NOSLEEP, NOSLOW, 
		 NOPARALYZE, CANMISSILE, CANSONIC, CANFRIGHTEN, CANSUMMON,
		 CARRYSTICK, CARRYMISC, CANTELEPORT},
		"ancient gold dragon", 4,
		0,
		{10,	170000,	38,	-3,	HPT("0d8+168"),
		"2d6/2d6/6d8"}},
{"arch devil (Baalzebul)", 
		100,	TRUE,	FALSE,	'B',	"18",
		{ISMEAN, ISSHADOW, ISUNIQUE, BMAGICHIT, CANHOLD, CANPOISON, 
		 CANFRIGHTEN, CANHUH, CANSUMMON, CANSEE, NOFIRE, CANTELEPORT,
		 CARRYMISC},
		"horned devil", 9, 
		0,
		{10,	180000,	37,	-5,	HPT("0d8+166"),
		"2d6"}},
{"chromatic dragon (Tiamat)", 
		100,	TRUE,	FALSE,	'C',	"18",
		{ISMEAN, ISUNIQUE, CANBFIRE, CANBACID, CANBBOLT, CANBICE, 
		 CANBGAS, CANBRANDOM, CANSEE, NOFIRE, NOBOLT, NOCOLD, NOACID, 
		 NOGAS, CANSUMMON, CANMISSILE, CANFRIGHTEN, CARRYMISC,
		 CARRYRING, CANTELEPORT},
		"ancient red dragon", 6,
		0,
		{10,	190000,	29,	0,	HPT("0d8+128"),
		"2d8/3d6/2d10/3d8/3d10/1d6"}},
{"demon prince (Orcus)", 
		100,	TRUE,	FALSE,	'O',	"20",
		{ISMEAN, ISUNIQUE, BMAGICHIT, CANPOISON, CANFRIGHTEN, CANSEE, 
		 CANBBOLT, CANSUMMON, NOBOLT, CANTELEPORT, CARRYWAND, 
		 CARRYMISC, CANTELEPORT},
		"vampire", 9, 
		0,
		{13,	200000,	27,	-6,	HPT("0d8+120"),
		"1d10+3/2d4"}},
{"arch devil (Asmodeus)", 
		100,	TRUE,	FALSE,	'A',	"20",
		{ISMEAN, ISUNIQUE, CANSEE, ISSHADOW, CANHOLD, BMAGICHIT, 
		 CANFRIGHTEN, CANHUH, CANSLOW, CANSUMMON, NOFIRE,
		 CANTELEPORT, CARRYROD, CARRYMISC},
		"pit fiend", 5, 
		0,
		{10,	210000,	45,	-7,	HPT("0d8+199"),
		"1d10+4"}},
{"demon prince (Demogorgon)", 
		100,	TRUE,	FALSE,	'D',	"20",
		{ISMEAN, CANHUH, BMAGICHIT, DOUBLEDRAIN, CANINFEST, CANSEE, 
		 CANFRIGHTEN, ISUNIQUE, CANSUMMON, CANROT, CANTELEPORT,
		 CANDISEASE, CARRYMISC},
		"glabrezu", 9, 
		0,
		{10,	220000,	45,	-8,	HPT("0d8+200"),
		"1d6/1d6"}},
{"greater god (Maglubiyet)",
		100,	TRUE,	FALSE,	'M',	"19",
		{ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON,
		 CANTELEPORT, CARRYMISC},
		"lich", 6,
		0,
		{10,	230000,	45,	-1,	HPT("0d8+350"),
		"4d10"}},
{"greater god (Gruumsh)",
		100,	TRUE,	FALSE,	'G',	"19",
		{ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON,
		 CANTELEPORT, CARRYMISC},
		"lich", 9,
		0,
		{10,	240000,	45,	-1,	HPT("0d8+350"),
		"4d10"}},
{"lesser god (Thrym)",
		100,	TRUE,	FALSE,	'T',	"16",
		{ISMEAN, NOCOLD, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, 
		 CANSUMMON, CARRYMISC, CANTELEPORT},
		"frost giant", 9,
		0,
		{25,	250000,	45,	-2,	HPT("0d8+300"),
		"4d10/4d10"}},
{"lesser god (Surtur)",
		100,	TRUE,	FALSE,	't',	"19",
		{ISMEAN, NOFIRE, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, 
		 CANSUMMON, CANMISSILE, CANTELEPORT, CARRYMISC},
		"fire giant", 9,
		0,
		{25,	260000,	45,	-2,	HPT("0d8+380"),
		"5d10/5d10"}},
{"lesser god (Skoraeus Stonebones)",
		100,	TRUE,	FALSE,	'b',	"19",
		{ISMEAN, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, CANSUMMON, 
		 CANMISSILE, CANINWALL, CANTELEPORT, CARRYMISC, CARRYSTICK},
		"storm giant", 9,
		0,
		{25,	270000,	45,	-1,	HPT("0d8+380"),
		"6d10/6d10"}},
{"ruler of greater titans (Yendor)",
		100,	TRUE,	TRUE,	'y',	 "25",
		{ISMEAN, CANINWALL, ISUNIQUE, ISREGEN, CMAGICHIT,
		 CANSUMMON, CANMISSILE, CANFRIGHTEN, CANBFIRE, NOFIRE, 
		 CANHOLD, CARRYAMULET, CANSEE, CANDANCE, ISSHADOW,
		 CANTELEPORT, CARRYMISC, CARRYRING, CARRYSTICK},
		"titan", 15,
		0,
		{25,	300000, 45,	-3,	HPT("0d8+400"),
		"7d10/7d10"}},
{"quartermaster", 
		50,	FALSE,	TRUE,	'q',	"18",
		{CANSELL, CARRYPOTION, CARRYSCROLL, CARRYMISC, CARRYRING,
		 CARRYSTICK, CANTELEPORT},
		0, 0,
		2,
		{12,	20,	1,	-4, 	HPT("1d8+1"),
		"1d10"}},
};