home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!news.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v16i048: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Part40/108
- Message-ID: <4342@master.CNA.TEK.COM>
- Date: 30 Jan 93 01:12:44 GMT
- Sender: news@master.CNA.TEK.COM
- Lines: 1462
- Approved: billr@saab.CNA.TEK.COM
- Xref: uunet comp.sources.games:1597
-
- Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
- Posting-number: Volume 16, Issue 48
- Archive-name: nethack31/Part40
- Supersedes: nethack3p9: Volume 10, Issue 46-102
- Environment: Amiga, Atari, Mac, MS-DOS, OS2, Unix, VMS, X11
-
-
-
- #! /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 40 (of 108)."
- # Contents: src/ball.c src/monst.c2
- # Wrapped by billr@saab on Wed Jan 27 16:09:02 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'src/ball.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/ball.c'\"
- else
- echo shar: Extracting \"'src/ball.c'\" \(15527 characters\)
- sed "s/^X//" >'src/ball.c' <<'END_OF_FILE'
- X/* SCCS Id: @(#)ball.c 3.1 92/11/04 */
- X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
- X/* NetHack may be freely redistributed. See license for details. */
- X
- X/* Ball & Chain =============================================================*/
- X
- X#include "hack.h"
- X
- Xstatic void NDECL(litter);
- X
- Xvoid
- Xballfall()
- X{
- X boolean gets_hit;
- X
- X gets_hit = (((uball->ox != u.ux) || (uball->oy != u.uy)) &&
- X ((uwep == uball)? FALSE : (boolean)rn2(5)));
- X if (carried(uball)) {
- X pline("Startled, you drop the iron ball.");
- X if (uwep == uball)
- X setuwep((struct obj *)0);
- X if (uwep != uball)
- X freeinv(uball);
- X }
- X if(gets_hit){
- X int dmg = rn1(7,25);
- X pline("The iron ball falls on your %s.",
- X body_part(HEAD));
- X if (uarmh)
- X if(is_metallic(uarmh)) {
- X pline("Fortunately, you are wearing a hard helmet.");
- X dmg = 3;
- X } else if (flags.verbose)
- X Your("%s does not protect you.", xname(uarmh));
- X losehp(dmg, "Crunched in the head by an iron ball",
- X NO_KILLER_PREFIX);
- X }
- X}
- X
- X/*
- X * To make this work, we have to mess with the hero's mind. The rules for
- X * ball&chain are:
- X *
- X * 1. If the hero can see them, fine.
- X * 2. If the hero can't see either, it isn't seen.
- X * 3. If either is felt it is seen.
- X * 4. If either is felt and moved, it disappears.
- X *
- X * If the hero can see, then when a move is done, the ball and chain are
- X * first picked up, the positions under them are corrected, then they
- X * are moved after the hero moves. Not too bad
- X *
- X * If the hero is blind, then she can "feel" the ball and/or chain at any
- X * time. However, when the hero moves, the felt ball and/or chain become
- X * unfelt and whatever was felt "under" the ball&chain appears. Pretty
- X * nifty, but it requires that the ball&chain "remember" what was under
- X * them --- i.e. they pick-up glyphs when they are felt and drop them when
- X * moved (and felt). When swallowed, the ball&chain are pulled completely
- X * off of the dungeon, but are still on the object chain. They are placed
- X * under the hero when she is expelled.
- X */
- X
- X/*
- X * Place the ball & chain under the hero. Make sure that the ball & chain
- X * variables are set (actually only needed when blind, but what the heck).
- X * It is assumed that when this is called, the ball and chain are NOT
- X * attached to the object list.
- X */
- Xvoid
- Xplacebc()
- X{
- X if (!uchain || !uball) {
- X impossible("Where are your ball and chain?");
- X return;
- X }
- X
- X uchain->nobj = fobj; /* put chain on object list */
- X fobj = uchain;
- X
- X if (carried(uball)) /* the ball is carried */
- X u.bc_order = 0; /* chain & ball at different pos */
- X else { /* the ball is NOT carried */
- X uball->nobj = fobj; /* put ball on object list */
- X fobj = uball;
- X
- X place_object(uball, u.ux, u.uy);
- X u.bc_order = 1; /* chain on top */
- X }
- X
- X place_object(uchain, u.ux, u.uy);
- X
- X u.bglyph = u.cglyph = levl[u.ux][u.uy].glyph; /* pick up glyph */
- X
- X newsym(u.ux,u.uy);
- X}
- X
- Xvoid
- Xunplacebc()
- X{
- X if (u.uswallow) return; /* ball&chain not placed while swallowed */
- X
- X if (!carried(uball)) {
- X freeobj(uball);
- X if (Blind && (u.bc_felt & BC_BALL)) /* drop glyph */
- X levl[uball->ox][uball->oy].glyph = u.bglyph;
- X
- X newsym(uball->ox,uball->oy);
- X }
- X freeobj(uchain);
- X if (Blind && (u.bc_felt & BC_CHAIN)) /* drop glyph */
- X levl[uchain->ox][uchain->oy].glyph = u.cglyph;
- X
- X newsym(uchain->ox,uchain->oy);
- X u.bc_felt = 0; /* feel nothing */
- X}
- X
- X
- X/*
- X * bc_order()
- X *
- X * Return the stacking of the hero's ball & chain. This assumes that the
- X * hero is being punished.
- X *
- X * Return values:
- X * 0 ball & chain not at same location
- X * 1 chain on top
- X * 2 ball on top
- X */
- Xint
- Xbc_order()
- X{
- X int order;
- X struct obj *obj;
- X
- X if (uchain->ox != uball->ox || uchain->oy != uball->oy || carried(uball))
- X return 0;
- X
- X obj = level.objects[uchain->ox][uchain->oy];
- X
- X for (order = -1; obj; obj = obj->nexthere) {
- X if (obj == uchain) {
- X order = 1;
- X break;
- X }
- X if (obj == uball) {
- X order = 2;
- X break;
- X }
- X }
- X if (order < 0) {
- X impossible("bc_order: ball&chain not in same location!");
- X order = 0;
- X }
- X return order;
- X}
- X
- X/*
- X * set_bc()
- X *
- X * The hero is either about to go blind or already blind and just punished.
- X * Set up the ball and chain variables so that the ball and chain are "felt".
- X */
- Xvoid
- Xset_bc(already_blind)
- Xint already_blind;
- X{
- X int ball_on_floor = !carried(uball);
- X u.bc_order = bc_order(); /* get the order */
- X u.bc_felt = ball_on_floor ? BC_BALL|BC_CHAIN : BC_CHAIN; /* felt */
- X
- X if (already_blind) {
- X u.cglyph = u.bglyph = levl[u.ux][u.uy].glyph;
- X return;
- X }
- X
- X /*
- X * Since we can still see, remove the ball&chain and get the glyph that
- X * would be beneath them. Then put the ball&chain back. This is pretty
- X * disgusting, but it will work.
- X */
- X remove_object(uchain);
- X if (ball_on_floor) remove_object(uball);
- X
- X newsym(uchain->ox, uchain->oy);
- X u.cglyph = levl[uchain->ox][uchain->oy].glyph;
- X
- X if (u.bc_order) { /* same location (ball not carried) */
- X u.bglyph = u.cglyph;
- X if (u.bc_order == 1) {
- X place_object(uball, uball->ox, uball->oy);
- X place_object(uchain, uchain->ox, uchain->oy);
- X } else {
- X place_object(uchain, uchain->ox, uchain->oy);
- X place_object(uball, uball->ox, uball->oy);
- X }
- X newsym(uball->ox, uball->oy);
- X } else { /* different locations */
- X place_object(uchain, uchain->ox, uchain->oy);
- X newsym(uchain->ox, uchain->oy);
- X if (ball_on_floor) {
- X newsym(uball->ox, uball->oy); /* see under ball */
- X u.bglyph = levl[uball->ox][uball->oy].glyph;
- X place_object(uball, uball->ox, uball->oy);
- X newsym(uball->ox, uball->oy); /* restore ball */
- X }
- X }
- X}
- X
- X
- X/*
- X * move_bc()
- X *
- X * Move the ball and chain. This is called twice for every move. The first
- X * time to pick up the ball and chain before the move, the second time to
- X * place the ball and chain after the move. If the ball is carried, this
- X * function should never have BC_BALL as part of it's control.
- X */
- Xvoid
- Xmove_bc(before, control, ballx, bally, chainx, chainy)
- Xint before, control;
- Xxchar ballx, bally, chainx, chainy;
- X{
- X if (Blind) {
- X /*
- X * The hero is blind. Time to work hard. The ball and chain that
- X * are attached to the hero are very special. The hero knows that
- X * they are attached, so when they move, the hero knows that they
- X * aren't at the last position remembered. This is complicated
- X * by the fact that the hero can "feel" the surrounding locations
- X * at any time, hence, making one or both of them show up again.
- X * So, we have to keep track of which is felt at any one time and
- X * act accordingly.
- X */
- X if (!before) {
- X if ((control & BC_CHAIN) && (control & BC_BALL)) {
- X /*
- X * Both ball and chain moved. If felt, drop glyph.
- X */
- X if (u.bc_felt & BC_BALL) /* ball felt */
- X levl[uball->ox][uball->oy].glyph = u.bglyph;
- X if (u.bc_felt & BC_CHAIN) /* chain felt */
- X levl[uchain->ox][uchain->oy].glyph = u.cglyph;
- X u.bc_felt = 0;
- X
- X /* Pick up glyph a new location. */
- X u.bglyph = levl[ballx][bally].glyph;
- X u.cglyph = levl[chainx][chainy].glyph;
- X
- X movobj(uball,ballx,bally);
- X movobj(uchain,chainx,chainy);
- X } else if (control & BC_BALL) {
- X if (u.bc_felt & BC_BALL) { /* ball felt */
- X if (!u.bc_order) { /* ball by itself */
- X levl[uball->ox][uball->oy].glyph = u.bglyph;
- X } else if (u.bc_order == 2) { /* ball on top */
- X if (u.bc_felt & BC_CHAIN) { /* chain felt */
- X map_object(uchain, 0);
- X } else {
- X levl[uball->ox][uball->oy].glyph = u.bglyph;
- X }
- X }
- X u.bc_felt &= ~BC_BALL; /* no longer feel the ball */
- X }
- X
- X /* Pick up glyph at new position. */
- X u.bglyph = (ballx != chainx || bally != chainy) ?
- X levl[ballx][bally].glyph : u.cglyph;
- X
- X movobj(uball,ballx,bally);
- X } else if (control & BC_CHAIN) {
- X if (u.bc_felt & BC_CHAIN) { /* chain felt */
- X if (!u.bc_order) { /* chain by itself */
- X levl[uchain->ox][uchain->oy].glyph = u.cglyph;
- X } else if (u.bc_order == 1) { /* chain on top */
- X if (u.bc_felt & BC_BALL) { /* ball felt */
- X map_object(uball, 0);
- X } else {
- X levl[uchain->ox][uchain->oy].glyph = u.cglyph;
- X }
- X }
- X u.bc_felt &= ~BC_CHAIN;
- X }
- X /* Pick up glyph beneath at new position. */
- X u.cglyph = (ballx != chainx || bally != chainy) ?
- X levl[chainx][chainy].glyph : u.bglyph;
- X
- X movobj(uchain,chainx,chainy);
- X }
- X
- X u.bc_order = bc_order(); /* reset the order */
- X }
- X
- X } else {
- X /*
- X * The hero is not blind. To make this work correctly, we need to
- X * pick up the ball and chain before the hero moves, then put them
- X * in their new positions after the hero moves.
- X */
- X if (before) {
- X /*
- X * Neither ball nor chain moved, so remember which was on top.
- X * Use the variable 'u.bc_order' since it is only valid when
- X * blind.
- X */
- X if (!control) u.bc_order = bc_order();
- X
- X remove_object(uchain);
- X newsym(uchain->ox, uchain->oy);
- X if (!carried(uball)) {
- X remove_object(uball);
- X newsym(uball->ox, uball->oy);
- X }
- X } else {
- X int on_floor = !carried(uball);
- X
- X if ((control & BC_CHAIN) || (!control && u.bc_order == 1)) {
- X /* If the chain moved or nothing moved & chain on top. */
- X if (on_floor) place_object(uball, ballx, bally);
- X place_object(uchain, chainx, chainy); /* chain on top */
- X } else {
- X place_object(uchain, chainx, chainy);
- X if (on_floor) place_object(uball, ballx, bally);
- X /* ball on top */
- X }
- X newsym(chainx, chainy);
- X if (on_floor) newsym(ballx, bally);
- X }
- X }
- X}
- X
- X/* return TRUE if ball could be dragged */
- Xboolean
- Xdrag_ball(x, y, bc_control, ballx, bally, chainx, chainy)
- Xxchar x, y;
- Xint *bc_control;
- Xxchar *ballx, *bally, *chainx, *chainy;
- X{
- X struct trap *t = (struct trap *)0;
- X
- X *ballx = uball->ox;
- X *bally = uball->oy;
- X *chainx = uchain->ox;
- X *chainy = uchain->oy;
- X *bc_control = 0;
- X
- X if (dist2(x, y, uchain->ox, uchain->oy) <= 2) {
- X *bc_control = 0; /* nothing moved */
- X move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
- X return TRUE;
- X }
- X
- X if (carried(uball) || dist2(x, y, uball->ox, uball->oy) < 3 ||
- X (uball->ox == uchain->ox && uball->oy == uchain->oy)) {
- X *chainx = u.ux;
- X *chainy = u.uy;
- X *bc_control = BC_CHAIN;
- X move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
- X return TRUE;
- X }
- X
- X if (near_capacity() > SLT_ENCUMBER) {
- X You("cannot %sdrag the heavy iron ball.",
- X invent ? "carry all that and also " : "");
- X nomul(0);
- X return FALSE;
- X }
- X
- X if ((is_pool(uchain->ox, uchain->oy) &&
- X (levl[uchain->ox][uchain->oy].typ == POOL ||
- X !is_pool(uball->ox, uball->oy) ||
- X levl[uball->ox][uball->oy].typ == POOL))
- X || ((t = t_at(uchain->ox, uchain->oy)) &&
- X (t->ttyp == PIT ||
- X t->ttyp == SPIKED_PIT ||
- X t->ttyp == TRAPDOOR)) ) {
- X
- X if (Levitation) {
- X You("feel a tug from your iron ball.");
- X if (t) t->tseen = 1;
- X } else {
- X struct monst *victim;
- X
- X You("are jerked back by your iron ball!");
- X if (victim = m_at(uchain->ox, uchain->oy)) {
- X int tmp;
- X
- X tmp = -2 + Luck + find_mac(victim);
- X
- X if (victim->msleep) {
- X victim->msleep = 0;
- X tmp += 2;
- X }
- X if (!victim->mcanmove) {
- X tmp += 4;
- X if (!rn2(10)) {
- X victim->mcanmove = 1;
- X victim->mfrozen = 0;
- X }
- X }
- X if (tmp >= rnd(20))
- X (void) hmon(victim,uball,1);
- X else
- X miss(xname(uball), victim);
- X
- X } /* now check again in case mon died */
- X if (!m_at(uchain->ox, uchain->oy)) {
- X u.ux = uchain->ox;
- X u.uy = uchain->oy;
- X newsym(u.ux0, u.uy0);
- X }
- X nomul(0);
- X
- X *ballx = uchain->ox;
- X *bally = uchain->oy;
- X *bc_control = BC_BALL;
- X move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
- X move_bc(0, *bc_control, *ballx, *bally, *chainx, *chainy);
- X spoteffects();
- X return FALSE;
- X }
- X }
- X
- X *ballx = uchain->ox;
- X *bally = uchain->oy;
- X *chainx = u.ux;
- X *chainy = u.uy;
- X *bc_control = BC_BALL|BC_CHAIN;;
- X nomul(-2);
- X nomovemsg = "";
- X
- X move_bc(1, *bc_control, *ballx, *bally, *chainx, *chainy);
- X return TRUE;
- X}
- X
- X/*
- X * drop_ball()
- X *
- X * The punished hero drops or throws her iron ball. If the hero is
- X * blind, we must reset the order and glyph. Check for side effects.
- X * This routine expects the ball to be already placed.
- X */
- Xvoid
- Xdrop_ball(x, y)
- Xxchar x, y;
- X{
- X if (Blind) {
- X u.bc_order = bc_order(); /* get the order */
- X /* pick up glyph */
- X u.bglyph = (u.bc_order) ? u.cglyph : levl[x][y].glyph;
- X }
- X
- X if (x != u.ux || y != u.uy) {
- X struct trap *t;
- X const char *pullmsg = "The ball pulls you out of the %s!";
- X
- X if (u.utrap && u.utraptype != TT_INFLOOR) {
- X switch(u.utraptype) {
- X case TT_PIT:
- X pline(pullmsg, "pit");
- X break;
- X case TT_WEB:
- X pline(pullmsg, "web");
- X pline("The web is destroyed!");
- X deltrap(t_at(u.ux,u.uy));
- X break;
- X case TT_LAVA:
- X pline(pullmsg, "lava");
- X break;
- X case TT_BEARTRAP: {
- X register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE;
- X pline(pullmsg, "bear trap");
- X Your("%s %s is severely damaged.",
- X (side == LEFT_SIDE) ? "left" : "right",
- X body_part(LEG));
- X set_wounded_legs(side, rn1(1000, 500));
- X losehp(2, "leg damage from being pulled out of a bear trap",
- X KILLED_BY);
- X break;
- X }
- X }
- X u.utrap = 0;
- X fill_pit(u.ux, u.uy);
- X }
- X
- X u.ux0 = u.ux;
- X u.uy0 = u.uy;
- X if (!Levitation && !MON_AT(x, y) && !u.utrap &&
- X (is_pool(x, y) ||
- X ((t = t_at(x, y)) &&
- X ((t->ttyp == PIT) || (t->ttyp == SPIKED_PIT) ||
- X (t->ttyp == TRAPDOOR))))) {
- X u.ux = x;
- X u.uy = y;
- X } else {
- X u.ux = x - u.dx;
- X u.uy = y - u.dy;
- X }
- X vision_full_recalc = 1; /* hero has moved, recalculate vision later */
- X
- X if (Blind) {
- X /* drop glyph under the chain */
- X if (u.bc_felt & BC_CHAIN)
- X levl[uchain->ox][uchain->oy].glyph = u.cglyph;
- X u.bc_felt = 0; /* feel nothing */
- X u.bc_order = bc_order(); /* reset bc order */
- X }
- X movobj(uchain,u.ux,u.uy); /* has a newsym */
- X newsym(u.ux0,u.uy0); /* clean up old position */
- X spoteffects();
- X }
- X}
- X
- X
- Xstatic void
- Xlitter()
- X{
- X struct obj *otmp = invent, *nextobj;
- X int capacity = weight_cap();
- X
- X while (otmp) {
- X nextobj = otmp->nobj;
- X if ((otmp != uball) && (rnd(capacity) <= otmp->owt)) {
- X if (otmp == uwep)
- X setuwep((struct obj *)0);
- X if ((otmp != uwep) && (canletgo(otmp, ""))) {
- X Your("%s you down the stairs.",
- X aobjnam(otmp, "follow"));
- X dropx(otmp);
- X }
- X }
- X otmp = nextobj;
- X }
- X}
- X
- Xvoid
- Xdrag_down()
- X{
- X boolean forward;
- X uchar dragchance = 3;
- X
- X /*
- X * Assume that the ball falls forward if:
- X *
- X * a) the character is wielding it, or
- X * b) the character has both hands available to hold it (i.e. is
- X * not wielding any weapon), or
- X * c) (perhaps) it falls forward out of his non-weapon hand
- X */
- X
- X forward = (!(carried(uball))?
- X FALSE : ((uwep == uball) || (!uwep))?
- X TRUE : (boolean)(rn2(3) / 2));
- X
- X if (carried(uball))
- X You("lose your grip on the iron ball.");
- X
- X if (forward) {
- X if(rn2(6)) {
- X You("get dragged downstairs by the iron ball.");
- X losehp(rnd(6), "dragged downstairs by an iron ball",
- X NO_KILLER_PREFIX);
- X litter();
- X }
- X } else {
- X if(rn2(2)) {
- X pline("The iron ball smacks into you!");
- X losehp(rnd(20), "iron ball collision", KILLED_BY_AN);
- X exercise(A_STR, FALSE);
- X dragchance -= 2;
- X }
- X if( (int) dragchance >= rnd(6)) {
- X You("get dragged downstairs by the iron ball.");
- X losehp(rnd(3), "dragged downstairs by an iron ball",
- X NO_KILLER_PREFIX);
- X exercise(A_STR, FALSE);
- X litter();
- X }
- X }
- X}
- X
- X/*ball.c*/
- END_OF_FILE
- if test 15527 -ne `wc -c <'src/ball.c'`; then
- echo shar: \"'src/ball.c'\" unpacked with wrong size!
- fi
- # end of 'src/ball.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'\" \(39362 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 { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1),
- X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 2250, 750, 0, MS_SILENT, MZ_HUGE, 0, 0,
- X M1_HUMANOID,
- X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT |
- X M2_JEWELS, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 2250, 750, 0, MS_SILENT, MZ_HUGE, 0, 0,
- X M1_HUMANOID,
- X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT |
- X M2_JEWELS, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 2200, 700, 0, MS_SILENT, MZ_HUGE, 0, 0,
- X M1_HUMANOID,
- X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT |
- X M2_JEWELS, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 2250, 750, 0, MS_SILENT, MZ_HUGE, MR_FIRE, MR_FIRE,
- X M1_HUMANOID,
- X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT |
- X M2_JEWELS, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 2250, 750, 0, MS_SILENT, MZ_HUGE, MR_COLD, MR_COLD,
- X M1_HUMANOID,
- X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT |
- X M2_JEWELS, 0, C(WHITE) },
- 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, NO_ATTK },
- X 1700, 500, 0, MS_GRUNT, MZ_HUGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, 0, C(BROWN) },
- 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, NO_ATTK },
- X 2300, 900, 0, MS_SILENT, MZ_HUGE, 0, 0,
- X M1_FLY | M1_HUMANOID, M2_STRONG | M2_ROCKTHROW | M2_NASTY |
- X M2_COLLECT | M2_MAGIC, 0, 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, NO_ATTK },
- X 1500, 700, 0, MS_SILENT, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG | M2_NASTY, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 900, 400, 0, MS_SILENT, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_FLY | M1_SEE_INVIS,
- X M2_WANDER | M2_STALK | M2_HOSTILE | M2_STRONG, 0, 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 },
- X NO_ATTK, NO_ATTK },
- X 1300, 600, 0, MS_BURBLE, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_FLY | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT,
- X 0, C(ORANGE_COLORED) },
- X/* Kops */
- X#ifdef KOPS
- X { "Keystone Kop", S_KOP, 1, 6, MARM(10,7), 10, 9,
- X (G_GENO | G_LGROUP | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN, 0, 0, M1_HUMANOID,
- X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_MALE | M2_COLLECT,
- X 0, C(BLUE) },
- X { "Kop Sergeant", S_KOP, 2, 8, MARM(10,6), 10, 10,
- X (G_GENO | G_SGROUP | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN, 0, 0, M1_HUMANOID,
- X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT,
- X 0, C(BLUE) },
- X { "Kop Lieutenant", S_KOP, 3, 10, MARM(10,5), 20, 11,
- X (G_GENO | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN, 0, 0, M1_HUMANOID,
- X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT,
- X 0, C(CYAN) },
- X { "Kop Kaptain", S_KOP, 4, 12, MARM(10,4), 20, 12, (G_GENO | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN, 0, 0, M1_HUMANOID,
- X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_MALE | M2_COLLECT,
- X 0, 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, NO_ATTK },
- X 1200, 100, 0, MS_MUMBLE, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, MR_COLD,
- X M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_UNDEAD | M2_HOSTILE | M2_MAGIC, 0, 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, NO_ATTK },
- X 1200, 100, 0, MS_MUMBLE, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, MR_COLD,
- X M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_UNDEAD | M2_HOSTILE | M2_MAGIC, 0, 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, NO_ATTK },
- X 1200, 100, 0, MS_MUMBLE, MZ_HUMAN,
- X MR_FIRE | MR_COLD | MR_SLEEP | MR_POISON, MR_FIRE | MR_COLD,
- X M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_WANTSBOOK, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 400, 50, 0, MS_SILENT, MZ_SMALL,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 650, 50, 0, MS_SILENT, MZ_SMALL,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 850, 75, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE | M2_ORC | M2_GREEDY | M2_JEWELS, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_ELF, 175, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE | M2_ELF, 0, 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, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE, 0, 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, NO_ATTK },
- X 1700, 250, 0, MS_SILENT, MZ_HUGE,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE | M2_STRONG, 0, 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, NO_ATTK },
- X 2050, 375, 0, MS_SILENT, MZ_HUGE,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG | M2_JEWELS,
- X 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 100, 0, MS_MUMBLE, MZ_LARGE,
- X MR_FIRE | MR_POISON, MR_FIRE | MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE, M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 100, 0, MS_MUMBLE, MZ_LARGE,
- X MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_STONE,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE, M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE, M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE, M2_STRONG, 0, 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, NO_ATTK },
- X 2600, 400, 0, MS_MUMBLE, MZ_HUGE,
- X MR_FIRE | MR_POISON, MR_FIRE | MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS,
- X M2_STRONG, 0, 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, NO_ATTK },
- X 2600, 400, 0, MS_MUMBLE, MZ_HUGE,
- X MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_STONE,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_ACID,
- X M2_STRONG, 0, 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, NO_ATTK },
- X 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS,
- X M2_STRONG, 0, 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, NO_ATTK },
- X 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON,
- X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_POIS,
- X M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 1600, 500, 0, MS_GRUNT, MZ_LARGE, 0, 0,
- X M1_HUMANOID, M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT,
- X 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 1700, 700, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID,
- X M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT,
- X 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 1700, 750, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID,
- X M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT,
- X 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 250, 0, MS_SILENT, MZ_MEDIUM,
- X MR_FIRE | MR_COLD | MR_POISON | MR_ACID | MR_STONE,
- X MR_FIRE | MR_COLD | MR_POISON,
- X M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD |
- X M1_MINDLESS | M1_OMNIVORE | M1_ACID,
- X M2_HOSTILE | M2_NEUTER, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 500, 250, 0, MS_SILENT, MZ_MEDIUM,
- X MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE,
- X MR_COLD | MR_ELEC | MR_POISON,
- X M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD |
- X M1_MINDLESS | M1_OMNIVORE | M1_ACID,
- X M2_HOSTILE | M2_NEUTER, 0, 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, NO_ATTK },
- X 900, 250, 0, MS_SILENT, MZ_LARGE,
- X MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE,
- X MR_COLD | MR_ELEC | MR_POISON,
- X M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD |
- X M1_MINDLESS | M1_OMNIVORE | M1_ACID,
- X M2_HOSTILE | M2_NEUTER, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 20, 0, MS_HUMANOID, MZ_HUMAN, MR_POISON, 0,
- X M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, 0, 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, NO_ATTK },
- X 1000, 250, 0, MS_SILENT, MZ_MEDIUM, 0, 0,
- X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_METALLIVORE, M2_HOSTILE,
- X 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 50, 60, 0, MS_HISS, MZ_TINY, 0, 0,
- X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
- X M1_OVIPAROUS | M1_CARNIVORE, 0, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 100, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON,
- X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS |
- X M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 150, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON,
- X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS |
- X M1_CARNIVORE | M1_OVIPAROUS, M2_HOSTILE, 0, 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, NO_ATTK },
- X 100, 60, 0, MS_HISS, MZ_MEDIUM,
- X MR_POISON, MR_POISON,
- X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS |
- X M1_CARNIVORE | M1_OVIPAROUS, M2_HOSTILE, 0, C(BLUE) },
- X { "python", S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1),
- X { { AT_BITE, AD_DRST, 1, 4 }, {AT_BITE, AD_PHYS, 1, 4},
- X { AT_HUGS, AD_WRAP, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK },
- X 250, 100, 0, MS_HISS, MZ_LARGE, MR_POISON, MR_POISON,
- X M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS |
- X M1_CARNIVORE | M1_OVIPAROUS, M2_HOSTILE | M2_STRONG, 0, C(MAGENTA) },
- 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, NO_ATTK },
- X 250, 100, 0, MS_HISS, MZ_MEDIUM,
- X MR_POISON, MR_POISON,
- X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS |
- X M1_CARNIVORE | M1_OVIPAROUS, M2_HOSTILE, 0, C(BLUE) },
- 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, NO_ATTK },
- X 800, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0,
- X M1_HUMANOID | M1_REGEN | M1_CARNIVORE,
- X M2_STRONG | M2_STALK | M2_HOSTILE, 0, 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, NO_ATTK },
- X 1000, 300, 0, MS_GRUNT, MZ_LARGE, MR_COLD, MR_COLD,
- X M1_HUMANOID | M1_REGEN | M1_CARNIVORE,
- X M2_STRONG | M2_STALK | M2_HOSTILE, 0, 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, NO_ATTK },
- X 1200, 300, 0, MS_GRUNT, MZ_LARGE, 0, 0,
- X M1_HUMANOID | M1_REGEN | M1_CARNIVORE,
- X M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, 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, NO_ATTK },
- X 1200, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0,
- X M1_HUMANOID | M1_REGEN | M1_CARNIVORE | M1_SWIM,
- X M2_STRONG | M2_STALK | M2_HOSTILE, 0, C(BLUE) },
- 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, NO_ATTK },
- X 1500, 400, 0, MS_GRUNT, MZ_LARGE, 0, 0,
- X M1_HUMANOID | M1_REGEN | M1_CARNIVORE,
- X M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, C(HI_LORD) },
- 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 },
- X NO_ATTK, NO_ATTK },
- X 1200, 500, 0, MS_SILENT, MZ_LARGE, 0, 0,
- X M1_TUNNEL | M1_CARNIVORE, M2_STRONG, 0, 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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0,
- X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, 0, 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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0,
- X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY |
- X M2_LORD | M2_MALE, 0, 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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0,
- X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
- X M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG |
- X M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSBOOK, 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, NO_ATTK },
- X 1200, 0, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 0, 0, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0,
- X M1_BREATHLESS | M1_FLY | M1_HUMANOID | M1_UNSOLID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, C(BLACK) },
- 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, NO_ATTK },
- X WT_HUMAN, 0, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE | M2_MALE | M2_COLLECT,
- X 0, C(HI_LORD) },
- 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, NO_ATTK }, 1200, 700, 0, MS_SILENT, MZ_MEDIUM,
- X MR_FIRE | MR_COLD | MR_STONE, MR_FIRE | MR_COLD | MR_STONE,
- X M1_BREATHLESS | M1_WALLWALK | M1_THICK_HIDE | M1_METALLIVORE,
- X M2_HOSTILE | M2_STRONG, 0, C(BROWN) },
- X/* Yeti, Apes and other large beasts */
- X { "ape", S_YETI, 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, NO_ATTK },
- X 1100, 500, 0, MS_GROWL, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_STRONG, 0, C(BROWN) },
- X { "owlbear", S_YETI, 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, NO_ATTK },
- X 1700, 700, 0, MS_SILENT, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG | M2_NASTY, 0, C(BROWN) },
- 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, NO_ATTK },
- X 1600, 700, 0, MS_GROWL, MZ_LARGE, MR_COLD, MR_COLD,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG, 0, C(WHITE) },
- X { "carnivorous ape", S_YETI, 6, 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, NO_ATTK },
- X 1250, 550, 0, MS_GROWL, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE,
- X M2_HOSTILE | M2_STRONG, 0, C(BLACK) },
- X { "sasquatch", S_YETI, 7, 15, 6, 0, 2, (G_GENO | 1),
- X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
- X { AT_KICK, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK },
- X 1550, 750, 0, MS_GROWL, MZ_LARGE, 0, 0,
- X M1_ANIMAL | M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE,
- X M2_STRONG, 0, C(GRAY) },
- 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 400, 50, 0, MS_SILENT, MZ_SMALL,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 650, 50, 0, MS_SILENT, MZ_SMALL,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 850, 75, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_ELF, 175, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 200, 0, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, 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, NO_ATTK },
- X 1700, 250, 0, MS_SILENT, MZ_HUGE,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, 0, 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, NO_ATTK },
- X 2050, 375, 0, MS_SILENT, MZ_HUGE,
- X MR_COLD | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG,
- X 0, C(CYAN) },
- X { "skeleton", S_ZOMBIE, 12, 8, 4, 0, 0, (G_NOCORPSE | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_TUCH, AD_SLOW, 1, 6},
- X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
- X 300, 5, 0, MS_BONES, MZ_HUMAN,
- X MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE,
- X M2_UNDEAD | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_COLLECT,
- X 0, C(WHITE) },
- X/* 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, NO_ATTK },
- X 400, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_HOSTILE | M2_NEUTER, 0, 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, NO_ATTK },
- X 450, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_HOSTILE | M2_NEUTER, 0, 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, NO_ATTK },
- X 800, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_HOSTILE | M2_NEUTER, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 900, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE,
- X M2_HOSTILE | M2_NEUTER, 0, 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, NO_ATTK },
- X 1400, 600, 0, MS_SILENT, MZ_LARGE,
- X MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON,
- X MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
- X M2_HOSTILE | M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 1550, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE,
- X M2_HOSTILE | M2_STRONG, 0, 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X 1900, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_SLEEP | MR_POISON | MR_STONE, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE,
- X M2_HOSTILE | M2_STRONG, 0, 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, NO_ATTK },
- X 2000, 0, 0, MS_SILENT, MZ_LARGE,
- X MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0,
- X M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE | M1_POIS,
- X M2_HOSTILE | M2_STRONG | M2_COLLECT, 0, C(HI_METAL) },
- 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN, 0, 0,
- X M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT,
- X 0, C(HI_DOMESTIC) },
- X { "wererat", S_HUMAN, 2, 12, MARM(10,7), 10, -7, 1,
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN, MR_POISON, 0,
- X M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE,
- X M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, 0, C(BROWN) },
- X { "werejackal", S_HUMAN, 2, 12, MARM(10,7), 10, -7, 1,
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_BARK, MZ_HUMAN, MR_POISON, 0,
- X M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE,
- X M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, 0, C(RED) },
- X { "werewolf", S_HUMAN, 5, 12, MARM(10,6), 20, -7, 1,
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_BARK, MZ_HUMAN, MR_POISON, 0,
- X M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE,
- X M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT,
- X 0, C(ORANGE_COLORED) },
- X { "Woodland-elf", S_HUMAN, 4, 12, MARM(10,5), 10, -5,
- X (G_GENO | G_SGROUP | 2),
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
- X M1_HUMANOID | M1_OMNIVORE, M2_ELF | M2_COLLECT, 0, C(GREEN) },
- X { "Green-elf", S_HUMAN, 5, 12, MARM(10,5), 10, -6,
- X (G_GENO | G_SGROUP | 2),
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
- X M1_HUMANOID | M1_OMNIVORE, M2_ELF | M2_COLLECT, 0, C(BRIGHT_GREEN) },
- X { "Grey-elf", S_HUMAN, 6, 12, MARM(10,5), 10, -7,
- X (G_GENO | G_SGROUP | 2),
- X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
- X M1_HUMANOID | M1_OMNIVORE, M2_ELF | M2_COLLECT, 0, C(GRAY) },
- X { "elf-lord", S_HUMAN, 8, 12, MARM(10,5), 20, -9,
- X (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, NO_ATTK },
- X WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
- X M1_HUMANOID | M1_OMNIVORE,
- X M2_ELF | M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT,
- X 0, C(BRIGHT_BLUE) },
- X { "Elvenking", S_HUMAN, 9, 12, MARM(10,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, NO_ATTK },
- X WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN,
- X MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE,
- X M2_ELF | M2_STRONG | M2_PRINCE | M2_MALE | M2_COLLECT, 0,
- X 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,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_NURSE, MZ_HUMAN, MR_POISON, MR_POISON,
- X M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE,
- X 0, 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 },
- X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN, 0, 0,
- X M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG |
- X M2_COLLECT | M2_MAGIC,
- X 0, C(HI_DOMESTIC) },
- X { "guard", S_HUMAN, 12, 12, MARM(10,-1), 40, 10, G_NOGEN,
- X { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG | M2_COLLECT,
- X 0, C(BLUE) },
- X { "oracle", S_HUMAN, 12, 0, 0, 50, 0, G_NOGEN | G_UNIQ,
- X { { AT_NONE, AD_MAGM, 0, 4 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_ORACLE, MZ_HUMAN, 0, 0,
- X M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_FEMALE, 0, C(HI_ZAP) },
- X { "aligned priest", S_HUMAN, 12, 12, MARM(10,0), 50, 0, 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, NO_ATTK },
- X WT_HUMAN, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
- X MR_ELEC, MR_ELEC, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_LORD | M2_PEACEFUL | M2_COLLECT,
- X 0, C(WHITE) },
- X { "high priest", S_HUMAN, 25, 15, MARM(7,-3), 70, 0,
- X (G_NOGEN | G_UNIQ),
- X { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 2, 8 },
- X { AT_MAGC, AD_CLRC, 2, 8 }, { AT_MAGC, AD_CLRC, 2, 8 },
- X NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
- X MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON,
- X MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON,
- X M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MINION | M2_PRINCE | M2_NASTY |
- X M2_COLLECT | M2_MAGIC, 0, C(WHITE) },
- X#ifndef MUSE
- X { "unarmored watchman", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN,
- X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG |
- X M2_COLLECT, 0, C(BROWN) },
- X#endif
- X#ifdef ARMY
- X# ifndef MUSE
- X { "unarmored soldier", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN,
- X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG |
- X M2_COLLECT, 0, C(BROWN) },
- X# endif
- X { "soldier", S_HUMAN, 6, 4, MARM(10,3), 0, -2, (G_SGROUP | G_GENO | 1),
- X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG |
- X M2_COLLECT, 0, C(GRAY) },
- X { "sergeant", S_HUMAN, 8, 4, MARM(10,0), 5, -3, (G_SGROUP | G_GENO | 1),
- X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG |
- X M2_COLLECT, 0, C(RED) },
- X { "lieutenant", S_HUMAN, 10, 4, MARM(10,-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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG |
- X M2_COLLECT, 0, C(GREEN) },
- X { "captain", S_HUMAN, 12, 4, MARM(10,-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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG |
- X M2_COLLECT, 0, C(BLUE) },
- X#endif
- X/*
- X * Keep these separate - some of the mkroom code assumes that all
- X * the soldiers are contiguous.
- X */
- X { "watchman", S_HUMAN, 6, 4, MARM(10,3), 0, -2, (G_SGROUP | G_NOGEN | G_GENO | 1),
- X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG |
- X M2_COLLECT, 0, C(GRAY) },
- X { "watch captain", S_HUMAN, 10, 4, MARM(10,-2), 15, -4, (G_NOGEN | G_GENO | 1),
- X { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_WEAP, AD_PHYS, 3, 4 },
- X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN,
- X 0, 0, M1_HUMANOID | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG |
- X M2_COLLECT, 0, C(GREEN) },
- 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 },
- X NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_HISS, MZ_LARGE,
- X MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM |
- X M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE,
- X M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE,
- X 0, C(BRIGHT_GREEN) },
- X { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN,
- X { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
- X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_CUSS, MZ_HUMAN,
- X MR_FIRE | MR_POISON, MR_FIRE | MR_POISON,
- X M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS |
- X M1_TPORT | M1_TPORT_CNTRL | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY |
- X M2_PRINCE | M2_MALE | M2_MAGIC,
- X M3_COVETOUS | M3_WAITFORU, C(HI_LORD) },
- X#ifdef MULDGN
- X { "Croesus", S_HUMAN, 20, 15, 0, 40, 15, (G_UNIQ | G_NOGEN),
- X { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN,
- X MR_STONE, MR_STONE, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE,
- X M2_NOPOLY | M2_HUMAN | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_NASTY |
- X M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT |
- X M2_MAGIC, 0, C(HI_LORD) },
- X#endif
- 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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_FERRY, MZ_HUMAN,
- X MR_FIRE | MR_COLD | MR_POISON | MR_STONE, 0,
- X M1_BREATHLESS | M1_SEE_INVIS | M1_HUMANOID,
- X M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_PNAME | M2_MALE | M2_GREEDY |
- X M2_COLLECT,
- X 0, C(WHITE) },
- X#endif
- X/* Ghosts */
- X { "ghost", S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN),
- X { { AT_TUCH, AD_PHYS, 1, 1 }, NO_ATTK, NO_ATTK,
- X NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 0, PL_NSIZ, MS_SILENT, MZ_HUMAN,
- X MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0,
- X M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID,
- X M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, C(GRAY) },
- X { "shade", S_GHOST, 12, 10, 10, 0, 0, (G_NOCORPSE | G_NOGEN),
- X { { AT_TUCH, AD_PLYS, 2, 6 }, { AT_TUCH, AD_SLOW, 1, 6},
- X NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
- X WT_HUMAN, 0, 0, MS_WAIL, MZ_HUMAN,
- X MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0,
- X M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID |
- X M1_SEE_INVIS,
- X M2_NOPOLY | M2_UNDEAD | M2_WANDER | M2_STALK | M2_HOSTILE,
- X 0, C(BLACK) },
- 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, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN,
- X MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_SWIM,
- X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT,
- X 0, C(BLUE) },
- 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 },
- X NO_ATTK, NO_ATTK },
- X WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN,
- X MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE,
- X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, 0, C(BROWN) },
- END_OF_FILE
- if test 39362 -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 40 \(of 108\).
- cp /dev/null ark40isdone
- 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 57 58 59 60 \
- 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
- 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 \
- 101 102 103 104 105 106 107 108 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 108 archives.
- echo "Now execute 'rebuild.sh'"
- rm -f ark10[0-8]isdone 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
-