1 /* NetHack 3.6	vision.h	$NHDT-Date: 1559994624 2019/06/08 11:50:24 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.10 $ */
2 /* Copyright (c) Dean Luick, with acknowledgements to Dave Cohrs, 1990. */
3 /* NetHack may be freely redistributed.  See license for details.	*/
4 
5 #ifndef VISION_H
6 #define VISION_H
7 
8 #if 0 /* (moved to decl.h) */
9 extern boolean vision_full_recalc;	/* TRUE if need vision recalc */
10 extern char **viz_array;		/* could see/in sight row pointers */
11 extern char *viz_rmin;			/* min could see indices */
12 extern char *viz_rmax;			/* max could see indices */
13 #endif
14 #define COULD_SEE 0x1 /* location could be seen, if it were lit */
15 #define IN_SIGHT 0x2  /* location can be seen */
16 #define TEMP_LIT 0x4  /* location is temporarily lit */
17 
18 /*
19  * Light source sources
20  */
21 #define LS_OBJECT 0
22 #define LS_MONSTER 1
23 
24 /*
25  *  cansee()	- Returns true if the hero can see the location.
26  *
27  *  couldsee()	- Returns true if the hero has a clear line of sight to
28  *		  the location.
29  */
30 #define cansee(x, y) (viz_array[y][x] & IN_SIGHT)
31 #define couldsee(x, y) (viz_array[y][x] & COULD_SEE)
32 #define templit(x, y) (viz_array[y][x] & TEMP_LIT)
33 
34 /*
35  *  The following assume the monster is not blind.
36  *
37  *  m_cansee()	- Returns true if the monster can see the given location.
38  *
39  *  m_canseeu() - Returns true if the monster could see the hero.  Assumes
40  *		  that if the hero has a clear line of sight to the monster's
41  *		  location and the hero is visible, then monster can see the
42  *		  hero.
43  */
44 #define m_cansee(mtmp, x2, y2) clear_path((mtmp)->mx, (mtmp)->my, (x2), (y2))
45 
46 #if 0
47 #define m_canseeu(m) \
48     ((!Invis || perceives((m)->data))                      \
49      && !(Underwater || u.uburied || (m)->mburied)         \
50      && couldsee((m)->mx, (m)->my))
51 #else   /* without 'uburied' and 'mburied' */
52 #define m_canseeu(m) \
53     ((!Invis || perceives((m)->data))                      \
54      && !Underwater                                        \
55      && couldsee((m)->mx, (m)->my))
56 #endif
57 
58 /*
59  *  Circle information
60  */
61 #define MAX_RADIUS 15 /* this is in points from the source */
62 
63 /* Use this macro to get a list of distances of the edges (see vision.c). */
64 #define circle_ptr(z) (&circle_data[(int) circle_start[z]])
65 
66 /* howmonseen() bitmask values */
67 #define MONSEEN_NORMAL   0x0001 /* normal vision */
68 #define MONSEEN_SEEINVIS 0x0002 /* seeing invisible */
69 #define MONSEEN_INFRAVIS 0x0004 /* via infravision */
70 #define MONSEEN_TELEPAT  0x0008 /* via telepathy */
71 #define MONSEEN_XRAYVIS  0x0010 /* via Xray vision */
72 #define MONSEEN_DETECT   0x0020 /* via extended monster detection */
73 #define MONSEEN_WARNMON  0x0040 /* via type-specific warning */
74 
75 #endif /* VISION_H */
76