monster order rules

<Someone> 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 :-)
This commit is contained in:
nethack.allison
2004-12-17 01:32:59 +00:00
parent 0843550e37
commit 1c326a95e1
3 changed files with 80 additions and 79 deletions

View File

@@ -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
*/