aboutsummaryrefslogtreecommitdiff
path: root/hack/def.monst.h
blob: 8424396322387a99c39447432a76baa041a9ceba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* def.monst.h - version 1.0.2 */
/* $DragonFly: src/games/hack/def.monst.h,v 1.3 2006/08/21 19:45:32 pavalos Exp $ */

struct monst {
	struct monst *nmon;
	struct permonst *data;
	unsigned m_id;
	xchar mx, my;
	xchar mdx, mdy;		/* if mdispl then pos where last displayed */
#define	MTSZ	4
	coord mtrack[MTSZ];	/* monster track */
	schar mhp, mhpmax;
	char mappearance;	/* nonzero for undetected 'M's and for '1's */
	Bitfield(mimic, 1);	/* undetected mimic */
	Bitfield(mdispl, 1);	/* mdx, mdy valid */
	Bitfield(minvis, 1);	/* invisible */
	Bitfield(cham, 1);	/* shape-changer */
	Bitfield(mhide, 1);	/* hides beneath objects */
	Bitfield(mundetected, 1);	/* not seen in present hiding place */
	Bitfield(mspeed, 2);
	Bitfield(msleep, 1);
	Bitfield(mfroz, 1);
	Bitfield(mconf, 1);
	Bitfield(mflee, 1);	/* fleeing */
	Bitfield(mfleetim, 7);	/* timeout for mflee */
	Bitfield(mcan, 1);	/* has been cancelled */
	Bitfield(mtame, 1);		/* implies peaceful */
	Bitfield(mpeaceful, 1);	/* does not attack unprovoked */
	Bitfield(isshk, 1);	/* is shopkeeper */
	Bitfield(isgd, 1);	/* is guard */
	Bitfield(mcansee, 1);	/* cansee 1, temp.blinded 0, blind 0 */
	Bitfield(mblinded, 7);	/* cansee 0, temp.blinded n, blind 0 */
	Bitfield(mtrapped, 1);	/* trapped in a pit or bear trap */
	Bitfield(mnamelth, 6);	/* length of name (following mxlth) */
#ifndef NOWORM
	Bitfield(wormno, 5);	/* at most 31 worms on any level */
#endif /* NOWORM */
	unsigned mtrapseen;	/* bitmap of traps we've been trapped in */
	long mlstmv;		/* prevent two moves at once */
	struct obj *minvent;
	long mgold;
	unsigned mxlth;		/* length of following data */
	/* in order to prevent alignment problems mextra should
	   be (or follow) a long int */
	long mextra[1];		/* monster dependent info */
};

#define	newmonst(xl)	alloc((unsigned)(xl) + sizeof(struct monst))

extern struct monst *fmon;
extern struct monst *fallen_down;

/* these are in mspeed */
#define	MSLOW	1 /* slow monster */
#define	MFAST	2 /* speeded monster */

#define	NAME(mtmp)	(((char *)mtmp->mextra) + mtmp->mxlth)
#define	MREGEN		"TVi1"
#define	UNDEAD		"ZVW "