billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 9, Issue 25
Archive-name: NetHack3/Patch7y
Patch-To: NetHack3: Volume 7, Issue 56-93
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 25 (of 30)."
# Contents: Install.dos src/monst.c1
# Wrapped by billr@saab on Wed Feb 21 10:04:47 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Install.dos' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'Install.dos'\" to \"'Install.dos.orig'\"
mv -f 'Install.dos' 'Install.dos.orig'
fi
echo shar: Extracting \"'Install.dos'\" \(16432 characters\)
sed "s/^X//" >'Install.dos' <<'END_OF_FILE'
X Instructions for compiling and installing NetHack 3.0
X on an MS-DOS, TOS, or OS/2 system
X =====================================================
X (or, How to make PC, ST, and OS/2 NetHack 3.0)
X Last revision: 17 Feb 1990
X
X (Credit for a runnable full PC NetHack 3.0 goes to the overlay team of
X Pierre Martineau, Stephen Spackman, Norm Meluch, and Kevin Smolkowski,
X who built on the work of Steve Creps and Mike Threepoint. Credit for
X ST and OS/2 NetHack 3.0 goes to Eric Smith and Timo Hakulinen,
X respectively.)
X
X1. Make sure all the NetHack files are in the appropriate directory structure.
X You should have a main directory with subdirectories src, include, auxil,
X others, amiga, mac, and vms. If you do not follow this structure, the
X Makefile will not function properly.
X
X All the shared and UNIX-specific .c files and the source Makefile belong
X in src; all the PC .c files and make files belong in others; all the .h
X files belong in include; other assorted files belong in auxil. We will
X not need any of the files from the amiga, mac, and vms directories.
X
X If you downloaded or ftp'd the sources from a UNIX system, the lines
X will probably end in UNIX-style newlines, instead of the carriage
X return and line feed pairs used by DOS and OS/2. Turbo C 2.0 in
X particular dislikes these; you'll have to convert them (with a utility
X like Rahul Dhesi's "flip"). Also, every file should end with an empty
X line, because both Microsoft C and MASM have a habit of ignoring the
X last line of each file. (TOS compilers generally don't have either
X problem).
X
X2. Move the .c files from the others directory to your src directory
X based on the following decisions. You will probably want to include
X all of these files.
X
X You will definitely need pc*.c and msdos.c.
X
X The file termcap.uu is the fixed version of the Fred Fish termcap library.
X You will need to run a uudecode utility on it to generate the file
X termcap.arc. termcap.arc contains several files of termcap routines.
X Using them with NetHack involves very little knowledge of the UNIX concept
X of a termcap database; mostly you need to know enough to set a TERM
X environment variable. You can unarc termcap.arc here in the others
X directory, but if you are going to use it, it is probably best to unarc a
X copy in the src directory. That way you will not miss copying any
X files over. Wherever you unarc it, get rid of the included makefile
X since a better version has been provided as Makefile.lib.
X
X random.c is only needed if you want the high-quality random number
X generation routines.
X
X trampoli.c and ovlmgr.obj files are needed for the MS-DOS overlays.
X The file ovlmgr.uu (MS-DOS overlay manager) is the uuencoded assembled
X object module for the overlay manager in case you do not have MASM.
X You will need to run a uudecode utility on this file too, to generate
X ovlmgr.obj.
X
X TOS users should use others/lev_lex.c instead of src/lev_lex.c.
X MS-DOS users should be able to use either, but the one in src
X is smaller. If you have flex or some other lex work-alike, use
X that to produce lev_lex.c from lev_comp.l.
X
X Obviously, TOS users don't need the MS-DOS overlay functions.
X Moreover, the GCC "curses" library has termcap routines built
X in, so if you have this you don't need termcap.arc.
X
X3. Now look at Makefile.* in your others directory. Consult the list below
X and pick out the makefile most appropriate to your system. Rename this
X file to "Makefile" (no extension), and move it into your src directory.
X
X DOS:
X Microsoft C 5.1 Makefile.ovl
X Microsoft C 4.0 Makefile.pc
X Turbo C 2.0 Makefile.tcc
X OS/2:
X Microsoft C 5.1 Makefile.os2
X TOS:
X GCC 1.34 Makefile.st
X
X The PC NetHack makefiles are set up for NDMAKE, a public domain
X "make" utility. Both Microsoft's and Borland's "make" leave much to
X be desired. It is worth the extra effort to get NDMAKE if you don't
X already have it. Among other things, NDMAKE automatically generates
X link response files when the link command involves so many objects
X that the command would become longer than DOS can handle. If you must
X use Microsoft's or Borland's "make", you'll need to edit the makefile
X into a form your make can use, and add instructions to generate a link
X response file.
X
X The ST NetHack makefile should work with either the widely available
X PD make, or (much better) GNU Make.
X
X If you're using a different compiler, you will have to adapt one of
X the makefiles to your needs. In particular, change the CC and CFLAGS
X macros to your C compiler's file name and the parameters to pass it.
X
X For DOS users, if you are going to be constructing the Fred Fish termlib
X you will need the Makefile.lib. Copy this to your source directory too,
X and do not change its name.
X
X Makefile.top in the top directory and Makefile.aux(il) in the
X auxil directory are for UNIX NetHack. You may delete them.
X
X4. Now go to the include subdirectory to edit a couple of the header files
X there.
X
X First edit config.h according to the comments to match your system and
X desired set of features. Mostly you need to check the WIZARD option,
X make sure the HACKDIR is set properly, and check TERMLIB and COMPRESS.
X
X Also edit pcconf.h for PC or OS/2 NetHack, or tosconf.h for ST NetHack.
X pcconf.h should not need much editing if you are including termcap.uu,
X random.c and ovlmgr.uu. If you are not including any of these you will
X need to comment out TERMLIB, RANDOM, and/or OVERLAY respectively.
X
X Commenting out the #define TERMLIB in pcconf.h/tosconf.h to disable
X use of termcap routines (relying on the ANSI_DEFAULT feature) will make
X your job a bit easier. However, you can compile with both and simply
X not set your TERM variable if you do not wish to use the termcap file
X settings.
X
X ST and OS/2 NetHackers can skip to the next section, since the entire game
X will fit in less than one megabyte.
X
X PC NetHackers:
X
X To compile under MS-DOS, you must either produce an overlaid executable or
X make some very difficult decisions about which features to include.
X
X The base size of a PC NetHack executable, with no extra features or
X overlays, will be around 570 kilobytes. Anything over 590K is likely not
X to work. Here's an incomplete and outdated list of the approximate costs
X of various additional features in terms of executable size, using
X Microsoft C:
X
X WIZARD 3K
X LOGFILE
X NEWS
X COMPRESS 2K
X ZEROCOMP
X CHDIR
X
X POLYSELF 31K
X THEOLOGY 11K
X SOUNDS 6K
X KICK
X
X THRONES 3K
X FOUNTAINS 2K
X SINKS 5K
X ALTARS 4K
X
X WALLIFIED_MAZE 1K
X REINCARNATION 7K
X STRONGHOLD 13K
X
X ORACLE
X MEDUSA
X KOPS
X ARMY 1K
X WORM
X GOLEMS 2K
X INFERNO
X SEDUCE
X TOLKIEN
X PROBING 1K
X WALKIES 4K
X SHIRT
X MUSIC 6K
X TUTTI_FRUTTI
X SPELLS 10K
X NAMED_ITEMS
X
X ELBERETH 3K
X EXPLORE_MODE 2K
X HARD
X
X REDO 1K
X COM_COMPL 1K
X CLIPPING
X
X OVERLAY 0K
X DGK 7K
X TERMLIB
X RANDOM 1K
X SHELL
X TEXTCOLOR 1K
X
X Using Microsoft C and overlays, we've managed to enable everything.
X Unfortunately, the overlay manager doesn't work with Turbo C. Using
X Turbo C, we eked by with just WIZARD, ZEROCOMP, BITFIELDS, ELBERETH,
X HARD, REDO, DGK and TEXTCOLOR. There's very little leeway for nifty
X features without an overlay manager.
X
X5. If you're using a compiler not in the list in step 3, you may want to look
X through system.h, in the include directory. This file matches the return
X and parameter types for system calls and library routines with various
X flavors of compilers and operating systems. Leaving this file alone is
X unlikely to cause problems, but if you get compile errors with any
X functions in the standard library, it's worth checking the declarations
X there.
X
X6. If you want to change the high score list behavior, examine the top of
X topten.c, in the src directory. You may want to change the definitions of
X PERSMAX, POINTSMIN, and ENTRYMAX. I set POINTSMIN to 51 and ENTRYMAX to
X 50 to keep the size of the score list down.
X
X7. Go to the src directory and edit the top of your Makefile. Be sure the
X directory you want the game installed in actually exists.
X
X If you elected not to use the high-quality BSD random number routines by
X commenting out RANDOM in pcconf.h or tosconf.h, comment out (or set equal
X to nothing) the RANDOM macro in your Makefile.
X
X If you elected to use Fred Fish's termcap library (bundled in as
X termcap.arc), you will have to generate termcap.lib from those sources
X by typing make -f makefile.lib termlib.lib.
X DOS users must set the TERMLIB option in Makefile.ovl(msc) to link in
X the resulting termlib.lib.
X
X If you're using Makefile.ovl and you have Microsoft's Macro Assembler
X version 5.1, you may want to enable the option in the make file to rebuild
X ovlmgr.obj, although a ready-made object file is provided for those of you
X without.
X
X If you are recompiling after patching your sources, or if you got your
X files from somewhere other than the official distribution, "touch
X makedefs.c" to ensure that certain files (onames.h and pm.h) are remade,
X lest potentially troublesome timestamps fool "make".
X
X8. Now, enter "make all", and take a long siesta; your computer will be
X occupied for a long time. If all goes well, you will get an executable.
X If you tried to compile in too many features, you will probably get a
X dysfunctional executable, and will have to start over.
X
X Also, as of pl7 with OVERLAY you might need to use MAKE45L.EXE for your
X compile. The Makefile.ovl with all of its OVLx funness is a bit much
X for even generic NDMAKE45.
X
X Hint: If you're short on memory, you might enter "make -n all
X >script.bat", and then in DOS enter "script", or in TOS use the Gulam
X command "source script.bat". GCC users will be short on memory if
X they only have 2 megabytes. Indeed, some files will not compile in
X 2 megabytes with the GCC 1.36; for these you'll either have to turn
X off the -O option or use an earlier version of the GCC.
X
X9. Make sure the support files-- data, rumors, cmdhelp, opthelp, help, hh,
X history, license, and oracles (if ORACLES was #define'd)-- were copied
X to the game directory. If not, move them there from the auxil directory
X yourself. rumors can be created manually by entering "makedefs -r";
X data by entering "makedefs -d".
X
X If you compiled in the compiled levels (if STRONGHOLD was #define'd), make
X sure castle, tower?, and possibly endgame are there, too. They can be
X created manually by entering "lev_comp filename.des", where filename.des
X is the appropriate description file (found in the auxil directory).
X
X10. Go to the others directory. Copy NetHack.cnf, or Atari.cnf for TOS, to
X your game directory as "NetHack.cnf". Edit it to reflect your particular
X setup and personal preferences, following the comments.
X
X If you compiled in the TERMLIB feature, also move the "termcap" file to
X your game directory. (Note: GCC's termcap routines have built-in
X defaults, so the termcap file is not necessary with that compiler.)
X
X To use funky graphics charaters in TOS, uudecode "atarifnt.uue" and unarc
X the resulting "atarifnt.arc". This contains a program to run that makes
X some line graphics characters available to NetHack. To use them, uncomment
X the appropriate line in your NetHack.cnf file, and run the program before
X running NetHack (you can put the program in an AUTO folder if you want).
X
X If you'll be running NetHack from a different subdirectory, you will
X want to "set HACKDIR=\games\nethack" (or whatever directory you want to
X use) now. Add it to your autoexec.bat (in DOS), if you'll be playing
X often.
X
X11. Play NetHack. If it works, you're done!
X
X
XNotes
X-----
X
X1) Save files and bones files from previous versions will not work with
X NetHack 3.0. Don't bother trying to keep them. Record (score) files
X from before 3.0 patchlevel 7 will almost work, but you need to make one
X change manually to them: At the end of each line is a word or phrase
X specifying what killed the player. Change the string to start with the
X words "killed by", "killed by a", or "killed by an" (whichever is
X appropriate). If the death was petrification, it should read "petrified
X by" instead of "killed by". Don't change "starvation", "quit", "escaped",
X or "ascended".
X
X2) To install an update of NetHack after changing something, enter "make"
X from the src directory. If you add, delete, or reorder monsters or
X objects, or you change the format of saved level files, delete any save
X and bones files. (Trying to use such files sometimes produces amusing
X confusions on the game's part, but usually crashes.)
X
X3) While making the PC and OS/2 versions, during linking the Microsoft
X Overlay Linker will need temporary storage space. Make sure you have
X about a meg of free disk where ever you have defined your temporary
X storage.
X
X4) About overlays:
X
X First and foremost: We have been developing with MSC 5.1 as a compiler
X and NDmake 4.5 as a make. NDmake is readily available on the Usenet,
X obtaining MSC might be more of a problem. MSC 5.0 is broken. You *will
X not* be able to compile the overlay version with that compiler due to
X problems with the /Gt option allowing the CONST segment to become
X > 64k when linking.
X
X Anyone who uses Turbo C is free to try to compile the game. Not only does
X TLINK not do overlays, it chokes on huge projects, so you will need to use
X some other linker, probably the Microsoft Overlay Linker. Also,
X you will more than likely have to find a way to tell the compiler to
X keep most of your data out of the default data segment (whence the mystic
X /Gt24 for MSC in Makefile.ovl). Certain other problems can probably be
X anticipated. Feel free to try other compilers and linkers and please do
X inform us if you succeed.
X
X If you use the custom overlay manager, ovlmgr.asm, you will want to use
X Makefile.ovl. Otherwise you will have to roll your own make file;
X Makefile.ovl may serve you as a stylistic guide, but ovlmgr's optimisation
X characteristics are very different from those of (for example) the
X standard Microsoft Overlay Manager: you will find the actual partitioning
X of the overlays entirely inappropriate to a more conventional system.
X
X To make the game, follow the instructions above for arrangement of files
X from the others directory to src. If you are using the standard Microsoft
X Overlay Linker (which we have been assuming you are) you should make doubly
X certain that OVERLAY is defined in pcconf.h, since otherwise things will
X compile properly but very ugly things are likely to happen wherever
X function pointers cross overlay boundaries - the linker is a little thick
X about that. Now check the variables at the top of the makefile for
X correctness on your system. Once you have the compiler, linker, source
X files moved, and the include files configured, go to the src directory and
X type "make install".
X
X RAM requirement for the overlay version is about 550k. You can load the
X program in less RAM, but you will begin to experience a serious amount
X of disk thrashing at 530k or less. Absolute minimum will probably be in
X the neighborhood of 400-425k. You do not want to run the program like
X that! And, as always, the more free RAM the better.
X
X As of patch level 7, version 3.0 has an added feature in the Makefile. This
X feature enables a structured break up of the object modules so that we
X can link heavily used functions together without actual source code
X movement. This has provided a great speed improvement for this release.
X
X The versions of the software we used are:
X
X MS Overlay Linker 3.65
X MSC 5.1
X MASM 5.1
X
X NDMake 4.5
X
X On a 286 10MHz PC you will have nethack in about 2 - 2.5 hours.
X Hope you enjoy the game. We have worked very hard to try to bring it back
X to the PC.
END_OF_FILE
if test 16432 -ne `wc -c <'Install.dos'`; then
echo shar: \"'Install.dos'\" unpacked with wrong size!
fi
# end of 'Install.dos'
if test -f 'src/monst.c1' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'src/monst.c1'\" to \"'src/monst.c1.orig'\"
mv -f 'src/monst.c1' 'src/monst.c1.orig'
fi
echo shar: Extracting \"'src/monst.c1'\" \(39815 characters\)
sed "s/^X//" >'src/monst.c1' <<'END_OF_FILE'
X/* SCCS Id: @(#)monst.c 3.0 89/11/21
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X
X/* 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
X#ifdef C
X#undef C
X#endif
X#ifdef TEXTCOLOR
X#include "color.h"
X#define C(color) color
X#define HI_DOMESTIC WHITE /* use for player + friendlies */
X#define HI_LORD MAGENTA
X#else
X#define C(color)
X#endif
X
X#ifndef SPLITMON_2
Xstruct permonst playermon = { /* used by weapons bonus code */
X "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 45, 400, PL_NSIZ, MS_SILENT, MZ_HUMAN,
X M1_NEEDPICK | M1_HUMANOID | M1_COLLECT,
X M2_HUMAN | M2_STRONG, C(HI_DOMESTIC)
X}, *uasmon = &playermon;
X#endif /* SPLITMON_2 */
X
X/*
X * Rule #1: monsters of a given class are contiguous in the
X * mons[] array.
X *
X * Rule #2: monsters of a given class are presented in ascending
X * order of strength.
X *
X * Rule #3: monster frequency is included in the geno mask;
X * the frequency can be from 0 to 7. 0's will also
X * be skipped during generation.
X *
X * Guidelines for color assignment:
X *
X * * Use the same color for all `growth stages' of a monster (ex.
X * little dog/big dog, baby naga/full-grown naga.
X *
X * * Use colors given in names wherever possible. If the class has `real'
X * members with strong color associations, use those.
X *
X * * Favor `cool' colors for cold-resistent monsters, `warm' ones for
X * fire-resistent ones.
X *
X * * Try to reserve purple (magenta) for powerful `ruler' monsters (queen
X * bee, kobold lord, &c.).
X *
X * * Subject to all these constraints, try to use color to make as many
X * distinctions as the / command (that is, within a monster letter
X * distinct names should map to distinct colors).
X *
X * The aim in assigning colors is to be consistent enough so a player can
X * become `intuitive' about them, deducing some or all of these rules
X * unconsciously. Use your common sense.
X */
X
X#if defined(SMALLDATA) && !defined(MAKEDEFS_C)
X /* if it's for SMALLDATA, say so, right? (KL) */
Xstruct permonst *mons; /* for SMALLDATA - mons data stored in NetHack app */
X#else
X#ifndef SPLITMON_2
Xstruct permonst mons[] = {
X/* ants */
X { "giant ant", S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
X { "soldier ant", S_ANT, 3, 18, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X { { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_DRST, 3, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 2, 20, 0, MS_SILENT, MZ_TINY,
X M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
X { "fire ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
X { { AT_BITE, AD_FIRE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
X { "giant beetle", S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3),
X { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_POIS |
X M1_POIS_RES, M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
X { "killer bee", S_ANT, 1, 18, -1, 0, 0, (G_GENO | G_LGROUP | 2),
X { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
X M1_POIS | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
X { "queen bee", S_ANT, 9, 24, -4, 0, 0, (G_GENO | G_NOGEN),
X { { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
X M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_PRINCE, C(HI_LORD) },
X/* blobs */
X { "acid blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2),
X { { AT_NONE, AD_ACID, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SILENT, MZ_TINY,
X M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_SLEE_RES | M1_STON_RES |
X M1_ACID, M2_WANDER, C(GREEN) },
X { "quivering blob", S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2),
X { { AT_TUCH, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X M2_WANDER | M2_HOSTILE, C(WHITE) },
X { "gelatinous cube", S_BLOB, 6, 6, 8, 0, 0, (G_GENO | 2),
X { { AT_TUCH, AD_PLYS, 2, 4 }, { AT_NONE, AD_PLYS, 1, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_SILENT, MZ_LARGE,
X M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES |
X M1_SLEE_RES, M2_WANDER | M2_HOSTILE | M2_OMNIVORE, C(CYAN) },
X/* cockatrice */
X { "cockatrice", S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5),
X { { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
X { AT_NONE, AD_STON, 0, 0 }, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_HISS, MZ_SMALL,
X M1_ANIMAL | M1_NOHANDS | M1_POIS_RES | M1_STON_RES,
X M2_HOSTILE | M2_EGGS, C(YELLOW) },
X/* dog */
X { "little dog", S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 150, 0, MS_BARK, MZ_SMALL,
X M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X { "dog", S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 1 ,6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_BARK, MZ_MEDIUM,
X M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X { "large dog", S_DOG, 6, 15, 4, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_BARK, MZ_MEDIUM,
X M1_ANIMAL | M1_NOHANDS, M2_STRONG | M2_CARNIVORE | M2_DOMESTIC,
X C(HI_DOMESTIC) },
X { "jackal", S_DOG, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
X { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_BARK, MZ_SMALL,
X M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "jackalwere", S_DOG, 2, 12, 7, 10, -7, G_NOGEN | G_NOCORPSE,
X { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_BARK, MZ_SMALL,
X M1_NOPOLY | M1_NOHANDS | M1_POIS | M1_REGEN,
X M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "wolf", S_DOG, 5, 12, 4, 0, 0, (G_GENO | G_SGROUP | 2),
X { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_BARK, MZ_SMALL,
X M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "wolfwere", S_DOG, 5, 12, 4, 20, -7, G_NOGEN | G_NOCORPSE,
X { { AT_BITE, AD_WERE, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_BARK, MZ_MEDIUM,
X M1_NOPOLY | M1_NOHANDS | M1_POIS | M1_REGEN,
X M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "winter wolf", S_DOG, 7, 12, 4, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_COLD, 2, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK, },
X 30, 300, 0, MS_BARK, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_COLD_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(CYAN) },
X { "warg", S_DOG, 7, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2),
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 35, 350, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "hell hound pup", S_DOG, 7, 12, 4, 20, -5,
X (G_HELL | G_GENO | G_SGROUP | 1),
X { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_FIRE, 2, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_BARK, MZ_SMALL, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X M2_HOSTILE | M2_CARNIVORE, C(RED) },
X { "hell hound", S_DOG, 12, 14, 2, 20, 0, (G_HELL | G_GENO | 1),
X { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BREA, AD_FIRE, 3, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK, },
X 30, 300, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X#ifdef CHARON
X { "Cerberus", S_DOG, 12, 10, 2, 20, -7, (G_HELL | G_UNIQ | 1),
X { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BITE, AD_PHYS, 3, 6 },
X { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X 50, 350, 0, MS_BARK, MZ_LARGE,
X M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_PNAME, C(RED) },
X#endif
X/* eyes */
X { "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5),
X { { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_SILENT, MZ_SMALL,
X M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BLUE) },
X { "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
X { { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_SILENT, MZ_SMALL,
X M1_FLY | M1_NOLIMBS | M1_COLD_RES, M2_HOSTILE, C(WHITE) },
X/* felines */
X { "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 150, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X M2_WANDER | M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X { "housecat", S_FELINE, 4, 16, 5, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X { "large cat", S_FELINE, 6, 15, 4, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
X M2_STRONG | M2_CARNIVORE | M2_DOMESTIC, C(HI_DOMESTIC) },
X { "jaguar", S_FELINE, 4, 15, 6, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "tiger", S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
X { AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
X/* gremlins */
X { "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
X { AT_BITE, AD_PHYS, 1, 4 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
X 10, 30, 0, MS_LAUGH, MZ_SMALL,
X M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, C(GREEN) },
X/* humanoids */
X#ifdef TOLKIEN
X { "hobbit", S_HUMANOID, 1, 9, 7, 0, 6, (G_GENO | 2),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_HUMANOID, MZ_SMALL,
X M1_HUMANOID | M1_COLLECT, 0, C(GREEN) },
X#endif
X { "bugbear", S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_COLLECT,
X M2_STRONG, C(BROWN) },
X { "dwarf", S_HUMANOID, 2, 6, 4, 10, 4, (G_GENO | 3),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X M1_COLLECT, M2_DWARF | M2_STRONG, C(RED) },
X { "dwarf lord", S_HUMANOID, 4, 6, 4, 10, 5, (G_GENO | 2),
X { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X M1_COLLECT, M2_DWARF | M2_STRONG | M2_LORD, C(BLUE) },
X { "dwarf king", S_HUMANOID, 6, 6, 4, 20, 6, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
X M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_GREEDY | M1_JEWELS |
X M1_COLLECT, M2_DWARF | M2_STRONG | M2_PRINCE, C(HI_LORD) },
X/* imps & other minor demons/devils */
X { "manes", S_IMP, 1, 3, 7, 0, -7, (G_GENO | G_LGROUP | G_NOCORPSE | 1),
X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_CUSS, MZ_SMALL, M1_POIS, M2_STALK, C(RED) },
X { "homunculus", S_IMP, 2, 12, 6, 10, -7, (G_GENO | 2),
X { { AT_BITE, AD_SLEE, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_SILENT, MZ_TINY,
X M1_FLY | M1_POIS | M1_POIS_RES | M1_SLEE_RES, M2_STALK, C(GREEN) },
X { "lemure", S_IMP, 3, 3, 7, 0, -7,
X (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1),
X { { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_SILENT, MZ_MEDIUM, M1_POIS | M1_SLEE_RES | M1_REGEN,
X M2_HOSTILE | M2_WANDER | M2_STALK, C(BROWN) },
X { "imp", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
X { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_CUSS, MZ_TINY, M1_REGEN, M2_WANDER | M2_STALK, C(RED) },
X { "quasit", S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2),
X { { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
X { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_SILENT, MZ_SMALL,
X M1_POIS_RES | M1_REGEN, M2_STALK, C(BLUE) },
X { "tengu", S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3),
X { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_SQAWK, MZ_SMALL,
X M1_POIS_RES | M1_TPORT | M1_TPORT_CONTROL, M2_STALK, C(CYAN) },
X/* jellies */
X { "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
X { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 2, 20, 0, MS_SILENT, MZ_MEDIUM,
X M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
X M2_HOSTILE | M2_OMNIVORE, C(BLUE) },
X { "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
X { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 2, 20, 0, MS_SILENT, MZ_MEDIUM,
X M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
X M2_HOSTILE | M2_OMNIVORE, C(GREEN) },
X { "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
X { { AT_ENGL, AD_ACID, 3, 6 }, { AT_NONE, AD_ACID, 0, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 2, 20, 0, MS_SILENT, MZ_MEDIUM,
X M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_STON_RES | M1_ACID,
X M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
X/* kobolds */
X { "kobold", S_KOBOLD, 0, 6, 7, 0, -2, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X M2_HOSTILE, C(BROWN) },
X { "large kobold", S_KOBOLD, 1, 6, 6, 0, -3, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X M2_HOSTILE, C(RED) },
X { "kobold lord", S_KOBOLD, 2, 6, 5, 0, -4, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
X M2_HOSTILE | M2_LORD, C(HI_LORD) },
X { "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
X { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_MAGIC,
X M2_HOSTILE, C(HI_ZAP) },
X/* leprechauns */
X { "leprechaun", S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4),
X { { AT_CLAW, AD_SGLD, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_LAUGH, MZ_TINY, M1_HUMANOID | M1_TPORT | M1_GREEDY,
X M2_HOSTILE, C(GREEN) },
X/* mimics */
X { "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_SILENT, MZ_MEDIUM,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "large mimic", S_MIMIC, 8, 3, 7, 10, 0, (G_GENO | 1),
X { { AT_CLAW, AD_STCK, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 40, 400, 0, MS_SILENT, MZ_LARGE,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X { "giant mimic", S_MIMIC, 9, 3, 7, 20, 0, (G_GENO | 1),
X { { AT_CLAW, AD_STCK, 3, 6 }, { AT_CLAW, AD_STCK, 3, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 60, 500, 0, MS_SILENT, MZ_LARGE,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(HI_LORD) },
X/* nymphs */
X { "wood nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X M1_HUMANOID | M1_TPORT | M1_COLLECT, M2_HOSTILE | M2_FEM, C(GREEN) },
X { "water nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_SWIM,
X M2_HOSTILE | M2_FEM, C(BLUE) },
X { "mountain nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
X { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
X M1_HUMANOID | M1_TPORT | M1_COLLECT, M2_HOSTILE | M2_FEM, C(BROWN) },
X/* orcs */
X { "goblin", S_ORC, 0, 6, 6, 0, -3, (G_GENO | 2),
X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_ORC, MZ_SMALL,
X M1_HUMANOID | M1_COLLECT, M2_ORC, C(GRAY) },
X { "hobgoblin", S_ORC, 1, 9, 6, 0, -4, (G_GENO | 2),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG, C(BROWN) },
X /* "orc" for zombie corpses only; they don't get created at random */
X { "orc", S_ORC, 1, 9, 6, 0, -3, (G_GENO | G_NOGEN | G_LGROUP),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 150, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(RED) },
X { "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(YELLOW) },
X#ifdef TOLKIEN
X { "Mordor orc", S_ORC, 3, 5, 6, 0, -5, (G_GENO | G_LGROUP | 1),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(BLUE) },
X { "Uruk-hai", S_ORC, 3, 7, 5, 0, -4, (G_GENO | G_LGROUP | 1),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(BLACK) },
X#endif
X { "orc shaman", S_ORC, 3, 9, 5, 10, -5, (G_GENO | 1),
X { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_MAGIC,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(HI_ZAP) },
X { "orc-captain", S_ORC, 5, 5, 4, 0, -5, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 35, 350, 0, MS_ORC, MZ_HUMAN,
X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
X M2_ORC | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
X/* piercers */
X { "rock piercer", S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 200, 0, MS_SILENT, MZ_SMALL,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
X { "iron piercer", S_PIERCER, 5, 1, 0, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 40, 300, 0, MS_SILENT, MZ_MEDIUM,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_CARNIVORE, C(CYAN) },
X/* quadrupeds (generic) */
X { "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 1, 3 },
X { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(GRAY) },
X#ifdef TOLKIEN
X { "mumakil", S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO | 1),
X { { AT_BUTT, AD_PHYS, 4, 12 }, { AT_BITE, AD_PHYS, 2, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 70, 500, 0, MS_SILENT, MZ_LARGE,
X M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X#endif
X { "leocrotta", S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_BITE, AD_PHYS, 2, 6 },
X { AT_CLAW, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_IMITATE, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X { "wumpus", S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO | 1),
X { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(CYAN) },
X { "titanothere", S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 65, 650, 0, MS_SILENT, MZ_LARGE,
X M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X { "baluchitherium", S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 5, 4 }, { AT_CLAW, AD_PHYS, 5, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 80, 800, 0, MS_SILENT, MZ_LARGE,
X M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS,
X M2_HOSTILE | M2_STRONG | M2_HERBIVORE, C(GRAY) },
X/* rodents */
X { "sewer rat", S_RODENT, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1),
X { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "giant rat", S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2),
X { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "rabid rat", S_RODENT, 2, 12, 6, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_DRCO, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 10, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_POIS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "ratwere", S_RODENT, 2, 12, 6, 10, -7, G_NOGEN | G_NOCORPSE,
X { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SQEEK, MZ_TINY, M1_NOHANDS | M1_NOPOLY |
X M1_POIS | M1_REGEN, M2_WERE | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X { "rock mole", S_RODENT, 3, 3, 0, 20, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SILENT, MZ_SMALL,
X M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_COLLECT, M2_HOSTILE | M2_METALLIVORE, C(GRAY) },
X/* spiders and scorpions */
X { "cave spider", S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
X { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 50, 0, MS_SILENT, MZ_TINY,
X M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS_RES,
X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(GRAY) },
X { "scorpion", S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
X { AT_STNG, AD_DRST, 1, 4 }, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_SILENT, MZ_SMALL,
X M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_POIS,
X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
X { "giant spider", S_SPIDER, 5, 15, 4, 0, 0, (G_GENO | 1),
X { { AT_BITE, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_SILENT, MZ_LARGE,
X M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_POIS_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
X/* trappers, lurkers, &c. */
X { "lurker above", S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2),
X { { AT_ENGL, AD_DGST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 40, 350, 0, MS_SILENT, MZ_HUGE,
X M1_HIDE | M1_FLY | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_STALK | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X { "trapper", S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO | 2),
X { { AT_ENGL, AD_DGST, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 40, 350, 0, MS_SILENT, MZ_HUGE,
X M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS,
X M2_HOSTILE | M2_STALK | M2_STRONG | M2_CARNIVORE, C(GREEN) },
X/* unicorns */
X { "white unicorn", S_UNICORN, 4, 24, 2, 70, 7, (G_GENO | 2),
X { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X M2_WANDER | M2_STRONG | M2_HERBIVORE, C(WHITE) },
X { "gray unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1),
X { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X M2_WANDER | M2_STRONG | M2_HERBIVORE, C(GRAY) },
X { "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1),
X { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
X M2_WANDER | M2_STRONG | M2_HERBIVORE, C(BLACK) },
X/* vortices */
X { "fog cloud", S_VORTEX, 3, 1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
X { { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X M2_HOSTILE, C(GRAY) },
X { "dust vortex", S_VORTEX, 4, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 2),
X { { AT_ENGL, AD_BLND, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES, M2_HOSTILE, C(BROWN) },
X { "energy vortex", S_VORTEX, 6, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X { { AT_ENGL, AD_ELEC, 1, 6 }, { AT_ENGL, AD_DREN, 0, 0 },
X { AT_NONE, AD_ELEC, 0, 4 }, NO_ATTK, NO_ATTK },
X 20, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_ELEC_RES,
X M2_HOSTILE, C(HI_ZAP) },
X { "ice vortex", S_VORTEX, 5, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
X { { AT_ENGL, AD_COLD, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES,
X M2_HOSTILE, C(CYAN) },
X { "steam vortex", S_VORTEX, 7, 22, 2, 30, 0,
X (G_HELL | G_GENO | G_NOCORPSE | 2),
X { { AT_ENGL, AD_FIRE, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X M2_HOSTILE, C(BLUE) },
X { "fire vortex", S_VORTEX, 8, 22, 2, 30, 0,
X (G_HELL | G_GENO | G_NOCORPSE | 1),
X { { AT_ENGL, AD_FIRE, 1, 10 }, { AT_NONE, AD_FIRE, 0, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X M2_HOSTILE, C(YELLOW) },
X/* worms */
X#ifdef WORM
X { "baby long worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
X#endif
X { "baby purple worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X M2_HOSTILE | M2_CARNIVORE, C(MAGENTA) },
X#ifdef WORM
X { "long worm", S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_SILENT, MZ_GIGANTIC,
X M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(BROWN) },
X#endif
X { "purple worm", S_WORM, 15, 9, 6, 20, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 2, 8 }, { AT_ENGL, AD_DGST, 1, 10 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_GIGANTIC,
X M1_ANIMAL | M1_SLITHY | M1_NOLIMBS,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(MAGENTA) },
X/* xan, &c. */
X { "grid bug", S_XAN, 0, 12, 9, 0, 0,
X (G_GENO | G_SGROUP | G_NOCORPSE | 3),
X { { AT_BITE, AD_ELEC, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
X C(MAGENTA) },
X { "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
X { { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 30, 300, 0, MS_BUZZ, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS |
X M1_POIS | M1_POIS_RES, M2_HOSTILE, C(RED) },
X/* yellow light */
X { "yellow light", S_YLIGHT, 3, 15, 0, 0, 0, (G_GENO | 4),
X { { AT_EXPL, AD_BLND, 10, 20 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 1, 10, 0, MS_SILENT, MZ_SMALL,
X M1_FLY | M1_NOLIMBS, M2_HOSTILE, C(BRIGHT|YELLOW) },
X/* zruty */
X { "zruty", S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO | 2),
X { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
X { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
X 60, 600, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
X/* Apes */
X { "ape", S_APE, 4, 12, 6, 0, 0, (G_GENO | G_SGROUP | 2),
X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
X { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X M2_STRONG | M2_CARNIVORE, C(BROWN) },
X { "carnivorous ape", S_APE, 5, 12, 6, 0, 0, (G_GENO | 1),
X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
X { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
X 55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
X/* Bats */
X { "bat", S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1),
X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
X M2_WANDER | M2_CARNIVORE, C(BROWN) },
X { "giant bat", S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 30, 0, MS_SQEEK, MZ_MEDIUM, M1_FLY | M1_ANIMAL | M1_NOHANDS,
X M2_WANDER | M2_HOSTILE | M2_CARNIVORE, C(RED) },
X { "vampire bat", S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2),
X { { AT_BITE, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRST, 0, 0 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 3, 20, 0, MS_SQEEK, MZ_TINY,
X M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_REGEN,
X M2_UNDEAD | M2_HOSTILE, C(BLACK) },
X/* Centaurs */
X { "plains centaur", S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_KICK, AD_PHYS, 1, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK},
X 50, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X C(BROWN) },
X { "forest centaur", S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_KICK, AD_PHYS, 1, 6 },
X NO_ATTK, NO_ATTK, NO_ATTK},
X 55, 600, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X C(GREEN) },
X { "mountain centaur", S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
X { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
X 55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
X C(CYAN) },
X/* Dragons */
X { "baby gray dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GRAY) },
X { "baby red dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_FIRE_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
X { "baby white dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_COLD_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
X { "baby blue dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_ELEC_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BLUE) },
X { "baby green dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_POIS | M1_POIS_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(GREEN) },
X { "baby orange dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_SLEE_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(ORANGE_COLORED) },
X { "baby black dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BLACK) },
X { "baby yellow dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
X { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 500, 0, MS_ROAR, MZ_HUGE,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_ACID | M1_STON_RES,
X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(YELLOW) },
X { "gray dragon", S_DRAGON, 10, 9, -1, 20, 4, (G_GENO | 1),
X { { AT_BREA, AD_MAGM, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS, C(GRAY) },
X { "red dragon", S_DRAGON, 10, 9, -1, 20, -4, (G_GENO | 1),
X { { AT_BREA, AD_FIRE, 6, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_FIRE_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS, C(RED) },
X { "orange dragon", S_DRAGON, 10, 9, -1, 20, 5, (G_GENO | 1),
X { { AT_BREA, AD_SLEE, 4, 25 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_SLEE_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(ORANGE_COLORED) },
X { "white dragon", S_DRAGON, 10, 9, -1, 20, -5, (G_GENO | 1),
X { { AT_BREA, AD_COLD, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_COLD_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(WHITE) },
X { "black dragon", S_DRAGON, 10, 9, -1, 20, -6, (G_GENO | 1),
X { { AT_BREA, AD_DISN, 4, 10 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(BLACK) },
X { "blue dragon", S_DRAGON, 10, 9, -1, 20, -7, (G_GENO | 1),
X { { AT_BREA, AD_ELEC, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_ELEC_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(BLUE) },
X { "green dragon", S_DRAGON, 10, 9, -1, 20, 6, (G_GENO | 1),
X { { AT_BREA, AD_DRST, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_POIS | M1_POIS_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(GREEN) },
X { "yellow dragon", S_DRAGON, 10, 9, -1, 20, 7, (G_GENO | 1),
X { { AT_BREA, AD_ACID, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
X { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
X 150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
X M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_GREEDY | M1_JEWELS |
X M1_MAGIC | M1_SEE_INVIS | M1_ACID | M1_STON_RES,
X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_EGGS,
X C(YELLOW) },
X/* Elementals */
X { "air elemental", S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1),
X { { AT_ENGL, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES, M2_STRONG, C(CYAN) },
X { "fire elemental", S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE | 1),
X { { AT_CLAW, AD_FIRE, 3, 6 }, { AT_NONE, AD_FIRE, 0, 4 },
X NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 0, 0, MS_SILENT, MZ_HUGE,
X M1_FLY | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_FIRE_RES,
X M2_STRONG, C(YELLOW) },
X { "earth elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X { { AT_CLAW, AD_PHYS, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 0, 0, MS_SILENT, MZ_HUGE,
X M1_WALLWALK | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_THICK_HIDE |
X M1_STON_RES,
X M2_STRONG, C(BROWN) },
X { "water elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
X { { AT_CLAW, AD_PHYS, 5, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 50, 0, 0, MS_SILENT, MZ_HUGE,
X M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_SWIM, M2_STRONG, C(BLUE) },
X/* Fungi */
X { "violet fungus", S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 2),
X { { AT_TUCH, AD_PHYS, 1, 4 }, { AT_TUCH, AD_STCK, 0, 0 },
X NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
X M2_HOSTILE | M2_OMNIVORE, C(MAGENTA) },
X { "brown mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 30, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_COLD_RES | M1_POIS_RES,
X M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
X { "yellow mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 2),
X { { AT_NONE, AD_STUN, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 30, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_POIS | M1_POIS_RES,
X M2_HOSTILE | M2_OMNIVORE, C(YELLOW) },
X { "green mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X { { AT_NONE, AD_ACID, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 30, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_ACID | M1_STON_RES,
X M2_HOSTILE | M2_OMNIVORE, C(GREEN) },
X { "red mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
X { { AT_NONE, AD_FIRE, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 5, 30, 0, MS_SILENT, MZ_SMALL,
X M1_NOEYES | M1_NOLIMBS | M1_FIRE_RES | M1_POIS_RES,
X M2_HOSTILE | M2_OMNIVORE, C(RED) },
X/* Gnomes */
X { "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 10, 100, 0, MS_ORC, MZ_SMALL,
X M1_HUMANOID | M1_COLLECT, 0, C(BROWN) },
X { "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 120, 0, MS_ORC, MZ_SMALL,
X M1_HUMANOID | M1_COLLECT, M2_LORD, C(BLUE) },
X { "gnome king", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 20, 150, 0, MS_ORC, MZ_SMALL,
X M1_HUMANOID | M1_COLLECT, M2_PRINCE, C(HI_LORD) },
X { "gnomish wizard", S_GNOME, 3, 10, 4, 10, 0, (G_GENO | 1),
X { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
X 15, 120, 0, MS_ORC, MZ_SMALL,
X M1_HUMANOID | M1_MAGIC, 0, C(HI_ZAP) },
X#ifdef SPLITMON_1
X};
X#endif
X#endif /* !SPLITMON_2 */
END_OF_FILE
if test 39815 -ne `wc -c <'src/monst.c1'`; then
echo shar: \"'src/monst.c1'\" unpacked with wrong size!
fi
# end of 'src/monst.c1'
echo shar: End of archive 25 \(of 30\).
cp /dev/null ark25isdone
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 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 30 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