From f222023bd8fd9432d9dfc09f288407bbfa9cd94b Mon Sep 17 00:00:00 2001 From: keni Date: Wed, 17 Oct 2018 15:37:24 -0400 Subject: [PATCH] Deprecate "makedefs -m". mons[].difficulty takes over for monstr[] Invoking "makedefs -m" gives a deprecation message; it is also included in the (now mostly empty) monstr.c. Ports should now remove "makedefs -m" from their build procedures but this commit does not include that change. --- include/permonst.h | 3 +- src/allmain.c | 3 +- src/end.c | 6 +- src/makemon.c | 10 +- src/monst.c | 801 +++++++++++++++++++++++---------------------- src/muse.c | 18 +- src/pray.c | 5 +- src/wizard.c | 7 +- util/makedefs.c | 114 ++----- 9 files changed, 445 insertions(+), 522 deletions(-) diff --git a/include/permonst.h b/include/permonst.h index cd1c73fff..b22269e68 100644 --- a/include/permonst.h +++ b/include/permonst.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 permonst.h $NHDT-Date: 1432512778 2015/05/25 00:12:58 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */ +/* NetHack 3.6 permonst.h $NHDT-Date: 1539804913 2018/10/17 19:35:13 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.12 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -58,6 +58,7 @@ struct permonst { unsigned long mflags1, /* boolean bitflags */ mflags2; /* more boolean bitflags */ unsigned short mflags3; /* yet more boolean bitflags */ + uchar difficulty; /* toughness (formerly from makedefs -m) */ #ifdef TEXTCOLOR uchar mcolor; /* color to use */ #endif diff --git a/src/allmain.c b/src/allmain.c index d0b2c5302..39f38e1f7 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 allmain.c $NHDT-Date: 1518193644 2018/02/09 16:27:24 $ $NHDT-Branch: githash $:$NHDT-Revision: 1.86 $ */ +/* NetHack 3.6 allmain.c $NHDT-Date: 1539804859 2018/10/17 19:34:19 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.89 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -35,7 +35,6 @@ boolean resuming; */ decl_init(); monst_init(); - monstr_init(); /* monster strengths */ objects_init(); /* if a save file created in normal mode is now being restored in diff --git a/src/end.c b/src/end.c index 7b10d2c0e..93216c76c 100644 --- a/src/end.c +++ b/src/end.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 end.c $NHDT-Date: 1528332335 2018/06/07 00:45:35 $ $NHDT-Branch: NetHack-3.6.2 $:$NHDT-Revision: 1.141 $ */ +/* NetHack 3.6 end.c $NHDT-Date: 1539804880 2018/10/17 19:34:40 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.146 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1574,8 +1574,6 @@ int status; nethack_exit(status); } -extern const int monstr[]; - enum vanq_order_modes { VANQ_MLVL_MNDX = 0, VANQ_MSTR_MNDX, @@ -1620,7 +1618,7 @@ const genericptr vptr2; break; case VANQ_MSTR_MNDX: /* sort by monster toughness */ - mstr1 = monstr[indx1], mstr2 = monstr[indx2]; + mstr1 = mons[indx1].difficulty, mstr2 = mons[indx2].difficulty; res = mstr2 - mstr1; /* monstr high to low */ break; case VANQ_ALPHA_SEP: diff --git a/src/makemon.c b/src/makemon.c index a589d65b7..30630fb16 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 makemon.c $NHDT-Date: 1537477761 2018/09/20 21:09:21 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.124 $ */ +/* NetHack 3.6 makemon.c $NHDT-Date: 1539804904 2018/10/17 19:35:04 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.127 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -25,12 +25,10 @@ STATIC_DCL void FDECL(m_initinv, (struct monst *)); STATIC_DCL boolean FDECL(makemon_rnd_goodpos, (struct monst *, unsigned, coord *)); -extern const int monstr[]; - #define m_initsgrp(mtmp, x, y) m_initgrp(mtmp, x, y, 3) #define m_initlgrp(mtmp, x, y) m_initgrp(mtmp, x, y, 10) -#define toostrong(monindx, lev) (monstr[monindx] > lev) -#define tooweak(monindx, lev) (monstr[monindx] < lev) +#define toostrong(monindx, lev) (mons[monindx].difficulty > lev) +#define tooweak(monindx, lev) (mons[monindx].difficulty < lev) boolean is_home_elemental(ptr) @@ -1652,7 +1650,7 @@ int spc; if (mk_gen_ok(last, G_GONE, mask)) { /* consider it */ if (num && toostrong(last, maxmlev) - && monstr[last] != monstr[last - 1] && rn2(2)) + && mons[last].difficulty != mons[last - 1].difficulty && rn2(2)) break; num += mons[last].geno & G_FREQ; } diff --git a/src/monst.c b/src/monst.c index 7f998c0d3..c513f73b4 100644 --- a/src/monst.c +++ b/src/monst.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 monst.c $NHDT-Date: 1510531569 2017/11/13 00:06:09 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.59 $ */ +/* NetHack 3.6 monst.c $NHDT-Date: 1539804880 2018/10/17 19:34:40 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.61 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Michael Allison, 2006. */ /* NetHack may be freely redistributed. See license for details. */ @@ -32,21 +32,21 @@ void NDECL(monst_init); * Entry Format: (from permonst.h) * * name, symbol (S_* defines), - * difficulty level, move rate, armor class, magic resistance, + * base monster level, move rate, armor class, magic resistance, * alignment, creation/geno flags (G_* defines), * 6 * attack structs ( type , damage-type, # dice, # sides ), * weight (WT_* defines), nutritional value, extension length, * sounds made (MS_* defines), physical size (MZ_* defines), * resistances, resistances conferred (both MR_* defines), - * 3 * flag bitmaps (M1_*, M2_*, and M3_* defines respectively) - * symbol color (C(x) macro) + * 3 * flag bitmaps (M1_*, M2_*, and M3_* defines respectively), + * difficulty, symbol color (C(x) macro) * * For AT_BREA attacks, '# sides' is ignored; 6 is used for most * damage types, 25 for sleep, not applicable for death or poison. */ -#define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, col) \ +#define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col) \ { \ - nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, C(col) \ + nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, C(col) \ } /* LVL() and SIZ() collect several fields to cut down on # of args for MON() */ @@ -110,37 +110,37 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, - CLR_BROWN), + 4, CLR_BROWN), MON("killer bee", S_ANT, LVL(1, 18, -1, 0, 0), (G_GENO | G_LGROUP | 2), A(ATTK(AT_STNG, AD_DRST, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1, 5, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL | M1_FLY | M1_NOHANDS | M1_POIS, M2_HOSTILE | M2_FEMALE, 0, - CLR_YELLOW), + 5, CLR_YELLOW), MON("soldier ant", S_ANT, LVL(3, 18, 3, 0, 0), (G_GENO | G_SGROUP | 2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_DRST, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(20, 5, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_BLUE), + M2_HOSTILE, 0, 6, CLR_BLUE), MON("fire ant", S_ANT, LVL(3, 18, 3, 10, 0), (G_GENO | G_SGROUP | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_BITE, AD_FIRE, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 10, MS_SILENT, MZ_TINY), MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 6, CLR_RED), MON("giant beetle", S_ANT, LVL(5, 6, 4, 0, 0), (G_GENO | 3), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0, - CLR_BLACK), + 6, CLR_BLACK), MON("queen bee", S_ANT, LVL(9, 24, -4, 0, 0), (G_GENO | G_NOGEN), A(ATTK(AT_STNG, AD_DRST, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1, 5, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL | M1_FLY | M1_NOHANDS | M1_OVIPAROUS | M1_POIS, - M2_HOSTILE | M2_FEMALE | M2_PRINCE, 0, HI_LORD), + M2_HOSTILE | M2_FEMALE | M2_PRINCE, 0, 12, HI_LORD), /* * blobs */ @@ -151,13 +151,13 @@ NEARDATA struct permonst mons[] = { MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID, - M2_WANDER | M2_NEUTER, 0, CLR_GREEN), + M2_WANDER | M2_NEUTER, 0, 2, CLR_GREEN), MON("quivering blob", S_BLOB, LVL(5, 1, 8, 0, 0), (G_GENO | 2), A(ATTK(AT_TUCH, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 100, MS_SILENT, MZ_SMALL), MR_SLEEP | MR_POISON, MR_POISON, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, - M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, CLR_WHITE), + M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, 6, CLR_WHITE), MON("gelatinous cube", S_BLOB, LVL(6, 6, 8, 0, 0), (G_GENO | 2), A(ATTK(AT_TUCH, AD_PLYS, 2, 4), ATTK(AT_NONE, AD_PLYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -167,7 +167,7 @@ NEARDATA struct permonst mons[] = { MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, - M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, CLR_CYAN), + M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, 8, CLR_CYAN), /* * cockatrice */ @@ -177,21 +177,21 @@ NEARDATA struct permonst mons[] = { ATTK(AT_NONE, AD_STON, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_HISS, MZ_TINY), MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + M2_HOSTILE, M3_INFRAVISIBLE, 7, CLR_BROWN), MON("cockatrice", S_COCKATRICE, LVL(5, 6, 6, 30, 0), (G_GENO | 5), A(ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_TUCH, AD_STON, 0, 0), ATTK(AT_NONE, AD_STON, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_HISS, MZ_SMALL), MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE | M1_OVIPAROUS, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_YELLOW), + M3_INFRAVISIBLE, 8, CLR_YELLOW), MON("pyrolisk", S_COCKATRICE, LVL(6, 6, 6, 30, 0), (G_GENO | 1), A(ATTK(AT_GAZE, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_HISS, MZ_SMALL), MR_POISON | MR_FIRE, MR_POISON | MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE | M1_OVIPAROUS, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 8, CLR_RED), /* * dogs & other canines */ @@ -200,92 +200,92 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 1, CLR_BROWN), MON("fox", S_DOG, LVL(0, 15, 7, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_RED), + 1, CLR_RED), MON("coyote", S_DOG, LVL(1, 12, 7, 0, 0), (G_GENO | G_SGROUP | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 2, CLR_BROWN), MON("werejackal", S_DOG, LVL(2, 12, 7, 10, -7), (G_NOGEN | G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(300, 250, MS_BARK, MZ_SMALL), MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, - M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, 4, CLR_BROWN), MON("little dog", S_DOG, LVL(2, 18, 6, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(150, 150, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, - HI_DOMESTIC), + 3, HI_DOMESTIC), MON("dingo", S_DOG, LVL(4, 16, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 200, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_YELLOW), + 5, CLR_YELLOW), MON("dog", S_DOG, LVL(4, 16, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 200, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, - HI_DOMESTIC), + 5, HI_DOMESTIC), MON("large dog", S_DOG, LVL(6, 15, 4, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(800, 250, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_STRONG | M2_DOMESTIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("wolf", S_DOG, LVL(5, 12, 4, 0, 0), (G_GENO | G_SGROUP | 2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 250, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 6, CLR_BROWN), MON("werewolf", S_DOG, LVL(5, 12, 4, 20, -7), (G_NOGEN | G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 250, MS_BARK, MZ_MEDIUM), MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, - M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, 7, CLR_BROWN), MON("winter wolf cub", S_DOG, LVL(5, 12, 4, 0, -5), (G_NOHELL | G_GENO | G_SGROUP | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 8), ATTK(AT_BREA, AD_COLD, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(250, 200, MS_BARK, MZ_SMALL), MR_COLD, MR_COLD, - M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, CLR_CYAN), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, 7, CLR_CYAN), MON("warg", S_DOG, LVL(7, 12, 4, 0, -5), (G_GENO | G_SGROUP | 2), A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(850, 350, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 8, CLR_BROWN), MON("winter wolf", S_DOG, LVL(7, 12, 4, 20, 0), (G_NOHELL | G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_BREA, AD_COLD, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(700, 300, MS_BARK, MZ_LARGE), MR_COLD, MR_COLD, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, 0, - CLR_CYAN), + 9, CLR_CYAN), MON("hell hound pup", S_DOG, LVL(7, 12, 4, 20, -5), (G_HELL | G_GENO | G_SGROUP | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_BREA, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 200, MS_BARK, MZ_SMALL), MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_RED), + 9, CLR_RED), MON("hell hound", S_DOG, LVL(12, 14, 2, 20, 0), (G_HELL | G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BREA, AD_FIRE, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_BARK, MZ_MEDIUM), MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 14, CLR_RED), #ifdef CHARON MON("Cerberus", S_DOG, LVL(12, 10, 2, 20, -7), (G_NOGEN | G_UNIQ | G_HELL), @@ -294,7 +294,7 @@ NEARDATA struct permonst mons[] = { SIZ(1000, 350, MS_BARK, MZ_LARGE), MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_MALE, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 14, CLR_RED), #endif /* * eyes @@ -304,13 +304,13 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_SMALL), 0, 0, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, - M2_HOSTILE | M2_NEUTER, 0, CLR_GRAY), + M2_HOSTILE | M2_NEUTER, 0, 2, CLR_GRAY), MON("floating eye", S_EYE, LVL(2, 1, 9, 10, 0), (G_GENO | 5), A(ATTK(AT_NONE, AD_PLYS, 0, 70), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_SMALL), 0, 0, M1_FLY | M1_AMPHIBIOUS | M1_NOLIMBS | M1_NOHEAD | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_BLUE), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 3, CLR_BLUE), MON("freezing sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE | G_NOHELL | G_GENO | 2), A(ATTK(AT_EXPL, AD_COLD, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -318,21 +318,21 @@ NEARDATA struct permonst mons[] = { SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_COLD, MR_COLD, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_WHITE), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 8, CLR_WHITE), MON("flaming sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE | G_GENO | 2), A(ATTK(AT_EXPL, AD_FIRE, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_FIRE, MR_FIRE, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_RED), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 8, CLR_RED), MON("shocking sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE | G_GENO | 2), A(ATTK(AT_EXPL, AD_ELEC, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_ELEC, MR_ELEC, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, HI_ZAP), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 8, HI_ZAP), #if 0 /* not yet implemented */ MON("beholder", S_EYE, LVL(6, 3, 4, 0, -10), (G_GENO | 2), @@ -341,7 +341,7 @@ NEARDATA struct permonst mons[] = { ATTK(AT_GAZE, AD_CNCL, 2, 4), ATTK(AT_BITE, AD_PHYS, 2, 4)), SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_COLD, 0, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, - M2_NOPOLY | M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_BROWN), + M2_NOPOLY | M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 13, CLR_BROWN), #endif /* * felines @@ -351,43 +351,43 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(150, 150, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER | M2_DOMESTIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 3, HI_DOMESTIC), MON("housecat", S_FELINE, LVL(4, 16, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 200, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, - HI_DOMESTIC), + 5, HI_DOMESTIC), MON("jaguar", S_FELINE, LVL(4, 15, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 6, CLR_BROWN), MON("lynx", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_GROWL, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_CYAN), + 7, CLR_CYAN), MON("panther", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BLACK), + 7, CLR_BLACK), MON("large cat", S_FELINE, LVL(6, 15, 4, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(250, 250, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_STRONG | M2_DOMESTIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("tiger", S_FELINE, LVL(6, 12, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_BITE, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_YELLOW), + 8, CLR_YELLOW), /* * gremlins and gargoyles */ @@ -397,19 +397,19 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(100, 20, MS_LAUGH, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, M3_INFRAVISIBLE, - CLR_GREEN), + 8, CLR_GREEN), MON("gargoyle", S_GREMLIN, LVL(6, 10, -4, 0, -9), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 200, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, M1_HUMANOID | M1_THICK_HIDE | M1_BREATHLESS, M2_HOSTILE | M2_STRONG, - 0, CLR_BROWN), + 0, 8, CLR_BROWN), MON("winged gargoyle", S_GREMLIN, LVL(9, 15, -2, 0, -12), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 300, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, M1_FLY | M1_HUMANOID | M1_THICK_HIDE | M1_BREATHLESS | M1_OVIPAROUS, - M2_LORD | M2_HOSTILE | M2_STRONG | M2_MAGIC, 0, HI_LORD), + M2_LORD | M2_HOSTILE | M2_STRONG | M2_MAGIC, 0, 11, HI_LORD), /* * humanoids */ @@ -417,19 +417,19 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 200, MS_HUMANOID, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GREEN), + M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 2, CLR_GREEN), MON("dwarf", S_HUMANOID, LVL(2, 6, 10, 10, 4), (G_GENO | 3), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_DWARF | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_RED), MON("bugbear", S_HUMANOID, LVL(3, 9, 5, 0, -6), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1250, 250, MS_GROWL, MZ_LARGE), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BROWN), MON("dwarf lord", S_HUMANOID, LVL(4, 6, 10, 10, 5), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -437,7 +437,7 @@ NEARDATA struct permonst mons[] = { M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_DWARF | M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 6, CLR_BLUE), MON("dwarf king", S_HUMANOID, LVL(6, 6, 10, 20, 6), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -445,7 +445,7 @@ NEARDATA struct permonst mons[] = { M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_DWARF | M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, HI_LORD), MON("mind flayer", S_HUMANOID, LVL(9, 12, 5, 90, -8), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), NO_ATTK, @@ -453,7 +453,7 @@ NEARDATA struct permonst mons[] = { SIZ(1450, 400, MS_HISS, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_FLY | M1_SEE_INVIS | M1_OMNIVORE, M2_HOSTILE | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_MAGENTA), + M3_INFRAVISIBLE | M3_INFRAVISION, 13, CLR_MAGENTA), MON("master mind flayer", S_HUMANOID, LVL(13, 12, 0, 90, -8), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_TENT, AD_DRIN, 2, 1), @@ -462,7 +462,7 @@ NEARDATA struct permonst mons[] = { SIZ(1450, 400, MS_HISS, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_FLY | M1_SEE_INVIS | M1_OMNIVORE, M2_HOSTILE | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_MAGENTA), + M3_INFRAVISIBLE | M3_INFRAVISION, 19, CLR_MAGENTA), /* * imps & other minor demons/devils */ @@ -471,36 +471,36 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 100, MS_SILENT, MZ_SMALL), MR_SLEEP | MR_POISON, 0, M1_POIS, - M2_HOSTILE | M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M2_HOSTILE | M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_RED), MON("homunculus", S_IMP, LVL(2, 12, 6, 10, -7), (G_GENO | 2), A(ATTK(AT_BITE, AD_SLEE, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(60, 100, MS_SILENT, MZ_TINY), MR_SLEEP | MR_POISON, MR_SLEEP | MR_POISON, M1_FLY | M1_POIS, M2_STALK, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GREEN), + M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_GREEN), MON("imp", S_IMP, LVL(3, 12, 2, 20, -7), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(20, 10, MS_CUSS, MZ_TINY), 0, 0, M1_REGEN, M2_WANDER | M2_STALK, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_RED), MON("lemure", S_IMP, LVL(3, 3, 7, 0, -7), (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(150, 100, MS_SILENT, MZ_MEDIUM), MR_SLEEP | MR_POISON, MR_SLEEP, M1_POIS | M1_REGEN, M2_HOSTILE | M2_WANDER | M2_STALK | M2_NEUTER, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BROWN), MON("quasit", S_IMP, LVL(3, 15, 2, 20, -7), (G_GENO | 2), A(ATTK(AT_CLAW, AD_DRDX, 1, 2), ATTK(AT_CLAW, AD_DRDX, 1, 2), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 200, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_REGEN, - M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, 7, CLR_BLUE), MON("tengu", S_IMP, LVL(6, 13, 5, 30, 7), (G_GENO | 3), A(ATTK(AT_BITE, AD_PHYS, 1, 7), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(300, 200, MS_SQAWK, MZ_SMALL), MR_POISON, MR_POISON, M1_TPORT | M1_TPORT_CNTRL, M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_CYAN), + 7, CLR_CYAN), /* * jellies */ @@ -511,21 +511,21 @@ NEARDATA struct permonst mons[] = { MR_COLD | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_BLUE), + M2_HOSTILE | M2_NEUTER, 0, 5, CLR_BLUE), MON("spotted jelly", S_JELLY, LVL(5, 0, 8, 10, 0), (G_GENO | 1), A(ATTK(AT_NONE, AD_ACID, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_GREEN), + M2_HOSTILE | M2_NEUTER, 0, 6, CLR_GREEN), MON("ochre jelly", S_JELLY, LVL(6, 3, 8, 20, 0), (G_GENO | 2), A(ATTK(AT_ENGL, AD_ACID, 3, 6), ATTK(AT_NONE, AD_ACID, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_BROWN), + M2_HOSTILE | M2_NEUTER, 0, 8, CLR_BROWN), /* * kobolds */ @@ -534,26 +534,26 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(400, 100, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M3_INFRAVISIBLE | M3_INFRAVISION, 1, CLR_BROWN), MON("large kobold", S_KOBOLD, LVL(1, 6, 10, 0, -3), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(450, 150, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 2, CLR_RED), MON("kobold lord", S_KOBOLD, LVL(2, 6, 10, 0, -4), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 200, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_LORD | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 3, HI_LORD), MON("kobold shaman", S_KOBOLD, LVL(2, 6, 6, 10, -4), (G_GENO | 1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(450, 150, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_MAGIC, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_ZAP), + M3_INFRAVISIBLE | M3_INFRAVISION, 4, HI_ZAP), /* * leprechauns */ @@ -561,7 +561,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_CLAW, AD_SGLD, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(60, 30, MS_LAUGH, MZ_TINY), 0, 0, M1_HUMANOID | M1_TPORT, - M2_HOSTILE | M2_GREEDY, M3_INFRAVISIBLE, CLR_GREEN), + M2_HOSTILE | M2_GREEDY, M3_INFRAVISIBLE, 4, CLR_GREEN), /* * mimics */ @@ -571,7 +571,7 @@ NEARDATA struct permonst mons[] = { SIZ(300, 200, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_BROWN), + M2_HOSTILE, 0, 8, CLR_BROWN), MON("large mimic", S_MIMIC, LVL(8, 3, 7, 10, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_STCK, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -579,7 +579,7 @@ NEARDATA struct permonst mons[] = { M1_CLING | M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG, 0, CLR_RED), + M2_HOSTILE | M2_STRONG, 0, 9, CLR_RED), MON("giant mimic", S_MIMIC, LVL(9, 3, 7, 20, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_STCK, 3, 6), ATTK(AT_CLAW, AD_STCK, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -587,7 +587,7 @@ NEARDATA struct permonst mons[] = { M1_CLING | M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG, 0, HI_LORD), + M2_HOSTILE | M2_STRONG, 0, 11, HI_LORD), /* * nymphs */ @@ -595,18 +595,18 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_TPORT, - M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, CLR_GREEN), + M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, 5, CLR_GREEN), MON("water nymph", S_NYMPH, LVL(3, 12, 9, 20, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_TPORT | M1_SWIM, M2_HOSTILE | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 5, CLR_BLUE), MON("mountain nymph", S_NYMPH, LVL(3, 12, 9, 20, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_TPORT, - M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, CLR_BROWN), + M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, 5, CLR_BROWN), /* * orcs */ @@ -614,13 +614,13 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_ORC | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M2_ORC | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 1, CLR_GRAY), MON("hobgoblin", S_ORC, LVL(1, 9, 10, 0, -4), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BROWN), + 3, CLR_BROWN), /* plain "orc" for zombie corpses only; not created at random */ MON("orc", S_ORC, LVL(1, 9, 10, 0, -3), (G_GENO | G_NOGEN | G_LGROUP), @@ -628,37 +628,37 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(850, 150, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_RED), MON("hill orc", S_ORC, LVL(2, 9, 10, 0, -4), (G_GENO | G_LGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_YELLOW), + M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_YELLOW), MON("Mordor orc", S_ORC, LVL(3, 5, 10, 0, -5), (G_GENO | G_LGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BLUE), MON("Uruk-hai", S_ORC, LVL(3, 7, 10, 0, -4), (G_GENO | G_LGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1300, 300, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLACK), + M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BLACK), MON("orc shaman", S_ORC, LVL(3, 9, 5, 10, -5), (G_GENO | 1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 300, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_MAGIC, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_ZAP), + M3_INFRAVISIBLE | M3_INFRAVISION, 5, HI_ZAP), MON("orc-captain", S_ORC, LVL(5, 5, 10, 0, -5), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1350, 350, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 7, HI_LORD), /* * piercers */ @@ -668,21 +668,21 @@ NEARDATA struct permonst mons[] = { SIZ(200, 200, MS_SILENT, MZ_SMALL), 0, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_GRAY), + M2_HOSTILE, 0, 4, CLR_GRAY), MON("iron piercer", S_PIERCER, LVL(5, 1, 0, 0, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 300, MS_SILENT, MZ_MEDIUM), 0, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_CYAN), + M2_HOSTILE, 0, 6, CLR_CYAN), MON("glass piercer", S_PIERCER, LVL(7, 1, 0, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 300, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_WHITE), + M2_HOSTILE, 0, 9, CLR_WHITE), /* * quadrupeds */ @@ -691,43 +691,43 @@ NEARDATA struct permonst mons[] = { ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 100, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 4, CLR_BROWN), MON("mumak", S_QUADRUPED, LVL(5, 9, 0, 0, -2), (G_GENO | 1), A(ATTK(AT_BUTT, AD_PHYS, 4, 12), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2500, 500, MS_ROAR, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 7, CLR_GRAY), MON("leocrotta", S_QUADRUPED, LVL(6, 18, 4, 10, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 500, MS_IMITATE, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE | M2_STRONG, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 8, CLR_RED), MON("wumpus", S_QUADRUPED, LVL(8, 3, 2, 10, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2500, 500, MS_BURBLE, MZ_LARGE), 0, 0, M1_CLING | M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_CYAN), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 9, CLR_CYAN), MON("titanothere", S_QUADRUPED, LVL(12, 12, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2650, 650, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 13, CLR_GRAY), MON("baluchitherium", S_QUADRUPED, LVL(14, 12, 5, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 5, 4), ATTK(AT_CLAW, AD_PHYS, 5, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(3800, 800, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 15, CLR_GRAY), MON("mastodon", S_QUADRUPED, LVL(20, 12, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BUTT, AD_PHYS, 4, 8), ATTK(AT_BUTT, AD_PHYS, 4, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(3800, 800, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_BLACK), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 22, CLR_BLACK), /* * rodents */ @@ -736,32 +736,32 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(20, 12, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 1, CLR_BROWN), MON("giant rat", S_RODENT, LVL(1, 10, 7, 0, 0), (G_GENO | G_SGROUP | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_BROWN), + 2, CLR_BROWN), MON("rabid rat", S_RODENT, LVL(2, 12, 6, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_DRCO, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 5, MS_SQEEK, MZ_TINY), MR_POISON, 0, M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 4, CLR_BROWN), MON("wererat", S_RODENT, LVL(2, 12, 6, 10, -7), (G_NOGEN | G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(40, 30, MS_SQEEK, MZ_TINY), MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, - M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, 4, CLR_BROWN), MON("rock mole", S_RODENT, LVL(3, 3, 0, 20, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_METALLIVORE, M2_HOSTILE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE, - CLR_GRAY), + 4, CLR_GRAY), MON("woodchuck", S_RODENT, LVL(3, 3, 0, 20, 0), (G_NOGEN | G_GENO), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -769,7 +769,7 @@ NEARDATA struct permonst mons[] = { M1_TUNNEL /*LOGGING*/ | M1_ANIMAL | M1_NOHANDS | M1_SWIM | M1_HERBIVORE, /* In reality, they tunnel instead of cutting lumber. Oh, well. */ - M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, 4, CLR_BROWN), /* * spiders & scorpions (keep webmaker() in sync if new critters are added) */ @@ -778,26 +778,26 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(50, 50, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_GRAY), + M2_HOSTILE, 0, 3, CLR_GRAY), MON("centipede", S_SPIDER, LVL(2, 4, 3, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_DRST, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 50, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_YELLOW), + M2_HOSTILE, 0, 4, CLR_YELLOW), MON("giant spider", S_SPIDER, LVL(5, 15, 4, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 100, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG, 0, CLR_MAGENTA), + M2_HOSTILE | M2_STRONG, 0, 7, CLR_MAGENTA), MON("scorpion", S_SPIDER, LVL(5, 15, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_STNG, AD_DRST, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 100, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_RED), + M2_HOSTILE, 0, 8, CLR_RED), /* * trappers, lurkers, &c */ @@ -807,14 +807,14 @@ NEARDATA struct permonst mons[] = { SIZ(800, 350, MS_SILENT, MZ_HUGE), 0, 0, M1_HIDE | M1_FLY | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_CARNIVORE, - M2_HOSTILE | M2_STALK | M2_STRONG, 0, CLR_GRAY), + M2_HOSTILE | M2_STALK | M2_STRONG, 0, 12, CLR_GRAY), MON("trapper", S_TRAPPER, LVL(12, 3, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_ENGL, AD_DGST, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(800, 350, MS_SILENT, MZ_HUGE), 0, 0, M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_CARNIVORE, - M2_HOSTILE | M2_STALK | M2_STRONG, 0, CLR_GREEN), + M2_HOSTILE | M2_STALK | M2_STRONG, 0, 14, CLR_GREEN), /* * unicorns and horses */ @@ -823,37 +823,37 @@ NEARDATA struct permonst mons[] = { NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1300, 250, MS_NEIGH, MZ_MEDIUM), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, - M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, 4, CLR_BROWN), MON("white unicorn", S_UNICORN, LVL(4, 24, 2, 70, 7), (G_GENO | 2), A(ATTK(AT_BUTT, AD_PHYS, 1, 12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, - M3_INFRAVISIBLE, CLR_WHITE), + M3_INFRAVISIBLE, 6, CLR_WHITE), MON("gray unicorn", S_UNICORN, LVL(4, 24, 2, 70, 0), (G_GENO | 1), A(ATTK(AT_BUTT, AD_PHYS, 1, 12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, - M3_INFRAVISIBLE, CLR_GRAY), + M3_INFRAVISIBLE, 6, CLR_GRAY), MON("black unicorn", S_UNICORN, LVL(4, 24, 2, 70, -7), (G_GENO | 1), A(ATTK(AT_BUTT, AD_PHYS, 1, 12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, - M3_INFRAVISIBLE, CLR_BLACK), + M3_INFRAVISIBLE, 6, CLR_BLACK), MON("horse", S_UNICORN, LVL(5, 20, 5, 0, 0), (G_GENO | 2), A(ATTK(AT_KICK, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 300, MS_NEIGH, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, - M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, 7, CLR_BROWN), MON("warhorse", S_UNICORN, LVL(7, 24, 4, 0, 0), (G_GENO | 2), A(ATTK(AT_KICK, AD_PHYS, 1, 10), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1800, 350, MS_NEIGH, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, - M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, 9, CLR_BROWN), /* * vortices */ @@ -863,14 +863,14 @@ NEARDATA struct permonst mons[] = { SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_AMORPHOUS | M1_UNSOLID, - M2_HOSTILE | M2_NEUTER, 0, CLR_GRAY), + M2_HOSTILE | M2_NEUTER, 0, 4, CLR_GRAY), MON("dust vortex", S_VORTEX, LVL(4, 20, 2, 30, 0), (G_GENO | G_NOCORPSE | 2), A(ATTK(AT_ENGL, AD_BLND, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, - M2_HOSTILE | M2_NEUTER, 0, CLR_BROWN), + M2_HOSTILE | M2_NEUTER, 0, 6, CLR_BROWN), MON("ice vortex", S_VORTEX, LVL(5, 20, 2, 30, 0), (G_NOHELL | G_GENO | G_NOCORPSE | 1), A(ATTK(AT_ENGL, AD_COLD, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -879,7 +879,7 @@ NEARDATA struct permonst mons[] = { MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_CYAN), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 7, CLR_CYAN), MON("energy vortex", S_VORTEX, LVL(6, 20, 2, 30, 0), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_ENGL, AD_ELEC, 1, 6), ATTK(AT_ENGL, AD_DREN, 2, 6), @@ -888,7 +888,7 @@ NEARDATA struct permonst mons[] = { MR_ELEC | MR_SLEEP | MR_DISINT | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, - M2_HOSTILE | M2_NEUTER, 0, HI_ZAP), + M2_HOSTILE | M2_NEUTER, 0, 9, HI_ZAP), MON("steam vortex", S_VORTEX, LVL(7, 22, 2, 30, 0), (G_HELL | G_GENO | G_NOCORPSE | 2), A(ATTK(AT_ENGL, AD_FIRE, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -897,7 +897,7 @@ NEARDATA struct permonst mons[] = { MR_FIRE | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_BLUE), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 9, CLR_BLUE), MON("fire vortex", S_VORTEX, LVL(8, 22, 2, 30, 0), (G_HELL | G_GENO | G_NOCORPSE | 1), A(ATTK(AT_ENGL, AD_FIRE, 1, 10), ATTK(AT_NONE, AD_FIRE, 0, 4), @@ -906,7 +906,7 @@ NEARDATA struct permonst mons[] = { MR_FIRE | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_YELLOW), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 10, CLR_YELLOW), /* * worms */ @@ -915,26 +915,26 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(600, 250, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_BROWN), + M2_HOSTILE, 0, 6, CLR_BROWN), MON("baby purple worm", S_WORM, LVL(8, 3, 5, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 250, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE, M2_HOSTILE, 0, - CLR_MAGENTA), + 9, CLR_MAGENTA), MON("long worm", S_WORM, LVL(9, 3, 5, 10, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_SILENT, MZ_GIGANTIC), 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE | M2_STRONG | M2_NASTY, 0, CLR_BROWN), + M2_HOSTILE | M2_STRONG | M2_NASTY, 0, 10, CLR_BROWN), MON("purple worm", S_WORM, LVL(15, 9, 6, 20, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 2, 8), ATTK(AT_ENGL, AD_DGST, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2700, 700, MS_SILENT, MZ_GIGANTIC), 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_OVIPAROUS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_NASTY, 0, CLR_MAGENTA), + M2_HOSTILE | M2_STRONG | M2_NASTY, 0, 17, CLR_MAGENTA), /* * xan, &c */ @@ -943,13 +943,13 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BITE, AD_ELEC, 1, 1), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(15, 10, MS_BUZZ, MZ_TINY), MR_ELEC | MR_POISON, 0, M1_ANIMAL, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_MAGENTA), + M2_HOSTILE, M3_INFRAVISIBLE, 1, CLR_MAGENTA), MON("xan", S_XAN, LVL(7, 18, -4, 0, 0), (G_GENO | 3), A(ATTK(AT_STNG, AD_LEGS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(300, 300, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 9, CLR_RED), /* * lights */ @@ -961,7 +961,7 @@ NEARDATA struct permonst mons[] = { | MR_ACID | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_YELLOW), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 5, CLR_YELLOW), MON("black light", S_LIGHT, LVL(5, 15, 0, 0, 0), (G_NOCORPSE | G_GENO | 2), A(ATTK(AT_EXPL, AD_HALU, 10, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -971,7 +971,7 @@ NEARDATA struct permonst mons[] = { 0, M1_FLY | M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_SEE_INVIS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_BLACK), + M2_HOSTILE | M2_NEUTER, 0, 7, CLR_BLACK), /* * zruty */ @@ -980,7 +980,7 @@ NEARDATA struct permonst mons[] = { ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 600, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 11, CLR_BROWN), /* * Angels and other lawful minions */ @@ -991,7 +991,7 @@ NEARDATA struct permonst mons[] = { SIZ(900, 400, MS_HISS, MZ_LARGE), MR_POISON, 0, M1_FLY | M1_NOHANDS | M1_SLITHY | M1_POIS, M2_MINION | M2_STALK | M2_STRONG | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GREEN), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_GREEN), MON("Aleax", S_ANGEL, LVL(10, 8, 0, 30, 7), (G_NOHELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), @@ -999,7 +999,7 @@ NEARDATA struct permonst mons[] = { MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS, M2_MINION | M2_STALK | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_YELLOW), + M3_INFRAVISIBLE | M3_INFRAVISION, 12, CLR_YELLOW), /* Angels start with the emin extension attached, and usually have the isminion flag set; however, non-minion Angels can be tamed and will switch to edog (guardian Angel is handled specially and @@ -1013,7 +1013,7 @@ NEARDATA struct permonst mons[] = { MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_FLY | M1_HUMANOID | M1_SEE_INVIS, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_WHITE), + M3_INFRAVISIBLE | M3_INFRAVISION, 19, CLR_WHITE), MON("ki-rin", S_ANGEL, LVL(16, 18, -5, 90, 15), (G_NOHELL | G_NOCORPSE | 1), A(ATTK(AT_KICK, AD_PHYS, 2, 4), ATTK(AT_KICK, AD_PHYS, 2, 4), @@ -1022,7 +1022,7 @@ NEARDATA struct permonst mons[] = { SIZ(WT_HUMAN, 400, MS_NEIGH, MZ_LARGE), 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_SEE_INVIS, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_LORD, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_GOLD), + M3_INFRAVISIBLE | M3_INFRAVISION, 21, HI_GOLD), MON("Archon", S_ANGEL, LVL(19, 16, -6, 80, 15), (G_NOHELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), @@ -1033,7 +1033,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_HUMANOID | M1_SEE_INVIS | M1_REGEN, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_LORD | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 26, HI_LORD), /* * Bats */ @@ -1042,25 +1042,25 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(20, 20, MS_SQEEK, MZ_TINY), 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 2, CLR_BROWN), MON("giant bat", S_BAT, LVL(2, 22, 7, 0, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_SQEEK, MZ_SMALL), 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), + M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, 3, CLR_RED), MON("raven", S_BAT, LVL(4, 20, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_BLND, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(40, 20, MS_SQAWK, MZ_SMALL), 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLACK), + M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, 6, CLR_BLACK), MON("vampire bat", S_BAT, LVL(5, 20, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_DRST, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 20, MS_SQEEK, MZ_SMALL), MR_SLEEP | MR_POISON, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_REGEN | M1_OMNIVORE, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLACK), + M2_HOSTILE, M3_INFRAVISIBLE, 7, CLR_BLACK), /* * Centaurs */ @@ -1069,19 +1069,19 @@ NEARDATA struct permonst mons[] = { NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2500, 500, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 6, CLR_BROWN), MON("forest centaur", S_CENTAUR, LVL(5, 18, 3, 10, -1), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2550, 600, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, CLR_GREEN), + M3_INFRAVISIBLE, 8, CLR_GREEN), MON("mountain centaur", S_CENTAUR, LVL(6, 20, 2, 10, -3), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 10), ATTK(AT_KICK, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2550, 500, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, CLR_CYAN), + M3_INFRAVISIBLE, 9, CLR_CYAN), /* * Dragons */ @@ -1099,13 +1099,13 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_GRAY), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_GRAY), MON("baby silver dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, DRAGON_SILVER), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, DRAGON_SILVER), #if 0 /* DEFERRED */ MON("baby shimmering dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, @@ -1113,7 +1113,7 @@ NEARDATA struct permonst mons[] = { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_CYAN), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_CYAN), #endif MON("baby red dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1121,43 +1121,43 @@ NEARDATA struct permonst mons[] = { SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_FIRE, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, M3_INFRAVISIBLE, - CLR_RED), + 13, CLR_RED), MON("baby white dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_COLD, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_WHITE), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_WHITE), MON("baby orange dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_SLEEP, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_ORANGE), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_ORANGE), MON("baby black dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_DISINT, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_BLACK), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_BLACK), MON("baby blue dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_ELEC, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_BLUE), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_BLUE), MON("baby green dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_POISON, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_POIS, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_GREEN), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_GREEN), MON("baby yellow dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_ACID | MR_STONE, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_ACID, - M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, CLR_YELLOW), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, 13, CLR_YELLOW), MON("gray dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), A(ATTK(AT_BREA, AD_MAGM, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1166,7 +1166,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_GRAY), + 0, 20, CLR_GRAY), MON("silver dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), A(ATTK(AT_BREA, AD_COLD, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1175,7 +1175,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, DRAGON_SILVER), + 0, 20, DRAGON_SILVER), #if 0 /* DEFERRED */ MON("shimmering dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), @@ -1186,7 +1186,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_CYAN), + 0, 20, CLR_CYAN), #endif MON("red dragon", S_DRAGON, LVL(15, 9, -1, 20, -4), (G_GENO | 1), A(ATTK(AT_BREA, AD_FIRE, 6, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), @@ -1196,7 +1196,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 20, CLR_RED), MON("white dragon", S_DRAGON, LVL(15, 9, -1, 20, -5), (G_GENO | 1), A(ATTK(AT_BREA, AD_COLD, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1205,7 +1205,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_WHITE), + 0, 20, CLR_WHITE), MON("orange dragon", S_DRAGON, LVL(15, 9, -1, 20, 5), (G_GENO | 1), A(ATTK(AT_BREA, AD_SLEE, 4, 25), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1214,7 +1214,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_ORANGE), + 0, 20, CLR_ORANGE), /* disintegration breath is actually all or nothing, not 1d255 */ MON("black dragon", S_DRAGON, LVL(15, 9, -1, 20, -6), (G_GENO | 1), A(ATTK(AT_BREA, AD_DISN, 1, 255), ATTK(AT_BITE, AD_PHYS, 3, 8), @@ -1224,7 +1224,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_BLACK), + 0, 20, CLR_BLACK), MON("blue dragon", S_DRAGON, LVL(15, 9, -1, 20, -7), (G_GENO | 1), A(ATTK(AT_BREA, AD_ELEC, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1233,7 +1233,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_BLUE), + 0, 20, CLR_BLUE), MON("green dragon", S_DRAGON, LVL(15, 9, -1, 20, 6), (G_GENO | 1), A(ATTK(AT_BREA, AD_DRST, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1242,7 +1242,7 @@ NEARDATA struct permonst mons[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE | M1_POIS, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_GREEN), + 0, 20, CLR_GREEN), MON("yellow dragon", S_DRAGON, LVL(15, 9, -1, 20, 7), (G_GENO | 1), A(ATTK(AT_BREA, AD_ACID, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, @@ -1251,7 +1251,7 @@ NEARDATA struct permonst mons[] = { MR_STONE, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE | M1_ACID, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - 0, CLR_YELLOW), + 0, 20, CLR_YELLOW), /* * Elementals */ @@ -1261,21 +1261,21 @@ NEARDATA struct permonst mons[] = { SIZ(900, 400, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_FLY | M1_SEE_INVIS, M2_WANDER | M2_STALK | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, - CLR_WHITE), + 9, CLR_WHITE), MON("air elemental", S_ELEMENTAL, LVL(8, 36, 2, 30, 0), (G_NOCORPSE | 1), A(ATTK(AT_ENGL, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_BREATHLESS | M1_UNSOLID | M1_FLY, - M2_STRONG | M2_NEUTER, 0, CLR_CYAN), + M2_STRONG | M2_NEUTER, 0, 10, CLR_CYAN), MON("fire elemental", S_ELEMENTAL, LVL(8, 12, 2, 30, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_FIRE, 3, 6), ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_FIRE | MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_BREATHLESS | M1_UNSOLID | M1_FLY | M1_NOTAKE, - M2_STRONG | M2_NEUTER, M3_INFRAVISIBLE, CLR_YELLOW), + M2_STRONG | M2_NEUTER, M3_INFRAVISIBLE, 10, CLR_YELLOW), MON("earth elemental", S_ELEMENTAL, LVL(8, 6, 2, 30, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -1283,14 +1283,14 @@ NEARDATA struct permonst mons[] = { MR_FIRE | MR_COLD | MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_BREATHLESS | M1_WALLWALK | M1_THICK_HIDE, - M2_STRONG | M2_NEUTER, 0, CLR_BROWN), + M2_STRONG | M2_NEUTER, 0, 10, CLR_BROWN), MON("water elemental", S_ELEMENTAL, LVL(8, 6, 2, 30, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 5, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2500, 0, MS_SILENT, MZ_HUGE), MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_BREATHLESS | M1_UNSOLID | M1_AMPHIBIOUS | M1_SWIM, - M2_STRONG | M2_NEUTER, 0, CLR_BLUE), + M2_STRONG | M2_NEUTER, 0, 10, CLR_BLUE), /* * Fungi */ @@ -1300,48 +1300,48 @@ NEARDATA struct permonst mons[] = { SIZ(20, 200, MS_SILENT, MZ_SMALL), 0, 0, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_BRIGHT_GREEN), + M2_HOSTILE | M2_NEUTER, 0, 1, CLR_BRIGHT_GREEN), MON("brown mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), A(ATTK(AT_NONE, AD_COLD, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_COLD | MR_POISON, MR_COLD | MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_BROWN), + M2_HOSTILE | M2_NEUTER, 0, 2, CLR_BROWN), MON("yellow mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 2), A(ATTK(AT_NONE, AD_STUN, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_POIS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_YELLOW), + M2_HOSTILE | M2_NEUTER, 0, 2, CLR_YELLOW), MON("green mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), A(ATTK(AT_NONE, AD_ACID, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_ACID | MR_STONE, MR_STONE, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_GREEN), + M2_HOSTILE | M2_NEUTER, 0, 2, CLR_GREEN), MON("red mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), A(ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CLR_RED), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, 2, CLR_RED), MON("shrieker", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO | 1), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 100, MS_SHRIEK, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_MAGENTA), + M2_HOSTILE | M2_NEUTER, 0, 2, CLR_MAGENTA), MON("violet fungus", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO | 2), A(ATTK(AT_TUCH, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_STCK, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 100, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, CLR_MAGENTA), + M2_HOSTILE | M2_NEUTER, 0, 5, CLR_MAGENTA), /* * Gnomes */ @@ -1350,24 +1350,24 @@ NEARDATA struct permonst mons[] = { NO_ATTK), SIZ(650, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_GNOME | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BROWN), + 3, CLR_BROWN), MON("gnome lord", S_GNOME, LVL(3, 8, 10, 4, 0), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_LORD | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_BLUE), MON("gnomish wizard", S_GNOME, LVL(3, 10, 4, 10, 0), (G_GENO | 1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, - M2_GNOME | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, HI_ZAP), + M2_GNOME | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, 5, HI_ZAP), MON("gnome king", S_GNOME, LVL(5, 10, 10, 20, 0), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(750, 150, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_PRINCE | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 6, HI_LORD), #ifdef SPLITMON_1 }; #endif @@ -1396,28 +1396,28 @@ struct permonst _mons2[] = { SIZ(2250, 750, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_RED), MON("stone giant", S_GIANT, LVL(6, 6, 0, 0, 2), (G_GENO | G_SGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2250, 750, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), MON("hill giant", S_GIANT, LVL(8, 10, 6, 0, -2), (G_GENO | G_SGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2200, 700, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_CYAN), + M3_INFRAVISIBLE | M3_INFRAVISION, 10, CLR_CYAN), MON("fire giant", S_GIANT, LVL(9, 12, 4, 5, 2), (G_GENO | G_SGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_FIRE, MR_FIRE, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_YELLOW), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_YELLOW), MON("frost giant", S_GIANT, LVL(10, 12, 3, 10, -3), (G_NOHELL | G_GENO | G_SGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1425,35 +1425,35 @@ struct permonst _mons2[] = { SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_COLD, MR_COLD, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_WHITE), + M3_INFRAVISIBLE | M3_INFRAVISION, 13, CLR_WHITE), MON("ettin", S_GIANT, LVL(10, 12, 3, 0, 0), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_WEAP, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 500, MS_GRUNT, MZ_HUGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M3_INFRAVISIBLE | M3_INFRAVISION, 13, CLR_BROWN), MON("storm giant", S_GIANT, LVL(16, 12, 3, 10, -3), (G_GENO | G_SGROUP | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_ELEC, MR_ELEC, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 19, CLR_BLUE), MON("titan", S_GIANT, LVL(16, 18, -3, 70, 9), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2300, 900, MS_SPELL, MZ_HUGE), 0, 0, M1_FLY | M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_MAGENTA), + M3_INFRAVISIBLE | M3_INFRAVISION, 20, CLR_MAGENTA), MON("minotaur", S_GIANT, LVL(15, 15, 6, 0, 0), (G_GENO | G_NOGEN), A(ATTK(AT_CLAW, AD_PHYS, 3, 10), ATTK(AT_CLAW, AD_PHYS, 3, 10), ATTK(AT_BUTT, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 700, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BROWN), + 17, CLR_BROWN), /* 'I' is a visual marker for all invisible monsters and must be unused */ /* * Jabberwock @@ -1467,7 +1467,7 @@ struct permonst _mons2[] = { SIZ(1300, 600, MS_BURBLE, MZ_LARGE), 0, 0, M1_ANIMAL | M1_FLY | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE, - CLR_ORANGE), + 18, CLR_ORANGE), #if 0 /* DEFERRED */ MON("vorpal jabberwock", S_JABBERWOCK, LVL(20, 12, -2, 50, 0), (G_GENO | 1), @@ -1477,7 +1477,7 @@ struct permonst _mons2[] = { SIZ(1300, 600, MS_BURBLE, MZ_LARGE), 0, 0, M1_ANIMAL | M1_FLY | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE, - HI_LORD), + 25, HI_LORD), #endif /* * Kops @@ -1488,26 +1488,26 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 3, CLR_BLUE), MON("Kop Sergeant", S_KOP, LVL(2, 8, 10, 10, 10), (G_GENO | G_SGROUP | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 4, CLR_BLUE), MON("Kop Lieutenant", S_KOP, LVL(3, 10, 10, 20, 11), (G_GENO | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, CLR_CYAN), + M3_INFRAVISIBLE, 5, CLR_CYAN), MON("Kop Kaptain", S_KOP, LVL(4, 12, 10, 20, 12), (G_GENO | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_LORD), + M3_INFRAVISIBLE, 6, HI_LORD), /* * Liches */ @@ -1516,14 +1516,14 @@ struct permonst _mons2[] = { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, - M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, CLR_BROWN), + M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, 14, CLR_BROWN), MON("demilich", S_LICH, LVL(14, 9, -2, 60, -12), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_TUCH, AD_COLD, 3, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, - M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, CLR_RED), + M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, 18, CLR_RED), MON("master lich", S_LICH, LVL(17, 9, -4, 90, -15), (G_HELL | G_GENO | G_NOCORPSE | 1), A(ATTK(AT_TUCH, AD_COLD, 3, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, @@ -1532,7 +1532,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_SLEEP | MR_POISON, MR_FIRE | MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_WANTSBOOK | M3_INFRAVISION, - HI_LORD), + 21, HI_LORD), MON("arch-lich", S_LICH, LVL(25, 9, -6, 90, -15), (G_HELL | G_GENO | G_NOCORPSE | 1), A(ATTK(AT_TUCH, AD_COLD, 5, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, @@ -1541,7 +1541,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_SLEEP | MR_ELEC | MR_POISON, MR_FIRE | MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_WANTSBOOK | M3_INFRAVISION, - HI_LORD), + 29, HI_LORD), /* * Mummies */ @@ -1550,33 +1550,33 @@ struct permonst _mons2[] = { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, CLR_BROWN), + M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, 4, CLR_BROWN), MON("gnome mummy", S_MUMMY, LVL(4, 10, 6, 20, -3), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(650, 50, MS_SILENT, MZ_SMALL), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, CLR_RED), + M2_UNDEAD | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, 5, CLR_RED), MON("orc mummy", S_MUMMY, LVL(5, 10, 5, 20, -4), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(850, 75, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_ORC | M2_GREEDY | M2_JEWELS, - M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISION, 6, CLR_GRAY), MON("dwarf mummy", S_MUMMY, LVL(5, 10, 5, 20, -4), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 150, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_DWARF | M2_GREEDY | M2_JEWELS, - M3_INFRAVISION, CLR_RED), + M3_INFRAVISION, 6, CLR_RED), MON("elf mummy", S_MUMMY, LVL(6, 12, 4, 30, -5), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 175, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_HOSTILE | M2_ELF, M3_INFRAVISION, CLR_GREEN), + M2_UNDEAD | M2_HOSTILE | M2_ELF, M3_INFRAVISION, 7, CLR_GREEN), MON("human mummy", S_MUMMY, LVL(6, 12, 4, 30, -5), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), NO_ATTK, @@ -1584,14 +1584,14 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 200, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, CLR_GRAY), + M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, 7, CLR_GRAY), MON("ettin mummy", S_MUMMY, LVL(7, 12, 4, 30, -6), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 250, MS_SILENT, MZ_HUGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, CLR_BLUE), + M2_UNDEAD | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, 8, CLR_BLUE), MON("giant mummy", S_MUMMY, LVL(8, 14, 3, 30, -7), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, @@ -1599,7 +1599,7 @@ struct permonst _mons2[] = { SIZ(2050, 375, MS_SILENT, MZ_HUGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG | M2_JEWELS, - M3_INFRAVISION, CLR_CYAN), + M3_INFRAVISION, 10, CLR_CYAN), /* * Nagas */ @@ -1609,33 +1609,33 @@ struct permonst _mons2[] = { SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, M3_INFRAVISIBLE, CLR_RED), + M2_STRONG, M3_INFRAVISIBLE, 4, CLR_RED), MON("black naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_STONE, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_ACID | M1_NOTAKE | M1_CARNIVORE, - M2_STRONG, 0, CLR_BLACK), + M2_STRONG, 0, 4, CLR_BLACK), MON("golden naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, 0, HI_GOLD), + M2_STRONG, 0, 4, HI_GOLD), MON("guardian naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, 0, CLR_GREEN), + M2_STRONG, 0, 4, CLR_GREEN), MON("red naga", S_NAGA, LVL(6, 12, 4, 0, -4), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_BREA, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, M3_INFRAVISIBLE, CLR_RED), + M2_STRONG, M3_INFRAVISIBLE, 8, CLR_RED), MON("black naga", S_NAGA, LVL(8, 14, 2, 10, 4), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_SPIT, AD_ACID, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -1643,21 +1643,21 @@ struct permonst _mons2[] = { MR_POISON | MR_STONE, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_ACID | M1_NOTAKE | M1_CARNIVORE, - M2_STRONG, 0, CLR_BLACK), + M2_STRONG, 0, 10, CLR_BLACK), MON("golden naga", S_NAGA, LVL(10, 14, 2, 70, 5), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_MAGC, AD_SPEL, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, 0, HI_GOLD), + M2_STRONG, 0, 13, HI_GOLD), MON("guardian naga", S_NAGA, LVL(12, 16, 0, 50, 7), (G_GENO | 1), A(ATTK(AT_BITE, AD_PLYS, 1, 6), ATTK(AT_SPIT, AD_DRST, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_POIS | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, 0, CLR_GREEN), + M2_STRONG, 0, 16, CLR_GREEN), /* * Ogres */ @@ -1666,19 +1666,19 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(1600, 500, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M3_INFRAVISIBLE | M3_INFRAVISION, 7, CLR_BROWN), MON("ogre lord", S_OGRE, LVL(7, 12, 3, 30, -5), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 700, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 9, CLR_RED), MON("ogre king", S_OGRE, LVL(9, 14, 4, 60, -7), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 3, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 750, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD), /* * Puddings * @@ -1692,7 +1692,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, - M2_HOSTILE | M2_NEUTER, 0, CLR_GRAY), + M2_HOSTILE | M2_NEUTER, 0, 4, CLR_GRAY), MON("brown pudding", S_PUDDING, LVL(5, 3, 8, 0, 0), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_BITE, AD_DCAY, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -1701,7 +1701,7 @@ struct permonst _mons2[] = { MR_COLD | MR_ELEC | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, - M2_HOSTILE | M2_NEUTER, 0, CLR_BROWN), + M2_HOSTILE | M2_NEUTER, 0, 6, CLR_BROWN), MON("green slime", S_PUDDING, LVL(6, 6, 6, 0, 0), (G_HELL | G_GENO | G_NOCORPSE | 1), A(ATTK(AT_TUCH, AD_SLIM, 1, 4), ATTK(AT_NONE, AD_SLIM, 0, 0), NO_ATTK, @@ -1710,7 +1710,7 @@ struct permonst _mons2[] = { MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID | M1_POIS, - M2_HOSTILE | M2_NEUTER, 0, CLR_GREEN), + M2_HOSTILE | M2_NEUTER, 0, 8, CLR_GREEN), MON("black pudding", S_PUDDING, LVL(10, 6, 6, 0, 0), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_BITE, AD_CORR, 3, 8), ATTK(AT_NONE, AD_CORR, 0, 0), NO_ATTK, @@ -1720,7 +1720,7 @@ struct permonst _mons2[] = { MR_COLD | MR_ELEC | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, - M2_HOSTILE | M2_NEUTER, 0, CLR_BLACK), + M2_HOSTILE | M2_NEUTER, 0, 12, CLR_BLACK), /* * Quantum mechanics */ @@ -1729,7 +1729,7 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(WT_HUMAN, 20, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE | M1_POIS | M1_TPORT, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_CYAN), + M3_INFRAVISIBLE, 9, CLR_CYAN), /* * Rust monster or disenchanter */ @@ -1738,13 +1738,13 @@ struct permonst _mons2[] = { ATTK(AT_NONE, AD_RUST, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 250, MS_SILENT, MZ_MEDIUM), 0, 0, M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_METALLIVORE, M2_HOSTILE, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 8, CLR_BROWN), MON("disenchanter", S_RUSTMONST, LVL(12, 12, -10, 0, -3), (G_HELL | G_GENO | 2), A(ATTK(AT_CLAW, AD_ENCH, 4, 4), ATTK(AT_NONE, AD_ENCH, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(750, 200, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_CARNIVORE, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLUE), + M2_HOSTILE, M3_INFRAVISIBLE, 14, CLR_BLUE), /* * Snakes */ @@ -1754,14 +1754,14 @@ struct permonst _mons2[] = { SIZ(50, 60, MS_HISS, MZ_TINY), 0, 0, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, - 0, 0, CLR_GREEN), + 0, 0, 3, CLR_GREEN), MON("snake", S_SNAKE, LVL(4, 15, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 80, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_BROWN), + M2_HOSTILE, 0, 6, CLR_BROWN), MON("water moccasin", S_SNAKE, LVL(4, 15, 3, 0, 0), (G_GENO | G_NOGEN | G_LGROUP), A(ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1769,7 +1769,7 @@ struct permonst _mons2[] = { SIZ(150, 80, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, 0, CLR_RED), + M2_HOSTILE, 0, 7, CLR_RED), MON("python", S_SNAKE, LVL(6, 3, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_PHYS, 0, 0), ATTK(AT_HUGS, AD_WRAP, 1, 4), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, @@ -1777,21 +1777,21 @@ struct permonst _mons2[] = { SIZ(250, 100, MS_HISS, MZ_LARGE), 0, 0, M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISION, CLR_MAGENTA), + M2_HOSTILE | M2_STRONG, M3_INFRAVISION, 8, CLR_MAGENTA), MON("pit viper", S_SNAKE, LVL(6, 15, 2, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_DRST, 1, 4), ATTK(AT_BITE, AD_DRST, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 60, MS_HISS, MZ_MEDIUM), MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, M3_INFRAVISION, CLR_BLUE), + M2_HOSTILE, M3_INFRAVISION, 9, CLR_BLUE), MON("cobra", S_SNAKE, LVL(6, 18, 2, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_DRST, 2, 4), ATTK(AT_SPIT, AD_BLND, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(250, 100, MS_HISS, MZ_MEDIUM), MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, 0, CLR_BLUE), + M2_HOSTILE, 0, 10, CLR_BLUE), /* * Trolls */ @@ -1801,35 +1801,35 @@ struct permonst _mons2[] = { SIZ(800, 350, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BROWN), + 9, CLR_BROWN), MON("ice troll", S_TROLL, LVL(9, 10, 2, 20, -3), (G_NOHELL | G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_COLD, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1000, 300, MS_GRUNT, MZ_LARGE), MR_COLD, MR_COLD, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_WHITE), + 12, CLR_WHITE), MON("rock troll", S_TROLL, LVL(9, 12, 0, 0, -3), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 300, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_CYAN), + M3_INFRAVISIBLE | M3_INFRAVISION, 12, CLR_CYAN), MON("water troll", S_TROLL, LVL(11, 14, 4, 40, -3), (G_NOGEN | G_GENO), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 350, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE | M1_SWIM, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BLUE), + 13, CLR_BLUE), MON("Olog-hai", S_TROLL, LVL(13, 12, -4, 0, -7), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 400, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 16, HI_LORD), /* * Umber hulk */ @@ -1838,7 +1838,7 @@ struct permonst _mons2[] = { ATTK(AT_BITE, AD_PHYS, 2, 5), ATTK(AT_GAZE, AD_CONF, 0, 0), NO_ATTK, NO_ATTK), SIZ(1200, 500, MS_SILENT, MZ_LARGE), 0, 0, M1_TUNNEL | M1_CARNIVORE, - M2_STRONG, M3_INFRAVISIBLE, CLR_BROWN), + M2_STRONG, M3_INFRAVISIBLE, 12, CLR_BROWN), /* * Vampires */ @@ -1850,7 +1850,7 @@ struct permonst _mons2[] = { M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 12, CLR_RED), MON("vampire lord", S_VAMPIRE, LVL(12, 14, 0, 50, -9), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_DRLI, 1, 8), NO_ATTK, @@ -1859,7 +1859,7 @@ struct permonst _mons2[] = { M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD | M2_MALE | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 14, CLR_BLUE), #if 0 /* DEFERRED */ MON("vampire mage", S_VAMPIRE, LVL(20, 14, -4, 50, -9), (G_GENO | G_NOCORPSE | 1), @@ -1869,7 +1869,7 @@ struct permonst _mons2[] = { M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD | M2_MALE | M2_MAGIC | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, HI_ZAP), + M3_INFRAVISIBLE, 26, HI_ZAP), #endif MON("Vlad the Impaler", S_VAMPIRE, LVL(28, 26, -6, 80, -10), (G_NOGEN | G_NOCORPSE | G_UNIQ), @@ -1879,7 +1879,7 @@ struct permonst _mons2[] = { M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE | M2_SHAPESHIFTER, - M3_WAITFORU | M3_WANTSCAND | M3_INFRAVISIBLE, HI_LORD), + M3_WAITFORU | M3_WANTSCAND | M3_INFRAVISIBLE, 32, HI_LORD), /* * Wraiths */ @@ -1889,14 +1889,14 @@ struct permonst _mons2[] = { ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 0, MS_SPELL, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_HUMANOID, - M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, CLR_GRAY), + M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, 7, CLR_GRAY), MON("wraith", S_WRAITH, LVL(6, 12, 4, 15, -6), (G_GENO | 2), A(ATTK(AT_TUCH, AD_DRLI, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_FLY | M1_HUMANOID | M1_UNSOLID, - M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, CLR_BLACK), + M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, 8, CLR_BLACK), MON("Nazgul", S_WRAITH, LVL(13, 12, 0, 25, -17), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_DRLI, 1, 4), ATTK(AT_BREA, AD_SLEE, 2, 25), @@ -1905,7 +1905,7 @@ struct permonst _mons2[] = { 0, M1_BREATHLESS | M1_HUMANOID, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE | M2_MALE | M2_COLLECT, - 0, HI_LORD), + 0, 17, HI_LORD), /* * Xorn */ @@ -1916,7 +1916,7 @@ struct permonst _mons2[] = { SIZ(1200, 700, MS_ROAR, MZ_MEDIUM), MR_FIRE | MR_COLD | MR_STONE, MR_STONE, M1_BREATHLESS | M1_WALLWALK | M1_THICK_HIDE | M1_METALLIVORE, - M2_HOSTILE | M2_STRONG, 0, CLR_BROWN), + M2_HOSTILE | M2_STRONG, 0, 11, CLR_BROWN), /* * Apelike beasts */ @@ -1926,37 +1926,37 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 50, MS_GROWL, MZ_SMALL), 0, 0, - M1_ANIMAL | M1_HUMANOID | M1_OMNIVORE, 0, M3_INFRAVISIBLE, CLR_GRAY), + M1_ANIMAL | M1_HUMANOID | M1_OMNIVORE, 0, M3_INFRAVISIBLE, 4, CLR_GRAY), MON("ape", S_YETI, LVL(4, 12, 6, 0, 0), (G_GENO | G_SGROUP | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1100, 500, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, - CLR_BROWN), + 6, CLR_BROWN), MON("owlbear", S_YETI, LVL(5, 12, 5, 0, 0), (G_GENO | 3), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 700, MS_ROAR, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE, CLR_BROWN), + M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE, 7, CLR_BROWN), MON("yeti", S_YETI, LVL(5, 15, 6, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1600, 700, MS_GROWL, MZ_LARGE), MR_COLD, MR_COLD, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, - M3_INFRAVISIBLE, CLR_WHITE), + M3_INFRAVISIBLE, 7, CLR_WHITE), MON("carnivorous ape", S_YETI, LVL(6, 12, 6, 0, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_HUGS, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1250, 550, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, - M3_INFRAVISIBLE, CLR_BLACK), + M3_INFRAVISIBLE, 8, CLR_BLACK), MON("sasquatch", S_YETI, LVL(7, 15, 6, 0, 2), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1550, 750, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_STRONG, - M3_INFRAVISIBLE, CLR_GRAY), + M3_INFRAVISIBLE, 9, CLR_GRAY), /* * Zombies */ @@ -1965,21 +1965,22 @@ struct permonst _mons2[] = { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, CLR_BROWN), + M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, 1, CLR_BROWN), MON("gnome zombie", S_ZOMBIE, LVL(1, 6, 10, 0, -2), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(650, 50, MS_SILENT, MZ_SMALL), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, - CLR_BROWN), + 2, CLR_BROWN), MON("orc zombie", S_ZOMBIE, LVL(2, 6, 9, 0, -3), (G_GENO | G_SGROUP | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(850, 75, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, - M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, M3_INFRAVISION, CLR_GRAY), + M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, M3_INFRAVISION, 3, + CLR_GRAY), MON("dwarf zombie", S_ZOMBIE, LVL(2, 6, 9, 0, -3), (G_GENO | G_SGROUP | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1987,7 +1988,7 @@ struct permonst _mons2[] = { SIZ(900, 150, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_DWARF, M3_INFRAVISION, - CLR_RED), + 3, CLR_RED), MON("elf zombie", S_ZOMBIE, LVL(3, 6, 9, 0, -3), (G_GENO | G_SGROUP | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 7), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -1995,7 +1996,7 @@ struct permonst _mons2[] = { SIZ(WT_ELF, 175, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, M3_INFRAVISION, - CLR_GREEN), + 4, CLR_GREEN), MON("human zombie", S_ZOMBIE, LVL(4, 6, 8, 0, -3), (G_GENO | G_SGROUP | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -2003,7 +2004,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 200, MS_SILENT, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, - M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, HI_DOMESTIC), + M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, 5, HI_DOMESTIC), MON("ettin zombie", S_ZOMBIE, LVL(6, 8, 6, 0, -4), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 10), ATTK(AT_CLAW, AD_PHYS, 1, 10), @@ -2011,13 +2012,13 @@ struct permonst _mons2[] = { SIZ(1700, 250, MS_SILENT, MZ_HUGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, - CLR_BLUE), + 7, CLR_BLUE), MON("ghoul", S_ZOMBIE, LVL(3, 6, 10, 0, -2), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PLYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS | M1_OMNIVORE, - M2_UNDEAD | M2_WANDER | M2_HOSTILE, M3_INFRAVISION, CLR_BLACK), + M2_UNDEAD | M2_WANDER | M2_HOSTILE, M3_INFRAVISION, 5, CLR_BLACK), MON("giant zombie", S_ZOMBIE, LVL(8, 8, 6, 0, -4), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, @@ -2025,7 +2026,7 @@ struct permonst _mons2[] = { SIZ(2050, 375, MS_SILENT, MZ_HUGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG, - M3_INFRAVISION, CLR_CYAN), + M3_INFRAVISION, 9, CLR_CYAN), MON("skeleton", S_ZOMBIE, LVL(12, 8, 4, 0, 0), (G_NOCORPSE | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_TUCH, AD_SLOW, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2034,7 +2035,7 @@ struct permonst _mons2[] = { M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_UNDEAD | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_COLLECT | M2_NASTY, - M3_INFRAVISION, CLR_WHITE), + M3_INFRAVISION, 14, CLR_WHITE), /* * golems */ @@ -2043,37 +2044,37 @@ struct permonst _mons2[] = { NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 0, MS_SILENT, MZ_LARGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, - CLR_YELLOW), + 4, CLR_YELLOW), MON("paper golem", S_GOLEM, LVL(3, 12, 10, 0, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 0, MS_SILENT, MZ_LARGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, - HI_PAPER), + 4, HI_PAPER), MON("rope golem", S_GOLEM, LVL(4, 9, 8, 0, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_HUGS, AD_PHYS, 6, 1), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(450, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, - CLR_BROWN), + 6, CLR_BROWN), MON("gold golem", S_GOLEM, LVL(5, 9, 6, 0, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 3), ATTK(AT_CLAW, AD_PHYS, 2, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(450, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON | MR_ACID, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, - M2_HOSTILE | M2_NEUTER, 0, HI_GOLD), + M2_HOSTILE | M2_NEUTER, 0, 6, HI_GOLD), MON("leather golem", S_GOLEM, LVL(6, 6, 6, 0, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(800, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, - HI_LEATHER), + 7, HI_LEATHER), MON("wood golem", S_GOLEM, LVL(7, 3, 4, 0, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 0, MS_SILENT, MZ_LARGE), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, - M2_HOSTILE | M2_NEUTER, 0, HI_WOOD), + M2_HOSTILE | M2_NEUTER, 0, 8, HI_WOOD), MON("flesh golem", S_GOLEM, LVL(9, 8, 9, 30, 0), (1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2081,32 +2082,32 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_STRONG, 0, - CLR_RED), + 10, CLR_RED), MON("clay golem", S_GOLEM, LVL(11, 7, 7, 40, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 3, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1550, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, - M2_HOSTILE | M2_STRONG, 0, CLR_BROWN), + M2_HOSTILE | M2_STRONG, 0, 12, CLR_BROWN), MON("stone golem", S_GOLEM, LVL(14, 6, 5, 50, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 3, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1900, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, - M2_HOSTILE | M2_STRONG, 0, CLR_GRAY), + M2_HOSTILE | M2_STRONG, 0, 15, CLR_GRAY), MON("glass golem", S_GOLEM, LVL(16, 6, 1, 50, 0), (G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1800, 0, MS_SILENT, MZ_LARGE), MR_SLEEP | MR_POISON | MR_ACID, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, - M2_HOSTILE | M2_STRONG, 0, CLR_CYAN), + M2_HOSTILE | M2_STRONG, 0, 18, CLR_CYAN), MON("iron golem", S_GOLEM, LVL(18, 6, 3, 60, 0), (G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_BREA, AD_DRST, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2000, 0, MS_SILENT, MZ_LARGE), MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE | M1_POIS, - M2_HOSTILE | M2_STRONG | M2_COLLECT, 0, HI_METAL), + M2_HOSTILE | M2_STRONG | M2_COLLECT, 0, 22, HI_METAL), /* * humans, including elves and were-critters */ @@ -2116,67 +2117,67 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 2, HI_DOMESTIC), MON("wererat", S_HUMAN, LVL(2, 12, 10, 10, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BROWN), + M3_INFRAVISIBLE, 3, CLR_BROWN), MON("werejackal", S_HUMAN, LVL(2, 12, 10, 10, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 3, CLR_RED), MON("werewolf", S_HUMAN, LVL(5, 12, 10, 20, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, - M3_INFRAVISIBLE, CLR_ORANGE), + M3_INFRAVISIBLE, 6, CLR_ORANGE), MON("elf", S_HUMAN, LVL(10, 12, 10, 2, -3), G_NOGEN, /* for corpses */ A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_ELF | M2_STRONG | M2_COLLECT, - M3_INFRAVISION | M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISION | M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("Woodland-elf", S_HUMAN, LVL(4, 12, 10, 10, -5), (G_GENO | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GREEN), + M3_INFRAVISIBLE | M3_INFRAVISION, 6, CLR_GREEN), MON("Green-elf", S_HUMAN, LVL(5, 12, 10, 10, -6), (G_GENO | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BRIGHT_GREEN), + M3_INFRAVISIBLE | M3_INFRAVISION, 7, CLR_BRIGHT_GREEN), MON("Grey-elf", S_HUMAN, LVL(6, 12, 10, 10, -7), (G_GENO | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), MON("elf-lord", S_HUMAN, LVL(8, 12, 10, 20, -9), (G_GENO | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BRIGHT_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_BRIGHT_BLUE), MON("Elvenking", S_HUMAN, LVL(9, 12, 10, 25, -10), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_STRONG | M2_PRINCE | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD), MON("doppelganger", S_HUMAN, LVL(9, 12, 5, 20, 0), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2184,21 +2185,21 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 11, HI_DOMESTIC), MON("shopkeeper", S_HUMAN, LVL(12, 18, 0, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SELL, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 15, HI_DOMESTIC), MON("guard", S_HUMAN, LVL(12, 12, 10, 40, 10), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARD, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 14, CLR_BLUE), MON("prisoner", S_HUMAN, LVL(12, 12, 10, 0, 0), G_NOGEN, /* for special levels */ A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -2206,14 +2207,14 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_DJINNI, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE | M3_CLOSE, HI_DOMESTIC), + M3_INFRAVISIBLE | M3_CLOSE, 14, HI_DOMESTIC), MON("Oracle", S_HUMAN, LVL(12, 0, 0, 50, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_NONE, AD_MAGM, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_ORACLE, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_FEMALE, M3_INFRAVISIBLE, - HI_ZAP), + 13, HI_ZAP), /* aligned priests always have the epri extension attached; individual instantiations should always have either ispriest or isminion set */ @@ -2223,7 +2224,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_PRIEST, MZ_HUMAN), MR_ELEC, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_LORD | M2_PEACEFUL | M2_COLLECT, - M3_INFRAVISIBLE, CLR_WHITE), + M3_INFRAVISIBLE, 15, CLR_WHITE), /* high priests always have epri and always have ispriest set */ MON("high priest", S_HUMAN, LVL(25, 15, 7, 70, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 2, 8), @@ -2234,41 +2235,41 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MINION | M2_PRINCE | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, CLR_WHITE), + M3_INFRAVISIBLE, 30, CLR_WHITE), MON("soldier", S_HUMAN, LVL(6, 10, 10, 0, -2), (G_SGROUP | G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_GRAY), + M3_INFRAVISIBLE, 8, CLR_GRAY), MON("sergeant", S_HUMAN, LVL(8, 10, 10, 5, -3), (G_SGROUP | G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_RED), + M3_INFRAVISIBLE, 10, CLR_RED), MON("nurse", S_HUMAN, LVL(11, 6, 0, 0, 0), (G_GENO | 3), A(ATTK(AT_CLAW, AD_HEAL, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NURSE, MZ_HUMAN), MR_POISON, MR_POISON, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 13, HI_DOMESTIC), MON("lieutenant", S_HUMAN, LVL(10, 10, 10, 15, -4), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_GREEN), + M3_INFRAVISIBLE, 12, CLR_GREEN), MON("captain", S_HUMAN, LVL(12, 10, 10, 15, -5), (G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_BLUE), + M3_INFRAVISIBLE, 14, CLR_BLUE), /* Keep these separate - some of the mkroom code assumes that * all the soldiers are contiguous. */ @@ -2279,7 +2280,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_GRAY), + M3_INFRAVISIBLE, 8, CLR_GRAY), MON("watch captain", S_HUMAN, LVL(10, 10, 10, 15, -4), (G_NOGEN | G_GENO | 1), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 3, 4), NO_ATTK, @@ -2287,7 +2288,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, CLR_GREEN), + M3_INFRAVISIBLE, 12, CLR_GREEN), /* Unique humans not tied to quests. */ MON("Medusa", S_HUMAN, LVL(20, 12, 2, 50, -15), (G_NOGEN | G_UNIQ), @@ -2298,7 +2299,7 @@ struct permonst _mons2[] = { MR_POISON | MR_STONE, M1_FLY | M1_SWIM | M1_AMPHIBIOUS | M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE, - M3_WAITFORU | M3_INFRAVISIBLE, CLR_BRIGHT_GREEN), + M3_WAITFORU | M3_INFRAVISIBLE, 25, CLR_BRIGHT_GREEN), MON("Wizard of Yendor", S_HUMAN, LVL(30, 12, -8, 100, A_NONE), (G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_SAMU, 2, 12), ATTK(AT_MAGC, AD_SPEL, 0, 0), @@ -2309,7 +2310,7 @@ struct permonst _mons2[] = { | M1_TPORT | M1_TPORT_CNTRL | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE | M2_MAGIC, - M3_COVETOUS | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_COVETOUS | M3_WAITFORU | M3_INFRAVISIBLE, 34, HI_LORD), MON("Croesus", S_HUMAN, LVL(20, 15, 0, 40, 15), (G_UNIQ | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2318,7 +2319,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, HI_LORD), + M3_INFRAVISIBLE, 22, HI_LORD), #ifdef CHARON MON("Charon", S_HUMAN, LVL(76, 18, -5, 120, 0), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), @@ -2329,7 +2330,7 @@ struct permonst _mons2[] = { M1_BREATHLESS | M1_SEE_INVIS | M1_HUMANOID, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_PNAME | M2_MALE | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, CLR_WHITE), + M3_INFRAVISIBLE, 38, CLR_WHITE), #endif /* * ghosts @@ -2341,7 +2342,7 @@ struct permonst _mons2[] = { MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, - CLR_GRAY), + 12, CLR_GRAY), MON("shade", S_GHOST, LVL(12, 10, 10, 0, 0), (G_NOCORPSE | G_NOGEN), A(ATTK(AT_TUCH, AD_PLYS, 2, 6), ATTK(AT_TUCH, AD_SLOW, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2350,7 +2351,7 @@ struct permonst _mons2[] = { M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID | M1_SEE_INVIS, M2_NOPOLY | M2_UNDEAD | M2_WANDER | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISION, CLR_BLACK), + M3_INFRAVISION, 14, CLR_BLACK), /* * (major) demons */ @@ -2361,7 +2362,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_DJINNI, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_SWIM, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_BLUE), /* standard demons & devils */ #define SEDUCTION_ATTACKS_YES \ @@ -2374,7 +2375,7 @@ struct permonst _mons2[] = { SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), MON("horned devil", S_DEMON, LVL(6, 9, -5, 50, 11), (G_HELL | G_NOCORPSE | 2), A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), @@ -2382,12 +2383,12 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BROWN), + M3_INFRAVISIBLE | M3_INFRAVISION, 9, CLR_BROWN), MON("incubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1), SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY), /* Used by AD&D for a type of demon, originally one of the Furies and spelled this way */ MON("erinys", S_DEMON, LVL(7, 12, 2, 30, 10), @@ -2398,14 +2399,14 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 10, CLR_RED), MON("barbed devil", S_DEMON, LVL(8, 12, 0, 35, 8), (G_HELL | G_NOCORPSE | G_SGROUP | 2), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 10, CLR_RED), MON("marilith", S_DEMON, LVL(7, 12, -6, 80, -12), (G_HELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), @@ -2414,7 +2415,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_CUSS, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_SLITHY | M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_RED), MON("vrock", S_DEMON, LVL(8, 12, 0, 50, -9), (G_HELL | G_NOCORPSE | G_SGROUP | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), @@ -2422,21 +2423,21 @@ struct permonst _mons2[] = { ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_RED), MON("hezrou", S_DEMON, LVL(9, 6, -2, 55, -10), (G_HELL | G_NOCORPSE | G_SGROUP | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 12, CLR_RED), MON("bone devil", S_DEMON, LVL(9, 15, -1, 40, -9), (G_HELL | G_NOCORPSE | G_SGROUP | 2), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 13, CLR_GRAY), MON("ice devil", S_DEMON, LVL(11, 6, -4, 55, -12), (G_HELL | G_NOCORPSE | 2), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), @@ -2445,7 +2446,7 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_COLD | MR_POISON, 0, M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_WHITE), + M3_INFRAVISIBLE | M3_INFRAVISION, 14, CLR_WHITE), MON("nalfeshnee", S_DEMON, LVL(11, 9, -1, 65, -11), (G_HELL | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), @@ -2453,7 +2454,7 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(WT_HUMAN, 400, MS_SPELL, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 15, CLR_RED), MON("pit fiend", S_DEMON, LVL(13, 6, -3, 65, -13), (G_HELL | G_NOCORPSE | 2), A(ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_WEAP, AD_PHYS, 4, 2), @@ -2461,21 +2462,21 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_GROWL, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 16, CLR_RED), MON("sandestin", S_DEMON, LVL(13, 12, 4, 60, -5), (G_HELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 400, MS_CUSS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID, M2_NOPOLY | M2_STALK | M2_STRONG | M2_COLLECT | M2_SHAPESHIFTER, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY), + M3_INFRAVISIBLE | M3_INFRAVISION, 15, CLR_GRAY), MON("balrog", S_DEMON, LVL(16, 5, -2, 75, -14), (G_HELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, CLR_RED), + M3_INFRAVISIBLE | M3_INFRAVISION, 20, CLR_RED), /* Named demon lords & princes plus Arch-Devils. * (their order matters; see minion.c) */ @@ -2489,7 +2490,7 @@ struct permonst _mons2[] = { | M1_ACID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD | M2_MALE, - M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISION, CLR_BRIGHT_GREEN), + M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISION, 26, CLR_BRIGHT_GREEN), MON("Yeenoghu", S_DEMON, LVL(56, 18, -5, 80, -15), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_WEAP, AD_CONF, 2, 8), @@ -2499,7 +2500,7 @@ struct permonst _mons2[] = { M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD | M2_MALE | M2_COLLECT, - M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, 31, HI_LORD), MON("Orcus", S_DEMON, LVL(66, 9, -6, 85, -20), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 4), @@ -2511,7 +2512,7 @@ struct permonst _mons2[] = { | M2_PRINCE | M2_MALE | M2_COLLECT, M3_WAITFORU | M3_WANTSBOOK | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, - HI_LORD), + 36, HI_LORD), MON("Geryon", S_DEMON, LVL(72, 3, -3, 75, 15), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 6), @@ -2520,7 +2521,7 @@ struct permonst _mons2[] = { M1_FLY | M1_SEE_INVIS | M1_POIS | M1_SLITHY, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, - M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, 36, HI_LORD), MON("Dispater", S_DEMON, LVL(78, 15, -2, 80, 15), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_MAGC, AD_SPEL, 6, 6), NO_ATTK, @@ -2529,7 +2530,7 @@ struct permonst _mons2[] = { M1_FLY | M1_SEE_INVIS | M1_POIS | M1_HUMANOID, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT, - M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, 40, HI_LORD), MON("Baalzebub", S_DEMON, LVL(89, 9, -5, 85, 20), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_BITE, AD_DRST, 2, 6), ATTK(AT_GAZE, AD_STUN, 2, 6), NO_ATTK, @@ -2539,7 +2540,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, - HI_LORD), + 45, HI_LORD), MON("Asmodeus", S_DEMON, LVL(105, 12, -7, 90, 20), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 4, 4), ATTK(AT_MAGC, AD_COLD, 6, 6), NO_ATTK, @@ -2549,7 +2550,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, - HI_LORD), + 53, HI_LORD), MON("Demogorgon", S_DEMON, LVL(106, 15, -8, 95, -20), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_MAGC, AD_SPEL, 8, 6), ATTK(AT_STNG, AD_DRLI, 1, 4), @@ -2559,7 +2560,7 @@ struct permonst _mons2[] = { M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, - M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, 57, HI_LORD), /* Riders -- the Four Horsemen of the Apocalypse ("War" == player); * depicted with '&' but do not have M2_DEMON set. */ @@ -2570,7 +2571,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, 34, HI_LORD), MON("Pestilence", S_DEMON, LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN), A(ATTK(AT_TUCH, AD_PEST, 8, 8), ATTK(AT_TUCH, AD_PEST, 8, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2578,7 +2579,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, 34, HI_LORD), MON("Famine", S_DEMON, LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN), A(ATTK(AT_TUCH, AD_FAMN, 8, 8), ATTK(AT_TUCH, AD_FAMN, 8, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2586,7 +2587,7 @@ struct permonst _mons2[] = { MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, HI_LORD), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, 34, HI_LORD), /* other demons */ #ifdef MAIL @@ -2598,14 +2599,14 @@ struct permonst _mons2[] = { M1_FLY | M1_SWIM | M1_BREATHLESS | M1_SEE_INVIS | M1_HUMANOID | M1_POIS, M2_NOPOLY | M2_STALK | M2_PEACEFUL, M3_INFRAVISIBLE | M3_INFRAVISION, - CLR_BRIGHT_BLUE), + 26, CLR_BRIGHT_BLUE), #endif MON("djinni", S_DEMON, LVL(7, 12, 4, 30, 0), (G_NOGEN | G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 400, MS_DJINNI, MZ_HUMAN), MR_POISON | MR_STONE, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_NOPOLY | M2_STALK | M2_COLLECT, - M3_INFRAVISIBLE, CLR_YELLOW), + M3_INFRAVISIBLE, 8, CLR_YELLOW), /* * sea monsters */ @@ -2615,42 +2616,42 @@ struct permonst _mons2[] = { SIZ(80, 20, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_AMPHIBIOUS | M1_SLITHY | M1_NOLIMBS | M1_NOHEAD | M1_NOTAKE | M1_POIS, - M2_HOSTILE, 0, CLR_BLUE), + M2_HOSTILE, 0, 5, CLR_BLUE), MON("piranha", S_EEL, LVL(5, 12, 4, 0, 0), (G_GENO | G_NOGEN | G_SGROUP), A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(60, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, 0, CLR_RED), + M2_HOSTILE, 0, 6, CLR_RED), MON("shark", S_EEL, LVL(7, 12, 2, 0, 0), (G_GENO | G_NOGEN), A(ATTK(AT_BITE, AD_PHYS, 5, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 350, MS_SILENT, MZ_LARGE), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_THICK_HIDE | M1_NOTAKE, - M2_HOSTILE, 0, CLR_GRAY), + M2_HOSTILE, 0, 9, CLR_GRAY), MON("giant eel", S_EEL, LVL(5, 9, -1, 0, 0), (G_GENO | G_NOGEN), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_TUCH, AD_WRAP, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 250, MS_SILENT, MZ_HUGE), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_CYAN), + M2_HOSTILE, M3_INFRAVISIBLE, 7, CLR_CYAN), MON("electric eel", S_EEL, LVL(7, 10, -3, 0, 0), (G_GENO | G_NOGEN), A(ATTK(AT_BITE, AD_ELEC, 4, 6), ATTK(AT_TUCH, AD_WRAP, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 250, MS_SILENT, MZ_HUGE), MR_ELEC, MR_ELEC, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, M3_INFRAVISIBLE, CLR_BRIGHT_BLUE), + M2_HOSTILE, M3_INFRAVISIBLE, 10, CLR_BRIGHT_BLUE), MON("kraken", S_EEL, LVL(20, 3, 6, 0, -3), (G_GENO | G_NOGEN), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_HUGS, AD_WRAP, 2, 6), ATTK(AT_BITE, AD_PHYS, 5, 4), NO_ATTK, NO_ATTK), SIZ(1800, 1000, MS_SILENT, MZ_HUGE), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_NOPOLY | M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CLR_RED), + M2_NOPOLY | M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 22, CLR_RED), /* * lizards, &c */ @@ -2659,41 +2660,41 @@ struct permonst _mons2[] = { NO_ATTK), SIZ(10, 20, MS_SILENT, MZ_TINY), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_YELLOW), + M2_HOSTILE, 0, 1, CLR_YELLOW), MON("gecko", S_LIZARD, LVL(1, 6, 8, 0, 0), (G_GENO | 5), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 20, MS_SQEEK, MZ_TINY), 0, 0, - M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, CLR_GREEN), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, 2, CLR_GREEN), MON("iguana", S_LIZARD, LVL(2, 6, 7, 0, 0), (G_GENO | 5), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 30, MS_SILENT, MZ_TINY), 0, 0, - M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, CLR_BROWN), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, 3, CLR_BROWN), MON("baby crocodile", S_LIZARD, LVL(3, 6, 7, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(200, 200, MS_SILENT, MZ_MEDIUM), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE, 0, CLR_BROWN), + M2_HOSTILE, 0, 4, CLR_BROWN), MON("lizard", S_LIZARD, LVL(5, 6, 6, 10, 0), (G_GENO | 5), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 40, MS_SILENT, MZ_TINY), MR_STONE, MR_STONE, - M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, CLR_GREEN), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, 6, CLR_GREEN), MON("chameleon", S_LIZARD, LVL(6, 5, 6, 10, 0), (G_GENO | 2), A(ATTK(AT_BITE, AD_PHYS, 4, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(100, 100, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_NOPOLY | M2_HOSTILE | M2_SHAPESHIFTER, 0, CLR_BROWN), + M2_NOPOLY | M2_HOSTILE | M2_SHAPESHIFTER, 0, 7, CLR_BROWN), MON("crocodile", S_LIZARD, LVL(6, 9, 5, 0, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 4, 2), ATTK(AT_CLAW, AD_PHYS, 1, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, - M2_STRONG | M2_HOSTILE, 0, CLR_BROWN), + M2_STRONG | M2_HOSTILE, 0, 7, CLR_BROWN), MON("salamander", S_LIZARD, LVL(8, 12, -1, 0, -9), (G_HELL | 1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_TUCH, AD_FIRE, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 6), ATTK(AT_HUGS, AD_FIRE, 3, 6), NO_ATTK, @@ -2701,7 +2702,7 @@ struct permonst _mons2[] = { SIZ(1500, 400, MS_MUMBLE, MZ_HUMAN), MR_SLEEP | MR_FIRE, MR_FIRE, M1_HUMANOID | M1_SLITHY | M1_THICK_HIDE | M1_POIS, M2_STALK | M2_HOSTILE | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, - CLR_ORANGE), + 12, CLR_ORANGE), /* * dummy monster needed for visual interface @@ -2710,7 +2711,7 @@ struct permonst _mons2[] = { MON("long worm tail", S_WORM_TAIL, LVL(0, 0, 0, 0, 0), (G_NOGEN | G_NOCORPSE | G_UNIQ), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, CLR_BROWN), + SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, 1, CLR_BROWN), /* Note: * Worm tail must be between the normal monsters and the special * quest & pseudo-character ones because an optimization in the @@ -2727,105 +2728,105 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_TUNNEL | M1_NEEDPICK | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("barbarian", S_HUMAN, LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("caveman", S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("cavewoman", S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("healer", S_HUMAN, LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("knight", S_HUMAN, LVL(10, 12, 10, 1, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("monk", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_KICK, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT | M2_MALE, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 11, HI_DOMESTIC), MON("priest", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("priestess", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("ranger", S_HUMAN, LVL(10, 12, 10, 2, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("rogue", S_HUMAN, LVL(10, 12, 10, 1, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("samurai", S_HUMAN, LVL(10, 12, 10, 1, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("tourist", S_HUMAN, LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, - HI_DOMESTIC), + 12, HI_DOMESTIC), MON("valkyrie", S_HUMAN, LVL(10, 12, 10, 1, -1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_COLD, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), MON("wizard", S_HUMAN, LVL(10, 12, 10, 3, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 12, HI_DOMESTIC), /* * quest leaders */ @@ -2836,7 +2837,7 @@ struct permonst _mons2[] = { M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 22, HI_LORD), MON("Pelias", S_HUMAN, LVL(20, 12, 0, 30, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2844,7 +2845,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 22, HI_LORD), MON("Shaman Karnov", S_HUMAN, LVL(20, 12, 0, 30, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2852,7 +2853,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 22, HI_LORD), #if 0 /* OBSOLETE */ /* Two for elves - one of each sex. */ @@ -2864,7 +2865,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_ELF | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, 22, HI_LORD), MON("Elwing", S_HUMAN, LVL(20, 12, 0, 50, -20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), @@ -2873,7 +2874,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_ELF | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_FEMALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, 22, HI_LORD), #endif MON("Hippocrates", S_HUMAN, LVL(20, 12, 0, 40, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -2882,7 +2883,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 22, HI_LORD), MON("King Arthur", S_HUMAN, LVL(20, 12, 0, 40, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2890,7 +2891,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 23, HI_LORD), MON("Grand Master", S_HUMAN, LVL(25, 12, 0, 70, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, @@ -2900,7 +2901,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_SEE_INVIS | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_NASTY | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, CLR_BLACK), + M3_CLOSE | M3_INFRAVISIBLE, 30, CLR_BLACK), MON("Arch Priest", S_HUMAN, LVL(25, 12, 7, 70, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, @@ -2910,7 +2911,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, CLR_WHITE), + M3_CLOSE | M3_INFRAVISIBLE, 30, CLR_WHITE), MON("Orion", S_HUMAN, LVL(20, 12, 0, 30, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2918,7 +2919,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS | M1_SWIM | M1_AMPHIBIOUS, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, 22, HI_LORD), /* Note: Master of Thieves is also the Tourist's nemesis. */ MON("Master of Thieves", S_HUMAN, LVL(20, 12, 0, 30, -20), @@ -2929,7 +2930,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD), MON("Lord Sato", S_HUMAN, LVL(20, 12, 0, 30, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2937,7 +2938,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 23, HI_LORD), MON("Twoflower", S_HUMAN, LVL(20, 12, 10, 20, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2945,7 +2946,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_DOMESTIC), + M3_CLOSE | M3_INFRAVISIBLE, 22, HI_DOMESTIC), MON("Norn", S_HUMAN, LVL(20, 12, 0, 80, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2953,7 +2954,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_FEMALE | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, HI_LORD), + M3_CLOSE | M3_INFRAVISIBLE, 23, HI_LORD), MON("Neferet the Green", S_HUMAN, LVL(20, 12, 0, 60, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 2, 8), NO_ATTK, @@ -2962,7 +2963,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_FEMALE | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, CLR_GREEN), + M3_CLOSE | M3_INFRAVISIBLE, 23, CLR_GREEN), /* * quest nemeses */ @@ -2976,7 +2977,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, - CLR_RED), + 23, CLR_RED), MON("Thoth Amon", S_HUMAN, LVL(16, 12, 0, 10, -14), (G_NOGEN | G_UNIQ | G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), @@ -2986,7 +2987,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_STRONG | M2_MALE | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 22, HI_LORD), /* Multi-headed, possessing the breath attacks of all the other dragons * (selected at random when attacking). */ @@ -3003,7 +3004,7 @@ struct permonst _mons2[] = { M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_HOSTILE | M2_FEMALE | M2_STALK | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 23, HI_LORD), #if 0 /* OBSOLETE */ MON("Goblin King", S_ORC, LVL(15, 12, 10, 0, -15), (G_NOGEN | G_UNIQ), @@ -3014,7 +3015,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_ORC | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, - HI_LORD), + 18, HI_LORD), #endif MON("Cyclops", S_GIANT, LVL(18, 12, 0, 0, -15), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 8), ATTK(AT_WEAP, AD_PHYS, 4, 8), @@ -3024,7 +3025,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, - CLR_GRAY), + 23, CLR_GRAY), MON("Ixoth", S_DRAGON, LVL(15, 12, -1, 20, -14), (G_NOGEN | G_UNIQ), A(ATTK(AT_BREA, AD_FIRE, 8, 6), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_PHYS, 2, 4), @@ -3034,7 +3035,7 @@ struct permonst _mons2[] = { M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_STALK | M2_GREEDY | M2_JEWELS | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, CLR_RED), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 22, CLR_RED), MON("Master Kaen", S_HUMAN, LVL(25, 12, -10, 10, -20), (G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 16, 2), ATTK(AT_CLAW, AD_PHYS, 16, 2), ATTK(AT_MAGC, AD_CLRC, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), NO_ATTK, @@ -3043,7 +3044,7 @@ struct permonst _mons2[] = { MR_POISON, M1_HUMANOID | M1_HERBIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_HUMAN | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_STALK | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 31, HI_LORD), MON("Nalzok", S_DEMON, LVL(16, 12, -2, 85, -127), (G_NOGEN | G_UNIQ | G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), @@ -3054,7 +3055,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_DEMON | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, - CLR_RED), + 23, CLR_RED), MON("Scorpius", S_SPIDER, LVL(15, 12, 10, 0, -15), (G_NOGEN | G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 6), ATTK(AT_STNG, AD_DISE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), @@ -3062,7 +3063,7 @@ struct permonst _mons2[] = { M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, M2_NOPOLY | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU, HI_LORD), + M3_WANTSARTI | M3_WAITFORU, 17, HI_LORD), MON("Master Assassin", S_HUMAN, LVL(15, 12, 0, 30, 18), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_DRST, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 8), @@ -3071,7 +3072,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_HOSTILE | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 20, HI_LORD), /* A renegade daimyo who led a 13 year civil war against the shogun * of his time. */ @@ -3083,7 +3084,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_MALE | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, HI_LORD), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 19, HI_LORD), /* * Note: the Master of Thieves was defined above. */ @@ -3095,7 +3096,7 @@ struct permonst _mons2[] = { M2_NOPOLY | M2_GIANT | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STALK | M2_STRONG | M2_NASTY | M2_ROCKTHROW | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, - HI_LORD), + 19, HI_LORD), MON("Dark One", S_HUMAN, LVL(15, 12, 0, 80, -10), (G_NOGEN | G_UNIQ | G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), @@ -3105,7 +3106,7 @@ struct permonst _mons2[] = { M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, CLR_BLACK), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, 20, CLR_BLACK), /* * quest "guardians" */ @@ -3115,21 +3116,21 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("chieftain", S_HUMAN, LVL(5, 12, 10, 10, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("neanderthal", S_HUMAN, LVL(5, 12, 10, 10, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), #if 0 /* OBSOLETE */ MON("High-elf", S_HUMAN, LVL(5, 12, 10, 10, -7), G_NOGEN, @@ -3138,7 +3139,7 @@ struct permonst _mons2[] = { SIZ(WT_ELF, 350, MS_GUARDIAN, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_ELF | M2_PEACEFUL | M2_COLLECT, - M3_INFRAVISION | M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISION | M3_INFRAVISIBLE, 7, HI_DOMESTIC), #endif MON("attendant", S_HUMAN, LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, @@ -3146,83 +3147,83 @@ struct permonst _mons2[] = { SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("page", S_HUMAN, LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("abbot", S_HUMAN, LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_CLAW, AD_PHYS, 8, 2), ATTK(AT_KICK, AD_STUN, 3, 2), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 8, HI_DOMESTIC), MON("acolyte", S_HUMAN, LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 8, HI_DOMESTIC), MON("hunter", S_HUMAN, LVL(5, 12, 10, 10, -7), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISION | M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISION | M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("thug", S_HUMAN, LVL(5, 12, 10, 10, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("ninja", S_HUMAN, LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("roshi", S_HUMAN, LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("guide", S_HUMAN, LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 8, HI_DOMESTIC), MON("warrior", S_HUMAN, LVL(5, 12, 10, 10, -1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_FEMALE, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 7, HI_DOMESTIC), MON("apprentice", S_HUMAN, LVL(5, 12, 10, 30, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, HI_DOMESTIC), + M3_INFRAVISIBLE, 8, HI_DOMESTIC), /* * array terminator */ MON("", 0, LVL(0, 0, 0, 0, 0), (0), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, 0), 0, 0, 0L, 0L, 0, 0) + SIZ(0, 0, 0, 0), 0, 0, 0L, 0L, 0, 0, 0) }; #endif /* !SPLITMON_1 */ diff --git a/src/muse.c b/src/muse.c index 600bdd903..94b0350ad 100644 --- a/src/muse.c +++ b/src/muse.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 muse.c $NHDT-Date: 1505181522 2017/09/12 01:58:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.80 $ */ +/* NetHack 3.6 muse.c $NHDT-Date: 1539804880 2018/10/17 19:34:40 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.85 $ */ /* Copyright (C) 1990 by Ken Arromdee */ /* NetHack may be freely redistributed. See license for details. */ @@ -8,8 +8,6 @@ #include "hack.h" -extern const int monstr[]; - boolean m_using = FALSE; /* Let monsters use magic items. Arbitrary assumptions: Monsters only use @@ -991,7 +989,7 @@ rnd_defensive_item(mtmp) struct monst *mtmp; { struct permonst *pm = mtmp->data; - int difficulty = monstr[(monsndx(pm))]; + int difficulty = mons[(monsndx(pm))].difficulty; int trycnt = 0; if (is_animal(pm) || attacktype(pm, AT_EXPL) || mindless(mtmp->data) @@ -1556,7 +1554,7 @@ rnd_offensive_item(mtmp) struct monst *mtmp; { struct permonst *pm = mtmp->data; - int difficulty = monstr[(monsndx(pm))]; + int difficulty = mons[(monsndx(pm))].difficulty; if (is_animal(pm) || attacktype(pm, AT_EXPL) || mindless(mtmp->data) || pm->mlet == S_GHOST || pm->mlet == S_KOP) @@ -1636,7 +1634,7 @@ struct monst *mtmp; return FALSE; if (!stuck && !immobile && (mtmp->cham == NON_PM) - && monstr[(pmidx = monsndx(mdat))] < 6) { + && mons[(pmidx = monsndx(mdat))].difficulty < 6) { boolean ignore_boulders = (verysmall(mdat) || throws_rocks(mdat) || passes_walls(mdat)), diag_ok = !NODIAG(pmidx); @@ -1722,13 +1720,13 @@ struct monst *mtmp; } nomore(MUSE_WAN_POLYMORPH); if (obj->otyp == WAN_POLYMORPH && obj->spe > 0 - && (mtmp->cham == NON_PM) && monstr[monsndx(mdat)] < 6) { + && (mtmp->cham == NON_PM) && mons[monsndx(mdat)].difficulty < 6) { m.misc = obj; m.has_misc = MUSE_WAN_POLYMORPH; } nomore(MUSE_POT_POLYMORPH); if (obj->otyp == POT_POLYMORPH && (mtmp->cham == NON_PM) - && monstr[monsndx(mdat)] < 6) { + && mons[monsndx(mdat)].difficulty < 6) { m.misc = obj; m.has_misc = MUSE_POT_POLYMORPH; } @@ -1997,7 +1995,7 @@ rnd_misc_item(mtmp) struct monst *mtmp; { struct permonst *pm = mtmp->data; - int difficulty = monstr[(monsndx(pm))]; + int difficulty = mons[(monsndx(pm))].difficulty; if (is_animal(pm) || attacktype(pm, AT_EXPL) || mindless(mtmp->data) || pm->mlet == S_GHOST || pm->mlet == S_KOP) @@ -2052,7 +2050,7 @@ struct obj *obj; if (typ == WAN_DIGGING) return (boolean) !is_floater(mon->data); if (typ == WAN_POLYMORPH) - return (boolean) (monstr[monsndx(mon->data)] < 6); + return (boolean) (mons[monsndx(mon->data)].difficulty < 6); if (objects[typ].oc_dir == RAY || typ == WAN_STRIKING || typ == WAN_TELEPORTATION || typ == WAN_CREATE_MONSTER) return TRUE; diff --git a/src/pray.c b/src/pray.c index bd8a3604e..015f9633b 100644 --- a/src/pray.c +++ b/src/pray.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pray.c $NHDT-Date: 1519662898 2018/02/26 16:34:58 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.96 $ */ +/* NetHack 3.6 pray.c $NHDT-Date: 1539804904 2018/10/17 19:35:04 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.103 $ */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1325,7 +1325,6 @@ dosacrifice() if (otmp->otyp == CORPSE) { register struct permonst *ptr = &mons[otmp->corpsenm]; struct monst *mtmp; - extern const int monstr[]; /* KMH, conduct */ u.uconduct.gnostic++; @@ -1338,7 +1337,7 @@ dosacrifice() if (otmp->corpsenm == PM_ACID_BLOB || (monstermoves <= peek_at_iced_corpse_age(otmp) + 50)) { - value = monstr[otmp->corpsenm] + 1; + value = mons[otmp->corpsenm].difficulty + 1; if (otmp->oeaten) value = eaten_stat(value, otmp); } diff --git a/src/wizard.c b/src/wizard.c index 87e229ebc..b3a19e887 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 wizard.c $NHDT-Date: 1456618999 2016/02/28 00:23:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.48 $ */ +/* NetHack 3.6 wizard.c $NHDT-Date: 1539804905 2018/10/17 19:35:05 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.53 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2016. */ /* NetHack may be freely redistributed. See license for details. */ @@ -11,8 +11,6 @@ #include "hack.h" #include "qtext.h" -extern const int monstr[]; - STATIC_DCL short FDECL(which_arti, (int)); STATIC_DCL boolean FDECL(mon_has_arti, (struct monst *, SHORT_P)); STATIC_DCL struct monst *FDECL(other_mon_has_arti, (struct monst *, SHORT_P)); @@ -588,7 +586,8 @@ struct monst *summoner; m_cls = mons[makeindex].mlet; } while (summoner && ((attacktype(&mons[makeindex], AT_MAGC) - && monstr[makeindex] >= monstr[summoner->mnum]) + && mons[makeindex].difficulty + >= mons[summoner->mnum].difficulty) || (s_cls == S_DEMON && m_cls == S_ANGEL) || (s_cls == S_ANGEL && m_cls == S_DEMON))); /* do this after picking the monster to place */ diff --git a/util/makedefs.c b/util/makedefs.c index 19d5e708d..9b6551122 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 makedefs.c $NHDT-Date: 1520022901 2018/03/02 20:35:01 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.121 $ */ +/* NetHack 3.6 makedefs.c $NHDT-Date: 1539804926 2018/10/17 19:35:26 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.126 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */ /* Copyright (c) M. Stephenson, 1990, 1991. */ @@ -183,8 +183,6 @@ static boolean FDECL(get_gitinfo, (char *, char *)); static void FDECL(do_rnd_access_file, (const char *)); static boolean FDECL(d_filter, (char *)); static boolean FDECL(h_filter, (char *)); -static boolean FDECL(ranged_attk, (struct permonst *)); -static int FDECL(mstrength, (struct permonst *)); static void NDECL(build_savebones_compat_string); static void NDECL(windowing_sanity); @@ -2183,89 +2181,18 @@ do_dungeon() return; } -static boolean -ranged_attk(ptr) /* returns TRUE if monster can attack at range */ -register struct permonst *ptr; -{ - register int i, j; - register int atk_mask = (1 << AT_BREA) | (1 << AT_SPIT) | (1 << AT_GAZE); - - for (i = 0; i < NATTK; i++) { - if ((j = ptr->mattk[i].aatyp) >= AT_WEAP || (atk_mask & (1 << j))) - return TRUE; - } - - return FALSE; -} - -/* This routine is designed to return an integer value which represents - * an approximation of monster strength. It uses a similar method of - * determination as "experience()" to arrive at the strength. - */ -static int -mstrength(ptr) -struct permonst *ptr; -{ - int i, tmp2, n, tmp = ptr->mlevel; - - if (tmp > 49) /* special fixed hp monster */ - tmp = 2 * (tmp - 6) / 4; - - /* For creation in groups */ - n = (!!(ptr->geno & G_SGROUP)); - n += (!!(ptr->geno & G_LGROUP)) << 1; - - /* For ranged attacks */ - if (ranged_attk(ptr)) - n++; - - /* For higher ac values */ - n += (ptr->ac < 4); - n += (ptr->ac < 0); - - /* For very fast monsters */ - n += (ptr->mmove >= 18); - - /* For each attack and "special" attack */ - for (i = 0; i < NATTK; i++) { - tmp2 = ptr->mattk[i].aatyp; - n += (tmp2 > 0); - n += (tmp2 == AT_MAGC); - n += (tmp2 == AT_WEAP && (ptr->mflags2 & M2_STRONG)); - } - - /* For each "special" damage type */ - for (i = 0; i < NATTK; i++) { - tmp2 = ptr->mattk[i].adtyp; - if ((tmp2 == AD_DRLI) || (tmp2 == AD_STON) || (tmp2 == AD_DRST) - || (tmp2 == AD_DRDX) || (tmp2 == AD_DRCO) || (tmp2 == AD_WERE)) - n += 2; - else if (strcmp(ptr->mname, "grid bug")) - n += (tmp2 != AD_PHYS); - n += ((int) (ptr->mattk[i].damd * ptr->mattk[i].damn) > 23); - } - - /* Leprechauns are special cases. They have many hit dice so they can - hit and are hard to kill, but they don't really do much damage. */ - if (!strcmp(ptr->mname, "leprechaun")) - n -= 2; - - /* Finally, adjust the monster level 0 <= n <= 24 (approx.) */ - if (n == 0) - tmp--; - else if (n >= 6) - tmp += (n / 2); - else - tmp += (n / 3 + 1); - - return (tmp >= 0) ? tmp : 0; -} - void do_monstr() { - register struct permonst *ptr; - register int i, j; + /* Don't break anything for ports that haven't been updated. */ + printf("DEPRECATION WARNINGS:\n"); + printf("'makedefs -m' is deprecated. Remove all references\n"); + printf(" to it from the build process.\n"); + printf("'monstr.c' is deprecated. Remove all references to\n"); + printf(" it from the build process.\n"); + printf("monstr[] is deprecated. Replace monstr[x] with\n"); + printf(" mons[x].difficulty\n"); + printf("monstr_init() is deprecated. Remove all references to it.\n"); /* * create the source file, "monstr.c" @@ -2281,15 +2208,18 @@ do_monstr() } Fprintf(ofp, "%s", Dont_Edit_Code); Fprintf(ofp, "#include \"config.h\"\n"); - Fprintf(ofp, "\nconst int monstr[] = {\n"); - for (ptr = &mons[0], j = 0; ptr->mlet; ptr++) { - SpinCursor(3); - - i = mstrength(ptr); - Fprintf(ofp, "%2d,%c", i, (++j & 15) ? ' ' : '\n'); - } - /* might want to insert a final 0 entry here instead of just newline */ - Fprintf(ofp, "%s};\n", (j & 15) ? "\n" : ""); + Fprintf(ofp, "\nconst int monstrXXX[] = {\n"); + Fprintf(ofp, "0};\n"); + Fprintf(ofp, "/*\n"); + Fprintf(ofp, "DEPRECATION WARNINGS:\n"); + Fprintf(ofp, "'makedefs -m' is deprecated. Remove all references\n"); + Fprintf(ofp, " to it from the build process.\n"); + Fprintf(ofp, "'monstr.c' is deprecated. Remove all references to\n"); + Fprintf(ofp, " it from the build process.\n"); + Fprintf(ofp, "monstr[] is deprecated. Replace monstr[x] with\n"); + Fprintf(ofp, " mons[x].difficulty\n"); + Fprintf(ofp, "monstr_init() is deprecated. Remove all references to it.\n"); + Fprintf(ofp, "*/\n"); Fprintf(ofp, "\nvoid NDECL(monstr_init);\n"); Fprintf(ofp, "\nvoid\n");