diff --git a/include/monsters.h b/include/monsters.h index 45b01d3ae..e7a82d863 100644 --- a/include/monsters.h +++ b/include/monsters.h @@ -7,17 +7,10 @@ #define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, \ col, bn) PM_##bn -#define MON3(namm, namf, namn, sym, lvl, gen, atk, siz, mr1, mr2, flg1, \ - flg2, flg3, d, col, bn) PM_##bn - #elif defined(DUMP_ENUMS) #define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, \ col, bn) { PM_##bn, #bn} -#define MON3(namm, namf, namn, sym, lvl, gen, atk, siz, mr1, mr2, flg1, \ - flg2, flg3, d, col, bn) { PM_##bn, #bn } - - #elif !defined(MON) #error Non-productive inclusion of monsters.h #endif @@ -91,541 +84,652 @@ /* * ants */ - MON("giant ant", S_ANT, LVL(2, 18, 3, 0, 0), (G_GENO | G_SGROUP | 3), - A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("giant ant"), S_ANT, + LVL(2, 18, 3, 0, 0), (G_GENO | G_SGROUP | 3), + A(ATTK(AT_BITE, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 10, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, 4, CLR_BROWN, GIANT_ANT), - 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), + MON(NAM("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, 5, CLR_YELLOW, KILLER_BEE), - 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), + MON(NAM("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, 6, CLR_BLUE, SOLDIER_ANT), - 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), + M2_HOSTILE, 0, + 6, CLR_BLUE, SOLDIER_ANT), + MON(NAM("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, 6, CLR_RED, FIRE_ANT), - 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), + M3_INFRAVISIBLE, + 6, CLR_RED, FIRE_ANT), + MON(NAM("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(200, 50, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0, 6, CLR_BLACK, GIANT_BEETLE), - 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), + MON(NAM("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, 12, HI_LORD, QUEEN_BEE), + M2_HOSTILE | M2_FEMALE | M2_PRINCE, 0, + 12, HI_LORD, QUEEN_BEE), /* * blobs */ - MON("acid blob", S_BLOB, LVL(1, 3, 8, 0, 0), (G_GENO | 2), - A(ATTK(AT_NONE, AD_ACID, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("acid blob"), S_BLOB, + LVL(1, 3, 8, 0, 0), (G_GENO | 2), + A(ATTK(AT_NONE, AD_ACID, 1, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(30, 10, MS_SILENT, MZ_TINY), MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, MR_ACID | MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID, - M2_WANDER | M2_NEUTER, 0, 2, CLR_GREEN, ACID_BLOB), - 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), + M2_WANDER | M2_NEUTER, 0, + 2, CLR_GREEN, ACID_BLOB), + MON(NAM("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, 6, CLR_WHITE, QUIVERING_BLOB), - 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), + M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, + 6, CLR_WHITE, QUIVERING_BLOB), + MON(NAM("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), SIZ(600, 150, MS_SILENT, MZ_LARGE), MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, 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, 8, CLR_CYAN, GELATINOUS_CUBE), + M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, + 8, CLR_CYAN, GELATINOUS_CUBE), /* * cockatrice */ - MON("chickatrice", S_COCKATRICE, LVL(4, 4, 8, 30, 0), - (G_GENO | G_SGROUP | 1), + MON(NAM("chickatrice"), S_COCKATRICE, + LVL(4, 4, 8, 30, 0), (G_GENO | G_SGROUP | 1), A(ATTK(AT_BITE, AD_PHYS, 1, 2), ATTK(AT_TUCH, AD_STON, 0, 0), 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, 7, CLR_BROWN, CHICKATRICE), - MON("cockatrice", S_COCKATRICE, LVL(5, 6, 6, 30, 0), (G_GENO | 5), + M2_HOSTILE, M3_INFRAVISIBLE, + 7, CLR_BROWN, CHICKATRICE), + MON(NAM("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, 8, CLR_YELLOW, COCKATRICE), - MON("pyrolisk", S_COCKATRICE, LVL(6, 6, 6, 30, 0), (G_GENO | 1), + M3_INFRAVISIBLE, + 8, CLR_YELLOW, COCKATRICE), + MON(NAM("pyrolisk"), S_COCKATRICE, + LVL(6, 6, 6, 30, 0), (G_GENO | 1), A(ATTK(AT_GAZE, AD_FIRE, 2, 6), ATTK(AT_BITE, AD_PHYS, 1, 6), 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, 8, CLR_RED, PYROLISK), + M3_INFRAVISIBLE, + 8, CLR_RED, PYROLISK), /* * dogs & other canines */ - MON("jackal", S_DOG, LVL(0, 12, 7, 0, 0), (G_GENO | G_SGROUP | 3), - A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("jackal"), S_DOG, + LVL(0, 12, 7, 0, 0), (G_GENO | G_SGROUP | 3), + A(ATTK(AT_BITE, AD_PHYS, 1, 2), + 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, 1, CLR_BROWN, JACKAL), - 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), + MON(NAM("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, 1, CLR_RED, FOX), - 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), + MON(NAM("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, 2, CLR_BROWN, COYOTE), - 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), + MON(NAM("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, 4, CLR_BROWN, - WEREJACKAL), - 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), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, + 4, CLR_BROWN, WEREJACKAL), + MON(NAM("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, 3, HI_DOMESTIC, LITTLE_DOG), - 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), + MON(NAM("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, 5, CLR_YELLOW, DINGO), - 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), + MON(NAM("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, 5, HI_DOMESTIC, DOG), - 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), + MON(NAM("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, 7, HI_DOMESTIC, LARGE_DOG), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, LARGE_DOG), + MON(NAM("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, 6, CLR_GRAY, WOLF), - 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), + /* werewolf in wolf form; one in human form uses a different monster + type (in the S_HUMAN section below); switching back and forth is + a shape-change that sets monst->data to the appropriate monster */ + MON(NAM("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, 7, CLR_GRAY, - WEREWOLF), - MON("winter wolf cub", S_DOG, LVL(5, 12, 4, 0, -5), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, + 7, CLR_GRAY, WEREWOLF), + MON(NAM("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), + 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, 7, CLR_CYAN, - WINTER_WOLF_CUB), - 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), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, + 7, CLR_CYAN, WINTER_WOLF_CUB), + MON(NAM("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, 8, CLR_BLACK, WARG), - 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), + MON(NAM("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, 9, CLR_CYAN, WINTER_WOLF), - 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), + MON(NAM("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, 9, CLR_RED, HELL_HOUND_PUP), - 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), + MON(NAM("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, 14, CLR_RED, HELL_HOUND), #ifdef CHARON - MON("Cerberus", S_DOG, LVL(12, 10, 2, 20, -7), - (G_NOGEN | G_UNIQ | G_HELL), + MON(NAM("Cerberus"), S_DOG, + LVL(12, 10, 2, 20, -7), (G_NOGEN | G_UNIQ | G_HELL), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK), 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, 14, CLR_RED, CERBERUS), + M3_INFRAVISIBLE, + 14, CLR_RED, CERBERUS), #endif /* * eyes */ - MON("gas spore", S_EYE, LVL(1, 3, 10, 0, 0), (G_NOCORPSE | G_GENO | 1), - A(ATTK(AT_BOOM, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("gas spore"), S_EYE, + LVL(1, 3, 10, 0, 0), (G_NOCORPSE | G_GENO | 1), + A(ATTK(AT_BOOM, AD_PHYS, 4, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, 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, 2, CLR_GRAY, GAS_SPORE), - 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), + M2_HOSTILE | M2_NEUTER, 0, + 2, CLR_GRAY, GAS_SPORE), + MON(NAM("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, 3, CLR_BLUE, FLOATING_EYE), - 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, - NO_ATTK), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 3, CLR_BLUE, FLOATING_EYE), + MON(NAM("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, NO_ATTK), 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, 9, CLR_WHITE, - FREEZING_SPHERE), - 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), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 9, CLR_WHITE, FREEZING_SPHERE), + MON(NAM("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, 9, CLR_RED, FLAMING_SPHERE), - 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), + MON(NAM("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, 10, HI_ZAP, SHOCKING_SPHERE), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 10, HI_ZAP, SHOCKING_SPHERE), #if 0 /* not yet implemented */ - MON("beholder", S_EYE, + MON(NAM("beholder"), S_EYE, LVL(6, 3, 4, 0, -10), (G_GENO | 2), A(ATTK(AT_GAZE, AD_SLOW, 0, 0), ATTK(AT_GAZE, AD_SLEE, 2,25), ATTK(AT_GAZE, AD_DISN, 0, 0), ATTK(AT_GAZE, AD_STON, 0, 0), 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, 13, CLR_BROWN, - BEHOLDER), + M2_NOPOLY | M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 13, CLR_BROWN, BEHOLDER), #endif /* * felines */ - MON("kitten", S_FELINE, LVL(2, 18, 6, 0, 0), (G_GENO | 1), + MON(NAM("kitten"), S_FELINE, + 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_MEW, MZ_SMALL), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER | M2_DOMESTIC, - M3_INFRAVISIBLE | M3_INFRAVISION, 3, HI_DOMESTIC, KITTEN), - MON("housecat", S_FELINE, LVL(4, 16, 5, 0, 0), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 3, HI_DOMESTIC, KITTEN), + MON(NAM("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 | M3_INFRAVISION, 5, HI_DOMESTIC, HOUSECAT), - MON("jaguar", S_FELINE, LVL(4, 15, 6, 0, 0), (G_GENO | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, HI_DOMESTIC, HOUSECAT), + MON(NAM("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 | M3_INFRAVISION, 6, CLR_BROWN, JAGUAR), - MON("lynx", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 6, CLR_BROWN, JAGUAR), + MON(NAM("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 | M3_INFRAVISION, 7, CLR_CYAN, LYNX), - MON("panther", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, CLR_CYAN, LYNX), + MON(NAM("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 | M3_INFRAVISION, 7, CLR_BLACK, PANTHER), - MON("large cat", S_FELINE, LVL(6, 15, 4, 0, 0), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, CLR_BLACK, PANTHER), + MON(NAM("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 | M3_INFRAVISION, 7, HI_DOMESTIC, LARGE_CAT), - MON("tiger", S_FELINE, LVL(6, 12, 6, 0, 0), (G_GENO | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, HI_DOMESTIC, LARGE_CAT), + MON(NAM("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 | M3_INFRAVISION, 8, CLR_YELLOW, TIGER), - MON("displacer beast", S_FELINE, LVL(12, 12, -10, 0, -3), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 8, CLR_YELLOW, TIGER), + MON(NAM("displacer beast"), S_FELINE, + LVL(12, 12, -10, 0, -3), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 4, 4), ATTK(AT_CLAW, AD_PHYS, 4, 4), ATTK(AT_BITE, AD_PHYS, 2, 10), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(750, 400, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, 14, CLR_BLUE, - DISPLACER_BEAST), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, + 14, CLR_BLUE, DISPLACER_BEAST), /* * gremlins and gargoyles */ - MON("gremlin", S_GREMLIN, LVL(5, 12, 2, 25, -9), (G_GENO | 2), + MON(NAM("gremlin"), S_GREMLIN, + LVL(5, 12, 2, 25, -9), (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), ATTK(AT_CLAW, AD_CURS, 0, 0), NO_ATTK, - NO_ATTK), + ATTK(AT_BITE, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_CURS, 0, 0), + NO_ATTK, NO_ATTK), SIZ(100, 20, MS_LAUGH, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, M3_INFRAVISIBLE, 8, CLR_GREEN, GREMLIN), - MON("gargoyle", S_GREMLIN, LVL(6, 10, -4, 0, -9), (G_GENO | 2), + /* gargoyle and winged gargoyle are inspired by a cheesy made-for-TV + horror movie (starring Cornel Wilde and Jennifer Salt, 1972) */ + MON(NAM("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, 8, CLR_BROWN, GARGOYLE), - MON("winged gargoyle", S_GREMLIN, LVL(9, 15, -2, 0, -12), (G_GENO | 1), + M1_HUMANOID | M1_THICK_HIDE | M1_BREATHLESS, + M2_HOSTILE | M2_STRONG, 0, + 8, CLR_BROWN, GARGOYLE), + MON(NAM("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, 11, HI_LORD, - WINGED_GARGOYLE), + M2_LORD | M2_HOSTILE | M2_STRONG | M2_MAGIC, 0, + 11, HI_LORD, WINGED_GARGOYLE), /* * humanoids */ - MON("hobbit", S_HUMANOID, LVL(1, 9, 10, 0, 6), (G_GENO | 2), - A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("hobbit"), S_HUMANOID, + LVL(1, 9, 10, 0, 6), (G_GENO | 2), + 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, 2, CLR_GREEN, HOBBIT), + M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, + 2, CLR_GREEN, HOBBIT), /* unlike plain human|elf|orc, plain "dwarf" is an ordinary monster */ - 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), + MON(NAM("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_DWARF | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_RED, DWARF), - MON("bugbear", S_HUMANOID, LVL(3, 9, 5, 0, -6), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 4, CLR_RED, DWARF), + MON(NAM("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, 5, CLR_BROWN, BUGBEAR), - MON3("dwarf lord", "dwarf lady", "dwarf leader", - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, CLR_BROWN, BUGBEAR), + MON(NAMS("dwarf lord", "dwarf lady", "dwarf leader"), 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), SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_DWARF | M2_STRONG | M2_LORD | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 6, CLR_BLUE, DWARF_LEADER), - MON3("dwarf king", "dwarf queen", "dwarf ruler", + M3_INFRAVISIBLE | M3_INFRAVISION, + 6, CLR_BLUE, DWARF_LEADER), + MON(NAMS("dwarf king", "dwarf queen", "dwarf ruler"), 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), + A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), + 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_DWARF | M2_STRONG | M2_PRINCE | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 8, HI_LORD, DWARF_RULER), - MON("mind flayer", S_HUMANOID, LVL(9, 12, 5, 90, -8), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 8, HI_LORD, DWARF_RULER), + MON(NAM("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, - NO_ATTK), + ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), + NO_ATTK, NO_ATTK), 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, 13, CLR_BRIGHT_MAGENTA, MIND_FLAYER), - MON("master mind flayer", S_HUMANOID, LVL(13, 12, 0, 90, -8), - (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 13, CLR_BRIGHT_MAGENTA, MIND_FLAYER), + MON(NAM("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), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1)), 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, 19, CLR_BRIGHT_MAGENTA, - MASTER_MIND_FLAYER), + M3_INFRAVISIBLE | M3_INFRAVISION, + 19, CLR_BRIGHT_MAGENTA, MASTER_MIND_FLAYER), /* * imps & other minor demons/devils */ - MON("manes", S_IMP, LVL(1, 3, 7, 0, -7), - (G_GENO | G_LGROUP | G_NOCORPSE | 1), + MON(NAM("manes"), S_IMP, + LVL(1, 3, 7, 0, -7), (G_GENO | G_LGROUP | G_NOCORPSE | 1), 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, 3, CLR_RED, - MANES), - 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), + M2_HOSTILE | M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, + 3, CLR_RED, MANES), + MON(NAM("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, 3, CLR_GREEN, HOMUNCULUS), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 3, CLR_GREEN, HOMUNCULUS), + MON(NAM("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, 4, CLR_RED, IMP), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 4, CLR_RED, IMP), + MON(NAM("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, 5, CLR_BROWN, LEMURE), - MON("quasit", S_IMP, LVL(3, 15, 2, 20, -7), (G_GENO | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, CLR_BROWN, LEMURE), + MON(NAM("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, 7, CLR_BLUE, QUASIT), - 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), + M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, + 7, CLR_BLUE, QUASIT), + MON(NAM("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, 7, CLR_CYAN, TENGU), /* * jellies */ - MON("blue jelly", S_JELLY, LVL(4, 0, 8, 10, 0), (G_GENO | 2), - A(ATTK(AT_NONE, AD_COLD, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("blue jelly"), S_JELLY, + LVL(4, 0, 8, 10, 0), (G_GENO | 2), + A(ATTK(AT_NONE, AD_COLD, 0, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_COLD | MR_POISON, MR_COLD | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, 5, CLR_BLUE, BLUE_JELLY), - MON("spotted jelly", S_JELLY, LVL(5, 0, 8, 10, 0), (G_GENO | 1), + M2_HOSTILE | M2_NEUTER, 0, + 5, CLR_BLUE, BLUE_JELLY), + MON(NAM("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, MR_ACID | MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, 6, CLR_GREEN, SPOTTED_JELLY), - MON("ochre jelly", S_JELLY, LVL(6, 3, 8, 20, 0), (G_GENO | 2), + M2_HOSTILE | M2_NEUTER, 0, + 6, CLR_GREEN, SPOTTED_JELLY), + MON(NAM("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, MR_ACID | MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, 8, CLR_BROWN, OCHRE_JELLY), + M2_HOSTILE | M2_NEUTER, 0, + 8, CLR_BROWN, OCHRE_JELLY), /* * kobolds */ - MON("kobold", S_KOBOLD, LVL(0, 6, 10, 0, -2), (G_GENO | 1), - A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("kobold"), S_KOBOLD, + LVL(0, 6, 10, 0, -2), (G_GENO | 1), + 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), MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 1, CLR_BROWN, KOBOLD), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 1, CLR_BROWN, KOBOLD), + MON(NAM("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, 2, CLR_RED, LARGE_KOBOLD), - MON3("kobold lord", "kobold lady", "kobold leader", - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 2, CLR_RED, LARGE_KOBOLD), + MON(NAMS("kobold lord", "kobold lady", "kobold leader"), 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_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 3, HI_LORD, KOBOLD_LEADER), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 3, HI_LORD, KOBOLD_LEADER), + MON(NAM("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, 4, HI_ZAP, KOBOLD_SHAMAN), + M3_INFRAVISIBLE | M3_INFRAVISION, + 4, HI_ZAP, KOBOLD_SHAMAN), /* * leprechauns */ - MON("leprechaun", S_LEPRECHAUN, LVL(5, 15, 8, 20, 0), (G_GENO | 4), - A(ATTK(AT_CLAW, AD_SGLD, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("leprechaun"), S_LEPRECHAUN, + LVL(5, 15, 8, 20, 0), (G_GENO | 4), + 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, 4, CLR_GREEN, LEPRECHAUN), + M2_HOSTILE | M2_GREEDY, M3_INFRAVISIBLE, + 4, CLR_GREEN, LEPRECHAUN), /* * mimics */ - MON("small mimic", S_MIMIC, LVL(7, 3, 7, 0, 0), (G_GENO | 2), - A(ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("small mimic"), S_MIMIC, + LVL(7, 3, 7, 0, 0), (G_GENO | 2), + A(ATTK(AT_CLAW, AD_PHYS, 3, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 8, CLR_BROWN, SMALL_MIMIC), - 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), + M2_HOSTILE, 0, + 8, CLR_BROWN, SMALL_MIMIC), + MON(NAM("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), SIZ(600, 400, MS_SILENT, MZ_LARGE), MR_ACID, 0, 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, 9, CLR_RED, LARGE_MIMIC), - 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), + M2_HOSTILE | M2_STRONG, 0, + 9, CLR_RED, LARGE_MIMIC), + MON(NAM("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), SIZ(800, 500, MS_SILENT, MZ_LARGE), MR_ACID, 0, 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, 11, HI_LORD, GIANT_MIMIC), + M2_HOSTILE | M2_STRONG, 0, + 11, HI_LORD, GIANT_MIMIC), /* * nymphs */ - MON("wood 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), + MON(NAM("wood 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, 5, CLR_GREEN, - WOOD_NYMPH), - 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), + M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, + 5, CLR_GREEN, WOOD_NYMPH), + MON(NAM("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, 5, CLR_BLUE, WATER_NYMPH), - 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), + M3_INFRAVISIBLE, + 5, CLR_BLUE, WATER_NYMPH), + MON(NAM("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, 5, CLR_BROWN, - MOUNTAIN_NYMPH), + M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, + 5, CLR_BROWN, MOUNTAIN_NYMPH), /* * orcs */ - MON("goblin", S_ORC, LVL(0, 6, 10, 0, -3), (G_GENO | 2), + MON(NAM("goblin"), S_ORC, + LVL(0, 6, 10, 0, -3), (G_GENO | 2), 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, 1, CLR_GRAY, - GOBLIN), - MON("hobgoblin", S_ORC, LVL(1, 9, 10, 0, -4), (G_GENO | 2), + M2_ORC | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, + 1, CLR_GRAY, GOBLIN), + MON(NAM("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, @@ -634,191 +738,236 @@ /* Plain "orc" for zombie and mummy corpses only; not created at random. * Orcs (but not goblins and hobgoblins) are granted poison resistance; * however, their corpses don't confer it. */ - MON("orc", S_ORC, LVL(1, 9, 10, 0, -3), (G_GENO | G_NOGEN | G_LGROUP), + MON(NAM("orc"), S_ORC, + LVL(1, 9, 10, 0, -3), (G_GENO | G_NOGEN | G_LGROUP), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(850, 150, MS_ORC, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_RED, ORC), - MON("hill orc", S_ORC, LVL(2, 9, 10, 0, -4), (G_GENO | G_LGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 3, CLR_RED, ORC), + MON(NAM("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), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_YELLOW, HILL_ORC), - MON("Mordor orc", S_ORC, LVL(3, 5, 10, 0, -5), (G_GENO | G_LGROUP | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 4, CLR_YELLOW, HILL_ORC), + MON(NAM("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), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BLUE, MORDOR_ORC), - MON("Uruk-hai", S_ORC, LVL(3, 7, 10, 0, -4), (G_GENO | G_LGROUP | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, CLR_BLUE, MORDOR_ORC), + MON(NAM("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), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 5, CLR_BLACK, URUK_HAI), - MON("orc shaman", S_ORC, LVL(3, 9, 5, 10, -5), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, CLR_BLACK, URUK_HAI), + MON(NAM("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), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_GREEDY | M2_JEWELS | M2_MAGIC, - M3_INFRAVISIBLE | M3_INFRAVISION, 5, HI_ZAP, ORC_SHAMAN), - MON("orc-captain", S_ORC, LVL(5, 5, 10, 0, -5), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 5, HI_ZAP, ORC_SHAMAN), + MON(NAM("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), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 7, HI_LORD, ORC_CAPTAIN), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, HI_LORD, ORC_CAPTAIN), /* * piercers */ - MON("rock piercer", S_PIERCER, LVL(3, 1, 3, 0, 0), (G_GENO | 4), - A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("rock piercer"), S_PIERCER, + LVL(3, 1, 3, 0, 0), (G_GENO | 4), + A(ATTK(AT_BITE, AD_PHYS, 2, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 4, CLR_GRAY, ROCK_PIERCER), - 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), + M2_HOSTILE, 0, + 4, CLR_GRAY, ROCK_PIERCER), + MON(NAM("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, 6, CLR_CYAN, IRON_PIERCER), - 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), + M2_HOSTILE, 0, + 6, CLR_CYAN, IRON_PIERCER), + MON(NAM("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, 9, CLR_WHITE, GLASS_PIERCER), + M2_HOSTILE, 0, + 9, CLR_WHITE, GLASS_PIERCER), /* * quadrupeds + * (note: horses are grouped with unicorns in another section below) */ - MON("rothe", S_QUADRUPED, LVL(2, 9, 7, 0, 0), (G_GENO | G_SGROUP | 4), + MON(NAM("rothe"), S_QUADRUPED, + LVL(2, 9, 7, 0, 0), (G_GENO | G_SGROUP | 4), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 100, MS_MOO, MZ_LARGE), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, 4, CLR_BROWN, ROTHE), - MON("mumak", S_QUADRUPED, LVL(5, 9, 0, 0, -2), (G_GENO | 1), + MON(NAM("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_TRUMPET, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 7, CLR_GRAY, - MUMAK), - MON("leocrotta", S_QUADRUPED, LVL(6, 18, 4, 10, 0), (G_GENO | 2), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 7, CLR_GRAY, MUMAK), + MON(NAM("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, 8, CLR_RED, LEOCROTTA), - 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), + M3_INFRAVISIBLE, + 8, CLR_RED, LEOCROTTA), + MON(NAM("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, 9, CLR_CYAN, WUMPUS), - 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), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 9, CLR_CYAN, WUMPUS), + MON(NAM("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_BELLOW, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 13, CLR_GRAY, - TITANOTHERE), - 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), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 13, CLR_GRAY, TITANOTHERE), + MON(NAM("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_BELLOW, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 15, CLR_GRAY, - BALUCHITHERIUM), - 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), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 15, CLR_GRAY, BALUCHITHERIUM), + MON(NAM("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_TRUMPET, MZ_LARGE), 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, - M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, 22, CLR_BLACK, MASTODON), + M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 22, CLR_BLACK, MASTODON), /* * rodents */ - MON("sewer rat", S_RODENT, LVL(0, 12, 7, 0, 0), (G_GENO | G_SGROUP | 1), - A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("sewer rat"), S_RODENT, + LVL(0, 12, 7, 0, 0), (G_GENO | G_SGROUP | 1), + A(ATTK(AT_BITE, AD_PHYS, 1, 3), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(20, 12, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, 1, CLR_BROWN, SEWER_RAT), - 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), + MON(NAM("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, 2, CLR_BROWN, GIANT_RAT), - 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), + MON(NAM("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, 4, CLR_BROWN, RABID_RAT), - 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), + M3_INFRAVISIBLE, + 4, CLR_BROWN, RABID_RAT), + MON(NAM("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, 4, CLR_BROWN, - WERERAT), - 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), + M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, + 4, CLR_BROWN, WERERAT), + MON(NAM("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, 4, CLR_GRAY, ROCK_MOLE), - 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), + MON(NAM("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), SIZ(30, 30, MS_SILENT, MZ_SMALL), 0, 0, 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, 4, CLR_BROWN, WOODCHUCK), + M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, + 4, CLR_BROWN, WOODCHUCK), /* * spiders & scorpions (keep webmaker() in sync if new critters are added) */ - MON("cave spider", S_SPIDER, LVL(1, 12, 3, 0, 0), (G_GENO | G_SGROUP | 2), - A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("cave spider"), S_SPIDER, + LVL(1, 12, 3, 0, 0), (G_GENO | G_SGROUP | 2), + A(ATTK(AT_BITE, AD_PHYS, 1, 2), + 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, 3, CLR_GRAY, CAVE_SPIDER), - 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), + M2_HOSTILE, 0, + 3, CLR_GRAY, CAVE_SPIDER), + MON(NAM("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, 4, CLR_YELLOW, CENTIPEDE), - 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), + M2_HOSTILE, 0, + 4, CLR_YELLOW, CENTIPEDE), + MON(NAM("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(200, 100, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, - M2_HOSTILE | M2_STRONG, 0, 7, CLR_MAGENTA, GIANT_SPIDER), - MON("scorpion", S_SPIDER, LVL(5, 15, 3, 0, 0), (G_GENO | 2), + M2_HOSTILE | M2_STRONG, 0, + 7, CLR_MAGENTA, GIANT_SPIDER), + MON(NAM("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, 8, CLR_RED, SCORPION), + M2_HOSTILE, 0, + 8, CLR_RED, SCORPION), /* * trappers, lurkers, &c * Note: prior to 3.7, these were defined to do AD_DGST damage, @@ -827,237 +976,281 @@ * The Monster Manual states that someone engulfed by a trapper * can't use weapons but we do not enforce that. */ - MON("lurker above", S_TRAPPER, LVL(10, 3, 3, 0, 0), (G_GENO | 2), + MON(NAM("lurker above"), S_TRAPPER, + LVL(10, 3, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_ENGL, AD_WRAP, 1, 6), ATTK(AT_ENGL, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 12, CLR_GRAY, LURKER_ABOVE), - MON("trapper", S_TRAPPER, LVL(12, 3, 3, 0, 0), (G_GENO | 2), + M2_HOSTILE | M2_STALK | M2_STRONG, 0, + 12, CLR_GRAY, LURKER_ABOVE), + MON(NAM("trapper"), S_TRAPPER, + LVL(12, 3, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_ENGL, AD_WRAP, 1, 8), ATTK(AT_ENGL, AD_PHYS, 2, 8), 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, 14, CLR_GREEN, TRAPPER), + M2_HOSTILE | M2_STALK | M2_STRONG, 0, + 14, CLR_GREEN, TRAPPER), /* * unicorns and horses */ - MON("pony", S_UNICORN, LVL(3, 16, 6, 0, 0), (G_GENO | 2), - A(ATTK(AT_KICK, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("pony"), S_UNICORN, + LVL(3, 16, 6, 0, 0), (G_GENO | 2), + A(ATTK(AT_KICK, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 2), + NO_ATTK, 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, 4, CLR_BROWN, - PONY), - MON("white unicorn", S_UNICORN, LVL(4, 24, 2, 70, 7), (G_GENO | 2), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, + 4, CLR_BROWN, PONY), + MON(NAM("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, 6, CLR_WHITE, WHITE_UNICORN), - MON("gray unicorn", S_UNICORN, LVL(4, 24, 2, 70, 0), (G_GENO | 1), + M3_INFRAVISIBLE, + 6, CLR_WHITE, WHITE_UNICORN), + MON(NAM("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, 6, CLR_GRAY, GRAY_UNICORN), - MON("black unicorn", S_UNICORN, LVL(4, 24, 2, 70, -7), (G_GENO | 1), + M3_INFRAVISIBLE, + 6, CLR_GRAY, GRAY_UNICORN), + MON(NAM("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, 6, CLR_BLACK, BLACK_UNICORN), - 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), + M3_INFRAVISIBLE, + 6, CLR_BLACK, BLACK_UNICORN), + MON(NAM("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, 7, CLR_BROWN, - HORSE), - MON("warhorse", S_UNICORN, LVL(7, 24, 4, 0, 0), (G_GENO | 2), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, + 7, CLR_BROWN, HORSE), + MON(NAM("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, 9, CLR_BROWN, - WARHORSE), + M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, + 9, CLR_BROWN, WARHORSE), /* * vortices */ - MON("fog cloud", S_VORTEX, LVL(3, 1, 0, 0, 0), (G_GENO | G_NOCORPSE | 2), + MON(NAM("fog cloud"), S_VORTEX, + LVL(3, 1, 0, 0, 0), (G_GENO | G_NOCORPSE | 2), A(ATTK(AT_ENGL, AD_PHYS, 1, 6), 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 | M1_AMORPHOUS | M1_UNSOLID, - M2_HOSTILE | M2_NEUTER, 0, 4, CLR_GRAY, FOG_CLOUD), - MON("dust vortex", S_VORTEX, LVL(4, 20, 2, 30, 0), - (G_GENO | G_NOCORPSE | 2), + M2_HOSTILE | M2_NEUTER, 0, + 4, CLR_GRAY, FOG_CLOUD), + MON(NAM("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, 6, CLR_BROWN, DUST_VORTEX), - 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, - NO_ATTK), + M2_HOSTILE | M2_NEUTER, 0, + 6, CLR_BROWN, DUST_VORTEX), + MON(NAM("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, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), 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, 7, CLR_CYAN, ICE_VORTEX), - MON("energy vortex", S_VORTEX, LVL(6, 20, 2, 30, 0), - (G_GENO | G_NOCORPSE | 1), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 7, CLR_CYAN, ICE_VORTEX), + MON(NAM("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), ATTK(AT_NONE, AD_ELEC, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), 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, 9, HI_ZAP, ENERGY_VORTEX), - 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, - NO_ATTK), + M2_HOSTILE | M2_NEUTER, 0, + 9, HI_ZAP, ENERGY_VORTEX), + MON(NAM("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, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), 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, 9, CLR_BLUE, STEAM_VORTEX), - MON("fire vortex", S_VORTEX, LVL(8, 22, 2, 30, 0), - (G_HELL | G_GENO | G_NOCORPSE | 1), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 9, CLR_BLUE, STEAM_VORTEX), + MON(NAM("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), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_HUGE), 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, 10, CLR_YELLOW, - FIRE_VORTEX), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 10, CLR_YELLOW, FIRE_VORTEX), /* * worms */ - MON("baby long worm", S_WORM, LVL(5, 3, 5, 0, 0), G_GENO, - A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("baby long worm"), S_WORM, + LVL(5, 3, 5, 0, 0), G_GENO, + A(ATTK(AT_BITE, AD_PHYS, 1, 4), + 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 | M1_NOTAKE, - M2_HOSTILE, 0, 6, CLR_BROWN, BABY_LONG_WORM), - 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), + M2_HOSTILE, 0, + 6, CLR_BROWN, BABY_LONG_WORM), + MON(NAM("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, 9, CLR_MAGENTA, BABY_PURPLE_WORM), - 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), + MON(NAM("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, 10, CLR_BROWN, LONG_WORM), - MON("purple worm", S_WORM, LVL(15, 9, 6, 20, 0), (G_GENO | 2), + M2_HOSTILE | M2_STRONG | M2_NASTY, 0, + 10, CLR_BROWN, LONG_WORM), + MON(NAM("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, 17, CLR_MAGENTA, PURPLE_WORM), + M2_HOSTILE | M2_STRONG | M2_NASTY, 0, + 17, CLR_MAGENTA, PURPLE_WORM), /* * xan, &c */ - MON("grid bug", S_XAN, LVL(0, 12, 9, 0, 0), - (G_GENO | G_SGROUP | G_NOCORPSE | 3), - A(ATTK(AT_BITE, AD_ELEC, 1, 1), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("grid bug"), S_XAN, + LVL(0, 12, 9, 0, 0), (G_GENO | G_SGROUP | G_NOCORPSE | 3), + 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 | M1_NOHANDS, - M2_HOSTILE, M3_INFRAVISIBLE, 1, CLR_MAGENTA, GRID_BUG), - 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), + M2_HOSTILE, M3_INFRAVISIBLE, + 1, CLR_MAGENTA, GRID_BUG), + MON(NAM("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, 9, CLR_RED, XAN), + M3_INFRAVISIBLE, + 9, CLR_RED, XAN), /* * lights */ - MON("yellow light", S_LIGHT, LVL(3, 15, 0, 0, 0), - (G_NOCORPSE | G_GENO | 4), A(ATTK(AT_EXPL, AD_BLND, 10, 20), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + /* yellow light is visible and its suicidal explosion causes blindness */ + MON(NAM("yellow light"), S_LIGHT, + LVL(3, 15, 0, 0, 0), (G_NOCORPSE | G_GENO | 4), + A(ATTK(AT_EXPL, AD_BLND, 10, 20), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, MS_SILENT, MZ_SMALL), MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_SLEEP | MR_POISON | 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, 5, CLR_YELLOW, YELLOW_LIGHT), - 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), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 5, CLR_YELLOW, YELLOW_LIGHT), + /* black light is invisible and causes hallucination */ + MON(NAM("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), SIZ(0, 0, MS_SILENT, MZ_SMALL), MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, 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, 7, CLR_BLACK, BLACK_LIGHT), + M2_HOSTILE | M2_NEUTER, 0, + 7, CLR_BLACK, BLACK_LIGHT), /* * zruty */ - MON("zruty", S_ZRUTY, LVL(9, 8, 3, 0, 0), (G_GENO | 2), + MON(NAM("zruty"), S_ZRUTY, + LVL(9, 8, 3, 0, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), 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, 11, CLR_BROWN, ZRUTY), + M3_INFRAVISIBLE, + 11, CLR_BROWN, ZRUTY), /* * Angels and other lawful minions */ - MON("couatl", S_ANGEL, LVL(8, 10, 5, 30, 7), - (G_NOHELL | G_SGROUP | G_NOCORPSE | 1), + MON(NAM("couatl"), S_ANGEL, + LVL(8, 10, 5, 30, 7), (G_NOHELL | G_SGROUP | G_NOCORPSE | 1), A(ATTK(AT_BITE, AD_DRST, 2, 4), ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_HUGS, AD_WRAP, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), 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, 11, CLR_GREEN, COUATL), - MON("Aleax", S_ANGEL, LVL(10, 8, 0, 30, 7), (G_NOHELL | G_NOCORPSE | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_GREEN, COUATL), + MON(NAM("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), SIZ(WT_HUMAN, 400, MS_IMITATE, MZ_HUMAN), 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, 12, CLR_YELLOW, ALEAX), + M3_INFRAVISIBLE | M3_INFRAVISION, + 12, CLR_YELLOW, ALEAX), /* 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 always sticks with emin) */ - MON("Angel", S_ANGEL, LVL(14, 10, -4, 55, 12), - (G_NOHELL | G_NOCORPSE | 1), + MON(NAM("Angel"), S_ANGEL, + LVL(14, 10, -4, 55, 12), (G_NOHELL | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), - ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_MAGM, 2, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_MAGM, 2, 6), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_CUSS, MZ_HUMAN), 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, 19, CLR_WHITE, ANGEL), + M3_INFRAVISIBLE | M3_INFRAVISION, + 19, CLR_WHITE, ANGEL), /* the AD&D Monster Manual depicts ki-rin as very similar to unicorns - except that they fly (without wings) and can cast spells */ - MON("ki-rin", S_ANGEL, LVL(16, 18, -5, 90, 15), - (G_NOHELL | G_NOCORPSE | 1), + except that they fly (without wings) and can cast spells; nethack's + ki-rin doesn't leave its horn when killed, but it can use the horn + while alive to cure itself of various maladies */ + MON(NAM("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), - ATTK(AT_BUTT, AD_PHYS, 3, 6), ATTK(AT_MAGC, AD_SPEL, 2, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_BUTT, AD_PHYS, 3, 6), ATTK(AT_MAGC, AD_SPEL, 2, 6), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SPELL, MZ_LARGE), MR_POISON, 0, M1_FLY | M1_NOHANDS | M1_SEE_INVIS, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_LORD, - M3_INFRAVISIBLE | M3_INFRAVISION, 21, HI_GOLD, KI_RIN), - MON("Archon", S_ANGEL, LVL(19, 16, -6, 80, 15), - (G_NOHELL | G_NOCORPSE | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 21, HI_GOLD, KI_RIN), + MON(NAM("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), ATTK(AT_GAZE, AD_BLND, 2, 6), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_MAGC, AD_SPEL, 4, 6), NO_ATTK), @@ -1066,55 +1259,66 @@ 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, 26, HI_LORD, ARCHON), + M3_INFRAVISIBLE | M3_INFRAVISION, + 26, HI_LORD, ARCHON), /* - * Bats + * Bats and birds */ - MON("bat", S_BAT, LVL(0, 22, 8, 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), + MON(NAM("bat"), S_BAT, + LVL(0, 22, 8, 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(20, 20, MS_SQEEK, MZ_TINY), 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER, M3_INFRAVISIBLE, 2, CLR_BROWN, BAT), - 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), + MON(NAM("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, 3, CLR_RED, GIANT_BAT), - 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), + M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, + 3, CLR_RED, GIANT_BAT), + MON(NAM("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_OVIPAROUS | M1_CARNIVORE, M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, 6, CLR_BLACK, RAVEN), - 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), + MON(NAM("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, 7, CLR_BLACK, VAMPIRE_BAT), + M2_HOSTILE, M3_INFRAVISIBLE, + 7, CLR_BLACK, VAMPIRE_BAT), /* * Centaurs */ - MON("plains centaur", S_CENTAUR, LVL(4, 18, 4, 0, 0), (G_GENO | 1), - A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("plains centaur"), S_CENTAUR, + LVL(4, 18, 4, 0, 0), (G_GENO | 1), + A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 6), + NO_ATTK, 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, 6, CLR_BROWN, PLAINS_CENTAUR), - 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), + MON(NAM("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, 8, CLR_GREEN, FOREST_CENTAUR), - MON("mountain centaur", S_CENTAUR, LVL(6, 20, 2, 10, -3), (G_GENO | 1), + M3_INFRAVISIBLE, + 8, CLR_GREEN, FOREST_CENTAUR), + MON(NAM("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, 9, CLR_CYAN, MOUNTAIN_CENTAUR), + M3_INFRAVISIBLE, + 9, CLR_CYAN, MOUNTAIN_CENTAUR), /* * Dragons */ @@ -1132,98 +1336,111 @@ * infravision. Red and gold dragons (also Chromatic Dragon) are * the exceptions because they breathe fire. */ - MON("baby gray 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, 13, CLR_GRAY, - BABY_GRAY_DRAGON), - MON("baby gold 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, M3_INFRAVISIBLE, - 13, HI_GOLD, BABY_GOLD_DRAGON), - 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, 13, DRAGON_SILVER, - BABY_SILVER_DRAGON), -#if 0 /* DEFERRED */ - /* [see "shimmering dragon" below] */ - MON("baby shimmering dragon", S_DRAGON, + MON(NAM("baby gray 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, 13, CLR_CYAN, - BABY_SHIMMERING_DRAGON), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_GRAY, BABY_GRAY_DRAGON), + MON(NAM("baby gold 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, M3_INFRAVISIBLE, + 13, HI_GOLD, BABY_GOLD_DRAGON), + MON(NAM("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, + 13, DRAGON_SILVER, BABY_SILVER_DRAGON), +#if 0 /* DEFERRED */ + /* [see "shimmering dragon" below] */ + MON(NAM("baby shimmering 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, + 13, CLR_CYAN, BABY_SHIMMERING_DRAGON), #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, - NO_ATTK), + MON(NAM("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, NO_ATTK), 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, 13, CLR_RED, BABY_RED_DRAGON), - 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), + MON(NAM("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, 13, CLR_WHITE, - BABY_WHITE_DRAGON), - 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), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_WHITE, BABY_WHITE_DRAGON), + MON(NAM("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, 13, CLR_ORANGE, - BABY_ORANGE_DRAGON), - 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), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_ORANGE, BABY_ORANGE_DRAGON), + MON(NAM("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, 13, CLR_BLACK, - BABY_BLACK_DRAGON), - 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), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_BLACK, BABY_BLACK_DRAGON), + MON(NAM("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, 13, CLR_BLUE, - BABY_BLUE_DRAGON), - 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), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_BLUE, BABY_BLUE_DRAGON), + MON(NAM("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, 13, CLR_GREEN, - BABY_GREEN_DRAGON), - MON("baby yellow dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_GREEN, BABY_GREEN_DRAGON), + MON(NAM("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, 13, CLR_YELLOW, - BABY_YELLOW_DRAGON), - MON("gray dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), + M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, + 13, CLR_YELLOW, BABY_YELLOW_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), 0, 0, 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, 20, CLR_GRAY, GRAY_DRAGON), + 0, + 20, CLR_GRAY, GRAY_DRAGON), /* gold dragon can be seen via infravision but doesn't have infravision */ - MON("gold dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), + MON(NAM("gold dragon"), S_DRAGON, + LVL(15, 9, -1, 20, 4), (G_GENO | 1), A(ATTK(AT_BREA, AD_FIRE, 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, NO_ATTK), @@ -1231,22 +1448,25 @@ 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, 20, HI_GOLD, GOLD_DRAGON), - MON("silver dragon", S_DRAGON, LVL(15, 9, -1, 20, 4), (G_GENO | 1), + M3_INFRAVISIBLE, + 20, HI_GOLD, GOLD_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_COLD, 0, 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, 20, DRAGON_SILVER, SILVER_DRAGON), + 0, + 20, DRAGON_SILVER, SILVER_DRAGON), #if 0 /* DEFERRED */ /* shimmering scales/scale-mail would confer displacement when worn by the hero, so shimmering dragon ought to be displaced (hero who can see one might misjudge its location) but monster displacement hasn't been implemented so we don't include it */ - MON("shimmering dragon", S_DRAGON, + MON(NAM("shimmering 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), @@ -1255,65 +1475,79 @@ 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, 20, CLR_CYAN, SHIMMERING_DRAGON), + 0, + 20, CLR_CYAN, SHIMMERING_DRAGON), #endif /* red dragon has infravision and can be seen via infravision */ - MON("red dragon", S_DRAGON, LVL(15, 9, -1, 20, -4), (G_GENO | 1), + MON(NAM("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), - ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_FIRE, MR_FIRE, 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_INFRAVISION | M3_INFRAVISIBLE, 20, CLR_RED, RED_DRAGON), - MON("white dragon", S_DRAGON, LVL(15, 9, -1, 20, -5), (G_GENO | 1), + M3_INFRAVISION | M3_INFRAVISIBLE, + 20, CLR_RED, RED_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_COLD, MR_COLD, 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, 20, CLR_WHITE, WHITE_DRAGON), - MON("orange dragon", S_DRAGON, LVL(15, 9, -1, 20, 5), (G_GENO | 1), + 0, + 20, CLR_WHITE, WHITE_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_SLEEP, MR_SLEEP, 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, 20, CLR_ORANGE, ORANGE_DRAGON), + 0, + 20, CLR_ORANGE, ORANGE_DRAGON), /* disintegration breath is actually all or nothing, not 1d255 */ - MON("black dragon", S_DRAGON, LVL(15, 9, -1, 20, -6), (G_GENO | 1), + MON(NAM("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), - ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_DISINT, MR_DISINT, 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, 20, CLR_BLACK, BLACK_DRAGON), - MON("blue dragon", S_DRAGON, LVL(15, 9, -1, 20, -7), (G_GENO | 1), + 0, + 20, CLR_BLACK, BLACK_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_ELEC, MR_ELEC, 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, 20, CLR_BLUE, BLUE_DRAGON), - MON("green dragon", S_DRAGON, LVL(15, 9, -1, 20, 6), (G_GENO | 1), + 0, + 20, CLR_BLUE, BLUE_DRAGON), + MON(NAM("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, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_POISON, MR_POISON, 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, 20, CLR_GREEN, GREEN_DRAGON), - MON("yellow dragon", S_DRAGON, LVL(15, 9, -1, 20, 7), (G_GENO | 1), + 0, + 20, CLR_GREEN, GREEN_DRAGON), + MON(NAM("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, NO_ATTK), @@ -1322,190 +1556,233 @@ 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, 20, CLR_YELLOW, YELLOW_DRAGON), + 0, + 20, CLR_YELLOW, YELLOW_DRAGON), /* * Elementals */ - MON("stalker", S_ELEMENTAL, LVL(8, 12, 3, 0, 0), (G_GENO | 3), - A(ATTK(AT_CLAW, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("stalker"), S_ELEMENTAL, + LVL(8, 12, 3, 0, 0), (G_GENO | 3), + A(ATTK(AT_CLAW, AD_PHYS, 4, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 9, CLR_WHITE, STALKER), - 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), + MON(NAM("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, 10, CLR_CYAN, AIR_ELEMENTAL), - 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), + M2_STRONG | M2_NEUTER, 0, + 10, CLR_CYAN, AIR_ELEMENTAL), + MON(NAM("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, 10, CLR_YELLOW, - FIRE_ELEMENTAL), - 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), + M2_STRONG | M2_NEUTER, M3_INFRAVISIBLE, + 10, CLR_YELLOW, FIRE_ELEMENTAL), + MON(NAM("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), SIZ(2500, 0, MS_SILENT, MZ_HUGE), 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, 10, CLR_BROWN, EARTH_ELEMENTAL), - 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), + M2_STRONG | M2_NEUTER, 0, + 10, CLR_BROWN, EARTH_ELEMENTAL), + MON(NAM("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, 10, CLR_BLUE, WATER_ELEMENTAL), + M2_STRONG | M2_NEUTER, 0, + 10, CLR_BLUE, WATER_ELEMENTAL), /* * Fungi */ - MON("lichen", S_FUNGUS, LVL(0, 1, 9, 0, 0), (G_GENO | 4), + MON(NAM("lichen"), S_FUNGUS, + LVL(0, 1, 9, 0, 0), (G_GENO | 4), A(ATTK(AT_TUCH, AD_STCK, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 1, CLR_BRIGHT_GREEN, LICHEN), - MON("brown mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), + M2_HOSTILE | M2_NEUTER, 0, + 1, CLR_BRIGHT_GREEN, LICHEN), + MON(NAM("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, 2, CLR_BROWN, BROWN_MOLD), - MON("yellow mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 2), + M2_HOSTILE | M2_NEUTER, 0, + 2, CLR_BROWN, BROWN_MOLD), + MON(NAM("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, 2, CLR_YELLOW, YELLOW_MOLD), - MON("green mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), + M2_HOSTILE | M2_NEUTER, 0, + 2, CLR_YELLOW, YELLOW_MOLD), + MON(NAM("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_ACID | MR_STONE, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, - M2_HOSTILE | M2_NEUTER, 0, 2, CLR_GREEN, GREEN_MOLD), - MON("red mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO | 1), + M2_HOSTILE | M2_NEUTER, 0, + 2, CLR_GREEN, GREEN_MOLD), + MON(NAM("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, 2, CLR_RED, RED_MOLD), - MON("shrieker", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO | 1), + M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, + 2, CLR_RED, RED_MOLD), + MON(NAM("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, 2, CLR_MAGENTA, SHRIEKER), - MON("violet fungus", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO | 2), + M2_HOSTILE | M2_NEUTER, 0, + 2, CLR_MAGENTA, SHRIEKER), + MON(NAM("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, 5, CLR_MAGENTA, VIOLET_FUNGUS), + M2_HOSTILE | M2_NEUTER, 0, + 5, CLR_MAGENTA, VIOLET_FUNGUS), /* * Gnomes * Unlike plain human|elf|orc, plain "gnome" is an ordinary monster. */ - MON("gnome", S_GNOME, LVL(1, 6, 10, 4, 0), (G_GENO | G_SGROUP | 1), - A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("gnome"), S_GNOME, + LVL(1, 6, 10, 4, 0), (G_GENO | G_SGROUP | 1), + A(ATTK(AT_WEAP, AD_PHYS, 1, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(650, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 3, CLR_BROWN, GNOME), - MON3("gnome lord", "gnome lady", "gnome leader", + MON(NAMS("gnome lord", "gnome lady", "gnome leader"), 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), + 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_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, 4, CLR_BLUE, GNOME_LEADER), - 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), + MON(NAM("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, 5, HI_ZAP, - GNOMISH_WIZARD), - MON3("gnome king", "gnome queen", "gnome ruler", + M2_GNOME | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, + 5, HI_ZAP, GNOMISH_WIZARD), + MON(NAMS("gnome king", "gnome queen", "gnome ruler"), 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), + 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_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 6, HI_LORD, GNOME_RULER), + M3_INFRAVISIBLE | M3_INFRAVISION, + 6, HI_LORD, GNOME_RULER), /* * giant Humanoids */ - MON("giant", S_GIANT, LVL(6, 6, 0, 0, 2), (G_GENO | G_NOGEN | 1), - A(ATTK(AT_WEAP, AD_PHYS, 2, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + /* plain giant is a placeholder for zombie and mummy corpses */ + MON(NAM("giant"), S_GIANT, + LVL(6, 6, 0, 0, 2), (G_GENO | G_NOGEN | 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, 8, CLR_RED, GIANT), - 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), + MON(NAM("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, 8, CLR_GRAY, STONE_GIANT), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 8, CLR_GRAY, STONE_GIANT), + MON(NAM("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, 10, CLR_CYAN, HILL_GIANT), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 10, CLR_CYAN, HILL_GIANT), + MON(NAM("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, 11, CLR_YELLOW, FIRE_GIANT), - 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, - NO_ATTK), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_YELLOW, FIRE_GIANT), + MON(NAM("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, NO_ATTK), 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, 13, CLR_WHITE, FROST_GIANT), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 13, CLR_WHITE, FROST_GIANT), + /* ettin is a two-headed giant but its corpse doesn't confer strength */ + MON(NAM("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, 13, CLR_BROWN, ETTIN), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 13, CLR_BROWN, ETTIN), + MON(NAM("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, 19, CLR_BLUE, STORM_GIANT), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 19, CLR_BLUE, STORM_GIANT), + MON(NAM("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, 20, CLR_MAGENTA, TITAN), - MON("minotaur", S_GIANT, LVL(15, 15, 6, 0, 0), (G_GENO | G_NOGEN), + M3_INFRAVISIBLE | M3_INFRAVISION, + 20, CLR_MAGENTA, TITAN), + MON(NAM("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_MOO, MZ_LARGE), 0, 0, @@ -1524,7 +1801,8 @@ */ /* the illustration from _Through_the_Looking_Glass_ depicts hands as well as wings */ - MON("jabberwock", S_JABBERWOCK, LVL(15, 12, -2, 50, 0), (G_GENO | 1), + MON(NAM("jabberwock"), S_JABBERWOCK, + LVL(15, 12, -2, 50, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 2, 10), ATTK(AT_BITE, AD_PHYS, 2, 10), ATTK(AT_CLAW, AD_PHYS, 2, 10), ATTK(AT_CLAW, AD_PHYS, 2, 10), NO_ATTK, NO_ATTK), @@ -1533,7 +1811,7 @@ M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE, 18, CLR_ORANGE, JABBERWOCK), #if 0 /* DEFERRED */ - MON("vorpal jabberwock", S_JABBERWOCK, + MON(NAM("vorpal jabberwock"), S_JABBERWOCK, LVL(20, 12, -2, 50, 0), (G_GENO | 1), A(ATTK(AT_BITE, AD_PHYS, 3, 10), ATTK(AT_BITE, AD_PHYS, 3, 10), ATTK(AT_CLAW, AD_PHYS, 3, 10), ATTK(AT_CLAW, AD_PHYS, 3, 10), @@ -1546,63 +1824,70 @@ /* * Kops */ - MON("Keystone Kop", S_KOP, LVL(1, 6, 10, 10, 9), - (G_GENO | G_LGROUP | G_NOGEN), - A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("Keystone Kop"), S_KOP, + LVL(1, 6, 10, 10, 9), (G_GENO | G_LGROUP | G_NOGEN), + A(ATTK(AT_WEAP, AD_PHYS, 1, 4), + 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_MALE | M2_COLLECT, - M3_INFRAVISIBLE, 3, CLR_BLUE, KEYSTONE_KOP), - 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), + M3_INFRAVISIBLE, + 3, CLR_BLUE, KEYSTONE_KOP), + MON(NAM("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, 4, CLR_BLUE, KOP_SERGEANT), - 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), + M3_INFRAVISIBLE, + 4, CLR_BLUE, KOP_SERGEANT), + MON(NAM("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, 5, CLR_CYAN, KOP_LIEUTENANT), - 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), + M3_INFRAVISIBLE, + 5, CLR_CYAN, KOP_LIEUTENANT), + MON(NAM("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, 6, HI_LORD, KOP_KAPTAIN), + M3_INFRAVISIBLE, + 6, HI_LORD, KOP_KAPTAIN), /* * Liches */ - MON("lich", S_LICH, LVL(11, 6, 0, 30, -9), (G_GENO | G_NOCORPSE | 1), + MON(NAM("lich"), S_LICH, + LVL(11, 6, 0, 30, -9), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_TUCH, AD_COLD, 1, 10), 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, 14, CLR_BROWN, - LICH), - 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), + M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, + 14, CLR_BROWN, LICH), + MON(NAM("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, 18, CLR_RED, - DEMILICH), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, + 18, CLR_RED, DEMILICH), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), 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, 21, HI_LORD, MASTER_LICH), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_FIRE | MR_COLD | MR_SLEEP | MR_ELEC | MR_POISON, MR_FIRE | MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, @@ -1611,158 +1896,188 @@ /* * Mummies */ - MON("kobold mummy", S_MUMMY, LVL(3, 8, 6, 20, -2), - (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("kobold mummy"), S_MUMMY, + LVL(3, 8, 6, 20, -2), (G_GENO | G_NOCORPSE | 1), + A(ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, 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, 4, CLR_BROWN, KOBOLD_MUMMY), - 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), + M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, + 4, CLR_BROWN, KOBOLD_MUMMY), + MON(NAM("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, 5, CLR_RED, - GNOME_MUMMY), - 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), + M2_UNDEAD | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, + 5, CLR_RED, GNOME_MUMMY), + MON(NAM("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_STRONG | M2_ORC | M2_GREEDY | M2_JEWELS, - M3_INFRAVISION, 6, CLR_GRAY, ORC_MUMMY), - 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), + M3_INFRAVISION, + 6, CLR_GRAY, ORC_MUMMY), + MON(NAM("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, 6, CLR_RED, DWARF_MUMMY), - 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), + M3_INFRAVISION, + 6, CLR_RED, DWARF_MUMMY), + MON(NAM("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, 7, CLR_GREEN, - ELF_MUMMY), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M2_UNDEAD | M2_HOSTILE | M2_ELF, M3_INFRAVISION, + 7, CLR_GREEN, ELF_MUMMY), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), 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, 7, CLR_GRAY, - HUMAN_MUMMY), - 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), + M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, + 7, CLR_GRAY, HUMAN_MUMMY), + MON(NAM("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, 8, CLR_BLUE, - ETTIN_MUMMY), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M2_UNDEAD | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, + 8, CLR_BLUE, ETTIN_MUMMY), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), 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, 10, CLR_CYAN, GIANT_MUMMY), + M3_INFRAVISION, + 10, CLR_CYAN, GIANT_MUMMY), /* * Nagas */ - MON("red naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, + MON(NAM("red 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_FIRE | MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, - M2_STRONG, M3_INFRAVISIBLE, 4, CLR_RED, RED_NAGA_HATCHLING), - MON("black naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, + M2_STRONG, M3_INFRAVISIBLE, + 4, CLR_RED, RED_NAGA_HATCHLING), + MON(NAM("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, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_ACID | M1_NOTAKE | M1_CARNIVORE, - M2_STRONG, 0, 4, CLR_BLACK, BLACK_NAGA_HATCHLING), - 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), + M2_STRONG, 0, + 4, CLR_BLACK, BLACK_NAGA_HATCHLING), + MON(NAM("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, 4, HI_GOLD, GOLDEN_NAGA_HATCHLING), - 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), + M2_STRONG, 0, + 4, HI_GOLD, GOLDEN_NAGA_HATCHLING), + MON(NAM("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, 4, CLR_GREEN, GUARDIAN_NAGA_HATCHLING), - MON("red naga", S_NAGA, LVL(6, 12, 4, 0, -4), (G_GENO | 1), + M2_STRONG, 0, + 4, CLR_GREEN, GUARDIAN_NAGA_HATCHLING), + MON(NAM("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, 8, CLR_RED, RED_NAGA), - MON("black naga", S_NAGA, LVL(8, 14, 2, 10, 4), (G_GENO | 1), + M2_STRONG, M3_INFRAVISIBLE, + 8, CLR_RED, RED_NAGA), + MON(NAM("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), SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_ACID | MR_STONE, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_ACID | M1_NOTAKE | M1_CARNIVORE, - M2_STRONG, 0, 10, CLR_BLACK, BLACK_NAGA), - MON("golden naga", S_NAGA, LVL(10, 14, 2, 70, 5), (G_GENO | 1), + M2_STRONG, 0, + 10, CLR_BLACK, BLACK_NAGA), + MON(NAM("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, 13, HI_GOLD, GOLDEN_NAGA), + M2_STRONG, 0, + 13, HI_GOLD, GOLDEN_NAGA), /* 3.7: guardian naga used to have three attacks: bite, spit, hug but in order for the hug to succeed the two preceding attacks had - to have hit, and its not possible to both bite and spit, hence + to have hit, and it's not possible to both bite and spit, hence the hug never hit; change to spit, bite, touch, hug; if the bite and touch hit, the hug will too */ - MON("guardian naga", S_NAGA, LVL(12, 16, 0, 50, 7), (G_GENO | 1), + MON(NAM("guardian naga"), S_NAGA, + LVL(12, 16, 0, 50, 7), (G_GENO | 1), A(ATTK(AT_SPIT, AD_DRST, 1, 6), ATTK(AT_BITE, AD_PLYS, 1, 6), ATTK(AT_TUCH, AD_PHYS, 0, 0), ATTK(AT_HUGS, AD_WRAP, 2, 4), 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, 17, CLR_GREEN, GUARDIAN_NAGA), + M2_STRONG, 0, + 17, CLR_GREEN, GUARDIAN_NAGA), /* * Ogres */ - MON("ogre", S_OGRE, LVL(5, 10, 5, 0, -3), (G_SGROUP | G_GENO | 1), - A(ATTK(AT_WEAP, AD_PHYS, 2, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("ogre"), S_OGRE, + LVL(5, 10, 5, 0, -3), (G_SGROUP | G_GENO | 1), + A(ATTK(AT_WEAP, AD_PHYS, 2, 5), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, 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, 7, CLR_BROWN, OGRE), - MON3("ogre lord", "ogre lady", "ogre leader", - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, CLR_BROWN, OGRE), + MON(NAMS("ogre lord", "ogre lady", "ogre leader"), 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_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 9, CLR_RED, OGRE_LEADER), - MON3("ogre king", "ogre queen", "ogre tyrant", - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 9, CLR_RED, OGRE_LEADER), + MON(NAMS("ogre king", "ogre queen", "ogre tyrant"), 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_GREEDY | M2_JEWELS | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD, OGRE_TYRANT), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, HI_LORD, OGRE_TYRANT), /* * Puddings * * must be in the same order as the pudding globs in objects.c */ - MON("gray ooze", S_PUDDING, LVL(3, 1, 8, 0, 0), (G_GENO | G_NOCORPSE | 2), + MON(NAM("gray ooze"), S_PUDDING, + LVL(3, 1, 8, 0, 0), (G_GENO | G_NOCORPSE | 2), A(ATTK(AT_BITE, AD_RUST, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(500, 250, MS_SILENT, MZ_MEDIUM), @@ -1770,9 +2085,10 @@ 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, 4, CLR_GRAY, GRAY_OOZE), - MON("brown pudding", S_PUDDING, LVL(5, 3, 8, 0, 0), - (G_GENO | G_NOCORPSE | 1), + M2_HOSTILE | M2_NEUTER, 0, + 4, CLR_GRAY, GRAY_OOZE), + MON(NAM("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), SIZ(500, 250, MS_SILENT, MZ_MEDIUM), @@ -1780,18 +2096,20 @@ 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, 6, CLR_BROWN, BROWN_PUDDING), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M2_HOSTILE | M2_NEUTER, 0, + 6, CLR_BROWN, BROWN_PUDDING), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 150, MS_SILENT, MZ_LARGE), MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, MR_ACID | MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID | M1_POIS, - M2_HOSTILE | M2_NEUTER, 0, 8, CLR_GREEN, GREEN_SLIME), - MON("black pudding", S_PUDDING, LVL(10, 6, 6, 0, 0), - (G_GENO | G_NOCORPSE | 1), + M2_HOSTILE | M2_NEUTER, 0, + 8, CLR_GREEN, GREEN_SLIME), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(900, 250, MS_SILENT, MZ_LARGE), @@ -1799,155 +2117,187 @@ 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, 12, CLR_BLACK, BLACK_PUDDING), + M2_HOSTILE | M2_NEUTER, 0, + 12, CLR_BLACK, BLACK_PUDDING), /* * Quantum mechanics */ - MON("quantum mechanic", S_QUANTMECH, LVL(7, 12, 3, 10, 0), (G_GENO | 3), + MON(NAM("quantum mechanic"), S_QUANTMECH, + LVL(7, 12, 3, 10, 0), (G_GENO | 3), A(ATTK(AT_CLAW, AD_TLPT, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, 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, 9, CLR_CYAN, QUANTUM_MECHANIC), - MON("genetic engineer", S_QUANTMECH, LVL(12, 12, 3, 10, 0), (G_GENO | 1), + M3_INFRAVISIBLE, + 9, CLR_CYAN, QUANTUM_MECHANIC), + /* 3.7: from slash'em, to expand Q class; hit polymorphs target */ + MON(NAM("genetic engineer"), S_QUANTMECH, + LVL(12, 12, 3, 10, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_POLY, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 20, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE | M1_POIS | M1_TPORT, M2_HOSTILE | M2_NASTY, - M3_INFRAVISIBLE, 14, CLR_GREEN, GENETIC_ENGINEER), + M3_INFRAVISIBLE, + 14, CLR_GREEN, GENETIC_ENGINEER), /* * Rust monster or disenchanter */ - MON("rust monster", S_RUSTMONST, LVL(5, 18, 2, 0, 0), (G_GENO | 2), + MON(NAM("rust monster"), S_RUSTMONST, + LVL(5, 18, 2, 0, 0), (G_GENO | 2), A(ATTK(AT_TUCH, AD_RUST, 0, 0), ATTK(AT_TUCH, AD_RUST, 0, 0), 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, 8, CLR_BROWN, RUST_MONSTER), - 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), + M3_INFRAVISIBLE, + 8, CLR_BROWN, RUST_MONSTER), + MON(NAM("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, 14, CLR_BLUE, DISENCHANTER), + M2_HOSTILE, M3_INFRAVISIBLE, + 14, CLR_BLUE, DISENCHANTER), /* * Snakes + * Note: in the real world, most snakes are oviparous but some aren't; + * we treat all of these as if they are. */ - MON("garter snake", S_SNAKE, LVL(1, 8, 8, 0, 0), (G_LGROUP | G_GENO | 1), - A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("garter snake"), S_SNAKE, + LVL(1, 8, 8, 0, 0), (G_LGROUP | G_GENO | 1), + A(ATTK(AT_BITE, AD_PHYS, 1, 2), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 3, CLR_GREEN, GARTER_SNAKE), - 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), + 0, 0, + 3, CLR_GREEN, GARTER_SNAKE), + MON(NAM("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, 6, CLR_BROWN, SNAKE), - 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, - NO_ATTK), + M2_HOSTILE, 0, + 6, CLR_BROWN, SNAKE), + MON(NAM("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, NO_ATTK), 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, 7, CLR_RED, WATER_MOCCASIN), - MON("python", S_SNAKE, LVL(6, 3, 5, 0, 0), (G_GENO | 1), + M2_HOSTILE, 0, + 7, CLR_RED, WATER_MOCCASIN), + MON(NAM("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, - NO_ATTK), + ATTK(AT_HUGS, AD_WRAP, 1, 4), ATTK(AT_HUGS, AD_PHYS, 2, 4), + NO_ATTK, NO_ATTK), 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, 8, CLR_MAGENTA, PYTHON), - 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), + M2_HOSTILE | M2_STRONG, M3_INFRAVISION, + 8, CLR_MAGENTA, PYTHON), + MON(NAM("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, 9, CLR_BLUE, PIT_VIPER), - 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), + M2_HOSTILE, M3_INFRAVISION, + 9, CLR_BLUE, PIT_VIPER), + MON(NAM("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, 10, CLR_BLUE, COBRA), + M2_HOSTILE, 0, + 10, CLR_BLUE, COBRA), /* * Trolls */ - MON("troll", S_TROLL, LVL(7, 12, 4, 0, -3), (G_GENO | 2), + MON(NAM("troll"), S_TROLL, + LVL(7, 12, 4, 0, -3), (G_GENO | 2), A(ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_CLAW, AD_PHYS, 4, 2), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), 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, 9, CLR_BROWN, TROLL), - MON("ice troll", S_TROLL, LVL(9, 10, 2, 20, -3), (G_NOHELL | G_GENO | 1), + MON(NAM("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, 12, CLR_WHITE, ICE_TROLL), - MON("rock troll", S_TROLL, LVL(9, 12, 0, 0, -3), (G_GENO | 1), + MON(NAM("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, 12, CLR_CYAN, ROCK_TROLL), - MON("water troll", S_TROLL, LVL(11, 14, 4, 40, -3), (G_NOGEN | G_GENO), + M3_INFRAVISIBLE | M3_INFRAVISION, + 12, CLR_CYAN, ROCK_TROLL), + MON(NAM("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, 13, CLR_BLUE, WATER_TROLL), - MON("Olog-hai", S_TROLL, LVL(13, 12, -4, 0, -7), (G_GENO | 1), + MON(NAM("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, 16, HI_LORD, OLOG_HAI), + M3_INFRAVISIBLE | M3_INFRAVISION, + 16, HI_LORD, OLOG_HAI), /* * Umber hulk */ - MON("umber hulk", S_UMBER, LVL(9, 6, 2, 25, 0), (G_GENO | 2), + MON(NAM("umber hulk"), S_UMBER, + LVL(9, 6, 2, 25, 0), (G_GENO | 2), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), - ATTK(AT_BITE, AD_PHYS, 2, 5), ATTK(AT_GAZE, AD_CONF, 0, 0), NO_ATTK, - NO_ATTK), + 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, 12, CLR_BROWN, UMBER_HULK), + M2_STRONG, M3_INFRAVISIBLE, + 12, CLR_BROWN, UMBER_HULK), /* * Vampires */ - MON("vampire", S_VAMPIRE, LVL(10, 12, 1, 25, -8), - (G_GENO | G_NOCORPSE | 1), - A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_DRLI, 1, 6), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("vampire"), S_VAMPIRE, + LVL(10, 12, 1, 25, -8), (G_GENO | G_NOCORPSE | 1), + A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_DRLI, 1, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, 12, CLR_RED, VAMPIRE), - MON3("vampire lord", "vampire lady", "vampire leader", - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M3_INFRAVISIBLE, + 12, CLR_RED, VAMPIRE), + MON(NAMS("vampire lord", "vampire lady", "vampire leader"), 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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, 14, CLR_BLUE, VAMPIRE_LEADER), + M3_INFRAVISIBLE, + 14, CLR_BLUE, VAMPIRE_LEADER), #if 0 /* DEFERRED */ - MON("vampire mage", S_VAMPIRE, + MON(NAM("vampire mage"), S_VAMPIRE, LVL(20, 14, -4, 50, -9), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_DRLI, 2, 8), ATTK(AT_BITE, AD_DRLI, 1, 8), ATTK(AT_MAGC, AD_SPEL, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), @@ -1955,40 +2305,43 @@ 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, 26, HI_ZAP, VAMPIRE_MAGE), + M3_INFRAVISIBLE, + 26, HI_ZAP, VAMPIRE_MAGE), #endif - MON("Vlad the Impaler", S_VAMPIRE, LVL(28, 26, -6, 80, -10), - (G_NOGEN | G_NOCORPSE | G_UNIQ), + MON(NAM("Vlad the Impaler"), S_VAMPIRE, + LVL(28, 26, -6, 80, -10), (G_NOGEN | G_NOCORPSE | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 10), ATTK(AT_BITE, AD_DRLI, 1, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP | MR_POISON, 0, 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, 32, HI_LORD, - VLAD_THE_IMPALER), + M3_WAITFORU | M3_WANTSCAND | M3_INFRAVISIBLE, + 32, HI_LORD, VLAD_THE_IMPALER), /* * Wraiths */ - MON("barrow wight", S_WRAITH, LVL(3, 12, 5, 5, -3), - (G_GENO | G_NOCORPSE | 1), + MON(NAM("barrow wight"), S_WRAITH, + LVL(3, 12, 5, 5, -3), (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_WEAP, AD_DRLI, 0, 0), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_COLD, 1, 4), 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, 8, CLR_GRAY, - BARROW_WIGHT), - 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), + M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, + 8, CLR_GRAY, BARROW_WIGHT), + /* wraiths weigh 0 but can leave corpses */ + MON(NAM("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, 8, CLR_BLACK, - WRAITH), - MON("Nazgul", S_WRAITH, LVL(13, 12, 0, 25, -17), - (G_GENO | G_NOCORPSE | 1), + M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, + 8, CLR_BLACK, WRAITH), + MON(NAM("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), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 0, MS_SPELL, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, @@ -1999,318 +2352,380 @@ /* * Xorn */ - MON("xorn", S_XORN, LVL(8, 9, -2, 20, 0), (G_GENO | 1), + MON(NAM("xorn"), S_XORN, + LVL(8, 9, -2, 20, 0), (G_GENO | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), - ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 6), + NO_ATTK, NO_ATTK), 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, 11, CLR_BROWN, XORN), + M2_HOSTILE | M2_STRONG, 0, + 11, CLR_BROWN, XORN), /* * Apelike beasts */ /* tameable via banana; does not grow up into ape... not flagged as domestic, so no guilt penalty for eating non-pet one */ - MON("monkey", S_YETI, LVL(2, 12, 6, 0, 0), (G_GENO | 1), - A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("monkey"), S_YETI, + LVL(2, 12, 6, 0, 0), (G_GENO | 1), + 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, 4, CLR_GRAY, MONKEY), - MON("ape", S_YETI, LVL(4, 12, 6, 0, 0), (G_GENO | G_SGROUP | 2), + MON(NAM("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, 6, CLR_BROWN, APE), - MON("owlbear", S_YETI, LVL(5, 12, 5, 0, 0), (G_GENO | 3), + MON(NAM("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, 7, CLR_BROWN, - OWLBEAR), - MON("yeti", S_YETI, LVL(5, 15, 6, 0, 0), (G_GENO | 2), + M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE, + 7, CLR_BROWN, OWLBEAR), + MON(NAM("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, 7, CLR_WHITE, YETI), - MON("carnivorous ape", S_YETI, LVL(6, 12, 6, 0, 0), (G_GENO | 1), + M3_INFRAVISIBLE, + 7, CLR_WHITE, YETI), + MON(NAM("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, 8, CLR_BLACK, CARNIVOROUS_APE), - MON("sasquatch", S_YETI, LVL(7, 15, 6, 0, 2), (G_GENO | 1), + M3_INFRAVISIBLE, + 8, CLR_BLACK, CARNIVOROUS_APE), + MON(NAM("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, 9, CLR_GRAY, SASQUATCH), + M3_INFRAVISIBLE, + 9, CLR_GRAY, SASQUATCH), /* * Zombies */ - MON("kobold zombie", S_ZOMBIE, LVL(0, 6, 10, 0, -2), - (G_GENO | G_NOCORPSE | 1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("kobold zombie"), S_ZOMBIE, + LVL(0, 6, 10, 0, -2), (G_GENO | G_NOCORPSE | 1), + A(ATTK(AT_CLAW, AD_PHYS, 1, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(400, 50, MS_GROAN, 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, 1, CLR_BROWN, - KOBOLD_ZOMBIE), - 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), + M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, + 1, CLR_BROWN, KOBOLD_ZOMBIE), + MON(NAM("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_GROAN, 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, 2, CLR_BROWN, GNOME_ZOMBIE), - 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), + MON(NAM("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_GROAN, 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, 3, - CLR_GRAY, ORC_ZOMBIE), - 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, - NO_ATTK), + M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, M3_INFRAVISION, + 3, CLR_GRAY, ORC_ZOMBIE), + MON(NAM("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, NO_ATTK), SIZ(900, 150, MS_GROAN, 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, 3, CLR_RED, DWARF_ZOMBIE), - 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, - NO_ATTK), + MON(NAM("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, NO_ATTK), SIZ(WT_ELF, 175, MS_GROAN, 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, 4, CLR_GREEN, ELF_ZOMBIE), - 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, - NO_ATTK), + MON(NAM("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, NO_ATTK), SIZ(WT_HUMAN, 200, MS_GROAN, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, - M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, 5, HI_DOMESTIC, - HUMAN_ZOMBIE), - MON("ettin zombie", S_ZOMBIE, LVL(6, 8, 6, 0, -4), - (G_GENO | G_NOCORPSE | 1), + M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, + 5, HI_DOMESTIC, HUMAN_ZOMBIE), + MON(NAM("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), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1700, 250, MS_GROAN, 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, 7, CLR_BLUE, ETTIN_ZOMBIE), - 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), + MON(NAM("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, 5, CLR_BLACK, - GHOUL), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M2_UNDEAD | M2_WANDER | M2_HOSTILE, M3_INFRAVISION, + 5, CLR_BLACK, GHOUL), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2050, 375, MS_GROAN, 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, 9, CLR_CYAN, GIANT_ZOMBIE), - 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), + M3_INFRAVISION, + 9, CLR_CYAN, GIANT_ZOMBIE), + MON(NAM("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), SIZ(300, 5, MS_BONES, MZ_HUMAN), MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_UNDEAD | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_COLLECT | M2_NASTY, - M3_INFRAVISION, 14, CLR_WHITE, SKELETON), + M3_INFRAVISION, + 14, CLR_WHITE, SKELETON), /* * golems */ - MON("straw golem", S_GOLEM, LVL(3, 12, 10, 0, 0), (G_NOCORPSE | 1), - A(ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 2), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("straw golem"), S_GOLEM, + LVL(3, 12, 10, 0, 0), (G_NOCORPSE | 1), + A(ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 2), + 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, 4, CLR_YELLOW, STRAW_GOLEM), - 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), + MON(NAM("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, 4, HI_PAPER, PAPER_GOLEM), - MON("rope golem", S_GOLEM, LVL(4, 9, 8, 0, 0), (G_NOCORPSE | 1), + MON(NAM("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, 6, CLR_BROWN, ROPE_GOLEM), - MON("gold golem", S_GOLEM, LVL(5, 9, 6, 0, 0), (G_NOCORPSE | 1), + MON(NAM("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, 6, HI_GOLD, GOLD_GOLEM), - MON("leather golem", S_GOLEM, LVL(6, 6, 6, 0, 0), (G_NOCORPSE | 1), + M2_HOSTILE | M2_NEUTER, 0, + 6, HI_GOLD, GOLD_GOLEM), + MON(NAM("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, 7, HI_LEATHER, LEATHER_GOLEM), - MON("wood golem", S_GOLEM, LVL(7, 3, 4, 0, 0), (G_NOCORPSE | 1), + MON(NAM("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, 8, HI_WOOD, WOOD_GOLEM), - 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), + M2_HOSTILE | M2_NEUTER, 0, + 8, HI_WOOD, WOOD_GOLEM), + MON(NAM("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), SIZ(1400, 600, MS_SILENT, MZ_LARGE), 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, 10, CLR_RED, FLESH_GOLEM), - 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), + MON(NAM("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, 12, CLR_BROWN, CLAY_GOLEM), - 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), + M2_HOSTILE | M2_STRONG, 0, + 12, CLR_BROWN, CLAY_GOLEM), + MON(NAM("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, 15, CLR_GRAY, STONE_GOLEM), - 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), + M2_HOSTILE | M2_STRONG, 0, + 15, CLR_GRAY, STONE_GOLEM), + MON(NAM("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, 18, CLR_CYAN, GLASS_GOLEM), - MON("iron golem", S_GOLEM, LVL(18, 6, 3, 60, 0), (G_NOCORPSE | 1), + M2_HOSTILE | M2_STRONG, 0, + 18, CLR_CYAN, GLASS_GOLEM), + MON(NAM("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, 22, HI_METAL, IRON_GOLEM), + M2_HOSTILE | M2_STRONG | M2_COLLECT, 0, + 22, HI_METAL, IRON_GOLEM), /* * humans, including elves and were-critters; * the '@' class does not obey rule #2. * Plain "human" is a placeholder, not a normal monster. */ - MON("human", S_HUMAN, LVL(0, 12, 10, 0, 0), G_NOGEN, /* for corpses */ + MON(NAM("human"), S_HUMAN, /* for corpses */ + LVL(0, 12, 10, 0, 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, - M3_INFRAVISIBLE, 2, HI_DOMESTIC, HUMAN), - MON("wererat", S_HUMAN, LVL(2, 12, 10, 10, -7), (1), + M3_INFRAVISIBLE, + 2, HI_DOMESTIC, HUMAN), + MON(NAM("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, 3, CLR_BROWN, HUMAN_WERERAT), - MON("werejackal", S_HUMAN, LVL(2, 12, 10, 10, -7), (1), + M3_INFRAVISIBLE, + 3, CLR_BROWN, HUMAN_WERERAT), + MON(NAM("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, 3, CLR_RED, HUMAN_WEREJACKAL), - MON("werewolf", S_HUMAN, LVL(5, 12, 10, 20, -7), (1), + M3_INFRAVISIBLE, + 3, CLR_RED, HUMAN_WEREJACKAL), + MON(NAM("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, 6, CLR_ORANGE, HUMAN_WEREWOLF), + M3_INFRAVISIBLE, + 6, CLR_ORANGE, HUMAN_WEREWOLF), /* plain "elf" is a placeholder, not a normal monster */ - MON("elf", S_HUMAN, LVL(0, 12, 10, 2, -3), G_NOGEN, /* for corpses */ + MON(NAM("elf"), S_HUMAN, /* for corpses */ + LVL(0, 12, 10, 2, -3), G_NOGEN, 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_COLLECT, - M3_INFRAVISION | M3_INFRAVISIBLE, 1, HI_DOMESTIC, ELF), - MON("Woodland-elf", S_HUMAN, LVL(4, 12, 10, 10, -5), - (G_GENO | G_SGROUP | 2), + M3_INFRAVISION | M3_INFRAVISIBLE, + 1, HI_DOMESTIC, ELF), + MON(NAM("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, 6, CLR_GREEN, WOODLAND_ELF), - MON("Green-elf", S_HUMAN, LVL(5, 12, 10, 10, -6), (G_GENO | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 6, CLR_GREEN, WOODLAND_ELF), + MON(NAM("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, 7, CLR_BRIGHT_GREEN, GREEN_ELF), - MON("Grey-elf", S_HUMAN, LVL(6, 12, 10, 10, -7), (G_GENO | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 7, CLR_BRIGHT_GREEN, GREEN_ELF), + MON(NAM("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, 8, CLR_GRAY, GREY_ELF), - MON3("elf-lord", "elf-lady", "elf-noble", - S_HUMAN, LVL(8, 12, 10, 20, -9), (G_GENO | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 8, CLR_GRAY, GREY_ELF), + MON(NAMS("elf-lord", "elf-lady", "elf-noble"), 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_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 11, CLR_BRIGHT_BLUE, ELF_NOBLE), - MON3("Elvenking", "Elvenqueen", "elven monarch", - S_HUMAN, LVL(9, 12, 10, 25, -10), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_BRIGHT_BLUE, ELF_NOBLE), + MON(NAMS("Elvenking", "Elvenqueen", "elven monarch"), 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_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 11, HI_LORD, ELVEN_MONARCH), - MON("doppelganger", S_HUMAN, LVL(9, 12, 5, 20, 0), (G_GENO | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, HI_LORD, ELVEN_MONARCH), + MON(NAM("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), SIZ(WT_HUMAN, 400, MS_IMITATE, MZ_HUMAN), MR_SLEEP, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT | M2_SHAPESHIFTER, - M3_INFRAVISIBLE, 11, HI_DOMESTIC, DOPPELGANGER), - MON("shopkeeper", S_HUMAN, LVL(12, 18, 0, 50, 0), G_NOGEN, + M3_INFRAVISIBLE, + 11, HI_DOMESTIC, DOPPELGANGER), + MON(NAM("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, 15, HI_DOMESTIC, SHOPKEEPER), - MON("guard", S_HUMAN, LVL(12, 12, 10, 40, 10), G_NOGEN, + M3_INFRAVISIBLE, + 15, HI_DOMESTIC, SHOPKEEPER), + /* vault guard */ + MON(NAM("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, 14, CLR_BLUE, GUARD), + M3_INFRAVISIBLE, + 14, CLR_BLUE, GUARD), /* prisoner is used on some special levels */ - MON("prisoner", S_HUMAN, LVL(12, 12, 10, 0, 0), G_NOGEN, + MON(NAM("prisoner"), S_HUMAN, + LVL(12, 12, 10, 0, 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_DJINNI, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE | M3_CLOSE, 14, HI_DOMESTIC, PRISONER), - MON("Oracle", S_HUMAN, LVL(12, 0, 0, 50, 0), (G_NOGEN | G_UNIQ), + M3_INFRAVISIBLE | M3_CLOSE, + 14, HI_DOMESTIC, PRISONER), + /* the Oracle of Delphi doesn't move */ + MON(NAM("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, @@ -2319,90 +2734,107 @@ 13, HI_ZAP, ORACLE), /* aligned priests always have the epri extension attached; individual instantiations should always have either ispriest - or isminion set */ - MON3("priest", "priestess", "aligned cleric", - S_HUMAN, LVL(12, 12, 10, 50, 0), G_NOGEN, + or isminion set; role monster priests are separate (below) */ + MON(NAMS("priest", "priestess", "aligned cleric"), S_HUMAN, + LVL(12, 12, 10, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), 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, 15, CLR_WHITE, ALIGNED_CLERIC), - /* high priests always have epri and always have ispriest set */ - MON3("high priest", "high priestess", "high cleric", - S_HUMAN, LVL(25, 15, 7, 70, 0), (G_NOGEN | G_UNIQ), + M3_INFRAVISIBLE, + 15, CLR_WHITE, ALIGNED_CLERIC), + /* high priests always have epri and always have ispriest set; + they are flagged as unique even through they aren't */ + MON(NAMS("high priest", "high priestess", "high cleric"), 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), - ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, - NO_ATTK), + ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_PRIEST, MZ_HUMAN), MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MINION | M2_PRINCE | M2_NASTY | M2_COLLECT | M2_MAGIC, - M3_INFRAVISIBLE, 30, CLR_WHITE, HIGH_CLERIC), - 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), + M3_INFRAVISIBLE, + 30, CLR_WHITE, HIGH_CLERIC), + MON(NAM("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, 8, CLR_GRAY, SOLDIER), - 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), + M3_INFRAVISIBLE, + 8, CLR_GRAY, SOLDIER), + MON(NAM("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, 10, CLR_RED, SERGEANT), - 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), + M3_INFRAVISIBLE, + 10, CLR_RED, SERGEANT), + MON(NAM("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, 13, HI_DOMESTIC, NURSE), - 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), + M3_INFRAVISIBLE, + 13, HI_DOMESTIC, NURSE), + MON(NAM("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, 12, CLR_GREEN, LIEUTENANT), - 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), + M3_INFRAVISIBLE, + 12, CLR_GREEN, LIEUTENANT), + MON(NAM("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, 14, CLR_BLUE, CAPTAIN), - MON("watchman", S_HUMAN, LVL(6, 10, 10, 0, -2), - (G_SGROUP | G_NOGEN | G_GENO | 1), - A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + M3_INFRAVISIBLE, + 14, CLR_BLUE, CAPTAIN), + MON(NAM("watchman"), S_HUMAN, + LVL(6, 10, 10, 0, -2), (G_SGROUP | G_NOGEN | 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_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, 8, CLR_GRAY, WATCHMAN), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M3_INFRAVISIBLE, + 8, CLR_GRAY, WATCHMAN), + MON(NAM("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, 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_PEACEFUL | M2_STRONG | M2_COLLECT, - M3_INFRAVISIBLE, 12, CLR_GREEN, WATCH_CAPTAIN), + M3_INFRAVISIBLE, + 12, CLR_GREEN, WATCH_CAPTAIN), /* Unique humans not tied to quests. */ - MON("Medusa", S_HUMAN, LVL(20, 12, 2, 50, -15), (G_NOGEN | G_UNIQ), + MON(NAM("Medusa"), S_HUMAN, + LVL(20, 12, 2, 50, -15), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 1, 8), - ATTK(AT_GAZE, AD_STON, 0, 0), ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_GAZE, AD_STON, 0, 0), ATTK(AT_BITE, AD_DRST, 1, 6), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_HISS, MZ_LARGE), MR_POISON | MR_STONE, 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, 25, CLR_BRIGHT_GREEN, MEDUSA), - MON("Wizard of Yendor", S_HUMAN, LVL(30, 12, -8, 100, A_NONE), - (G_NOGEN | G_UNIQ), + M3_WAITFORU | M3_INFRAVISIBLE, + 25, CLR_BRIGHT_GREEN, MEDUSA), + MON(NAM("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), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_CUSS, MZ_HUMAN), MR_FIRE | MR_POISON, @@ -2411,177 +2843,205 @@ | 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, 34, HI_OVERLORD, - WIZARD_OF_YENDOR), - 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), + M3_COVETOUS | M3_WAITFORU | M3_INFRAVISIBLE, + 34, HI_OVERLORD, WIZARD_OF_YENDOR), + MON(NAM("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), SIZ(WT_HUMAN, 400, MS_GUARD, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, 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, 22, HI_LORD, CROESUS), + M3_INFRAVISIBLE, + 22, HI_LORD, CROESUS), #ifdef CHARON - MON("Charon", S_HUMAN, LVL(76, 18, -5, 120, 0), - (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), - A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_TUCH, AD_PLYS, 1, 8), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("Charon"), S_HUMAN, + LVL(76, 18, -5, 120, 0), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_TUCH, AD_PLYS, 1, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_FERRY, MZ_HUMAN), MR_FIRE | MR_COLD | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_SEE_INVIS | M1_HUMANOID, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_PNAME | M2_MALE | M2_GREEDY | M2_COLLECT, - M3_INFRAVISIBLE, 38, CLR_WHITE, CHARON), + M3_INFRAVISIBLE, + 38, CLR_WHITE, CHARON), #endif /* * ghosts + * ghosts and shades don't leave corpses; assigning human weight + * to them matters for statues */ - MON("ghost", S_GHOST, LVL(10, 3, -5, 50, -5), (G_NOCORPSE | G_NOGEN), - A(ATTK(AT_TUCH, AD_PHYS, 1, 1), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("ghost"), S_GHOST, + LVL(10, 3, -5, 50, -5), (G_NOCORPSE | G_NOGEN), + A(ATTK(AT_TUCH, AD_PHYS, 1, 1), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 0, MS_SILENT, MZ_HUMAN), 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, 12, CLR_GRAY, GHOST), - 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), + MON(NAM("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), SIZ(WT_HUMAN, 0, MS_WAIL, MZ_HUMAN), MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0, 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, 14, CLR_BLACK, SHADE), + M3_INFRAVISION, + 14, CLR_BLACK, SHADE), /* * (major) demons */ - MON("water demon", S_DEMON, LVL(8, 12, -4, 30, -7), - (G_NOCORPSE | G_NOGEN), + MON(NAM("water demon"), S_DEMON, + LVL(8, 12, -4, 30, -7), (G_NOCORPSE | G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK), 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, 11, CLR_BLUE, WATER_DEMON), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_BLUE, WATER_DEMON), /* standard demons & devils */ -#define SEDUCTION_ATTACKS_YES \ +#define SEDUCTION_ATTACKS_YES \ A(ATTK(AT_BITE, AD_SSEX, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 3), \ ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK) -#define SEDUCTION_ATTACKS_NO \ +#define SEDUCTION_ATTACKS_NO \ A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), \ ATTK(AT_BITE, AD_DRLI, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK) - /* incubus and succubus */ - MON3("incubus", "succubus", "amorous demon", - S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE | 1), - SEDUCTION_ATTACKS_YES, SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), + /* incubus and succubus; prior to 3.7, succubus and incubus were + distinct monsters; "amorous demon" is considered to be a temporary + placeholder but may be here to stay... */ + MON(NAMS("incubus", "succubus", "amorous demon"), 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, - M3_INFRAVISIBLE | M3_INFRAVISION, 8, CLR_GRAY, AMOROUS_DEMON), - MON("horned devil", S_DEMON, LVL(6, 9, -5, 50, 11), - (G_HELL | G_NOCORPSE | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 8, CLR_GRAY, AMOROUS_DEMON), + MON(NAM("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), - ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), NO_ATTK, - NO_ATTK), + ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), + 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, 9, CLR_BROWN, HORNED_DEVIL), + M3_INFRAVISIBLE | M3_INFRAVISION, + 9, CLR_BROWN, HORNED_DEVIL), /* 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), - (G_HELL | G_NOCORPSE | G_SGROUP | 2), + and spelled this way; plural is erinyes */ + MON(NAM("erinys"), S_DEMON, + LVL(7, 12, 2, 30, 10), (G_HELL | G_NOCORPSE | G_SGROUP | 2), /* erinys attacks (among other things) are variable depending on your alignment abuse, can be increased from here by adj_erinys(mon.c) */ - A(ATTK(AT_WEAP, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + A(ATTK(AT_WEAP, AD_DRST, 2, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_STRONG | M2_NASTY | M2_FEMALE | M2_COLLECT, - M3_INFRAVISIBLE | M3_INFRAVISION, 10, CLR_RED, ERINYS), - MON("barbed devil", S_DEMON, LVL(8, 12, 0, 35, 8), - (G_HELL | G_NOCORPSE | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 10, CLR_RED, ERINYS), + MON(NAM("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_STCK, 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, 10, CLR_RED, BARBED_DEVIL), - MON("marilith", S_DEMON, LVL(7, 12, -6, 80, -12), - (G_HELL | G_NOCORPSE | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 10, CLR_RED, BARBED_DEVIL), + MON(NAM("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), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4)), 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, 11, CLR_RED, MARILITH), - MON("vrock", S_DEMON, LVL(8, 12, 0, 50, -9), - (G_HELL | G_NOCORPSE | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_RED, MARILITH), + MON(NAM("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), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_CLAW, AD_PHYS, 1, 8), 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, 11, CLR_GREEN, VROCK), - MON("hezrou", S_DEMON, LVL(9, 6, -2, 55, -10), - (G_HELL | G_NOCORPSE | G_SGROUP | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 11, CLR_GREEN, VROCK), + MON(NAM("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, 12, CLR_GREEN, HEZROU), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 12, CLR_GREEN, HEZROU), + MON(NAM("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, 13, CLR_GRAY, BONE_DEVIL), - MON("ice devil", S_DEMON, LVL(11, 6, -4, 55, -12), - (G_HELL | G_NOCORPSE | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 13, CLR_GRAY, BONE_DEVIL), + MON(NAM("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), ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_COLD, 3, 4), ATTK(AT_TUCH, AD_SLOW, 1, 1), NO_ATTK), 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, 14, CLR_WHITE, ICE_DEVIL), - MON("nalfeshnee", S_DEMON, LVL(11, 9, -1, 65, -11), - (G_HELL | G_NOCORPSE | 1), + M3_INFRAVISIBLE | M3_INFRAVISION, + 14, CLR_WHITE, ICE_DEVIL), + MON(NAM("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), - ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, - NO_ATTK), + ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), + NO_ATTK, 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, 15, CLR_RED, NALFESHNEE), - MON("pit fiend", S_DEMON, LVL(13, 6, -3, 65, -13), - (G_HELL | G_NOCORPSE | 2), + M3_INFRAVISIBLE | M3_INFRAVISION, + 15, CLR_RED, NALFESHNEE), + MON(NAM("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), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), 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, 16, CLR_RED, PIT_FIEND), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 16, CLR_RED, PIT_FIEND), + /* from Jack Vance's _Rhialto_the_Marvellous_, one of the sequels + to _The_Dying_Earth_ */ + MON(NAM("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, 15, CLR_GRAY, SANDESTIN), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION, + 15, CLR_GRAY, SANDESTIN), + MON(NAM("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, 20, CLR_RED, BALROG), + M3_INFRAVISIBLE | M3_INFRAVISION, + 20, CLR_RED, BALROG), /* Named demon lords & princes plus Arch-Devils. * (their order matters; see minion.c) */ - MON("Juiblex", S_DEMON, LVL(50, 3, -7, 65, -15), + MON(NAM("Juiblex"), S_DEMON, LVL(50, 3, -7, 65, -15), (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_ENGL, AD_DISE, 4, 10), ATTK(AT_SPIT, AD_ACID, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2591,21 +3051,21 @@ | 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, 26, CLR_BRIGHT_GREEN, - JUIBLEX), - MON("Yeenoghu", S_DEMON, LVL(56, 18, -5, 80, -15), - (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), + M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISION, + 26, CLR_BRIGHT_GREEN, JUIBLEX), + MON(NAM("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), - ATTK(AT_CLAW, AD_PLYS, 1, 6), ATTK(AT_MAGC, AD_MAGM, 2, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_PLYS, 1, 6), ATTK(AT_MAGC, AD_MAGM, 2, 6), + NO_ATTK, NO_ATTK), SIZ(900, 500, MS_ORC, MZ_LARGE), MR_FIRE | MR_POISON, 0, 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, 31, HI_LORD, - YEENOGHU), - MON("Orcus", S_DEMON, LVL(66, 9, -6, 85, -20), - (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, + 31, HI_LORD, YEENOGHU), + MON(NAM("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), ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_MAGC, AD_SPEL, 8, 6), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK), @@ -2616,92 +3076,95 @@ M3_WAITFORU | M3_WANTSBOOK | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, 36, HI_LORD, ORCUS), - MON("Geryon", S_DEMON, LVL(72, 3, -3, 75, 15), - (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), + MON(NAM("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), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_BRIBE, MZ_HUGE), MR_FIRE | MR_POISON, 0, 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, 36, HI_LORD, - GERYON), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, + 36, HI_LORD, GERYON), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_BRIBE, MZ_HUMAN), MR_FIRE | MR_POISON, 0, 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, 40, HI_LORD, - DISPATER), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, + 40, HI_LORD, DISPATER), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_BRIBE, MZ_LARGE), MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, 45, HI_LORD, BAALZEBUB), - 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, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("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, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_BRIBE, MZ_HUGE), MR_FIRE | MR_COLD | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS, 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, 53, HI_LORD, ASMODEUS), - MON("Demogorgon", S_DEMON, LVL(106, 15, -8, 95, -20), - (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), + MON(NAM("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), - ATTK(AT_CLAW, AD_DISE, 1, 6), ATTK(AT_CLAW, AD_DISE, 1, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_DISE, 1, 6), ATTK(AT_CLAW, AD_DISE, 1, 6), + NO_ATTK, NO_ATTK), SIZ(1500, 500, MS_GROWL, MZ_HUGE), MR_FIRE | MR_POISON, 0, 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, 57, HI_LORD, - DEMOGORGON), + M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, + 57, HI_LORD, DEMOGORGON), /* Riders -- the Four Horsemen of the Apocalypse ("War" == player); * depicted with '&' but do not have M2_DEMON set. */ - MON("Death", S_DEMON, LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN), - A(ATTK(AT_TUCH, AD_DETH, 8, 8), ATTK(AT_TUCH, AD_DETH, 8, 8), NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + MON(NAM("Death"), S_DEMON, + LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN), + A(ATTK(AT_TUCH, AD_DETH, 8, 8), ATTK(AT_TUCH, AD_DETH, 8, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), 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, 34, HI_OVERLORD, - DEATH), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, + 34, HI_OVERLORD, DEATH), + MON(NAM("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), SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), 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, 34, HI_OVERLORD, - PESTILENCE), - 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), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, + 34, HI_OVERLORD, PESTILENCE), + MON(NAM("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), SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), 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, 34, HI_OVERLORD, - FAMINE), + M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, + 34, HI_OVERLORD, FAMINE), /* other demons */ #ifdef MAIL_STRUCTURES - MON("mail daemon", S_DEMON, LVL(56, 24, 10, 127, 0), - (G_NOGEN | G_NOCORPSE), + MON(NAM("mail daemon"), S_DEMON, + LVL(56, 24, 10, 127, 0), (G_NOGEN | G_NOCORPSE), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(600, 300, MS_SILENT, MZ_HUMAN), MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, @@ -2710,9 +3173,11 @@ M2_NOPOLY | M2_STALK | M2_PEACEFUL, M3_INFRAVISIBLE | M3_INFRAVISION, 26, CLR_BRIGHT_BLUE, MAIL_DAEMON), #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), + /* djinni is singular; plural is djinn */ + MON(NAM("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, 8, CLR_YELLOW, DJINNI), @@ -2726,100 +3191,122 @@ * monster type, not a specific monster (for ) or the relevant * location, and therefore doesn't know whether water is involved. */ - MON("jellyfish", S_EEL, LVL(3, 3, 6, 0, 0), (G_GENO | G_NOGEN), - A(ATTK(AT_STNG, AD_DRST, 3, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("jellyfish"), S_EEL, + LVL(3, 3, 6, 0, 0), (G_GENO | G_NOGEN), + A(ATTK(AT_STNG, AD_DRST, 3, 3), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(80, 20, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM | M1_AMPHIBIOUS | M1_NOLIMBS | M1_NOHEAD - | M1_NOTAKE | M1_POIS, - M2_HOSTILE, 0, 5, CLR_BLUE, JELLYFISH), - MON("piranha", S_EEL, LVL(5, 18, 4, 0, 0), (G_GENO | G_NOGEN | G_SGROUP), + | M1_NOTAKE | M1_POIS, M2_HOSTILE, 0, + 5, CLR_BLUE, JELLYFISH), + MON(NAM("piranha"), S_EEL, + LVL(5, 18, 4, 0, 0), (G_GENO | G_NOGEN | G_SGROUP), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(60, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOLIMBS - | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, - M2_HOSTILE, 0, 7, CLR_RED, PIRANHA), - 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), + | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, 0, + 7, CLR_RED, PIRANHA), + MON(NAM("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_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_THICK_HIDE | M1_NOTAKE, - M2_HOSTILE, 0, 9, CLR_GRAY, SHARK), - 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), + M2_HOSTILE, 0, + 9, CLR_GRAY, SHARK), + MON(NAM("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, 7, CLR_CYAN, GIANT_EEL), - 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), + M2_HOSTILE, M3_INFRAVISIBLE, + 7, CLR_CYAN, GIANT_EEL), + MON(NAM("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, 10, CLR_BRIGHT_BLUE, ELECTRIC_EEL), - MON("kraken", S_EEL, LVL(20, 3, 6, 0, -3), (G_GENO | G_NOGEN), + M2_HOSTILE, M3_INFRAVISIBLE, + 10, CLR_BRIGHT_BLUE, ELECTRIC_EEL), + MON(NAM("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), + 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, 22, CLR_RED, - KRAKEN), + M2_NOPOLY | M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, + 22, CLR_RED, KRAKEN), /* * lizards, &c */ - MON("newt", S_LIZARD, LVL(0, 6, 8, 0, 0), (G_GENO | 5), - A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, - NO_ATTK), + MON(NAM("newt"), S_LIZARD, + LVL(0, 6, 8, 0, 0), (G_GENO | 5), + A(ATTK(AT_BITE, AD_PHYS, 1, 2), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(10, 20, MS_SILENT, MZ_TINY), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE, 0, 1, CLR_YELLOW, NEWT), - 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), + M2_HOSTILE, 0, + 1, CLR_YELLOW, NEWT), + MON(NAM("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, 2, CLR_GREEN, - GECKO), - 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), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, + 2, CLR_GREEN, GECKO), + MON(NAM("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, 3, CLR_BROWN, - IGUANA), - 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), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, + 3, CLR_BROWN, IGUANA), + MON(NAM("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_CHIRP, MZ_MEDIUM), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, - M2_HOSTILE, 0, 4, CLR_BROWN, BABY_CROCODILE), - 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), + M2_HOSTILE, 0, + 4, CLR_BROWN, BABY_CROCODILE), + /* trivia: before monster corspes were implemented, "lizard corpse" + was a specific type of item */ + MON(NAM("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, 6, CLR_GREEN, - LIZARD), - 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), + M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, + 6, CLR_GREEN, LIZARD), + MON(NAM("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, 7, CLR_BROWN, - CHAMELEON), - MON("crocodile", S_LIZARD, LVL(6, 9, 5, 0, 0), (G_GENO | 1), + M2_NOPOLY | M2_HOSTILE | M2_SHAPESHIFTER, 0, + 7, CLR_BROWN, CHAMELEON), + MON(NAM("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_BELLOW, MZ_LARGE), 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, - M2_STRONG | M2_HOSTILE, 0, 7, CLR_BROWN, CROCODILE), - MON("salamander", S_LIZARD, LVL(8, 12, -1, 0, -9), (G_HELL | 1), + M2_STRONG | M2_HOSTILE, 0, + 7, CLR_BROWN, CROCODILE), + MON(NAM("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, - NO_ATTK), + ATTK(AT_HUGS, AD_PHYS, 2, 6), ATTK(AT_HUGS, AD_FIRE, 3, 6), + NO_ATTK, NO_ATTK), 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, @@ -2829,11 +3316,11 @@ * dummy monster needed for visual interface * (marking it unique prevents figurines) */ - MON("long worm tail", S_WORM_TAIL, LVL(0, 0, 0, 0, 0), - (G_NOGEN | G_NOCORPSE | G_UNIQ), + MON(NAM("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, 1, CLR_BROWN, - LONG_WORM_TAIL), + SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, + 1, CLR_BROWN, LONG_WORM_TAIL), /* Note: * Worm tail must be between the normal monsters and the special * quest & pseudo-character ones because an optimization in the @@ -2844,81 +3331,95 @@ /* * character classes */ - MON("archeologist", 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), + MON(NAM("archeologist"), 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_TUNNEL | M1_NEEDPICK | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, 12, HI_DOMESTIC, ARCHEOLOGIST), - 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), + MON(NAM("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, 12, HI_DOMESTIC, BARBARIAN), - MON3("caveman", "cavewoman", "cave dweller", - 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), + MON(NAMS("caveman", "cavewoman", "cave dweller"), 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_COLLECT, - M3_INFRAVISIBLE, 12, HI_DOMESTIC, CAVE_DWELLER), - 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), + M3_INFRAVISIBLE, + 12, HI_DOMESTIC, CAVE_DWELLER), + MON(NAM("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, 12, HI_DOMESTIC, HEALER), - 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), + MON(NAM("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, 12, HI_DOMESTIC, KNIGHT), - 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), + MON(NAM("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, - M3_INFRAVISIBLE, 11, HI_DOMESTIC, MONK), - MON3("priest", "priestess", "cleric", - 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), + M3_INFRAVISIBLE, + 11, HI_DOMESTIC, MONK), + /* monster priests are separate monsters (above; "aligned cleric") */ + MON(NAMS("priest", "priestess", "cleric"), 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_COLLECT, - M3_INFRAVISIBLE, 12, HI_DOMESTIC, CLERIC), - 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), + M3_INFRAVISIBLE, + 12, HI_DOMESTIC, CLERIC), + MON(NAM("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, 12, HI_DOMESTIC, RANGER), - 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), + MON(NAM("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, 12, HI_DOMESTIC, ROGUE), - 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), + M3_INFRAVISIBLE, + 12, HI_DOMESTIC, ROGUE), + MON(NAM("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, 12, HI_DOMESTIC, SAMURAI), - 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), + MON(NAM("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, @@ -2928,51 +3429,58 @@ if a neutral valk leaves a bones file containing neutral warriors, the latter will magically turn lawful if encountered by a lawful valk or any non-valk (for bones on the dungeon side of the portal) */ - 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), + MON(NAM("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, 12, HI_DOMESTIC, VALKYRIE), - 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), + M3_INFRAVISIBLE, + 12, HI_DOMESTIC, VALKYRIE), + MON(NAM("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, 12, HI_DOMESTIC, WIZARD), + M3_INFRAVISIBLE, + 12, HI_DOMESTIC, WIZARD), /* * quest leaders */ - MON("Lord Carnarvon", S_HUMAN, LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), + MON(NAM("Lord Carnarvon"), S_HUMAN, + LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_MAGC, AD_SPEL, 4, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, 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, 24, HI_LORD, LORD_CARNARVON), - MON("Pelias", S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, LORD_CARNARVON), + MON(NAM("Pelias"), S_HUMAN, + LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD, PELIAS), - MON("Shaman Karnov", S_HUMAN, LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, PELIAS), + MON(NAM("Shaman Karnov"), S_HUMAN, + LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD, SHAMAN_KARNOV), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, SHAMAN_KARNOV), #if 0 /* OBSOLETE -- leaders for 3.1.x/3.2.x elf quest when elf was a role */ /* Two for elves - one of each sex. */ - MON("Earendil", S_HUMAN, + MON(NAM("Earendil"), S_HUMAN, LVL(20, 12, 0, 50, -20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2980,9 +3488,9 @@ 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, 22, HI_LORD, - EARENDIL), - MON("Elwing", S_HUMAN, + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, + 22, HI_LORD, EARENDIL), + MON(NAM("Elwing"), S_HUMAN, LVL(20, 12, 0, 50, -20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), @@ -2990,130 +3498,138 @@ 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, 22, HI_LORD, - ELWING), + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, + 22, HI_LORD, ELWING), #endif - MON("Hippocrates", S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + MON(NAM("Hippocrates"), S_HUMAN, + LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_CLRC, 3, 8), ATTK(AT_MAGC, AD_CLRC, 3, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 26, HI_LORD, HIPPOCRATES), - MON("King Arthur", S_HUMAN, LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 26, HI_LORD, HIPPOCRATES), + MON(NAM("King Arthur"), S_HUMAN, + LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD, KING_ARTHUR), - MON("Grand Master", S_HUMAN, LVL(25, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, KING_ARTHUR), + MON(NAM("Grand Master"), S_HUMAN, + LVL(25, 15, 0, 90, 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, - NO_ATTK), + ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, 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, 30, CLR_BLACK, GRAND_MASTER), - MON("Arch Priest", S_HUMAN, LVL(25, 15, 7, 90, 0), (G_NOGEN | G_UNIQ), + | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 30, CLR_BLACK, GRAND_MASTER), + MON(NAM("Arch Priest"), S_HUMAN, + LVL(25, 15, 7, 90, 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, - NO_ATTK), + ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, 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, 30, CLR_WHITE, ARCH_PRIEST), - MON("Orion", S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 30, CLR_WHITE, ARCH_PRIEST), + MON(NAM("Orion"), S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_MAGC, AD_SPEL, 4, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2200, 700, MS_LEADER, MZ_HUGE), 0, 0, 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, 24, HI_LORD, ORION), + M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, + 24, HI_LORD, ORION), /* Note: Master of Thieves is also the Tourist's nemesis. */ - MON("Master of Thieves", S_HUMAN, LVL(20, 15, 0, 90, -20), - (G_NOGEN | G_UNIQ), + MON(NAM("Master of Thieves"), S_HUMAN, + LVL(20, 15, 0, 90, -20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_STONE, 0, 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, 24, HI_LORD, MASTER_OF_THIEVES), - MON("Lord Sato", S_HUMAN, LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), + M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, MASTER_OF_THIEVES), + MON(NAM("Lord Sato"), S_HUMAN, LVL(20, 15, 0, 90, 20), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD, LORD_SATO), - MON("Twoflower", S_HUMAN, LVL(20, 15, 10, 90, 0), (G_NOGEN | G_UNIQ), - A(ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, - NO_ATTK, NO_ATTK, NO_ATTK), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, LORD_SATO), + MON(NAM("Twoflower"), S_HUMAN, + LVL(20, 15, 10, 90, 0), (G_NOGEN | G_UNIQ), + A(ATTK(AT_WEAP, AD_PHYS, 4, 10), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 22, HI_DOMESTIC, TWOFLOWER), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 22, HI_DOMESTIC, TWOFLOWER), /* for a valkyrie hero, Norn's alignment will be changed to match hero's starting alignment */ - MON("Norn", S_HUMAN, LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), + MON(NAM("Norn"), S_HUMAN, + LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_WEAP, AD_PHYS, 4, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1800, 550, MS_LEADER, MZ_HUGE), MR_COLD, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_FEMALE - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 24, HI_LORD, NORN), - MON("Neferet the Green", S_HUMAN, LVL(20, 15, 0, 90, 0), - (G_NOGEN | G_UNIQ), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 24, HI_LORD, NORN), + MON(NAM("Neferet the Green"), S_HUMAN, + LVL(20, 15, 0, 90, 0), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 10), ATTK(AT_MAGC, AD_SPEL, 2, 8), ATTK(AT_MAGC, AD_SPEL, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_FEMALE | M2_PNAME | M2_PEACEFUL | M2_STRONG - | M2_COLLECT | M2_MAGIC, - M3_CLOSE | M3_INFRAVISIBLE, 25, CLR_GREEN, NEFERET_THE_GREEN), + | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, + 25, CLR_GREEN, NEFERET_THE_GREEN), /* * quest nemeses */ - MON("Minion of Huhetotl", S_DEMON, LVL(16, 12, -2, 75, -14), - (G_NOCORPSE | G_NOGEN | G_UNIQ), + MON(NAM("Minion of Huhetotl"), S_DEMON, + LVL(16, 12, -2, 75, -14), (G_NOCORPSE | G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), - ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_LARGE), MR_FIRE | MR_POISON | MR_STONE, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, 23, CLR_RED, MINION_OF_HUHETOTL), - MON("Thoth Amon", S_HUMAN, LVL(16, 12, 0, 10, -14), - (G_NOGEN | G_UNIQ | G_NOCORPSE), + MON(NAM("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), - ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), NO_ATTK, - NO_ATTK), + ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_POISON | MR_STONE, 0, 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, 22, HI_LORD, - THOTH_AMON), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 22, HI_LORD, THOTH_AMON), /* Multi-headed, possessing the breath attacks of all the other dragons * (selected at random when attacking). Despite being a superset of - * gold dragon, does not emit light. + * gold dragon, does not emit light. Also does not fly. */ - MON("Chromatic Dragon", S_DRAGON, LVL(16, 12, 0, 30, -14), - (G_NOGEN | G_UNIQ), + MON(NAM("Chromatic Dragon"), S_DRAGON, + LVL(16, 12, 0, 30, -14), (G_NOGEN | G_UNIQ), A(ATTK(AT_BREA, AD_RBRE, 6, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 8), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_STNG, AD_PHYS, 1, 6)), @@ -3128,7 +3644,7 @@ M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, 23, HI_LORD, CHROMATIC_DRAGON), #if 0 /* OBSOLETE -- nemesis for 3.1.x/3.2.x elf quest when elf was a role */ - MON("Goblin King", S_ORC, + MON(NAM("Goblin King"), S_ORC, LVL(15, 12, 10, 0, -15), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), @@ -3139,7 +3655,8 @@ M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, 18, HI_LORD, GOBLIN_KING), #endif - MON("Cyclops", S_GIANT, LVL(18, 12, 0, 0, -15), (G_NOGEN | G_UNIQ), + MON(NAM("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), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(1900, 700, MS_NEMESIS, MZ_HUGE), MR_STONE, 0, @@ -3148,7 +3665,8 @@ | M2_HOSTILE | M2_NASTY | M2_MALE | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, 23, CLR_GRAY, CYCLOPS), - MON("Ixoth", S_DRAGON, LVL(15, 12, -1, 20, -14), (G_NOGEN | G_UNIQ), + MON(NAM("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), ATTK(AT_CLAW, AD_SAMU, 2, 4), NO_ATTK), @@ -3157,64 +3675,68 @@ 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, 22, CLR_RED, - IXOTH), - MON("Master Kaen", S_HUMAN, LVL(25, 12, -10, 10, -20), (G_NOGEN | G_UNIQ), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 22, CLR_RED, IXOTH), + MON(NAM("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, - NO_ATTK), + ATTK(AT_MAGC, AD_CLRC, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_POISON | MR_STONE, 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, 31, HI_LORD, - MASTER_KAEN), - MON("Nalzok", S_DEMON, LVL(16, 12, -2, 85, -127), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 31, HI_LORD, MASTER_KAEN), + MON(NAM("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), - ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, - NO_ATTK), + ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_LARGE), MR_FIRE | MR_POISON | MR_STONE, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, 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, 23, CLR_RED, NALZOK), - MON("Scorpius", S_SPIDER, LVL(15, 12, 10, 0, -15), (G_NOGEN | G_UNIQ), + MON(NAM("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), SIZ(750, 350, MS_NEMESIS, MZ_HUMAN), MR_POISON | MR_STONE, MR_POISON, 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, 17, HI_LORD, SCORPIUS), - MON("Master Assassin", S_HUMAN, LVL(15, 12, 0, 30, 18), - (G_NOGEN | G_UNIQ), + M3_WANTSARTI | M3_WAITFORU, + 17, HI_LORD, SCORPIUS), + MON(NAM("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), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, 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, 20, HI_LORD, - MASTER_ASSASSIN), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 20, HI_LORD, MASTER_ASSASSIN), /* A renegade daimyo who led a 13 year civil war against the shogun * of his time. */ - MON("Ashikaga Takauji", S_HUMAN, LVL(15, 12, 0, 40, -13), - (G_NOGEN | G_UNIQ | G_NOCORPSE), + MON(NAM("Ashikaga Takauji"), S_HUMAN, + LVL(15, 12, 0, 40, -13), (G_NOGEN | G_UNIQ | G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, 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, 19, HI_LORD, - ASHIKAGA_TAKAUJI), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 19, HI_LORD, ASHIKAGA_TAKAUJI), /* * Note: the Master of Thieves was defined above. */ - MON("Lord Surtur", S_GIANT, LVL(15, 12, 2, 50, 12), (G_NOGEN | G_UNIQ), + MON(NAM("Lord Surtur"), S_GIANT, + LVL(15, 12, 2, 50, 12), (G_NOGEN | G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 10), ATTK(AT_WEAP, AD_PHYS, 2, 10), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), SIZ(2250, 850, MS_NEMESIS, MZ_HUGE), MR_FIRE | MR_STONE, MR_FIRE, @@ -3223,133 +3745,162 @@ | M2_STRONG | M2_NASTY | M2_ROCKTHROW | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, 19, HI_LORD, LORD_SURTUR), - MON("Dark One", S_HUMAN, LVL(15, 12, 0, 80, -10), - (G_NOGEN | G_UNIQ | G_NOCORPSE), + MON(NAM("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), - ATTK(AT_CLAW, AD_SAMU, 1, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, - NO_ATTK), + ATTK(AT_CLAW, AD_SAMU, 1, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), + NO_ATTK, NO_ATTK), SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, 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, 20, CLR_BLACK, - DARK_ONE), + M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, + 20, CLR_BLACK, DARK_ONE), /* * quest "guardians" */ - MON("student", 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, - NO_ATTK), + MON(NAM("student"), 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, NO_ATTK), 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, 7, HI_DOMESTIC, STUDENT), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, STUDENT), + MON(NAM("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, 7, HI_DOMESTIC, CHIEFTAIN), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, CHIEFTAIN), + MON(NAM("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, 7, HI_DOMESTIC, NEANDERTHAL), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, NEANDERTHAL), #if 0 /* OBSOLETE -- guardian for 3.1.x/3.2.x elf quest when elf was a role */ - MON("High-elf", S_HUMAN, + MON(NAM("High-elf"), S_HUMAN, LVL(5, 12, 10, 10, -7), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), 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, 7, HI_DOMESTIC, HIGH_ELF), + M3_INFRAVISION | M3_INFRAVISIBLE, + 7, HI_DOMESTIC, HIGH_ELF), #endif - /* attendants used to lawful but have been changed to netural because + /* attendants used to be lawful but have been changed to netural because grow_up() promotes them to healer and the latter is always neutral */ - MON("attendant", 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), + MON(NAM("attendant"), 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, 7, HI_DOMESTIC, ATTENDANT), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, ATTENDANT), + MON(NAM("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, 7, HI_DOMESTIC, PAGE), - MON("abbot", S_HUMAN, LVL(5, 12, 10, 20, 0), G_NOGEN, + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, PAGE), + MON(NAM("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, 8, HI_DOMESTIC, ABBOT), - 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), + M3_INFRAVISIBLE, + 8, HI_DOMESTIC, ABBOT), + MON(NAM("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, 8, HI_DOMESTIC, ACOLYTE), - 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), + M3_INFRAVISIBLE, + 8, HI_DOMESTIC, ACOLYTE), + MON(NAM("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, 7, HI_DOMESTIC, HUNTER), - 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), + M3_INFRAVISION | M3_INFRAVISIBLE, + 7, HI_DOMESTIC, HUNTER), + MON(NAM("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, 7, HI_DOMESTIC, THUG), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, THUG), + MON(NAM("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, 7, HI_DOMESTIC, NINJA), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, NINJA), + MON(NAM("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, 7, HI_DOMESTIC, ROSHI), - MON("guide", S_HUMAN, LVL(5, 12, 10, 20, 0), G_NOGEN, + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, ROSHI), + MON(NAM("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, 8, HI_DOMESTIC, GUIDE), + M3_INFRAVISIBLE, + 8, HI_DOMESTIC, GUIDE), /* warriors used to be chaotic but have been changed to lawful because grow_up() promotes them to valkyrie; for a valkyrie hero, they might be changed to neutral at game start; see the valkyrie comment above */ - 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), + MON(NAM("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, 7, HI_DOMESTIC, WARRIOR), - 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), + M3_INFRAVISIBLE, + 7, HI_DOMESTIC, WARRIOR), + MON(NAM("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, 8, HI_DOMESTIC, APPRENTICE), + M3_INFRAVISIBLE, + 8, HI_DOMESTIC, APPRENTICE), /* * mons_init() in monst.c adds a terminator here, mons[NUMMONS]. diff --git a/src/monst.c b/src/monst.c index c3b03f396..5518e8e44 100644 --- a/src/monst.c +++ b/src/monst.c @@ -15,27 +15,20 @@ /* monster type with single name */ #define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, \ flg1, flg2, flg3, d, col, bn) \ - { \ - { (const char *) 0, (const char *) 0, nam }, \ - PM_##bn, \ - sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col \ - } - -/* monster type with distinct male, female, neuter names */ -#define MON3(namm, namf, namn, sym, lvl, gen, atk, siz, mr1, mr2, \ - flg1, flg2, flg3, d, col, bn) \ - { \ - { namm, namf, namn }, \ - PM_##bn, \ - sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col \ + { \ + nam, PM_##bn, \ + sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col \ } /* LVL() and SIZ() collect several fields to cut down on number of args - * for MON()/MON3(). + * for MON(). Using more than 15 would fail to conform to the C Standard. + * ATTK() and A() are to avoid braces and commas within args to MON(). + * NAM() and NAMS() are used for both reasons. */ +#define NAM(name) { (const char *) 0, (const char *) 0, name } +#define NAMS(namm, namf, namn) { namm, namf, namn } #define LVL(lvl, mov, ac, mr, aln) lvl, mov, ac, mr, aln #define SIZ(wt, nut, snd, siz) wt, nut, snd, siz -/* ATTK() and A() are to avoid braces and commas within args to MON() */ #define ATTK(at, ad, n, d) { at, ad, n, d } #define A(a1, a2, a3, a4, a5, a6) { a1, a2, a3, a4, a5, a6 } @@ -51,13 +44,12 @@ struct permonst mons_init[NUMMONS + 1] = { #undef MON #define MON(nam, sym, lvl, gen, atk, siz, mr1, mr2, \ flg1, flg2, flg3, d, col, bn) \ - { \ - { (const char *) 0, (const char *) 0, nam }, \ - NON_PM, \ - sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col \ + { \ + nam, NON_PM, \ + sym, lvl, gen, atk, siz, mr1, mr2, flg1, flg2, flg3, d, col \ } - MON("", 0, LVL(0, 0, 0, 0, 0), - G_NOGEN | G_NOCORPSE, + MON(NAM(""), 0, + LVL(0, 0, 0, 0, 0), G_NOGEN | G_NOCORPSE, A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, @@ -65,7 +57,8 @@ struct permonst mons_init[NUMMONS + 1] = { }; #undef MON -#undef MON3 +#undef NAM +#undef NAMS void monst_globals_init(void); /* in hack.h but we're using config.h */