From 1c326a95e16b03de532de256eb9dadbf91b8b695 Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Fri, 17 Dec 2004 01:32:59 +0000 Subject: [PATCH] monster order rules wrote: > From the mkclass() comments: > > /* Assumption #2: monsters of a given class are presented in ascending > * order of strength. > */ > > And monst.c: > > * Rule #2: monsters of a given class are presented in ascending > * order of strength. > > * Rule #4: monster subclasses (e.g. giants) should be kept > * together, unless it violates Rule 2. NOGEN monsters > * won't violate Rule 2. > > Inspecting my monster-difficulty spoiler, I see the following places > that these precepts are violated: do they cause potential problems? > (Insofar as occasionally incorrectly miscalculating the probabilities > for monster generation is a "problem", that is...) > > SPECIES DIF > ~~~~~~~~~~~~~~~~~~~~~~ ~~~ > d dog 5 > d large dog 7 > d dingo 5 > > d warg 8 > d winter wolf cub 7 > d winter wolf 9 > > u white unicorn 6 > u gray unicorn 6 > u black unicorn 6 > u pony 4 > > H frost giant 13 > H storm giant 19 > H ettin 13 > > P black pudding 12 > P green slime 8 > > S pit viper 9 > S python 8 > S cobra 10 > > Z giant zombie 9 > Z ghoul 5 > > @ nurse 13 > @ soldier 8 > @ sergeant 10 > > & horned devil 9 > & succubus 8 > > & balrog 20 > & sandestin 15 > > (I've just realised that these may have already been fixed, and > waiting on a file-compatibility-breaking release; if so, ignore me :-) --- doc/fixes35.0 | 1 + include/patchlevel.h | 4 +- src/monst.c | 154 +++++++++++++++++++++---------------------- 3 files changed, 80 insertions(+), 79 deletions(-) diff --git a/doc/fixes35.0 b/doc/fixes35.0 index ca413c19d..f315ef025 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -136,4 +136,5 @@ move all flags that are system or port specific from flag struct to sysflags struct which is used only if SYSFLAGS is defined all fields in flags struct are unconditionally present monst cham field now a short and uses mons[] index +rearrange some monster ordering to follow rule #2 listed at top of monst.c diff --git a/include/patchlevel.h b/include/patchlevel.h index 3ab6a90d5..9b888efca 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)patchlevel.h 3.4 2004/12/15 */ +/* SCCS Id: @(#)patchlevel.h 3.4 2004/12/16 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -13,7 +13,7 @@ * Incrementing EDITLEVEL can be used to force invalidation of old bones * and save files. */ -#define EDITLEVEL 15 +#define EDITLEVEL 16 #define COPYRIGHT_BANNER_A \ "NetHack, Copyright 1985-2004" diff --git a/src/monst.c b/src/monst.c index 03356569c..904e3d620 100644 --- a/src/monst.c +++ b/src/monst.c @@ -231,6 +231,13 @@ NEARDATA struct permonst mons[] = { SIZ(150, 150, 0, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), + MON("dingo", S_DOG, + LVL(4, 16, 5, 0, 0), (G_GENO|1), + A(ATTK(AT_BITE, AD_PHYS, 1 ,6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(400, 200, 0, MS_BARK, MZ_MEDIUM), 0, 0, + M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, + CLR_YELLOW), MON("dog", S_DOG, LVL(4, 16, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1 ,6), @@ -245,13 +252,6 @@ NEARDATA struct permonst mons[] = { SIZ(800, 250, 0, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), - MON("dingo", S_DOG, - LVL(4, 16, 5, 0, 0), (G_GENO|1), - A(ATTK(AT_BITE, AD_PHYS, 1 ,6), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 200, 0, MS_BARK, MZ_MEDIUM), 0, 0, - M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, - CLR_YELLOW), MON("wolf", S_DOG, LVL(5, 12, 4, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), @@ -266,6 +266,12 @@ NEARDATA struct permonst mons[] = { SIZ(500, 250, 0, MS_BARK, MZ_MEDIUM), MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), + MON("winter wolf cub", S_DOG, + LVL(5, 12, 4, 0, -5), (G_NOHELL|G_GENO|G_SGROUP|2), + A(ATTK(AT_BITE, AD_PHYS, 1, 8), ATTK(AT_BREA, AD_COLD, 1, 8), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(250, 200, 0, MS_BARK, MZ_SMALL), MR_COLD, MR_COLD, + M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_CYAN), MON("warg", S_DOG, LVL(7, 12, 4, 0, -5), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 2, 6), @@ -273,12 +279,6 @@ NEARDATA struct permonst mons[] = { SIZ(850, 350, 0, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), - MON("winter wolf cub", S_DOG, - LVL(5, 12, 4, 0, -5), (G_NOHELL|G_GENO|G_SGROUP|2), - A(ATTK(AT_BITE, AD_PHYS, 1, 8), ATTK(AT_BREA, AD_COLD, 1, 8), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(250, 200, 0, MS_BARK, MZ_SMALL), MR_COLD, MR_COLD, - M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_CYAN), 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), @@ -890,6 +890,13 @@ NEARDATA struct permonst mons[] = { /* * 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), + SIZ(1300, 250, 0, MS_NEIGH, MZ_MEDIUM), 0, 0, + M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, + M3_INFRAVISIBLE, CLR_BROWN), MON("white unicorn", S_UNICORN, LVL(4, 24, 2, 70, 7), (G_GENO|2), A(ATTK(AT_BUTT, AD_PHYS, 1,12), ATTK(AT_KICK, AD_PHYS, 1, 6), @@ -911,13 +918,6 @@ NEARDATA struct permonst mons[] = { SIZ(1300, 300, 0, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, CLR_BLACK), - 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), - SIZ(1300, 250, 0, MS_NEIGH, MZ_MEDIUM), 0, 0, - M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, - M3_INFRAVISIBLE, CLR_BROWN), 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), @@ -1538,14 +1538,6 @@ struct permonst _mons2[] = { M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_WHITE), - MON("storm giant", S_GIANT, - LVL(16, 12, 3, 10, -3), (G_GENO|G_SGROUP|1), - A(ATTK(AT_WEAP, AD_PHYS, 2, 12), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), MR_ELEC, MR_ELEC, - M1_HUMANOID|M1_CARNIVORE, - M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, - M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), 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), @@ -1554,6 +1546,14 @@ struct permonst _mons2[] = { M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), + MON("storm giant", S_GIANT, + LVL(16, 12, 3, 10, -3), (G_GENO|G_SGROUP|1), + A(ATTK(AT_WEAP, AD_PHYS, 2, 12), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), MR_ELEC, MR_ELEC, + M1_HUMANOID|M1_CARNIVORE, + M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, + M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), 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), @@ -1836,15 +1836,6 @@ struct permonst _mons2[] = { M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN), - MON("black pudding", S_PUDDING, - LVL(10, 6, 6, 0, 0), (G_GENO|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, 0, MS_SILENT, MZ_LARGE), - MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, - M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| - M1_MINDLESS|M1_OMNIVORE|M1_ACID, - M2_HOSTILE|M2_NEUTER, 0, CLR_BLACK), MON("green slime", S_PUDDING, LVL(6, 6, 6, 0, 0), (G_HELL|G_GENO|1), A(ATTK(AT_TUCH, AD_SLIM, 1, 4), ATTK(AT_NONE, AD_SLIM, 0, 0), @@ -1854,6 +1845,15 @@ struct permonst _mons2[] = { M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID|M1_POIS, M2_HOSTILE|M2_NEUTER, 0, CLR_GREEN), + MON("black pudding", S_PUDDING, + LVL(10, 6, 6, 0, 0), (G_GENO|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, 0, MS_SILENT, MZ_LARGE), + MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, + M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| + M1_MINDLESS|M1_OMNIVORE|M1_ACID, + M2_HOSTILE|M2_NEUTER, 0, CLR_BLACK), /* * Quantum mechanics */ @@ -1908,15 +1908,6 @@ struct permonst _mons2[] = { M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, CLR_RED), - MON("pit viper", S_SNAKE, - LVL(6, 15, 2, 0, 0), (G_GENO|1), - A(ATTK(AT_BITE, AD_DRST, 1, 4), ATTK(AT_BITE, AD_DRST, 1, 4), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 60, 0, MS_HISS, MZ_MEDIUM), - MR_POISON, MR_POISON, - M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| - M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, - M2_HOSTILE, M3_INFRAVISION, CLR_BLUE), MON("python", S_SNAKE, LVL(6, 3, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_PHYS, 0, 0), @@ -1926,6 +1917,15 @@ struct permonst _mons2[] = { M1_SWIM|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_MAGENTA), + MON("pit viper", S_SNAKE, + LVL(6, 15, 2, 0, 0), (G_GENO|1), + A(ATTK(AT_BITE, AD_DRST, 1, 4), ATTK(AT_BITE, AD_DRST, 1, 4), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(100, 60, 0, MS_HISS, MZ_MEDIUM), + MR_POISON, MR_POISON, + M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| + M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, + M2_HOSTILE, M3_INFRAVISION, CLR_BLUE), 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), @@ -2163,6 +2163,14 @@ struct permonst _mons2[] = { MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_BLUE), + MON("ghoul", S_ZOMBIE, + LVL(3, 6, 10, 0, -2), (G_GENO|G_NOCORPSE|1), + A(ATTK(AT_CLAW, AD_PLYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 3), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(400, 50, 0, MS_SILENT, MZ_SMALL), + MR_COLD|MR_SLEEP|MR_POISON, 0, + M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, + M2_UNDEAD|M2_WANDER|M2_HOSTILE, M3_INFRAVISION, CLR_BLACK), MON("giant zombie", S_ZOMBIE, LVL(8, 8, 6, 0, -4), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), @@ -2172,14 +2180,6 @@ struct permonst _mons2[] = { M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_GIANT|M2_STRONG, M3_INFRAVISION, CLR_CYAN), - MON("ghoul", S_ZOMBIE, - LVL(3, 6, 10, 0, -2), (G_GENO|G_NOCORPSE|1), - A(ATTK(AT_CLAW, AD_PLYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 3), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 50, 0, MS_SILENT, MZ_SMALL), - MR_COLD|MR_SLEEP|MR_POISON, 0, - M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, - M2_UNDEAD|M2_WANDER|M2_HOSTILE, M3_INFRAVISION, CLR_BLACK), 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), @@ -2360,13 +2360,6 @@ struct permonst _mons2[] = { M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_COLLECT|M2_SHAPESHIFTER, M3_INFRAVISIBLE, HI_DOMESTIC), - MON("nurse", S_HUMAN, - LVL(11, 6, 0, 0, 0), (G_GENO|3), - A(ATTK(AT_CLAW, AD_HEAL, 2, 6), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NURSE, MZ_HUMAN), MR_POISON, MR_POISON, - M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE, - M3_INFRAVISIBLE, HI_DOMESTIC), MON("shopkeeper", S_HUMAN, LVL(12, 18, 0, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4), @@ -2432,6 +2425,13 @@ struct permonst _mons2[] = { M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_RED), + MON("nurse", S_HUMAN, + LVL(11, 6, 0, 0, 0), (G_GENO|3), + A(ATTK(AT_CLAW, AD_HEAL, 2, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(WT_HUMAN, 400, 0, MS_NURSE, MZ_HUMAN), MR_POISON, MR_POISON, + M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE, + M3_INFRAVISIBLE, HI_DOMESTIC), MON("lieutenant", S_HUMAN, LVL(10, 10, 10, 15, -4), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 3, 4), @@ -2543,15 +2543,6 @@ struct permonst _mons2[] = { M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), /* standard demons & devils */ - MON("horned devil", S_DEMON, - LVL(6, 9, -5, 50, 11), (G_HELL|G_NOCORPSE|2), - A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), - ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), - NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, - M1_POIS|M1_THICK_HIDE, - M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, - CLR_BROWN), #ifdef SEDUCE # define SEDUCTION_ATTACKS \ A(ATTK(AT_BITE, AD_SSEX, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 3), \ @@ -2568,6 +2559,15 @@ struct permonst _mons2[] = { M1_HUMANOID|M1_FLY|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_FEMALE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), + MON("horned devil", S_DEMON, + LVL(6, 9, -5, 50, 11), (G_HELL|G_NOCORPSE|2), + A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), + ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), + NO_ATTK, NO_ATTK), + SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + M1_POIS|M1_THICK_HIDE, + M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, + CLR_BROWN), MON("incubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE|1), SEDUCTION_ATTACKS, @@ -2650,6 +2650,13 @@ struct permonst _mons2[] = { M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), + MON("sandestin", S_DEMON, + LVL(13, 12, 4, 60, -5), (G_HELL|G_NOCORPSE|1), + A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), + NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), + SIZ(1500, 400, 0, MS_CUSS, MZ_HUMAN), MR_STONE, 0, + M1_HUMANOID, M2_NOPOLY|M2_STALK|M2_STRONG|M2_COLLECT|M2_SHAPESHIFTER, + M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), 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), @@ -2787,13 +2794,6 @@ struct permonst _mons2[] = { SIZ(1500, 400, 0, MS_DJINNI, MZ_HUMAN), MR_POISON|MR_STONE, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_NOPOLY|M2_STALK|M2_COLLECT, M3_INFRAVISIBLE, CLR_YELLOW), - MON("sandestin", S_DEMON, - LVL(13, 12, 4, 60, -5), (G_HELL|G_NOCORPSE|1), - A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), - NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 400, 0, MS_CUSS, MZ_HUMAN), MR_STONE, 0, - M1_HUMANOID, M2_NOPOLY|M2_STALK|M2_STRONG|M2_COLLECT|M2_SHAPESHIFTER, - M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), /* * sea monsters */ -- 2.40.0