missile light sources
Throwing or kicking a lit lamp, lit candle, or lit potion of oil wasn't giving off any light as it travelled to its destination. Now it does, and dungeon features, objects, or monsters that are temporarily seen as it moves from square to square till appear on the map. In the monster case, they go away as soon as the light moves beyond range, but when it finishes moving the "remembered, unseen monster" glyph will be drawn at their location. I think that part has some room for improvement, but mapping temporarily seen terrain features is the primary impetus for this change. Also, any message delivery while the "lit missile" travelled still showed its light around the hero. Noticeable for lamps or stacks of sufficient candles if hero has no other light source. This cannibalizes the monst->mburied bit for temporarily seeing a monster. It has been present but unused for ages. I needed to replace a couple of vision macros to make sure they didn't examine it any more so that overloading for transient lighting doesn't introduce any vision oddities. For version $NEXT, monst->mtemplit can be given its own bit. It is only set during bhit() execution and cleared by the time that returns, so has no effect on save files.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 display.h $NHDT-Date: 1546212620 2018/12/30 23:30:20 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.29 $ */
|
||||
/* NetHack 3.6 display.h $NHDT-Date: 1559994621 2019/06/08 11:50:21 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.32 $ */
|
||||
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
|
||||
/* and Dave Cohrs, 1990. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -58,11 +58,18 @@
|
||||
* vobj_at() returns a pointer to an object that the hero can see there.
|
||||
* Infravision is not taken into account.
|
||||
*/
|
||||
#if 0
|
||||
#define mon_visible(mon) \
|
||||
(/* The hero can see the monster IF the monster */ \
|
||||
(!mon->minvis || See_invisible) /* 1. is not invisible */ \
|
||||
&& !mon->mundetected /* AND 2. not an undetected hider */ \
|
||||
&& !(mon->mburied || u.uburied)) /* AND 3. neither you nor it is buried */
|
||||
#else /* without 'mburied' and 'uburied' */
|
||||
#define mon_visible(mon) \
|
||||
(/* The hero can see the monster IF the monster */ \
|
||||
(!mon->minvis || See_invisible) /* 1. is not invisible */ \
|
||||
&& !mon->mundetected) /* AND 2. not an undetected hider */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* see_with_infrared()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1559670600 2019/06/04 17:50:00 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.709 $ */
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1559994622 2019/06/08 11:50:22 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.711 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -1064,6 +1064,8 @@ E int NDECL(dosuspend);
|
||||
E void FDECL(new_light_source, (XCHAR_P, XCHAR_P, int, int, ANY_P *));
|
||||
E void FDECL(del_light_source, (int, ANY_P *));
|
||||
E void FDECL(do_light_sources, (char **));
|
||||
E void FDECL(show_transient_light, (struct obj *, int, int));
|
||||
E void NDECL(transient_light_cleanup);
|
||||
E struct monst *FDECL(find_mid, (unsigned, unsigned));
|
||||
E void FDECL(save_light_sources, (int, int, int));
|
||||
E void FDECL(restore_light_sources, (int));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 monst.h $NHDT-Date: 1559422218 2019/06/01 20:50:18 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.31 $ */
|
||||
/* NetHack 3.6 monst.h $NHDT-Date: 1559994623 2019/06/08 11:50:23 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.32 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2016. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -97,11 +97,13 @@ struct monst {
|
||||
Bitfield(perminvis, 1); /* intrinsic minvis value */
|
||||
Bitfield(mcan, 1); /* has been cancelled */
|
||||
Bitfield(mburied, 1); /* has been buried */
|
||||
#define mtemplit mburied /* since buried isn't implemented, use bit for
|
||||
* monsters shown by transcient light source;
|
||||
* only valid during bhit() execution */
|
||||
Bitfield(mundetected, 1); /* not seen in present hiding place;
|
||||
* implies one of M1_CONCEAL or M1_HIDE,
|
||||
* but not mimic (that is, snake, spider,
|
||||
* trapper, piercer, eel)
|
||||
*/
|
||||
* trapper, piercer, eel) */
|
||||
Bitfield(mcansee, 1); /* cansee 1, temp.blinded 0, blind 0 */
|
||||
|
||||
Bitfield(mspeed, 2); /* current speed */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 rm.h $NHDT-Date: 1547255911 2019/01/12 01:18:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.60 $ */
|
||||
/* NetHack 3.6 rm.h $NHDT-Date: 1559994624 2019/06/08 11:50:24 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.61 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Pasi Kallinen, 2017. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -624,12 +624,16 @@ extern dlevel_t level; /* structure describing the current level */
|
||||
/*
|
||||
* Macros for encapsulation of level.monsters references.
|
||||
*/
|
||||
#if 0
|
||||
#define MON_AT(x, y) \
|
||||
(level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& !(level.monsters[x][y])->mburied)
|
||||
#define MON_BURIED_AT(x, y) \
|
||||
(level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& (level.monsters[x][y])->mburied)
|
||||
#else /* without 'mburied' */
|
||||
#define MON_AT(x, y) (level.monsters[x][y] != (struct monst *) 0)
|
||||
#endif
|
||||
#ifdef EXTRA_SANITY_CHECKS
|
||||
#define place_worm_seg(m, x, y) \
|
||||
do { \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 vision.h $NHDT-Date: 1432512777 2015/05/25 00:12:57 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */
|
||||
/* NetHack 3.6 vision.h $NHDT-Date: 1559994624 2019/06/08 11:50:24 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.10 $ */
|
||||
/* Copyright (c) Dean Luick, with acknowledgements to Dave Cohrs, 1990. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -43,11 +43,17 @@ extern char *viz_rmax; /* max could see indices */
|
||||
*/
|
||||
#define m_cansee(mtmp, x2, y2) clear_path((mtmp)->mx, (mtmp)->my, (x2), (y2))
|
||||
|
||||
#define m_canseeu(m) \
|
||||
#if 0
|
||||
#define m_canseeu(m) \
|
||||
((!Invis || perceives((m)->data)) \
|
||||
&& !(Underwater || u.uburied || (m)->mburied) \
|
||||
? couldsee((m)->mx, (m)->my) \
|
||||
: 0)
|
||||
&& !(Underwater || u.uburied || (m)->mburied) \
|
||||
&& couldsee((m)->mx, (m)->my))
|
||||
#else /* without 'uburied' and 'mburied' */
|
||||
#define m_canseeu(m) \
|
||||
((!Invis || perceives((m)->data)) \
|
||||
&& !Underwater \
|
||||
&& couldsee((m)->mx, (m)->my))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Circle information
|
||||
@@ -58,12 +64,12 @@ extern char *viz_rmax; /* max could see indices */
|
||||
#define circle_ptr(z) (&circle_data[(int) circle_start[z]])
|
||||
|
||||
/* howmonseen() bitmask values */
|
||||
#define MONSEEN_NORMAL 0x0001 /* normal vision */
|
||||
#define MONSEEN_NORMAL 0x0001 /* normal vision */
|
||||
#define MONSEEN_SEEINVIS 0x0002 /* seeing invisible */
|
||||
#define MONSEEN_INFRAVIS 0x0004 /* via infravision */
|
||||
#define MONSEEN_TELEPAT 0x0008 /* via telepathy */
|
||||
#define MONSEEN_XRAYVIS 0x0010 /* via Xray vision */
|
||||
#define MONSEEN_DETECT 0x0020 /* via extended monster detection */
|
||||
#define MONSEEN_WARNMON 0x0040 /* via type-specific warning */
|
||||
#define MONSEEN_TELEPAT 0x0008 /* via telepathy */
|
||||
#define MONSEEN_XRAYVIS 0x0010 /* via Xray vision */
|
||||
#define MONSEEN_DETECT 0x0020 /* via extended monster detection */
|
||||
#define MONSEEN_WARNMON 0x0040 /* via type-specific warning */
|
||||
|
||||
#endif /* VISION_H */
|
||||
|
||||
Reference in New Issue
Block a user