1 /*	SCCS Id: @(#)permonst.h 3.4	1999/07/02	*/
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 #ifndef PERMONST_H
6 #define PERMONST_H
7 
8 /*	This structure covers all attack forms.
9  *	aatyp is the gross attack type (eg. claw, bite, breath, ...)
10  *	adtyp is the damage type (eg. physical, fire, cold, spell, ...)
11  *	damn is the number of hit dice of damage from the attack.
12  *	damd is the number of sides on each die.
13  *
14  *	Some attacks can do no points of damage.  Additionally, some can
15  *	have special effects *and* do damage as well.  If damn and damd
16  *	are set, they may have a special meaning.  For example, if set
17  *	for a blinding attack, they determine the amount of time blinded.
18  */
19 
20 struct attack {
21 	uchar		aatyp;
22 	uchar		adtyp, damn, damd;
23 };
24 
25 /*	Max # of attacks for any given monster.
26  */
27 
28 #define NATTK		6
29 
30 /*	Weight of a human body
31  */
32 
33 #define WT_HUMAN	1450
34 
35 #ifndef ALIGN_H
36 #include "align.h"
37 #endif
38 #include "monattk.h"
39 #include "monflag.h"
40 
41 struct permonst {
42 	const char	*mname;			/* full name */
43 	char		mlet;			/* symbol */
44 	schar		mlevel,			/* base monster level */
45 			mmove,			/* move speed */
46 			ac,			/* (base) armor class */
47 			mr;			/* (base) magic resistance */
48 	aligntyp	maligntyp;		/* basic monster alignment */
49 	unsigned short	geno;			/* creation/geno mask value */
50 	struct	attack	mattk[NATTK];		/* attacks matrix */
51 	unsigned short	cwt,			/* weight of corpse */
52 			cnutrit;		/* its nutritional value */
53 	short		pxlth;			/* length of extension */
54 	uchar		msound;			/* noise it makes (6 bits) */
55 	uchar		msize;			/* physical size (3 bits) */
56 	uchar		mresists;		/* resistances */
57 	uchar		mconveys;		/* conveyed by eating */
58 	unsigned long	mflags1,		/* boolean bitflags */
59 			mflags2;		/* more boolean bitflags */
60 	unsigned short	mflags3;		/* yet more boolean bitflags */
61 # ifdef TEXTCOLOR
62 	uchar		mcolor;			/* color to use */
63 # endif
64 };
65 
66 extern NEARDATA struct permonst
67 		mons[];		/* the master list of monster types */
68 
69 #define VERY_SLOW 3
70 #define SLOW_SPEED 9
71 #define NORMAL_SPEED 12 /* movement rates */
72 #define FAST_SPEED 15
73 #define VERY_FAST 24
74 
75 #define NON_PM		PM_PLAYERMON		/* "not a monster" */
76 #define LOW_PM		(NON_PM+1)		/* first monster in mons[] */
77 #define SPECIAL_PM	PM_LONG_WORM_TAIL	/* [normal] < ~ < [special] */
78 	/* mons[SPECIAL_PM] through mons[NUMMONS-1], inclusive, are
79 	   never generated randomly and cannot be polymorphed into */
80 
81 #endif /* PERMONST_H */
82