From decwrl!wuarchive!mit-eddie!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr Sat Mar 3 17:35:51 PST 1990 Article 835 of comp.sources.games: Path: decwrl!wuarchive!mit-eddie!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v09i025: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch7y Message-ID: <5239@tekred.CNA.TEK.COM> Date: 24 Feb 90 01:07:41 GMT Sender: news@tekred.CNA.TEK.COM Lines: 1219 Approved: billr@saab.CNA.TEK.COM Submitted-by: Izchak Miller 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 '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