[comp.sources.games] v10i059: 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 59
Archive-name: nethack3p9/Part14
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 14 (of 56)."
# Contents:  src/lock.c src/monst.c1
# Wrapped by billr@saab on Wed Jul 11 17:11:09 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'src/lock.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/lock.c'\"
else
echo shar: Extracting \"'src/lock.c'\" \(17068 characters\)
sed "s/^X//" >'src/lock.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)lock.c	3.0	88/10/22
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#include	"hack.h"
X
XSTATIC_PTR int NDECL(picklock);
XSTATIC_PTR int NDECL(forcelock);
X
XSTATIC_VAR struct xlock_s {
X	int	door_or_box, picktyp;
X	struct rm  *door;
X	struct obj *box;
X	int chance, usedtime;
X} NEARDATA xlock;
X
X#ifdef OVLB
X
Xstatic boolean FDECL(obstructed,(int,int));
X
XSTATIC_PTR
Xint
Xpicklock() {	/* try to open/close a lock */
X
X	if(!xlock.door_or_box) {	/* box */
X
X	    if((xlock.box->ox != u.ux) || (xlock.box->oy != u.uy)) {
X		return((xlock.usedtime = 0));		/* you or it moved */
X	    }
X	} else {		/* door */
X	    if(xlock.door != &(levl[u.ux+u.dx][u.uy+u.dy])) {
X		return((xlock.usedtime = 0));		/* you moved */
X	    }
X	    switch (xlock.door->doormask) {
X		case D_NODOOR:
X		    pline("This doorway has no door.");
X		    return((xlock.usedtime = 0));
X		case D_ISOPEN:
X		    pline("Picking the lock of an open door is pointless.");
X		    return((xlock.usedtime = 0));
X		case D_BROKEN:
X		    pline("This door is broken.");
X		    return((xlock.usedtime = 0));
X	    }
X	}
X
X	if(xlock.usedtime++ >= 50
X#ifdef POLYSELF
X	   || nohands(uasmon)
X#endif
X	   ) {
X	    You("give up your attempt to %s the lock.",
X		  (xlock.door_or_box ? !(xlock.door->doormask & D_LOCKED) :
X		   !xlock.box->olocked) ? "lock" :
X		  ((xlock.picktyp == LOCK_PICK) ? "pick" : "open" ));
X
X	    return((xlock.usedtime = 0));
X	}
X
X	if(rn2(100) > xlock.chance) return(1);		/* still busy */
X
X	if(xlock.door_or_box) {
X	    You("succeed in %sing the lock.",
X		  !(xlock.door->doormask & D_LOCKED) ? "lock" :
X		  ((xlock.picktyp == LOCK_PICK) ? "pick" : "open" ));
X	    if(xlock.door->doormask & D_TRAPPED) {
X		    b_trapped("door");
X		    xlock.door->doormask = D_NODOOR;
X		    mnewsym(u.ux+u.dx, u.uy+u.dy);
X		    prl(u.ux+u.dx, u.uy+u.dy);
X	    } else if(xlock.door->doormask == D_LOCKED)
X		xlock.door->doormask = D_CLOSED;
X	    else xlock.door->doormask = D_LOCKED;
X	} else {
X	    You("succeed in %sing the lock.",
X		  (!xlock.box->olocked) ? "lock" :
X		  (xlock.picktyp == LOCK_PICK) ? "pick" : "open" );
X	    xlock.box->olocked = !xlock.box->olocked;
X	    if(xlock.box->otrapped)	
X		(void) chest_trap(xlock.box, FINGER);
X	}
X	return((xlock.usedtime = 0));
X}
X
XSTATIC_PTR
Xint
Xforcelock() {	/* try to force a locked chest */
X
X	register struct obj *otmp, *otmp2;
X	register struct obj *probj = fcobj;  /* initialize to make lint happy */
X
X	if((xlock.box->ox != u.ux) || (xlock.box->oy != u.uy))
X		return((xlock.usedtime = 0));		/* you or it moved */
X
X	if(xlock.usedtime++ >= 50 || !uwep
X#ifdef POLYSELF
X	   || nohands(uasmon)
X#endif
X	   ) {
X	    You("give up your attempt to force the lock.");
X
X	    return((xlock.usedtime = 0));
X	}
X
X	if(xlock.picktyp) {	/* blade */
X
X	    if(rn2(1000-uwep->spe) > 992 && !uwep->cursed) {
X		/* for a +0 weapon, probability that it survives an unsuccessful
X		 * attempt to force the lock is (.992)^50 = .67
X		 */
X		pline("%sour %s broke!",
X		      (uwep->quan > 1) ? "One of y" : "Y", xname(uwep));
X		useup(uwep);
X		You("give up your attempt to force the lock.");
X		return((xlock.usedtime = 0));
X	    }
X	} else			/* blunt */
X	    wake_nearby();	/* due to hammering on the container */
X
X	if(rn2(100) > xlock.chance) return(1);		/* still busy */
X
X	You("succeed in forcing the lock.");
X	xlock.box->olocked = !xlock.box->olocked;
X	if(!xlock.picktyp && !rn2(3)) {
X
X	    pline("In fact, you've totally destroyed the %s.",
X		  xname(xlock.box));
X	    for(otmp = fcobj; otmp; otmp = otmp2) {
X
X		otmp2 = otmp->nobj;
X		if(otmp->cobj == xlock.box) {
X
X		    /* unlink it from the "contained" list */
X		    if(otmp == fcobj) fcobj = otmp2;
X		    else	      probj->nobj = otmp2;
X
X		    if(!rn2(3) || otmp->olet == POTION_SYM)
X			free((genericptr_t) otmp);
X		    else { /* spill it onto the floor */
X			otmp->nobj = xlock.box->nobj;
X			xlock.box->nobj = otmp;
X			otmp->cobj = (struct obj *)0;
X			place_object(otmp, u.ux, u.uy);
X			stackobj(otmp);
X		    }
X		} else probj = otmp;
X	    }
X	    delobj(xlock.box);
X	}
X	return((xlock.usedtime = 0));
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
Xvoid
Xreset_pick() { xlock.usedtime = 0; }
X
X#endif /* OVL0 */
X#ifdef OVLB
X
Xint
Xpick_lock(pick) /* pick a lock with a given object */
X	register struct	obj	*pick;
X{
X	register int x, y, picktyp, c, ch;
X	register struct rm	*door;
X	register struct obj	*otmp;
X
X#ifdef __GNULINT__
X	ch = 0;		/* GCC myopia */
X#endif
X	picktyp = pick->otyp;
X	if(xlock.usedtime && picktyp == xlock.picktyp) {
X
X	    You("resume your attempt to %s the lock.",
X		  (xlock.door_or_box ? !(xlock.door->doormask & D_LOCKED) :
X		   !xlock.box->olocked) ? "lock" :
X		  ((xlock.picktyp == LOCK_PICK) ? "pick" : "open" ));
X
X	    set_occupation(picklock,
X			   (picktyp == LOCK_PICK) ? "picking the lock" :
X						    "opening the lock",  0);
X	    return(1);
X	}
X
X#ifdef POLYSELF
X	if(nohands(uasmon)) {
X		You("can't hold a %s - you have no hands!", xname(pick));
X		return(0);
X	}
X#endif
X	if((picktyp != LOCK_PICK && picktyp != CREDIT_CARD &&
X	    picktyp != SKELETON_KEY && picktyp != KEY)) {
X		impossible("picking lock with object %d?", picktyp);
X		return(0);
X	}
X	if(!getdir(1)) return(0);
X
X	x = u.ux + u.dx;
X	y = u.uy + u.dy;
X	if((x == u.ux) && (y == u.uy)) { /* pick the lock on a container */
X	    c = 'n';			/* in case there are no boxes here */
X	    for(otmp = level.objects[x][y]; otmp; otmp = otmp->nexthere)
X		if(Is_box(otmp) &&
X			       /* credit cards are only good for unlocking */
X			       (picktyp != CREDIT_CARD || otmp->olocked)) {
X		    pline("There is %s here, %s the lock? ",
X		    doname(otmp), (!otmp->olocked) ? "close" :
X		    ((picktyp == LOCK_PICK) ? "pick" : "open" ));
X
X		    c = ynq();
X		    if(c == 'q') return(0);
X		    if(c == 'n') continue;
X
X		    if(picktyp == KEY && otmp->spe != pick->spe) {
X			    pline("The %s won't fit the lock.",xname(pick));
X			    return(1);
X		    }
X		    switch(picktyp) {
X			case CREDIT_CARD:
X			    ch = ACURR(A_DEX)+(20*(pl_character[0] == 'R'));
X			    break;
X			case LOCK_PICK:
X			    ch = 4*ACURR(A_DEX)+(25*(pl_character[0] == 'R'));
X			    break;
X			case SKELETON_KEY:
X			    ch = 75 + ACURR(A_DEX);
X			    break;
X			case KEY:
X			    ch = 1000;
X			    break;
X			default:	ch = 0;
X		    }
X		    if(otmp->cursed) ch /= 2;
X
X		    xlock.door_or_box = 0;
X		    xlock.picktyp = picktyp;
X		    xlock.box = otmp;
X		    break;
X		}
X	    if(c != 'y')
X		return(0);		/* decided against all boxes */
X	} else {			/* pick the lock in a door */
X	    struct monst *mtmp;
X
X	    door = &levl[x][y];
X	    if ((mtmp = m_at(x,y)) && canseemon(mtmp) && !mtmp->mimic) {
X		if (picktyp == CREDIT_CARD &&
X#ifdef ORACLE
X		    (mtmp->isshk || mtmp->data == &mons[PM_ORACLE]))
X#else
X		    mtmp->isshk)
X#endif
X		    verbalize("No checks, no credit, no problem.");
X		else
X		    kludge("I don't think %s would appreciate that.", mon_nam(mtmp));
X		return(0);
X	    }
X	    if(!IS_DOOR(door->typ)) {
X#ifdef STRONGHOLD
X		if (is_drawbridge_wall(x,y) >= 0)
X		    You("%s no lock on the drawbridge.",
X				Blind ? "feel" : "see");
X		else
X#endif
X		You("%s no door there.",
X				Blind ? "feel" : "see");
X		return(0);
X	    }
X	    switch (door->doormask) {
X		case D_NODOOR:
X		    pline("This doorway has no door.");
X		    return(0);
X		case D_ISOPEN:
X		    pline("Picking the lock of an open door is pointless.");
X		    return(0);
X		case D_BROKEN:
X		    pline("This door is broken.");
X		    return(0);
X		default:
X		    /* credit cards are only good for unlocking */
X		    if(picktyp == CREDIT_CARD && !(door->doormask & D_LOCKED)) {
X			You("can't lock a door with a credit card.");
X			return(0);
X		    }
X
X		    pline("%sock it? ", (door->doormask & D_LOCKED) ? "Unl" : "L" );
X
X		    c = yn();
X		    if(c == 'n') return(0);
X
X		    switch(picktyp) {
X			case CREDIT_CARD:
X			    ch = 2*ACURR(A_DEX)+(20*(pl_character[0] == 'R'));
X			    break;
X			case LOCK_PICK:
X			    ch = 3*ACURR(A_DEX)+(30*(pl_character[0] == 'R'));
X			    break;
X			case SKELETON_KEY:
X			    ch = 70 + ACURR(A_DEX);
X			    break;
X			case KEY:
X			    pline("The %s won't fit the door.", xname(pick));
X			    return(1);
X			default:    ch = 0;
X		    }
X		    xlock.door_or_box = 1;
X		    xlock.door = door;
X	    }
X	}
X	flags.move = 0;
X	xlock.chance = ch;
X	xlock.picktyp = picktyp;
X	xlock.usedtime = 0;
X	set_occupation(picklock,
X		       (picktyp == LOCK_PICK) ? "picking the lock" :
X						"opening the lock",  0);
X	return(1);
X}
X
Xint
Xdoforce() {		/* try to force a chest with your weapon */
X
X	register struct obj *otmp;
X	register int c, picktyp;
X
X	if(!uwep ||	/* proper type test */
X	   (uwep->olet != WEAPON_SYM && uwep->olet != ROCK_SYM &&
X						uwep->otyp != PICK_AXE) ||
X	   (uwep->otyp < DAGGER) ||
X	   (uwep->otyp > VOULGE && uwep->olet != ROCK_SYM &&
X						uwep->otyp != PICK_AXE)
X	  ) {
X	    You("can't force anything without a %sweapon.",
X		  (uwep) ? "proper " : "");
X	    return(0);
X	}
X
X	picktyp = (uwep->otyp >= DAGGER && uwep->otyp <= KATANA);
X	if(xlock.usedtime && xlock.box && picktyp == xlock.picktyp) {
X	    You("resume your attempt to force the lock.");
X	    set_occupation(forcelock, "forcing the lock", 0);
X	    return(1);
X	}
X
X	/* A lock is made only for the honest man, the thief will break it. */
X	xlock.box = (struct obj *)0;
X	for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp->nexthere)
X	    if(Is_box(otmp)) {
X		if(otmp->olocked)
X		    pline("There is %s here, force the lock? ", doname(otmp));
X		else {
X		    pline("There is a %s here, but it's already unlocked.",
X			  xname(otmp));
X		    continue;
X		}
X
X		c = ynq();
X		if(c == 'q') return(0);
X		if(c == 'n') continue;
X
X		if(picktyp)
X		    You("force your %s into a crack and pry.", xname(uwep));
X		else
X		    You("start bashing it with your %s.", xname(uwep));
X		xlock.box = otmp;
X		xlock.chance = objects[otmp->otyp].wldam * 2;
X		xlock.picktyp = picktyp;
X		xlock.usedtime = 0;
X		break;
X	    }
X
X	if(xlock.box)	set_occupation(forcelock, "forcing the lock", 0);
X	else		You("decide not to force the issue.");
X	return(1);
X}
X
Xint
Xdoopen() {		/* try to open a door */
X	register int x, y;
X	register struct rm *door;
X	struct monst *mtmp;
X
X	if(!getdir(1)) return(0);
X
X	x = u.ux + u.dx;
X	y = u.uy + u.dy;
X	if((x == u.ux) && (y == u.uy)) return(0);
X
X	if((mtmp = m_at(x,y)) && mtmp->mimic &&
X				mtmp->m_ap_type == M_AP_FURNITURE &&
X				mtmp->mappearance == S_cdoor &&
X				!Protection_from_shape_changers) {
X		stumble_onto_mimic(mtmp);
X		return(1);
X	}
X
X	door = &levl[x][y];
X
X	if(!IS_DOOR(door->typ)) {
X#ifdef STRONGHOLD
X		if (is_db_wall(x,y)) {
X		    pline("There is no obvious way to open the drawbridge.");
X		    return(0);
X		}
X#endif
X		You("%s no door there.",
X				Blind ? "feel" : "see");
X		return(0);
X	}
X
X	if(!(door->doormask & D_CLOSED)) {
X	  switch(door->doormask) {
X	     case D_BROKEN: pline("This door is broken."); break;
X	     case D_NODOOR: pline("This doorway has no door."); break;
X	     case D_ISOPEN: pline("This door is already open."); break;
X	     default:	    pline("This door is locked."); break;
X	  }
X	  return(0);
X	}
X
X#ifdef POLYSELF
X	if(verysmall(uasmon)) {
X	    pline("You're too small to pull the door open.");
X	    return(0);
X	}
X#endif
X	/* door is known to be CLOSED */
X	if (rnl(20) < (ACURR(A_STR)+ACURR(A_DEX)+ACURR(A_CON))/3) {
X	    pline("The door opens.");
X	    if(door->doormask & D_TRAPPED) {
X		b_trapped("door");
X		door->doormask = D_NODOOR;
X	    } else
X		door->doormask = D_ISOPEN;
X	    mnewsym(x,y);
X	    prl(x,y);
X	} else {
X	    pline("The door resists!");
X	}
X
X	return(1);
X}
X
Xstatic
Xboolean
Xobstructed(x,y)
Xregister int x, y;
X{
X	if(MON_AT(x, y)) {
X		if (m_at(x,y)->mimic) goto obj;	  
X		pline("%s stands in the way!", Blind ?
X			"Some creature" : Monnam(m_at(x,y)));
X		return(TRUE);
X	}
X	if (OBJ_AT(x, y) || levl[x][y].gmask) {
Xobj:
X		pline("Something's in the way.");
X		return(TRUE);
X	}
X	return(FALSE);
X}
X
Xint
Xdoclose() {		/* try to close a door */
X	register int x, y;
X	register struct rm *door;
X	struct monst *mtmp;
X
X	if(!getdir(1)) return(0);
X
X	x = u.ux + u.dx;
X	y = u.uy + u.dy;
X	if((x == u.ux) && (y == u.uy)) {
X		You("are in the way!");
X		return(1);
X	}
X
X	if((mtmp = m_at(x,y)) && mtmp->mimic &&
X				mtmp->m_ap_type == M_AP_FURNITURE && 
X				mtmp->mappearance == S_cdoor &&
X				!Protection_from_shape_changers) {
X		stumble_onto_mimic(mtmp);
X		return(1);
X	}
X
X	door = &levl[x][y];
X
X	if(!IS_DOOR(door->typ)) {
X#ifdef STRONGHOLD
X		if (door->typ == DRAWBRIDGE_DOWN)
X		    pline("There is no obvious way to close the drawbridge.");
X		else
X#endif
X		You("%s no door there.",
X				Blind ? "feel" : "see");
X		return(0);
X	}
X
X	if(door->doormask == D_NODOOR) {
X	    pline("This doorway has no door.");
X	    return(0);
X	}
X
X	if(obstructed(x, y)) return(0);
X
X	if(door->doormask == D_BROKEN) {
X	    pline("This door is broken.");
X	    return(0);
X	}
X
X	if(door->doormask & (D_CLOSED | D_LOCKED)) {
X	    pline("This door is already closed.");
X	    return(0);
X	}
X
X	if(door->doormask == D_ISOPEN) {
X#ifdef POLYSELF
X	    if(verysmall(uasmon)) {
X		 pline("You're too small to push the door closed.");
X		 return(0);
X 	    }
X#endif
X	    if (rn2(25) < (ACURR(A_STR)+ACURR(A_DEX)+ACURR(A_CON))/3) {
X		pline("The door closes.");
X		door->doormask = D_CLOSED;
X		mnewsym(x,y);
X		prl(x,y);
X	    }
X	    else pline("The door resists!");
X	}
X
X	return(1);
X}
X
Xint
Xboxlock(obj, otmp)	/* box obj was hit with spell effect otmp */
X			/* returns 1 if something happened */
X	register struct obj *obj, *otmp;	/* obj *is* a box */
X{
X	register boolean res = 0;
X
X	switch(otmp->otyp) {
X	    case WAN_LOCKING:
X#ifdef SPELLS
X	    case SPE_WIZARD_LOCK:
X#endif
X			if(!obj->olocked) {
X				pline("Klunk!");
X				obj->olocked = !(obj->olocked);
X				res = 1;
X			} else	res = 0;
X			break;
X	    case WAN_OPENING:
X#ifdef SPELLS
X	    case SPE_KNOCK:
X#endif
X			if(obj->olocked) {
X				pline("Klick!");
X				obj->olocked = !(obj->olocked);
X				res = 1;
X			} else	res = 0;
X			break;
X	}
X	return(res);
X}
X
Xint
Xdoorlock(otmp,x,y)	/* door was hit with spell effect otmp */
X	register struct obj *otmp;
X	int x, y;
X{
X	register struct rm *door = &levl[x][y];
X	boolean res = 1;
X
X	if(door->typ == SDOOR) {
X	    if(otmp->otyp == WAN_OPENING
X#ifdef SPELLS
X	       || otmp->otyp == SPE_KNOCK
X#endif /* SPELLS /**/
X	      ) {
X		door->typ = DOOR;
X		door->doormask = D_CLOSED | (door->doormask & D_TRAPPED);
X		if(cansee(x,y)) pline("A section of the wall opens up!");
X		mnewsym(x,y);
X		return(1);
X	    } else
X		return(0);
X	}
X
X#ifdef STRONGHOLD
X	/* make sure it isn't an open drawbridge */
X	if (is_maze_lev && find_drawbridge(&x,&y)) {
X	    if(otmp->otyp == WAN_OPENING
X#ifdef SPELLS
X	       || otmp->otyp == SPE_KNOCK
X#endif /* SPELLS /**/
X	      )
X		    (void) open_drawbridge(x,y);
X	    else
X		    (void) close_drawbridge(x,y);
X	    return 1;
X	}
X#endif
X
X	switch(otmp->otyp) {
X	    case WAN_LOCKING:
X#ifdef SPELLS
X	    case SPE_WIZARD_LOCK:
X#endif
X		if(obstructed(x,y)) return 0;
X		if (cansee(x,y))
X		switch (door->doormask & ~D_TRAPPED) {
X			case D_CLOSED:
X				pline("The door locks!");
X				break;
X			case D_ISOPEN:
X				pline("The door swings shut, and locks!");
X				break;
X			case D_BROKEN:
X				pline("The broken door reassembles and locks!");
X				break;
X			case D_NODOOR:
X	pline("A cloud of dust springs up and assembles itself into a door!");
X				break;
X			default: res = 0;
X		}
X		door->doormask = D_LOCKED | (door->doormask & D_TRAPPED);
X		mnewsym(x,y);
X		if(cansee(x,y)) prl(x,y);
X		break;
X	    case WAN_OPENING:
X#ifdef SPELLS
X	    case SPE_KNOCK:
X#endif
X		if(door->doormask & D_LOCKED) {
X		    door->doormask = D_CLOSED | (door->doormask & D_TRAPPED);
X		    if(cansee(x,y)) pline("The door unlocks!");
X		} else res = 0;
X		break;
X	    case WAN_STRIKING:
X#ifdef SPELLS
X	    case SPE_FORCE_BOLT:
X#endif
X		if(door->doormask & (D_LOCKED | D_CLOSED)) {
X		    if(door->doormask & D_TRAPPED) {
X			if (MON_AT(x, y))
X			    (void) mb_trapped(m_at(x,y));
X			else if (flags.verbose)
X			    if (cansee(x,y))
X			       pline("KABOOM!!	You see a door explode.");
X			    else if (flags.soundok)
X			       You("hear a distant explosion.");
X			door->doormask = D_NODOOR;
X			mnewsym(x,y);
X			if (cansee(x,y)) prl(x,y);
X			break;
X		    }
X		    door->doormask = D_BROKEN;
X		    if (flags.verbose)
X			if (cansee(x,y))
X			    pline("The door crashes open!");
X			else if (flags.soundok)
X			    You("hear a crashing sound.");
X		    mnewsym(x,y);
X		    if (cansee(x,y)) prl(x,y);
X		} else res = 0;
X		break;
X	    default:	impossible("magic (%d) attempted on door.", otmp->otyp);
X	}
X	return res;
X}
X
X#ifdef STUPID_CPP	/* otherwise these functions are macros in obj.h */
Xint
XIs_container(otmp) struct obj * otmp; {
X	return(otmp->otyp >= ICE_BOX && otmp->otyp <= BAG_OF_TRICKS);
X}
X
Xint
XIs_box(otmp) struct obj * otmp; {
X	return(otmp->otyp == LARGE_BOX || otmp->otyp == CHEST);
X}
X
Xint
XIs_mbag(otmp) struct obj * otmp; {
X	return(otmp->otyp == BAG_OF_HOLDING || otmp->otyp == BAG_OF_TRICKS);
X}
X
Xint
Xis_sword(otmp) struct obj * otmp; {
X	return(otmp->otyp >= SHORT_SWORD && otmp->otyp <= KATANA);
X}
X
Xint
Xbimanual(otmp) struct obj * otmp; {
X	return((otmp->olet == WEAPON_SYM || otmp->otyp == UNICORN_HORN)
X		&& objects[otmp->otyp].oc_bimanual);
X}
X#endif /* STUPID_CPP */
X
X#endif /* OVLB */
END_OF_FILE
if test 17068 -ne `wc -c <'src/lock.c'`; then
    echo shar: \"'src/lock.c'\" unpacked with wrong size!
