1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 2: /* def.monst.h - version 1.0.2 */ 3: 4: struct monst { 5: struct monst *nmon; 6: struct permonst *data; 7: unsigned m_id; 8: xchar mx,my; 9: xchar mdx,mdy; /* if mdispl then pos where last displayed */ 10: #define MTSZ 4 11: coord mtrack[MTSZ]; /* monster track */ 12: schar mhp,mhpmax; 13: char mappearance; /* nonzero for undetected 'M's and for '1's */ 14: EasyBitfield(mimic,1); /* undetected mimic */ 15: EasyBitfield(mdispl,1); /* mdx,mdy valid */ 16: EasyBitfield(minvis,1); /* invisible */ 17: EasyBitfield(cham,1); /* shape-changer */ 18: EasyBitfield(mhide,1); /* hides beneath objects */ 19: EasyBitfield(mundetected,1); /* not seen in present hiding place */ 20: EasyBitfield(mspeed,2); 21: EasyBitfield(msleep,1); 22: EasyBitfield(mfleetim,7); /* timeout for mflee */ 23: EasyBitfield(mfroz,1); 24: EasyBitfield(mconf,1); 25: EasyBitfield(mflee,1); /* fleeing */ 26: EasyBitfield(mcan,1); /* has been cancelled */ 27: EasyBitfield(mtame,1); /* implies peaceful */ 28: EasyBitfield(mpeaceful,1); /* does not attack unprovoked */ 29: EasyBitfield(isshk,1); /* is shopkeeper */ 30: EasyBitfield(isgd,1); /* is guard */ 31: EasyBitfield(mcansee,1); /* cansee 1, temp.blinded 0, blind 0 */ 32: EasyBitfield(mblinded,7); /* cansee 0, temp.blinded n, blind 0 */ 33: EasyBitfield(mtrapped,1); /* trapped in a pit or bear trap */ 34: EasyBitfield(mnamelth,6); /* length of name (following mxlth) */ 35: #ifndef NOWORM 36: EasyBitfield(wormno,5); /* at most 31 worms on any level */ 37: #endif NOWORM 38: unsigned mtrapseen; /* bitmap of traps we've been trapped in */ 39: long mlstmv; /* prevent two moves at once */ 40: struct obj *minvent; 41: long mgold; 42: unsigned mxlth; /* length of following data */ 43: /* in order to prevent alignment problems mextra should 44: be (or follow) a long int */ 45: long mextra[1]; /* monster dependent info */ 46: }; 47: 48: #define newmonst(xl) (struct monst *) alloc((unsigned)(xl) + sizeof(struct monst)) 49: 50: extern struct monst *fmon; 51: extern struct monst *fallen_down; 52: struct monst *m_at(); 53: 54: /* these are in mspeed */ 55: #define MSLOW 1 /* slow monster */ 56: #define MFAST 2 /* speeded monster */ 57: 58: #define NAME(mtmp) (((char *) mtmp->mextra) + mtmp->mxlth) 59: #define MREGEN "TVi1" 60: #define UNDEAD "ZVW "