88836af7aee3b204c1c52d4111aa869f739749cf
[dragonfly.git] / games / hack / def.monst.h
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         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 "