diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 79796222f..57caece17 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -1,4 +1,4 @@ -NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.413 $ $NHDT-Date: 1609442596 2020/12/31 19:23:16 $ +NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.417 $ $NHDT-Date: 1609617569 2021/01/02 19:59:29 $ General Fixes and Modified Features ----------------------------------- @@ -354,6 +354,12 @@ if a prefix key was bound to some character which ordinarily ran a regular reqmenu (the request-a-menu prefix supported by a handful of non-movement commands) could be bound to some key other than 'm' but it only worked if the new key was also a movement prefix +when telepathically sensed pet ate a mimic corpse and temporarily took on + a different shape, you were told that you sensed it changing into + something but the map continued to show its true shape (telepathy + overrides mimic hiding); give a different message in that case +when a pet ate a mimic corpse and tried to temporarily look like a sink it + ended up looking like a throne (terrain type SINK == symbol S_throne) Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/dogmove.c b/src/dogmove.c index 8d255ec3e..2b012864e 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 dogmove.c $NHDT-Date: 1607374000 2020/12/07 20:46:40 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.94 $ */ +/* NetHack 3.7 dogmove.c $NHDT-Date: 1609617569 2021/01/02 19:59:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.96 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1356,8 +1356,7 @@ static const struct qmchoices { { PM_HOUSECAT, 0, PM_DOG, M_AP_MONSTER }, { PM_LARGE_CAT, 0, PM_LARGE_DOG, M_AP_MONSTER }, { PM_HOUSECAT, 0, PM_GIANT_RAT, M_AP_MONSTER }, - { 0, S_DOG, SINK, - M_AP_FURNITURE }, /* sorry, no fire hydrants in NetHack */ + { 0, S_DOG, S_sink, M_AP_FURNITURE }, /* sorry, no fire hydrants */ { 0, 0, TRIPE_RATION, M_AP_OBJECT }, /* leave this at end */ }; @@ -1378,7 +1377,7 @@ static void quickmimic(mtmp) struct monst *mtmp; { - int idx = 0, trycnt = 5, spotted; + int idx = 0, trycnt = 5, spotted, seeloc; char buf[BUFSZ]; if (Protection_from_shape_changers || !mtmp->meating) @@ -1407,34 +1406,35 @@ struct monst *mtmp; Strcpy(buf, mon_nam(mtmp)); spotted = canspotmon(mtmp); + seeloc = cansee(mtmp->mx, mtmp->my); mtmp->m_ap_type = qm[idx].m_ap_type; mtmp->mappearance = qm[idx].mappearance; - if (spotted || cansee(mtmp->mx, mtmp->my) || canspotmon(mtmp)) { - /* this isn't quite right; if sensing a monster without being - able to see its location, you really shouldn't be told you - sense it becoming furniture or an object that you can't see - (on the other hand, perhaps you're sensing a brief glimpse - of its mind as it changes form) */ + if (spotted || seeloc || canspotmon(mtmp)) { + int prev_glyph = glyph_at(mtmp->mx, mtmp->my); + const char *what = (M_AP_TYPE(mtmp) == M_AP_FURNITURE) + ? defsyms[mtmp->mappearance].explanation + : (M_AP_TYPE(mtmp) == M_AP_OBJECT + && OBJ_DESCR(objects[mtmp->mappearance])) + ? OBJ_DESCR(objects[mtmp->mappearance]) + : (M_AP_TYPE(mtmp) == M_AP_OBJECT + && OBJ_NAME(objects[mtmp->mappearance])) + ? OBJ_NAME(objects[mtmp->mappearance]) + : (M_AP_TYPE(mtmp) == M_AP_MONSTER) + ? pmname(&mons[mtmp->mappearance], + Mgender(mtmp)) + : something; + newsym(mtmp->mx, mtmp->my); - You("%s %s %sappear%s where %s was!", - cansee(mtmp->mx, mtmp->my) ? "see" : "sense that", - (M_AP_TYPE(mtmp) == M_AP_FURNITURE) - ? an(defsyms[mtmp->mappearance].explanation) - : (M_AP_TYPE(mtmp) == M_AP_OBJECT - && OBJ_DESCR(objects[mtmp->mappearance])) - ? an(OBJ_DESCR(objects[mtmp->mappearance])) - : (M_AP_TYPE(mtmp) == M_AP_OBJECT - && OBJ_NAME(objects[mtmp->mappearance])) - ? an(OBJ_NAME(objects[mtmp->mappearance])) - : (M_AP_TYPE(mtmp) == M_AP_MONSTER) - ? an(pmname(&mons[mtmp->mappearance], - Mgender(mtmp))) - : something, - cansee(mtmp->mx, mtmp->my) ? "" : "has ", - cansee(mtmp->mx, mtmp->my) ? "" : "ed", - buf); + if (glyph_at(mtmp->mx, mtmp->my) != prev_glyph) + You("%s %s %s where %s was!", + seeloc ? "see" : "sense that", + (what != something) ? an(what) : what, + seeloc ? "appear" : "has appeared", buf); + else + You("sense that %s feels rather %s-ish.", buf, what); + display_nhwindow(WIN_MAP, TRUE); } }