fi
# end of 'src/lock.c'
fi
if test -f 'src/monst.c1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/monst.c1'\"
else
echo shar: Extracting \"'src/monst.c1'\" \(39701 characters\)
sed "s/^X//" >'src/monst.c1' <<'END_OF_FILE'
X/*	SCCS Id: @(#)monst.c	3.0	89/11/21
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X#include "config.h"
X#include "permonst.h"
X#include "monsym.h"
X#include "eshk.h"
X#include "vault.h"
X#include "epri.h"
X
X#define NO_ATTK 	{ 0, 0, 0, 0 }
X
X#ifdef C
X#undef C
X#endif
X#ifdef TEXTCOLOR
X#include "color.h"
X#define C(color)	color
X#define HI_DOMESTIC	WHITE		/* use for player + friendlies */
X#define HI_LORD 	MAGENTA
X#else
X#define C(color)
X#endif
X
X#ifndef SPLITMON_2
Xstruct permonst NEARDATA playermon = {		/* used by weapons bonus code */
X	"player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
X	{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	45, 400, PL_NSIZ, MS_SILENT, MZ_HUMAN,
X	M1_NEEDPICK | M1_HUMANOID | M1_COLLECT,
X	M2_HUMAN | M2_STRONG, C(HI_DOMESTIC)
X},	NEARDATA *uasmon = &playermon;
X#endif /* SPLITMON_2 */
X
X/*
X *	Rule #1:	monsters of a given class are contiguous in the
X *			mons[] array.
X *
X *	Rule #2:	monsters of a given class are presented in ascending
X *			order of strength.
X *
X *	Rule #3:	monster frequency is included in the geno mask;
X *			the frequency can be from 0 to 7.  0's will also
X *			be skipped during generation.
X *
X * Guidelines for color assignment:
X *
X *	* Use the same color for all `growth stages' of a monster (ex.
X *	  little dog/big dog, baby naga/full-grown naga.
X *
X *	* Use colors given in names wherever possible. If the class has `real'
X *	  members with strong color associations, use those.
X *
X *	* Favor `cool' colors for cold-resistent monsters, `warm' ones for
X *	  fire-resistent ones.
X *
X *	* Try to reserve purple (magenta) for powerful `ruler' monsters (queen
X *	  bee, kobold lord, &c.).
X *
X *	* Subject to all these constraints, try to use color to make as many
X *	  distinctions as the / command (that is, within a monster letter
X *	  distinct names should map to distinct colors).
X *
X * The aim in assigning colors is to be consistent enough so a player can
X * become `intuitive' about them, deducing some or all of these rules
X * unconsciously. Use your common sense.
X */
X
X#if defined(SMALLDATA) && !defined(MAKEDEFS_C)
X		/* if it's for SMALLDATA, say so, right? (KL) */
Xstruct permonst *mons;	   /* for SMALLDATA - mons data stored in NetHack app */
X#else
X#ifndef SPLITMON_2
Xstruct permonst NEARDATA mons[] = {
X/*	ants	*/
X	{ "giant ant",	S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
X	{ "soldier ant", S_ANT, 3, 18, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_DRST, 3, 4 },
X	  NO_ATTK, NO_ATTK, NO_ATTK }, 2, 20, 0, MS_SILENT, MZ_TINY,
X	  M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
X	{ "fire ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_FIRE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
X	{ "giant beetle", S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_POIS |
X	  M1_POIS_RES, M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
X	{ "killer bee", S_ANT, 1, 18, -1, 0, 0, (G_GENO | G_LGROUP | 2),
X	  { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
X	{ "queen bee", S_ANT, 9, 24, -4, 0, 0, (G_GENO | G_NOGEN),
X	  { { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_PRINCE, C(HI_LORD) },
X/*	blobs	*/
X	{ "acid blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_ACID, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, MZ_TINY,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_SLEE_RES | M1_STON_RES |
X	  M1_ACID, M2_WANDER, C(GREEN) },
X	{ "quivering blob", S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X	  M2_WANDER | M2_HOSTILE, C(WHITE) },
X	{ "gelatinous cube", S_BLOB, 6, 6, 8, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PLYS, 2, 4 }, { AT_NONE, AD_PLYS, 1, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_SILENT, MZ_LARGE,
X	  M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES |
X	  M1_SLEE_RES, M2_WANDER | M2_HOSTILE | M2_OMNIVORE, C(CYAN) },
X/*	cockatrice	*/
X	{ "cockatrice", S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
X	    { AT_NONE, AD_STON, 0, 0 }, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_HISS, MZ_SMALL,
X	  M1_ANIMAL | M1_NOHANDS | M1_POIS_RES | M1_STON_RES,
X	  M2_HOSTILE | M2_EGGS, C(YELLOW) },
X/*	dog	*/
X	{ "little dog", S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_BARK, MZ_SMALL,
X	  M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X	{ "dog", S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1 ,6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_BARK, MZ_MEDIUM,
X	  M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X	{ "large dog", S_DOG, 6, 15, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, MZ_MEDIUM,
X	  M1_ANIMAL | M1_NOHANDS, M2_STRONG | M2_CARNIVORE | M2_DOMESTIC,
X	  C(HI_DOMESTIC) },
X	{ "jackal", S_DOG, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, MZ_SMALL,
X	  M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "jackalwere", S_DOG, 2, 12, 7, 10, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, MZ_SMALL,
X	  M1_NOPOLY | M1_NOHANDS | M1_POIS | M1_REGEN,
X	  M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "wolf", S_DOG, 5, 12, 4, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, MZ_SMALL,
X	  M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "wolfwere", S_DOG, 5, 12, 4, 20, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, MZ_MEDIUM,
X	  M1_NOPOLY | M1_NOHANDS | M1_POIS | M1_REGEN,
X	  M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "winter wolf", S_DOG, 7, 12, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_COLD, 2, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK, },
X	  30, 300, 0, MS_BARK, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(CYAN) },
X	{ "warg", S_DOG, 7, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "hell hound pup", S_DOG, 7, 12, 4, 20, -5,
X	  (G_HELL | G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_FIRE, 2, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_BARK, MZ_SMALL, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_CARNIVORE, C(RED) },
X	{ "hell hound", S_DOG, 12, 14, 2, 20, 0, (G_HELL | G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BREA, AD_FIRE, 3, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK, },
X	  30, 300, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X#ifdef CHARON
X	{ "Cerberus", S_DOG, 12, 10, 2, 20, -7, (G_HELL | G_UNIQ | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BITE, AD_PHYS, 3, 6 },
X	  { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X	  50, 350, 0, MS_BARK, MZ_LARGE,
X	  M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_PNAME, C(RED) },
X#endif
X/*	eyes	*/
X	{ "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5),
X	  { { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, MZ_SMALL,
X	  M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BLUE) },
X	{ "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
X	  { { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, MZ_SMALL,
X	  M1_FLY | M1_NOLIMBS | M1_COLD_RES, M2_HOSTILE, C(WHITE) },
X/*	felines 	*/
X	{ "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X	{ "housecat", S_FELINE, 4, 16, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X	  M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X	{ "large cat", S_FELINE, 6, 15, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X	  M2_STRONG | M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X	{ "jaguar", S_FELINE, 4, 15, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "tiger", S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
X	    { AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
X/*	gremlins	*/
X	{ "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
X	  10, 30, 0, MS_LAUGH, MZ_SMALL,
X	  M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, C(GREEN) },
X/*	humanoids	*/
X#ifdef TOLKIEN
X	{ "hobbit", S_HUMANOID, 1, 9, 7, 0, 6, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_HUMANOID, MZ_SMALL,
X	  M1_HUMANOID | M1_COLLECT, 0, C(GREEN) },
X#endif
X	{ "bugbear", S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_COLLECT,
X	  M2_STRONG, C(BROWN) },
X	{ "dwarf", S_HUMANOID,	2, 6, 4, 10, 4, (G_GENO | 3),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X	  M1_COLLECT, M2_DWARF | M2_STRONG, C(RED) },
X	{ "dwarf lord", S_HUMANOID,  4, 6, 4, 10, 5, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X	  M1_COLLECT, M2_DWARF | M2_STRONG | M2_LORD, C(BLUE) },
X	{ "dwarf king", S_HUMANOID,  6, 6, 4, 20, 6, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X	  M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X	  M1_COLLECT, M2_DWARF | M2_STRONG | M2_PRINCE, C(HI_LORD) },
X/*	imps & other minor demons/devils */
X	{ "manes", S_IMP, 1, 3, 7, 0, -7, (G_GENO | G_LGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_CUSS, MZ_SMALL, M1_POIS, M2_STALK, C(RED) },
X	{ "homunculus", S_IMP, 2, 12, 6, 10, -7, (G_GENO | 2),
X	  { { AT_BITE, AD_SLEE, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_TINY,
X	  M1_FLY | M1_POIS | M1_POIS_RES | M1_SLEE_RES, M2_STALK, C(GREEN) },
X	{ "lemure", S_IMP, 3, 3, 7, 0, -7,
X	  (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_MEDIUM, M1_POIS | M1_SLEE_RES | M1_REGEN,
X	  M2_HOSTILE | M2_WANDER | M2_STALK, C(BROWN) },
X	{ "imp", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_CUSS, MZ_TINY, M1_REGEN, M2_WANDER | M2_STALK, C(RED) },
X	{ "quasit", S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2),
X	  { { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_SMALL,
X	  M1_POIS_RES | M1_REGEN, M2_STALK, C(BLUE) },
X	{ "tengu", S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3),
X	  { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_SQAWK, MZ_SMALL,
X	  M1_POIS_RES | M1_TPORT | M1_TPORT_CONTROL, M2_STALK, C(CYAN) },
X/*	jellies 	*/
X	{ "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(BLUE) },
X	{ "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
X	  M2_HOSTILE | M2_OMNIVORE, C(GREEN) },
X	{ "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_ACID, 3, 6 }, { AT_NONE, AD_ACID, 0, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
X	  M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
X/*	kobolds 	*/
X	{ "kobold", S_KOBOLD,  0, 6, 7, 0, -2, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X	  M2_HOSTILE, C(BROWN) },
X	{ "large kobold", S_KOBOLD,  1, 6, 6, 0, -3, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X	  M2_HOSTILE, C(RED) },
X	{ "kobold lord", S_KOBOLD,  2, 6, 5, 0, -4, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X	  M2_HOSTILE | M2_LORD, C(HI_LORD) },
X	{ "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_MAGIC,
X	  M2_HOSTILE, C(HI_ZAP) },
X/*	leprechauns	*/
X	{ "leprechaun", S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4),
X	  { { AT_CLAW, AD_SGLD, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_LAUGH, MZ_TINY, M1_HUMANOID | M1_TPORT | M1_GREEDY,
X	  M2_HOSTILE, C(GREEN) },
X/*	mimics	*/
X	{ "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "large mimic", S_MIMIC, 8, 3, 7, 10, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_STCK, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_SILENT, MZ_LARGE,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X	{ "giant mimic", S_MIMIC, 9, 3, 7, 20, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_STCK, 3, 6 }, { AT_CLAW, AD_STCK, 3, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  60, 500, 0, MS_SILENT, MZ_LARGE,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(HI_LORD) },
X/*	nymphs	*/
X	{ "wood nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_TPORT | M1_COLLECT, M2_HOSTILE | M2_FEM, C(GREEN) },
X	{ "water nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_SWIM,
X	  M2_HOSTILE | M2_FEM, C(BLUE) },
X	{ "mountain nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X	  M1_HUMANOID | M1_TPORT | M1_COLLECT, M2_HOSTILE | M2_FEM, C(BROWN) },
X/*	orcs	*/
X	{ "goblin", S_ORC,  0, 6, 6, 0, -3, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, MZ_SMALL,
X	  M1_HUMANOID | M1_COLLECT, M2_ORC, C(GRAY) },
X	{ "hobgoblin", S_ORC,  1, 9, 6, 0, -4, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG, C(BROWN) },
X	/* "orc" for zombie corpses only; they don't get created at random */
X	{ "orc", S_ORC,  1, 9, 6, 0, -3, (G_GENO | G_NOGEN | G_LGROUP),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(RED) },
X	{ "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(YELLOW) },
X#ifdef TOLKIEN
X	{ "Mordor orc", S_ORC, 3, 5, 6, 0, -5, (G_GENO | G_LGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(BLUE) },
X	{ "Uruk-hai", S_ORC, 3, 7, 5, 0, -4, (G_GENO | G_LGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(BLACK) },
X#endif
X	{ "orc shaman", S_ORC, 3, 9, 5, 10, -5, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(HI_ZAP) },
X	{ "orc-captain", S_ORC, 5, 5, 4, 0, -5, (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_ORC, MZ_HUMAN,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
X/*	 piercers	*/
X	{ "rock piercer", S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, MZ_SMALL,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
X	{ "iron piercer", S_PIERCER, 5, 1, 0, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 300, 0, MS_SILENT, MZ_MEDIUM,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_CARNIVORE, C(CYAN) },
X/*	quadrupeds (generic)	*/
X	{ "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
X#ifdef TOLKIEN
X	{ "mumakil", S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 4, 12 }, { AT_BITE, AD_PHYS, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  70, 500, 0, MS_SILENT, MZ_LARGE,
X	  M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X#endif
X	{ "leocrotta", S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_BITE, AD_PHYS, 2, 6 },
X	    { AT_CLAW, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_IMITATE, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X	{ "wumpus", S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(CYAN) },
X	{ "titanothere", S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  65, 650, 0, MS_SILENT, MZ_LARGE,
X	  M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X	{ "baluchitherium", S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 5, 4 }, { AT_CLAW, AD_PHYS, 5, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  80, 800, 0, MS_SILENT, MZ_LARGE,
X	  M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_HERBIVORE, C(GRAY) },
X/*	rodents 	*/
X	{ "sewer rat",	S_RODENT, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1),
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(BROWN) },
X	{ "giant rat",	S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "rabid rat", S_RODENT, 2, 12, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRCO, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 10, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_POIS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "ratwere", S_RODENT, 2, 12, 6, 10, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, MZ_TINY, M1_NOHANDS | M1_NOPOLY |
X	  M1_POIS | M1_REGEN, M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X	{ "rock mole", S_RODENT, 3, 3, 0, 20, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, MZ_SMALL,
X	  M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_COLLECT, M2_HOSTILE | M2_METALLIVORE, C(GRAY) },
X/*	spiders and scorpions	*/
X	{ "cave spider", S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 50, 0, MS_SILENT, MZ_TINY,
X	  M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(GRAY) },
X	{ "scorpion", S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
X	    { AT_STNG, AD_DRST, 1, 4 }, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_SMALL,
X	  M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
X	  M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
X	{ "giant spider", S_SPIDER, 5, 15, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, MZ_LARGE,
X	  M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
X/*	trappers, lurkers, &c.	*/
X	{ "lurker above", S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_DGST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 350, 0, MS_SILENT, MZ_HUGE,
X	  M1_HIDE | M1_FLY | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_STALK | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X	{ "trapper", S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_DGST, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 350, 0, MS_SILENT, MZ_HUGE,
X	  M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X	  M2_HOSTILE | M2_STALK | M2_STRONG | M2_CARNIVORE, C(GREEN) },
X/*	unicorns	*/
X	{ "white unicorn", S_UNICORN, 4, 24, 2, 70, 7, (G_GENO | 2),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE, C(WHITE) },
X	{ "gray unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE, C(GRAY) },
X	{ "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE, C(BLACK) },
X/*	vortices	*/
X	{ "fog cloud",	S_VORTEX, 3,  1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X	  M2_HOSTILE, C(GRAY) },
X	{ "dust vortex", S_VORTEX, 4, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_BLND, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES, M2_HOSTILE, C(BROWN) },
X	{ "energy vortex", S_VORTEX, 6, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_ELEC, 1, 6 }, { AT_ENGL, AD_DREN, 0, 0 },
X	    { AT_NONE, AD_ELEC, 0, 4 }, NO_ATTK, NO_ATTK },
X	  20, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_ELEC_RES,
X	  M2_HOSTILE, C(HI_ZAP) },
X	{ "ice vortex", S_VORTEX, 5, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_COLD, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES,
X	  M2_HOSTILE, C(CYAN) },
X	{ "steam vortex", S_VORTEX, 7, 22, 2, 30, 0,
X	  (G_HELL | G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_FIRE, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_HOSTILE, C(BLUE) },
X	{ "fire vortex", S_VORTEX, 8, 22, 2, 30, 0,
X	  (G_HELL | G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_FIRE, 1, 10 }, { AT_NONE, AD_FIRE, 0, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_HOSTILE, C(YELLOW) },
X/*	worms	*/
X#ifdef WORM
X	{ "baby long worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X	  M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X#endif
X	{ "baby purple worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X	  M2_HOSTILE | M2_CARNIVORE, C(MAGENTA) },
X#ifdef WORM
X	{ "long worm", S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, MZ_GIGANTIC,
X	  M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(BROWN) },
X#endif
X	{ "purple worm", S_WORM, 15, 9, 6, 20, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 2, 8 }, { AT_ENGL, AD_DGST, 1, 10 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_GIGANTIC,
X	  M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(MAGENTA) },
X/*	xan, &c.	*/
X	{ "grid bug", S_XAN, 0, 12, 9, 0, 0,
X	  (G_GENO | G_SGROUP | G_NOCORPSE | 3),
X	  { { AT_BITE, AD_ELEC, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
X	  C(MAGENTA) },
X	{ "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
X	  { { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_BUZZ, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE, C(RED) },
X/*	yellow light	*/
X	{ "yellow light", S_YLIGHT,  3, 15, 0, 0, 0, (G_GENO | 4),
X	  { { AT_EXPL, AD_BLND, 10, 20 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, MZ_SMALL,
X	  M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BRIGHT|YELLOW) },
X/*	zruty	*/
X	{ "zruty", S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X	    { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X	  60, 600, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
X/*	Apes	*/
X	{ "ape", S_APE, 4, 12, 6, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X	  M2_STRONG | M2_CARNIVORE, C(BROWN) },
X	{ "carnivorous ape", S_APE, 5, 12, 6, 0, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
X/*	Bats	*/
X	{ "bat", S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_CARNIVORE, C(BROWN) },
X	{ "giant bat", S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, MZ_MEDIUM, M1_FLY | M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_HOSTILE | M2_CARNIVORE, C(RED) },
X	{ "vampire bat", S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRST, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 20, 0, MS_SQEEK, MZ_TINY,
X	  M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_REGEN,
X	  M2_UNDEAD | M2_HOSTILE, C(BLACK) },
X/*	Centaurs	*/
X	{ "plains centaur", S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK},
X	  50, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X	  C(BROWN)  },
X	{ "forest centaur", S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK},
X	  55, 600, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X	  C(GREEN)  },
X	{ "mountain centaur", S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X	  55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X	  C(CYAN) },
X/*	Dragons 	*/
X	{ "baby gray dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X	{ "baby red dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X	{ "baby white dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
X	{ "baby blue dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_ELEC_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BLUE) },
X	{ "baby green dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GREEN) },
X	{ "baby orange dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_SLEE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(ORANGE_COLORED) },
X	{ "baby black dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BLACK) },
X	{ "baby yellow dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR, MZ_HUGE,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_ACID | M1_STON_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(YELLOW) },
X	{ "gray dragon", S_DRAGON, 10, 9, -1, 20, 4, (G_GENO | 1),
X	  { { AT_BREA, AD_MAGM, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS, C(GRAY) },
X	{ "red dragon", S_DRAGON, 10, 9, -1, 20, -4, (G_GENO | 1),
X	  { { AT_BREA, AD_FIRE, 6, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS, C(RED) },
X	{ "orange dragon", S_DRAGON, 10, 9, -1, 20, 5, (G_GENO | 1),
X	  { { AT_BREA, AD_SLEE, 4, 25 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_SLEE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(ORANGE_COLORED) },
X	{ "white dragon", S_DRAGON, 10, 9, -1, 20, -5, (G_GENO | 1),
X	  { { AT_BREA, AD_COLD, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(WHITE) },
X	{ "black dragon", S_DRAGON, 10, 9, -1, 20, -6, (G_GENO | 1),
X	  { { AT_BREA, AD_DISN, 4, 10 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(BLACK) },
X	{ "blue dragon", S_DRAGON, 10, 9, -1, 20, -7, (G_GENO | 1),
X	  { { AT_BREA, AD_ELEC, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_ELEC_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(BLUE) },
X	{ "green dragon", S_DRAGON, 10, 9, -1, 20, 6, (G_GENO | 1),
X	  { { AT_BREA, AD_DRST, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(GREEN) },
X	{ "yellow dragon", S_DRAGON, 10, 9, -1, 20, 7, (G_GENO | 1),
X	  { { AT_BREA, AD_ACID, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X	  M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X	  M1_MAGIC | M1_SEE_INVIS | M1_ACID | M1_STON_RES,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X	  C(YELLOW) },
X/*	Elementals	*/
X	{ "air elemental", S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES, M2_STRONG, C(CYAN) },
X	{ "fire elemental", S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_FIRE, 3, 6 }, { AT_NONE, AD_FIRE, 0, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_STRONG, C(YELLOW) },
X	{ "earth elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_WALLWALK | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_THICK_HIDE |
X	  M1_STON_RES,
X	  M2_STRONG, C(BROWN) },
X	{ "water elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 5, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 0, 0, MS_SILENT, MZ_HUGE,
X	  M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_SWIM, M2_STRONG, C(BLUE) },
X/*	Fungi	*/
X	{ "violet fungus", S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PHYS, 1, 4 }, { AT_TUCH, AD_STCK, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(MAGENTA) },
X	{ "brown mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
X	{ "yellow mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_STUN, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
X	{ "green mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_ACID, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_ACID | M1_STON_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(GREEN) },
X	{ "red mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_FIRE, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, MZ_SMALL,
X	  M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_POIS_RES,
X	  M2_HOSTILE | M2_OMNIVORE, C(RED) },
X/*	Gnomes	*/
X	{ "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, MZ_SMALL,
X	  M1_HUMANOID | M1_COLLECT, 0, C(BROWN) },
X	{ "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 120, 0, MS_ORC, MZ_SMALL,
X	  M1_HUMANOID | M1_COLLECT, M2_LORD, C(BLUE) },
X	{ "gnome king", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 150, 0, MS_ORC, MZ_SMALL,
X	  M1_HUMANOID | M1_COLLECT, M2_PRINCE, C(HI_LORD) },
X	{ "gnomish wizard", S_GNOME, 3, 10, 4, 10, 0, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 120, 0, MS_ORC, MZ_SMALL,
X	  M1_HUMANOID | M1_MAGIC, 0, C(HI_ZAP) },
X#ifdef SPLITMON_1
X};
X#endif
X#endif /* !SPLITMON_2 */
X
END_OF_FILE
if test 39701 -ne `wc -c <'src/monst.c1'`; then
    echo shar: \"'src/monst.c1'\" unpacked with wrong size!
fi
# end of 'src/monst.c1'
fi
echo shar: End of archive 14 \(of 56\).
cp /dev/null ark14isdone
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