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