[comp.sources.games] v10i052: nethack3p9 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (07/12/90)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 52
Archive-name: nethack3p9/Part07
Supersedes: NetHack3: Volume 7, Issue 56-93



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 7 (of 56)."
# Contents:  src/dogmove.c src/monst.c2
# Wrapped by billr@saab on Wed Jul 11 17:10:59 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'src/dogmove.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/dogmove.c'\"
else
echo shar: Extracting \"'src/dogmove.c'\" \(10693 characters\)
sed "s/^X//" >'src/dogmove.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)dogmove.c	3.0	88/04/15
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#include "hack.h"
X
X#include "mfndpos.h"
X#include "edog.h"
X
X#ifdef OVL0
X
Xstatic const char NEARDATA nofetch[] = { BALL_SYM, CHAIN_SYM, ROCK_SYM, 0 };
X
X#endif /* OVL0 */
X
XSTATIC_DCL void FDECL(dog_eat, (struct monst *, struct obj *, XCHAR_P, int, int));
X
X#ifdef OVLB
X
XSTATIC_OVL void
Xdog_eat(mtmp, obj, otyp, x, y)
Xregister struct monst *mtmp;
Xregister struct obj * obj;
Xxchar otyp;
Xint x, y;
X{
X	register struct edog *edog = EDOG(mtmp);
X	int nutrit;
X
X	if(edog->hungrytime < moves)
X	    edog->hungrytime = moves;
X	/* Note: to get the correct percentage-eaten in case oeaten is set,
X	 * use "obj->owt / obj->quan / base-weight".  It so happens that here
X	 * we want to multiply by obj->quan, which thus cancels out.
X	 * It is arbitrary that the pet takes the same length of time to eat
X	 * as a human, but gets 5X as much nutrition.
X	 */
X	if(obj->otyp == CORPSE) {
X	    mtmp->meating = 3 + (mons[obj->corpsenm].cwt >> 2);
X	    nutrit = 5 * mons[obj->corpsenm].cnutrit;
X	} else {
X	    mtmp->meating = objects[obj->otyp].oc_delay;
X	    nutrit = 5 * objects[obj->otyp].nutrition;
X	}
X	if(obj->oeaten) {
X	    mtmp->meating = eaten_stat(mtmp->meating, obj);
X	    nutrit = eaten_stat(nutrit, obj);
X	}
X	edog->hungrytime += nutrit;
X	mtmp->mconf = 0;
X	if (mtmp->mtame < 20) mtmp->mtame++;
X	if(cansee(x,y))
X	    pline("%s eats %s.", Monnam(mtmp), doname(obj));
X	/* perhaps this was a reward */
X	if(otyp != CADAVER)
X#ifdef LINT
X	    edog->apport = 0;
X#else
X	    edog->apport += (unsigned)(200L/
X		((long)edog->dropdist+moves-edog->droptime));
X#endif
X	delobj(obj);
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
X/* return 0 (no move), 1 (move) or 2 (dead) */
Xint
Xdog_move(mtmp, after)
Xregister struct monst *mtmp;
Xregister int after;
X{
Xregister int nx,ny,omx,omy,appr,nearer,j;
Xint udist,chi,i,whappr;
X/* XLINT register struct permonst *mdat = mtmp->data; */
Xregister struct edog *edog = EDOG(mtmp);
Xstruct obj *obj;
Xstruct trap *trap;
Xxchar cnt,chcnt,nix,niy;
Xschar dogroom,uroom;
Xxchar gx,gy,gtyp,otyp;	/* current goal */
Xcoord poss[9];
Xlong info[9];
Xlong allowflags;
X#define GDIST(x,y) (dist2(x,y,gx,gy))
X#define DDIST(x,y) (dist2(x,y,omx,omy))
X
X#ifdef __GNULINT__
X	chi = -1;	/* gcc warning from 'goto newdogpos' */
X#endif
X	omx = mtmp->mx;
X	omy = mtmp->my;
X	whappr = (moves - edog->whistletime < 5);
X	if(moves > edog->hungrytime + 500) {
X		if(!carnivorous(mtmp->data) && !herbivorous(mtmp->data)) {
X			edog->hungrytime = moves + 500;
X			/* but not too high; it might polymorph */
X		} else if (!mtmp->mconf) {
X			mtmp->mconf = 1;
X			mtmp->mhpmax /= 3;
X			if(mtmp->mhp > mtmp->mhpmax)
X				mtmp->mhp = mtmp->mhpmax;
X			if(cansee(omx,omy))
X			    pline("%s is confused from hunger.", Monnam(mtmp));
X			else You("feel worried about %s.", mon_nam(mtmp));
X		} else if(moves > edog->hungrytime + 750 ||
X							mtmp->mhp < 1) {
X#ifdef WALKIES
X			if(mtmp->mleashed)
X				Your("leash goes slack.");
X#endif
X			if(cansee(omx,omy))
X				pline("%s dies%s.", Monnam(mtmp),
X				      (mtmp->mhp >= 1) ? "" : " from hunger");
X			else
X		You("have a sad feeling for a moment, then it passes.");
X			mondied(mtmp);
X			return(2);
X		}
X	}
X	dogroom = inroom(omx,omy);
X	uroom = inroom(u.ux,u.uy);
X	udist = dist(omx,omy);
X
X	/* maybe we tamed him while being swallowed --jgm */
X	if(!udist) return(0);
X
X	/* if we are carrying sth then we drop it (perhaps near @) */
X	/* Note: if apport == 1 then our behaviour is independent of udist */
X	if(mtmp->minvent){
X		if(!rn2(udist) || !rn2((int) edog->apport))
X		if(rn2(10) < edog->apport){
X			if (cansee(omx,omy) && flags.verbose)
X			    pline("%s drops %s.", Monnam(mtmp),
X					distant_name(mtmp->minvent, doname));
X			relobj(mtmp, (int) mtmp->minvis);
X			if(edog->apport > 1) edog->apport--;
X			edog->dropdist = udist;		/* hpscdi!jon */
X			edog->droptime = moves;
X		}
X	} else {
X		if((obj=level.objects[omx][omy]) && !index(nofetch,obj->olet)
X#ifdef MAIL
X			&& obj->otyp != SCR_MAIL
X#endif
X									){
X		    if((otyp = dogfood(mtmp, obj)) <= CADAVER){
X			nix = omx;
X			niy = omy;
X			dog_eat(mtmp, obj, otyp, nix, niy);
X			goto newdogpos;
X		    }
X		    if(can_carry(mtmp, obj))
X		    if(!obj->cursed)
X		    if(rn2(20) < edog->apport+3)
X		    if(rn2(udist) || !rn2((int) edog->apport)){
X			if (cansee(omx, omy) && flags.verbose)
X			    pline("%s picks up %s.", Monnam(mtmp),
X				distant_name(obj, doname));
X			freeobj(obj);
X			unpobj(obj);
X			/* if(levl[omx][omy].scrsym == obj->olet)
X				newsym(omx,omy); */
X			mpickobj(mtmp,obj);
X		    }
X		}
X	}
X
X	gtyp = UNDEF;	/* no goal as yet */
X	gx = gy = 0;	/* suppress 'used before set' message */
X#ifdef WALKIES
X	/* If he's on a leash, he's not going anywhere. */
X	if(mtmp->mleashed) {
X
X		gtyp = APPORT;
X		gx = u.ux;
X		gy = u.uy;
X	} else
X#endif
X	/* first we look for food, then objects */
X	    for(obj = fobj; obj; obj = obj->nobj) {
X		otyp = dogfood(mtmp, obj);
X		if(otyp > gtyp || otyp == UNDEF) continue;
X		if(inroom(obj->ox,obj->oy) != dogroom) continue;
X		if(otyp < MANFOOD &&
X		 (dogroom >= 0 || DDIST(obj->ox,obj->oy) < 10)) {
X			if(otyp < gtyp || (otyp == gtyp &&
X				DDIST(obj->ox,obj->oy) < DDIST(gx,gy))){
X				gx = obj->ox;
X				gy = obj->oy;
X				gtyp = otyp;
X			}
X		} else if(gtyp == UNDEF && dogroom >= 0 &&
X		   uroom == dogroom &&
X		   !mtmp->minvent && edog->apport > rn2(8) &&
X		   can_carry(mtmp,obj)){
X			gx = obj->ox;
X			gy = obj->oy;
X			gtyp = APPORT;
X		}
X	    }
X
X	if(gtyp == UNDEF ||
X	  (gtyp != DOGFOOD && gtyp != APPORT && moves < edog->hungrytime)){
X		if(dogroom < 0 || dogroom == uroom){
X			gx = u.ux;
X			gy = u.uy;
X		} else {
X			int tmp = rooms[dogroom].fdoor;
X			    cnt = rooms[dogroom].doorct;
X
X			gx = gy = FAR;	/* random, far away */
X			while(cnt--){
X			    if(dist(gx,gy) >
X				dist(doors[tmp].x, doors[tmp].y)){
X					gx = doors[tmp].x;
X					gy = doors[tmp].y;
X				}
X				tmp++;
X			}
X			/* here gx == FAR e.g. when dog is in a vault */
X			if(gx == FAR || (gx == omx && gy == omy)){
X				gx = u.ux;
X				gy = u.uy;
X			}
X		}
X		appr = (udist >= 9) ? 1 : (mtmp->mflee) ? -1 : 0;
X		if(after && udist <= 4 && gx == u.ux && gy == u.uy)
X			return(0);
X		if(udist > 1){
X			if(!IS_ROOM(levl[u.ux][u.uy].typ) || !rn2(4) ||
X			   whappr ||
X			   (mtmp->minvent && rn2((int) edog->apport)))
X				appr = 1;
X		}
X		/* if you have dog food it'll follow you more closely */
X		if(appr == 0){
X			obj = invent;
X			while(obj){
X				if(dogfood(mtmp, obj) == DOGFOOD) {
X					appr = 1;
X					break;
X				}
X				obj = obj->nobj;
X			}
X		}
X	} else	appr = 1;	/* gtyp != UNDEF */
X	if(mtmp->mconf) appr = 0;
X
X	if(gx == u.ux && gy == u.uy && (dogroom != uroom || dogroom < 0)) {
X	register coord *cp;
X		cp = gettrack(omx,omy);
X		if(cp){
X			gx = cp->x;
X			gy = cp->y;
X		}
X	}
X
X	nix = omx;
X	niy = omy;
X	
X	allowflags = ALLOW_M | ALLOW_TRAPS | ALLOW_SSM | ALLOW_SANCT;
X	if (passes_walls(mtmp->data)) allowflags |= (ALLOW_ROCK|ALLOW_WALL);
X	if (throws_rocks(mtmp->data)) allowflags |= ALLOW_ROCK;
X	if (!nohands(mtmp->data) && !verysmall(mtmp->data)) {
X		allowflags |= OPENDOOR;
X		if (m_carrying(mtmp, SKELETON_KEY)) allowflags |= BUSTDOOR;
X	}
X	if (is_giant(mtmp->data)) allowflags |= BUSTDOOR;
X	if (tunnels(mtmp->data) && !needspick(mtmp->data))
X		allowflags |= ALLOW_DIG;
X	cnt = mfndpos(mtmp, poss, info, allowflags);
X	if (allowflags & ALLOW_DIG) if(!mdig_tunnel(mtmp)) return(2);
X	chcnt = 0;
X	chi = -1;
X	for(i=0; i<cnt; i++){
X		nx = poss[i].x;
X		ny = poss[i].y;
X#ifdef WALKIES
X		/* if leashed, we drag him along. */
X		if(dist(nx, ny) > 4 && mtmp->mleashed) continue;
X#endif
X		if(info[i] & ALLOW_M) {
X			if(MON_AT(nx, ny)) {
X			    int stat;
X			    register struct monst *mtmp2 = m_at(nx,ny);
X
X			    if(mtmp2->m_lev >= mtmp->m_lev+2 ||
X			       (mtmp2->data->mlet == S_COCKATRICE &&
X				!resists_ston(mtmp->data)))
X				continue;
X			    if(after) return(0); /* hit only once each move */
X
X			    if((stat = mattackm(mtmp, mtmp2)) == 1 && rn2(4) &&
X			      mtmp2->mlstmv != moves &&
X			      mattackm(mtmp2, mtmp) == 2) return(2);
X			    if(stat == -1) return(2);
X			    return(0);
X			}
X		}
X
X		/* dog avoids traps */
X		/* but perhaps we have to pass a trap in order to follow @ */
X		if((info[i] & ALLOW_TRAPS) && (trap = t_at(nx,ny))){
X#ifdef WALKIES
X			if(!mtmp->mleashed) {
X#endif
X			    if(!trap->tseen && rn2(40)) continue;
X			    if(rn2(10)) continue;
X#ifdef WALKIES
X			}
X# ifdef SOUNDS
X			else if(flags.soundok)
X				whimper(mtmp);
X# endif
X#endif
X		}
X
X		/* dog eschews cursed objects */
X		/* but likes dog food */
X		for(obj = level.objects[nx][ny]; obj; obj = obj->nexthere) {
X		    if(obj->cursed && !mtmp->mleashed) goto nxti;
X		    if(obj->olet == FOOD_SYM &&
X			(otyp = dogfood(mtmp, obj)) < MANFOOD &&
X			(otyp < ACCFOOD || edog->hungrytime <= moves)){
X			/* Note: our dog likes the food so much that he
X			might eat it even when it conceals a cursed object */
X			nix = nx;
X			niy = ny;
X			chi = i;
X			dog_eat(mtmp, obj, otyp, nix, niy);
X			goto newdogpos;
X		    }
X		}
X
X		for(j=0; j<MTSZ && j<cnt-1; j++)
X			if(nx == mtmp->mtrack[j].x && ny == mtmp->mtrack[j].y)
X				if(rn2(4*(cnt-j))) goto nxti;
X
X		nearer = (GDIST(nx,ny) - GDIST(nix,niy)) * appr;
X		if((nearer == 0 && !rn2(++chcnt)) || nearer<0 ||
X			(nearer > 0 && !whappr &&
X				((omx == nix && omy == niy && !rn2(3))
X				|| !rn2(12))
X			)){
X			nix = nx;
X			niy = ny;
X			if(nearer < 0) chcnt = 0;
X			chi = i;
X		}
X	nxti:	;
X	}
Xnewdogpos:
X	if(nix != omx || niy != omy) {
X		if(info[chi] & ALLOW_U) {
X#ifdef WALKIES
X			if(mtmp->mleashed) { /* play it safe */
X				pline("%s breaks loose of %s leash!", 
X					Monnam(mtmp),
X					is_female(mtmp) ? "her" :
X					is_human(mtmp->data) ? "his" : "its");
X				m_unleash(mtmp);
X			}
X#endif
X			(void) mattacku(mtmp);
X			return(0);
X		}
X		remove_monster(omx, omy);
X		place_monster(mtmp, nix, niy);
X		for(j=MTSZ-1; j>0; j--) mtmp->mtrack[j] = mtmp->mtrack[j-1];
X		mtmp->mtrack[0].x = omx;
X		mtmp->mtrack[0].y = omy;
X	}
X#ifdef WALKIES
X	  /* an incredible kluge, but the only way to keep pooch near
X	   * after he spends time eating or in a trap, etc...
X	   */
X	  else  if(mtmp->mleashed && dist(omx, omy) > 4) {
X		coord cc;	
X
X		nx = sgn(omx - u.ux);
X		ny = sgn(omy - u.uy);
X		if(goodpos((cc.x = u.ux+nx), (cc.y = u.uy+ny), mtmp->data))
X			goto dognext;
X
X	 	i  = xytod(nx, ny);
X		for(j = (i + 7)%8; j < (i + 1)%8; j++) {
X			dtoxy(&cc, j);
X			if(goodpos(cc.x, cc.y, mtmp->data)) goto dognext;
X		}
X		for(j = (i + 6)%8; j < (i + 2)%8; j++) {
X			dtoxy(&cc, j);
X			if(goodpos(cc.x, cc.y, mtmp->data)) goto dognext;
X		}
X		cc.x = mtmp->mx;
X		cc.y = mtmp->my;
Xdognext:
X		remove_monster(mtmp->mx, mtmp->my);
X		place_monster(mtmp, cc.x, cc.y);
X		pmon(mtmp);
X		set_apparxy(mtmp);
X	}
X#endif
X	return(1);
X}
X
X#endif /* OVL0 */
END_OF_FILE
if test 10693 -ne `wc -c <'src/dogmove.c'`; then
    echo shar: \"'src/dogmove.c'\" unpacked with wrong size!
fi
# end of 'src/dogmove.c'
fi
if test -f 'src/monst.c2' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/monst.c2'\"
else
echo shar: Extracting \"'src/monst.c2'\" \(46079 characters\)
sed "s/^X//" >'src/monst.c2' <<'END_OF_FILE'
X/* horrible kludge alert:
X * This is a compiler-specific kludge to allow the compilation of monst.o in
X * two pieces, by defining first SPLITMON_1 and then SPLITMON_2. The
X * resulting assembler files (monst1.s and monst2.s) are then run through
X * sed to change local symbols, concatenated together, and assembled to
X * produce monst.o. THIS ONLY WORKS WITH THE ATARI GCC, and should only
X * be done if you don't have enough memory to compile monst.o the "normal"
X * way.  --ERS
X */
X
X#ifndef SPLITMON_1
X#ifdef SPLITMON_2
Xstruct permonst _mons2[] = {
X#endif
X/*	giant Humanoids */
X	{ "ettin", S_GIANT, 10, 12, 3, 0, 0, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
X	{ "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	   M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(RED) },
X	{ "stone giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	   M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(GRAY) },
X	{ "hill giant", S_GIANT, 8, 10, 6, 0, -2, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  70, 700, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(CYAN) },
X	{ "fire giant", S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  75, 750, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_FIRE_RES | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(YELLOW) },
X	{ "frost giant", S_GIANT, 10, 12, 3, 10, -3, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  75, 750, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_COLD_RES | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(WHITE) },
X	{ "titan", S_GIANT, 16, 18, -3, 70, 9, 1,
X	  { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC |
X	  M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
X	{ "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
X	  { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
X	    { AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK},
X	  70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
X	{ "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X	    { AT_HUGS, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK },
X	  70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
X/*	Invisible stalker	*/
X	{ "stalker", S_STALKER, 8, 12, 3, 0, 0, (G_GENO | 3),
X	  { { AT_CLAW, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_SEE_INVIS,
X	  M2_WANDER | M2_STALK | M2_HOSTILE | M2_STRONG, C(WHITE) },
X/*	Jabberwock */
X	{ "jabberwock", S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 10 }, { AT_BITE, AD_PHYS, 2, 10 },
X	    { AT_CLAW, AD_PHYS, 2, 10 }, { AT_CLAW, AD_PHYS, 2, 10 }, NO_ATTK },
X	  60, 600, 0, MS_BURBLE, MZ_LARGE, M1_ANIMAL | M1_COLLECT | M1_FLY,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BRIGHT|RED) },
X/*	Kops	*/
X#ifdef KOPS
X	{ "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) },
X	{ "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
X	{ "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(CYAN) },
X	{ "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
X#endif
X/*	Liches	 */
X	{ "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1),
X	  { { AT_TUCH, AD_COLD, 1, 10 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC,
X	  M2_UNDEAD | M2_HOSTILE, C(BROWN) },
X	{ "demilich", S_LICH, 14, 9, -2, 60, -12, (G_GENO | 1),
X	  { { AT_TUCH, AD_COLD, 3, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC,
X	  M2_UNDEAD | M2_HOSTILE, C(RED) },
X	{ "master lich", S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | 1),
X	  { { AT_TUCH, AD_COLD, 3, 6 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_REGEN |
X	  M1_MAGIC, M2_UNDEAD | M2_HOSTILE, C(HI_LORD) },
X/*	Mummies 	*/
X	{ "kobold mummy", S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_SMALL,
X	  M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(BROWN) },
X	{ "gnome mummy", S_MUMMY, 4, 10, 6, 20, -3, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_SMALL,
X	  M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(RED) },
X	{ "orc mummy", S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_GREEDY | M1_JEWELS,
X	  M2_UNDEAD | M2_HOSTILE | M2_ORC, C(GRAY) },
X	{ "elf mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_SLEE_RES,
X	  M2_UNDEAD | M2_HOSTILE | M2_ELF, C(GREEN) },
X	{ "human mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(GRAY) },
X	{ "ettin mummy", S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_POIS,
X	  M2_UNDEAD | M2_HOSTILE | M2_STRONG, C(BLUE) },
X	{ "giant mummy", S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_POIS | M1_JEWELS,
X	  M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) },
X/*	Nagas	*/
X	{ "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 100, 0, MS_MUMBLE, MZ_LARGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_FIRE_RES | M1_POIS_RES,
X	  M2_STRONG, C(RED) },
X	{ "black naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 100, 0, MS_MUMBLE, MZ_LARGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_STON_RES,
X	  M2_STRONG, C(BLACK) },
X	{ "golden naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 100, 0, MS_MUMBLE, MZ_LARGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
X	  M2_STRONG, C(HI_GOLD) },
X	{ "guardian naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 100, 0, MS_MUMBLE, MZ_LARGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
X	  M2_STRONG, C(GREEN) },
X	{ "red naga", S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, { AT_BREA, AD_FIRE, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_FIRE_RES,
X	  M2_STRONG | M2_EGGS, C(RED) },
X	{ "black naga", S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_SPIT, AD_ACID, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES |
X	  M1_ACID | M1_STON_RES,
X	  M2_STRONG | M2_EGGS, C(BLACK) },
X	{ "golden naga", S_NAGA, 10, 14, 2, 70, 5, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_MAGC, AD_SPEL, 4, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
X	  M2_STRONG | M2_EGGS, C(HI_GOLD) },
X	{ "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1),
X	  { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 },
X	    { AT_SPIT, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK },
X	  60, 400, 0, MS_MUMBLE, MZ_HUGE,
X	  M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_POIS,
X	  M2_STRONG | M2_EGGS, C(GREEN) },
X/*	Ogres	*/
X	{ "ogre", S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP | G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  60, 500, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_STRONG, C(BROWN) },
X	{ "ogre lord", S_OGRE, 7, 12, 3, 30, -5, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  70, 700, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_STRONG | M2_LORD, C(RED) },
X	{ "ogre king", S_OGRE, 7, 14, 4, 60, -7, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 3, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  70, 750, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_STRONG | M2_PRINCE, C(HI_LORD) },
X/*	Puddings */
X	{ "gray ooze", S_PUDDING, 3, 1, 8, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_RUST, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(GRAY) },
X	{ "brown pudding", S_PUDDING, 5, 3, 8, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DCAY, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
X	  M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
X	{ "black pudding", S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_RUST, 3, 8 }, { AT_NONE, AD_RUST, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_LARGE,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
X	  M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
X/*	Quantum Mechanics	*/
X	{ "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3),
X	  { { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) },
X/*	Rust Monster	*/
X	{ "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 },
X	    { AT_NONE, AD_RUST, 0, 0 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_METALLIVORE,
X	  C(BROWN) },
X/*	Snakes	*/
X	{ "garter snake", S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 60, 0, MS_HISS, MZ_TINY,
X	  M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY,
X	  M2_CARNIVORE | M2_EGGS, C(GREEN) },
X	{ "snake", S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 80, 0, MS_HISS, MZ_SMALL,
X	  M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
X	  M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
X	{ "water moccasin", S_SNAKE, 4, 15, 3, 0, 0,
X	  (G_GENO | G_NOGEN | G_LGROUP),
X	  { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_HISS, MZ_SMALL,
X	  M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
X	  M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
X	{ "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
X	  M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
X	  M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
X	{ "cobra", S_SNAKE, 6, 18, 2, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRST, 2, 4 }, { AT_SPIT, AD_BLND, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_MEDIUM,
X	  M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
X	  M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
X	{ "python", S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRST, 1, 4 }, { AT_HUGS, AD_WRAP, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_LARGE,
X	  M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
X/*	Trolls	*/
X	{ "troll", S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 4, 2 },
X	    { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_GRUNT, MZ_LARGE, M1_HUMANOID | M1_REGEN,
X	  M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(BROWN) },
X	{ "ice troll", S_TROLL, 9, 10, 2, 20, -3, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_COLD, 2, 6 },
X	    { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  40, 300, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_COLD_RES | M1_REGEN,
X	  M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(WHITE) },
X	{ "rock troll", S_TROLL, 9, 12, 0, 0, -3, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
X	    { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  40, 300, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_REGEN | M1_COLLECT,
X	  M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(CYAN) },
X	{ "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
X	    { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_GRUNT, MZ_LARGE,
X	  M1_SWIM | M1_HUMANOID | M1_REGEN,
X	  M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(BLUE) },
X#ifdef TOLKIEN
X	{ "Olog-hai", S_TROLL, 13, 12, -4, 0, -7, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
X	    { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_GRUNT, MZ_LARGE,
X	  M1_HUMANOID | M1_REGEN | M1_COLLECT,
X	  M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(HI_LORD) },
X#endif
X/*	Umber Hulk	*/
X	{ "umber hulk", S_UMBER, 9, 6, 2, 25, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X	    { AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_LARGE,
X	  M1_TUNNEL, M2_STRONG | M2_CARNIVORE, C(BROWN) },
X/*	Vampires	*/
X	{ "vampire", S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
X	  M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
X	{ "vampire lord", S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_BITE, AD_DRLI, 1, 8 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
X	  M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD,
X	  C(BLUE) },
X	{ "Vlad the Impaler", S_VAMPIRE, 14, 18, -3, 80, -10,
X	  (G_NOGEN | G_NOCORPSE | G_UNIQ),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
X	  M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY |
X	  M2_PRINCE, C(HI_LORD) },
X/*	Wraiths 	*/
X	{ "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    { AT_WEAP, AD_DRLI, 0, 0 }, NO_ATTK, NO_ATTK },
X	  30, 0, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_POIS_RES | M1_COLLECT,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE, C(GRAY) },
X	{ "wraith", S_WRAITH, 6, 12, 4, 15, -6, (G_GENO | 2),
X	  { { AT_TUCH, AD_DRLI, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 0, 0, MS_SILENT, MZ_HUMAN,
X	  M1_FLY | M1_HUMANOID | M1_POIS_RES,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BLACK) },
X#ifdef TOLKIEN
X	{ "Nazgul", S_WRAITH, 13, 12, 0, 25, -17, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_WEAP, AD_DRLI, 1, 4 }, { AT_BREA, AD_SLEE, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 0, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS_RES | M1_COLLECT,
X	  M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE, C(HI_LORD) },
X#endif
X/*	Xorn	*/
X	{ "xorn", S_XORN, 8, 9,-2, 20, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 4, 6 },
X	    NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_WALLWALK | M1_THICK_HIDE | M1_FIRE_RES | M1_COLD_RES |
X	  M1_STON_RES, M2_HOSTILE | M2_STRONG, C(BROWN) },
X/*	Yeti	*/
X	{ "yeti", S_YETI, 5, 15, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  70, 700, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
X/*	Zombies 	*/
X	{ "kobold zombie", S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_POIS |
X	  M1_POIS_RES, M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BROWN) },
X	{ "gnome zombie", S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_POIS |
X	  M1_POIS_RES, M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BROWN) },
X	{ "orc zombie", S_ZOMBIE, 2, 6, 9, 0, -3,
X	  (G_GENO | G_SGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS_RES | M1_GREEDY |
X	  M1_JEWELS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, C(GRAY) },
X	{ "elf zombie", S_ZOMBIE, 3, 6, 9, 0, -3,
X	  (G_GENO | G_SGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS_RES | M1_SLEE_RES,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, C(GREEN) },
X	{ "human zombie", S_ZOMBIE, 4, 6, 8, 0, -3,
X	  (G_GENO | G_SGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS_RES,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE, C(HI_DOMESTIC) },
X	{ "ettin zombie", S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 10 }, { AT_CLAW, AD_PHYS, 1, 10 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_POIS_RES,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) },
X	{ "giant zombie", S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
X	  M1_HUMANOID | M1_POIS_RES | M1_JEWELS,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) },
X/*	Golems	*/
X#ifdef GOLEMS
X	{ "straw golem", S_GOLEM, 3, 12, 10, 0, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 10, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
X	{ "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_HUGS, AD_PHYS, 6, 1 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 20, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(BROWN) },
X	{ "leather golem", S_GOLEM, 6, 6, 6, 0, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 40, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(HI_LEATHER) },
X	{ "wood golem", S_GOLEM, 7, 3, 4, 0, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE, M2_HOSTILE, C(HI_WOOD) },
X	{ "flesh golem", S_GOLEM, 9, 8, 9, 30, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
X	    NO_ATTK, NO_ATTK, NO_ATTK},
X	  60, 600, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES,
X	  M2_HOSTILE | M2_STRONG, C(RED) },
X	{ "clay golem", S_GOLEM, 11, 7, 7, 40, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 3, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  75, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE,
X	  M2_HOSTILE | M2_STRONG, C(BROWN) },
X	{ "stone golem", S_GOLEM, 14, 6, 5, 50, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  90, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE | M1_STON_RES,
X	  M2_HOSTILE | M2_STRONG, C(GRAY) },
X	{ "iron golem", S_GOLEM, 18, 6, 3, 60, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_BREA, AD_DRST, 4, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  100, 0, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_THICK_HIDE | M1_POIS | M1_FIRE_RES | M1_COLD_RES |
X	  M1_ELEC_RES | M1_COLLECT,
X	  M2_HOSTILE | M2_STRONG, C(HI_METAL) },
X#endif /* GOLEMS */
X/*	Humans		*/
X	{ "human", S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, /* for corpses */
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_DOMESTIC) },
X	{ "wererat", S_HUMAN, 2, 12, 7, 10, -7, 1,
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_SILENT, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
X	  M2_WERE | M2_HOSTILE | M2_HUMAN, C(BROWN) },
X	{ "werejackal", S_HUMAN, 2, 12, 7, 10, -7, 1,
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_BARK, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
X	  M2_WERE | M2_HOSTILE | M2_HUMAN, C(RED) },
X	{ "werewolf", S_HUMAN, 5, 12, 6, 20, -7, 1,
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_BARK, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
X	  M2_WERE | M2_HOSTILE | M2_HUMAN, C(ORANGE_COLORED) },
X#ifdef TOLKIEN
X	{ "Woodland-elf", S_HUMAN, 4, 12, 5, 10, 5, (G_GENO | G_SGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
X	  M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GREEN) },
X	{ "Green-elf", S_HUMAN, 5, 12, 5, 10, 6, (G_GENO | G_SGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
X	  M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GREEN+BRIGHT) },
X	{ "Grey-elf", S_HUMAN, 6, 12, 5, 10, 7, (G_GENO | G_SGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
X	  M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GRAY) },
X#endif
X	{ "elf-lord", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
X	  M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) },
X	{ "Elvenking", S_HUMAN, 9, 12, 5, 25, 10, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4},
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_HUMANOID | M1_COLLECT | M1_SLEE_RES,
X	  M2_ELF | M2_STRONG | M2_PRINCE, C(HI_LORD) },
X	{ "nurse", S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3),
X	  { { AT_CLAW, AD_HEAL, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_NURSE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_POIS_RES,
X	  M2_HUMAN | M2_HOSTILE, C(HI_DOMESTIC) },
X	{ "shopkeeper", S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN,
X	  { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, NO_ATTK,
X	    NO_ATTK, NO_ATTK }, 45, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT,
X	  M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_DOMESTIC) },
X	{ "guard", S_HUMAN, 12, 12, -1, 40, 10, G_NOGEN,
X	  { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG, C(BLUE) },
X#ifdef ORACLE
X	{ "oracle", S_HUMAN, 12, 0, 0, 50, 0, G_NOGEN | G_UNIQ,
X	  { { AT_NONE, AD_MAGM, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_ORACLE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID,
X	  M2_HUMAN | M2_PEACEFUL | M2_FEM, C(HI_ZAP) },
X#endif
X#if defined(ALTARS) && defined(THEOLOGY)
X	{ "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
X	  { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
X	    { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
X	  45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT,
X	  M2_HUMAN | M2_PEACEFUL, C(WHITE) },
X	{ "temple priestess", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
X	  { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
X	    { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
X	  45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT,
X	  M2_HUMAN | M2_PEACEFUL | M2_FEM, C(WHITE) },
X#endif
X#ifdef ARMY
X	{ "unarmored soldier", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN,
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_SOLDIER, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BROWN) },
X	{ "soldier", S_HUMAN, 6, 4, 3, 0, -2, (G_SGROUP | G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_SOLDIER, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(GRAY) },
X	{ "sergeant", S_HUMAN, 8, 4, 0, 5, -3, (G_SGROUP | G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_SOLDIER, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(RED) },
X	{ "lieutenant", S_HUMAN, 10, 4, -2, 15, -4, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_WEAP, AD_PHYS, 3, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(GREEN) },
X	{ "captain", S_HUMAN, 12, 4, -3, 15, -5, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) },
X#endif
X#ifdef MEDUSA
X	{ "Medusa", S_HUMAN, 20, 12, 2, 50, -15, G_NOGEN | G_UNIQ,
X	  { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_GAZE, AD_STON, 0, 0 },
X	    { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK },
X	  45, 400, 0, MS_HISS, MZ_LARGE,
X	  M1_NOPOLY | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_POIS_RES |
X	  M1_STON_RES, M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEM,
X	  C(BRIGHT|GREEN) },
X#endif
X	{ "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, -20, G_NOGEN,
X	  { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_CUSS, MZ_HUMAN,
X	  M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES |
X	  M1_REGEN | M1_SEE_INVIS | M1_TPORT | M1_TPORT_CONTROL | M1_MAGIC,
X	  M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PRINCE,
X	  C(HI_LORD) },
X#ifdef CHARON
X	{ "Charon", S_HUMAN, 76, 18, -5, 120, 0,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_TUCH, AD_PLYS, 1, 8 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_FERRY, MZ_HUMAN,
X	  M1_NOPOLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES |
X	  M1_GREEDY | M1_COLLECT, M2_HUMAN | M2_PEACEFUL | M2_PNAME,
X	  C(WHITE) },
X#endif
X/*	Ghost		*/
X	{ "ghost", S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN),
X	  { { AT_TUCH, AD_PHYS, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 0, PL_NSIZ, MS_SILENT, MZ_HUMAN,
X	  M1_NOPOLY | M1_FLY | M1_WALLWALK | M1_HUMANOID | M1_POIS_RES,
X	  M2_UNDEAD | M2_STALK | M2_HOSTILE, C(GRAY) },
X/*	(major) Demons	*/
X	{ "water demon", S_DEMON, 8, 12,-4, 30, -7, (G_NOCORPSE | G_NOGEN),
X	  { { AT_WEAP, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_HUMAN,
X	  M1_SWIM | M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BLUE) },
X#ifndef INFERNO /* generic type */
X	{ "demon", S_DEMON, 10, 12,-4, 30, -7, (G_NOCORPSE | 3),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  45, 450, 0, MS_CUSS, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X#else	/* used in hell for bigger, badder demons! */
X	/* standard demons & devils */
X	{ "horned devil", S_DEMON, 6, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_BITE, AD_PHYS, 2, 3 }, { AT_STNG, AD_PHYS, 1, 3 }, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_HUMAN,
X	  M1_POIS | M1_FIRE_RES | M1_THICK_HIDE,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BROWN) },
X#ifdef SEDUCE
X	{ "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
X	  { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
X	  45, 450, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) },
X	{ "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
X	  { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
X	  45, 450, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
X#else
X	{ "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
X	  45, 450, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) },
X	{ "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
X	  45, 450, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
X#endif
X	{ "erinyes", S_DEMON, 7, 12, 2, 30, 10,
X	  (G_HELL | G_NOCORPSE | G_SGROUP | 2),
X	  { { AT_WEAP, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_HUMAN,
X	  M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_FEM,
X	  C(RED) },
X	{ "marilith", S_DEMON, 7, 12, -6, 80, -12, (G_HELL | G_NOCORPSE | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    { AT_WEAP, AD_PHYS, 2, 4 }, }, 45, 450, 0, MS_CUSS, MZ_LARGE,
X	  M1_HUMANOID | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT |
X	  M1_SLITHY,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(RED) },
X	{ "barbed devil", S_DEMON, 8, 12, 0, 35, 8,
X	  (G_HELL | G_NOCORPSE | G_SGROUP | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
X	    { AT_STNG, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_HUMAN,
X	  M1_POIS | M1_FIRE_RES | M1_THICK_HIDE,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X	{ "vrock", S_DEMON, 8, 12, 0, 50, -9,
X	  (G_HELL | G_NOCORPSE | G_SGROUP | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
X	    { AT_BITE, AD_PHYS, 1, 6 }, },
X	  45, 450, 0, MS_SILENT, MZ_LARGE, M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X	{ "hezrou", S_DEMON, 9, 6, -2, 55, -10,
X	  (G_HELL | G_NOCORPSE | G_SGROUP | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK }, 45, 450, 0,
X	  MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X	{ "bone devil", S_DEMON, 9, 15, -1, 40, -9,
X	  (G_HELL | G_NOCORPSE | G_SGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_STNG, AD_DRST, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
X	  M1_POIS | M1_FIRE_RES | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
X	{ "nalfeshnee", S_DEMON, 11, 9, -1, 65, -11, (G_HELL | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_BITE, AD_PHYS, 2, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_LARGE,
X	  M1_HUMANOID | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X	{ "ice devil", S_DEMON, 11, 6, -4, 55, -12, (G_HELL | G_NOCORPSE | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_COLD, 3, 4 }, NO_ATTK },
X	  45, 450, 0, MS_SILENT, MZ_LARGE,
X	  M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLD_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(WHITE) },
X	{ "pit fiend", S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2),
X	  { { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 },
X	    { AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK },
X	  45, 450, 0, MS_GROWL, MZ_LARGE,
X	  M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
X	{ "balrog", S_DEMON, 16, 5, -2, 75, -14, (G_HELL | G_NOCORPSE | 1),
X	  { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
X	  M1_FLY | M1_SEE_INVIS | M1_COLLECT | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
X	/* Named demon lords & princes plus Arch-Devils */
X	{ "Juiblex", S_DEMON, 50, 3, -7, 65, -15,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_ENGL, AD_DISE, 4, 10 }, { AT_SPIT, AD_ACID, 3, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 250, 0, MS_GURGLE, MZ_LARGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_ACID | M1_POIS | M1_FIRE_RES |
X	  M1_AMORPHOUS,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD,
X	  C(BRIGHT|GREEN) },
X	{ "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 },
X	    { AT_WEAP, AD_PLYS, 1, 6 }, { AT_MAGC, AD_MAGM, 2, 6 }, NO_ATTK },
X	  50, 500, 0, MS_ORC, MZ_LARGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
X	  M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD,
X	  C(HI_LORD) },
X	{ "Orcus", S_DEMON, 66, 9, -6, 85, -20,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_WEAP, AD_PHYS, 3, 6 },
X	    { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X	    { AT_STNG, AD_DRST, 2, 4 }, }, 50, 500, 0, MS_ORC, MZ_HUGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
X	  M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
X	  C(HI_LORD) },
X	{ "Geryon", S_DEMON, 72, 3, -3, 75, 15,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 },
X	    { AT_STNG, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_BRIBE, MZ_HUGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
X	  M1_SLITHY,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, C(HI_LORD) },
X	{ "Dispater", S_DEMON, 78, 15, -2, 80, 15,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_WEAP, AD_PHYS, 4, 6 }, { AT_MAGC, AD_SPEL, 6, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_HUMAN,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
X	  M1_HUMANOID | M1_COLLECT,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, C(HI_LORD) },
X	{ "Baalzebub", S_DEMON, 89, 9, -5, 85, 20,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_BITE, AD_DRST, 2, 6 }, { AT_GAZE, AD_STUN, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_LARGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
X	  C(HI_LORD) },
X	{ "Asmodeus", S_DEMON, 105, 12, -7, 90, 20,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_CLAW, AD_PHYS, 4, 4 }, { AT_MAGC, AD_COLD, 6, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_HUGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS |
X	  M1_FIRE_RES | M1_COLD_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY |
X	  M2_PRINCE, C(HI_LORD) },
X	{ "Demogorgon", S_DEMON, 106, 15, -8, 95, -20,
X	  (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
X	  { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_STNG, AD_DRLI, 1, 4 },
X	    { AT_CLAW, AD_DISE, 1, 6 }, { AT_CLAW, AD_DISE, 1, 6 },
X	    NO_ATTK }, 50, 500, 0, MS_GROWL, MZ_HUGE,
X	  M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS |
X	  M1_FIRE_RES,
X	  M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
X	  C(HI_LORD) },
X#endif
X#ifdef MAIL
X	{ "mail daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE),
X	  { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0,
X	  MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS |
X	  M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES,
X	  M2_STALK | M2_PEACEFUL, C(BRIGHT|BLUE) },
X/* Neither rain nor sleet nor gloom of night shall stay this courier... */
X#endif
X	{ "djinni", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
X	  { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_DJINNI, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_COLLECT, M2_STALK,
X	  C(YELLOW) },
X/*	sea monsters		*/
X	{ "giant eel", S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
X	  M1_SWIM | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(CYAN) },
X	{ "electric eel", S_EEL, 7, 10, -3, 0, 0, (G_GENO | G_NOGEN),
X	  { { AT_BITE, AD_ELEC, 4, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
X	  NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
X	  M1_SWIM | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY |
X	  M1_ELEC_RES, M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
X	{ "kraken", S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN),
X	  { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
X	    { AT_HUGS, AD_WRAP, 2, 6 }, { AT_BITE, AD_PHYS, 5, 4 }, NO_ATTK },
X	  100, 1000, 0, MS_SILENT, MZ_HUGE,
X	  M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X/*	lizards 	*/
X	{ "newt", S_LIZARD, 0, 6, 8, 0, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, MZ_TINY, M1_SWIM | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
X	{ "gecko", S_LIZARD, 1, 6, 8, 0, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
X	{ "iguana", S_LIZARD, 2, 6, 7, 0, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "baby crocodile", S_LIZARD, 3, 6, 7, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_SWIM,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "lizard", S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_STON_RES,
X	  M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
X	{ "chameleon", S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 4, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "crocodile", S_LIZARD, 6, 9, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 1, 12 }, NO_ATTK,
X	  NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SILENT, MZ_LARGE,
X	  M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_SWIM,
X	  M2_STRONG | M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
X
X/*	character classes */
X	{ "archeologist", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_TUNNEL | M1_NEEDPICK,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "barbarian", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "caveman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(RED) },
X	{ "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG | M2_CARNIVORE | M2_FEM, C(HI_DOMESTIC) },
X	/* Note: players who are elves still get normal carrying capacity,
X	 * even though this is strictly speaking inconsistent.
X	 */
X	{ "elf", S_HUMAN, 1, 12, 10, 2, 3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_SLEE_RES | M1_SEE_INVIS,
X	  M2_ELF | M2_STRONG, C(HI_DOMESTIC) },
X	{ "healer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "knight", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "priest", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "priestess", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) },
X	{ "rogue", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_GREEDY,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "samurai", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "tourist", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X	{ "valkyrie", S_HUMAN, 1, 10, 10, 1, -1, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_COLD_RES,
X	  M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) },
X	{ "wizard", S_HUMAN, 1, 10, 10, 3, 0, G_NOGEN,
X	  { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  45, 400, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_MAGIC,
X	  M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
X
X/*	ARRAY TERMINATOR	*/
X	{ "", 0, 0, 0, 0, 0, 0, 0,
X	  { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, 0, 0, 0, 0, C(0) }
X};
X#endif /* !SPLITMON_1 */
X#endif /* !MAKEDEFS_C */
END_OF_FILE
if test 46079 -ne `wc -c <'src/monst.c2'`; then
    echo shar: \"'src/monst.c2'\" unpacked with wrong size!
fi
# end of 'src/monst.c2'
fi
echo shar: End of archive 7 \(of 56\).
cp /dev/null ark7isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 56 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0