Mercurial > hg > early-roguelike
diff arogue7/rogue.c @ 125:adfa37e67084
Import Advanced Rogue 7.7 from the Roguelike Restoration Project (r1490)
author | John "Elwin" Edwards |
---|---|
date | Fri, 08 May 2015 15:24:40 -0400 |
parents | |
children | c697782a9b37 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/arogue7/rogue.c Fri May 08 15:24:40 2015 -0400 @@ -0,0 +1,1689 @@ +/* + * rogue.c - Global game variables + * + * Advanced Rogue + * Copyright (C) 1984, 1985, 1986 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" +#ifdef PC7300 +#include <sys/window.h> +#endif + +#ifdef BSD +char +tolower(c) +{ + if (isupper(c)) return(_tolower(c)); + else return(c); +} +char +toupper(c) +{ + if (islower(c)) return(_toupper(c)); + else return(c); +} +#endif + +/* + * 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 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 mpos = 0; +int level = 0; +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 = STOMACHSIZE-MORETIME-1; +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 chant_time = 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 */ +int cols = 0; /* number of columns in terminal */ +int lines = 0; /* number of lines on the terminal */ +char nfloors = -1; /* Number of floors in this dungeon */ +char curpurch[LINELEN]; /* 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 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[LINELEN]; /* 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 monsters */ +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 menu_overlay = TRUE; +bool door_stop = FALSE; +bool jump = FALSE; +bool slow_invent = FALSE; +bool firstmove = FALSE; +bool askme = FALSE; +bool in_shell = FALSE; +bool daytime = TRUE; +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]"; +#ifdef PC7300 +struct uwdata wdata, oldwin; /* Static window information */ +char oldtext[WTXTNUM][WTXTLEN]; /* Saved window text */ +#endif + +/* + * This lays out all the class specific details + * + * Here are the beginning experience levels for all players. + * All further experience levels are computed by muliplying by 2 + * up through MAXDOUBLE. Then exp pts are calculated by adding + * in the cap figure. You must change MAXDOUBLE if you change the + * cap figure. + */ +struct character_types char_class[NUM_CHARTYPES] = { +/* name exppts cap hitpts Base Maxlvl, Factor, Offset, Range */ +{ "fighter", 80, 1310720, 12, 10, 30, 2, 1, 2 }, +{ "ranger", 140, 2293760, 8, 10, 20, 2, 1, 2 }, +{ "paladin", 120, 1966080, 10, 10, 23, 2, 1, 2 }, +{ "magic user", 130, 2129920, 6, 9, 18, 2, 1, 5 }, +{ "cleric", 110, 1802240, 8, 10, 19, 2, 1, 3 }, +{ "thief", 75, 1228800, 6, 10, 25, 2, 1, 4 }, +{ "assassin", 85, 1392640, 6, 10, 25, 2, 1, 4 }, +{ "druid", 100, 1638400, 8, 10, 19, 2, 1, 3 }, +{ "monk", 95, 1556480, 6, 10, 25, 2, 1, 3 }, +{ "monster", 0, 0, 8, 7, 30, 1, 0, 2 }, +}; + + +/* + * This array lists the names of the character's abilities. It must be ordered + * according to the ability definitions in rogue.h. + */ + +char *abilities[NUMABILITIES] = { + "Intelligence", "Strength", "Wisdom", "Dexterity", "Constitution", "Charisma" +}; + +/* + * 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"}, + { D_STARVATION, "starvation"}, + { D_FOOD_CHOKE, "choking on food"}, + { D_SCROLL, "reading a scroll"}, +}; + + +/* + * weapons and their attributes + */ +struct init_weps weaps[MAXWEAPONS] = { + { "mace", "2d4", "1d3", NONE, ISMETAL, 3, 100, 8 }, + { "long sword", "1d12", "1d2", NONE, ISMETAL, 4, 60, 18 }, + { "short bow", "1d1", "1d1", NONE, 0, 6, 40, 15 }, + { "arrow", "1d1", "1d6", BOW, ISMANY|ISMISL, 1, 5, 1 }, + { "dagger", "1d6", "1d4", NONE, ISMETAL|ISMISL|ISMANY,1,7,2}, + { "rock", "1d2", "1d4", SLING, ISMANY|ISMISL, 1, 5, 1 }, + { "two-handed sword","3d6", "1d2", NONE, ISMETAL, 5, 250, 40 }, + { "sling", "0d0", "0d0", NONE, 0, 1, 5, 1 }, + { "dart", "1d1", "1d3", NONE, ISMANY|ISMISL, 1, 5, 1 }, + { "crossbow", "1d1", "1d1", NONE, 0, 6, 100, 15 }, + { "crossbow bolt", "1d2", "1d12", CROSSBOW,ISMANY|ISMISL, 1, 7, 1 }, + { "spear", "1d8", "2d6", NONE, ISMANY|ISMETAL|ISMISL,2,20,8}, + { "trident", "3d4", "1d4", NONE, ISMETAL, 4, 50, 20 }, + { "spetum", "2d6", "1d3", NONE, ISMETAL, 4, 50, 20 }, + { "bardiche", "3d4", "1d2", NONE, ISMETAL, 4, 125, 20 }, + { "pike", "1d12", "1d8", NONE, ISMETAL, 4, 80, 18 }, + { "bastard sword", "2d8", "1d2", NONE, ISMETAL, 5, 100, 30 }, + { "halberd", "2d6", "1d3", NONE, ISMETAL, 4, 175, 10 }, + { "battle axe", "1d8", "1d3", NONE, ISMETAL, 3, 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", 50, 125, 0, 0 }, + { "magic mapping", 50, 150, 0, 0 }, + { "light", 70, 100, 21, 15 }, + { "hold monster", 30, 200, 33, 20 }, + { "sleep", 20, 150, 20, 0 }, + { "enchantment", 170, 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, 700, 0, 0 }, + { "protection", 30, 190, 20, 0 }, + { "trap finding", 10, 180, 0, 0 }, + { "runes", 10, 50, 0, 0 }, + { "charm monster", 20, 275, 0, 15 }, +}; + +struct magic_item p_magic[MAXPOTIONS] = { + { "clear thought", 50, 180, 27, 10 }, + { "gain ability", 160, 210, 15, 15 }, + { "see invisible", 50, 150, 25, 15 }, + { "healing", 160, 130, 27, 27 }, + { "monster detection", 60, 120, 0, 0 }, + { "magic detection", 60, 105, 0, 0 }, + { "raise level", 10, 450, 11, 10 }, + { "haste self", 90, 180, 30, 5 }, + { "restore abilities", 140, 140, 0, 10 }, + { "phasing", 50, 210, 21, 20 }, + { "invisibility", 50, 230, 0, 15 }, + { "flying", 40, 130, 0, 20 }, + { "food detection", 10, 150, 0, 0 }, + { "skill", 10, 200, 20, 10 }, + { "fire resistance", 10, 250, 0, 10 }, + { "cold resistance", 10, 250, 0, 10 }, + { "lightning protection", 10, 250, 0, 10 }, + { "poison", 30, 205, 0, 0 }, +}; + +struct magic_item r_magic[MAXRINGS] = { + { "protection", 50, 200, 33, 25 }, + { "add strength", 60, 200, 33, 25 }, + { "sustain ability", 50, 500, 0, 0 }, + { "searching", 50, 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", 30, 300, 0, 0 }, + { "add intelligence", 60, 240, 33, 25 }, + { "increase wisdom", 60, 220, 33, 25 }, + { "sustain health", 80, 500, 0, 0 }, + { "carrying", 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}, + { "free action", 10, 370, 0, 0}, + { "teleport control", 10, 700, 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", 80, 220, 25, 20 }, + { "drain life", 80, 210, 20, 0 }, + { "charging", 70, 400, 0, 0 }, + { "teleport", 90, 140, 25, 20 }, + { "cancellation", 40, 130, 0, 0 }, + { "confusion", 35, 100, 15, 0}, + { "disintegration", 10, 300, 33, 0}, + { "petrification", 30, 240, 0, 0}, + { "paralyzation", 30, 180, 15, 0}, + { "degeneration", 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}, + { "Eye of Vecna", 0, 50000, 0, 0}, + { "Axe of Aklad", 0, 50000, 0, 0}, + { "Quill of Nagrom", 0, 50000, 0, 0}, + { "Amulet of Stonebones", 0, 50000, 0, 0}, + { "Ring of Surtur", 0, 50000, 0, 0}, +}; +/* + * food and fruits that you get + */ +struct magic_item foods[MAXFOODS] = { + { "food ration", 800, 50, 750, 0}, + { "apple", 10, 20, 300, 0}, + { "banana", 10, 20, 300, 0}, + { "blueberry", 10, 20, 300, 0}, + { "candleberry", 10, 20, 300, 0}, + { "caprifig", 10, 20, 300, 0}, + { "dewberry", 10, 20, 300, 0}, + { "elderberry", 10, 20, 300, 0}, + { "gooseberry", 10, 20, 300, 0}, + { "guanabana", 10, 20, 300, 0}, + { "hagberry", 10, 20, 300, 0}, + { "jaboticaba", 10, 20, 300, 0}, + { "peach", 10, 20, 300, 0}, + { "pitanga", 10, 20, 300, 0}, + { "prickly pear", 10, 20, 300, 0}, + { "rambutan", 10, 20, 300, 0}, + { "sapodilla", 10, 20, 300, 0}, + { "soursop", 10, 20, 300, 0}, + { "strawberry", 10, 20, 300, 0}, + { "sweetsop", 10, 20, 300, 0}, + { "whortleberry", 10, 20, 300, 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 }, + { WS_MISSILE, 15, TYP_STICK, 0 }, + { S_TELEP, 20, TYP_SCROLL, 0 }, + { S_SLEEP, 20, TYP_SCROLL, 0 }, + { P_FLY, 20, TYP_POTION, 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 }, + { WS_CHARGE, 55, TYP_STICK, ISBLESSED }, + { 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_LIGHT, 10, TYP_SCROLL, ISBLESSED }, + { S_REMOVE, 15, TYP_SCROLL, 0 }, + { P_HEALING, 20, TYP_POTION, 0 }, + { P_FFIND, 24, TYP_POTION, 0 }, + { S_FINDTRAPS, 26, TYP_SCROLL, 0 }, + { S_CURING, 27, TYP_SCROLL, 0 }, + { WS_PARALYZE, 30, TYP_STICK, ISBLESSED }, + { S_MAP, 31, TYP_SCROLL, 0 }, + { P_CLEAR, 32, TYP_POTION, 0 }, + { WS_FEAR, 33, TYP_STICK, ISBLESSED }, + { P_SEEINVIS, 35, TYP_POTION, 0 }, + { P_RESTORE, 40, TYP_POTION, 0 }, + { P_PHASE, 43, TYP_POTION, 0 }, + { S_TELEP, 45, TYP_SCROLL, 0 }, + { WS_CURING, 50, TYP_STICK, ISBLESSED }, + { WS_DRAIN, 50, TYP_STICK, 0 }, +}; + +/* + * these are the spells that a druid can chant + */ +struct spells druid_spells[MAXCHANTS] = { + { P_TFIND, 3, TYP_POTION, 0 }, + { P_MFIND, 3, TYP_POTION, 0 }, + { S_LIGHT, 7, TYP_SCROLL, ISBLESSED }, + { S_CONFUSE, 10, TYP_SCROLL, 0 }, + { S_MAP, 10, TYP_SCROLL, 0 }, + { P_FFIND, 15, TYP_POTION, 0 }, + { P_HEALING, 20, TYP_POTION, 0 }, + { S_CURING, 25, TYP_SCROLL, 0 }, + { P_FLY, 27, TYP_POTION, ISBLESSED }, + { P_FIRE, 30, TYP_POTION, ISBLESSED }, + { P_COLD, 30, TYP_POTION, ISBLESSED }, + { P_LIGHTNING, 30, TYP_POTION, ISBLESSED }, + { S_HOLD, 35, TYP_SCROLL, 0 }, + { WS_CURING, 40, TYP_STICK, ISBLESSED }, + { P_PHASE, 45, TYP_POTION, 0 }, + { S_CHARM, 50, TYP_SCROLL, ISBLESSED }, +}; + + +/* + * these are the scrolls that a quill can write + */ +struct quill quill_scrolls[MAXQUILL] = { + { S_GFIND, 4, }, + { S_IDENT, 5, }, + { S_LIGHT, 6, }, + { S_REMOVE, 7, }, + { S_MAP, 10, }, + { S_SLEEP, 20, }, + { S_TELEP, 30, }, + { S_CONFUSE, 40, }, + { S_CURING, 50, }, + { S_HOLD, 70, }, + { S_PROTECT, 90, }, + { S_SCARE, 110, }, + { S_ALLENCH, 130, }, +}; + +char *cnames[NUM_CHARTYPES-1][NUM_CNAMES] = { +{ "Veteran", "Warrior", /* Fighter */ + "Swordsman", "Hero", + "Swashbuckler", "Myrmidon", + "Champion", "Superhero", + "Lord", "Lord", + "Lord", "Lord", + "Lord", "Lord", + "Lord", "Lord", + "Lord" +}, +{ "Runner", "Strider", /* Ranger */ + "Scout", "Courser", + "Tracker", "Guide", + "Pathfinder", "Ranger", + "Ranger Knight", "Ranger Lord", + "Ranger Lord", "Ranger Lord", + "Ranger Lord", "Ranger Lord", + "Ranger Lord", "Ranger Lord", + "Ranger Lord" +}, +{ "Gallant", "Keeper", /* Paladin */ + "Protector", "Defender", + "Warder", "Guardian", + "Chevalier", "Justiciar", + "Paladin", "Paladin", + "Paladin", "Paladin", + "Paladin", "Paladin", + "Paladin", "Paladin", + "Paladin" +}, +{ "Prestidigitator", "Evoker", /* Magic User */ + "Conjurer", "Theurgist", + "Thaumaturgist", "Magician", + "Enchanter", "Warlock", + "Sorcerer", "Necromancer", + "Wizard I", "Wizard II", + "Wizard III", "Wizard IV", + "Wizard V", "Wizard VI", + "High Wizard" +}, +{ "Acolyte", "Adept", /* Cleric */ + "Priest", "Curate", + "Prefect", "Canon", + "Lama", "Patriarch", + "High Priest", "High Priest", + "High Priest", "High Priest", + "High Priest", "High Priest", + "High Priest", "High Priest", + "High Priest" +}, +{ "Rogue", "Footpad", /* Thief */ + "Cutpurse", "Robber", + "Burglar", "Filcher", + "Sharper", "Magsman", + "Thief", "Master Thief", + "Master Thief", "Master Thief", + "Master Thief", "Master Thief", + "Master Thief", "Master Thief", + "Master Thief" +}, +{ "Bravo", "Rutterkin", /* Assassin */ + "Waghalter", "Murderer", + "Thug", "Killer", + "Cutthroat", "Executioner", + "Assassin", "Expert Assassin", + "Senior Assassin", "Chief Assassin", + "Prime Assassin", "Guildmaster Assassin", + "Grandfather Assassin", "Grandfather Assassin", + "Grandfather Assassin" +}, +{ "Aspirant", "Ovate", /* Druid */ + "Initiate 1st Circle", "Initiate 2nd Circle", + "Initiate 3rd Circle", "Initiate 4th Circle", + "Initiate 5th Circle", "Initiate 6th Circle", + "Initiate 7th Circle", "Initiate 8th Circle", + "Initiate 9th Circle", "Druid", + "Archdruid", "The Great Druid", + "The Great Druid", "The Great Druid", + "The Great Druid", +}, +{ "Novice", "Initiate", /* Monk */ + "Brother", "Disciple", + "Immaculate", "Master", + "Superior Master", "Master of Dragons", + "Master of North Wind", "Master of West Wind", + "Master of South Wind", "Master of East Wind", + "Master of Winter", "Master of Autumn", + "Master of Summer", "Master of Spring", + "Grand Master" +} +} ; + +struct h_list helpstr[] = { + '?', " prints help", + '/', " identify object", + '=', " identify screen character", + '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)", + CTRL('N'), " name object or monster", + 'm', " mark object (specific)", + 'o', " examine/set options", + 'c', " chant", + 'C', " cast a spell", + 'p', " pray", + 'a', " affect the undead", + '^', " set a trap", + 'G', " sense gold", + 'D', " dip something (into a pool)", + '*', " count up gold pieces", + 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('M'), " 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 dex, move, exp, level, "armor", hit_points, + "damage"}}, */ +{"unknown", + 0, FALSE, FALSE, '\0', "", + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + 0, + 0, 0, + {0, 0, 0, 0, 0, 0, HPT(""), + ""}}, +{"giant rat", + 0, TRUE, TRUE, 'R', "2-4", + {ISMEAN, CANDISEASE}, + 0, 0, + 1, + {10, 10, 6, 7, 1, 7, HPT("1d4"), + "1d3"}}, +{"kobold", + 10, TRUE, TRUE, 'K', "8", + {ISMEAN, CANSHOOT, CARRYWEAPON}, + 0, 0, + 1, + {9, 10, 6, 5, 1, 7, HPT("1d4"), + "1d4"}}, +{"gnome", + 10, TRUE, FALSE, 'G', "11-12", + {CANSHOOT, CARRYPOTION, CARRYWEAPON}, + 0, 0, + 1, + {10, 10, 6, 8, 1, 5, HPT("1d6"), + "1d6"}}, +{"bat", + 0, TRUE, TRUE, 'b', "2-4", + {ISMEAN, CANDISEASE, ISFLY, AREMANY}, + 0, 0, + 0, + {10, 10, 6, 5, 1, 10, HPT("1d4"), + "1d1"}}, +{"halfling", + 10, TRUE, FALSE, 'H', "11-12", + {CANSHOOT, CARRYPOTION, CARRYWEAPON}, + 0, 0, + 1, + {8, 10, 6, 9, 1, 4, HPT("1d6"), + "1d6"}}, +{"dwarf", + 15, TRUE, FALSE, 'D', "11-12", + {CANSHOOT, CARRYPOTION, CARRYWEAPON}, + 0, 0, + 1, + {10, 10, 6, 10, 1, 4, HPT("1d8"), + "1d8"}}, +{"orc", + 15, TRUE, TRUE, 'O', "8", + {ISMEAN, CANSHOOT, CARRYGOLD, CARRYWEAPON}, + 0, 0, + 1, + {12, 10, 6, 10, 1, 6, HPT("1d8"), + "1d8"}}, +{"xvart", + 100, TRUE, TRUE, 'x', "14-15", + {ISMEAN, CARRYDAGGER, AREMANY}, + 0, 0, + 1, + {8, 10, 6, 7, 1, 7, HPT("1d4"), + "1d4"}}, +{"manes", + 0, TRUE, TRUE, 'M', "2-4", + {ISMEAN, MAGICHIT, ISUNDEAD, TURNABLE}, + 0, 0, + 1, + {10, 10, 6, 18, 1, 7, HPT("1d8"), + "1d2/1d2/1d4"}}, +{"elf", + 50, TRUE, FALSE, 'E', "13-20", + {CANSHOOT, CARRYPOTION, CARRYSCROLL, CARRYWEAPON}, + 0, 0, + 2, + {12, 10, 6, 20, 1, 5, HPT("1d8+1"), + "1d10"}}, +{"hobgoblin", + 10, TRUE, TRUE, 'h', "8-10", + {ISMEAN, CANSHOOT, CARRYWEAPON}, + 0, 0, + 2, + {14, 10, 6, 20, 1, 5, HPT("1d8+1"), + "1d8"}}, +{"fire beetle", + 0, TRUE, TRUE, 'B', "0", + {ISMEAN, HASFIRE}, + 0, 0, + 2, + {10, 10, 6, 20, 1, 4, HPT("1d8+2"), + "2d4"}}, +{"giant ant", + 0, TRUE, TRUE, 'A', "1", + {ISMEAN, CANPOISON}, + 0, 0, + 3, + {10, 10, 6, 40, 2, 3, HPT("2d8"), + "1d6/1d6"}}, +{"zombie", + 0, TRUE, TRUE, 'Z', "0", + {ISMEAN, ISUNDEAD, TURNABLE}, + 0, 0, + 2, + {10, 10, 6, 20, 2, 8, HPT("2d8"), + "1d8"}}, +{"ear seeker", + 0, TRUE, TRUE, 'e', "0", + {ISMEAN, CANINFEST, AREMANY, CANSURPRISE}, + 0, 0, + 0, + {10, 10, 6, 5, 1, 9, HPT("1d1"), + "1d1"}}, +{"shrieker", + 0, TRUE, FALSE, 'S', "0", + {CANSHRIEK, NOMOVE, NOSTAB}, + 0, 0, + 1, + {10, 10, 6, 10, 3, 7, HPT("3d8"), + "0d0"}}, +{"stirge", + 0, TRUE, TRUE, 's', "1", + {ISMEAN, CANDRAW, ISFLY}, + 0, 0, + 2, + {10, 10, 6, 36, 4, 8, HPT("1d8+1"), + "1d3"}}, +{"gas spore", + 0, TRUE, FALSE, 'a', "0", + {ISMEAN, CANEXPLODE, CANINFEST, ISFLY}, + 0, 0, + 5, + {10, 10, 18, 90, 1, 9, HPT("1d1"), + "1d1"}}, +{"troglodyte", + 5, TRUE, TRUE, 'T', "5-7", + {ISMEAN, CANSMELL, CANSHOOT, CARRYGOLD, CARRYWEAPON}, + 0, 0, + 2, + {10, 10, 6, 36, 2, 5, HPT("2d8"), + "1d3/1d3/2d5"}}, +{"lemure", + 0, TRUE, FALSE, 'L', "2-4", + {ISMEAN, ISREGEN, MAGICHIT, ISUNDEAD, TURNABLE}, + 0, 0, + 3, + {10, 10, 9, 65, 3, 7, HPT("3d8"), + "1d3"}}, +{"bugbear", + 5, TRUE, TRUE, 'b', "5-8", + {ISMEAN, CANSHOOT, CANSURPRISE, CARRYGOLD, CARRYPOTION, + CARRYWEAPON}, + 0, 0, + 4, + {16, 10, 6, 135, 3, 5, HPT("3d8+1"), + "2d4"}}, +{"wererat", + 20, TRUE, TRUE, 'r', "11-12", + {ISMEAN, MAGICHIT, CARRYFOOD, CANSUMMON}, + "giant rat", 2, + 4, + {10, 10, 6, 150, 3, 6, HPT("3d8+1"), + "1d8"}}, +{"ghoul", + 0, TRUE, TRUE, 'g', "5-7", + {ISMEAN, CANPARALYZE, ISUNDEAD, TURNABLE}, + 0, 0, + 2, + {10, 10, 6, 65, 2, 6, HPT("2d8"), + "1d3/1d3/1d6"}}, +{"leprechaun", + 100, TRUE, FALSE, 'l', "15-16", + {CARRYGOLD, STEALGOLD}, + 0, 0, + 1, + {10, 10, 3, 80, 6, 3, HPT("1d4+1"), + "0d0"}}, +{"gray ooze", + 50, TRUE, FALSE, 'o', "1", + {ISMEAN, CANRUST, ISSCAVENGE, NOCOLD, NOFIRE, NOSTAB,CARRYFOOD}, + 0, 0, + 5, + {10, 10, 10, 200, 3, 8, HPT("3d8+3"), + "2d8"}}, +{"giant tick", + 0, TRUE, TRUE, 't', "0", + {ISMEAN, CANDRAW, CANDISEASE}, + 0, 0, + 2, + {10, 10, 9, 105, 3, 3, HPT("3d8"), + "1d4"}}, +{"ogre", + 50, TRUE, TRUE, 'O', "5-7", + {ISMEAN, CARRYGOLD, CARRYWEAPON}, + 0, 0, + 5, + {18, 10, 7, 90, 4, 5, HPT("4d8+1"), + "1d10"}}, +{"very young dragon", + 10, TRUE, FALSE, 'd', "15-16", + {ISMEAN, CANBRANDOM, ISGREED, CARRYGOLD}, + 0, 0, + 9, + {10, 10, 6, 100, 9, -1, HPT("9d1"), + "1d4/1d4/2d4"}}, +{"centaur", + 15, TRUE, FALSE, 'C', "5-10", + {CANSHOOT, CARRYPOTION, CARRYGOLD, CARRYWEAPON}, + 0, 0, + 4, + {10, 10, 2, 85, 4, 4, HPT("4d8"), + "1d6/1d6"}}, +{"nymph", + 100, TRUE, FALSE, 'N', "15-16", + {STEALMAGIC, CARRYSCROLL, CARRYPOTION, CARRYSTICK}, + 0, 0, + 3, + {10, 10, 6, 350, 4, 9, HPT("3d8"), + "0d0"}}, +{"violet fungi", + 0, TRUE, FALSE, 'F', "0", + {ISMEAN, CANHOLD, NOMOVE, CANROT, NOSTAB}, + 0, 0, + 4, + {10, 10, 6, 135, 3, 7, HPT("3d8"), + "5d1"}}, +{"gelatinous cube", + 90, TRUE, TRUE, 'c', "0", + {ISMEAN, ISSCAVENGE, CANPARALYZE, NOSTAB, CARRYFOOD}, + 0, 0, + 4, + {10, 10, 8, 150, 4, 8, HPT("4d8"), + "2d4"}}, +{"fire toad", + 0, TRUE, TRUE, 'f', "5-7", + {ISMEAN, CANBFIRE, NOFIRE}, + 0, 0, + 4, + {10, 10, 6, 150, 4, 10, HPT("4d8+1"), + "2d4"}}, +{"blink dog", + 0, TRUE, TRUE, 'B', "8-10", + {ISMEAN, CANBLINK}, + 0, 0, + 5, + {10, 10, 6, 170, 4, 5, HPT("4d8"), + "1d6"}}, +{"rust monster", + 0, TRUE, TRUE, 'R', "1", + {ISMEAN, CANRUST}, + 0, 0, + 4, + {10, 10, 6, 185, 5, 2, HPT("3d8"), + "0d0/0d0"}}, +{"ghast", + 0, TRUE, TRUE, 'G', "11-12", + {CANPARALYZE, CANSTINK, ISMEAN, ISUNDEAD, TURNABLE}, + 0, 0, + 4, + {10, 10, 6, 190, 4, 4, HPT("4d8"), + "1d4/1d4/1d8"}}, +{"blindheim", + 0, TRUE, FALSE, 'b', "1", + {CANBLIND, ISMEAN}, + 0, 0, + 4, + {8, 10, 6, 200, 2, 1, HPT("4d8+2"), + "1d8"}}, +{"shadow", + 0, TRUE, TRUE, 'S', "5-7", + {ISSHADOW, ISMEAN, CANCHILL, ISUNDEAD, TURNABLE}, + 0, 0, + 4, + {10, 10, 6, 255, 3, 7, HPT("3d8+3"), + "1d4+1"}}, +{"gargoyle", + 5, TRUE, TRUE, 'g', "5-7", + {ISMEAN, MAGICHIT}, + 0, 0, + 5, + {10, 10, 6, 165, 4, 5, HPT("4d8+4"), + "1d3/1d3/1d6/1d4"}}, +{"quasit", + 30, TRUE, TRUE, 'Q', "5-7", + {ISMEAN, ISREGEN, MAGICHIT, CANSURPRISE, CANITCH, CARRYSTICK, + CARRYSCROLL, CARRYGOLD, CARRYPOTION, NOCOLD, NOFIRE, NOBOLT}, + 0, 0, + 3, + {10, 10, 6, 325, 7, 2, HPT("3d8"), + "1d2/1d2/1d4"}}, +{"imp", + 25, TRUE, TRUE, 'I', "8-10", + {ISMEAN, ISREGEN, MAGICHIT, CANPOISON, CANSURPRISE, + CANTELEPORT, CARRYRING, CARRYSTICK, NOCOLD, NOBOLT, NOFIRE}, + 0, 0, + 3, + {10, 10, 6, 275, 2, 2, HPT("2d8+2"), + "1d4"}}, +{"su-monster", 10, TRUE, TRUE, 's', "8-10", + {ISMEAN, CARRYSCROLL, CARRYGOLD, CARRYFOOD}, + 0, 0, + 6, + {10, 10, 5, 225, 5, 6, HPT("5d8+5"), + "4d4/2d4"}}, +{"owlbear", + 5, TRUE, TRUE, 'O', "5-7", + {ISMEAN, CANHUG, CARRYRING, CARRYFOOD}, + 0, 0, + 8, + {10, 10, 8, 225, 5, 5, HPT("5d8+2"), + "1d6/1d6/2d6"}}, +{"doppleganger", + 0, TRUE, TRUE, 'D', "11-12", + {ISMEAN, CANSURPRISE}, + 0, 0, + 4, + {10, 10, 6, 330, 10, 5, HPT("4d8"), + "1d12"}}, +{"yeti", + 30, TRUE, TRUE, 'Y', "8-10", + {ISMEAN, CANPARALYZE, CANHUG, NOCOLD, CANSURPRISE, + CARRYGOLD, CARRYPOTION}, + 0, 0, + 8, + {13, 10, 6, 500, 6, 6, HPT("4d8+4"), + "1d6/1d6"}}, +{"leucrotta", + 0, TRUE, FALSE, 'L', "8-10", + {ISMEAN}, + 0, 0, + 8, + {10, 10, 2, 475, 6, 4, HPT("6d8+1"), + "3d6/1d6/1d6"}}, +{"cockatrice", + 0, TRUE, TRUE, 'C', "1", + {ISMEAN, TOUCHSTONE}, + 0, 0, + 5, + {10, 10, 5, 315, 5, 6, HPT("5d8"), + "1d3"}}, +{"wight", + 0, TRUE, TRUE, 'W', "8-10", + {ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE}, + 0, 0, + 5, + {10, 10, 6, 540, 4, 5, HPT("4d8+3"), + "1d4"}}, +{"troll", + 50, TRUE, FALSE, 'T', "5-7", + {ISMEAN, ISREGEN, CARRYFOOD, CARRYGOLD}, + 0, 0, + 8, + {18, 10, 8, 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, 10, 6, 800, 4, 4, HPT("4d8"), + "2d4"}}, +{"wraith", + 0, TRUE, TRUE, 'w', "11-12", + {ISMEAN, CANDRAIN, MAGICHIT, ISUNDEAD, TURNABLE}, + 0, 0, + 6, + {10, 10, 6, 575, 5, 4, HPT("5d8+3"), + "1d6"}}, +{"mimic", + 20, TRUE, FALSE, 'M', "2-10", + {ISMEAN, ISDISGUISE, NODETECT, CANHOLD, CARRYFOOD, CARRYRING, + CARRYGOLD, NOMOVE}, + 0, 0, + 12, + {10, 10, 6, 1300, 9, 7, HPT("10d8"), + "3d4"}}, +{"erinyes", + 25, TRUE, TRUE, 'E', "8-10", + {ISMEAN, CANFRIGHTEN, CANSUMMON, TURNABLE, CANPAIN, CANSEE, + NOFIRE, CANTELEPORT, CARRYRING, CARRYSTICK}, + "ghoul", 3, + 8, + {10, 10, 6, 875, 7, 2, HPT("6d8+6"), + "2d4"}}, +{"lava child", + 0, TRUE, TRUE, 'l', "8-10", + {ISMEAN, NOMETAL}, + 0, 0, + 8, + {10, 10, 6, 950, 5, 4, HPT("5d8+1"), + "1d6/1d6/2d12"}}, +{"basilisk", + 0, TRUE, FALSE, 'B', "1", + {ISMEAN, LOOKSTONE}, + 0, 0, + 8, + {10, 10, 6, 1000, 6, 4, HPT("6d8+1"), + "1d10"}}, +{"mummy", + 20, TRUE, FALSE, 'm', "5-7", + {ISMEAN,CANINFEST, MAGICHIT, CANFRIGHTEN, HALFDAMAGE, ISUNDEAD, + TURNABLE, CARRYRING}, + 0, 0, + 8, + {10, 10, 6, 1150, 6, 3, HPT("6d8+3"), + "1d12"}}, +{"otyugh", + 0, TRUE, TRUE, 'o', "5-10", + {ISMEAN, CANDISEASE}, + 0, 0, + 8, + {10, 10, 6, 700, 7, 3, HPT("7d8"), + "1d8/1d8/1d4+1"}}, +{"adult dragon", + 30, TRUE, FALSE, 'd', "15-16", + {ISMEAN, CANBRANDOM, ISGREED, CANFRIGHTEN, CARRYGOLD, + CARRYPOTION}, + 0, 0, + 9, + {10, 10, 6, 1000, 9, -1, HPT("45d1"), + "1d6/1d6/2d6"}}, +{"invisible stalker", + 0, TRUE, TRUE, 'i', "13-14", + {ISMEAN, ISINVIS}, + 0, 0, + 10, + {10, 10, 4, 1090, 8, 3, HPT("8d8"), + "4d4"}}, +{"xorn", + 0, TRUE, TRUE, 'X', "8-10", + {ISMEAN, CANINWALL, NOCOLD, NOFIRE, CANSURPRISE, NOBOLT}, + 0, 0, + 10, + {10, 10, 6, 1275, 7, -2, HPT("7d8+7"), + "1d3/1d3/1d3/4d6"}}, +{"chimera", + 0, TRUE, FALSE, 'c', "2-4", + {ISMEAN, CANBFIRE, NOFIRE}, + 0, 0, + 12, + {10, 10, 6, 1000, 9, 6, HPT("9d8"), + "1d3/1d3/1d4/1d4/2d4/3d4"}}, +{"horned devil", + 5, TRUE, TRUE, 'H', "13-14", + {ISMEAN, CANFRIGHTEN, CANINFEST, CANPOISON, MAGICHIT, CANSUMMON, + NOFIRE, CANTELEPORT, CARRYGOLD, CARRYRING, CARRYSTICK}, + "wight", 2, + 6, + {10, 10, 6, 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, 10, 6, 1650, 7, 2, HPT("7d8+3"), + "1d8"}}, +{"will-o-wisp", 100, TRUE, FALSE, 'W', "15-16", + {ISMEAN, CANSURPRISE, ISFLY, CARRYGOLD, CARRYMISC, NOBOLT}, + 0, 0, + 12, + {10, 10, 5, 2000, 9, -8, HPT("9d8"), + "2d8"}}, +{"lamia", + 0, TRUE, TRUE, 'L', "13-14", + {ISMEAN, TAKEWISDOM}, + 0, 0, + 9, + {10, 10, 2, 1500, 9, 3, HPT("9d8"), + "1d4/1d4"}}, +{"neo-otyugh", + 0, TRUE, TRUE, 'N', "10-12", + {ISMEAN, CANDISEASE}, + 0, 0, + 10, + {12, 10, 6, 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, 10, 6, 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, 10, 6, 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, 10, 7, 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, 10, 6, 1700, 8, 2, HPT("8d8+8"), + "3d4/3d4/2d5"}}, +{"ettin", + 0, TRUE, TRUE, 'e', "5-7", + {ISMEAN, CANSHOOT, AREMANY}, + 0, 0, + 14, + {10, 10, 6, 1950, 10, 3, HPT("10d8"), + "2d8/3d6"}}, +{"black pudding", + 30, TRUE, FALSE, 'P', "0", + {ISMEAN, CANRUST, NOCOLD, BOLTDIVIDE, BLOWDIVIDE, ISSCAVENGE, + NOSTAB, CARRYSCROLL, CARRYPOTION, CARRYRING}, + 0, 0, + 14, + {10, 10, 6, 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, 10, 6, 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, 10, 6, 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, 10, 6, 2800, 9, -1, HPT("9d8"), + "2d4"}}, +{"white pudding", + 30, TRUE, FALSE, 'w', "0", + {ISMEAN, CANDISSOLVE, NOCOLD, BOLTDIVIDE, BLOWDIVIDE, + ISSCAVENGE, NOSTAB, CARRYRING, CARRYSCROLL, + CARRYPOTION}, + 0, 0, + 14, + {10, 10, 6, 2200, 9, 8, HPT("10d8"), + "7d4"}}, +{"vampire", + 20, TRUE, TRUE, 'v', "15-16", + {ISMEAN, ISREGEN, CANSUCK, ISUNDEAD, TURNABLE, CARRYMISC}, + 0, 0, + 12, + {20, 10, 6, 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, 10, 5, 5000, 12, 0, HPT("10d8"), + "1d12"}}, +{"intellect devourer", + 0, TRUE, FALSE, 'D', "11-12", + {ISMEAN, TAKEINTEL, CMAGICHIT, HALFDAMAGE, CANSURPRISE, NOFIRE, + NOCOLD}, + 0, 0, + 9, + {10, 10, 4, 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, TOUCHSLOW, CANTELEPORT, CARRYSCROLL, CARRYRING, + CARRYSTICK}, + "bone devil", 2, + 16, + {20, 10, 6, 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, 10, 6, 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, 10, 6, 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, ISFLY}, + "barbed devil", 3, + 18, + {22, 10, 6, 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, 10, 6, 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, 10, 6, 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, CARRYSTICK}, + "specter", 2, + 16, + {10, 10, 6, 20000, 17, 0, HPT("11d8"), + "1d10"}}, +{"titan", + 80, TRUE, FALSE, 't', "17-20", + {ISMEAN, ISSHADOW, CANSEE, CANMISSILE, CARRYRING, CARRYSTICK, + CANTELEPORT}, + 0, 0, + 30, + {13, 10, 5, 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, 10, 6, 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, 10, 6, 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, 10, 6, 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, 10, 6, 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, 10, 6, 20000, 11, -1, HPT("0d8+88"), + "1d6/1d6/5d6"}}, +{"frost giant", + 50, TRUE, TRUE, 'F', "5-10", + {ISMEAN, NOCOLD, CARRYGOLD, AREMANY}, + 0, 0, + 40, + {25, 10, 5, 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, 10, 6, 20000, 11, -1, HPT("0d8+88"), + "1d8/1d8/3d10"}}, +{"ancient gold dragon", + 50, TRUE, FALSE, 'G', "17-18", + {CANBFIRE, CANBGAS, ISGREED, CANSEE, CANMISSILE, NOFIRE, NOGAS, + CARRYGOLD, CARRYPOTION, CARRYRING, CARRYSTICK, CANTELEPORT}, + 0, 0, + 50, + {10, 10, 6, 20000, 12, -2, HPT("0d8+96"), + "1d8/1d8/6d6"}}, +{"fire giant", + 30, TRUE, TRUE, 'f', "6-10", + {ISMEAN, CARRYGOLD, NOFIRE, AREMANY}, + 0, 0, + 45, + {27, 10, 5, 26000, 15, 4, HPT("11d8+5"), + "5d6"}}, +{"storm giant", + 30, TRUE, TRUE, 's', "8-10", + {ISMEAN, NOBOLT, CANBBOLT, CARRYRING}, + 0, 0, + 50, + {30, 10, 5, 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, + CARRYMDAGGER, CARRYMISC, CARRYPOTION, CANBSTAB, ISSCAVENGE, + NODETECT}, + 0, 0, + 0, + {9, 18, 8, 300000, 22, -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, CANSMELL, CANSTINK, + NOFIRE}, + "black pudding", 4, + 0, + {18, 18, 5, 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, NOFIRE, + CARRYMISC, CARRYHORN}, + "ice devil", 5, + 0, + {18, 18, 5, 110000, 30, -3, HPT("0d8+133"), + "3d6/3d6/2d4"}}, +{"arch devil (Dispater)", + 100, TRUE, FALSE, 'd', "18", + {ISMEAN, ISUNIQUE, CANSEE, CANFRIGHTEN, CANHUH, BMAGICHIT, + CANSUMMON, CARRYSTICK, NOFIRE, CANTELEPORT, CARRYMISC}, + "ghost", 9, + 0, + {18, 18, 5, 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, NOFIRE}, + "lich", 5, + 0, + {18, 18, 5, 130000, 23, -5, HPT("0d8+100"), + "3d6/3d6"}}, +{"witch (Emori)", + 50, TRUE, TRUE, 'w', "18", + {ISMEAN, CANMISSILE, ISINVIS, CANBBOLT, CANBFIRE, CANBICE, + CANSEE, CANSUMMON, ISUNIQUE, CANSNORE, ISFLY, TAKEINTEL, + CANDANCE, CANDISEASE, NOBOLT, NOCOLD, NOFIRE, CARRYCLOAK, + ISCLEAR, CARRYSCROLL, CARRYSTICK, CANTELEPORT, CANSLOW}, + "shambling mound", 7, + 0, + {21, 12, 6, 140000, 25, 0, HPT("0d8+102"), + "1d4/1d4"}}, +{"cleric of Thoth (Heil)", + 100, TRUE, TRUE, 'h', "16", + {ISMEAN, CANSEE, NOFEAR, ISREGEN, CANHOLD, CANBFIRE, ISUNIQUE, + DOUBLEDRAIN, CANSUMMON, NOFIRE, TOUCHFEAR, CANDISEASE, CANSUCK, + CANSEE, TAKEWISDOM, CARRYANKH, CARRYRING, ISINVIS, ISFLY}, + "vampire", 9, + 0, + {25, 15, 6, 150000, 25, -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, CANTELEPORT, + CARRYSTAFF, CARRYSTICK, NOSLOW, NOBOLT, NOCOLD}, + "ancient black dragon", 5, + 0, + {18, 16, 6, 160000, 21, -4, 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, 18, 5, 170000, 20, -2, HPT("0d8+156"), + "8d8+48/4d4+36"}}, +{"lesser god (Hruggek)", + 100, TRUE, FALSE, 'H', "17", + {ISMEAN, CANSEE, ISUNIQUE, CANSUMMON, ISREGEN, CANFRIGHTEN, + CANTELEPORT, CARRYMISC, CARRYMSTAR, CANSMELL, CANBLINK}, + "purple worm", 6, + 0, + {19, 18, 5, 180000, 25, 0, HPT("0d8+221"), + "2d8/2d8"}}, +{"lesser god (Kurtulmak)", + 100, TRUE, TRUE, 'K', "19", + {ISMEAN, CANFRIGHTEN, CANPOISON, CANSEE, ISUNIQUE, CANSUMMON, + CANTELEPORT, CARRYMISC, CANBLINK}, + "lich", 3, + 0, + {19, 18, 5, 190000, 27, 0, HPT("0d8+219"), + "2d12/1d6"}}, +{"demigod (Vaprak \"The Destroyer\")", + 100, TRUE, TRUE, 'v', "18", + {ISMEAN, ISUNIQUE, ISREGEN, MAGICHIT, CANSEE, CANSUMMON, + CANTELEPORT, CARRYMISC, CANSMELL}, + "troll", 9, + 0, + {18, 18, 5, 200000, 26, 0, HPT("0d8+198"), + "2d10/2d10/1d12"}}, +{"hero (Aklad)", + 100, TRUE, FALSE, 'k', "16", + {ISMEAN, ISUNIQUE, CANSUMMON, ISREGEN, NOCOLD, NOBOLT, NOFIRE, + NOPARALYZE, NOFEAR, CANSEE, ISCLEAR, CARRYAXE, CARRYRING, + CARRYMISC, CANBLINK}, + "ancient green dragon", 4, + 0, + {25, 16, 4, 210000, 25, -10, HPT("0d8+196"), + "2d8+23/2d8+23/1d6+19/1d6+19"}}, +{"magician/thief (Nagrom)", + 100, TRUE, TRUE, 'N', "19", + {ISMEAN, ISUNIQUE, STEALMAGIC, ISINVIS, CANSUMMON, ISREGEN, + CANMISSILE, CANSEE, CARRYQUILL, CARRYSCROLL, CARRYRING, ISFLY, + CANBSTAB, CANBFIRE, CANBBOLT, CANBICE, NOCOLD, NOBOLT, NOFIRE, + CANSURPRISE, NODETECT, CANTELEPORT, CANSLOW, + CARRYSTICK}, + "ancient blue dragon", 5, + 0, + {18, 18, 8, 220000, 26, -2, HPT("0d8+150"), + "1d10+3/1d4+3"}}, +{"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, + CARRYMISC, CANTELEPORT, ISFLY}, + "ancient gold dragon", 4, + 0, + {18, 18, 5, 230000, 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, CARRYSTICK, CANDRAIN}, + "ice devil", 9, + 0, + {18, 18, 5, 240000, 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, ISFLY}, + "ancient red dragon", 6, + 0, + {18, 18, 5, 250000, 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, NOFIRE, + CARRYMISC, ISFLY, CARRYSTICK}, + "vampire", 9, + 0, + {18, 18, 5, 260000, 27, -6, HPT("0d8+120"), + "1d10+3/2d4"}}, +{"arch devil (Asmodeus)", + 100, TRUE, FALSE, 'A', "20", + {ISMEAN, ISUNIQUE, CANSEE, ISSHADOW, CANHOLD, BMAGICHIT, + CANFRIGHTEN, CANHUH, TOUCHSLOW, CANSUMMON, NOFIRE, + CANTELEPORT, CARRYROD, CARRYMISC, CARRYSTICK, CANDRAIN}, + "pit fiend", 5, + 0, + {18, 18, 5, 270000, 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, NOFIRE, + CANDISEASE, CARRYMISC, CANSUCK, CARRYSTICK}, + "pit fiend", 9, + 0, + {18, 18, 5, 280000, 45, -8, HPT("0d8+200"), + "1d6/1d6"}}, +{"greater god (Maglubiyet)", + 100, TRUE, FALSE, 'M', "19", + {ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON, + CANTELEPORT, CARRYMISC, CANFRIGHTEN, CARRYSTICK}, + "lich", 6, + 0, + {19, 18, 5, 290000, 45, -1, HPT("0d8+350"), + "2d10/2d10"}}, +{"greater god (Gruumsh)", + 100, TRUE, FALSE, 'G', "19", + {ISMEAN, ISUNIQUE, CMAGICHIT, CANSEE, ISREGEN, CANSUMMON, + CANTELEPORT, CARRYMISC, CANFRIGHTEN, CARRYSTICK}, + "lich", 9, + 0, + {19, 18, 5, 300000, 45, -1, HPT("0d8+350"), + "3d10/3d10"}}, +{"lesser god (Thrym)", + 100, TRUE, FALSE, 'T', "16", + {ISMEAN, NOCOLD, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, + CANSUMMON, CARRYMISC, CANTELEPORT, CANFRIGHTEN, CARRYSTICK}, + "frost giant", 9, + 0, + {25, 18, 5, 310000, 45, -2, HPT("0d8+360"), + "4d10/4d10"}}, +{"lesser god (Surtur)", + 100, TRUE, FALSE, 't', "19", + {ISMEAN, NOFIRE, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, + CANFRIGHTEN, CANSUMMON, CANMISSILE, CANTELEPORT, CARRYMISC, + CARRYSTICK, CARRYFOOD, CARRYSURTURRING}, + "fire giant", 9, + 0, + {25, 18, 5, 320000, 45, -2, HPT("0d8+380"), + "5d10/5d10"}}, +{"lesser god (Skoraeus Stonebones)", + 100, TRUE, FALSE, 'b', "19", + {ISMEAN, ISUNIQUE, ISREGEN, CMAGICHIT, CANSEE, CANSUMMON, ISFLY, + CANMISSILE, CANINWALL, CANTELEPORT, CARRYMISC, CARRYSTICK, + CANFRIGHTEN, CARRYBAMULET}, + "storm giant", 9, + 0, + {25, 25, 6, 330000, 45, -1, HPT("0d8+380"), + "6d10/6d10"}}, +{"ruler of greater titans (Yendor)", + 100, TRUE, TRUE, 'y', "25", + {ISMEAN, CANINWALL, ISUNIQUE, ISREGEN, CMAGICHIT,ISFLY, + CANSUMMON, CANMISSILE, CANFRIGHTEN, CANBFIRE, NOFIRE, + CANHOLD, CARRYYAMULET, CANSEE, CANDANCE, ISSHADOW, + CANTELEPORT, CARRYMISC, CARRYRING, CARRYSTICK}, + "titan", 15, + 0, + {25, 25, 6, 340000, 45, -6, HPT("0d8+400"), + "7d10/7d10"}}, +{"the creator of liches (Vecna)", + 100, TRUE, TRUE, 'V', "25", + {ISMEAN, CANINWALL, ISUNIQUE, ISREGEN, CMAGICHIT, CANSNORE, + CANSUMMON, CANMISSILE, CANFRIGHTEN, CANBFIRE, NOFIRE, ISFLY, + CANHOLD, CARRYEYE, CANSEE, CANDANCE, ISINVIS, HALFDAMAGE, + CANTELEPORT, CARRYMISC, CARRYRING, CARRYSTICK, LOOKSTONE, + CANSLOW, CANBLIND}, + "lich", 15, + 0, + {25, 25, 6, 350000, 47, -8, HPT("0d8+450"), + "6d10/6d10"}}, +{"quartermaster", + 0, FALSE, TRUE, 'q', "18", + {CANSELL, ISCLEAR, CANTELEPORT, ISFLY, CANSEE, STEALMAGIC, + NOFEAR, CANBSTAB}, + 0, 0, + 50, + {25, 18, 12, 20, 1, -4, HPT("1d8+1"), + "1d10"}}, +};