billr@saab.CNA.TEK.COM (Bill Randle) (11/23/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 8, Issue 66 Archive-name: NetHack3/Patch6m 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 13 (of 15)." # Contents: Install.dos src/monst.c2 # Wrapped by billr@saab on Wed Nov 22 10:50:20 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Install.dos' -a "${1}" != "-c" ; then echo shar: clobbering existing file \"'Install.dos'\" fi echo shar: Extracting \"'Install.dos'\" \(13554 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: 19 Nov 1989 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. X X2. Move all the .c files from the others directory to your src directory. X You will definitely need pc*.c and msdos.c. X X random.c is only needed if you want the high-quality random number X generation routines. The trampoli.c and ovlmgr.asm files are needed X for the MS-DOS overlays. ovlmgr.obj should remain in others X (the makefile copies it when it's needed). You can comment out the X #define RANDOM line in pcconf.h or tosconf.h to disable the random X number routines. Similarly, commenting out the #define OVERLAY in X pcconf.h disables the overlay code. We'll get to pcconf.h/tosconf.h X in step 4. X X oldtos.c is an old Atari ST version of msdos.c. If you're using X a compiler other than GCC, you may need to #define OLD_TOS in X tosconf.h and edit your make file to use this. X X Run a uudecode utility on termcap.uu (Fred Fish's termcap library) and X ovlmgr.uu (MS-DOS overlay manager), to generate the files termcap.arc X and ovlmgr.obj. Move these into your src directory, too. Unarc X termcap.arc. X X termcap.arc contains termcap routines. Using them involves some X knowledge of the UNIX concept of a termcap database and setting X the TERM environment variable. Commenting out the #define TERMLIB X in pcconf.h/tosconf.h to disable this feature (relying on the X ANSI_DEFAULT feature) will make your job quite a bit easier. X X ovlmgr.obj is used with the OVERLAY code, as above. X X3. Now look at Makefile.* in your others directory. Consult the list below X and pick out the make file 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 Make.ini X Microsoft C 4.0 Makefile.pc (not available) X Turbo C 2.0 Makefile.tcc Maketcc.ini X OS/2: X Microsoft C 5.1 Makefile.os2 Make.ini X TOS: X GCC 1.34 Makefile.st X X If an .ini file is also listed, move that init file to your src directory X too, renaming it to "Make.ini" if necessary. If you like, you may also X place Make.ini in any directory listed in your PATH environment variable. X X The PC NetHack make files are set up for NDMAKE, a public domain X "make" utility. Both Microsoft's and Borland's "make" leave much to X be desired. Neither can handle the complexity of the make file's link X command. It is worth the extra effort to get NDMAKE if you don't X already have it. If you must use Microsoft's or Borland's "make", you X will have to edit and/or merge the make and the make init files into a X form your make can use. X X If you're using a different compiler, you will have to adapt one of X the make files (and make init file, if appropriate) to your needs. In X particular, change the CC and CFLAGS macros to your C compiler's file X name and the parameters to pass to it. 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. Go to the include subdirectory and edit config.h according to the comments X to match your system and desired set of features. Also edit pcconf.h for X PC or OS/2 NetHack, or tosconf.h for ST NetHack. X X If you're using an Atari ST and some compiler other than GCC, you may X possibly want to #define OLD_TOS and use oldtos.c instead of msdos.c. X This is *not* guaranteed to work, so be prepared to make some changes. 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. (Unfortunately, nothing you do is X likely to make NH3.0 work on a 520ST.) 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 520 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 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 (follow the comments therein, if you can). 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, altho 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 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. 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. 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. The record (score list) X file will work fine, but I recommend you delete it and create a new, empty X one. Achieving the same scores in this version is a great deal harder. 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 whereever 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 segement 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 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 13554 -ne `wc -c <'Install.dos'`; then echo shar: \"'Install.dos'\" unpacked with wrong size! fi # end of 'Install.dos' if test -f 'src/monst.c2' -a "${1}" != "-c" ; then echo shar: clobbering existing file \"'src/monst.c2'\" fi echo shar: Extracting \"'src/monst.c2'\" \(45809 characters\) sed "s/^X//" >'src/monst.c2' <<'END_OF_FILE' X X/* horrible kludge alert: splitting monst.o into two parts depends on X the two files monst1.o and monst2.o being loaded consecutively into X memory; _mons2 must immediately follow mons. Needless to say, X don't depend on this unless you have to (I had to; my compiler was X too much of a memory pig to produce monst.o in a measly 2 megabytes X of memory -- ERS */ X X#ifndef SPLITMON_1 X#ifdef SPLITMON_2 Xstruct permonst _mons2[] = { X#endif X/* giant Humanoids */ X { "ettin", S_GIANT, 10, 12, 3, 0, 0, (G_GENO | 1), X { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT, X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) }, X { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1), X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS, X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(HI_MON) }, X { "stone giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS, X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(GRAY) }, X { "hill giant", S_GIANT, 8, 10, 6, 0, -2, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 70, 700, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS, X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(BROWN) }, X { "fire giant", S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_FIRE_RES | M1_COLLECT | M1_JEWELS, X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(YELLOW) }, X { "frost giant", S_GIANT, 10, 12, 3, 10, -3, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_COLD_RES | M1_COLLECT | M1_JEWELS, X M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(WHITE) }, X { "titan", S_GIANT, 16, 18, -3, 70, 9, 1, X { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC | X M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) }, X { "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN), X { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 }, X { AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK}, X 70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID, X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) }, X { "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3), X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 }, X { AT_HUGS, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK }, X 70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID, X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) }, X/* Invisible stalker */ X { "stalker", S_STALKER, 8, 12, 3, 0, 0, (G_GENO | 3), X { { AT_CLAW, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_SILENT, MZ_LARGE, X M1_ANIMAL | M1_FLY | M1_SEE_INVIS | M1_STALK, X M2_WANDER | M2_HOSTILE | M2_STRONG, C(WHITE) }, X/* Jabberwock */ X { "jabberwock", S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO | 1), X { { AT_BITE, AD_PHYS, 2, 10 }, { AT_BITE, AD_PHYS, 2, 10 }, X { AT_CLAW, AD_PHYS, 2, 10 }, { AT_CLAW, AD_PHYS, 2, 10 }, NO_ATTK }, X 60, 600, 0, MS_BURBLE, MZ_LARGE, M1_ANIMAL | M1_COLLECT | M1_FLY, X M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BRIGHT|RED) }, X/* Kops */ X#ifdef KOPS X { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN), X { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) }, X { "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN), X { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) }, X { "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN), X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) }, X { "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN), X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) }, X#endif X/* Liches */ X { "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1), X { { AT_TUCH, AD_COLD, 1, 10 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) }, X { "demilich", S_LICH, 14, 9, -2, 60, -12, (G_GENO | 1), X { { AT_TUCH, AD_COLD, 3, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) }, X { "master lich", S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | 1), X { { AT_TUCH, AD_COLD, 3, 6 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_FIRE_RES | M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) }, X/* Mummies */ X { "kobold mummy", S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_SMALL, X M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) }, X { "gnome mummy", S_MUMMY, 4, 10, 6, 20, -3, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_SMALL, X M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) }, X { "orc mummy", S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 15, 150, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_GREEDY | M1_JEWELS, M2_HOSTILE | M2_ORC, C(BROWN) }, X { "elf mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_SLEE_RES, X M2_HOSTILE | M2_ELF, C(BROWN) }, X { "human mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) }, X { "ettin mummy", S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_UNDEAD | M1_POIS, X M2_HOSTILE | M2_STRONG, C(BROWN) }, X { "giant mummy", S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_JEWELS, X M2_HOSTILE | M2_GIANT | M2_STRONG, C(BROWN) }, X/* Nagas */ X { "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | X M1_FIRE_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(RED) }, X { "black naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | X M1_STON_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(BLACK) }, X { "golden naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES, M2_STRONG | X M2_NOLIMBS | M2_THICK_HIDE, C(HI_GOLD) }, X { "guardian naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES, M2_STRONG | X M2_NOLIMBS | M2_THICK_HIDE, C(GREEN) }, X { "red naga", S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1), X { { AT_BITE, AD_PHYS, 2, 4 }, { AT_BREA, AD_FIRE, 2, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE, X M1_NOHANDS | M1_EGGS | M1_POIS_RES | M1_FIRE_RES, X M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(RED) }, X { "black naga", S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1), X { { AT_BITE, AD_PHYS, 2, 6 }, { AT_SPIT, AD_ACID, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE, X M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES | M1_STON_RES, X M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(BLACK) }, X { "golden naga", S_NAGA, 10, 14, 2, 70, 5, (G_GENO | 1), X { { AT_BITE, AD_PHYS, 2, 6 }, { AT_MAGC, AD_SPEL, 4, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE, X M1_NOHANDS | M1_EGGS | M1_POIS_RES, X M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(HI_GOLD) }, X { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1), X { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 }, X { AT_SPIT, AD_ACID, 1, 6 }, NO_ATTK, NO_ATTK }, X 60, 400, 0, MS_MUMBLE, MZ_HUGE, M1_NOHANDS | M1_EGGS | M1_POIS_RES, X M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(GREEN) }, X/* Ogres */ X { "ogre", S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP | G_GENO | 1), X { { AT_WEAP, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 60, 500, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT, X M2_STRONG, C(BROWN) }, X { "ogre lord", S_OGRE, 7, 12, 3, 30, -5, (G_GENO | 2), X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 70, 700, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_LORD, X M2_STRONG, C(BROWN) }, X { "ogre king", S_OGRE, 7, 14, 4, 60, -7, (G_GENO | 2), X { { AT_WEAP, AD_PHYS, 3, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 70, 750, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_PRINCE, X M2_STRONG, C(HI_LORD) }, X/* Puddings */ X { "gray ooze", S_PUDDING, 3, 1, 8, 0, 0, (G_GENO | 2), X { { AT_BITE, AD_RUST, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_MEDIUM, X M1_NOEYES | M1_NOHANDS | M1_POIS_RES, X M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(GRAY) }, X { "brown pudding", S_PUDDING, 5, 3, 8, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_DCAY, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_MEDIUM, X M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES | M1_ELEC_RES, X M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BROWN) }, X { "black pudding", S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_RUST, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_LARGE, X M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES | M1_ELEC_RES, X M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BLACK) }, X/* Quantum Mechanics */ X { "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3), X { { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 2, 20, 0, MS_SILENT, MZ_HUMAN, M1_ANIMAL | M1_HUMANOID | M1_POIS, X M2_HOSTILE, C(CYAN) }, X { "mad scientist", S_QUANTMECH, 8, 12, 2, 20, 0, (G_GENO | 2), X { { AT_WEAP, AD_SLEE, 1, 8 }, { AT_CLAW, AD_DREN, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 200, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_POIS | M1_COLLECT, X M2_HOSTILE, C(MAGENTA) }, X/* Rust Monster */ X { "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2), X { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 }, NO_ATTK, X NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_MEDIUM, X M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE, C(BROWN) }, X/* Snakes */ X { "garter snake", S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1), X { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 5, 60, 0, MS_HISS, MZ_TINY, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS, X M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X { "snake", S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | 2), X { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 80, 0, MS_HISS, MZ_SMALL, M1_SWIM | M1_ANIMAL | M1_NOHANDS | X M1_EGGS | M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X { "water moccasin", S_SNAKE, 4, 15, 3, 0, 0, X (G_GENO | G_NOGEN | G_LGROUP), X { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_HISS, MZ_SMALL, M1_SWIM | M1_ANIMAL | M1_NOHANDS | X M1_EGGS | M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_CONCEAL | X M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X { "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X { "cobra", S_SNAKE, 6, 18, 2, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_DRST, 2, 4 }, { AT_SPIT, AD_BLND, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_MEDIUM, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X { "python", S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_DRST, 1, 4 }, { AT_HUGS, AD_WRAP, 2, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_LARGE, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) }, X/* Trolls */ X { "troll", S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2), X { { AT_CLAW, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 4, 2 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_GRUNT, MZ_LARGE, M1_HUMANOID | M1_REGEN | M1_STALK, X M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) }, X { "ice troll", S_TROLL, 9, 10, 2, 20, -3, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_COLD, 2, 6 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 300, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_COLD_RES | M1_REGEN | M1_STALK, X M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(WHITE) }, X { "rock troll", S_TROLL, 9, 12, 0, 0, -3, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 300, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_REGEN | M1_STALK | M1_COLLECT, X M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) }, X { "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_GRUNT, MZ_LARGE, X M1_SWIM | M1_HUMANOID | M1_REGEN | M1_STALK, X M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BLUE) }, X#ifdef TOLKIEN X { "Olog-hai", S_TROLL, 13, 12, -4, 0, -7, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_REGEN | M1_STALK | M1_COLLECT, X M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) }, X#endif X/* Umber Hulk */ X { "umber hulk", S_UMBER, 9, 6, 2, 25, 0, (G_GENO | 2), X { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 }, X { AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_LARGE, X 0, M2_STRONG | M2_TUNNEL | M2_CARNIVORE, C(BROWN)}, X/* Vampires */ X { "vampire", S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN, X M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_REGEN | M1_STALK, X M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_MON) }, X { "vampire lord", S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_BITE, AD_DRLI, 1, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN, X M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_REGEN | X M1_STALK | M1_LORD, M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_MON) }, X { "Vlad the Impaler", S_VAMPIRE, 14, 18, -3, 80, -10, X (G_NOGEN | G_NOCORPSE | G_UNIQ), X { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, PL_NSIZ, MS_VAMPIRE, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_REGEN | M1_STALK | M1_PRINCE, X M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, C(HI_LORD) }, X/* Wraiths */ X { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, X { AT_WEAP, AD_DRLI, 0, 0 }, NO_ATTK, NO_ATTK }, X 30, 0, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_COLLECT, X M2_HOSTILE, C(GRAY) }, X { "wraith", S_WRAITH, 6, 12, 4, 15, -6, (G_GENO | 2), X { { AT_TUCH, AD_DRLI, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 30, 0, 0, MS_SILENT, MZ_HUMAN, X M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK, X M2_HOSTILE, C(BLACK) }, X#ifdef TOLKIEN X { "Nazgul", S_WRAITH, 13, 12, 0, 25, -17, (G_GENO | G_NOCORPSE | 1), X { { AT_WEAP, AD_DRLI, 1, 4 }, { AT_BREA, AD_SLEE, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 0, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_COLLECT, X M2_STRONG | M2_HOSTILE, C(BLACK) }, X#endif X/* Xorn */ X { "xorn", S_XORN, 8, 9,-2, 20, 0, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 4, 6 }, X NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_MEDIUM, X M1_WALLWALK | M1_FIRE_RES | M1_COLD_RES | M1_STON_RES, X M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(BROWN) }, X/* Yeti */ X { "yeti", S_YETI, 5, 15, 6, 0, 0, (G_GENO | 2), X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 }, X { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK }, X 70, 700, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_COLD_RES, X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) }, X/* Zombies */ X { "kobold zombie", S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_POIS_RES | M1_STALK, M2_HOSTILE, C(BROWN) }, X { "gnome zombie", S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_UNDEAD | M1_POIS | X M1_POIS_RES | M1_STALK, M2_HOSTILE, C(HI_MON) }, X { "orc zombie", S_ZOMBIE, 2, 6, 9, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 15, 150, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_GREEDY | X M1_JEWELS, M2_HOSTILE | M2_ORC, C(BROWN) }, X { "elf zombie", S_ZOMBIE, 3, 6, 9, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_SLEE_RES, X M2_HOSTILE | M2_ELF, C(HI_MON) }, X { "human zombie", S_ZOMBIE, 4, 6, 8, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK, X M2_HOSTILE, C(HI_MON) }, X { "ettin zombie", S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 10 }, { AT_CLAW, AD_PHYS, 1, 10 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK, X M2_HOSTILE | M2_STRONG, C(BROWN) }, X { "giant zombie", S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_JEWELS, X M2_HOSTILE | M2_GIANT | M2_STRONG, C(HI_MON) }, X/* Golems */ X#ifdef GOLEMS X { "straw golem", S_GOLEM, 3, 12, 10, 0, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 10, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(YELLOW) }, X { "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_HUGS, AD_PHYS, 6, 1 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 20, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(BROWN) }, X { "leather golem", S_GOLEM, 6, 6, 6, 0, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(HI_LEATHER) }, X { "wood golem", S_GOLEM, 7, 3, 4, 0, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES, M2_HOSTILE | M2_THICK_HIDE, C(HI_WOOD) }, X { "flesh golem", S_GOLEM, 9, 8, 9, 30, 0, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK}, X 60, 600, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES, X M2_HOSTILE | M2_STRONG, C(HI_MON) }, X { "clay golem", S_GOLEM, 11, 7, 7, 40, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 0, 0, MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS_RES, X M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(BROWN) }, X { "stone golem", S_GOLEM, 14, 6, 5, 50, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 90, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES | M1_STON_RES, X M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(GRAY) }, X { "iron golem", S_GOLEM, 18, 6, 3, 60, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_BREA, AD_DRST, 4, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 100, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES | X M1_COLLECT, M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(HI_METAL) }, X#endif /* GOLEMS */ X/* Humans */ X { "human", S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, /* for corpses */ X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | X M1_COLLECT, M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_MON) }, X { "wererat", S_HUMAN, 2, 12, 7, 10, -7, 1, X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE | X M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) }, X { "werejackal", S_HUMAN, 2, 12, 7, 10, -7, 1, X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_BARK, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE | X M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) }, X { "werewolf", S_HUMAN, 5, 12, 6, 20, -7, 1, X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_BARK, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE | X M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) }, X#ifdef TOLKIEN X { "Woodland-elf", S_HUMAN, 4, 12, 5, 10, 5, (G_GENO | G_SGROUP | 2), X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | X M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) }, X { "Green-elf", S_HUMAN, 5, 12, 5, 10, 6, (G_GENO | G_SGROUP | 2), X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | X M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) }, X { "Grey-elf", S_HUMAN, 6, 12, 5, 10, 7, (G_GENO | G_SGROUP | 2), X { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | X M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) }, X#endif X { "elf-lord", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2), X { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | M1_LORD | X M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG, C(HI_MON) }, X { "Elvenking", S_HUMAN, 9, 12, 5, 25, 10, (G_GENO | 1), X { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4}, X NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | M1_PRINCE | X M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG, C(HI_MON) }, X { "nurse", S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3), X { { AT_CLAW, AD_HEAL, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_NURSE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_POIS_RES, X M2_HUMAN | M2_HOSTILE, C(HI_MON) }, X { "shopkeeper", S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN, X { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, NO_ATTK, X NO_ATTK, NO_ATTK }, 45, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT, X M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_MON) }, X { "guard", S_HUMAN, 12, 12, -1, 40, 10, G_NOGEN, X { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG, C(HI_MON) }, X#ifdef ORACLE X { "oracle", S_HUMAN, 12, 0, 0, 50, 0, G_NOGEN | G_UNIQ, X { { AT_NONE, AD_MAGM, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_ORACLE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_FEM, X M2_HUMAN | M2_PEACEFUL, C(HI_MON) }, X#endif X#if defined(ALTARS) && defined(THEOLOGY) X { "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN, X { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 }, X { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK }, X 45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT, X M2_HUMAN | M2_PEACEFUL, C(BRIGHT|WHITE) }, X { "temple priestess", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN, X { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 }, X { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK }, X 45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT | M1_FEM, X M2_HUMAN | M2_PEACEFUL, C(BRIGHT|WHITE) }, X#endif X#ifdef ARMY X { "unarmored soldier", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN, X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_SOLDIER, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) }, X { "soldier", S_HUMAN, 6, 4, 3, 0, -2, (G_SGROUP | G_GENO | 1), X { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_SOLDIER, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) }, X { "sergeant", S_HUMAN, 8, 4, 0, 5, -3, (G_SGROUP | G_GENO | 1), X { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_SOLDIER, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) }, X { "lieutenant", S_HUMAN, 10, 4, -2, 15, -4, (G_GENO | 1), X { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_WEAP, AD_PHYS, 3, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) }, X { "captain", S_HUMAN, 12, 4, -3, 15, -5, (G_GENO | 1), X { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT, X M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) }, X#endif X#ifdef MEDUSA X { "Medusa", S_HUMAN, 20, 12, 2, 50, -15, G_NOGEN | G_UNIQ, X { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_GAZE, AD_STON, 0, 0 }, X { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK }, X 45, 400, PL_NSIZ, MS_HISS, MZ_LARGE, X M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_POIS_RES | X M1_STON_RES | M1_FEM, M2_HOSTILE | M2_STRONG | M2_PNAME, X C(BRIGHT|GREEN) }, X#endif X { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, -20, G_NOGEN, X { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 }, X { AT_BITE, AD_CUSS, 0, 0 }, NO_ATTK, NO_ATTK }, 45, 400, PL_NSIZ, X MS_CUSS, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS_RES | X M1_FIRE_RES | M1_REGEN | M1_SEE_INVIS | M1_TPORT | X M1_TPORT_CONTROL | M1_MAGIC | M1_PRINCE, X M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_LORD) X }, X#ifdef CHARON X { "Charon", S_HUMAN, 76, 18, -5, 120, 0, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_TUCH, AD_PLYS, 1, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, PL_NSIZ, MS_FERRY, MZ_HUMAN, X M1_NOPOLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | X M1_COLLECT, M2_HUMAN | M2_PEACEFUL, C(WHITE) }, X#endif X/* Ghost */ X { "ghost", S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN), X { { AT_TUCH, AD_PHYS, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 0, PL_NSIZ, MS_SILENT, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_WALLWALK | M1_HUMANOID | M1_UNDEAD | X M1_STALK | M1_POIS_RES, M2_HOSTILE, C(WHITE)}, X/* (major) Demons */ X { "water demon", S_DEMON, 8, 12,-4, 30, -7, (G_NOCORPSE | G_NOGEN), X { { AT_WEAP, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_HUMAN, X M1_SWIM | M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(BLUE) }, X#ifndef INFERNO /* generic type */ X { "demon", S_DEMON, 10, 12,-4, 30, -7, (G_NOCORPSE | 3), X { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, X { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK }, X 45, 450, 0, MS_JEER, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X#else /* used in hell for bigger, badder demons! */ X /* standard demons & devils */ X { "horned devil", S_DEMON, 6, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2), X { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, X { AT_BITE, AD_PHYS, 2, 3 }, { AT_STNG, AD_PHYS, 1, 3 }, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_HUMAN, M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY | M2_THICK_HIDE, C(RED) }, X#ifdef SEDUCE X { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), X { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK }, X 45, 450, 0, MS_SEDUCE, MZ_HUMAN, X M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK | M1_FEM, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), X { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK }, X 45, 450, 0, MS_SEDUCE, MZ_HUMAN, X M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X#else X { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK }, X 45, 450, 0, MS_SEDUCE, MZ_HUMAN, X M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK | M1_FEM, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK }, X 45, 450, 0, MS_SEDUCE, MZ_HUMAN, X M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X#endif X { "erinyes", S_DEMON, 7, 12, 2, 30, 10, X (G_HELL | G_NOCORPSE | G_SGROUP | 2), X { { AT_WEAP, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT | M1_FEM, X M2_DEMON | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) }, X { "marilith", S_DEMON, 7, 12, -6, 80, -12, (G_HELL | G_NOCORPSE | 1), X { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 }, X { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 }, X { AT_WEAP, AD_PHYS, 2, 4 }, }, 45, 450, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_STALK | X M1_COLLECT | M1_FEM, M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "barbed devil", S_DEMON, 8, 12, 0, 35, 8, X (G_HELL | G_NOCORPSE | G_SGROUP | 2), X { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 }, X { AT_STNG, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_HUMAN, M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY | M2_THICK_HIDE, C(RED) }, X { "vrock", S_DEMON, 8, 12, 0, 50, -9, X (G_HELL | G_NOCORPSE | G_SGROUP | 2), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, X { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 }, X { AT_BITE, AD_PHYS, 1, 6 }, }, X 45, 450, 0, MS_SILENT, MZ_LARGE, M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "hezrou", S_DEMON, 9, 6, -2, 55, -10, X (G_HELL | G_NOCORPSE | G_SGROUP | 2), X { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 }, X { AT_BITE, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK }, 45, 450, 0, X MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "bone devil", S_DEMON, 9, 15, -1, 40, -9, X (G_HELL | G_NOCORPSE | G_SGROUP | 2), X { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_STNG, AD_DRST, 2, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE, X M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(WHITE) }, X { "nalfeshnee", S_DEMON, 11, 9, -1, 65, -11, (G_HELL | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, X { AT_BITE, AD_PHYS, 2, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "ice devil", S_DEMON, 11, 6, -4, 55, -12, (G_HELL | G_NOCORPSE | 2), X { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, X { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_COLD, 3, 4 }, NO_ATTK }, X 45, 450, 0, MS_SILENT, MZ_LARGE, X M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_STALK, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(WHITE) }, X { "pit fiend", S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2), X { { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 }, X { AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK }, X 45, 450, 0, MS_GROWL, MZ_LARGE, X M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT, X M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) }, X { "balrog", S_DEMON, 16, 5, -2, 75, -14, (G_HELL | G_NOCORPSE | 1), X { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE, X M1_FLY | M1_SEE_INVIS | M1_COLLECT | M1_STALK | M1_POIS | M1_FIRE_RES, X M2_DEMON | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) }, X /* Named demon lords & princes plus Arch-Devils */ X { "Juiblex", S_DEMON, 50, 3, -7, 65, -15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_ENGL, AD_DISE, 4, 10 }, { AT_SPIT, AD_ACID, 3, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 250, PL_NSIZ, MS_GURGLE, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS | X M1_FIRE_RES | M1_STALK | M1_LORD, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_AMORPHOUS, X C(BRIGHT|GREEN) }, X { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 }, X { AT_WEAP, AD_PLYS, 1, 6 }, { AT_MAGC, AD_MAGM, 2, 6 }, NO_ATTK }, X 50, 500, PL_NSIZ, MS_ORC, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_STALK | M1_COLLECT | M1_LORD, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) }, X { "Orcus", S_DEMON, 66, 9, -6, 85, -20, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_WEAP, AD_PHYS, 3, 6 }, X { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 }, X { AT_STNG, AD_DRST, 2, 4 }, }, 50, 500, PL_NSIZ, MS_ORC, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_STALK | M1_COLLECT | M1_PRINCE, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) }, X { "Geryon", S_DEMON, 72, 3, -3, 75, 15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 }, X { AT_STNG, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK }, X 50, 500, PL_NSIZ, MS_BRIBE, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_STALK | M1_PRINCE, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) }, X { "Dispater", S_DEMON, 78, 15, -2, 80, 15, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_WEAP, AD_PHYS, 4, 6 }, { AT_MAGC, AD_SPEL, 6, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS | X M1_FIRE_RES | M1_STALK | M1_COLLECT | M1_PRINCE, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) }, X { "Baalzebub", S_DEMON, 89, 9, -5, 85, 20, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_BITE, AD_DRST, 2, 6 }, { AT_GAZE, AD_STUN, 2, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_STALK | M1_PRINCE, M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, X C(HI_LORD)}, X { "Asmodeus", S_DEMON, 105, 12, -7, 90, 20, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_CLAW, AD_PHYS, 4, 4 }, { AT_MAGC, AD_COLD, 6, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS | X M1_FIRE_RES | M1_COLD_RES | M1_STALK | M1_PRINCE, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, C(HI_LORD) }, X { "Demogorgon", S_DEMON, 106, 15, -8, 95, -20, X (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), X { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_STNG, AD_DRLI, 1, 4 }, X { AT_CLAW, AD_DISE, 1, 6 }, { AT_CLAW, AD_DISE, 1, 6 }, X NO_ATTK }, 50, 500, PL_NSIZ, MS_GROWL, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS | X M1_FIRE_RES | M1_STALK | M1_PRINCE, X M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) }, X#endif X#ifdef MAIL X { "mail daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE), X { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, X MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS | X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES | X M1_STALK, M2_PEACEFUL, C(BRIGHT|BLUE) }, X/* Neither rain nor sleet nor gloom of night shall stay this courier... */ X#endif X { "djinni", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE), X { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_DJINNI, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_STALK | M1_COLLECT, 0, X C(YELLOW) }, X/* sea monsters */ X { "giant eel", S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN), X { { AT_BITE, AD_PHYS, 3, 6 }, { AT_TUCH, AD_WRAP, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS, X M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(CYAN) }, X { "electric eel", S_EEL, 7, 10, -3, 0, 0, (G_GENO | G_NOGEN), X { { AT_BITE, AD_ELEC, 4, 6 }, { AT_TUCH, AD_WRAP, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS | M1_ELEC_RES, X M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(BLUE)}, X { "kraken", S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN), X { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 }, X { AT_HUGS, AD_WRAP, 2, 6 }, { AT_BITE, AD_PHYS, 5, 4 }, NO_ATTK }, X 100, 1000, 0, MS_SILENT, MZ_HUGE, X M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY, X M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) }, X/* lizards */ X { "newt", S_LIZARD, 0, 6, 8, 0, 0, (G_GENO | 5), X { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 2, 20, 0, MS_SILENT, MZ_TINY, M1_SWIM | M1_ANIMAL | M1_NOHANDS, X M2_HOSTILE | M2_CARNIVORE, C(YELLOW) }, X { "gecko", S_LIZARD, 1, 6, 8, 0, 0, (G_GENO | 5), X { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS, X M2_HOSTILE | M2_CARNIVORE, C(GREEN) }, X { "iguana", S_LIZARD, 2, 6, 7, 0, 0, (G_GENO | 5), X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS, X M2_HOSTILE | M2_CARNIVORE, C(BROWN) }, X { "lizard", S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 5), X { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS, X M2_HOSTILE | M2_CARNIVORE, C(GREEN) }, X { "chameleon", S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2), X { { AT_BITE, AD_PHYS, 4, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY, X M2_HOSTILE | M2_CARNIVORE, C(BROWN) }, X { "crocodile", S_LIZARD, 6, 9, 5, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 1, 12 }, NO_ATTK, X NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SILENT, MZ_LARGE, X M1_ANIMAL | M1_NOHANDS | M1_SWIM, X M2_STRONG | M2_HOSTILE | M2_CARNIVORE, C(BROWN) }, X X/* character classes */ X { "archeologist", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG | M2_TUNNEL | M2_NEEDPICK, C(HI_MON) }, X { "barbarian", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "caveman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN, X { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(HI_MON) }, X { "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN, X { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_FEM, X M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(HI_MON) }, X /* Note: players who are elves still get normal carrying capacity, X * even though this is strictly speaking inconsistent. X */ X { "elf", S_HUMAN, 1, 12, 10, 2, 3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_SLEE_RES | M1_SEE_INVIS, X M2_ELF | M2_STRONG, C(HI_MON) }, X { "healer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "knight", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "priest", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "priestess", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_FEM, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "rogue", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_GREEDY, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "samurai", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "tourist", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "valkyrie", S_HUMAN, 1, 10, 10, 1, -1, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_COLD_RES | M1_FEM, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X { "wizard", S_HUMAN, 1, 10, 10, 3, 0, G_NOGEN, X { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 45, 400, 0, MS_HUMANOID, MZ_HUMAN, X M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT, X M2_HUMAN | M2_STRONG, C(HI_MON) }, X X/* ARRAY TERMINATOR */ X { "", 0, 0, 0, 0, 0, 0, 0, X { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 0, 0, 0, 0, 0, 0, 0, C(0) } X}; X#endif /* !SPLITMON_1 */ X#endif /* !MAKEDEFS_C */ END_OF_FILE if test 45809 -ne `wc -c <'src/monst.c2'`; then echo shar: \"'src/monst.c2'\" unpacked with wrong size! fi # end of 'src/monst.c2' echo shar: End of archive 13 \(of 15\). cp /dev/null ark13isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 15 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