From decwrl!elroy.jpl.nasa.gov!usc!brutus.cs.uiuc.edu!zaphod.mps.ohio-state.edu!think!mintaka!mit-eddie!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr Sat Mar 3 17:35:41 PST 1990 Article 833 of comp.sources.games: Path: decwrl!elroy.jpl.nasa.gov!usc!brutus.cs.uiuc.edu!zaphod.mps.ohio-state.edu!think!mintaka!mit-eddie!uw-beaver!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v09i023: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch7w Message-ID: <5237@tekred.CNA.TEK.COM> Date: 24 Feb 90 01:06:22 GMT Sender: news@tekred.CNA.TEK.COM Lines: 1238 Approved: billr@saab.CNA.TEK.COM Submitted-by: Izchak Miller Posting-number: Volume 9, Issue 23 Archive-name: NetHack3/Patch7w 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 'include/system.h' <<'END_OF_FILE' X/* SCCS Id: @(#)system.h 3.0 88/10/10 */ X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X/* NetHack may be freely redistributed. See license for details. */ X X#ifndef SYSTEM_H X#define SYSTEM_H X X#define E extern X X/* some old may not define off_t and size_t; if your system is X * one of these, define them by hand below X */ X#if !defined(THINKC4) && !defined(AMIGA) && !defined(MACOS) X# include X#endif X X#if defined(TOS) && defined(__GNUC__) && !defined(_SIZE_T) X# define _SIZE_T X#endif X X#if defined(MSDOS) || ((defined(AMIGA) || defined(MACOS)) && !defined(THINKC4)) X# ifndef _SIZE_T X# define _SIZE_T Xtypedef unsigned int size_t; X# endif X#endif X X#ifdef ULTRIX X/* The Ultrix v3.0 seems to be very wrong. */ X# define time_t long X#endif X#if defined(ULTRIX) || defined(VMS) X# define off_t long X#endif X#if defined(AZTEC) || defined(THINKC4) || (defined(MSDOS) && defined(__TURBOC__)) Xtypedef long off_t; X#endif X X X/* You may want to change this to fit your system, as this is almost X * impossible to get right automatically. X * This is the type of signal handling functions. X */ X#if defined(__STDC__) || defined(ULTRIX) X /* also SVR3 and later, Sun4.0 and later */ X# define SIG_RET_TYPE void (*)() X#else X /* BSD, SIII, SVR2 and earlier, Sun3.5 and earlier */ X# define SIG_RET_TYPE int (*)() X#endif X X#if defined(BSD) || defined(ULTRIX) || defined(RANDOM) XE long random(); XE void FDECL(srandom, (unsigned int)); X#else XE long lrand48(); XE void srand48(); X#endif /* BSD || ULTRIX || RANDOM */ X X#if !defined(BSD) || defined(ultrix) X /* real BSD wants all these to return int */ X# ifndef MSDOS XE void FDECL(exit, (int)); X# endif /* MSDOS */ XE void FDECL(free, (genericptr_t)); X# ifdef AMIGA XE int FDECL(perror, (const char *)); X# else X# ifndef MACOS XE void FDECL(perror, (const char *)); X# endif X# endif X#endif X#if defined(BSD) || defined(ULTRIX) || (defined(MACOS) && !defined(THINKC4)) XE int qsort(); X#else X# ifndef LATTICE XE void FDECL(qsort, (genericptr_t,size_t,size_t,int(*)(genericptr_t,genericptr_t))); X# endif X#endif X X#ifdef ULTRIX XE long FDECL(lseek, (int,off_t,int)); X /* Ultrix 3.0 man page mistakenly says it returns an int. */ XE int FDECL(write, (int,char *,int)); X#else XE long FDECL(lseek, (int,long,int)); XE int FDECL(write, (int,genericptr_t,unsigned)); X#endif /* ULTRIX */ XE int FDECL(unlink, (const char *)); X X#ifdef MSDOS XE int FDECL(close, (int)); XE int FDECL(read, (int,genericptr_t,unsigned int)); XE int FDECL(open, (const char *,int,...)); XE int FDECL(dup2, (int, int)); XE int FDECL(setmode, (int,int)); XE int FDECL(kbhit, (void)); XE int FDECL(chdir, (char *)); XE char *FDECL(getcwd, (char *,int)); X#endif X X#ifdef TOS XE int FDECL(creat, (const char *, int)); X#endif X X/* both old & new versions of Ultrix want these, but real BSD does not */ X#ifdef ultrix XE void abort(); XE void bcopy(); X#endif X#ifdef MSDOS XE void FDECL(abort, (void)); XE void FDECL(_exit, (int)); XE int FDECL(system, (const char *)); X#endif X#ifdef HPUX XE long FDECL(fork, (void)); X#endif X X#ifdef SYSV XE char *memcpy(); X#endif X#ifdef HPUX XE void *FDECL(memcpy, (char *,char *,int)); XE int FDECL(memcmp, (char *,char *,int)); XE void *FDECL(memset, (char*,int,int)); X#endif X#ifdef MSDOS X# if defined(TOS) && defined(__GNUC__) XE int FDECL(memcmp, (const char *,const char *,size_t)); XE char *FDECL(memcpy, (char *,const char *,size_t)); XE char *FDECL(memset, (char*,int,size_t)); X# else X# ifndef LATTICE X# ifdef MSC Xvoid * _CDECL memcpy(void *, const void *, size_t); Xvoid * _CDECL memset(void *, int, size_t); X# else XE int FDECL(memcmp, (char *,char *,unsigned int)); XE char *FDECL(memcpy, (char *,char *,unsigned int)); XE char *FDECL(memset, (char*,int,int)); X# endif X# endif X# endif /* TOS */ X#endif X X#if defined(BSD) && defined(ultrix) /* i.e., old versions of Ultrix */ XE void sleep(); X#endif X#if defined(ULTRIX) || defined(SYSV) XE unsigned sleep(); X#endif X#if defined(HPUX) XE unsigned int FDECL(sleep, (unsigned int)); X#endif X XE char *FDECL(getenv, (const char *)); XE char *getlogin(); X#ifdef HPUX XE long FDECL(getuid, (void)); XE long FDECL(getgid, (void)); XE long FDECL(getpid, (void)); X#else XE int FDECL(getpid, (void)); X#endif X X/*# string(s).h #*/ X XE char *FDECL(strcpy, (char *,const char *)); XE char *FDECL(strncpy, (char *,const char *,size_t)); XE char *FDECL(strcat, (char *,const char *)); XE char *FDECL(strncat, (char *,const char *,size_t)); X X#if defined(SYSV) || defined(MSDOS) || defined(AMIGA) || defined(THINK_C) || defined(VMS) || defined(HPUX) XE char *FDECL(strchr, (const char *,int)); XE char *FDECL(strrchr, (const char *,int)); X#else /* BSD */ XE char *FDECL(index, (const char *,int)); XE char *FDECL(rindex, (const char *,int)); X#endif X X XE int FDECL(strcmp, (const char *,const char *)); XE int FDECL(strncmp, (const char *,const char *,size_t)); X#ifdef MSDOS XE size_t FDECL(strlen, (const char *)); X#else X# ifdef HPUX XE unsigned int FDECL(strlen, (char *)); X# else X# ifdef THINKC4 XE size_t FDECL(strlen, (char *)); X# else XE int FDECL(strlen, (char *)); X# endif /* THINKC4 */ X# endif /* HPUX */ X#endif /* MSDOS */ X X/* Old varieties of BSD have char *sprintf(). X * Newer varieties of BSD have int sprintf() but allow for the old char *. X * Several varieties of SYSV and PC systems also have int sprintf(). X * If your system doesn't agree with this breakdown, you may want to change X * this declaration, especially if your machine treats the types differently. X */ X#if (defined(BSD) || defined(ULTRIX)) && !defined(DGUX) && !defined(NeXT) X# define OLD_SPRINTF XE char *sprintf(); X#else X# ifndef TOS /* problem with prototype mismatches with */ XE int FDECL(sprintf, (char *,const char *,...)); X# endif X#endif X X#ifdef NEED_VARARGS X# if defined(USE_STDARG) || defined(USE_VARARGS) XE int FDECL(vsprintf, (char *, const char *, va_list)); XE int FDECL(vprintf, (const char *, va_list)); X# else X# define vprintf printf X# define vsprintf sprintf X# define vpline pline X# endif X#endif /* NEED_VARARGS */ X X#define Sprintf (void) sprintf X#define Strcat (void) strcat X#define Strcpy (void) strcpy X X#if defined(MACOS) && defined(CUSTOM_IO) X# undef printf X# undef puts X# undef putchar X# undef putc X# define printf (void) mprintf X# define puts mputs X# define putchar mputc X# define putc mputc X# define Printf (void) mprintf X#else X# define Printf (void) printf X#endif X X#ifdef NEED_VARARGS X# define Vprintf (void) vprintf X# define Vsprintf (void) vsprintf X#endif X X#ifdef TOS XE int FDECL(tgetent, (const char *,const char *)); XE int FDECL(tgetnum, (const char *)); XE int FDECL(tgetflag, (const char *)); XE char *FDECL(tgetstr, (const char *,char **)); XE char *FDECL(tgoto, (const char *,int,int)); XE void FDECL(tputs, (const char *,int,int (*)())); X#else XE int FDECL(tgetent, (char *,char *)); XE int FDECL(tgetnum, (char *)); XE int FDECL(tgetflag, (char *)); XE char *FDECL(tgetstr, (char *,char **)); XE char *FDECL(tgoto, (char *,int,int)); XE void FDECL(tputs, (char *,int,int (*)())); X#endif X X#ifndef MACOS XE genericptr_t FDECL(malloc, (size_t)); X#endif X X/* time functions */ X X#ifndef MACOS X# ifndef LATTICE XE struct tm *FDECL(localtime, (const time_t *)); X# endif X X# if defined(ULTRIX) || defined(SYSV) || defined(MSDOS) XE time_t FDECL(time, (time_t *)); X# else XE long FDECL(time, (time_t *)); X# endif /* ULTRIX */ X#endif X X#ifdef MSDOS X# ifdef abs X# undef abs X# endif XE int FDECL(abs, (int)); XE int FDECL(atoi, (const char *)); X#endif X X#undef E X X#endif /* SYSTEM_H */ END_OF_FILE if test 7445 -ne `wc -c <'include/system.h'`; then echo shar: \"'include/system.h'\" unpacked with wrong size! fi # end of 'include/system.h' if test -f 'src/monst.c2' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'src/monst.c2'\" to \"'src/monst.c2.orig'\" mv -f 'src/monst.c2' 'src/monst.c2.orig' fi echo shar: Extracting \"'src/monst.c2'\" \(46080 characters\) sed "s/^X//" >'src/monst.c2' <<'END_OF_FILE' X X/* horrible kludge alert: X * This is a compiler-specific kludge to allow the compilation of monst.o in X * two pieces, by defining first SPLITMON_1 and then SPLITMON_2. The X * resulting assembler files (monst1.s and monst2.s) are then run through X * sed to change local symbols, concatenated together, and assembled to X * produce monst.o. THIS ONLY WORKS WITH THE ATARI GCC, and should only X * be done if you don't have enough memory to compile monst.o the "normal" X * way. --ERS X */ X X#ifndef SPLITMON_1 X#ifdef SPLITMON_2 Xstruct permonst _mons2[] = { X#endif X/* giant Humanoids */ X { "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(RED) }, X { "stone giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, 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(CYAN) }, X { "fire giant", S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1), X { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, 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, M1_ANIMAL | M1_FLY | M1_SEE_INVIS, X M2_WANDER | M2_STALK | 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(CYAN) }, 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(HI_LORD) }, X#endif X/* Liches */ X { "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1), X { { AT_TUCH, AD_COLD, 1, 10 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC, X M2_UNDEAD | 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 }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC, X M2_UNDEAD | M2_HOSTILE, C(RED) }, X { "master lich", S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | 1), X { { AT_TUCH, AD_COLD, 3, 6 }, { AT_MAGC, AD_SPEL, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_REGEN | X M1_MAGIC, M2_UNDEAD | M2_HOSTILE, C(HI_LORD) }, X/* Mummies */ X { "kobold mummy", S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_SILENT, MZ_SMALL, X M1_HUMANOID | M1_POIS, M2_UNDEAD | 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_POIS, M2_UNDEAD | M2_HOSTILE, C(RED) }, X { "orc mummy", S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 15, 150, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_GREEDY | M1_JEWELS, X M2_UNDEAD | M2_HOSTILE | M2_ORC, C(GRAY) }, X { "elf mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_SLEE_RES, X M2_UNDEAD | M2_HOSTILE | M2_ELF, C(GREEN) }, X { "human mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(GRAY) }, X { "ettin mummy", S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_POIS, X M2_UNDEAD | M2_HOSTILE | M2_STRONG, C(BLUE) }, X { "giant mummy", S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_POIS | M1_JEWELS, X M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) }, X/* Nagas */ X { "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 100, 0, MS_MUMBLE, MZ_LARGE, X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_FIRE_RES | M1_POIS_RES, X M2_STRONG, 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, X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_STON_RES, X M2_STRONG, 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, X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES, X M2_STRONG, 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, X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES, X M2_STRONG, 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_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_FIRE_RES, X M2_STRONG | M2_EGGS, 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_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | X M1_ACID | M1_STON_RES, X M2_STRONG | M2_EGGS, 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_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES, X M2_STRONG | M2_EGGS, C(HI_GOLD) }, X { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1), X { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 }, X { AT_SPIT, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK }, X 60, 400, 0, MS_MUMBLE, MZ_HUGE, X M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_POIS, X M2_STRONG | M2_EGGS, 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, X M2_STRONG | M2_LORD, C(RED) }, X { "ogre king", S_OGRE, 7, 14, 4, 60, -7, (G_GENO | 2), X { { AT_WEAP, AD_PHYS, 3, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 70, 750, 0, MS_GRUNT, MZ_LARGE, X M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT, X M2_STRONG | M2_PRINCE, 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_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES, X M2_HOSTILE | M2_OMNIVORE, 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_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES | X M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BROWN) }, X { "black pudding", S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_RUST, 3, 8 }, { AT_NONE, AD_RUST, 0, 0 }, X NO_ATTK, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_LARGE, X M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES | X M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, 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_HUMANOID, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) }, X/* Rust Monster */ X { "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2), X { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 }, X { AT_NONE, AD_RUST, 0, 0 }, NO_ATTK, NO_ATTK }, X 50, 500, 0, MS_SILENT, MZ_MEDIUM, X M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_METALLIVORE, X 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_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY, X M2_CARNIVORE | M2_EGGS, 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, X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | X M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) }, X { "water moccasin", S_SNAKE, 4, 15, 3, 0, 0, X (G_GENO | G_NOGEN | G_LGROUP), X { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 10, 100, 0, MS_HISS, MZ_SMALL, X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | X M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) }, X { "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1), X { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM, X M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | X M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) }, 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_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | X M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) }, 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_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_POIS_RES, X M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) }, 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, X M2_STRONG | M2_STALK | 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, X M2_STRONG | M2_STALK | 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_COLLECT, X M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(CYAN) }, X { "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 }, X { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_GRUNT, MZ_LARGE, X M1_SWIM | M1_HUMANOID | M1_REGEN, X M2_STRONG | M2_STALK | 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_COLLECT, X M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(HI_LORD) }, 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 M1_TUNNEL, M2_STRONG | 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_POIS | M1_REGEN, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) }, X { "vampire lord", S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | 1), X { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_BITE, AD_DRLI, 1, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN, X M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD, X C(BLUE) }, X { "Vlad the Impaler", S_VAMPIRE, 14, 18, -3, 80, -10, X (G_NOGEN | G_NOCORPSE | G_UNIQ), X { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | X M2_PRINCE, 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, M1_HUMANOID | M1_POIS_RES | M1_COLLECT, X M2_UNDEAD | M2_STALK | 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_POIS_RES, X M2_UNDEAD | M2_STALK | 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_POIS_RES | M1_COLLECT, X M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE, C(HI_LORD) }, 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_THICK_HIDE | M1_FIRE_RES | M1_COLD_RES | X M1_STON_RES, M2_HOSTILE | M2_STRONG, 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_POIS | X M1_POIS_RES, M2_UNDEAD | M2_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_POIS | X M1_POIS_RES, M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BROWN) }, X { "orc zombie", S_ZOMBIE, 2, 6, 9, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 15, 150, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS_RES | M1_GREEDY | X M1_JEWELS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, C(GRAY) }, X { "elf zombie", S_ZOMBIE, 3, 6, 9, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 35, 350, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS_RES | M1_SLEE_RES, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, C(GREEN) }, X { "human zombie", S_ZOMBIE, 4, 6, 8, 0, -3, X (G_GENO | G_SGROUP | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 40, 400, 0, MS_SILENT, MZ_HUMAN, X M1_HUMANOID | M1_POIS_RES, X M2_UNDEAD | M2_STALK | M2_HOSTILE, C(HI_DOMESTIC) }, X { "ettin zombie", S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 1, 10 }, { AT_CLAW, AD_PHYS, 1, 10 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_POIS_RES, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) }, X { "giant zombie", S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 }, X NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE, X M1_HUMANOID | M1_POIS_RES | M1_JEWELS, X M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) }, 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 | M1_THICK_HIDE, M2_HOSTILE, 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(RED) }, X { "clay golem", S_GOLEM, 11, 7, 7, 40, 0, (G_GENO | G_NOCORPSE | 1), X { { AT_CLAW, AD_PHYS, 3, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 75, 0, 0, MS_SILENT, MZ_LARGE, X M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE, X M2_HOSTILE | M2_STRONG, 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_THICK_HIDE | M1_STON_RES, X M2_HOSTILE | M2_STRONG, 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_THICK_HIDE | M1_POIS | M1_FIRE_RES | M1_COLD_RES | X M1_ELEC_RES | M1_COLLECT, X M2_HOSTILE | M2_STRONG, 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, X M1_NOPOLY | M1_HUMANOID | M1_COLLECT, X M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_DOMESTIC) }, 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, X M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT, X M2_WERE | M2_HOSTILE | M2_HUMAN, C(BROWN) }, 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, X M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT, X M2_WERE | M2_HOSTILE | M2_HUMAN, C(RED) }, 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, X M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT, X M2_WERE | M2_HOSTILE | M2_HUMAN, C(ORANGE_COLORED) }, 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(GREEN) }, 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(GREEN+BRIGHT) }, 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(GRAY) }, 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 | X M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) }, 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, X M1_HUMANOID | M1_COLLECT | M1_SLEE_RES, X M2_ELF | M2_STRONG | M2_PRINCE, C(HI_LORD) }, X { "nurse", S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3), X { { AT_CLAW, AD_HEAL, 2, 6 }, NO_ATTK, NO_ATTK, 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_DOMESTIC) }, X { "shopkeeper", S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN, X { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, 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_DOMESTIC) }, 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(BLUE) }, 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, X M2_HUMAN | M2_PEACEFUL | M2_FEM, C(HI_ZAP) }, 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(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, X M2_HUMAN | M2_PEACEFUL | M2_FEM, C(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_COLLECT, X M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BROWN) }, 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_COLLECT, X M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(GRAY) }, 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_COLLECT, X M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(RED) }, 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_COLLECT, X M2_HUMAN | M2_MERC | M2_STALK | 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_COLLECT, X M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) }, 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, 0, MS_HISS, MZ_LARGE, X M1_NOPOLY | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_POIS_RES | X M1_STON_RES, M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEM, 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 NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_CUSS, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | X M1_REGEN | M1_SEE_INVIS | M1_TPORT | M1_TPORT_CONTROL | M1_MAGIC, X M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PRINCE, X C(HI_LORD) }, 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, 0, MS_FERRY, MZ_HUMAN, X M1_NOPOLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | X M1_GREEDY | M1_COLLECT, M2_HUMAN | M2_PEACEFUL | M2_PNAME, X 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_POIS_RES, X M2_UNDEAD | M2_STALK | M2_HOSTILE, C(GRAY) }, 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_COLLECT, X M2_DEMON | M2_STALK | 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_CUSS, MZ_HUMAN, X M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT, X M2_DEMON | M2_STALK | 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, X M1_POIS | M1_FIRE_RES | M1_THICK_HIDE, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BROWN) }, 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, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) }, 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, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) }, 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, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) }, 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, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) }, 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_COLLECT, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_FEM, X 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_CUSS, MZ_LARGE, X M1_HUMANOID | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT | X M1_SLITHY, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, 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, X M1_POIS | M1_FIRE_RES | M1_THICK_HIDE, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, 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, X M2_DEMON | M2_STALK | 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, X M2_DEMON | M2_STALK | 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_COLLECT, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) }, 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, X M2_DEMON | M2_STALK | 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, X M2_DEMON | M2_STALK | 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_COLLECT, X M2_DEMON | M2_STALK | 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_POIS | M1_FIRE_RES, X M2_DEMON | M2_STALK | 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, 0, MS_GURGLE, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_ACID | M1_POIS | M1_FIRE_RES | X M1_AMORPHOUS, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD, 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, 0, MS_ORC, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_COLLECT, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD, X 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, 0, MS_ORC, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_COLLECT, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, X 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, 0, MS_BRIBE, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_SLITHY, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, 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, 0, MS_BRIBE, MZ_HUMAN, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | X M1_HUMANOID | M1_COLLECT, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, 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, 0, MS_BRIBE, MZ_LARGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, 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, 0, MS_BRIBE, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS | X M1_FIRE_RES | M1_COLD_RES, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | X M2_PRINCE, 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, 0, MS_GROWL, MZ_HUGE, X M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS | X M1_FIRE_RES, X M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, X 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 M2_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_COLLECT, M2_STALK, 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_SLITHY | M1_NOLIMBS | M1_NOPOLY, X M2_HOSTILE | M2_CARNIVORE | M2_EGGS, 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_SLITHY | M1_NOLIMBS | M1_NOPOLY | X M1_ELEC_RES, M2_HOSTILE | M2_CARNIVORE | M2_EGGS, 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 { "baby crocodile", S_LIZARD, 3, 6, 7, 0, 0, G_GENO, X { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, X 20, 200, 0, MS_SILENT, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_SWIM, 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 | M1_STON_RES, 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_THICK_HIDE | M1_NOHANDS | M1_SWIM, X M2_STRONG | M2_HOSTILE | M2_CARNIVORE | M2_EGGS, 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 | M1_TUNNEL | M1_NEEDPICK, X M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) }, 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_DOMESTIC) }, 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(RED) }, 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, X M2_HUMAN | M2_STRONG | M2_CARNIVORE | M2_FEM, C(HI_DOMESTIC) }, 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_DOMESTIC) }, 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_DOMESTIC) }, 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_DOMESTIC) }, 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_DOMESTIC) }, 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, X M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) }, 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_DOMESTIC) }, 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_DOMESTIC) }, 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_DOMESTIC) }, 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, X M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) }, 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_COLLECT | M1_MAGIC, X M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) }, 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 46080 -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 23 \(of 30\). cp /dev/null ark23isdone 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