From: nethack.allison Date: Fri, 6 Jan 2006 05:46:03 +0000 (+0000) Subject: mextra changes X-Git-Tag: MOVE2GIT~1166 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0dc071bee87fadfc7d447375d0e950e46aeb797d;p=nethack mextra changes Note: The CVS repository was tagged with NETHACK_PRE_MEXTRA prior to application of this patch to allow easy withdrawal if necessary. Adds a new mextra structure type that has a set of pointers to various types of monster structures including: mname, egd, epri, eshk, emin, edog Replaces the mextra bits in the monst structure with a single pointer called mtmp->mextra of type (struct mextra *). The pointer can be null if there are no additional structures attached. The mextra structure is not adjacent to the monst structure. Reduces the in-memory footprint of the monst that has no other structures attached, at the cost of adding 6 extra long ints per monster to the save file The new mextra structure has the mextra fields independent of each other, not overlapping as was the case with previous NetHack versions. This patch doesn't do anything to capitalize on that difference however. Consolidates vault.h, epri.h, eshk.h, emin.h and edog.h into mextra.h Adds a macro for checking for whether a monster has a name: has_name(monst) This fixes the magic trap panic expels() -> spoteffects() -> dotrap() -> domagictrap() -> tamedog() because the monst no longer varies in size so no replacement is required. --- diff --git a/Files b/Files index 3799cd1da..5ab0105cb 100644 --- a/Files +++ b/Files @@ -34,18 +34,17 @@ include: align.h amiconf.h artifact.h artilist.h attrib.h beconf.h botl.h color.h config.h config1.h context.h coord.h decl.h def_os2.h dgn_file.h -display.h dlb.h dungeon.h edog.h emin.h -engrave.h epri.h eshk.h extern.h flag.h -func_tab.h global.h hack.h lev.h mail.h -mfndpos.h micro.h mkroom.h monattk.h mondata.h -monflag.h monst.h monsym.h nhlan.h ntconf.h -obj.h objclass.h os2conf.h patchlevel.h pcconf.h -permonst.h prop.h qtext.h quest.h rect.h -region.h rm.h skills.h sp_lev.h spell.h -system.h tcap.h timeout.h tosconf.h tradstdc.h -trampoli.h trap.h unixconf.h vault.h vision.h -vmsconf.h wceconf.h winami.h winprocs.h wintype.h -you.h youprop.h +display.h dlb.h dungeon.h engrave.h extern.h +flag.h func_tab.h global.h hack.h lev.h +mail.h mextra.h mfndpos.h micro.h mkroom.h +monattk.h mondata.h monflag.h monst.h monsym.h +nhlan.h ntconf.h obj.h objclass.h os2conf.h +patchlevel.h pcconf.h permonst.h prop.h qtext.h +quest.h rect.h region.h rm.h skills.h +sp_lev.h spell.h system.h tcap.h timeout.h +tosconf.h tradstdc.h trampoli.h trap.h unixconf.h +vision.h vmsconf.h wceconf.h winami.h winprocs.h +wintype.h you.h youprop.h (file for tty versions) wintty.h (files for X versions) diff --git a/include/extern.h b/include/extern.h index ff9d4a4ef..485ef2418 100644 --- a/include/extern.h +++ b/include/extern.h @@ -426,6 +426,8 @@ E void FDECL(adj_abon, (struct obj *,SCHAR_P)); /* ### dog.c ### */ +E void FDECL(newedog, (struct monst *)); +E void FDECL(free_edog, (struct monst *)); E void FDECL(initedog, (struct monst *)); E struct monst *FDECL(make_familiar, (struct obj *,XCHAR_P,XCHAR_P,BOOLEAN_P)); E struct monst *NDECL(makedog); @@ -436,7 +438,7 @@ E void FDECL(mon_catchup_elapsed_time, (struct monst *,long)); E void FDECL(keepdogs, (BOOLEAN_P)); E void FDECL(migrate_to_level, (struct monst *,XCHAR_P,XCHAR_P,coord *)); E int FDECL(dogfood, (struct monst *,struct obj *)); -E struct monst *FDECL(tamedog, (struct monst *,struct obj *)); +E boolean FDECL(tamedog, (struct monst *,struct obj *)); E void FDECL(abuse_dog, (struct monst *)); E void FDECL(wary_dog, (struct monst *, BOOLEAN_P)); @@ -962,6 +964,7 @@ E void FDECL(readmail, (struct obj *)); /* ### makemon.c ### */ +E void FDECL(dealloc_monst, (struct monst *)); E boolean FDECL(is_home_elemental, (struct permonst *)); E struct monst *FDECL(clone_mon, (struct monst *,XCHAR_P,XCHAR_P)); E int FDECL(monhp_per_lvl, (struct monst *)); @@ -1027,6 +1030,8 @@ E int FDECL(doseduce, (struct monst *)); /* ### minion.c ### */ +E void FDECL(newemin, (struct monst *)); +E void FDECL(free_emin, (struct monst *)); E int FDECL(msummon, (struct monst *)); E void FDECL(summon_minion, (ALIGNTYP_P,BOOLEAN_P)); E int FDECL(demon_talk, (struct monst *)); @@ -1686,6 +1691,8 @@ E void FDECL(ghod_hitsu, (struct monst *)); E void NDECL(angry_priest); E void NDECL(clearpriests); E void FDECL(restpriest, (struct monst *,BOOLEAN_P)); +E void FDECL(newepri, (struct monst *)); +E void FDECL(free_epri, (struct monst *)); /* ### quest.c ### */ @@ -1774,6 +1781,7 @@ E void FDECL(getlev, (int,int,XCHAR_P,BOOLEAN_P)); E void FDECL(get_plname_from_file, (int, char *)); E void NDECL(minit); E boolean FDECL(lookup_id_mapping, (unsigned, unsigned *)); +E struct monst *FDECL(buffer_to_mon, (genericptr_t)); E void FDECL(mread, (int,genericptr_t,unsigned int)); #ifndef GOLDOBJ E void FDECL(put_gold_back, (struct obj **,long *)); @@ -1853,6 +1861,7 @@ E void NDECL(co_false); #else E void FDECL(savelev, (int,XCHAR_P,int)); #endif +E genericptr_t FDECL(mon_to_buffer, (struct monst *, int *)); E void FDECL(bufon, (int)); E void FDECL(bufoff, (int)); E void FDECL(bflush, (int)); @@ -1932,6 +1941,8 @@ E char *FDECL(Shk_Your, (char *,struct obj *)); /* ### shknam.c ### */ +E void FDECL(neweshk, (struct monst *)); +E void FDECL(free_eshk, (struct monst *)); E void FDECL(stock_room, (int,struct mkroom *)); E boolean FDECL(saleable, (struct monst *,struct obj *)); E int FDECL(get_shop_item, (int)); @@ -2207,6 +2218,8 @@ E int FDECL(hide_privileges, (BOOLEAN_P)); /* ### vault.c ### */ +E void FDECL(newegd, (struct monst *)); +E void FDECL(free_egd, (struct monst *)); E boolean FDECL(grddead, (struct monst *)); E char FDECL(vault_occupied, (char *)); E void NDECL(invault); diff --git a/include/hack.h b/include/hack.h index 1ae17d998..8ba14a8b5 100644 --- a/include/hack.h +++ b/include/hack.h @@ -163,16 +163,19 @@ NEARDATA extern coord bhitpos; /* place where throw or zap hits or stops */ #define NO_SPELL 0 /* flags to control makemon() */ -#define NO_MM_FLAGS 0x00 /* use this rather than plain 0 */ -#define NO_MINVENT 0x01 /* suppress minvent when creating mon */ -#define MM_NOWAIT 0x02 /* don't set STRAT_WAITMASK flags */ -#define MM_EDOG 0x04 /* add edog structure */ -#define MM_EMIN 0x08 /* add emin structure */ -#define MM_ANGRY 0x10 /* monster is created angry */ -#define MM_NONAME 0x20 /* monster is not christened */ -#define MM_NOCOUNTBIRTH 0x40 /* don't increment born counter (for revival) */ -#define MM_IGNOREWATER 0x80 /* ignore water when positioning */ -#define MM_ADJACENTOK 0x100 /* it is acceptable to use adjacent coordinates */ +#define NO_MM_FLAGS 0x00000 /* use this rather than plain 0 */ +#define NO_MINVENT 0x00001 /* suppress minvent when creating mon */ +#define MM_NOWAIT 0x00002 /* don't set STRAT_WAITMASK flags */ +#define MM_NOCOUNTBIRTH 0x00004 /* don't increment born counter (for revival) */ +#define MM_IGNOREWATER 0x00008 /* ignore water when positioning */ +#define MM_ADJACENTOK 0x00010 /* it is acceptable to use adjacent coordinates */ +#define MM_ANGRY 0x00020 /* monster is created angry */ +#define MM_NONAME 0x00040 /* monster is not christened */ +#define MM_EGD 0x00100 /* add egd structure */ +#define MM_EPRI 0x00200 /* add epri structure */ +#define MM_ESHK 0x00400 /* add eshk structure */ +#define MM_EMIN 0x00800 /* add emin structure */ +#define MM_EDOG 0x01000 /* add edog structure */ /* flags for make_corpse() and mkcorpstat() */ #define CORPSTAT_NONE 0x00 diff --git a/include/monst.h b/include/monst.h index b575d7e50..c25344dfb 100644 --- a/include/monst.h +++ b/include/monst.h @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)monst.h 3.5 2005/07/13 */ +/* SCCS Id: @(#)monst.h 3.5 2006/01/02 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -33,8 +33,8 @@ #define MINV_NOLET 0x01 #define MINV_ALL 0x02 -#ifndef ALIGN_H -#include "align.h" +#ifndef MEXTRA_H +#include "mextra.h" #endif struct monst { @@ -138,40 +138,16 @@ struct monst { long misc_worn_check; xchar weapon_check; - uchar mnamelth; /* length of name (following mxlth) */ - short mxlth; /* length of following data */ - /* in order to prevent alignment problems mextra should - be (or follow) a long int */ int meating; /* monster is eating timeout */ - long mextra[1]; /* monster dependent info */ + struct mextra *mextra; /* point to mextra struct */ }; -/* - * Note that mextra[] may correspond to any of a number of structures, which - * are indicated by some of the other fields. - * isgd -> struct egd - * ispriest -> struct epri - * isshk -> struct eshk - * isminion -> struct emin - * (struct epri for roaming priests and angels, which is - * compatible with emin for polymorph purposes) - * mtame -> struct edog - * (struct epri for guardian angels, which do not eat - * or do other doggy things) - * Since at most one structure can be indicated in this manner, it is not - * possible to tame any creatures using the other structures (the only - * exception being the guardian angels which are tame on creation). - */ - -#define newmonst(xl) (struct monst *)alloc((unsigned)(xl) + sizeof(struct monst)) -#define dealloc_monst(mon) free((genericptr_t)(mon)) +#define newmonst() (struct monst *)alloc(sizeof(struct monst)) /* these are in mspeed */ #define MSLOW 1 /* slow monster */ #define MFAST 2 /* speeded monster */ -#define NAME(mtmp) (((char *)(mtmp)->mextra) + (mtmp)->mxlth) - #define MON_WEP(mon) ((mon)->mw) #define MON_NOWEP(mon) ((mon)->mw = (struct obj *)0) diff --git a/include/patchlevel.h b/include/patchlevel.h index 920b463b1..02873ca36 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -13,7 +13,7 @@ * Incrementing EDITLEVEL can be used to force invalidation of old bones * and save files. */ -#define EDITLEVEL 24 +#define EDITLEVEL 25 #define COPYRIGHT_BANNER_A \ "NetHack, Copyright 1985-2005" diff --git a/include/permonst.h b/include/permonst.h index 4f44c11fc..d1beec54a 100644 --- a/include/permonst.h +++ b/include/permonst.h @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)permonst.h 3.5 1999/07/02 */ +/* SCCS Id: @(#)permonst.h 3.5 2006/01/04 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -50,7 +50,6 @@ struct permonst { struct attack mattk[NATTK]; /* attacks matrix */ unsigned short cwt, /* weight of corpse */ cnutrit; /* its nutritional value */ - short pxlth; /* length of extension */ uchar msound; /* noise it makes (6 bits) */ uchar msize; /* physical size (3 bits) */ uchar mresists; /* resistances */ diff --git a/src/apply.c b/src/apply.c index ceef3750c..1f5d2babd 100644 --- a/src/apply.c +++ b/src/apply.c @@ -3,7 +3,6 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "edog.h" static const char tools[] = { TOOL_CLASS, WEAPON_CLASS, WAND_CLASS, 0 }; static const char tools_too[] = { ALL_CLASSES, TOOL_CLASS, POTION_CLASS, diff --git a/src/cmd.c b/src/cmd.c index c59090a9f..ef21b077f 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -134,6 +134,7 @@ extern void FDECL(show_borlandc_stats, (winid)); #ifdef DEBUG_MIGRATING_MONS STATIC_PTR int NDECL(wiz_migrate_mons); #endif +STATIC_DCL int FDECL(size_monst, (struct monst *)); STATIC_DCL void FDECL(count_obj, (struct obj *, long *, long *, BOOLEAN_P, BOOLEAN_P)); STATIC_DCL void FDECL(obj_chain, (winid, const char *, struct obj *, long *, long *)); STATIC_DCL void FDECL(mon_invent_chain, (winid, const char *, struct monst *, long *, long *)); @@ -1848,6 +1849,22 @@ contained(win, src, total_count, total_size) putstr(win, 0, buf); } +STATIC_OVL int +size_monst(mtmp) +struct monst *mtmp; +{ + int sz = sizeof(struct monst); + if (mtmp->mextra) { + if (MNAME(mtmp)) sz += strlen(MNAME(mtmp))+1; + if (EGD(mtmp)) sz += sizeof(struct egd); + if (EPRI(mtmp)) sz += sizeof(struct epri); + if (ESHK(mtmp)) sz += sizeof(struct eshk); + if (EMIN(mtmp)) sz += sizeof(struct emin); + if (EDOG(mtmp)) sz += sizeof(struct edog); + } + return sz; +} + STATIC_OVL void mon_chain(win, src, chain, total_count, total_size) winid win; @@ -1862,7 +1879,7 @@ mon_chain(win, src, chain, total_count, total_size) for (count = size = 0, mon = chain; mon; mon = mon->nmon) { count++; - size += sizeof(struct monst) + mon->mxlth + mon->mnamelth; + size += size_monst(mon); } *total_count += count; *total_size += size; diff --git a/src/dig.c b/src/dig.c index c3d26e5d9..4a2cd240a 100644 --- a/src/dig.c +++ b/src/dig.c @@ -3,7 +3,7 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "edog.h" + /* #define DEBUG */ /* turn on for diagnostics */ static NEARDATA boolean did_dig_msg; diff --git a/src/do_name.c b/src/do_name.c index b1354f875..b9b11e064 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -218,7 +218,6 @@ struct monst *mtmp; const char *name; { int lth; - struct monst *mtmp2; char buf[PL_PSIZ]; /* dogname & catname are PL_PSIZ arrays; object names have same limit */ @@ -228,19 +227,16 @@ const char *name; name = strncpy(buf, name, PL_PSIZ - 1); buf[PL_PSIZ - 1] = '\0'; } - if (lth == mtmp->mnamelth) { - /* don't need to allocate a new monst struct */ - if (lth) Strcpy(NAME(mtmp), name); + if (has_name(mtmp) && lth == (int)(strlen(MNAME(mtmp)) + 1)) { + /* don't need to allocate a new mname */ + if (lth) Strcpy(MNAME(mtmp), name); return mtmp; } - mtmp2 = newmonst(mtmp->mxlth + lth); - *mtmp2 = *mtmp; - (void) memcpy((genericptr_t)mtmp2->mextra, - (genericptr_t)mtmp->mextra, mtmp->mxlth); - mtmp2->mnamelth = lth; - if (lth) Strcpy(NAME(mtmp2), name); - replmon(mtmp,mtmp2); - return(mtmp2); + if (has_name(mtmp)) free((genericptr_t)MNAME(mtmp)); + + MNAME(mtmp) = (char *)alloc(lth); + if (lth) Strcpy(MNAME(mtmp), name); + return(mtmp); } int @@ -701,8 +697,8 @@ boolean called; if (do_hallu) { Strcat(buf, rndmonnam()); name_at_start = FALSE; - } else if (mtmp->mnamelth) { - char *name = NAME(mtmp); + } else if (has_name(mtmp)) { + char *name = MNAME(mtmp); if (mdat == &mons[PM_GHOST]) { Sprintf(eos(buf), "%s ghost", s_suffix(name)); @@ -775,7 +771,7 @@ l_monnam(mtmp) register struct monst *mtmp; { return(x_monnam(mtmp, ARTICLE_NONE, (char *)0, - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, TRUE)); + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, TRUE)); } char * @@ -783,7 +779,7 @@ mon_nam(mtmp) register struct monst *mtmp; { return(x_monnam(mtmp, ARTICLE_THE, (char *)0, - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE)); + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE)); } /* print the name as if mon_nam() was called, but assume that the player @@ -795,7 +791,7 @@ noit_mon_nam(mtmp) register struct monst *mtmp; { return(x_monnam(mtmp, ARTICLE_THE, (char *)0, - mtmp->mnamelth ? (SUPPRESS_SADDLE|SUPPRESS_IT) : + (has_name(mtmp)) ? (SUPPRESS_SADDLE|SUPPRESS_IT) : SUPPRESS_IT, FALSE)); } @@ -835,7 +831,7 @@ struct monst *mtmp; int prefix, suppression_flag; prefix = mtmp->mtame ? ARTICLE_YOUR : ARTICLE_THE; - suppression_flag = (mtmp->mnamelth + suppression_flag = (has_name(mtmp) #ifdef STEED /* "saddled" is redundant when mounted */ || mtmp == u.usteed @@ -851,7 +847,7 @@ register struct monst *mtmp; register const char *adj; { register char *bp = x_monnam(mtmp, ARTICLE_THE, adj, - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE); + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE); *bp = highc(*bp); return(bp); @@ -862,7 +858,7 @@ a_monnam(mtmp) register struct monst *mtmp; { return x_monnam(mtmp, ARTICLE_A, (char *)0, - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE); + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE); } char * diff --git a/src/dog.c b/src/dog.c index 0a6294cf4..03e4324cb 100644 --- a/src/dog.c +++ b/src/dog.c @@ -1,12 +1,33 @@ -/* SCCS Id: @(#)dog.c 3.5 2005/03/17 */ +/* SCCS Id: @(#)dog.c 3.5 2006/01/03 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "edog.h" STATIC_DCL int NDECL(pet_type); +void +newedog(mtmp) +struct monst *mtmp; +{ + if (!mtmp->mextra) mtmp->mextra = newmextra(); + if (!EDOG(mtmp)) { + EDOG(mtmp) = (struct edog *)alloc(sizeof(struct edog)); + (void) memset((genericptr_t) EDOG(mtmp), 0, sizeof(struct edog)); + } +} + +void +free_edog(mtmp) +struct monst *mtmp; +{ + if (mtmp->mextra && EDOG(mtmp)) { + free((genericptr_t) EDOG(mtmp)); + EDOG(mtmp) = (struct edog *)0; + } + mtmp->mtame = 0; +} + void initedog(mtmp) register struct monst *mtmp; @@ -764,24 +785,27 @@ register struct obj *obj; } } -struct monst * +/* + * With the separate mextra structure added in 3.5.x this always + * operates on the original mtmp. It now returns TRUE if the taming + * succeeded. + */ +boolean tamedog(mtmp, obj) register struct monst *mtmp; register struct obj *obj; { - register struct monst *mtmp2; - /* The Wiz, Medusa and the quest nemeses aren't even made peaceful. */ if (mtmp->iswiz || mtmp->data == &mons[PM_MEDUSA] || (mtmp->data->mflags3 & M3_WANTSARTI)) - return((struct monst *)0); + return FALSE; /* worst case, at least it'll be peaceful. */ mtmp->mpeaceful = 1; set_malign(mtmp); if(flags.moonphase == FULL_MOON && night() && rn2(6) && obj && mtmp->data->mlet == S_DOG) - return((struct monst *)0); + return FALSE; /* If we cannot tame it, at least it's no longer afraid. */ mtmp->mflee = 0; @@ -818,9 +842,9 @@ register struct obj *obj; /* eating might have killed it, but that doesn't matter here; a non-null result suppresses "miss" message for thrown food and also implies that the object has been deleted */ - return mtmp; + return TRUE; } else - return (struct monst *)0; + return FALSE; } if (mtmp->mtame || !mtmp->mcanmove || @@ -828,35 +852,30 @@ register struct obj *obj; mtmp->isshk || mtmp->isgd || mtmp->ispriest || mtmp->isminion || is_covetous(mtmp->data) || is_human(mtmp->data) || (is_demon(mtmp->data) && !is_demon(youmonst.data)) || - (obj && dogfood(mtmp, obj) >= MANFOOD)) return (struct monst *)0; + (obj && dogfood(mtmp, obj) >= MANFOOD)) return FALSE; if (mtmp->m_id == quest_status.leader_m_id) - return((struct monst *)0); + return FALSE; - /* make a new monster which has the pet extension */ - mtmp2 = newmonst(sizeof(struct edog) + mtmp->mnamelth); - *mtmp2 = *mtmp; - mtmp2->mxlth = sizeof(struct edog); - if (mtmp->mnamelth) Strcpy(NAME(mtmp2), NAME(mtmp)); - initedog(mtmp2); - replmon(mtmp, mtmp2); - /* `mtmp' is now obsolete */ + /* add the pet extension */ + newedog(mtmp); + initedog(mtmp); if (obj) { /* thrown food */ /* defer eating until the edog extension has been set up */ - place_object(obj, mtmp2->mx, mtmp2->my); /* put on floor */ + place_object(obj, mtmp->mx, mtmp->my); /* put on floor */ /* devour the food (might grow into larger, genocided monster) */ - if (dog_eat(mtmp2, obj, mtmp2->mx, mtmp2->my, TRUE) == 2) - return mtmp2; /* oops, it died... */ + if (dog_eat(mtmp, obj, mtmp->mx, mtmp->my, TRUE) == 2) + return TRUE; /* oops, it died... */ /* `obj' is now obsolete */ } - newsym(mtmp2->mx, mtmp2->my); - if (attacktype(mtmp2->data, AT_WEAP)) { - mtmp2->weapon_check = NEED_HTH_WEAPON; - (void) mon_wield_item(mtmp2); + newsym(mtmp->mx, mtmp->my); + if (attacktype(mtmp->data, AT_WEAP)) { + mtmp->weapon_check = NEED_HTH_WEAPON; + (void) mon_wield_item(mtmp); } - return(mtmp2); + return TRUE; } /* diff --git a/src/dogmove.c b/src/dogmove.c index f779f345c..3675736a0 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -5,7 +5,6 @@ #include "hack.h" #include "mfndpos.h" -#include "edog.h" extern boolean notonhead; diff --git a/src/dokick.c b/src/dokick.c index c76c871f2..ba110ecb0 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -3,7 +3,6 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "eshk.h" #define is_bigfoot(x) ((x) == &mons[PM_SASQUATCH]) #define martial() (martial_bonus() || is_bigfoot(youmonst.data) || \ diff --git a/src/dothrow.c b/src/dothrow.c index 038822327..be3f7f9e3 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -5,7 +5,6 @@ /* Contains code for 't' (throw) */ #include "hack.h" -#include "edog.h" STATIC_DCL int FDECL(throw_obj, (struct obj *,int)); STATIC_DCL void NDECL(autoquiver); diff --git a/src/eat.c b/src/eat.c index a48d767c9..86b2167c6 100644 --- a/src/eat.c +++ b/src/eat.c @@ -3,7 +3,7 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "edog.h" + /* #define DEBUG */ /* uncomment to enable new eat code debugging */ #ifdef DEBUG diff --git a/src/end.c b/src/end.c index 73657647b..cb1dbc236 100644 --- a/src/end.c +++ b/src/end.c @@ -5,7 +5,6 @@ #define NEED_VARARGS /* comment line for pre-compiled headers */ #include "hack.h" -#include "eshk.h" #include "lev.h" #ifndef NO_SIGNAL #include @@ -205,7 +204,7 @@ register struct monst *mtmp; killer.format = KILLED_BY; } /* _the_ ghost of Dudley */ - if (mtmp->data == &mons[PM_GHOST] && mtmp->mnamelth) { + if (mtmp->data == &mons[PM_GHOST] && has_name(mtmp)) { Strcat(buf, "the "); killer.format = KILLED_BY; } @@ -216,7 +215,7 @@ register struct monst *mtmp; if(mtmp->data == &mons[PM_GHOST]) { Strcat(buf, "ghost"); - if (mtmp->mnamelth) Sprintf(eos(buf), " of %s", NAME(mtmp)); + if (has_name(mtmp)) Sprintf(eos(buf), " of %s", MNAME(mtmp)); } else if(mtmp->isshk) { const char *shknm = shkname(mtmp), *honorific = shkname_is_pname(mtmp) ? "" : @@ -230,8 +229,8 @@ register struct monst *mtmp; Strcat(buf, m_monnam(mtmp)); } else { Strcat(buf, mtmp->data->mname); - if (mtmp->mnamelth) - Sprintf(eos(buf), " called %s", NAME(mtmp)); + if (has_name(mtmp)) + Sprintf(eos(buf), " called %s", MNAME(mtmp)); } if (multi) Strcat(buf, ", while helpless"); diff --git a/src/makemon.c b/src/makemon.c index c4dd7614f..2832978b2 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -3,14 +3,13 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "epri.h" -#include "emin.h" -#include "edog.h" + #ifdef REINCARNATION #include #endif STATIC_VAR NEARDATA struct monst zeromonst; +STATIC_VAR NEARDATA struct mextra zeromextra; /* this assumes that a human quest leader or nemesis is an archetype of the corresponding role; that isn't so for some roles (tourist @@ -683,8 +682,9 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */ return (struct monst *)0; } } - m2 = newmonst(0); + m2 = newmonst(); *m2 = *mon; /* copy condition of old monster */ + m2->mextra = (struct mextra *)0; m2->nmon = fmon; fmon = m2; m2->m_id = context.ident++; @@ -714,16 +714,14 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */ if (mon->isshk) m2->isshk = FALSE; if (mon->isgd) m2->isgd = FALSE; if (mon->ispriest) m2->ispriest = FALSE; - m2->mxlth = 0; place_monster(m2, m2->mx, m2->my); if (emits_light(m2->data)) new_light_source(m2->mx, m2->my, emits_light(m2->data), LS_MONSTER, (genericptr_t)m2); - if (m2->mnamelth) { - m2->mnamelth = 0; /* or it won't get allocated */ - m2 = christen_monst(m2, NAME(mon)); + if (has_name(mon)) { + m2 = christen_monst(m2, MNAME(mon)); } else if (mon->isshk) { - m2 = christen_monst(m2, shkname(mon)); + m2 = christen_monst(m2, shkname(mon)); } /* not all clones caused by player are tame or peaceful */ @@ -736,24 +734,17 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */ newsym(m2->mx,m2->my); /* display the new monster */ if (m2->mtame) { - struct monst *m3; - if (mon->isminion) { - m3 = newmonst(sizeof(struct epri) + mon->mnamelth); - *m3 = *m2; - m3->mxlth = sizeof(struct epri); - if (m2->mnamelth) Strcpy(NAME(m3), NAME(m2)); - *(EPRI(m3)) = *(EPRI(mon)); - replmon(m2, m3); - m2 = m3; + newemin(m2); + if (EMIN(mon)) *(EMIN(m2)) = *(EMIN(mon)); + if (EPRI(mon)) *(EPRI(m2)) = *(EPRI(mon)); } else { /* because m2 is a copy of mon it is tame but not init'ed. * however, tamedog will not re-tame a tame dog, so m2 * must be made non-tame to get initialized properly. */ m2->mtame = 0; - if ((m3 = tamedog(m2, (struct obj *)0)) != 0) { - m2 = m3; + if (tamedog(m2, (struct obj *)0)) { *(EDOG(m2)) = *(EDOG(mon)); } } @@ -877,7 +868,7 @@ register int x, y; register int mmflags; { register struct monst *mtmp; - int mndx, mcham, ct, mitem, xlth; + int mndx, mcham, ct, mitem; boolean anymon = (!ptr); boolean byyou = (x == u.ux && y == u.uy); boolean allow_minvent = ((mmflags & NO_MINVENT) == 0); @@ -948,12 +939,15 @@ register int mmflags; mndx = monsndx(ptr); } (void) propagate(mndx, countbirth, FALSE); - xlth = ptr->pxlth; - if (mmflags & MM_EDOG) xlth += sizeof(struct edog); - else if (mmflags & MM_EMIN) xlth += sizeof(struct emin); - mtmp = newmonst(xlth); + mtmp = newmonst(); *mtmp = zeromonst; /* clear all entries in structure */ - (void)memset((genericptr_t)mtmp->mextra, 0, xlth); + + if (mmflags & MM_EGD) newegd(mtmp); + if (mmflags & MM_EPRI) newepri(mtmp); + if (mmflags & MM_ESHK) neweshk(mtmp); + if (mmflags & MM_EMIN) newemin(mtmp); + if (mmflags & MM_EDOG) newedog(mtmp); + mtmp->nmon = fmon; fmon = mtmp; mtmp->m_id = context.ident++; @@ -962,7 +956,6 @@ register int mmflags; if (mtmp->data->msound == MS_LEADER && quest_info(MS_LEADER) == mndx) quest_status.leader_m_id = mtmp->m_id; - mtmp->mxlth = xlth; mtmp->mnum = mndx; /* set up level and hit points */ @@ -1102,7 +1095,9 @@ register int mmflags; types; make sure their extended data is initialized to something sensible (caller can override these settings) */ if (mndx == PM_ALIGNED_PRIEST || (mndx == PM_ANGEL && !rn2(3))) { - struct emin *eminp = EMIN(mtmp); + struct emin *eminp; + newemin(mtmp); + eminp = EMIN(mtmp); mtmp->isminion = 1; /* make priest be a roamer */ eminp->min_align = rn2(3) - 1; /* no A_NONE */ @@ -1640,9 +1635,9 @@ struct monst *mtmp; if (mtmp->ispriest || mtmp->isminion) { /* some monsters have individual alignments; check them */ - if (mtmp->ispriest) + if (mtmp->ispriest && EPRI(mtmp)) mal = EPRI(mtmp)->shralign; - else if (mtmp->isminion) + else if (mtmp->isminion && EMIN(mtmp)) mal = EMIN(mtmp)->min_align; /* unless alignment is none, set mal to -5,0,5 */ /* (see align.h for valid aligntyp values) */ diff --git a/src/mhitm.c b/src/mhitm.c index f28f011f8..dc8a050c1 100644 --- a/src/mhitm.c +++ b/src/mhitm.c @@ -4,7 +4,6 @@ #include "hack.h" #include "artifact.h" -#include "edog.h" extern boolean notonhead; diff --git a/src/mhitu.c b/src/mhitu.c index bd34b6161..a2a3fe3ea 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -2560,7 +2560,6 @@ register struct attack *mattk; return 1; } -#include "edog.h" struct monst * cloneu() { diff --git a/src/minion.c b/src/minion.c index f66cd1b7d..041fcafac 100644 --- a/src/minion.c +++ b/src/minion.c @@ -1,10 +1,30 @@ -/* SCCS Id: @(#)minion.c 3.5 2005/11/01 */ +/* SCCS Id: @(#)minion.c 3.5 2006/01/03 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "emin.h" -#include "epri.h" + +void +newemin(mtmp) +struct monst *mtmp; +{ + if (!mtmp->mextra) mtmp->mextra = newmextra(); + if (!EMIN(mtmp)) { + EMIN(mtmp) = (struct emin *)alloc(sizeof(struct emin)); + (void) memset((genericptr_t) EMIN(mtmp), 0, sizeof(struct emin)); + } +} + +void +free_emin(mtmp) +struct monst *mtmp; +{ + if (mtmp->mextra && EMIN(mtmp)) { + free((genericptr_t) EMIN(mtmp)); + EMIN(mtmp) = (struct emin *)0; + } + mtmp->isminion = 0; +} int msummon(mon) /* mon summons a monster */ @@ -73,7 +93,7 @@ struct monst *mon; } while (cnt > 0) { - mtmp = makemon(&mons[dtype], u.ux, u.uy, NO_MM_FLAGS); + mtmp = makemon(&mons[dtype], u.ux, u.uy, MM_EMIN); if (mtmp) { result++; /* an angel's alignment should match the summoner */ @@ -117,9 +137,19 @@ boolean talk; } if (mnum == NON_PM) { mon = 0; - } else if (mons[mnum].pxlth == 0 || mnum == PM_ANGEL) { - mon = makemon(&mons[mnum], u.ux, u.uy, - (mnum == PM_ANGEL) ? NO_MM_FLAGS : MM_EMIN); + } else if (mnum == PM_ANGEL) { + mon = makemon(&mons[mnum], u.ux, u.uy, MM_EPRI|MM_EMIN); + if (mon) { + mon->isminion = 1; + EMIN(mon)->min_align = alignment; + EMIN(mon)->renegade = FALSE; + EPRI(mon)->shralign = alignment; + } + } else if (mnum != PM_SHOPKEEPER && mnum != PM_GUARD && + mnum != PM_ALIGNED_PRIEST && mnum != PM_HIGH_PRIEST) { + /* This was mons[mnum].pxlth == 0 but is this restriction + appropriate or necessary now that the structures are separate? */ + mon = makemon(&mons[mnum], u.ux, u.uy, MM_EMIN); if (mon) { mon->isminion = 1; EMIN(mon)->min_align = alignment; diff --git a/src/mkobj.c b/src/mkobj.c index 5ec8c525b..a7abd3fed 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1070,11 +1070,13 @@ struct obj *obj; struct monst *mtmp; { struct obj *otmp; + genericptr_t buffer; int lth, namelth; - lth = sizeof(struct monst) + mtmp->mxlth + mtmp->mnamelth; namelth = obj->onamelth ? strlen(ONAME(obj)) + 1 : 0; - otmp = realloc_obj(obj, lth, (genericptr_t) mtmp, namelth, ONAME(obj)); + buffer = mon_to_buffer(mtmp, <h); + otmp = realloc_obj(obj, lth, buffer, namelth, ONAME(obj)); + free(buffer); if (otmp && otmp->oxlth) { struct monst *mtmp2 = (struct monst *)otmp->oextra; if (mtmp->data) mtmp2->mnum = monsndx(mtmp->data); @@ -1084,6 +1086,7 @@ struct monst *mtmp; mtmp2->nmon = (struct monst *)0; mtmp2->data = (struct permonst *)0; mtmp2->minvent = (struct obj *)0; + /* mon_to_buffer() took care of x and mname */ #ifndef GOLDOBJ /* not a pointer but is discarded along with minvent */ mtmp2->mgold = 0L; @@ -1108,11 +1111,7 @@ boolean copyof; mtmp = (struct monst *)obj->oextra; if (mtmp) { if (copyof) { - int lth = mtmp->mxlth + mtmp->mnamelth; - mnew = newmonst(lth); - lth += sizeof(struct monst); - (void) memcpy((genericptr_t)mnew, - (genericptr_t)mtmp, lth); + mnew = buffer_to_mon((genericptr_t)mtmp); } else { /* Never insert this returned pointer into mon chains! */ mnew = mtmp; diff --git a/src/mon.c b/src/mon.c index b064c34ae..07db84520 100644 --- a/src/mon.c +++ b/src/mon.c @@ -9,7 +9,6 @@ #include "hack.h" #include "mfndpos.h" -#include "edog.h" #include STATIC_DCL boolean FDECL(restrap,(struct monst *)); @@ -19,6 +18,7 @@ STATIC_DCL long FDECL(mm_displacement, (struct monst *,struct monst *)); #endif STATIC_DCL int NDECL(pick_animal); STATIC_DCL void FDECL(kill_eggs, (struct obj *)); +STATIC_DCL void FDECL(dealloc_mextra, (struct mextra *)); #ifdef REINCARNATION #define LEVEL_SPECIFIC_NOCORPSE(mdat) \ @@ -232,19 +232,28 @@ unsigned corpseflags; num = d(2,6); while (num--) obj = mksobj_at(IRON_CHAIN, x, y, TRUE, FALSE); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_GLASS_GOLEM: num = d(2,4); /* very low chance of creating all glass gems */ while (num--) obj = mksobj_at((LAST_GEM + rnd(9)), x, y, TRUE, FALSE); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_CLAY_GOLEM: obj = mksobj_at(ROCK, x, y, FALSE, FALSE); obj->quan = (long)(rn2(20) + 50); obj->owt = weight(obj); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_STONE_GOLEM: corpstatflags &= ~CORPSTAT_INIT; @@ -256,24 +265,36 @@ unsigned corpseflags; while(num--) { obj = mksobj_at(QUARTERSTAFF, x, y, TRUE, FALSE); } - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_LEATHER_GOLEM: num = d(2,4); while(num--) obj = mksobj_at(LEATHER_ARMOR, x, y, TRUE, FALSE); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_GOLD_GOLEM: /* Good luck gives more coins */ obj = mkgold((long)(200 - rnl(101)), x, y); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; case PM_PAPER_GOLEM: num = rnd(4); while (num--) obj = mksobj_at(SCR_BLANK_PAPER, x, y, TRUE, FALSE); - mtmp->mnamelth = 0; + if (has_name(mtmp)) { + free((genericptr_t)MNAME(mtmp)); + MNAME(mtmp) = (char *)0; + } break; default_1: default: @@ -298,8 +319,8 @@ unsigned corpseflags; prevent the same attack beam from hitting its corpse */ if (context.bypasses) bypass_obj(obj); - if (mtmp->mnamelth) - obj = oname(obj, NAME(mtmp)); + if (has_name(mtmp)) + obj = oname(obj, MNAME(mtmp)); /* Avoid "It was hidden under a green mold corpse!" * during Blind combat. An unseen monster referred to as "it" @@ -1347,6 +1368,29 @@ register struct monst *mon; } } +void +dealloc_mextra(x) +struct mextra *x; +{ + if (x) { + if (x->mname) free((genericptr_t)x->mname); + if (x->egd) free((genericptr_t)x->egd); + if (x->epri) free((genericptr_t)x->epri); + if (x->eshk) free((genericptr_t)x->eshk); + if (x->emin) free((genericptr_t)x->emin); + if (x->edog) free((genericptr_t)x->edog); + } + free((genericptr_t)x); +} + +void +dealloc_monst(mon) +struct monst *mon; +{ + if (mon->mextra) dealloc_mextra(mon->mextra); + free((genericptr_t)mon); +} + /* remove effects of mtmp from other data structures */ STATIC_OVL void m_detach(mtmp, mptr) @@ -1704,7 +1748,7 @@ register struct monst *mdef; so that saved monster traits won't retain any stale item-conferred attributes */ otmp = mkcorpstat(STATUE, mdef, mdef->data, x, y, CORPSTAT_NONE); - if (mdef->mnamelth) otmp = oname(otmp, NAME(mdef)); + if (has_name(mdef)) otmp = oname(otmp, MNAME(mdef)); while ((obj = oldminvent) != 0) { oldminvent = obj->nobj; (void) add_to_container(otmp, obj); @@ -1825,9 +1869,9 @@ int dest; You("%s %s!", verb, !mtmp->mtame ? mon_nam(mtmp) : x_monnam(mtmp, - mtmp->mnamelth ? ARTICLE_NONE : ARTICLE_THE, + (has_name(mtmp)) ? ARTICLE_NONE : ARTICLE_THE, "poor", - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE)); } } @@ -2485,17 +2529,16 @@ boolean msg; /* "The oldmon turns into a newmon!" */ if(!rn2(10)) mtmp->female = !mtmp->female; } - if (In_endgame(&u.uz) && is_mplayer(olddata)) { + if (In_endgame(&u.uz) && is_mplayer(olddata) && has_name(mtmp)) { /* mplayers start out as "Foo the Bar", but some of the * titles are inappropriate when polymorphed, particularly * into the opposite sex. players don't use ranks when * polymorphed, so dropping the rank for mplayers seems * reasonable. */ - char *p = index(NAME(mtmp), ' '); + char *p = index(MNAME(mtmp), ' '); if (p) { *p = '\0'; - mtmp->mnamelth = p - NAME(mtmp) + 1; } } @@ -2579,8 +2622,8 @@ boolean msg; /* "The oldmon turns into a newmon!" */ newsym(mtmp->mx,mtmp->my); if (msg) { - uchar save_mnamelth = mtmp->mnamelth; - mtmp->mnamelth = 0; + char *save_mname = (has_name(mtmp)) ? MNAME(mtmp) : (char *)0; + if (mtmp->mextra) MNAME(mtmp) = (char *)0; Strcpy(newname, (mdat == &mons[PM_GREEN_SLIME]) ? "slime" : x_monnam(mtmp, ARTICLE_A, (char *)0,SUPPRESS_SADDLE, FALSE)); @@ -2588,7 +2631,7 @@ boolean msg; /* "The oldmon turns into a newmon!" */ (void) usmellmon(mdat); else pline("%s turns into %s!", oldname, newname); - mtmp->mnamelth = save_mnamelth; + if(mtmp->mextra) MNAME(mtmp) = save_mname; } possibly_unwield(mtmp, polyspot); /* might lose use of weapon */ diff --git a/src/monst.c b/src/monst.c index 0685ff81c..6ee3f065c 100644 --- a/src/monst.c +++ b/src/monst.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)monst.c 3.5 2005/11/02 */ +/* SCCS Id: @(#)monst.c 3.5 2006/01/04 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -6,10 +6,7 @@ #include "permonst.h" #include "monsym.h" #include "dungeon.h" /* prerequisite for eshk,vault,epri */ -#include "eshk.h" -#include "vault.h" -#include "epri.h" -#include "emin.h" +#include "mextra.h" #define NO_ATTK {0,0,0,0} @@ -46,7 +43,7 @@ void NDECL(monst_init); {nam,sym,lvl,gen,atk,siz,mr1,mr2,flg1,flg2,flg3,C(col)} /* LVL() and SIZ() collect several fields to cut down on # of args for MON() */ #define LVL(lvl,mov,ac,mr,aln) lvl,mov,ac,mr,aln -#define SIZ(wt,nut,pxl,snd,siz) wt,nut,pxl,snd,siz +#define SIZ(wt,nut,snd,siz) wt,nut,snd,siz /* ATTK() and A() are to avoid braces and commas within args to MON() */ #define ATTK(at,ad,n,d) {at,ad,n,d} #define A(a1,a2,a3,a4,a5,a6) {a1,a2,a3,a4,a5,a6} @@ -100,42 +97,42 @@ NEARDATA struct permonst mons[] = { LVL(2, 18, 3, 0, 0), (G_GENO|G_SGROUP|3), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_TINY), 0, 0, + SIZ(10, 10, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BROWN), MON("killer bee", S_ANT, LVL(1, 18, -1, 0, 0), (G_GENO|G_LGROUP|2), A(ATTK(AT_STNG, AD_DRST, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1, 5, 0, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, + SIZ(1, 5, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL|M1_FLY|M1_NOHANDS|M1_POIS, M2_HOSTILE|M2_FEMALE, 0, CLR_YELLOW), MON("soldier ant", S_ANT, LVL(3, 18, 3, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_DRST, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(20, 5, 0, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, + SIZ(20, 5, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BLUE), MON("fire ant", S_ANT, LVL(3, 18, 3, 10, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_BITE, AD_FIRE, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 10, 0, MS_SILENT, MZ_TINY), MR_FIRE, MR_FIRE, + SIZ(30, 10, MS_SILENT, MZ_TINY), MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), MON("giant beetle", S_ANT, LVL(5, 6, 4, 0, 0), (G_GENO|3), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(10, 10, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BLACK), MON("queen bee", S_ANT, LVL(9, 24, -4, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_STNG, AD_DRST, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1, 5, 0, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, + SIZ(1, 5, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_ANIMAL|M1_FLY|M1_NOHANDS|M1_OVIPAROUS|M1_POIS, M2_HOSTILE|M2_FEMALE|M2_PRINCE, 0, HI_LORD), /* @@ -145,7 +142,7 @@ NEARDATA struct permonst mons[] = { LVL(1, 3, 8, 0, 0), (G_GENO|2), A(ATTK(AT_NONE, AD_ACID, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 10, 0, MS_SILENT, MZ_TINY), + SIZ(30, 10, MS_SILENT, MZ_TINY), MR_SLEEP|MR_POISON|MR_ACID|MR_STONE, MR_STONE, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID, @@ -154,7 +151,7 @@ NEARDATA struct permonst mons[] = { LVL(5, 1, 8, 0, 0), (G_GENO|2), A(ATTK(AT_TUCH, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 100, 0, MS_SILENT, MZ_SMALL), + SIZ(200, 100, MS_SILENT, MZ_SMALL), MR_SLEEP|MR_POISON, MR_POISON, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_WANDER|M2_HOSTILE|M2_NEUTER, 0, CLR_WHITE), @@ -162,7 +159,7 @@ NEARDATA struct permonst mons[] = { LVL(6, 6, 8, 0, 0), (G_GENO|2), A(ATTK(AT_TUCH, AD_PLYS, 2, 4), ATTK(AT_NONE, AD_PLYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 150, 0, MS_SILENT, MZ_LARGE), + SIZ(600, 150, MS_SILENT, MZ_LARGE), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_OMNIVORE|M1_ACID, @@ -174,7 +171,7 @@ NEARDATA struct permonst mons[] = { LVL(4, 4, 8, 30, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 1, 2), ATTK(AT_TUCH, AD_STON, 0, 0), ATTK(AT_NONE, AD_STON, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_HISS, MZ_TINY), + SIZ(10, 10, MS_HISS, MZ_TINY), MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), @@ -182,7 +179,7 @@ NEARDATA struct permonst mons[] = { LVL(5, 6, 6, 30, 0), (G_GENO|5), A(ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_TUCH, AD_STON, 0, 0), ATTK(AT_NONE, AD_STON, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_HISS, MZ_SMALL), + SIZ(30, 30, MS_HISS, MZ_SMALL), MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE|M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, CLR_YELLOW), @@ -190,7 +187,7 @@ NEARDATA struct permonst mons[] = { LVL(6, 6, 6, 30, 0), (G_GENO|1), A(ATTK(AT_GAZE, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_HISS, MZ_SMALL), + SIZ(30, 30, MS_HISS, MZ_SMALL), MR_POISON|MR_FIRE, MR_POISON|MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE|M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), @@ -201,104 +198,104 @@ NEARDATA struct permonst mons[] = { LVL(0, 12, 7, 0, 0), (G_GENO|G_SGROUP|3), A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 250, 0, MS_BARK, MZ_SMALL), 0, 0, + SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("fox", S_DOG, LVL(0, 15, 7, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 250, 0, MS_BARK, MZ_SMALL), 0, 0, + SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), MON("coyote", S_DOG, LVL(1, 12, 7, 0, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 250, 0, MS_BARK, MZ_SMALL), 0, 0, + SIZ(300, 250, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("werejackal", S_DOG, LVL(2, 12, 7, 10, -7), (G_NOGEN|G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 250, 0, MS_BARK, MZ_SMALL), MR_POISON, 0, + SIZ(300, 250, MS_BARK, MZ_SMALL), MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("little dog", S_DOG, LVL(2, 18, 6, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(150, 150, 0, MS_BARK, MZ_SMALL), 0, 0, + SIZ(150, 150, MS_BARK, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("dingo", S_DOG, LVL(4, 16, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1 ,6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 200, 0, MS_BARK, MZ_MEDIUM), 0, 0, + SIZ(400, 200, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_YELLOW), MON("dog", S_DOG, LVL(4, 16, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1 ,6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 200, 0, MS_BARK, MZ_MEDIUM), 0, 0, + SIZ(400, 200, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("large dog", S_DOG, LVL(6, 15, 4, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 250, 0, MS_BARK, MZ_MEDIUM), 0, 0, + SIZ(800, 250, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("wolf", S_DOG, LVL(5, 12, 4, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 250, 0, MS_BARK, MZ_MEDIUM), 0, 0, + SIZ(500, 250, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("werewolf", S_DOG, LVL(5, 12, 4, 20, -7), (G_NOGEN|G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 250, 0, MS_BARK, MZ_MEDIUM), MR_POISON, 0, + SIZ(500, 250, MS_BARK, MZ_MEDIUM), MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("winter wolf cub", S_DOG, LVL(5, 12, 4, 0, -5), (G_NOHELL|G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 1, 8), ATTK(AT_BREA, AD_COLD, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(250, 200, 0, MS_BARK, MZ_SMALL), MR_COLD, MR_COLD, + SIZ(250, 200, MS_BARK, MZ_SMALL), MR_COLD, MR_COLD, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_CYAN), MON("warg", S_DOG, LVL(7, 12, 4, 0, -5), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(850, 350, 0, MS_BARK, MZ_MEDIUM), 0, 0, + SIZ(850, 350, MS_BARK, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("winter wolf", S_DOG, LVL(7, 12, 4, 20, 0), (G_NOHELL|G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_BREA, AD_COLD, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(700, 300, 0, MS_BARK, MZ_LARGE), MR_COLD, MR_COLD, + SIZ(700, 300, MS_BARK, MZ_LARGE), MR_COLD, MR_COLD, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, CLR_CYAN), MON("hell hound pup", S_DOG, LVL(7, 12, 4, 20, -5), (G_HELL|G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_BREA, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 200, 0, MS_BARK, MZ_SMALL), MR_FIRE, MR_FIRE, + SIZ(200, 200, MS_BARK, MZ_SMALL), MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), MON("hell hound", S_DOG, LVL(12, 14, 2, 20, 0), (G_HELL|G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BREA, AD_FIRE, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_BARK, MZ_MEDIUM), MR_FIRE, MR_FIRE, + SIZ(600, 300, MS_BARK, MZ_MEDIUM), MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_RED), #ifdef CHARON @@ -306,7 +303,7 @@ NEARDATA struct permonst mons[] = { LVL(12, 10, 2, 20, -7), (G_HELL|G_UNIQ|1), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 350, 0, MS_BARK, MZ_LARGE), MR_FIRE, MR_FIRE, + SIZ(1000, 350, MS_BARK, MZ_LARGE), MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_NOPOLY|M2_HOSTILE|M2_STRONG|M2_PNAME|M2_MALE, M3_INFRAVISIBLE, CLR_RED), @@ -318,35 +315,35 @@ NEARDATA struct permonst mons[] = { LVL(1, 3, 10, 0, 0), (G_NOCORPSE|G_GENO|1), A(ATTK(AT_BOOM, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(10, 10, MS_SILENT, MZ_SMALL), 0, 0, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, 0, CLR_GRAY), MON("floating eye", S_EYE, LVL(2, 1, 9, 10, 0), (G_GENO|5), A(ATTK(AT_NONE, AD_PLYS, 0,70), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(10, 10, MS_SILENT, MZ_SMALL), 0, 0, M1_FLY|M1_AMPHIBIOUS|M1_NOLIMBS|M1_NOHEAD|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_BLUE), MON("freezing sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE|G_NOHELL|G_GENO|2), A(ATTK(AT_EXPL, AD_COLD, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), MR_COLD, MR_COLD, + SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_COLD, MR_COLD, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_WHITE), MON("flaming sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE|G_GENO|2), A(ATTK(AT_EXPL, AD_FIRE, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), MR_FIRE, MR_FIRE, + SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_FIRE, MR_FIRE, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_RED), MON("shocking sphere", S_EYE, LVL(6, 13, 4, 0, 0), (G_NOCORPSE|G_GENO|2), A(ATTK(AT_EXPL, AD_ELEC, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), MR_ELEC, MR_ELEC, + SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_ELEC, MR_ELEC, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, HI_ZAP), #if 0 /* not yet implemented */ @@ -355,7 +352,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_GAZE, AD_SLOW, 0, 0), ATTK(AT_GAZE, AD_SLEE, 2,25), ATTK(AT_GAZE, AD_DISN, 0, 0), ATTK(AT_GAZE, AD_STON, 0, 0), ATTK(AT_GAZE, AD_CNCL, 2, 4), ATTK(AT_BITE, AD_PHYS, 2, 4)), - SIZ(10, 10, 0, MS_SILENT, MZ_SMALL), MR_COLD, 0, + SIZ(10, 10, MS_SILENT, MZ_SMALL), MR_COLD, 0, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_NOPOLY|M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_BROWN), #endif @@ -366,49 +363,49 @@ NEARDATA struct permonst mons[] = { LVL(2, 18, 6, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(150, 150, 0, MS_MEW, MZ_SMALL), 0, 0, + SIZ(150, 150, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("housecat", S_FELINE, LVL(4, 16, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 200, 0, MS_MEW, MZ_SMALL), 0, 0, + SIZ(200, 200, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("jaguar", S_FELINE, LVL(4, 15, 6, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("lynx", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_GROWL, MZ_SMALL), 0, 0, + SIZ(600, 300, MS_GROWL, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE,M2_HOSTILE, M3_INFRAVISIBLE, CLR_CYAN), MON("panther", S_FELINE, LVL(5, 15, 6, 0, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE,M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLACK), MON("large cat", S_FELINE, LVL(6, 15, 4, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(250, 250, 0, MS_MEW, MZ_SMALL), 0, 0, + SIZ(250, 250, MS_MEW, MZ_SMALL), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, HI_DOMESTIC), MON("tiger", S_FELINE, LVL(6, 12, 6, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_BITE, AD_PHYS, 1,10), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(600, 300, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_YELLOW), /* @@ -419,20 +416,20 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_CURS, 0, 0), NO_ATTK, NO_ATTK), - SIZ(100, 20, 0, MS_LAUGH, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(100, 20, MS_LAUGH, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM|M1_HUMANOID|M1_POIS, M2_STALK, M3_INFRAVISIBLE, CLR_GREEN), MON("gargoyle", S_GREMLIN, LVL(6, 10, -4, 0, -9), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 200, 0, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, + SIZ(1000, 200, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, M1_HUMANOID|M1_THICK_HIDE|M1_BREATHLESS, M2_HOSTILE|M2_STRONG, 0, CLR_BROWN), MON("winged gargoyle", S_GREMLIN, LVL(9, 15, -2, 0, -12), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_BITE, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 300, 0, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, + SIZ(1200, 300, MS_GRUNT, MZ_HUMAN), MR_STONE, MR_STONE, M1_FLY|M1_HUMANOID|M1_THICK_HIDE|M1_BREATHLESS|M1_OVIPAROUS, M2_LORD|M2_HOSTILE|M2_STRONG|M2_MAGIC, 0, HI_LORD), /* @@ -442,14 +439,14 @@ NEARDATA struct permonst mons[] = { LVL(1, 9, 10, 0, 6), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 200, 0, MS_HUMANOID, MZ_SMALL), 0, 0, + SIZ(500, 200, MS_HUMANOID, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GREEN), MON("dwarf", S_HUMANOID, LVL(2, 6, 10, 10, 4), (G_GENO|3), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 300, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_DWARF|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), @@ -457,14 +454,14 @@ NEARDATA struct permonst mons[] = { LVL(3, 9, 5, 0, -6), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1250, 250, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(1250, 250, MS_GROWL, MZ_LARGE), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), MON("dwarf lord", S_HUMANOID, LVL(4, 6, 10, 10, 5), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 300, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_DWARF|M2_STRONG|M2_LORD|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), @@ -472,7 +469,7 @@ NEARDATA struct permonst mons[] = { LVL(6, 6, 10, 20, 6), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 300, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(900, 300, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_DWARF|M2_STRONG|M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), @@ -481,7 +478,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), NO_ATTK, NO_ATTK), - SIZ(1450, 400, 0, MS_HISS, MZ_HUMAN), 0, 0, + SIZ(1450, 400, MS_HISS, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_FLY|M1_SEE_INVIS|M1_OMNIVORE, M2_HOSTILE|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_MAGENTA), @@ -490,7 +487,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1), ATTK(AT_TENT, AD_DRIN, 2, 1)), - SIZ(1450, 400, 0, MS_HISS, MZ_HUMAN), 0, 0, + SIZ(1450, 400, MS_HISS, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_FLY|M1_SEE_INVIS|M1_OMNIVORE, M2_HOSTILE|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_MAGENTA), @@ -501,26 +498,26 @@ NEARDATA struct permonst mons[] = { LVL(1, 3, 7, 0, -7), (G_GENO|G_LGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 100, 0, MS_SILENT, MZ_SMALL), MR_SLEEP|MR_POISON, 0, + SIZ(100, 100, MS_SILENT, MZ_SMALL), MR_SLEEP|MR_POISON, 0, M1_POIS, M2_HOSTILE|M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("homunculus", S_IMP, LVL(2, 12, 6, 10, -7), (G_GENO|2), A(ATTK(AT_BITE, AD_SLEE, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(60, 100, 0, MS_SILENT, MZ_TINY), + SIZ(60, 100, MS_SILENT, MZ_TINY), MR_SLEEP|MR_POISON, MR_SLEEP|MR_POISON, M1_FLY|M1_POIS, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GREEN), MON("imp", S_IMP, LVL(3, 12, 2, 20, -7), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(20, 10, 0, MS_CUSS, MZ_TINY), 0, 0, + SIZ(20, 10, MS_CUSS, MZ_TINY), 0, 0, M1_REGEN, M2_WANDER|M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("lemure", S_IMP, LVL(3, 3, 7, 0, -7), (G_HELL|G_GENO|G_LGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(150, 100, 0, MS_SILENT, MZ_MEDIUM), + SIZ(150, 100, MS_SILENT, MZ_MEDIUM), MR_SLEEP|MR_POISON, MR_SLEEP, M1_POIS|M1_REGEN, M2_HOSTILE|M2_WANDER|M2_STALK|M2_NEUTER, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), @@ -528,13 +525,13 @@ NEARDATA struct permonst mons[] = { LVL(3, 15, 2, 20, -7), (G_GENO|2), A(ATTK(AT_CLAW, AD_DRDX, 1, 2), ATTK(AT_CLAW, AD_DRDX, 1, 2), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 200, 0, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(200, 200, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_REGEN, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), MON("tengu", S_IMP, LVL(6, 13, 5, 30, 7), (G_GENO|3), A(ATTK(AT_BITE, AD_PHYS, 1, 7), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 200, 0, MS_SQAWK, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(300, 200, MS_SQAWK, MZ_SMALL), MR_POISON, MR_POISON, M1_TPORT|M1_TPORT_CNTRL, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_CYAN), /* @@ -544,7 +541,7 @@ NEARDATA struct permonst mons[] = { LVL(4, 0, 8, 10, 0), (G_GENO|2), A(ATTK(AT_NONE, AD_COLD, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 20, 0, MS_SILENT, MZ_MEDIUM), + SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_COLD|MR_POISON, MR_COLD|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS |M1_NOTAKE, @@ -553,7 +550,7 @@ NEARDATA struct permonst mons[] = { LVL(5, 0, 8, 10, 0), (G_GENO|1), A(ATTK(AT_NONE, AD_ACID, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 20, 0, MS_SILENT, MZ_MEDIUM), MR_ACID|MR_STONE, 0, + SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_GREEN), @@ -561,7 +558,7 @@ NEARDATA struct permonst mons[] = { LVL(6, 3, 8, 20, 0), (G_GENO|2), A(ATTK(AT_ENGL, AD_ACID, 3, 6), ATTK(AT_NONE, AD_ACID, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 20, 0, MS_SILENT, MZ_MEDIUM), MR_ACID|MR_STONE, 0, + SIZ(50, 20, MS_SILENT, MZ_MEDIUM), MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN), @@ -572,21 +569,21 @@ NEARDATA struct permonst mons[] = { LVL(0, 6, 10, 0, -2), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 100, 0, MS_ORC, MZ_SMALL), MR_POISON, 0, + SIZ(400, 100, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), MON("large kobold", S_KOBOLD, LVL(1, 6, 10, 0, -3), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(450, 150, 0, MS_ORC, MZ_SMALL), MR_POISON, 0, + SIZ(450, 150, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("kobold lord", S_KOBOLD, LVL(2, 6, 10, 0, -4), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 200, 0, MS_ORC, MZ_SMALL), MR_POISON, 0, + SIZ(500, 200, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), @@ -594,7 +591,7 @@ NEARDATA struct permonst mons[] = { LVL(2, 6, 6, 10, -4), (G_GENO|1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(450, 150, 0, MS_ORC, MZ_SMALL), MR_POISON, 0, + SIZ(450, 150, MS_ORC, MZ_SMALL), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, HI_ZAP), /* @@ -604,7 +601,7 @@ NEARDATA struct permonst mons[] = { LVL(5, 15, 8, 20, 0), (G_GENO|4), A(ATTK(AT_CLAW, AD_SGLD, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(60, 30, 0, MS_LAUGH, MZ_TINY), 0, 0, + SIZ(60, 30, MS_LAUGH, MZ_TINY), 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_GREEDY, M3_INFRAVISIBLE, CLR_GREEN), /* * mimics @@ -613,7 +610,7 @@ NEARDATA struct permonst mons[] = { LVL(7, 3, 7, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 200, 0, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, + SIZ(300, 200, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BROWN), @@ -621,7 +618,7 @@ NEARDATA struct permonst mons[] = { LVL(8, 3, 7, 10, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_STCK, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 400, 0, MS_SILENT, MZ_LARGE), MR_ACID, 0, + SIZ(600, 400, MS_SILENT, MZ_LARGE), MR_ACID, 0, M1_CLING|M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, CLR_RED), @@ -629,7 +626,7 @@ NEARDATA struct permonst mons[] = { LVL(9, 3, 7, 20, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_STCK, 3, 6), ATTK(AT_CLAW, AD_STCK, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 500, 0, MS_SILENT, MZ_LARGE), MR_ACID, 0, + SIZ(800, 500, MS_SILENT, MZ_LARGE), MR_ACID, 0, M1_CLING|M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, HI_LORD), @@ -640,21 +637,21 @@ NEARDATA struct permonst mons[] = { LVL(3, 12, 9, 20, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_SEDUCE, MZ_HUMAN), 0, 0, + SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_GREEN), MON("water nymph", S_NYMPH, LVL(3, 12, 9, 20, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_SEDUCE, MZ_HUMAN), 0, 0, + SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_TPORT|M1_SWIM, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_BLUE), MON("mountain nymph", S_NYMPH, LVL(3, 12, 9, 20, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_CLAW, AD_SEDU, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_SEDUCE, MZ_HUMAN), 0, 0, + SIZ(600, 300, MS_SEDUCE, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_BROWN), /* @@ -664,14 +661,14 @@ NEARDATA struct permonst mons[] = { LVL(0, 6, 10, 0, -3), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 100, 0, MS_ORC, MZ_SMALL), 0, 0, + SIZ(400, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), MON("hobgoblin", S_ORC, LVL(1, 9, 10, 0, -4), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 200, 0, MS_ORC, MZ_HUMAN), 0, 0, + SIZ(1000, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), /* plain "orc" for zombie corpses only; not created at random @@ -680,42 +677,42 @@ NEARDATA struct permonst mons[] = { LVL(1, 9, 10, 0, -3), (G_GENO|G_NOGEN|G_LGROUP), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(850, 150, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(850, 150, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("hill orc", S_ORC, LVL(2, 9, 10, 0, -4), (G_GENO|G_LGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 200, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(1000, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_YELLOW), MON("Mordor orc", S_ORC, LVL(3, 5, 10, 0, -5), (G_GENO|G_LGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 200, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(1200, 200, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), MON("Uruk-hai", S_ORC, LVL(3, 7, 10, 0, -4), (G_GENO|G_LGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1300, 300, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(1300, 300, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLACK), MON("orc shaman", S_ORC, LVL(3, 9, 5, 10, -5), (G_GENO|1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 300, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(1000, 300, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, HI_ZAP), MON("orc-captain", S_ORC, LVL(5, 5, 10, 0, -5), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1350, 350, 0, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, + SIZ(1350, 350, MS_ORC, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), /* @@ -725,21 +722,21 @@ NEARDATA struct permonst mons[] = { LVL(3, 1, 3, 0, 0), (G_GENO|4), A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 200, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(200, 200, MS_SILENT, MZ_SMALL), 0, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_GRAY), MON("iron piercer", S_PIERCER, LVL(5, 1, 0, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 300, 0, MS_SILENT, MZ_MEDIUM), 0, 0, + SIZ(400, 300, MS_SILENT, MZ_MEDIUM), 0, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_CYAN), MON("glass piercer", S_PIERCER, LVL(7, 1, 0, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 300, 0, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, + SIZ(400, 300, MS_SILENT, MZ_MEDIUM), MR_ACID, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_WHITE), /* @@ -749,49 +746,49 @@ NEARDATA struct permonst mons[] = { LVL(2, 9, 7, 0, 0), (G_GENO|G_SGROUP|4), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 100, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(400, 100, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("mumak", S_QUADRUPED, LVL(5, 9, 0, 0, -2), (G_GENO|1), A(ATTK(AT_BUTT, AD_PHYS, 4,12), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2500, 500, 0, MS_ROAR, MZ_LARGE), 0, 0, + SIZ(2500, 500, MS_ROAR, MZ_LARGE), 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), MON("leocrotta", S_QUADRUPED, LVL(6, 18, 4, 10, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 500, 0, MS_IMITATE, MZ_LARGE), 0, 0, + SIZ(1200, 500, MS_IMITATE, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_RED), MON("wumpus", S_QUADRUPED, LVL(8, 3, 2, 10, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2500, 500, 0, MS_BURBLE, MZ_LARGE), 0, 0, + SIZ(2500, 500, MS_BURBLE, MZ_LARGE), 0, 0, M1_CLING|M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_CYAN), MON("titanothere", S_QUADRUPED, LVL(12, 12, 6, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2650, 650, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(2650, 650, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), MON("baluchitherium", S_QUADRUPED, LVL(14, 12, 5, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 5, 4), ATTK(AT_CLAW, AD_PHYS, 5, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(3800, 800, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(3800, 800, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), MON("mastodon", S_QUADRUPED, LVL(20, 12, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BUTT, AD_PHYS, 4, 8), ATTK(AT_BUTT, AD_PHYS, 4, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(3800, 800, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(3800, 800, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_BLACK), /* @@ -801,42 +798,42 @@ NEARDATA struct permonst mons[] = { LVL(0, 12, 7, 0, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(20, 12, 0, MS_SQEEK, MZ_TINY), 0, 0, + SIZ(20, 12, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("giant rat", S_RODENT, LVL(1, 10, 7, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_SQEEK, MZ_TINY), 0, 0, + SIZ(30, 30, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("rabid rat", S_RODENT, LVL(2, 12, 6, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DRCO, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 5, 0, MS_SQEEK, MZ_TINY), MR_POISON, 0, + SIZ(30, 5, MS_SQEEK, MZ_TINY), MR_POISON, 0, M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("wererat", S_RODENT, LVL(2, 12, 6, 10, -7), (G_NOGEN|G_NOCORPSE), A(ATTK(AT_BITE, AD_WERE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(40, 30, 0, MS_SQEEK, MZ_TINY), MR_POISON, 0, + SIZ(40, 30, MS_SQEEK, MZ_TINY), MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("rock mole", S_RODENT, LVL(3, 3, 0, 20, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(30, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_TUNNEL|M1_ANIMAL|M1_NOHANDS|M1_METALLIVORE, M2_HOSTILE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE, CLR_GRAY), MON("woodchuck", S_RODENT, LVL(3, 3, 0, 20, 0), (G_NOGEN|G_GENO), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(30, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_TUNNEL/*LOGGING*/|M1_ANIMAL|M1_NOHANDS|M1_SWIM|M1_HERBIVORE, /* In reality, they tunnel instead of cutting lumber. Oh, well. */ M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), @@ -847,28 +844,28 @@ NEARDATA struct permonst mons[] = { LVL(1, 12, 3, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 50, 0, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, + SIZ(50, 50, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_GRAY), MON("centipede", S_SPIDER, LVL(2, 4, 3, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DRST, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 50, 0, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, + SIZ(50, 50, MS_SILENT, MZ_TINY), MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_YELLOW), MON("giant spider", S_SPIDER, LVL(5, 15, 4, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 100, 0, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(100, 100, MS_SILENT, MZ_LARGE), MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, CLR_MAGENTA), MON("scorpion", S_SPIDER, LVL(5, 15, 3, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_STNG, AD_DRST, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 100, 0, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(50, 100, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_RED), /* @@ -878,14 +875,14 @@ NEARDATA struct permonst mons[] = { LVL(10, 3, 3, 0, 0), (G_GENO|2), A(ATTK(AT_ENGL, AD_DGST, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 350, 0, MS_SILENT, MZ_HUGE), 0, 0, + SIZ(800, 350, MS_SILENT, MZ_HUGE), 0, 0, M1_HIDE|M1_FLY|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_CARNIVORE, M2_HOSTILE|M2_STALK|M2_STRONG, 0, CLR_GRAY), MON("trapper", S_TRAPPER, LVL(12, 3, 3, 0, 0), (G_GENO|2), A(ATTK(AT_ENGL, AD_DGST, 1,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 350, 0, MS_SILENT, MZ_HUGE), 0, 0, + SIZ(800, 350, MS_SILENT, MZ_HUGE), 0, 0, M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_CARNIVORE, M2_HOSTILE|M2_STALK|M2_STRONG, 0, CLR_GREEN), /* @@ -895,42 +892,42 @@ NEARDATA struct permonst mons[] = { LVL(3, 16, 6, 0, 0), (G_GENO|2), A(ATTK(AT_KICK, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1300, 250, 0, MS_NEIGH, MZ_MEDIUM), 0, 0, + SIZ(1300, 250, MS_NEIGH, MZ_MEDIUM), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), MON("white unicorn", S_UNICORN, LVL(4, 24, 2, 70, 7), (G_GENO|2), A(ATTK(AT_BUTT, AD_PHYS, 1,12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1300, 300, 0, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, CLR_WHITE), MON("gray unicorn", S_UNICORN, LVL(4, 24, 2, 70, 0), (G_GENO|1), A(ATTK(AT_BUTT, AD_PHYS, 1,12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1300, 300, 0, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, CLR_GRAY), MON("black unicorn", S_UNICORN, LVL(4, 24, 2, 70, -7), (G_GENO|1), A(ATTK(AT_BUTT, AD_PHYS, 1,12), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1300, 300, 0, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(1300, 300, MS_NEIGH, MZ_LARGE), MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, CLR_BLACK), MON("horse", S_UNICORN, LVL(5, 20, 5, 0, 0), (G_GENO|2), A(ATTK(AT_KICK, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 300, 0, MS_NEIGH, MZ_LARGE), 0, 0, + SIZ(1500, 300, MS_NEIGH, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), MON("warhorse", S_UNICORN, LVL(7, 24, 4, 0, 0), (G_GENO|2), A(ATTK(AT_KICK, AD_PHYS, 1, 10), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1800, 350, 0, MS_NEIGH, MZ_LARGE), 0, 0, + SIZ(1800, 350, MS_NEIGH, MZ_LARGE), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, CLR_BROWN), /* @@ -940,7 +937,7 @@ NEARDATA struct permonst mons[] = { LVL(3, 1, 0, 0, 0), (G_GENO|G_NOCORPSE|2), A(ATTK(AT_ENGL, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP|MR_POISON|MR_STONE, 0, + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_AMORPHOUS|M1_UNSOLID, M2_HOSTILE|M2_NEUTER, 0, CLR_GRAY), @@ -948,14 +945,14 @@ NEARDATA struct permonst mons[] = { LVL(4, 20, 2, 30, 0), (G_GENO|G_NOCORPSE|2), A(ATTK(AT_ENGL, AD_BLND, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP|MR_POISON|MR_STONE, 0, + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN), MON("ice vortex", S_VORTEX, LVL(5, 20, 2, 30, 0), (G_NOHELL|G_GENO|G_NOCORPSE|1), A(ATTK(AT_ENGL, AD_COLD, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_CYAN), @@ -963,7 +960,7 @@ NEARDATA struct permonst mons[] = { LVL(6, 20, 2, 30, 0), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_ENGL, AD_ELEC, 1, 6), ATTK(AT_ENGL, AD_DREN, 0, 0), ATTK(AT_NONE, AD_ELEC, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_ELEC|MR_SLEEP|MR_DISINT|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, @@ -972,7 +969,7 @@ NEARDATA struct permonst mons[] = { LVL(7, 22, 2, 30, 0), (G_HELL|G_GENO|G_NOCORPSE|2), A(ATTK(AT_ENGL, AD_FIRE, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, @@ -981,7 +978,7 @@ NEARDATA struct permonst mons[] = { LVL(8, 22, 2, 30, 0), (G_HELL|G_GENO|G_NOCORPSE|1), A(ATTK(AT_ENGL, AD_FIRE, 1,10), ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, @@ -993,28 +990,28 @@ NEARDATA struct permonst mons[] = { LVL(8, 3, 5, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 250, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(600, 250, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_BROWN), MON("baby purple worm", S_WORM, LVL(8, 3, 5, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 250, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(600, 250, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_MAGENTA), MON("long worm", S_WORM, LVL(8, 3, 5, 10, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_SILENT, MZ_GIGANTIC), 0, 0, + SIZ(1500, 500, MS_SILENT, MZ_GIGANTIC), 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_OVIPAROUS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE|M2_STRONG|M2_NASTY, 0, CLR_BROWN), MON("purple worm", S_WORM, LVL(15, 9, 6, 20, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 2, 8), ATTK(AT_ENGL, AD_DGST, 1,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2700, 700, 0, MS_SILENT, MZ_GIGANTIC), 0, 0, + SIZ(2700, 700, MS_SILENT, MZ_GIGANTIC), 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, 0, CLR_MAGENTA), /* @@ -1024,13 +1021,13 @@ NEARDATA struct permonst mons[] = { LVL(0, 12, 9, 0, 0), (G_GENO|G_SGROUP|G_NOCORPSE|3), A(ATTK(AT_BITE, AD_ELEC, 1, 1), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(15, 10, 0, MS_BUZZ, MZ_TINY), MR_ELEC|MR_POISON, 0, + SIZ(15, 10, MS_BUZZ, MZ_TINY), MR_ELEC|MR_POISON, 0, M1_ANIMAL, M2_HOSTILE, M3_INFRAVISIBLE, CLR_MAGENTA), MON("xan", S_XAN, LVL(7, 18, -4, 0, 0), (G_GENO|3), A(ATTK(AT_STNG, AD_LEGS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 300, 0, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, + SIZ(300, 300, MS_BUZZ, MZ_TINY), MR_POISON, MR_POISON, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_POIS, M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), /* @@ -1040,7 +1037,7 @@ NEARDATA struct permonst mons[] = { LVL(3, 15, 0, 0, 0), (G_NOCORPSE|G_GENO|4), A(ATTK(AT_EXPL, AD_BLND, 10,20), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_SMALL), + SIZ(0, 0, MS_SILENT, MZ_SMALL), MR_FIRE|MR_COLD|MR_ELEC|MR_DISINT|MR_SLEEP|MR_POISON|MR_ACID| MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| @@ -1050,7 +1047,7 @@ NEARDATA struct permonst mons[] = { LVL(5, 15, 0, 0, 0), (G_NOCORPSE|G_GENO|2), A(ATTK(AT_EXPL, AD_HALU, 10,12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_SMALL), + SIZ(0, 0, MS_SILENT, MZ_SMALL), MR_FIRE|MR_COLD|MR_ELEC|MR_DISINT|MR_SLEEP|MR_POISON|MR_ACID| MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| @@ -1063,7 +1060,7 @@ NEARDATA struct permonst mons[] = { LVL(9, 8, 3, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_BITE, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 600, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(1200, 600, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_BROWN), /* @@ -1073,7 +1070,7 @@ NEARDATA struct permonst mons[] = { LVL(8, 10, 5, 30, 7), (G_NOHELL|G_SGROUP|G_NOCORPSE|1), A(ATTK(AT_BITE, AD_DRST, 2, 4), ATTK(AT_BITE, AD_PHYS, 1, 3), ATTK(AT_HUGS, AD_WRAP, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 400, 0, MS_HISS, MZ_LARGE), MR_POISON, 0, + SIZ(900, 400, MS_HISS, MZ_LARGE), MR_POISON, 0, M1_FLY|M1_NOHANDS|M1_SLITHY|M1_POIS, M2_MINION|M2_STALK|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GREEN), @@ -1081,7 +1078,7 @@ NEARDATA struct permonst mons[] = { LVL(10, 8, 0, 30, 7), (G_NOHELL|G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_IMITATE, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_IMITATE, MZ_HUMAN), MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS, M2_MINION|M2_STALK|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, @@ -1095,7 +1092,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_MAGM, 2, 6), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, sizeof(struct emin), MS_CUSS, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_CUSS, MZ_HUMAN), MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_FLY|M1_HUMANOID|M1_SEE_INVIS, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_COLLECT, @@ -1105,7 +1102,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_KICK, AD_PHYS, 2, 4), ATTK(AT_KICK, AD_PHYS, 2, 4), ATTK(AT_BUTT, AD_PHYS, 3, 6), ATTK(AT_MAGC, AD_SPEL, 2, 6), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEIGH, MZ_LARGE), 0, 0, + SIZ(WT_HUMAN, 400, MS_NEIGH, MZ_LARGE), 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_SEE_INVIS, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_LORD, M3_INFRAVISIBLE|M3_INFRAVISION, HI_GOLD), @@ -1114,7 +1111,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_GAZE, AD_BLND, 2, 6), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_MAGC, AD_SPEL, 4, 6), NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_CUSS, MZ_LARGE), + SIZ(WT_HUMAN, 400, MS_CUSS, MZ_LARGE), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_FLY|M1_HUMANOID|M1_SEE_INVIS|M1_REGEN, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_LORD| @@ -1127,28 +1124,28 @@ NEARDATA struct permonst mons[] = { LVL(0, 22, 8, 0, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(20, 20, 0, MS_SQEEK, MZ_TINY), 0, 0, + SIZ(20, 20, MS_SQEEK, MZ_TINY), 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER, M3_INFRAVISIBLE, CLR_BROWN), MON("giant bat", S_BAT, LVL(2, 22, 7, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_SQEEK, MZ_SMALL), 0, 0, + SIZ(30, 30, MS_SQEEK, MZ_SMALL), 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, CLR_RED), MON("raven", S_BAT, LVL(4, 20, 6, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_BLND, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(40, 20, 0, MS_SQAWK, MZ_SMALL), 0, 0, + SIZ(40, 20, MS_SQAWK, MZ_SMALL), 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLACK), MON("vampire bat", S_BAT, LVL(5, 20, 6, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_DRST, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 20, 0, MS_SQEEK, MZ_SMALL), MR_SLEEP|MR_POISON, 0, + SIZ(30, 20, MS_SQEEK, MZ_SMALL), MR_SLEEP|MR_POISON, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLACK), /* @@ -1158,21 +1155,21 @@ NEARDATA struct permonst mons[] = { LVL(4, 18, 4, 0, 0), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2500, 500, 0, MS_HUMANOID, MZ_LARGE), 0, 0, + SIZ(2500, 500, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, CLR_BROWN), MON("forest centaur", S_CENTAUR, LVL(5, 18, 3, 10, -1), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2550, 600, 0, MS_HUMANOID, MZ_LARGE), 0, 0, + SIZ(2550, 600, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, CLR_GREEN), MON("mountain centaur", S_CENTAUR, LVL(6, 20, 2, 10, -3), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1,10), ATTK(AT_KICK, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2550, 500, 0, MS_HUMANOID, MZ_LARGE), 0, 0, + SIZ(2550, 500, MS_HUMANOID, MZ_LARGE), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, CLR_CYAN), /* @@ -1191,14 +1188,14 @@ NEARDATA struct permonst mons[] = { LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), 0, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_GRAY), MON("baby silver dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), 0, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, DRAGON_SILVER), #if 0 /* DEFERRED */ @@ -1206,7 +1203,7 @@ NEARDATA struct permonst mons[] = { LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), 0, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_CYAN), #endif @@ -1214,49 +1211,49 @@ NEARDATA struct permonst mons[] = { LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_FIRE, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_FIRE, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, M3_INFRAVISIBLE, CLR_RED), MON("baby white dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_COLD, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_COLD, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_WHITE), MON("baby orange dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_SLEEP, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_SLEEP, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_ORANGE), MON("baby black dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_DISINT, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_DISINT, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_BLACK), MON("baby blue dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_ELEC, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_ELEC, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_BLUE), MON("baby green dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_POISON, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_POISON, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_GREEN), MON("baby yellow dragon", S_DRAGON, LVL(12, 9, 2, 10, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_ROAR, MZ_HUGE), MR_ACID|MR_STONE, 0, + SIZ(1500, 500, MS_ROAR, MZ_HUGE), MR_ACID|MR_STONE, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_ACID, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, CLR_YELLOW), MON("gray dragon", S_DRAGON, @@ -1264,7 +1261,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_MAGM, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), 0, 0, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, CLR_GRAY), @@ -1273,7 +1270,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_COLD, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_COLD, 0, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_COLD, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, @@ -1284,7 +1281,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_MAGM, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), 0, 0, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, @@ -1295,7 +1292,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_FIRE, 6, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_FIRE, MR_FIRE, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_FIRE, MR_FIRE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, @@ -1305,7 +1302,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_COLD, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_COLD, MR_COLD, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_COLD, MR_COLD, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, CLR_WHITE), @@ -1314,7 +1311,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_SLEE, 4,25), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_SLEEP, MR_SLEEP, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_SLEEP, MR_SLEEP, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, @@ -1324,7 +1321,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_DISN, 4,10), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_DISINT, MR_DISINT, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_DISINT, MR_DISINT, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, CLR_BLACK), @@ -1333,7 +1330,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_ELEC, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_ELEC, MR_ELEC, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_ELEC, MR_ELEC, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, CLR_BLUE), @@ -1342,7 +1339,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_DRST, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), MR_POISON, MR_POISON, + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_POISON, MR_POISON, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, CLR_GREEN), @@ -1351,7 +1348,7 @@ NEARDATA struct permonst mons[] = { A(ATTK(AT_BREA, AD_ACID, 4, 6), ATTK(AT_BITE, AD_PHYS, 3, 8), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_DRAGON, 1500, 0, MS_ROAR, MZ_GIGANTIC), + SIZ(WT_DRAGON, 1500, MS_ROAR, MZ_GIGANTIC), MR_ACID|MR_STONE, MR_STONE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE|M1_ACID, @@ -1364,28 +1361,28 @@ NEARDATA struct permonst mons[] = { LVL(8, 12, 3, 0, 0), (G_GENO|3), A(ATTK(AT_CLAW, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 400, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(900, 400, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_FLY|M1_SEE_INVIS, M2_WANDER|M2_STALK|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_WHITE), MON("air elemental", S_ELEMENTAL, LVL(8, 36, 2, 30, 0), (G_NOCORPSE|1), A(ATTK(AT_ENGL, AD_PHYS, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY, M2_STRONG|M2_NEUTER, 0, CLR_CYAN), MON("fire elemental", S_ELEMENTAL, LVL(8, 12, 2, 30, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_FIRE, 3, 6), ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_POISON|MR_STONE, 0, + SIZ(0, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY|M1_NOTAKE, M2_STRONG|M2_NEUTER, M3_INFRAVISIBLE, CLR_YELLOW), MON("earth elemental", S_ELEMENTAL, LVL(8, 6, 2, 30, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2500, 0, 0, MS_SILENT, MZ_HUGE), + SIZ(2500, 0, MS_SILENT, MZ_HUGE), MR_FIRE|MR_COLD|MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_BREATHLESS| M1_WALLWALK|M1_THICK_HIDE, @@ -1394,7 +1391,7 @@ NEARDATA struct permonst mons[] = { LVL(8, 6, 2, 30, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 5, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2500, 0, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, + SIZ(2500, 0, MS_SILENT, MZ_HUGE), MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_AMPHIBIOUS|M1_SWIM, M2_STRONG|M2_NEUTER, 0, CLR_BLUE), /* @@ -1404,14 +1401,14 @@ NEARDATA struct permonst mons[] = { LVL(0, 1, 9, 0, 0), (G_GENO|4), A(ATTK(AT_TUCH, AD_STCK, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(20, 200, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(20, 200, MS_SILENT, MZ_SMALL), 0, 0, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_BRIGHT_GREEN), MON("brown mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO|1), A(ATTK(AT_NONE, AD_COLD, 0, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 30, 0, MS_SILENT, MZ_SMALL), + SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_COLD|MR_POISON, MR_COLD|MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN), @@ -1419,35 +1416,35 @@ NEARDATA struct permonst mons[] = { LVL(1, 0, 9, 0, 0), (G_GENO|2), A(ATTK(AT_NONE, AD_STUN, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 30, 0, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_POIS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_YELLOW), MON("green mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO|1), A(ATTK(AT_NONE, AD_ACID, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 30, 0, MS_SILENT, MZ_SMALL), MR_ACID|MR_STONE, MR_STONE, + SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_ACID|MR_STONE, MR_STONE, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_GREEN), MON("red mold", S_FUNGUS, LVL(1, 0, 9, 0, 0), (G_GENO|1), A(ATTK(AT_NONE, AD_FIRE, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 30, 0, MS_SILENT, MZ_SMALL), + SIZ(50, 30, MS_SILENT, MZ_SMALL), MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CLR_RED), MON("shrieker", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO|1), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 100, 0, MS_SHRIEK, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(100, 100, MS_SHRIEK, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_MAGENTA), MON("violet fungus", S_FUNGUS, LVL(3, 1, 7, 0, 0), (G_GENO|2), A(ATTK(AT_TUCH, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_STCK, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 100, 0, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(100, 100, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, CLR_MAGENTA), /* @@ -1457,28 +1454,28 @@ NEARDATA struct permonst mons[] = { LVL(1, 6, 10, 4, 0), (G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(650, 100, 0, MS_ORC, MZ_SMALL), 0, 0, + SIZ(650, 100, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GNOME|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), MON("gnome lord", S_GNOME, LVL(3, 8, 10, 4, 0), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(700, 120, 0, MS_ORC, MZ_SMALL), 0, 0, + SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), MON("gnomish wizard", S_GNOME, LVL(3, 10, 4, 10, 0), (G_GENO|1), A(ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(700, 120, 0, MS_ORC, MZ_SMALL), 0, 0, + SIZ(700, 120, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, HI_ZAP), MON("gnome king", S_GNOME, LVL(5, 10, 10, 20, 0), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(750, 150, 0, MS_ORC, MZ_SMALL), 0, 0, + SIZ(750, 150, MS_ORC, MZ_SMALL), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_PRINCE|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), #ifdef SPLITMON_1 @@ -1507,7 +1504,7 @@ struct permonst _mons2[] = { LVL(6, 6, 0, 0, 2), (G_GENO|G_NOGEN|1), A(ATTK(AT_WEAP, AD_PHYS, 2,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), 0, 0, + SIZ(2250, 750, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), @@ -1515,7 +1512,7 @@ struct permonst _mons2[] = { LVL(6, 6, 0, 0, 2), (G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 2,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), 0, 0, + SIZ(2250, 750, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), @@ -1523,7 +1520,7 @@ struct permonst _mons2[] = { LVL(8, 10, 6, 0, -2), (G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2200, 700, 0, MS_BOAST, MZ_HUGE), 0, 0, + SIZ(2200, 700, MS_BOAST, MZ_HUGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_CYAN), @@ -1531,7 +1528,7 @@ struct permonst _mons2[] = { LVL(9, 12, 4, 5, 2), (G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 2,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), MR_FIRE, MR_FIRE, + SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_FIRE, MR_FIRE, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_YELLOW), @@ -1539,7 +1536,7 @@ struct permonst _mons2[] = { LVL(10, 12, 3, 10, -3), (G_NOHELL|G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 2,12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), MR_COLD, MR_COLD, + SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_COLD, MR_COLD, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_WHITE), @@ -1547,7 +1544,7 @@ struct permonst _mons2[] = { LVL(10, 12, 3, 0, 0), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_WEAP, AD_PHYS, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 500, 0, MS_GRUNT, MZ_HUGE), 0, 0, + SIZ(1700, 500, MS_GRUNT, MZ_HUGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), @@ -1555,7 +1552,7 @@ struct permonst _mons2[] = { LVL(16, 12, 3, 10, -3), (G_GENO|G_SGROUP|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 750, 0, MS_BOAST, MZ_HUGE), MR_ELEC, MR_ELEC, + SIZ(2250, 750, MS_BOAST, MZ_HUGE), MR_ELEC, MR_ELEC, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), @@ -1563,7 +1560,7 @@ struct permonst _mons2[] = { LVL(16, 18, -3, 70, 9), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2300, 900, 0, MS_SPELL, MZ_HUGE), 0, 0, + SIZ(2300, 900, MS_SPELL, MZ_HUGE), 0, 0, M1_FLY|M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_MAGENTA), @@ -1571,7 +1568,7 @@ struct permonst _mons2[] = { LVL(15, 15, 6, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_CLAW, AD_PHYS, 3,10), ATTK(AT_CLAW, AD_PHYS, 3,10), ATTK(AT_BUTT, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 700, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(1500, 700, MS_SILENT, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), @@ -1584,7 +1581,7 @@ struct permonst _mons2[] = { A(ATTK(AT_BITE, AD_PHYS, 2,10), ATTK(AT_BITE, AD_PHYS, 2,10), ATTK(AT_CLAW, AD_PHYS, 2,10), ATTK(AT_CLAW, AD_PHYS, 2,10), NO_ATTK, NO_ATTK), - SIZ(1300, 600, 0, MS_BURBLE, MZ_LARGE), 0, 0, + SIZ(1300, 600, MS_BURBLE, MZ_LARGE), 0, 0, M1_ANIMAL|M1_FLY|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE, CLR_ORANGE), #if 0 /* DEFERRED */ @@ -1593,7 +1590,7 @@ struct permonst _mons2[] = { A(ATTK(AT_BITE, AD_PHYS, 3, 10), ATTK(AT_BITE, AD_PHYS, 3, 10), ATTK(AT_CLAW, AD_PHYS, 3, 10), ATTK(AT_CLAW, AD_PHYS, 3, 10), NO_ATTK, NO_ATTK), - SIZ(1300, 600, 0, MS_BURBLE, MZ_LARGE), 0, 0, + SIZ(1300, 600, MS_BURBLE, MZ_LARGE), 0, 0, M1_ANIMAL|M1_FLY|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE, HI_LORD), #endif @@ -1605,28 +1602,28 @@ struct permonst _mons2[] = { LVL(1, 6, 10, 10, 9), (G_GENO|G_LGROUP|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, + SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN|M2_WANDER|M2_HOSTILE|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_BLUE), MON("Kop Sergeant", S_KOP, LVL(2, 8, 10, 10, 10), (G_GENO|G_SGROUP|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, + SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN|M2_WANDER|M2_HOSTILE|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_BLUE), MON("Kop Lieutenant", S_KOP, LVL(3, 10, 10, 20, 11), (G_GENO|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, + SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN|M2_WANDER|M2_HOSTILE|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, CLR_CYAN), MON("Kop Kaptain", S_KOP, LVL(4, 12, 10, 20, 12), (G_GENO|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, + SIZ(WT_HUMAN, 200, MS_ARREST, MZ_HUMAN), 0, 0, M1_HUMANOID, M2_HUMAN|M2_WANDER|M2_HOSTILE|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, HI_LORD), #endif @@ -1637,7 +1634,7 @@ struct permonst _mons2[] = { LVL(11, 6, 0, 30, -9), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_TUCH, AD_COLD, 1,10), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 100, 0, MS_MUMBLE, MZ_HUMAN), + SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_INFRAVISION, CLR_BROWN), @@ -1645,7 +1642,7 @@ struct permonst _mons2[] = { LVL(14, 9, -2, 60, -12), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_TUCH, AD_COLD, 3, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 100, 0, MS_MUMBLE, MZ_HUMAN), + SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_INFRAVISION, CLR_RED), @@ -1653,7 +1650,7 @@ struct permonst _mons2[] = { LVL(17, 9, -4, 90, -15), (G_HELL|G_GENO|G_NOCORPSE|1), A(ATTK(AT_TUCH, AD_COLD, 3, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 100, 0, MS_MUMBLE, MZ_HUMAN), + SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_FIRE|MR_COLD|MR_SLEEP|MR_POISON, MR_FIRE|MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_WANTSBOOK|M3_INFRAVISION, HI_LORD), @@ -1661,7 +1658,7 @@ struct permonst _mons2[] = { LVL(25, 9, -6, 90, -15), (G_HELL|G_GENO|G_NOCORPSE|1), A(ATTK(AT_TUCH, AD_COLD, 5, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 100, 0, MS_MUMBLE, MZ_HUMAN), + SIZ(1200, 100, MS_MUMBLE, MZ_HUMAN), MR_FIRE|MR_COLD|MR_SLEEP|MR_ELEC|MR_POISON, MR_FIRE|MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_WANTSBOOK|M3_INFRAVISION, HI_LORD), @@ -1672,21 +1669,21 @@ struct permonst _mons2[] = { LVL(3, 8, 6, 20, -2), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 50, 0, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE, M3_INFRAVISION, CLR_BROWN), MON("gnome mummy", S_MUMMY, LVL(4, 10, 6, 20, -3), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(650, 50, 0, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(650, 50, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_GNOME, M3_INFRAVISION, CLR_RED), MON("orc mummy", S_MUMMY, LVL(5, 10, 5, 20, -4), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(850, 75, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(850, 75, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_ORC|M2_GREEDY|M2_JEWELS, M3_INFRAVISION, CLR_GRAY), @@ -1694,7 +1691,7 @@ struct permonst _mons2[] = { LVL(5, 10, 5, 20, -4), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 150, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(900, 150, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_DWARF|M2_GREEDY|M2_JEWELS, M3_INFRAVISION, CLR_RED), @@ -1702,7 +1699,7 @@ struct permonst _mons2[] = { LVL(6, 12, 4, 30, -5), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 175, 0, MS_SILENT, MZ_HUMAN), + SIZ(WT_ELF, 175, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_ELF, M3_INFRAVISION, CLR_GREEN), @@ -1710,7 +1707,7 @@ struct permonst _mons2[] = { LVL(6, 12, 4, 30, -5), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_SILENT, MZ_HUMAN), + SIZ(WT_HUMAN, 200, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE, M3_INFRAVISION, CLR_GRAY), @@ -1718,7 +1715,7 @@ struct permonst _mons2[] = { LVL(7, 12, 4, 30, -6), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 250, 0, MS_SILENT, MZ_HUGE), + SIZ(1700, 250, MS_SILENT, MZ_HUGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_BLUE), @@ -1726,7 +1723,7 @@ struct permonst _mons2[] = { LVL(8, 14, 3, 30, -7), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2050, 375, 0, MS_SILENT, MZ_HUGE), + SIZ(2050, 375, MS_SILENT, MZ_HUGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_GIANT|M2_STRONG|M2_JEWELS, M3_INFRAVISION, @@ -1738,7 +1735,7 @@ struct permonst _mons2[] = { LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 100, 0, MS_MUMBLE, MZ_LARGE), + SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, CLR_RED), @@ -1746,7 +1743,7 @@ struct permonst _mons2[] = { LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 100, 0, MS_MUMBLE, MZ_LARGE), + SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON|MR_ACID|MR_STONE, MR_POISON|MR_STONE, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_ACID|M1_NOTAKE|M1_CARNIVORE, M2_STRONG, 0, CLR_BLACK), @@ -1754,21 +1751,21 @@ struct permonst _mons2[] = { LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 100, 0, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, HI_GOLD), MON("guardian naga hatchling", S_NAGA, LVL(3, 10, 6, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 100, 0, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, + SIZ(500, 100, MS_MUMBLE, MZ_LARGE), MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, CLR_GREEN), MON("red naga", S_NAGA, LVL(6, 12, 4, 0, -4), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_BREA, AD_FIRE, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2600, 400, 0, MS_MUMBLE, MZ_HUGE), + SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, CLR_RED), @@ -1776,7 +1773,7 @@ struct permonst _mons2[] = { LVL(8, 14, 2, 10, 4), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_SPIT, AD_ACID, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2600, 400, 0, MS_MUMBLE, MZ_HUGE), + SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON|MR_ACID|MR_STONE, MR_POISON|MR_STONE, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_ACID|M1_NOTAKE| M1_CARNIVORE, @@ -1785,14 +1782,14 @@ struct permonst _mons2[] = { LVL(10, 14, 2, 70, 5), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 2, 6), ATTK(AT_MAGC, AD_SPEL, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2600, 400, 0, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, + SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, HI_GOLD), MON("guardian naga", S_NAGA, LVL(12, 16, 0, 50, 7), (G_GENO|1), A(ATTK(AT_BITE, AD_PLYS, 1, 6), ATTK(AT_SPIT, AD_DRST, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2600, 400, 0, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, + SIZ(2600, 400, MS_MUMBLE, MZ_HUGE), MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_POIS|M1_NOTAKE| M1_OMNIVORE, M2_STRONG, 0, CLR_GREEN), @@ -1803,21 +1800,21 @@ struct permonst _mons2[] = { LVL(5, 10, 5, 0, -3), (G_SGROUP|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1600, 500, 0, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, + SIZ(1600, 500, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), MON("ogre lord", S_OGRE, LVL(7, 12, 3, 30, -5), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 700, 0, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, + SIZ(1700, 700, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_LORD|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("ogre king", S_OGRE, LVL(9, 14, 4, 60, -7), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 3, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 750, 0, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, + SIZ(1700, 750, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), /* @@ -1827,7 +1824,7 @@ struct permonst _mons2[] = { LVL(3, 1, 8, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_RUST, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 250, 0, MS_SILENT, MZ_MEDIUM), + SIZ(500, 250, MS_SILENT, MZ_MEDIUM), MR_FIRE|MR_COLD|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, @@ -1836,7 +1833,7 @@ struct permonst _mons2[] = { LVL(5, 3, 8, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DCAY, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 250, 0, MS_SILENT, MZ_MEDIUM), + SIZ(500, 250, MS_SILENT, MZ_MEDIUM), MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, @@ -1845,7 +1842,7 @@ struct permonst _mons2[] = { LVL(6, 6, 6, 0, 0), (G_HELL|G_GENO|1), A(ATTK(AT_TUCH, AD_SLIM, 1, 4), ATTK(AT_NONE, AD_SLIM, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 150, 0, MS_SILENT, MZ_LARGE), + SIZ(400, 150, MS_SILENT, MZ_LARGE), MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID|M1_POIS, @@ -1854,7 +1851,7 @@ struct permonst _mons2[] = { LVL(10, 6, 6, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_CORR, 3, 8), ATTK(AT_NONE, AD_CORR, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 250, 0, MS_SILENT, MZ_LARGE), + SIZ(900, 250, MS_SILENT, MZ_LARGE), MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, @@ -1866,7 +1863,7 @@ struct permonst _mons2[] = { LVL(7, 12, 3, 10, 0), (G_GENO|3), A(ATTK(AT_CLAW, AD_TLPT, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 20, 0, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 20, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE|M1_POIS|M1_TPORT, M2_HOSTILE, M3_INFRAVISIBLE, CLR_CYAN), /* @@ -1876,14 +1873,14 @@ struct permonst _mons2[] = { LVL(5, 18, 2, 0, 0), (G_GENO|2), A(ATTK(AT_TUCH, AD_RUST, 0, 0), ATTK(AT_TUCH, AD_RUST, 0, 0), ATTK(AT_NONE, AD_RUST, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 250, 0, MS_SILENT, MZ_MEDIUM), 0, 0, + SIZ(1000, 250, MS_SILENT, MZ_MEDIUM), 0, 0, M1_SWIM|M1_ANIMAL|M1_NOHANDS|M1_METALLIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BROWN), MON("disenchanter", S_RUSTMONST, LVL(12, 12, -10, 0, -3), (G_HELL|G_GENO|2), A(ATTK(AT_CLAW, AD_ENCH, 4, 4), ATTK(AT_NONE, AD_ENCH, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(750, 200, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(750, 200, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BLUE), /* @@ -1893,7 +1890,7 @@ struct permonst _mons2[] = { LVL(1, 8, 8, 0, 0), (G_LGROUP|G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(50, 60, 0, MS_HISS, MZ_TINY), 0, 0, + SIZ(50, 60, MS_HISS, MZ_TINY), 0, 0, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_OVIPAROUS| M1_CARNIVORE|M1_NOTAKE, 0, 0, CLR_GREEN), @@ -1901,7 +1898,7 @@ struct permonst _mons2[] = { LVL(4, 15, 3, 0, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 80, 0, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(100, 80, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_OVIPAROUS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CLR_BROWN), @@ -1909,7 +1906,7 @@ struct permonst _mons2[] = { LVL(4, 15, 3, 0, 0), (G_GENO|G_NOGEN|G_LGROUP), A(ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(150, 80, 0, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(150, 80, MS_HISS, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, CLR_RED), @@ -1918,7 +1915,7 @@ struct permonst _mons2[] = { A(ATTK(AT_BITE, AD_PHYS, 1, 4), ATTK(AT_TUCH, AD_PHYS, 0, 0), ATTK(AT_HUGS, AD_WRAP, 1, 4), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK), - SIZ(250, 100, 0, MS_HISS, MZ_LARGE), 0, 0, + SIZ(250, 100, MS_HISS, MZ_LARGE), 0, 0, M1_SWIM|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_MAGENTA), @@ -1926,7 +1923,7 @@ struct permonst _mons2[] = { LVL(6, 15, 2, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DRST, 1, 4), ATTK(AT_BITE, AD_DRST, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 60, 0, MS_HISS, MZ_MEDIUM), + SIZ(100, 60, MS_HISS, MZ_MEDIUM), MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, @@ -1935,7 +1932,7 @@ struct permonst _mons2[] = { LVL(6, 18, 2, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_DRST, 2, 4), ATTK(AT_SPIT, AD_BLND, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(250, 100, 0, MS_HISS, MZ_MEDIUM), + SIZ(250, 100, MS_HISS, MZ_MEDIUM), MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, @@ -1947,7 +1944,7 @@ struct permonst _mons2[] = { LVL(7, 12, 4, 0, -3), (G_GENO|2), A(ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_CLAW, AD_PHYS, 4, 2), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 350, 0, MS_GRUNT, MZ_LARGE), 0, 0, + SIZ(800, 350, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), @@ -1955,7 +1952,7 @@ struct permonst _mons2[] = { LVL(9, 10, 2, 20, -3), (G_NOHELL|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_COLD, 2, 6), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1000, 300, 0, MS_GRUNT, MZ_LARGE), MR_COLD, MR_COLD, + SIZ(1000, 300, MS_GRUNT, MZ_LARGE), MR_COLD, MR_COLD, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_WHITE), @@ -1963,7 +1960,7 @@ struct permonst _mons2[] = { LVL(9, 12, 0, 0, -3), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 300, 0, MS_GRUNT, MZ_LARGE), 0, 0, + SIZ(1200, 300, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_CYAN), @@ -1971,7 +1968,7 @@ struct permonst _mons2[] = { LVL(11, 14, 4, 40, -3), (G_NOGEN|G_GENO), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 350, 0, MS_GRUNT, MZ_LARGE), 0, 0, + SIZ(1200, 350, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE|M1_SWIM, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), @@ -1979,7 +1976,7 @@ struct permonst _mons2[] = { LVL(13, 12, -4, 0, -7), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 400, 0, MS_GRUNT, MZ_LARGE), 0, 0, + SIZ(1500, 400, MS_GRUNT, MZ_LARGE), 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), @@ -1991,7 +1988,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_BITE, AD_PHYS, 2, 5), ATTK(AT_GAZE, AD_CONF, 0, 0), NO_ATTK, NO_ATTK), - SIZ(1200, 500, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(1200, 500, MS_SILENT, MZ_LARGE), 0, 0, M1_TUNNEL|M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, CLR_BROWN), /* * Vampires @@ -2000,7 +1997,7 @@ struct permonst _mons2[] = { LVL(10, 12, 1, 25, -8), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_DRLI, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_SHAPESHIFTER, M3_INFRAVISIBLE, CLR_RED), @@ -2008,7 +2005,7 @@ struct permonst _mons2[] = { LVL(12, 14, 0, 50, -9), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_DRLI, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_LORD|M2_MALE| M2_SHAPESHIFTER, M3_INFRAVISIBLE, CLR_BLUE), @@ -2017,7 +2014,7 @@ struct permonst _mons2[] = { LVL(20, 14, -4, 50, -9), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_DRLI, 2, 8), ATTK(AT_BITE, AD_DRLI, 1, 8), ATTK(AT_MAGC, AD_SPEL, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_LORD|M2_MALE| M2_MAGIC|M2_SHAPESHIFTER, M3_INFRAVISIBLE, HI_ZAP), @@ -2026,7 +2023,7 @@ struct permonst _mons2[] = { LVL(14, 18, -3, 80, -10), (G_NOGEN|G_NOCORPSE|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 10), ATTK(AT_BITE, AD_DRLI, 1, 10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG| M2_NASTY|M2_PRINCE|M2_MALE|M2_SHAPESHIFTER, @@ -2038,14 +2035,14 @@ struct permonst _mons2[] = { LVL(3, 12, 5, 5, -3), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_DRLI, 0, 0), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1200, 0, 0, MS_SPELL, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(1200, 0, MS_SPELL, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_COLLECT, 0, CLR_GRAY), MON("wraith", S_WRAITH, LVL(6, 12, 4, 15, -6), (G_GENO|2), A(ATTK(AT_TUCH, AD_DRLI, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, MS_SILENT, MZ_HUMAN), + SIZ(0, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_FLY|M1_HUMANOID|M1_UNSOLID, M2_UNDEAD|M2_STALK|M2_HOSTILE, 0, CLR_BLACK), @@ -2053,7 +2050,7 @@ struct permonst _mons2[] = { LVL(13, 12, 0, 25, -17), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_DRLI, 1, 4), ATTK(AT_BREA, AD_SLEE, 2,25), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 0, 0, MS_SPELL, MZ_HUMAN), + SIZ(WT_HUMAN, 0, MS_SPELL, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_HUMANOID, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_STRONG|M2_HOSTILE|M2_MALE|M2_COLLECT, 0, HI_LORD), @@ -2065,7 +2062,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK), - SIZ(1200, 700, 0, MS_ROAR, MZ_MEDIUM), + SIZ(1200, 700, MS_ROAR, MZ_MEDIUM), MR_FIRE|MR_COLD|MR_STONE, MR_STONE, M1_BREATHLESS|M1_WALLWALK|M1_THICK_HIDE|M1_METALLIVORE, M2_HOSTILE|M2_STRONG, 0, CLR_BROWN), @@ -2076,41 +2073,41 @@ struct permonst _mons2[] = { LVL(2, 12, 6, 0, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_SITM, 0, 0), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 50, 0, MS_GROWL, MZ_SMALL), 0, 0, + SIZ(100, 50, MS_GROWL, MZ_SMALL), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, 0, M3_INFRAVISIBLE, CLR_GRAY), MON("ape", S_YETI, LVL(4, 12, 6, 0, 0), (G_GENO|G_SGROUP|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1100, 500, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(1100, 500, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, CLR_BROWN), MON("owlbear", S_YETI, LVL(5, 12, 5, 0, 0), (G_GENO|3), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 700, 0, MS_ROAR, MZ_LARGE), 0, 0, + SIZ(1700, 700, MS_ROAR, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE, CLR_BROWN), MON("yeti", S_YETI, LVL(5, 15, 6, 0, 0), (G_GENO|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1600, 700, 0, MS_GROWL, MZ_LARGE), MR_COLD, MR_COLD, + SIZ(1600, 700, MS_GROWL, MZ_LARGE), MR_COLD, MR_COLD, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_WHITE), MON("carnivorous ape", S_YETI, LVL(6, 12, 6, 0, 0), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_HUGS, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1250, 550, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(1250, 550, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_BLACK), MON("sasquatch", S_YETI, LVL(7, 15, 6, 0, 2), (G_GENO|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_KICK, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1550, 750, 0, MS_GROWL, MZ_LARGE), 0, 0, + SIZ(1550, 750, MS_GROWL, MZ_LARGE), 0, 0, M1_ANIMAL|M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, CLR_GRAY), /* @@ -2120,35 +2117,35 @@ struct permonst _mons2[] = { LVL(0, 6, 10, 0, -2), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 50, 0, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, CLR_BROWN), MON("gnome zombie", S_ZOMBIE, LVL(1, 6, 10, 0, -2), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 5), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(650, 50, 0, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(650, 50, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_GNOME, M3_INFRAVISION, CLR_BROWN), MON("orc zombie", S_ZOMBIE, LVL(2, 6, 9, 0, -3), (G_GENO|G_SGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(850, 75, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(850, 75, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_ORC, M3_INFRAVISION, CLR_GRAY), MON("dwarf zombie", S_ZOMBIE, LVL(2, 6, 9, 0, -3), (G_GENO|G_SGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 150, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(900, 150, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_DWARF, M3_INFRAVISION, CLR_RED), MON("elf zombie", S_ZOMBIE, LVL(3, 6, 9, 0, -3), (G_GENO|G_SGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 7), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 175, 0, MS_SILENT, MZ_HUMAN), + SIZ(WT_ELF, 175, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_ELF, M3_INFRAVISION, CLR_GREEN), @@ -2156,7 +2153,7 @@ struct permonst _mons2[] = { LVL(4, 6, 8, 0, -3), (G_GENO|G_SGROUP|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 200, 0, MS_SILENT, MZ_HUMAN), + SIZ(WT_HUMAN, 200, MS_SILENT, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, HI_DOMESTIC), @@ -2164,7 +2161,7 @@ struct permonst _mons2[] = { LVL(6, 8, 6, 0, -4), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1,10), ATTK(AT_CLAW, AD_PHYS, 1,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1700, 250, 0, MS_SILENT, MZ_HUGE), + SIZ(1700, 250, MS_SILENT, MZ_HUGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, CLR_BLUE), @@ -2172,7 +2169,7 @@ struct permonst _mons2[] = { LVL(3, 6, 10, 0, -2), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PLYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 50, 0, MS_SILENT, MZ_SMALL), + SIZ(400, 50, MS_SILENT, MZ_SMALL), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_WANDER|M2_HOSTILE, M3_INFRAVISION, CLR_BLACK), @@ -2180,7 +2177,7 @@ struct permonst _mons2[] = { LVL(8, 8, 6, 0, -4), (G_GENO|G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2050, 375, 0, MS_SILENT, MZ_HUGE), + SIZ(2050, 375, MS_SILENT, MZ_HUGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_GIANT|M2_STRONG, M3_INFRAVISION, @@ -2189,7 +2186,7 @@ struct permonst _mons2[] = { LVL(12, 8, 4, 0, 0), (G_NOCORPSE|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_TUCH, AD_SLOW, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(300, 5, 0, MS_BONES, MZ_HUMAN), + SIZ(300, 5, MS_BONES, MZ_HUMAN), MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_UNDEAD|M2_WANDER|M2_HOSTILE|M2_STRONG|M2_COLLECT|M2_NASTY, @@ -2201,49 +2198,49 @@ struct permonst _mons2[] = { LVL(3, 12, 10, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 2), ATTK(AT_CLAW, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 0, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(400, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, CLR_YELLOW), MON("paper golem", S_GOLEM, LVL(3, 12, 10, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(400, 0, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(400, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, HI_PAPER), MON("rope golem", S_GOLEM, LVL(4, 9, 8, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_HUGS, AD_PHYS, 6, 1), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(450, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, + SIZ(450, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, CLR_BROWN), MON("gold golem", S_GOLEM, LVL(5, 9, 6, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 3), ATTK(AT_CLAW, AD_PHYS, 2, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(450, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_ACID, 0, + SIZ(450, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_ACID, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_NEUTER, 0, HI_GOLD), MON("leather golem", S_GOLEM, LVL(6, 6, 6, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(800, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, + SIZ(800, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, HI_LEATHER), MON("wood golem", S_GOLEM, LVL(7, 3, 4, 0, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(900, 0, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, + SIZ(900, 0, MS_SILENT, MZ_LARGE), MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_NEUTER, 0, HI_WOOD), MON("flesh golem", S_GOLEM, LVL(9, 8, 9, 30, 0), (1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1400, 600, 0, MS_SILENT, MZ_LARGE), + SIZ(1400, 600, MS_SILENT, MZ_LARGE), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, @@ -2252,28 +2249,28 @@ struct permonst _mons2[] = { LVL(11, 7, 7, 40, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 3,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1550, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, + SIZ(1550, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, CLR_BROWN), MON("stone golem", S_GOLEM, LVL(14, 6, 5, 50, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 3, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1900, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_STONE, 0, + SIZ(1900, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, CLR_GRAY), MON("glass golem", S_GOLEM, LVL(16, 6, 1, 50, 0), (G_NOCORPSE|1), A(ATTK(AT_CLAW, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1800, 0, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_ACID, 0, + SIZ(1800, 0, MS_SILENT, MZ_LARGE), MR_SLEEP|MR_POISON|MR_ACID, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, CLR_CYAN), MON("iron golem", S_GOLEM, LVL(18, 6, 3, 60, 0), (G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_PHYS, 4,10), ATTK(AT_BREA, AD_DRST, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2000, 0, 0, MS_SILENT, MZ_LARGE), + SIZ(2000, 0, MS_SILENT, MZ_LARGE), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_COLLECT, 0, HI_METAL), @@ -2284,7 +2281,7 @@ struct permonst _mons2[] = { LVL(0, 12, 10, 0, 0), G_NOGEN, /* for corpses */ A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2292,7 +2289,7 @@ struct permonst _mons2[] = { LVL(2, 12, 10, 10, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_WERE, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, CLR_BROWN), @@ -2300,7 +2297,7 @@ struct permonst _mons2[] = { LVL(2, 12, 10, 10, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_WERE, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, CLR_RED), @@ -2308,7 +2305,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 20, -7), (1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_WERE, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_WERE, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, CLR_ORANGE), @@ -2316,7 +2313,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 2, -3), G_NOGEN, /* for corpses */ A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_ELF|M2_STRONG|M2_COLLECT, M3_INFRAVISION|M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2324,28 +2321,28 @@ struct permonst _mons2[] = { LVL(4, 12, 10, 10, -5), (G_GENO|G_SGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GREEN), MON("Green-elf", S_HUMAN, LVL(5, 12, 10, 10, -6), (G_GENO|G_SGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BRIGHT_GREEN), MON("Grey-elf", S_HUMAN, LVL(6, 12, 10, 10, -7), (G_GENO|G_SGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), MON("elf-lord", S_HUMAN, LVL(8, 12, 10, 20, -9), (G_GENO|G_SGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_STRONG|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BRIGHT_BLUE), @@ -2353,7 +2350,7 @@ struct permonst _mons2[] = { LVL(9, 12, 10, 25, -10), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_HUMANOID, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_STRONG|M2_PRINCE|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, HI_LORD), @@ -2361,7 +2358,7 @@ struct permonst _mons2[] = { LVL(9, 12, 5, 20, 0), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_IMITATE, MZ_HUMAN), MR_SLEEP, 0, + SIZ(WT_HUMAN, 400, MS_IMITATE, MZ_HUMAN), MR_SLEEP, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_COLLECT|M2_SHAPESHIFTER, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2369,7 +2366,7 @@ struct permonst _mons2[] = { LVL(12, 18, 0, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SELL, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2377,7 +2374,7 @@ struct permonst _mons2[] = { LVL(12, 12, 10, 40, 10), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARD, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_BLUE), @@ -2385,7 +2382,7 @@ struct permonst _mons2[] = { LVL(12, 12, 10, 0, 0), G_NOGEN, /* for special levels */ A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_DJINNI, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_DJINNI, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_CLOSE, HI_DOMESTIC), @@ -2393,7 +2390,7 @@ struct permonst _mons2[] = { LVL(12, 0, 0, 50, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_NONE, AD_MAGM, 0, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_ORACLE, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_ORACLE, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_FEMALE, M3_INFRAVISIBLE, HI_ZAP), /* aligned priests always have the epri extension attached; @@ -2403,7 +2400,7 @@ struct permonst _mons2[] = { LVL(12, 12, 10, 50, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 4,10), ATTK(AT_KICK, AD_PHYS, 1, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_PRIEST, MZ_HUMAN), MR_ELEC, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_LORD|M2_PEACEFUL|M2_COLLECT, M3_INFRAVISIBLE, CLR_WHITE), @@ -2413,7 +2410,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 4,10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_PRIEST, MZ_HUMAN), MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MINION|M2_PRINCE|M2_NASTY|M2_COLLECT|M2_MAGIC, @@ -2422,7 +2419,7 @@ struct permonst _mons2[] = { LVL(6, 10, 10, 0, -2), (G_SGROUP|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_GRAY), @@ -2430,7 +2427,7 @@ struct permonst _mons2[] = { LVL(8, 10, 10, 5, -3), (G_SGROUP|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_RED), @@ -2438,14 +2435,14 @@ struct permonst _mons2[] = { LVL(11, 6, 0, 0, 0), (G_GENO|3), A(ATTK(AT_CLAW, AD_HEAL, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NURSE, MZ_HUMAN), MR_POISON, MR_POISON, + SIZ(WT_HUMAN, 400, MS_NURSE, MZ_HUMAN), MR_POISON, MR_POISON, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE, M3_INFRAVISIBLE, HI_DOMESTIC), MON("lieutenant", S_HUMAN, LVL(10, 10, 10, 15, -4), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_GREEN), @@ -2453,7 +2450,7 @@ struct permonst _mons2[] = { LVL(12, 10, 10, 15, -5), (G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_WEAP, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_BLUE), @@ -2464,7 +2461,7 @@ struct permonst _mons2[] = { LVL(6, 10, 10, 0, -2), (G_SGROUP|G_NOGEN|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_GRAY), @@ -2472,7 +2469,7 @@ struct permonst _mons2[] = { LVL(10, 10, 10, 15, -4), (G_NOGEN|G_GENO|1), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_WEAP, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_SOLDIER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, CLR_GREEN), @@ -2483,7 +2480,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_GAZE, AD_STON, 0, 0), ATTK(AT_BITE, AD_DRST, 1, 6), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HISS, MZ_LARGE), + SIZ(WT_HUMAN, 400, MS_HISS, MZ_LARGE), MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_FLY|M1_SWIM|M1_AMPHIBIOUS|M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_NOPOLY|M2_HOSTILE|M2_STRONG|M2_PNAME|M2_FEMALE, @@ -2492,7 +2489,7 @@ struct permonst _mons2[] = { LVL(30, 12, -8, 100, A_NONE), (G_NOGEN|G_UNIQ), A(ATTK(AT_CLAW, AD_SAMU, 2,12), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_CUSS, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_CUSS, MZ_HUMAN), MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT| M1_TPORT_CNTRL|M1_OMNIVORE, @@ -2503,7 +2500,7 @@ struct permonst _mons2[] = { LVL(20, 15, 0, 40, 15), (G_UNIQ|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 4,10), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARD, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_PNAME| M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT|M2_MAGIC, @@ -2513,7 +2510,7 @@ struct permonst _mons2[] = { LVL(76, 18, -5, 120, 0), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_TUCH, AD_PLYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_FERRY, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_FERRY, MZ_HUMAN), MR_FIRE|MR_COLD|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_SEE_INVIS|M1_HUMANOID, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_PNAME|M2_MALE|M2_GREEDY|M2_COLLECT, @@ -2526,7 +2523,7 @@ struct permonst _mons2[] = { LVL(10, 3, -5, 50, -5), (G_NOCORPSE|G_NOGEN), A(ATTK(AT_TUCH, AD_PHYS, 1, 1), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 0, 0, MS_SILENT, MZ_HUMAN), + SIZ(WT_HUMAN, 0, MS_SILENT, MZ_HUMAN), MR_COLD|MR_DISINT|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_WALLWALK|M1_HUMANOID|M1_UNSOLID, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, CLR_GRAY), @@ -2534,7 +2531,7 @@ struct permonst _mons2[] = { LVL(12, 10, 10, 0, 0), (G_NOCORPSE|G_NOGEN), A(ATTK(AT_TUCH, AD_PLYS, 2, 6), ATTK(AT_TUCH, AD_SLOW, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 0, 0, MS_WAIL, MZ_HUMAN), + SIZ(WT_HUMAN, 0, MS_WAIL, MZ_HUMAN), MR_COLD|MR_DISINT|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_WALLWALK|M1_HUMANOID|M1_UNSOLID|M1_SEE_INVIS, M2_NOPOLY|M2_UNDEAD|M2_WANDER|M2_STALK|M2_HOSTILE|M2_NASTY, @@ -2546,7 +2543,7 @@ struct permonst _mons2[] = { LVL(8, 12,-4, 30, -7), (G_NOCORPSE|G_NOGEN), A(ATTK(AT_WEAP, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_DJINNI, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_DJINNI, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_SWIM, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BLUE), @@ -2564,7 +2561,7 @@ struct permonst _mons2[] = { MON("succubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE|1), SEDUCTION_ATTACKS, - SIZ(WT_HUMAN, 400, 0, MS_SEDUCE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_FEMALE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), @@ -2573,14 +2570,14 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 2, 3), ATTK(AT_STNG, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_POIS|M1_THICK_HIDE, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_BROWN), MON("incubus", S_DEMON, LVL(6, 12, 0, 70, -9), (G_NOCORPSE|1), SEDUCTION_ATTACKS, - SIZ(WT_HUMAN, 400, 0, MS_SEDUCE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SEDUCE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_MALE, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), @@ -2591,7 +2588,7 @@ struct permonst _mons2[] = { LVL(7, 12, 2, 30, 10), (G_HELL|G_NOCORPSE|G_SGROUP|2), A(ATTK(AT_WEAP, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_FEMALE| M2_COLLECT, @@ -2600,7 +2597,7 @@ struct permonst _mons2[] = { LVL(8, 12, 0, 35, 8), (G_HELL|G_NOCORPSE|G_SGROUP|2), A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_PHYS, 3, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_POIS|M1_THICK_HIDE, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("marilith", S_DEMON, @@ -2608,7 +2605,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4)), - SIZ(WT_HUMAN, 400, 0, MS_CUSS, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_CUSS, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_SLITHY|M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), @@ -2617,21 +2614,21 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("hezrou", S_DEMON, LVL(9, 6, -2, 55, -10), (G_HELL|G_NOCORPSE|G_SGROUP|2), A(ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_CLAW, AD_PHYS, 1, 3), ATTK(AT_BITE, AD_PHYS, 4, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("bone devil", S_DEMON, LVL(9, 15, -1, 40, -9), (G_HELL|G_NOCORPSE|G_SGROUP|2), A(ATTK(AT_WEAP, AD_PHYS, 3, 4), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), MON("ice devil", S_DEMON, @@ -2639,7 +2636,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_STNG, AD_COLD, 3, 4), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE|MR_COLD|MR_POISON, 0, M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_WHITE), @@ -2648,14 +2645,14 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_CLAW, AD_PHYS, 1, 4), ATTK(AT_BITE, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SPELL, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SPELL, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), MON("pit fiend", S_DEMON, LVL(13, 6, -3, 65, -13), (G_HELL|G_NOCORPSE|2), A(ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_WEAP, AD_PHYS, 4, 2), ATTK(AT_HUGS, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GROWL, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_GROWL, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), @@ -2663,14 +2660,14 @@ struct permonst _mons2[] = { LVL(13, 12, 4, 60, -5), (G_HELL|G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 400, 0, MS_CUSS, MZ_HUMAN), MR_STONE, 0, + SIZ(1500, 400, MS_CUSS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID, M2_NOPOLY|M2_STALK|M2_STRONG|M2_COLLECT|M2_SHAPESHIFTER, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_GRAY), MON("balrog", S_DEMON, LVL(16, 5, -2, 75, -14), (G_HELL|G_NOCORPSE|1), A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CLR_RED), @@ -2681,7 +2678,7 @@ struct permonst _mons2[] = { LVL(50, 3, -7, 65, -15), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_ENGL, AD_DISE, 4,10), ATTK(AT_SPIT, AD_ACID, 3, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 0, 0, MS_GURGLE, MZ_LARGE), + SIZ(1500, 0, MS_GURGLE, MZ_LARGE), MR_FIRE|MR_POISON|MR_ACID|MR_STONE, 0, M1_AMPHIBIOUS|M1_AMORPHOUS|M1_NOHEAD|M1_FLY|M1_SEE_INVIS|M1_ACID| M1_POIS, @@ -2693,7 +2690,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_WEAP, AD_CONF, 2, 8), ATTK(AT_CLAW, AD_PLYS, 1, 6), ATTK(AT_MAGC, AD_MAGM, 2, 6), NO_ATTK, NO_ATTK), - SIZ(900, 500, 0, MS_ORC, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(900, 500, MS_ORC, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY|M2_LORD| M2_MALE|M2_COLLECT, @@ -2703,7 +2700,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_CLAW, AD_PHYS, 3, 4), ATTK(AT_MAGC, AD_SPEL, 8, 6), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK), - SIZ(1500, 500, 0, MS_ORC, MZ_HUGE), MR_FIRE|MR_POISON, 0, + SIZ(1500, 500, MS_ORC, MZ_HUGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY|M2_PRINCE| M2_MALE|M2_COLLECT, @@ -2713,7 +2710,7 @@ struct permonst _mons2[] = { LVL(72, 3, -3, 75, 15), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_CLAW, AD_PHYS, 3, 6), ATTK(AT_STNG, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_BRIBE, MZ_HUGE), MR_FIRE|MR_POISON, 0, + SIZ(1500, 500, MS_BRIBE, MZ_HUGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS|M1_SLITHY, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, @@ -2722,7 +2719,7 @@ struct permonst _mons2[] = { LVL(78, 15, -2, 80, 15), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_MAGC, AD_SPEL, 6, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_BRIBE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, + SIZ(1500, 500, MS_BRIBE, MZ_HUMAN), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS|M1_HUMANOID, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE|M2_COLLECT, @@ -2731,7 +2728,7 @@ struct permonst _mons2[] = { LVL(89, 9, -5, 85, 20), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_BITE, AD_DRST, 2, 6), ATTK(AT_GAZE, AD_STUN, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_BRIBE, MZ_LARGE), MR_FIRE|MR_POISON, 0, + SIZ(1500, 500, MS_BRIBE, MZ_LARGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, @@ -2740,7 +2737,7 @@ struct permonst _mons2[] = { LVL(105, 12, -7, 90, 20), (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 4, 4), ATTK(AT_MAGC, AD_COLD, 6, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_BRIBE, MZ_HUGE), MR_FIRE|MR_COLD|MR_POISON, 0, + SIZ(1500, 500, MS_BRIBE, MZ_HUGE), MR_FIRE|MR_COLD|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_HUMANOID|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG| M2_NASTY|M2_PRINCE|M2_MALE, @@ -2750,7 +2747,7 @@ struct permonst _mons2[] = { A(ATTK(AT_MAGC, AD_SPEL, 8, 6), ATTK(AT_STNG, AD_DRLI, 1, 4), ATTK(AT_CLAW, AD_DISE, 1, 6), ATTK(AT_CLAW, AD_DISE, 1, 6), NO_ATTK, NO_ATTK), - SIZ(1500, 500, 0, MS_GROWL, MZ_HUGE), MR_FIRE|MR_POISON, 0, + SIZ(1500, 500, MS_GROWL, MZ_HUGE), MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_NOHANDS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, @@ -2761,7 +2758,7 @@ struct permonst _mons2[] = { LVL(30, 12, -5, 100, 0), (G_UNIQ|G_NOGEN), A(ATTK(AT_TUCH, AD_DETH, 8, 8), ATTK(AT_TUCH, AD_DETH, 8, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 1, 0, MS_RIDER, MZ_HUMAN), + SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, @@ -2770,7 +2767,7 @@ struct permonst _mons2[] = { LVL(30, 12, -5, 100, 0), (G_UNIQ|G_NOGEN), A(ATTK(AT_TUCH, AD_PEST, 8, 8), ATTK(AT_TUCH, AD_PEST, 8, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 1, 0, MS_RIDER, MZ_HUMAN), + SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, @@ -2779,7 +2776,7 @@ struct permonst _mons2[] = { LVL(30, 12, -5, 100, 0), (G_UNIQ|G_NOGEN), A(ATTK(AT_TUCH, AD_FAMN, 8, 8), ATTK(AT_TUCH, AD_FAMN, 8, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 1, 0, MS_RIDER, MZ_HUMAN), + SIZ(WT_HUMAN, 1, MS_RIDER, MZ_HUMAN), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, @@ -2790,7 +2787,7 @@ struct permonst _mons2[] = { MON("mail daemon", S_DEMON, LVL(56, 24, 10, 127, 0), (G_NOGEN|G_NOCORPSE), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(600, 300, 0, MS_SILENT, MZ_HUMAN), + SIZ(600, 300, MS_SILENT, MZ_HUMAN), MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_SWIM|M1_BREATHLESS|M1_SEE_INVIS|M1_HUMANOID|M1_POIS, M2_NOPOLY|M2_STALK|M2_PEACEFUL, M3_INFRAVISIBLE|M3_INFRAVISION, @@ -2800,7 +2797,7 @@ struct permonst _mons2[] = { LVL(7, 12, 4, 30, 0), (G_NOGEN|G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1500, 400, 0, MS_DJINNI, MZ_HUMAN), MR_POISON|MR_STONE, 0, + SIZ(1500, 400, MS_DJINNI, MZ_HUMAN), MR_POISON|MR_STONE, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_NOPOLY|M2_STALK|M2_COLLECT, M3_INFRAVISIBLE, CLR_YELLOW), /* @@ -2810,14 +2807,14 @@ struct permonst _mons2[] = { LVL(3, 3, 6, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_STNG, AD_DRST, 3, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(80, 20, 0, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, + SIZ(80, 20, MS_SILENT, MZ_SMALL), MR_POISON, MR_POISON, M1_SWIM|M1_AMPHIBIOUS|M1_SLITHY|M1_NOLIMBS|M1_NOTAKE|M1_POIS, M2_HOSTILE, 0, CLR_BLUE), MON("piranha", S_EEL, LVL(5, 12, 4, 0, 0), (G_GENO|G_NOGEN|G_SGROUP), A(ATTK(AT_BITE, AD_PHYS, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(60, 30, 0, MS_SILENT, MZ_SMALL), 0, 0, + SIZ(60, 30, MS_SILENT, MZ_SMALL), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, CLR_RED), @@ -2825,7 +2822,7 @@ struct permonst _mons2[] = { LVL(7, 12, 2, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_BITE, AD_PHYS, 5, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(500, 350, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(500, 350, MS_SILENT, MZ_LARGE), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_THICK_HIDE|M1_NOTAKE, M2_HOSTILE, 0, CLR_GRAY), @@ -2833,7 +2830,7 @@ struct permonst _mons2[] = { LVL(5, 9, -1, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_BITE, AD_PHYS, 3, 6), ATTK(AT_TUCH, AD_WRAP, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 250, 0, MS_SILENT, MZ_HUGE), 0, 0, + SIZ(200, 250, MS_SILENT, MZ_HUGE), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_CYAN), @@ -2841,7 +2838,7 @@ struct permonst _mons2[] = { LVL(7, 10, -3, 0, 0), (G_GENO|G_NOGEN), A(ATTK(AT_BITE, AD_ELEC, 4, 6), ATTK(AT_TUCH, AD_WRAP, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 250, 0, MS_SILENT, MZ_HUGE), MR_ELEC, MR_ELEC, + SIZ(200, 250, MS_SILENT, MZ_HUGE), MR_ELEC, MR_ELEC, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BRIGHT_BLUE), @@ -2850,7 +2847,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_HUGS, AD_WRAP, 2, 6), ATTK(AT_BITE, AD_PHYS, 5, 4), NO_ATTK, NO_ATTK), - SIZ(1800, 1000, 0, MS_SILENT, MZ_HUGE), 0, 0, + SIZ(1800, 1000, MS_SILENT, MZ_HUGE), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_NOPOLY|M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CLR_RED), /* @@ -2860,46 +2857,46 @@ struct permonst _mons2[] = { LVL(0, 6, 8, 0, 0), (G_GENO|5), A(ATTK(AT_BITE, AD_PHYS, 1, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 20, 0, MS_SILENT, MZ_TINY), 0, 0, + SIZ(10, 20, MS_SILENT, MZ_TINY), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_YELLOW), MON("gecko", S_LIZARD, LVL(1, 6, 8, 0, 0), (G_GENO|5), A(ATTK(AT_BITE, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 20, 0, MS_SQEEK, MZ_TINY), 0, 0, + SIZ(10, 20, MS_SQEEK, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_GREEN), MON("iguana", S_LIZARD, LVL(2, 6, 7, 0, 0), (G_GENO|5), A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(30, 30, 0, MS_SILENT, MZ_TINY), 0, 0, + SIZ(30, 30, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BROWN), MON("baby crocodile", S_LIZARD, LVL(3, 6, 7, 0, 0), G_GENO, A(ATTK(AT_BITE, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(200, 200, 0, MS_SILENT, MZ_MEDIUM), 0, 0, + SIZ(200, 200, MS_SILENT, MZ_MEDIUM), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_BROWN), MON("lizard", S_LIZARD, LVL(5, 6, 6, 10, 0), (G_GENO|5), A(ATTK(AT_BITE, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(10, 40, 0, MS_SILENT, MZ_TINY), MR_STONE, MR_STONE, + SIZ(10, 40, MS_SILENT, MZ_TINY), MR_STONE, MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CLR_GREEN), MON("chameleon", S_LIZARD, LVL(6, 5, 6, 10, 0), (G_GENO|2), A(ATTK(AT_BITE, AD_PHYS, 4, 2), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(100, 100, 0, MS_SILENT, MZ_TINY), 0, 0, + SIZ(100, 100, MS_SILENT, MZ_TINY), 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_NOPOLY|M2_HOSTILE|M2_SHAPESHIFTER, 0, CLR_BROWN), MON("crocodile", S_LIZARD, LVL(6, 9, 5, 0, 0), (G_GENO|1), A(ATTK(AT_BITE, AD_PHYS, 4, 2), ATTK(AT_CLAW, AD_PHYS, 1,12), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_SILENT, MZ_LARGE), 0, 0, + SIZ(WT_HUMAN, 400, MS_SILENT, MZ_LARGE), 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS| M1_OVIPAROUS|M1_CARNIVORE, M2_STRONG|M2_HOSTILE, 0, CLR_BROWN), @@ -2908,7 +2905,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_TUCH, AD_FIRE, 1, 6), ATTK(AT_HUGS, AD_PHYS, 2, 6), ATTK(AT_HUGS, AD_FIRE, 3, 6), NO_ATTK, NO_ATTK), - SIZ(1500, 400, 0, MS_MUMBLE, MZ_HUMAN), MR_SLEEP|MR_FIRE, MR_FIRE, + SIZ(1500, 400, MS_MUMBLE, MZ_HUMAN), MR_SLEEP|MR_FIRE, MR_FIRE, M1_HUMANOID|M1_SLITHY|M1_THICK_HIDE|M1_POIS, M2_STALK|M2_HOSTILE|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, CLR_ORANGE), @@ -2920,7 +2917,7 @@ struct permonst _mons2[] = { MON("long worm tail", S_WORM_TAIL, LVL(0, 0, 0, 0, 0), (G_NOGEN|G_NOCORPSE|G_UNIQ), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, CLR_BROWN), + SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, CLR_BROWN), /* Note: * Worm tail must be between the normal monsters and the special @@ -2936,21 +2933,21 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_TUNNEL|M1_NEEDPICK|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), MON("barbarian", S_HUMAN, LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), MON("caveman", S_HUMAN, LVL(10, 12, 10, 0, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2958,7 +2955,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 0, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2966,21 +2963,21 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), MON("knight", S_HUMAN, LVL(10, 12, 10, 1, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), MON("monk", S_HUMAN, LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_CLAW, AD_PHYS, 1, 8), ATTK(AT_KICK, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT|M2_MALE, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2988,7 +2985,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -2996,7 +2993,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 2, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3004,7 +3001,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 2, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3012,7 +3009,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3020,7 +3017,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), #ifdef TOURIST @@ -3028,7 +3025,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), #endif @@ -3036,7 +3033,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 1, -1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), MR_COLD, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), MR_COLD, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3044,7 +3041,7 @@ struct permonst _mons2[] = { LVL(10, 12, 10, 3, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3055,7 +3052,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, 20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3064,7 +3061,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3073,7 +3070,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, 20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3085,7 +3082,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 50, -20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_LEADER, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_LEADER, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_ELF|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG| M2_MALE|M2_COLLECT|M2_MAGIC, @@ -3094,7 +3091,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 50, -20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_LEADER, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_LEADER, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_ELF|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG| M2_FEMALE|M2_COLLECT|M2_MAGIC, @@ -3104,7 +3101,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 40, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3113,7 +3110,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 40, 20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3123,7 +3120,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 4, 10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_NASTY|M2_MAGIC, @@ -3133,7 +3130,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 4,10), ATTK(AT_KICK, AD_PHYS, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), ATTK(AT_MAGC, AD_CLRC, 2, 8), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, @@ -3142,7 +3139,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS|M1_SWIM|M1_AMPHIBIOUS, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3153,7 +3150,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, -20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), MR_STONE, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_MALE|M2_GREEDY| M2_JEWELS|M2_COLLECT|M2_MAGIC, @@ -3162,7 +3159,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 30, 20), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3172,7 +3169,7 @@ struct permonst _mons2[] = { LVL(20, 12, 10, 20, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, @@ -3182,7 +3179,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 80, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), MR_COLD, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), MR_COLD, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_FEMALE| M2_COLLECT|M2_MAGIC, @@ -3191,7 +3188,7 @@ struct permonst _mons2[] = { LVL(20, 12, 0, 60, 0), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 2, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_LEADER, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_FEMALE|M2_PNAME|M2_PEACEFUL| M2_STRONG|M2_COLLECT|M2_MAGIC, @@ -3204,7 +3201,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE), + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_LARGE), MR_FIRE|MR_POISON|MR_STONE, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISION|M3_INFRAVISIBLE, CLR_RED), @@ -3213,7 +3210,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), MR_POISON|MR_STONE, 0, + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_POISON|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_STRONG|M2_MALE|M2_STALK|M2_HOSTILE| M2_NASTY|M2_COLLECT|M2_MAGIC, @@ -3226,7 +3223,7 @@ struct permonst _mons2[] = { A(ATTK(AT_BREA, AD_RBRE, 6, 8), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 8), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_STNG, AD_PHYS, 1, 6)), - SIZ(WT_DRAGON, 1700, 0, MS_NEMESIS, MZ_GIGANTIC), + SIZ(WT_DRAGON, 1700, MS_NEMESIS, MZ_GIGANTIC), MR_FIRE|MR_COLD|MR_SLEEP|MR_DISINT|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_SLEEP|MR_DISINT|MR_ELEC|MR_POISON|MR_STONE, M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_SEE_INVIS|M1_POIS, @@ -3238,7 +3235,7 @@ struct permonst _mons2[] = { LVL(15, 12, 10, 0, -15), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(750, 350, 0, MS_NEMESIS, MZ_HUMAN), 0, 0, + SIZ(750, 350, MS_NEMESIS, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_ORC|M2_HOSTILE|M2_STRONG|M2_STALK|M2_NASTY|M2_MALE| M2_GREEDY|M2_JEWELS|M2_COLLECT|M2_MAGIC, @@ -3248,7 +3245,7 @@ struct permonst _mons2[] = { LVL(18, 12, 0, 0, -15), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 4, 8), ATTK(AT_WEAP, AD_PHYS, 4, 8), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(1900, 700, 0, MS_NEMESIS, MZ_HUGE), MR_STONE, 0, + SIZ(1900, 700, MS_NEMESIS, MZ_HUGE), MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_STALK|M2_HOSTILE| M2_NASTY|M2_MALE|M2_JEWELS|M2_COLLECT, @@ -3258,7 +3255,7 @@ struct permonst _mons2[] = { A(ATTK(AT_BREA, AD_FIRE, 8, 6), ATTK(AT_BITE, AD_PHYS, 4, 8), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_PHYS, 2, 4), ATTK(AT_CLAW, AD_SAMU, 2, 4), NO_ATTK ), - SIZ(WT_DRAGON, 1600, 0, MS_NEMESIS, MZ_GIGANTIC), + SIZ(WT_DRAGON, 1600, MS_NEMESIS, MZ_GIGANTIC), MR_FIRE|MR_STONE, MR_FIRE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_STALK| @@ -3269,7 +3266,7 @@ struct permonst _mons2[] = { A(ATTK(AT_CLAW, AD_PHYS, 16, 2), ATTK(AT_CLAW, AD_PHYS, 16, 2), ATTK(AT_MAGC, AD_CLRC, 0, 0), ATTK(AT_CLAW, AD_SAMU, 1, 4), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_POISON|MR_STONE, MR_POISON, M1_HUMANOID|M1_HERBIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_NASTY| @@ -3280,7 +3277,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 8, 4), ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE), + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_LARGE), MR_FIRE|MR_POISON|MR_STONE, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK| M2_NASTY|M2_COLLECT, @@ -3289,7 +3286,7 @@ struct permonst _mons2[] = { LVL(15, 12, 10, 0, -15), (G_NOGEN|G_UNIQ), A(ATTK(AT_CLAW, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 6), ATTK(AT_STNG, AD_DISE, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(750, 350, 0, MS_NEMESIS, MZ_HUMAN), MR_POISON|MR_STONE, MR_POISON, + SIZ(750, 350, MS_NEMESIS, MZ_HUMAN), MR_POISON|MR_STONE, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_NOPOLY|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, @@ -3298,7 +3295,7 @@ struct permonst _mons2[] = { LVL(15, 12, 0, 30, 18), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_DRST, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 8), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_HOSTILE|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, @@ -3310,7 +3307,7 @@ struct permonst _mons2[] = { LVL(15, 12, 0, 40, -13), (G_NOGEN|G_UNIQ|G_NOCORPSE), A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK| M2_NASTY|M2_MALE|M2_COLLECT|M2_MAGIC, @@ -3324,7 +3321,7 @@ struct permonst _mons2[] = { LVL(15, 12, 2, 50, 12), (G_NOGEN|G_UNIQ), A(ATTK(AT_WEAP, AD_PHYS, 2,10), ATTK(AT_WEAP, AD_PHYS, 2,10), ATTK(AT_CLAW, AD_SAMU, 2, 6), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(2250, 850, 0, MS_NEMESIS, MZ_HUGE), MR_FIRE|MR_STONE, MR_FIRE, + SIZ(2250, 850, MS_NEMESIS, MZ_HUGE), MR_FIRE|MR_STONE, MR_FIRE, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GIANT|M2_MALE|M2_PNAME|M2_HOSTILE|M2_STALK| M2_STRONG|M2_NASTY|M2_ROCKTHROW|M2_JEWELS|M2_COLLECT, @@ -3334,7 +3331,7 @@ struct permonst _mons2[] = { A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_CLAW, AD_SAMU, 1, 4), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, + SIZ(WT_HUMAN, 400, MS_NEMESIS, MZ_HUMAN), MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_HOSTILE|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, @@ -3346,7 +3343,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3354,7 +3351,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3362,7 +3359,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3371,7 +3368,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, -7), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_ELF, 350, 0, MS_GUARDIAN, MZ_HUMAN), MR_SLEEP, MR_SLEEP, + SIZ(WT_ELF, 350, MS_GUARDIAN, MZ_HUMAN), MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_ELF|M2_PEACEFUL|M2_COLLECT, M3_INFRAVISION|M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3380,7 +3377,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3388,7 +3385,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3396,7 +3393,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_CLAW, AD_PHYS, 8, 2), ATTK(AT_KICK, AD_STUN, 3, 2), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3404,7 +3401,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_CLRC, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3412,7 +3409,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, -7), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISION|M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3420,7 +3417,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, -3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3428,7 +3425,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_HUMANOID, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3436,7 +3433,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, 3), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3445,7 +3442,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 20, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL | M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3454,7 +3451,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 10, -1), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 8), ATTK(AT_WEAP, AD_PHYS, 1, 8), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_FEMALE, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3462,7 +3459,7 @@ struct permonst _mons2[] = { LVL(5, 12, 10, 30, 0), G_NOGEN, A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_MAGC, AD_SPEL, 0, 0), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0, + SIZ(WT_HUMAN, 400, MS_GUARDIAN, MZ_HUMAN), 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, HI_DOMESTIC), @@ -3472,7 +3469,7 @@ struct permonst _mons2[] = { MON("", 0, LVL(0, 0, 0, 0, 0), (0), A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK), - SIZ(0, 0, 0, 0, 0), 0, 0, 0L, 0L, 0, 0) + SIZ(0, 0, 0, 0), 0, 0, 0L, 0L, 0, 0) }; #endif /* !SPLITMON_1 */ diff --git a/src/mplayer.c b/src/mplayer.c index d901e92ed..6a758444b 100644 --- a/src/mplayer.c +++ b/src/mplayer.c @@ -50,8 +50,9 @@ dev_name() i = rn2(n); for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) { if(!is_mplayer(mtmp->data)) continue; - if(!strncmp(developers[i], NAME(mtmp), - strlen(developers[i]))) { + if(!strncmp(developers[i], + (has_name(mtmp)) ? MNAME(mtmp) : "", + strlen(developers[i]))) { match = TRUE; break; } diff --git a/src/muse.c b/src/muse.c index 774b68ec8..c07c028d0 100644 --- a/src/muse.c +++ b/src/muse.c @@ -7,7 +7,6 @@ */ #include "hack.h" -#include "edog.h" extern const int monstr[]; diff --git a/src/music.c b/src/music.c index 5e738b266..5704ea718 100644 --- a/src/music.c +++ b/src/music.c @@ -321,7 +321,7 @@ do_pit: chasm = maketrap(x,y,PIT); else { You("destroy %s!", mtmp->mtame ? x_monnam(mtmp, ARTICLE_THE, "poor", - mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE): + (has_name(mtmp)) ? SUPPRESS_SADDLE : 0, FALSE): mon_nam(mtmp)); } xkilled(mtmp,0); diff --git a/src/pline.c b/src/pline.c index c9b071a4d..2edc9bf4a 100644 --- a/src/pline.c +++ b/src/pline.c @@ -4,9 +4,6 @@ #define NEED_VARARGS /* Uses ... */ /* comment line for pre-compiled headers */ #include "hack.h" -#ifdef WIZARD -#include "edog.h" -#endif static boolean no_repeat = FALSE; diff --git a/src/pray.c b/src/pray.c index 48d5bff92..d7ebf0d77 100644 --- a/src/pray.c +++ b/src/pray.c @@ -3,7 +3,6 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "epri.h" STATIC_PTR int NDECL(prayer_done); STATIC_DCL struct obj *NDECL(worst_cursed_item); diff --git a/src/priest.c b/src/priest.c index 313b769cd..5774547a9 100644 --- a/src/priest.c +++ b/src/priest.c @@ -1,12 +1,9 @@ -/* SCCS Id: @(#)priest.c 3.5 2005/11/02 */ +/* SCCS Id: @(#)priest.c 3.5 2006/01/03 */ /* Copyright (c) Izchak Miller, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" #include "mfndpos.h" -#include "eshk.h" -#include "epri.h" -#include "emin.h" /* this matches the categorizations shown by enlightenment */ #define ALGN_SINNED (-4) /* worse than strayed */ @@ -14,6 +11,28 @@ STATIC_DCL boolean FDECL(histemple_at,(struct monst *,XCHAR_P,XCHAR_P)); STATIC_DCL boolean FDECL(has_shrine,(struct monst *)); +void +newepri(mtmp) +struct monst *mtmp; +{ + if (!mtmp->mextra) mtmp->mextra = newmextra(); + if (!EPRI(mtmp)) { + EPRI(mtmp) = (struct epri *)alloc(sizeof(struct epri)); + (void) memset((genericptr_t) EPRI(mtmp), 0, sizeof(struct epri)); + } +} + +void +free_epri(mtmp) +struct monst *mtmp; +{ + if (mtmp->mextra && EPRI(mtmp)) { + free((genericptr_t) EPRI(mtmp)); + EPRI(mtmp) = (struct epri *)0; + } + mtmp->ispriest = 0; +} + /* * Move for priests and shopkeepers. Called from shk_move() and pri_move(). * Valid returns are 1: moved 0: didn't -1: let m_move do it -2: died. @@ -189,7 +208,7 @@ boolean sanctum; /* is it the seat of the high priest? */ (void) rloc(m_at(sx+1, sy), FALSE); /* insurance */ priest = makemon(&mons[sanctum ? PM_HIGH_PRIEST : PM_ALIGNED_PRIEST], - sx + 1, sy, NO_MM_FLAGS); + sx + 1, sy, MM_EPRI); if (priest) { EPRI(priest)->shroom = (sroom - rooms) + ROOMOFFSET; EPRI(priest)->shralign = Amask2align(levl[sx][sy].altarmask); @@ -549,7 +568,7 @@ boolean peaceful; if (MON_AT(x, y)) (void) rloc(m_at(x, y), FALSE); /* insurance */ - if (!(roamer = makemon(ptr, x, y, MM_ADJACENTOK))) + if (!(roamer = makemon(ptr, x, y, MM_ADJACENTOK|MM_EMIN))) return((struct monst *)0); EMIN(roamer)->min_align = alignment; @@ -683,9 +702,15 @@ angry_priest() if (!IS_ALTAR(lev->typ) || ((aligntyp)Amask2align(lev->altarmask & AM_MASK) != EPRI(priest)->shralign)) { - priest->ispriest = 0; /* now a roamer */ - priest->isminion = 1; /* but still aligned */ - /* this overloads EPRI's shroom field, which is now clobbered */ + if (EPRI(priest)) { + if (!EMIN(priest)) newemin(priest); + priest->ispriest = 0; /* roamer */ + /* but still aligned */ + priest->isminion = 1; + EMIN(priest)->min_align = EPRI(priest)->shralign; + } + /* this used to overload EPRI's shroom field, which was then clobbered + * but not since adding the separate mextra structure */ EMIN(priest)->renegade = FALSE; } } diff --git a/src/restore.c b/src/restore.c index 6c6222a64..67a0b4249 100644 --- a/src/restore.c +++ b/src/restore.c @@ -277,6 +277,80 @@ boolean ghostly, frozen; return(first); } +/* + * used by get_mtraits() in mkobj.c + * to retrieve the bundled up OATTACHED_MONST info. + */ +struct monst * +buffer_to_mon(buffer) +genericptr_t buffer; +{ + int lth; + struct monst *mtmp; + char *spot = (char *)buffer; + + mtmp = newmonst(); + (void) memcpy((genericptr_t)mtmp, (genericptr_t)spot, sizeof(struct monst)); + spot += sizeof(struct monst); + + /* obtain the stored length of the monster name */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + if (!mtmp->mextra) mtmp->mextra = newmextra(); + MNAME(mtmp) = (char *)alloc(lth); + (void) memcpy((genericptr_t)MNAME(mtmp), + (genericptr_t)spot, lth); + spot += lth; + } + /* obtain the length of the egd (guard) structure */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + newegd(mtmp); + (void) memcpy((genericptr_t)EGD(mtmp), + (genericptr_t)spot, lth); + spot += lth; + } + /* obtain the length of the epri (priest) structure */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + newepri(mtmp); + (void) memcpy((genericptr_t)EPRI(mtmp), + (genericptr_t)spot, lth); + spot += lth; + } + /* obtain the length of the eshk (shopkeeper) structure */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + neweshk(mtmp); + (void) memcpy((genericptr_t)ESHK(mtmp), + (genericptr_t)spot, lth); + spot += lth; + } + /* obtain the length of the emin (minion) structure */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + newemin(mtmp); + (void) memcpy((genericptr_t)EMIN(mtmp), + (genericptr_t)spot, lth); + spot += lth; + } + /* obtain the length of the edog (mtame) structure */ + (void) memcpy((genericptr_t)<h, (genericptr_t)spot, sizeof(int)); + spot += sizeof(int); + if (lth) { + newedog(mtmp); + (void) memcpy((genericptr_t)EDOG(mtmp), + (genericptr_t)spot, lth); + spot += lth; /* actually not necessary */ + } + return mtmp; +} + STATIC_OVL struct monst * restmonchn(fd, ghostly) register int fd; @@ -284,15 +358,66 @@ boolean ghostly; { register struct monst *mtmp, *mtmp2 = 0; register struct monst *first = (struct monst *)0; - int xl, offset; + int offset, buflen; while(1) { - mread(fd, (genericptr_t) &xl, sizeof(xl)); - if(xl == -1) break; - mtmp = newmonst(xl); + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if(buflen == -1) break; + mtmp = newmonst(); + mread(fd, (genericptr_t) mtmp, sizeof(struct monst)); + /* any saved mextra pointer is invalid */ + mtmp->mextra = (struct mextra *)0; + + /* read the length of the name and the name */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + if (!mtmp->mextra) mtmp->mextra = newmextra(); + MNAME(mtmp) = (char *)alloc(buflen); + mread(fd, (genericptr_t) MNAME(mtmp), buflen); + } + + /* egd */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + newegd(mtmp); + mread(fd, (genericptr_t) EGD(mtmp), + sizeof(struct egd)); + } + + /* epri */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + newepri(mtmp); + mread(fd, (genericptr_t) EPRI(mtmp), + sizeof(struct epri)); + } + + /* eshk */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + neweshk(mtmp); + mread(fd, (genericptr_t) ESHK(mtmp), + sizeof(struct eshk)); + } + + /* emin */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + newemin(mtmp); + mread(fd, (genericptr_t) EMIN(mtmp), + sizeof(struct emin)); + } + + /* edog */ + mread(fd, (genericptr_t) &buflen, sizeof(buflen)); + if (buflen > 0) { + newedog(mtmp); + mread(fd, (genericptr_t) EDOG(mtmp), + sizeof(struct edog)); + } + if(!first) first = mtmp; else mtmp2->nmon = mtmp; - mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst)); if (ghostly) { unsigned nid = context.ident++; add_id_mapping(mtmp->m_id, nid); diff --git a/src/save.c b/src/save.c index e7204ab35..8af673c92 100644 --- a/src/save.c +++ b/src/save.c @@ -1004,21 +1004,97 @@ register struct obj *otmp; bwrite(fd, (genericptr_t) &minusone, sizeof(int)); } +/* + * Used by save_mtraits() in mkobj.c to ensure + * that all the monst related information is stored in + * an OATTACHED_MONST structure. + */ +genericptr_t +mon_to_buffer(mtmp,isize) +struct monst *mtmp; +int *isize; +{ + char *spot; + int lth, k, xlth[6]; + genericptr_t buffer, xptr[6]; + struct monst *mbuf; + + lth = sizeof(struct monst); + + /* there is always one sizeof(int) for the name + and one for each of the 5 potential mextra fields */ + for (k = 0; k < 6; ++k) { + xlth[k] = 0; + xptr[k] = (genericptr_t)0; + } + if (mtmp->mextra) { + if (MNAME(mtmp)) { + xlth[0] = strlen(MNAME(mtmp)) + 1; + xptr[0] = (genericptr_t)MNAME(mtmp); + } + if (EGD(mtmp)) { + xlth[1] = sizeof(struct egd); + xptr[1] = (genericptr_t)EGD(mtmp); + } + if (EPRI(mtmp)) { + xlth[2] = sizeof(struct epri); + xptr[2] = (genericptr_t)EPRI(mtmp); + } + if (ESHK(mtmp)) { + xlth[3] = sizeof(struct eshk); + xptr[3] = (genericptr_t)ESHK(mtmp); + } + if (EMIN(mtmp)) { + xlth[4] = sizeof(struct emin); + xptr[4] = (genericptr_t)EMIN(mtmp); + } + if (EDOG(mtmp)) { + xlth[5] = sizeof(struct edog); + xptr[5] = (genericptr_t)EDOG(mtmp); + } + } + for (k = 0; k < 6; ++k) { + lth += sizeof(int); + lth += xlth[k]; + } + if (isize) *isize = lth; + + buffer = alloc(lth); + + spot = (char *)buffer; + (void) memcpy((genericptr_t)spot, (genericptr_t)mtmp, + sizeof(struct monst)); + spot += sizeof(struct monst); + + mbuf = (struct monst *)buffer; + mbuf->mextra = (struct mextra *)0; + + for (k = 0; k < 6; ++k) { + lth = xlth[k]; + (void) memcpy((genericptr_t)spot, + (genericptr_t)<h, sizeof(lth)); + spot += sizeof(lth); + if (lth > 0 && xptr[k] != 0) { + (void) memcpy((genericptr_t)spot, xptr[k], lth); + spot += lth; + } + } + return (genericptr_t)buffer; +} + STATIC_OVL void savemonchn(fd, mtmp, mode) register int fd, mode; register struct monst *mtmp; { register struct monst *mtmp2; - unsigned int xl; - int minusone = -1; + int buflen, minusone = -1, zerobuf = 0; + genericptr_t buffer = (genericptr_t)0; while (mtmp) { mtmp2 = mtmp->nmon; if (perform_bwrite(mode)) { mtmp->mnum = monsndx(mtmp->data); - xl = mtmp->mxlth + mtmp->mnamelth; - bwrite(fd, (genericptr_t) &xl, sizeof(int)); #ifndef GOLDOBJ if (mtmp->mgold) { struct obj *goldobj = mksobj(GOLD_PIECE, FALSE, FALSE); @@ -1030,7 +1106,58 @@ register struct monst *mtmp; mtmp->minvent = goldobj; } #endif - bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst)); + buflen = sizeof(struct monst); + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); +#if 0 + buffer = mon_to_buffer(mtmp, &buflen); + bwrite(fd, buffer, buflen); +#else + bwrite(fd, (genericptr_t) mtmp, buflen); + if (!mtmp->mextra) { + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + bwrite(fd, (genericptr_t) &zerobuf, sizeof(int)); + } else { + if (MNAME(mtmp)) buflen = strlen(MNAME(mtmp)) + 1; + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) MNAME(mtmp), buflen); + + if (EGD(mtmp)) buflen = sizeof(struct egd); + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) EGD(mtmp), buflen); + + if (EPRI(mtmp)) buflen = sizeof(struct epri); + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) EPRI(mtmp), buflen); + + if (ESHK(mtmp)) buflen = sizeof(struct eshk); + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) ESHK(mtmp), buflen); + + if (EMIN(mtmp)) buflen = sizeof(struct emin); + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) EMIN(mtmp), buflen); + + if (EDOG(mtmp)) buflen = sizeof(struct edog); + else buflen = 0; + bwrite(fd, (genericptr_t) &buflen, sizeof(int)); + if (buflen > 0) + bwrite(fd, (genericptr_t) EDOG(mtmp), buflen); + } +#endif } if (mtmp->minvent) saveobjchn(fd,mtmp->minvent,mode); diff --git a/src/shk.c b/src/shk.c index 1792cdeb2..29c270dfe 100644 --- a/src/shk.c +++ b/src/shk.c @@ -3,7 +3,6 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "eshk.h" /*#define DEBUG*/ diff --git a/src/shknam.c b/src/shknam.c index c0cead964..e8f3f7593 100644 --- a/src/shknam.c +++ b/src/shknam.c @@ -1,11 +1,10 @@ -/* SCCS Id: @(#)shknam.c 3.5 2005/12/14 */ +/* SCCS Id: @(#)shknam.c 3.5 2006/01/03 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ /* shknam.c -- initialize a shop */ #include "hack.h" -#include "eshk.h" STATIC_DCL boolean FDECL(veggy_item, (struct obj *obj,int)); STATIC_DCL int NDECL(shkveg); @@ -450,6 +449,28 @@ const char * const *nlp; ESHK(shk)->shknam[PL_NSIZ-1] = 0; } +void +neweshk(mtmp) +struct monst *mtmp; +{ + if (!mtmp->mextra) mtmp->mextra = newmextra(); + if (!ESHK(mtmp)) { + ESHK(mtmp) = (struct eshk *)alloc(sizeof(struct eshk)); + (void) memset((genericptr_t) ESHK(mtmp), 0, sizeof(struct eshk)); + } +} + +void +free_eshk(mtmp) +struct monst *mtmp; +{ + if (mtmp->mextra && ESHK(mtmp)) { + free((genericptr_t) ESHK(mtmp)); + ESHK(mtmp) = (struct eshk *)0; + } + mtmp->isshk = 0; +} + STATIC_OVL int shkinit(shp, sroom) /* create a new shopkeeper in the given room */ const struct shclass *shp; @@ -507,7 +528,7 @@ struct mkroom *sroom; if(MON_AT(sx, sy)) (void) rloc(m_at(sx, sy), FALSE); /* insurance */ /* now initialize the shopkeeper monster structure */ - if(!(shk = makemon(&mons[PM_SHOPKEEPER], sx, sy, NO_MM_FLAGS))) + if(!(shk = makemon(&mons[PM_SHOPKEEPER], sx, sy, MM_ESHK))) return(-1); shk->isshk = shk->mpeaceful = 1; set_malign(shk); diff --git a/src/sounds.c b/src/sounds.c index 4b29bcd6f..ba506674b 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -3,7 +3,7 @@ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "edog.h" + #ifdef USER_SOUNDS # ifdef USER_SOUNDS_REGEX #include diff --git a/src/steed.c b/src/steed.c index fdf8f9fdc..8c696c28e 100644 --- a/src/steed.c +++ b/src/steed.c @@ -512,7 +512,7 @@ dismount_steed(reason) You("can't. There isn't anywhere for you to stand."); return; } - if (!mtmp->mnamelth) { + if (!has_name(mtmp)) { pline("You've been through the dungeon on %s with no name.", an(mtmp->data->mname)); if (Hallucination) diff --git a/src/timeout.c b/src/timeout.c index b262e9ec2..ba57add43 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -470,10 +470,9 @@ long timeout; while it's in your inventory */ if ((yours && !silent) || (carried(egg) && mon->data->mlet == S_DRAGON)) { - if ((mon2 = tamedog(mon, (struct obj *)0)) != 0) { - mon = mon2; + if (tamedog(mon, (struct obj *)0)) { if (carried(egg) && mon->data->mlet != S_DRAGON) - mon->mtame = 20; + mon->mtame = 20; } } if (mvitals[mnum].mvflags & G_EXTINCT) @@ -680,7 +679,7 @@ slip_or_trip() pline("%s %s%s on the ice.", #ifdef STEED u.usteed ? upstart(x_monnam(u.usteed, - u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE, + (has_name(u.usteed)) ? ARTICLE_NONE : ARTICLE_THE, (char *)0, SUPPRESS_SADDLE, FALSE)) : #endif "You", rn2(2) ? "slip" : "slide", on_foot ? "" : "s"); diff --git a/src/trap.c b/src/trap.c index 8b4d6d724..c4093ea01 100644 --- a/src/trap.c +++ b/src/trap.c @@ -675,7 +675,7 @@ unsigned trflags; u.usteed->mtrapseen |= (1 << (ttype - 1)); /* suppress article in various steed messages when using its name (which won't occur when hallucinating) */ - if (u.usteed->mnamelth && !Hallucination) + if (has_name(u.usteed) && !Hallucination) steed_article = ARTICLE_NONE; } #endif diff --git a/src/vault.c b/src/vault.c index 2cce55a0b..2d0b3a0b8 100644 --- a/src/vault.c +++ b/src/vault.c @@ -1,9 +1,8 @@ -/* SCCS Id: @(#)vault.c 3.5 2005/10/28 */ +/* SCCS Id: @(#)vault.c 3.5 2006/01/03 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ #include "hack.h" -#include "vault.h" STATIC_DCL struct monst *NDECL(findgd); @@ -16,6 +15,28 @@ STATIC_DCL boolean FDECL(in_fcorridor, (struct monst *,int,int)); STATIC_DCL void FDECL(move_gold,(struct obj *,int)); STATIC_DCL void FDECL(wallify_vault,(struct monst *)); +void +newegd(mtmp) +struct monst *mtmp; +{ + if (!mtmp->mextra) mtmp->mextra = newmextra(); + if (!EGD(mtmp)) { + EGD(mtmp) = (struct egd *)alloc(sizeof(struct egd)); + (void) memset((genericptr_t) EGD(mtmp), 0, sizeof(struct egd)); + } +} + +void +free_egd(mtmp) +struct monst *mtmp; +{ + if (mtmp->mextra && EGD(mtmp)) { + free((genericptr_t) EGD(mtmp)); + EGD(mtmp) = (struct egd *)0; + } + mtmp->isgd = 0; +} + STATIC_OVL boolean clear_fcorr(grd, forceshow) struct monst *grd; @@ -222,7 +243,7 @@ fnd: } /* make something interesting happen */ - if(!(guard = makemon(&mons[PM_GUARD], x, y, NO_MM_FLAGS))) return; + if(!(guard = makemon(&mons[PM_GUARD], x, y, MM_EGD))) return; guard->isgd = 1; guard->mpeaceful = 1; set_malign(guard); diff --git a/src/zap.c b/src/zap.c index 7b8f9f535..65d2e2d7d 100644 --- a/src/zap.c +++ b/src/zap.c @@ -685,7 +685,7 @@ boolean by_hero; /* handle recorporealization of an active ghost */ if (corpse->oxlth && corpse->oattached == OATTACHED_M_ID) { unsigned m_id; - struct monst *ghost, *mtmp2; + struct monst *ghost; struct obj *otmp; (void) memcpy((genericptr_t)&m_id, @@ -702,11 +702,9 @@ boolean by_hero; } /* tame the revived monster if its ghost was tame */ if (ghost->mtame && !mtmp->mtame) { - mtmp2 = tamedog(mtmp, (struct obj *)0); - if (mtmp2) { + if (tamedog(mtmp, (struct obj *)0)) { /* ghost's edog data is ignored */ - mtmp2->mtame = ghost->mtame; - mtmp = mtmp2; + mtmp->mtame = ghost->mtame; } } /* was ghost, now alive, it's all very confusing */