Merge branch 'master' into NetHack-3.7

This commit is contained in:
nhmall
2019-07-09 11:01:13 -04:00
3 changed files with 45 additions and 22 deletions
+4 -1
View File
@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.87 $ $NHDT-Date: 1562532730 2019/07/07 20:52:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.89 $ $NHDT-Date: 1562632673 2019/07/09 00:37:53 $
This fixes36.3 file is here to capture information about updates in the 3.6.x This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however, lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -99,6 +99,9 @@ if an engulfer has any worn items, hero could pick them up from inside and
worse (Juiblex will wear an amulet if created with one; a shapechanger worse (Juiblex will wear an amulet if created with one; a shapechanger
might wear one and then turn into an engulfer) might wear one and then turn into an engulfer)
kicking an altar ignored god's wrath if hero injured himself during the kick kicking an altar ignored god's wrath if hero injured himself during the kick
detect unseen/secret door detection/^E failed to find monsters hiding under
objects and failed to find monsters hiding at trap locations
when farlook describes a monster at a visible spot as trapped, reveal the trap
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository
+37 -19
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 detect.c $NHDT-Date: 1544437284 2018/12/10 10:21:24 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.91 $ */ /* NetHack 3.6 detect.c $NHDT-Date: 1562630266 2019/07/08 23:57:46 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.96 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -379,7 +379,7 @@ register struct obj *sobj;
You("notice some gold between your %s.", makeplural(body_part(FOOT))); You("notice some gold between your %s.", makeplural(body_part(FOOT)));
return 0; return 0;
outgoldmap: outgoldmap:
cls(); cls();
(void) unconstrain_map(); (void) unconstrain_map();
@@ -993,7 +993,7 @@ struct obj *sobj; /* null if crystal ball, *scroll if gold detection scroll */
Your("%s itch.", makeplural(body_part(TOE))); Your("%s itch.", makeplural(body_part(TOE)));
return 0; return 0;
outtrapmap: outtrapmap:
cls(); cls();
(void) unconstrain_map(); (void) unconstrain_map();
@@ -1441,6 +1441,8 @@ struct rm *lev;
lev->doormask = newmask; lev->doormask = newmask;
} }
/* find something at one location; it should find all somethings there
since it is used for magical detection rather than physical searching */
STATIC_PTR void STATIC_PTR void
findone(zx, zy, num) findone(zx, zy, num)
int zx, zy; int zx, zy;
@@ -1449,6 +1451,13 @@ genericptr_t num;
register struct trap *ttmp; register struct trap *ttmp;
register struct monst *mtmp; register struct monst *mtmp;
/*
* This used to use if/else-if/else-if/else/end-if but that only
* found the first hidden thing at the location. Two hidden things
* at the same spot is uncommon, but it's possible for an undetected
* monster to be hiding at the location of an unseen trap.
*/
if (levl[zx][zy].typ == SDOOR) { if (levl[zx][zy].typ == SDOOR) {
cvt_sdoor_to_door(&levl[zx][zy]); /* .typ = DOOR */ cvt_sdoor_to_door(&levl[zx][zy]); /* .typ = DOOR */
magic_map_background(zx, zy, 0); magic_map_background(zx, zy, 0);
@@ -1460,19 +1469,25 @@ genericptr_t num;
magic_map_background(zx, zy, 0); magic_map_background(zx, zy, 0);
newsym(zx, zy); newsym(zx, zy);
(*(int *) num)++; (*(int *) num)++;
} else if ((ttmp = t_at(zx, zy)) != 0) { }
if (!ttmp->tseen && ttmp->ttyp != STATUE_TRAP) {
ttmp->tseen = 1; if ((ttmp = t_at(zx, zy)) != 0 && !ttmp->tseen
newsym(zx, zy); /* [shouldn't successful 'find' reveal and activate statue traps?] */
(*(int *) num)++; && ttmp->ttyp != STATUE_TRAP) {
} ttmp->tseen = 1;
} else if ((mtmp = m_at(zx, zy)) != 0) { newsym(zx, zy);
(*(int *) num)++;
}
if ((mtmp = m_at(zx, zy)) != 0
/* brings hidden monster out of hiding even if already sensed */
&& (!canspotmon(mtmp) || mtmp->mundetected || M_AP_TYPE(mtmp))) {
if (M_AP_TYPE(mtmp)) { if (M_AP_TYPE(mtmp)) {
seemimic(mtmp); seemimic(mtmp);
(*(int *) num)++; (*(int *) num)++;
} } else if (mtmp->mundetected && (is_hider(mtmp->data)
if (mtmp->mundetected || hides_under(mtmp->data)
&& (is_hider(mtmp->data) || mtmp->data->mlet == S_EEL)) { || mtmp->data->mlet == S_EEL)) {
mtmp->mundetected = 0; mtmp->mundetected = 0;
newsym(zx, zy); newsym(zx, zy);
(*(int *) num)++; (*(int *) num)++;
@@ -1600,8 +1615,7 @@ struct trap *trap;
/* The "Hallucination ||" is to preserve 3.6.1 behaviour, but this /* The "Hallucination ||" is to preserve 3.6.1 behaviour, but this
behaviour might need a rework in the hallucination case behaviour might need a rework in the hallucination case
(e.g. to not prompt if any trap glyph appears on the (e.g. to not prompt if any trap glyph appears on the square). */
square). */
if (Hallucination || if (Hallucination ||
levl[trap->tx][trap->ty].glyph != levl[trap->tx][trap->ty].glyph !=
trap_to_glyph(trap, rn2_on_display_rng)) { trap_to_glyph(trap, rn2_on_display_rng)) {
@@ -1634,18 +1648,22 @@ boolean via_warning;
if (M_AP_TYPE(mtmp)) { if (M_AP_TYPE(mtmp)) {
seemimic(mtmp); seemimic(mtmp);
found_something = TRUE; found_something = TRUE;
} else if (!canspotmon(mtmp)) { } else {
if (mtmp->mundetected /* this used to only be executed if a !canspotmon() test passed
&& (is_hider(mtmp->data) || mtmp->data->mlet == S_EEL)) { but that failed to bring sensed monsters out of hiding */
found_something = !canspotmon(mtmp);
if (mtmp->mundetected && (is_hider(mtmp->data)
|| hides_under(mtmp->data)
|| mtmp->data->mlet == S_EEL)) {
if (via_warning) { if (via_warning) {
Your("warning senses cause you to take a second %s.", Your("warning senses cause you to take a second %s.",
Blind ? "to check nearby" : "look close by"); Blind ? "to check nearby" : "look close by");
display_nhwindow(WIN_MESSAGE, FALSE); /* flush messages */ display_nhwindow(WIN_MESSAGE, FALSE); /* flush messages */
} }
mtmp->mundetected = 0; mtmp->mundetected = 0;
found_something = TRUE;
} }
newsym(x, y); newsym(x, y);
found_something = TRUE;
} }
if (found_something) { if (found_something) {
+4 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 pager.c $NHDT-Date: 1558045586 2019/05/16 22:26:26 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.153 $ */ /* NetHack 3.6 pager.c $NHDT-Date: 1562632673 2019/07/09 00:37:53 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.154 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */ /*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -297,9 +297,11 @@ int x, y;
int tt = t ? t->ttyp : NO_TRAP; int tt = t ? t->ttyp : NO_TRAP;
/* newsym lets you know of the trap, so mention it here */ /* newsym lets you know of the trap, so mention it here */
if (tt == BEAR_TRAP || is_pit(tt) || tt == WEB) if (tt == BEAR_TRAP || is_pit(tt) || tt == WEB) {
Sprintf(eos(buf), ", trapped in %s", Sprintf(eos(buf), ", trapped in %s",
an(defsyms[trap_to_defsym(tt)].explanation)); an(defsyms[trap_to_defsym(tt)].explanation));
t->tseen = 1;
}
} }
/* we know the hero sees a monster at this location, but if it's shown /* we know the hero sees a monster at this location, but if it's shown