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