From bb86fa2bb7e0978f800005c2e067d1b277388c5a Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 9 Jan 2019 18:10:55 -0800 Subject: [PATCH] hero infravision Take a first step towards making the mons[] array be readonly. The only other place that updates it is when changing succubus and incubus AD_SSEX attacks to AD_SEDU ones and that can be handled via existing getmattk(), but so far has proven to be trickier than anticipated. --- include/mondata.h | 8 ++++---- src/polyself.c | 5 +++-- src/role.c | 11 ++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/mondata.h b/include/mondata.h index 0b1df5ccc..8febb8fb2 100644 --- a/include/mondata.h +++ b/include/mondata.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 mondata.h $NHDT-Date: 1513297342 2017/12/15 00:22:22 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.33 $ */ +/* NetHack 3.6 mondata.h $NHDT-Date: 1547086248 2019/01/10 02:10:48 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.35 $ */ /* Copyright (c) 1989 Mike Threepoint */ /* NetHack may be freely redistributed. See license for details. */ @@ -127,9 +127,9 @@ #define is_longworm(ptr) \ (((ptr) == &mons[PM_BABY_LONG_WORM]) || ((ptr) == &mons[PM_LONG_WORM]) \ || ((ptr) == &mons[PM_LONG_WORM_TAIL])) -#define is_covetous(ptr) ((ptr->mflags3 & M3_COVETOUS)) -#define infravision(ptr) ((ptr->mflags3 & M3_INFRAVISION)) -#define infravisible(ptr) ((ptr->mflags3 & M3_INFRAVISIBLE)) +#define is_covetous(ptr) (((ptr)->mflags3 & M3_COVETOUS)) +#define infravision(ptr) (((ptr)->mflags3 & M3_INFRAVISION)) +#define infravisible(ptr) (((ptr)->mflags3 & M3_INFRAVISIBLE)) #define is_displacer(ptr) (((ptr)->mflags3 & M3_DISPLACES) != 0L) #define is_mplayer(ptr) \ (((ptr) >= &mons[PM_ARCHEOLOGIST]) && ((ptr) <= &mons[PM_WIZARD])) diff --git a/src/polyself.c b/src/polyself.c index e136d1898..fec59787c 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 polyself.c $NHDT-Date: 1520797126 2018/03/11 19:38:46 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.117 $ */ +/* NetHack 3.6 polyself.c $NHDT-Date: 1547086249 2019/01/10 02:10:49 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.125 $ */ /* Copyright (C) 1987, 1988, 1989 by Ken Arromdee */ /* NetHack may be freely redistributed. See license for details. */ @@ -81,7 +81,8 @@ set_uasmon() PROPSET(HALLUC_RES, dmgtype(mdat, AD_HALU)); PROPSET(SEE_INVIS, perceives(mdat)); PROPSET(TELEPAT, telepathic(mdat)); - PROPSET(INFRAVISION, infravision(mdat)); + /* note that Infravision uses mons[race] rather than usual mons[role] */ + PROPSET(INFRAVISION, infravision(Upolyd ? mdat : &mons[urace.malenum])); PROPSET(INVIS, pm_invisible(mdat)); PROPSET(TELEPORT, can_teleport(mdat)); PROPSET(TELEPORT_CONTROL, control_teleport(mdat)); diff --git a/src/role.c b/src/role.c index 860f7644e..2a2acce53 100644 --- a/src/role.c +++ b/src/role.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 role.c $NHDT-Date: 1546137492 2018/12/30 02:38:12 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.55 $ */ +/* NetHack 3.6 role.c $NHDT-Date: 1547086250 2019/01/10 02:10:50 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.56 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2098,6 +2098,14 @@ role_init() /* 0 or 1; no gods are neuter, nor is gender randomized */ quest_status.godgend = !strcmpi(align_gtitle(alignmnt), "goddess"); +#if 0 +/* + * Disable this fixup so that mons[] can be const. The only + * place where it actually matters for the hero is in set_uasmon() + * and that can use mons[race] rather than mons[role] for this + * particular property. Despite the comment, it is checked--where + * needed--via instrinsic 'Infravision' which set_uasmon() manages. + */ /* Fix up infravision */ if (mons[urace.malenum].mflags3 & M3_INFRAVISION) { /* although an infravision intrinsic is possible, infravision @@ -2113,6 +2121,7 @@ role_init() if (urole.femalenum != NON_PM) mons[urole.femalenum].mflags3 |= M3_INFRAVISION; } +#endif /*0*/ /* Artifacts are fixed in hack_artifacts() */ -- 2.40.0