pc-hack

PC HACK 3.61 source code (archival)
git clone http://frotz.net/git/pc-hack.git
Log | Files | Refs

monst.h (2098B)


      1 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
      2 /* 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 	Bitfield(mimic,1);	/* undetected mimic */
     15 	Bitfield(mdispl,1);	/* mdx,mdy valid */
     16 	Bitfield(minvis,1);	/* invisible */
     17 	Bitfield(cham,1);	/* shape-changer */
     18 	Bitfield(mhide,1);	/* hides beneath objects */
     19 	Bitfield(mundetected,1);	/* not seen in present hiding place */
     20 	Bitfield(mspeed,2);
     21 	Bitfield(msleep,1);
     22 	Bitfield(mfroz,1);
     23 	Bitfield(mconf,1);
     24 	Bitfield(mflee,1);	/* fleeing */
     25 	Bitfield(mfleetim,7);	/* timeout for mflee */
     26 	Bitfield(mcan,1);	/* has been cancelled */
     27 	Bitfield(mtame,1);		/* implies peaceful */
     28 	Bitfield(mpeaceful,1);	/* does not attack unprovoked */
     29 	Bitfield(isshk,1);	/* is shopkeeper */
     30 	Bitfield(isgd,1);	/* is guard */
     31 	Bitfield(mcansee,1);	/* cansee 1, temp.blinded 0, blind 0 */
     32 	Bitfield(mblinded,7);	/* cansee 0, temp.blinded n, blind 0 */
     33 	Bitfield(mtrapped,1);	/* trapped in a pit or bear trap */
     34 	Bitfield(mnamelth,6);	/* length of name (following mxlth) */
     35 #ifndef NOWORM
     36 	Bitfield(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 "