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