[comp.sources.games] v07i060: NetHack3 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (07/24/89)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 7, Issue 60
Archive-name: NetHack3/Part05



#! /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 5 (of 38)."
# Contents:  src/monst.c1 src/music.c
# Wrapped by billr@saab on Sun Jul 23 21:32:48 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'src/monst.c1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/monst.c1'\"
else
echo shar: Extracting \"'src/monst.c1'\" \(41770 characters\)
sed "s/^X//" >'src/monst.c1' <<'END_OF_FILE'
X/*	SCCS Id: @(#)monst.c	3.0	89/03/11
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed.  See license for details. */
X
X/* since this file is also used in auxiliary programs, don't include all the
X * function declarations for all of nethack
X */
X#define EXTERN_H
X#include "config.h"
X#include "permonst.h"
X#include "monsym.h"
X#include "eshk.h"
X#include "vault.h"
X#include "epri.h"
X
X#define	NO_ATTK		{ 0, 0, 0, 0 }
X
Xstruct permonst playermon = {		/* used by weapons bonus code */
X	"player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
X	{ { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	40, 400, PL_NSIZ, MS_SILENT, M1_HUMANOID | M1_COLLECT,
X	M2_HUMAN | M2_STRONG | M2_NEEDPICK
X},	*uasmon = &playermon;
X
X/*
X *	Rule #1:	monsters of a given class are contiguous in the
X *			mons[] array.
X *
X *	Rule #2:	monsters of a given class are presented in ascending
X *			order of strength.
X *
X *	Rule #3:	monster frequency is included in the geno mask;
X *			the frequency can be from 0 to 7.  0's will also
X *			be skipped during generation.
X */
X
Xstruct permonst mons[] = {
X/*	ants	*/
X	{ "giant ant",	S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_EGGS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "soldier ant", S_ANT, 3, 18, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_DRST, 3, 4 },
X	  NO_ATTK, NO_ATTK, NO_ATTK }, 2, 20, 0, MS_SILENT,
X	  M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "fire ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_FIRE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_EGGS |
X	  M1_FIRE_RES, M2_HOSTILE | M2_CARNIVORE },
X	{ "giant beetle", S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_POIS |
X	  M1_POIS_RES, M2_HOSTILE | M2_CARNIVORE },
X	{ "killer bee", S_ANT, 1, 18, -4, 0, 0, (G_GENO | G_LGROUP | 2),
X	  { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_BUZZ, M1_VSMALL | M1_ANIMAL | M1_FLY | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE },
X	{ "queen bee", S_ANT, 9, 24, -6, 0, 0, (G_GENO | G_NOGEN),
X	  { { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_BUZZ, M1_VSMALL | M1_ANIMAL | M1_FLY | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES | M1_PRINCE, M2_HOSTILE },
X/*	blobs	*/
X	{ "acid blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_ACID, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, M1_VSMALL | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS | M1_SLEE_RES | M1_STON_RES,
X	  M2_WANDER | M2_NOLIMBS | M2_AMORPHOUS },
X	{ "gelatinous cube", S_BLOB, 6, 6, 8, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PLYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS |
X	  M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES | M1_SLEE_RES,
X	  M2_WANDER | M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X	{ "quivering blob", S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
X	  M2_WANDER | M2_HOSTILE | M2_NOLIMBS },
X/*	cockatrice	*/
X	{ "cockatrice", S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
X	  NO_ATTK, NO_ATTK, NO_ATTK }, 3, 30, 0, MS_HISS, M1_VSMALL |
X	  M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS_RES | M1_STON_RES,
X	  M2_HOSTILE },
X/*	dog	*/
X	{ "little dog", S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_BARK,
X	  M1_VSMALL | M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE },
X	{ "dog", S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1 ,6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_BARK, M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE },
X	{ "large dog", S_DOG, 6, 15, 4, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, M1_ANIMAL | M1_NOHANDS, 
X	  M2_STRONG | M2_CARNIVORE },
X	{ "jackal", S_DOG, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, M1_VSMALL | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "jackalwere", S_DOG, 2, 12, 7, 10, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, M1_NOPOLY | M1_WERE | M1_NOHANDS | M1_POIS |
X	  M1_REGEN, M2_HOSTILE | M2_CARNIVORE },
X	{ "wolf", S_DOG, 5, 12, 4, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK,
X	  M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE },
X	{ "wolfwere", S_DOG, 5, 12, 4, 20, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_BARK, M1_NOPOLY | M1_WERE | M1_NOHANDS | M1_POIS |
X	  M1_REGEN, M2_HOSTILE | M2_CARNIVORE },
X	{ "winter wolf", S_DOG, 7, 12, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_COLD, 2, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_BARK, M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X	{ "warg", S_DOG, 7, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_BARK, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "hell hound pup", S_DOG, 7, 12, 4, 20, -5,
X	  (G_HELL | G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_FIRE, 2, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_BARK, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "hell hound", S_DOG, 12, 14, 2, 20, 0, (G_HELL | G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BREA, AD_FIRE, 3, 6 },
X	  NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_BARK, M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X#ifdef CHARON
X	{ "Cerberus", S_DOG, 12, 10, 2, 20, -7, (G_HELL | G_UNIQ | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BITE, AD_PHYS, 3, 6 },
X	  { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X	  50, 350, 0, MS_BARK, M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X#endif
X/*	eyes	*/
X	{ "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5),
X	  { { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, M1_FLY | M1_NOHANDS, M2_HOSTILE | M2_NOLIMBS },
X	{ "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
X	  { { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, M1_FLY | M1_NOHANDS | M1_COLD_RES, M2_HOSTILE |
X	  M2_NOLIMBS },
X/*	felines		*/
X	{ "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_MEW, M1_VSMALL | M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_CARNIVORE },
X	{ "housecat", S_FELINE, 4, 16, 5, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 1 ,6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_MEW, M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE },
X	{ "large cat", S_FELINE, 6, 15, 4, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_MEW, M1_BIG | M1_ANIMAL | M1_NOHANDS,
X	  M2_STRONG | M2_CARNIVORE },
X	{ "jaguar", S_FELINE, 5, 15, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
X	    { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_GROWL, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X/*	gremlins	*/
X	{ "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X	  { AT_BITE, AD_PHYS, 1, 4 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
X	  10, 30, 0, MS_LAUGH, M1_VSMALL | M1_SWIM | M1_HUMANOID | M1_POIS |
X	  M1_STALK, 0 },
X/*	humanoids	*/
X#ifdef TOLKIEN
X	{ "hobbit", S_HUMANOID, 1, 9, 7, 0, 6, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_HUMANOID, M1_HUMANOID | M1_COLLECT, 0 },
X#endif
X	{ "bugbear", S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  25, 250, 0, MS_GROWL, M1_BIG | M1_HUMANOID | M1_COLLECT,
X	  M2_STRONG },
X	{ "dwarf", S_HUMANOID,	2, 6, 4, 10, 4, (G_GENO | 3),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_HUMANOID, M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X	  M1_COLLECT, M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG },
X	{ "dwarf lord", S_HUMANOID,  4, 6, 4, 10, 5, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID,
X	  M1_HUMANOID | M1_LORD | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG },
X	{ "dwarf king", S_HUMANOID,  6, 6, 4, 20, 6, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_PRINCE,
X	  M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG },
X/*	imps & other minor demons/devils */
X	{ "manes", S_IMP, 1, 3, 7, 0, -7, (G_GENO | G_LGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_JEER, M1_VSMALL | M1_POIS | M1_STALK, 0 },
X	{ "homunculus", S_IMP, 2, 12, 6, 10, -7, (G_GENO | 2),
X	  { { AT_BITE, AD_SLEE, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, M1_VSMALL | M1_FLY | M1_POIS | M1_POIS_RES |
X	  M1_SLEE_RES | M1_STALK, 0 },
X	{ "lemure", S_IMP, 3, 3, 7, 0, -7,
X	  (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT, M1_POIS | M1_SLEE_RES | M1_REGEN | M1_STALK,
X	  M2_HOSTILE | M2_WANDER },
X	{ "imp", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_JEER, M1_VSMALL | M1_REGEN | M1_STALK,
X	  M2_WANDER },
X	{ "quasit", S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2),
X	  { { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
X	    { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, M1_VSMALL | M1_POIS_RES | M1_REGEN | M1_STALK,
X	  0 },
X	{ "tengu", S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3),
X	  { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_SQAWK, M1_VSMALL | M1_POIS_RES | M1_TPORT |
X	  M1_TPORT_CONTROL | M1_STALK, 0 },
X/*	j ??? */
X/*	kobolds 	*/
X	{ "kobold", S_KOBOLD,  0, 6, 7, 0, -2, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, M1_HUMANOID | M1_POIS | M1_COLLECT,
X	  M2_HOSTILE },
X	{ "large kobold", S_KOBOLD,  1, 6, 6, 0, -3, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC, M1_HUMANOID | M1_POIS | M1_COLLECT,
X	  M2_HOSTILE },
X	{ "kobold lord", S_KOBOLD,  2, 6, 5, 0, -4, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, M1_HUMANOID | M1_POIS | M1_COLLECT | M1_LORD,
X	  M2_HOSTILE },
X	{ "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC, M1_HUMANOID | M1_POIS | M1_MAGIC, M2_HOSTILE },
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 },
X	  30, 100, 0, MS_MUMBLE, M1_HUMANOID | M1_UNDEAD | M1_POIS |
X	  M1_COLD_RES | M1_REGEN, M2_HOSTILE },
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 },
X	  30, 100, 0, MS_MUMBLE, M1_HUMANOID | M1_UNDEAD | M1_POIS |
X	  M1_COLD_RES | M1_REGEN, M2_HOSTILE },
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 },
X	  30, 100, 0, MS_MUMBLE, M1_HUMANOID | M1_UNDEAD | M1_POIS |
X	  M1_FIRE_RES | M1_COLD_RES | M1_REGEN, M2_HOSTILE },
X/*	mimics	*/
X	{ "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
X	  M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE },
X	{ "large mimic", S_MIMIC, 8, 3, 7, 10, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_STCK, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 400, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE },
X	{ "giant mimic", S_MIMIC, 9, 3, 7, 20, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_STCK, 3, 6 }, { AT_CLAW, AD_STCK, 3, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  60, 500, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE },
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, M1_BIG | M1_NOHANDS | M1_POIS_RES |
X	  M1_FIRE_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
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, M1_BIG | M1_NOHANDS | M1_POIS_RES |
X	  M1_STON_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
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, M1_BIG | M1_NOHANDS | M1_POIS_RES, M2_STRONG |
X	  M2_NOLIMBS | M2_THICK_HIDE },
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, M1_BIG | M1_NOHANDS | M1_POIS_RES, M2_STRONG |
X	  M2_NOLIMBS | M2_THICK_HIDE },
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,
X	  M1_BIG | M1_NOHANDS | M1_EGGS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
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,
X	  M1_BIG | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES | M1_STON_RES,
X	  M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
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 },
X	  60, 400, 0, MS_MUMBLE, M1_BIG | M1_NOHANDS | M1_EGGS | M1_POIS_RES,
X	  M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
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_ACID, 1, 6 }, NO_ATTK, NO_ATTK },
X	  60, 400, 0, MS_MUMBLE, M1_BIG | M1_NOHANDS | M1_EGGS | M1_POIS_RES,
X	  M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
X/*	orcs 	*/
X	{ "goblin", S_ORC,  0, 6, 6, 0, -3, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, M1_HUMANOID | M1_COLLECT, M2_ORC },
X	{ "hobgoblin", S_ORC,  1, 9, 6, 0, -4, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC, M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG },
X	/* "orc" for zombie corpses only; they don't get created at random */
X	{ "orc", S_ORC,  1, 9, 6, 0, -3, (G_GENO | G_NOGEN | G_LGROUP),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 150, 0, MS_ORC,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X	{ "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X#ifdef TOLKIEN
X	{ "Mordor orc", S_ORC, 3, 5, 6, 0, -5, (G_GENO | G_LGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_ORC,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X	{ "Uruk-hai", S_ORC, 3, 7, 5, 0, -4, (G_GENO | G_LGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_ORC,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X#endif
X	{ "orc shaman", S_ORC, 3, 9, 5, 10, -5, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_ORC, M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X	{ "orc-captain", S_ORC, 5, 5, 4, 0, -5, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  35, 350, 0, MS_ORC,
X	  M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X	  M2_ORC | M2_HOSTILE | M2_STRONG },
X/*	 piercers	*/
X	{ "rock piercer", S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
X	  M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE },
X	{ "iron piercer", S_PIERCER, 5, 1, 0, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 300, 0, MS_SILENT, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
X	  M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE },
X/*	quadrupeds (generic)	*/
X	{ "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "osquip", S_QUADRUPED, 3, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 200, 0, MS_SILENT, M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X#ifdef TOLKIEN
X	{ "mumakil", S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 4, 12 }, { AT_BITE, AD_PHYS, 2, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  70, 500, 0, MS_SILENT, M1_ANIMAL | M1_NOHANDS | M1_BIG,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X#endif
X	{ "leocrotta", S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_BITE, AD_PHYS, 2, 6 },
X	    { AT_CLAW, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_IMITATE, M1_BIG | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X	{ "wumpus", S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X	{ "titanothere", S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  65, 650, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baluchitherium", S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 5, 4 }, { AT_CLAW, AD_PHYS, 5, 4 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  80, 800, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_STRONG | M2_HERBIVORE | M2_THICK_HIDE },
X/*	rodents 	*/
X	{ "sewer rat",	S_RODENT, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SQEEK, M1_VSMALL | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "giant rat",	S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, M1_VSMALL | M1_ANIMAL | M1_NOHANDS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "rabid rat", S_RODENT, 2, 12, 6, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRCO, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 10, 0, MS_SQEEK, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
X	  M2_HOSTILE | M2_CARNIVORE },
X	{ "ratwere", S_RODENT, 2, 12, 6, 10, -7, G_NOGEN | G_NOCORPSE,
X	  { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, M1_VSMALL | M1_WERE | M1_NOHANDS | M1_NOPOLY |
X	  M1_POIS | M1_REGEN, M2_HOSTILE | M2_CARNIVORE },
X	{ "rock mole", S_RODENT, 3, 3, 0, 20, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SILENT, M1_VSMALL | M1_ANIMAL | M1_NOHANDS |
X	  M1_GREEDY | M1_JEWELS | M1_COLLECT, M2_HOSTILE | M2_TUNNEL },
X/*	spiders and scorpions	*/
X	{ "cave spider", S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 50, 0, MS_SILENT, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_EGGS |
X	  M1_POIS_RES, M2_HOSTILE | M2_CONCEAL | M2_CARNIVORE },
X	{ "scorpion", S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
X	    { AT_STNG, AD_DRST, 1, 4 }, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_VSMALL | M1_ANIMAL | M1_NOHANDS | M1_EGGS |
X	  M1_POIS, M2_HOSTILE | M2_CONCEAL | M2_CARNIVORE },
X	{ "giant spider", S_SPIDER, 5, 15, 4, 0, 0, (G_GENO | 1),
X	  { { AT_BITE, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT,
X	  M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X/*	trappers, lurkers, etc...	*/
X	{ "lurker above", S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_DGST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 350, 0, MS_SILENT,
X	  M1_BIG | M1_ANIMAL | M1_NOEYES | M1_NOHANDS | M1_STALK | M1_FLY,
X	  M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE },
X	{ "trapper", S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_DGST, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  40, 350, 0, MS_SILENT,
X	  M1_BIG | M1_ANIMAL | M1_NOEYES | M1_NOHANDS | M1_STALK,
X	  M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE },
X/*	unicorns	*/
X	{ "white unicorn", S_UNICORN, 4, 24, 2, 70, 7, (G_GENO | 2),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, M1_BIG | M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE },
X	{ "grey unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, M1_BIG | M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE },
X	{ "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1),
X	  { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_NEIGH, M1_BIG | M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X	  M2_WANDER | M2_STRONG | M2_HERBIVORE },
X/*	vortices	*/
X	{ "fog cloud",	S_VORTEX, 3,  1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES, M2_HOSTILE |
X	  M2_NOLIMBS },
X	{ "dust vortex", S_VORTEX, 4, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_BLND, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES, M2_HOSTILE |
X	  M2_NOLIMBS },
X	{ "energy vortex", S_VORTEX, 6, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_ELEC, 1, 6 }, { AT_ENGL, AD_DREN, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_ELEC_RES,
X	  M2_HOSTILE | M2_NOLIMBS },
X	{ "ice vortex", S_VORTEX, 5, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_COLD, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES,
X	  M2_HOSTILE | M2_NOLIMBS },
X	{ "steam vortex", S_VORTEX, 7, 22, 2, 30, 0,
X	  (G_HELL | G_GENO | G_NOCORPSE | 2),
X	  { { AT_ENGL, AD_FIRE, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_HOSTILE | M2_NOLIMBS },
X	{ "fire vortex", S_VORTEX, 8, 22, 2, 30, 0,
X	  (G_HELL | G_GENO | G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_FIRE, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FIRE_RES,
X	  M2_HOSTILE | M2_NOLIMBS },
X/*	worms	*/
X#ifdef WORM
X	{ "baby long worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_ANIMAL | M1_NOHANDS, M2_HOSTILE |
X	  M2_NOLIMBS | M2_CARNIVORE },
X#endif
X	{ "baby purple worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_SILENT, M1_ANIMAL | M1_NOHANDS, M2_HOSTILE |
X	  M2_NOLIMBS | M2_CARNIVORE },
X#ifdef WORM
X	{ "long worm", S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT,
X	  M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_NOLIMBS | M2_CARNIVORE },
X#endif
X	{ "purple worm", S_WORM, 15, 9, 6, 20, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 2, 8 }, { AT_ENGL, AD_DGST, 1, 10 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 70, 700, 0, MS_SILENT,
X	  M1_BIG | M1_ANIMAL | M1_NOHANDS | M1_EGGS,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_NOLIMBS | M2_CARNIVORE },
X/*	xan	*/
X	{ "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
X	  { { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  30, 300, 0, MS_BUZZ, M1_VSMALL | M1_FLY | M1_ANIMAL | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE },
X/*	yellow light	*/
X	{ "yellow light", S_YLIGHT,  3, 15, 0, 0, 0, (G_GENO | 4),
X	  { { AT_EXPL, AD_BLND, 10, 20 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  1, 10, 0, MS_SILENT, M1_FLY | M1_NOHANDS, M2_HOSTILE | M2_NOLIMBS },
X/*	zruty	*/
X	{ "zruty", S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO | 2),
X	  { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X	    { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X	  60, 600, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X/*	Apes	*/
X	{ "ape", S_APE, 4, 12, 6, 0, 0, (G_GENO | G_SGROUP | 2),
X	  { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X	    { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_GROWL, M1_BIG | M1_ANIMAL | M1_HUMANOID,
X	  M2_STRONG | M2_CARNIVORE },
X	{ "carnivorous ape", S_APE, 5, 12, 6, 0, 0, (G_GENO | 1),
X	  { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X	    { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X	  55, 550, 0, MS_GROWL, M1_BIG | M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE },
X/*	Bats	*/
X	{ "bat", S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SQEEK, M1_VSMALL | M1_FLY | M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_CARNIVORE },
X	{ "giant bat", S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 30, 0, MS_SQEEK, M1_FLY | M1_ANIMAL | M1_NOHANDS,
X	  M2_WANDER | M2_HOSTILE | M2_CARNIVORE },
X	{ "vampire bat", S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2),
X	  { { AT_BITE, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRST, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  3, 20, 0, MS_SQEEK, M1_VSMALL | M1_FLY | M1_ANIMAL | M1_UNDEAD |
X	  M1_NOHANDS | M1_POIS | M1_REGEN, M2_HOSTILE },
X/*	Centaurs	*/
X	{ "plains centaur", S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_SILENT, M1_BIG | M1_COLLECT | M1_GREEDY, M2_STRONG },
X	{ "forest centaur", S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    NO_ATTK, NO_ATTK, NO_ATTK },
X	  55, 600, 0, MS_SILENT, M1_BIG | M1_COLLECT | M1_GREEDY, M2_STRONG },
X	{ "mountain centaur", S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
X	    { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X	  55, 500, 0, MS_SILENT, M1_BIG | M1_COLLECT | M1_GREEDY, M2_STRONG },
X/*	Dragons 	*/
X	{ "baby grey dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby red dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_FIRE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby white dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_COLD_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby blue dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_ELEC_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby green dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_POIS |
X	  M1_POIS_RES, M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby orange dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_SLEE_RES,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby black dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "baby yellow dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X	  { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  50, 500, 0, MS_ROAR,
X	  M1_BIG | M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X	  M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "grey dragon", S_DRAGON, 10, 9, -1, 20, 4, (G_GENO | 1),
X	  { { AT_BREA, AD_MAGM, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "red dragon", S_DRAGON, 10, 9, -1, 20, -4, (G_GENO | 1),
X	  { { AT_BREA, AD_FIRE, 6, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_FIRE_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "orange dragon", S_DRAGON, 10, 9, -1, 20, 5, (G_GENO | 1),
X	  { { AT_BREA, AD_SLEE, 4, 25 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_SLEE_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "white dragon", S_DRAGON, 10, 9, -1, 20, -5, (G_GENO | 1),
X	  { { AT_BREA, AD_COLD, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_COLD_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "black dragon", S_DRAGON, 10, 9, -1, 20, -6, (G_GENO | 1),
X	  { { AT_BREA, AD_DISN, 4, 10 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "blue dragon", S_DRAGON, 10, 9, -1, 20, -7, (G_GENO | 1),
X	  { { AT_BREA, AD_ELEC, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_ELEC_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "green dragon", S_DRAGON, 10, 9, -1, 20, 6, (G_GENO | 1),
X	  { { AT_BREA, AD_DRST, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_POIS | M1_POIS_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X	{ "yellow dragon", S_DRAGON, 10, 9, -1, 20, 7, (G_GENO | 1),
X	  { { AT_BREA, AD_ACID, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X	    { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X	  150, 1500, 0, MS_ROAR, M1_BIG | M1_FLY | M1_NOHANDS | M1_EGGS |
X	  M1_POIS | M1_STON_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE },
X/*	Elementals	*/
X	{ "air elemental", S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_ENGL, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FLY,
X	  M2_STRONG | M2_NOLIMBS },
X	{ "fire elemental", S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_FIRE, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FLY | M1_FIRE_RES,
X	  M2_STRONG | M2_NOLIMBS },
X	{ "earth elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT, 
X	  M1_BIG | M1_WALLWALK | M1_NOEYES | M1_NOHANDS | M1_POIS_RES |
X	  M1_STON_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE },
X	{ "water elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X	  { { AT_CLAW, AD_PHYS, 5, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  0, 0, 0, MS_SILENT,
X	  M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_SWIM,
X	  M2_STRONG | M2_NOLIMBS },
X/*	Fungi	*/
X	{ "violet fungus", S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 2),
X	  { { AT_TUCH, AD_PHYS, 1, 4 }, { AT_TUCH, AD_STCK, 0, 0 },
X	    NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_SILENT, M1_VSMALL |
X	  M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
X	  M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X	{ "brown mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, M1_VSMALL | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS_RES | M1_COLD_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X	{ "yellow mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_STUN, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, M1_VSMALL | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X	{ "green mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_ACID, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, M1_VSMALL | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS | M1_STON_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X	{ "red mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_FIRE, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  5, 30, 0, MS_SILENT, M1_VSMALL | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS_RES | M1_FIRE_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE },
X/*	Gnomes	*/
X	{ "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
X	  { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  10, 100, 0, MS_ORC, M1_HUMANOID | M1_COLLECT, 0 },
X	{ "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
X	  { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 120, 0, MS_ORC, M1_HUMANOID | M1_COLLECT | M1_LORD, 0 },
X	{ "gnome king", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
X	  { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  20, 150, 0, MS_ORC, M1_HUMANOID | M1_COLLECT | M1_PRINCE, 0 },
X	{ "gnomish wizard", S_GNOME, 3, 10, 4, 10, 0, (G_GENO | 1),
X	  { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  15, 120, 0, MS_ORC, M1_HUMANOID | M1_MAGIC, 0 },
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	  30, 300, 0, MS_GRUNT, M1_BIG | M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE },
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, M1_BIG | M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	   M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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, M1_BIG | M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	   M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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, M1_BIG | M1_HUMANOID | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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,
X	  M1_BIG | M1_HUMANOID | M1_FIRE_RES | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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,
X	  M1_BIG | M1_HUMANOID | M1_COLD_RES | M1_COLLECT | M1_JEWELS,
X	  M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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, M1_BIG | M1_FLY | M1_HUMANOID | M1_MAGIC |
X	  M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY },
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, M1_BIG | M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE },
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, M1_BIG | M1_ANIMAL | M1_HUMANOID,
X	  M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE },
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,
X	  M1_BIG | M1_ANIMAL | M1_FLY | M1_SEE_INVIS | M1_STALK,
X	  M2_WANDER | M2_HOSTILE | M2_STRONG },
X/*	Jellies 	*/
X	{ "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
X	  { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS |
X	  M1_POIS_RES | M1_COLD_RES,
X	  M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS },
X	{ "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
X	  { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT,
X	  M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS | M1_STON_RES,
X	  M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS },
X	{ "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
X	  { { AT_ENGL, AD_ACID, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X	  2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS |
X	  M1_STON_RES, M2_HOSTILE | M2_OMNIVORE | M2_NOLIMBS | M2_AMORPHOUS },
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	  20, 200, 0, MS_ARREST, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE },
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	  20, 200, 0, MS_ARREST, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG },
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	  20, 200, 0, MS_ARREST, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG },
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	  20, 200, 0, MS_ARREST, M1_HUMANOID | M1_COLLECT,
X	  M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG },
X#endif
END_OF_FILE
if test 41770 -ne `wc -c <'src/monst.c1'`; then
    echo shar: \"'src/monst.c1'\" unpacked with wrong size!
fi
# end of 'src/monst.c1'
fi
if test -f 'src/music.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/music.c'\"
else
echo shar: Extracting \"'src/music.c'\" \(10776 characters\)
sed "s/^X//" >'src/music.c' <<'END_OF_FILE'
X/*	SCCS Id: @(#)music.c	3.0	88/10/22
X/* 	Copyright (c) 1989 by Jean-Christophe Collet */
X/* NetHack may be freely redistributed.  See license for details. */
X
X/*
X * This file contains the different functions designed to manipulate the
X * musical instruments and their various effects.
X *
X * Actually the list of instruments / effects is :
X *
X * Flute		may calm snakes if player has enough dexterity
X * Magic flute		may put monsters to sleep:  area of effect depends
X *			on player level.
X * Horn			Will awaken monsters:  area of effect depends on player
X *			level.  May also scare monsters.
X * Fire horn		Acts like a wand of fire.
X * Frost horn		Acts like a wand of cold.
X * Bugle		Will awaken soldiers (if any):  area of effect depends
X *			on player level.
X * Harp			May calm nymph if player has enough dexterity.
X * Magic harp		Charm monsters:  area of effect depends on player
X *			level.
X * Drum			Will awaken monsters like the horn.
X * Drum of earthquake	Will initiate an earthquake whose intensity depends
X *			on player level.  That is, it creates ramdom pits
X *			called here chasms.
X */
X
X
X#include "hack.h"
X
X#ifdef MUSIC
X
X/*
X * Wake every monster in range...
X */
X
Xstatic void
Xawaken_monsters(distance)
Xint distance;
X{
X	register struct monst *mtmp = fmon;
X
X	while(mtmp) {
X		if (dist(mtmp->mx, mtmp->my) < distance/3) {
X			/* May scare some monsters */
X			if (!resist(mtmp, SCROLL_SYM, 0, NOTELL))
X			  mtmp->mflee = 1;
X		} else if (dist(mtmp->mx, mtmp->my) < distance) {
X			mtmp->msleep = 0;
X			mtmp->mfroz = 0;
X		}
X		mtmp = mtmp->nmon;
X	}
X}
X
X/*
X * Make monsters fall asleep.  Note that they may resist the spell.
X */
X
Xstatic void
Xput_monsters_to_sleep(distance)
Xint distance;
X{
X	register struct monst *mtmp = fmon;
X
X	while(mtmp) {
X		  if (dist(mtmp->mx, mtmp->my) < distance)
X		    if(!mtmp->mfroz && !resist(mtmp, WAND_SYM, 0, NOTELL))
X		      mtmp->mfroz = 1;
X		mtmp = mtmp->nmon;
X	}
X}
X
X/*
X * Charm snakes in range.  Note that the snakes are NOT tamed.
X */
X
Xstatic void
Xcharm_snakes(distance)
Xint distance;
X{
X	register struct monst *mtmp = fmon;
X
X	while (mtmp) {
X		if (mtmp->data->mlet == S_SNAKE && dist(mtmp->mx, mtmp->my) < distance) {
X			mtmp->mpeaceful = 1;
X			if (cansee(mtmp->mx, mtmp->my))
X			  pline("%s freezes and sways with the music, then seems quieter.",defmonnam(mtmp));
X		}
X		mtmp = mtmp->nmon;
X	}
X}
X
X/*
X * Calm nymphs in range.
X */
X
Xstatic void
Xcalm_nymphs(distance)
Xint distance;
X{
X	register struct monst *mtmp = fmon;
X
X	while (mtmp) {
X		if (mtmp->data->mlet == S_NYMPH && dist(mtmp->mx, mtmp->my) < distance) {
X			mtmp->mpeaceful = 1;
X			if (cansee(mtmp->mx, mtmp->my))
X			  pline("%s listens cheerfully to the music, then seems quieter.",defmonnam(mtmp));
X		}
X		mtmp = mtmp->nmon;
X	}
X}
X
X/* Awake only soldiers of the level. */
X
Xstatic void
Xawaken_soldiers() {
X#ifdef ARMY
X#define IS_SOLDIER(dat)	((int)((dat) - mons) >= PM_UNARMORED_SOLDIER && \
X			 (int) ((dat) - mons) <= PM_CAPTAIN)
X	register struct monst *mtmp = fmon;
X
X	while(mtmp) {
X		if (IS_SOLDIER(mtmp->data))
X			mtmp->mpeaceful = mtmp->msleep = mtmp->mfroz = 0;
X		mtmp = mtmp->nmon;
X	}
X#endif /* ARMY /**/
X}
X
X/* Charm monsters in range.  Note that they may resist the spell. */
X
Xstatic void
Xcharm_monsters(distance)
Xint distance;
X{
X	register struct monst *mtmp = fmon;
X
X	while(mtmp) {
X		if(dist(mtmp->mx, mtmp->my) <= distance)
X		    if(!resist(mtmp, SCROLL_SYM, 0, NOTELL))
X			(void) tamedog(mtmp, (struct obj *) 0);
X		mtmp = mtmp->nmon;
X	}
X
X}
X
X/* Generate earthquake :-) of desired force.
X * That is:  create random chasms (pits).
X */
X
Xstatic void
Xdo_earthquake(force)
Xint force;
X{
X	register int x,y;
X	struct monst *mtmp;
X	struct trap *chasm;
X	int start_x, start_y, end_x, end_y;
X
X	start_x = u.ux - (force * 2);
X	start_y = u.uy - (force * 2);
X	end_x = u.ux + (force * 2);
X	end_y = u.uy + (force * 2);
X	if (start_x < 1) start_x = 1;
X	if (start_y < 1) start_y = 1;
X	if (end_x >= COLNO) end_x = COLNO - 1;
X	if (end_y >= ROWNO) end_y = ROWNO - 1;
X	for (x=start_x; x<=end_x; x++)
X	  for (y=start_y; y<=end_y; y++)
X	    if (!rn2(14 - force)) {
X		    switch (levl[x][y].typ) {
X#ifdef FOUNTAINS
X			  case FOUNTAIN : /* Make the fountain disappear */
X			    if (cansee(x,y))
X			      pline("The fountain falls into a chasm.");
X			    goto do_pit;
X#endif
X#ifdef SINKS
X			  case SINK :
X			    if (cansee(x,y))
X			      pline("The kitchen sink falls into a chasm.");
X			    goto do_pit;
X#endif
X#ifdef ALTARS
X			  case ALTAR :
X			    if (cansee(x,y))
X			      pline("The altar falls into a chasm.");
X			    goto do_pit;
X#endif
X#ifdef THRONES
X			  case THRONE :
X			    if (cansee(x,y))
X			      pline("The throne falls into a chasm.");
X				/* Falls into next case */
X#endif
X			  case ROOM :
X			  case CORR : /* Make a pit */
Xdo_pit:			    chasm = maketrap(x,y,PIT);
X			    chasm->tseen = 1;
X
X			    levl[x][y].doormask = 0;
X
X			    /* We have to check whether monsters or player
X			       fall in a chasm... */
X
X			    if (levl[x][y].mmask) {
X				mtmp = m_at(x,y);
X				if(!is_flyer(mtmp->data)) {
X				    mtmp->mtrapped = 1;
X				    if(cansee(x,y))
X					pline("%s falls into a chasm!",
X						Monnam(mtmp));
X				    else if (flags.soundok && humanoid(mtmp->data))
X					You("hear a scream!");
X				    if ((mtmp->mhp -= rnd(6)) <= 0) {
X					int saved_conf = u.umconf;
X
X					if(!cansee(x,y))
X					    pline("It has died!");
X					else {
X					    You("destroy %s!",
X					    mtmp->mtame ?
X						a_monnam(mtmp, "poor") :
X						mon_nam(mtmp));
X					}
X					xkilled(mtmp,0);
X					u.umconf = saved_conf;
X				    }
X				}
X			    } else if (x == u.ux && y == u.uy) {
X				    if (Levitation
X#ifdef POLYSELF
X					|| is_flyer(uasmon)
X#endif
X					) {
X					    pline("A chasm opens up under you!");
X					    You("don't fall in!");
X				    } else {
X					    You("fall into a chasm!");
X					    u.utrap = rn1(6,2);
X					    u.utraptype = TT_PIT;
X					    losehp(rnd(6),"fall into a chasm");
X					    selftouch("Falling, you");
X				    }
X			    } else
X				newsym(x,y);
X			    break;
X			  case DOOR : /* Make the door collapse */
X			    if (levl[x][y].doormask == D_NODOOR) break;
X			    if (cansee(x,y))
X				pline("The door collapses.");
X			    levl[x][y].doormask = D_NODOOR;
X			    if (!levl[x][y].mmask && !(x == u.ux && y == u.uy))
X				newsym(x,y);
X			    break;
X		    }
X	    }
X}
X
X/*
X * The player is trying to extract something from his/her instrument.
X */
X
Xstatic int
Xdo_improvisation(instr)
Xstruct obj *instr;
X{
X	int damage;
X
X	if (Confusion)
X	  pline("What you produce is quite far from music...");
X	else
X	  You("start playing the %s.", xname(instr));
X	switch (instr->otyp) {
X	      case FLUTE:	/* May charm snakes */
X		if (rn2(ACURR(A_DEX)) + u.ulevel > 25)
X		  charm_snakes((int)u.ulevel*3);
X		break;
X	      case MAGIC_FLUTE: /* Make monster fall asleep */
X		You("produce soft music.");
X		put_monsters_to_sleep((int)u.ulevel*5);
X		break;
X	      case HORN:	/* Awaken monsters or scare monsters */
X		You("produce a frightful, grave sound.");
X		awaken_monsters((int)u.ulevel*30);
X		break;
X	      case FROST_HORN:	/* Idem wand of cold */
X	      case FIRE_HORN:	/* Idem wand of fire */
X		if (instr->spe > 0) {
X			instr->spe--;
X			if (!getdir(1)) {
X				if (!Blind)
X				    pline("The %s glows then fades.", xname(instr));
X			} else {
X				if (!u.dx && !u.dy && !u.dz) {
X					if((damage = zapyourself(instr)))
X					  losehp(damage,"self-inflicted injury");
X					makeknown(instr->otyp);
X					return(2);
X				}
X				buzz((instr->otyp == FROST_HORN) ? 3 : 1, rn1(6,6), u.ux, u.uy, u.dx, u.dy);
X				makeknown(instr->otyp);
X				return(2);
X			}
X		}
X		break;
X	      case BUGLE:	/* Awaken & attract soldiers */
X		You("extract a loud noise from the %s.",xname(instr));
X		awaken_soldiers();
X		break;
X	      case HARP:	/* May calm Nymph */
X		if (rn2(ACURR(A_DEX)) + u.ulevel > 25)
X		  calm_nymphs((int)u.ulevel*3);
X		break;
X	      case MAGIC_HARP:	/* Charm monsters */
X		if (instr->spe > 0) {
X			pline("The %s produces very attractive music.",xname(instr));
X			instr->spe--;
X			charm_monsters(((int)u.ulevel - 1) / 3 + 1);
X		}
X		break;
X	      case DRUM:	/* Awaken monsters */
X		You("beat a deafening row!");
X		awaken_monsters((int)u.ulevel * 40);
X		break;
X	      case DRUM_OF_EARTHQUAKE:	/* create several pits */
X		if (instr->spe > 0) {
X			You("produce a heavy, thunderous rolling!");
X			pline("The entire dungeon is shaking around you!");
X			do_earthquake(((int)u.ulevel - 1) / 3 + 1);
X			instr->spe--;
X			makeknown(DRUM_OF_EARTHQUAKE);
X		}
X		break;
X	      default:
X		impossible("What a weird instrument (%d)!",instr->otyp);
X		break;
X	}
X	return (2);		/* That takes time */
X}
X
X/*
X * So you want music...
X */
X
Xint
Xdo_play_instrument(instr)
Xstruct obj *instr;
X{
X#ifdef STRONGHOLD
X    char buf[BUFSZ], *s, c = 'y';
X    int x,y;
X    boolean ok;
X
X    if (instr->otyp != DRUM && instr->otyp != DRUM_OF_EARTHQUAKE) {
X	pline("Improvise? ");
X	c = yn();
X    }
X    if (c == 'n') {
X	pline("What tune are you playing? [what 5 notes] ");
X	getlin(buf);
X	for(s=buf;*s;s++)
X	    *s = (*s >='a' && *s<='z') ? 'A' + *s - 'a' : *s;
X	You("extract a strange sound from the %s!",xname(instr));
X	/* Check if there was the Stronghold drawbridge near
X	 * and if the tune conforms to what we're waiting for.
X	 */
X	if (dlevel == stronghold_level)
X	    if (!strcmp(buf,tune)) {
X		/* Search for the drawbridge */
X		for(y=u.uy-1; y<=u.uy+1; y++)
X		    for(x=u.ux-1;x<=u.ux+1;x++)
X			if (find_drawbridge(&x,&y)) {
X			    if (levl[x][y].typ == DRAWBRIDGE_DOWN)
X				close_drawbridge(x,y);
X			    else
X				open_drawbridge(x,y);
X			    return 0;
X			}
X	    } else if (flags.soundok) {
X		/* Okay, it wasn't the right tune, but perhaps
X		 * we can give the player some hints like in the
X		 * Mastermind game */
X		ok = FALSE;
X		for(y = u.uy-1; y <= u.uy+1 && !ok; y++)
X		    for(x = u.ux-1; x <= u.ux+1 && !ok; x++)
X			if(IS_DRAWBRIDGE(levl[x][y].typ) ||
X			   is_drawbridge_wall(x,y) >= 0)
X				ok = TRUE;
X		if (ok) { /* There is a drawbridge near */
X		    int tumblers, gears;
X		    boolean matched[5];
X
X		    tumblers = gears = 0;
X		    for(x=0; x < 5; x++)
X			matched[x] = FALSE;
X
X		    for(x=0; x < strlen(buf); x++)
X			if(x < 5) {
X			    if(buf[x] == tune[x]) {
X				gears++;
X				matched[x] = TRUE;
X			    } else
X				for(y=0; y < 5; y++)
X				    if(!matched[y] &&
X				       buf[x] == tune[y] &&
X				       buf[y] != tune[y]) {
X					tumblers++;
X					matched[y] = TRUE;
X					break;
X				    }
X			}
X		    if(tumblers)
X			if(gears)
X			You("hear %d tumbler%s click and %d gear%s turn.",
X			    tumblers, (tumblers > 1 ? "s" : ""),
X			    gears, (gears > 1 ? "s" : ""));
X			else
X			    You("hear %d tumbler%s click.",
X			    tumblers, (tumblers > 1 ? "s" : ""));
X		    else if(gears)
X			You("hear %d gear%s turn.",
X			gears, (gears > 1 ? "s" : ""));
X		}
X	    }
X	return 1;
X    } else
X#endif /* STRONGHOLD /**/
X	    return do_improvisation(instr);
X}
X
X#endif /* MUSIC /**/
END_OF_FILE
if test 10776 -ne `wc -c <'src/music.c'`; then
    echo shar: \"'src/music.c'\" unpacked with wrong size!
fi
# end of 'src/music.c'
fi
echo shar: End of archive 5 \(of 38\).
cp /dev/null ark5isdone
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 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 38 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