From f441696908350cc42a7c1f15ee56e16ac1743f2b Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 24 Apr 2019 14:02:09 -0700 Subject: [PATCH 1/2] fix #H8619 - hallucination vs vampire transform |The seemingly dead vampire bat rises as a vampire. was overriding hallucination when describing both old and new forms. In 3.6.0 it only overrode the dying shape (explicitly so, presumeably because the feature was brand new) and honored hallucination for the revived shape. The 3.6.1 fix to prevent non-hallucinating: 'The seemingly dead Foo rises as Foo.' for a named vampire unintentionally overrode hallucination for the revived shape. Change it to honor hallucination for both before and after monsters |The seemingly dead grid bug rises as a microscopic space fleet. --- doc/fixes36.2 | 4 +++- src/mon.c | 20 +++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 88a9c2a68..b06d0da42 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.307 $ $NHDT-Date: 1555801218 2019/04/20 23:00:18 $ +$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.308 $ $NHDT-Date: 1556139724 2019/04/24 21:02:04 $ This fixes36.2 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.1 in April 2018. Please note, however, @@ -416,6 +416,8 @@ a quantum mechanic hit that teleported the target could also kill it at the fatal unless the teleport is negated by cancellation (magic or armor) if a mimic concealed itself as a corpse, it could pick a monster type which never leaves a corpse +message given when shape-shifted vampire cheats death by reverting to its + original form ignored hallucination when describing old and new forms Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository diff --git a/src/mon.c b/src/mon.c index 7dc5f7c48..2882a226c 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mon.c $NHDT-Date: 1555552629 2019/04/18 01:57:09 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.282 $ */ +/* NetHack 3.6 mon.c $NHDT-Date: 1556139724 2019/04/24 21:02:04 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.284 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Derek S. Ray, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1935,9 +1935,7 @@ register struct monst *mtmp; Sprintf(buf, "%s suddenly %s and rises as %%s!", x_monnam(mtmp, ARTICLE_THE, spec_mon ? (char *) 0 : "seemingly dead", - SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION - | SUPPRESS_INVISIBLE | SUPPRESS_IT, - FALSE), + (SUPPRESS_INVISIBLE | SUPPRESS_IT), FALSE), spec_death ? "reconstitutes" : "transforms"); mtmp->mcanmove = 1; mtmp->mfrozen = 0; @@ -1965,13 +1963,13 @@ register struct monst *mtmp; else mtmp->cham = mndx; if (canspotmon(mtmp)) { - const char *whom = mtmp->data->mname; - - /* was using a_monnam(mtmp) but that's weird if mtmp is named: - "Dracula suddenly transforms and rises as Dracula" */ - if (!type_is_pname(mtmp->data)) - whom = an(whom); - pline(upstart(buf), whom); + /* 3.6.0 used a_monnam(mtmp); that was weird if mtmp was + named: "Dracula suddenly transforms and rises as Dracula"; + 3.6.1 used mtmp->data->mname; that ignored hallucination */ + pline(upstart(buf), + x_monnam(mtmp, ARTICLE_A, (char *) 0, + (SUPPRESS_NAME | SUPPRESS_IT + | SUPPRESS_INVISIBLE), FALSE)); vamp_rise_msg = TRUE; } newsym(x, y); From f838967c0445f4aa944d91b62ad3e9d6236b1a49 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 24 Apr 2019 16:59:44 -0700 Subject: [PATCH 2/2] vampshifting Vlad Vlad keeps his own form when carrying the Candelabrum, but if you manage to get that away from him he should behave like other vampires. He wasn't though; a high level wizard casting polymorph on him would change him into an arbitrary monster rather than into a wolf/bat/cloud that revives as Vlad when killed. --- doc/fixes36.2 | 3 ++- src/makemon.c | 27 ++++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index b06d0da42..6679ce9b6 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.308 $ $NHDT-Date: 1556139724 2019/04/24 21:02:04 $ +$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.309 $ $NHDT-Date: 1556150377 2019/04/24 23:59:37 $ This fixes36.2 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.1 in April 2018. Please note, however, @@ -418,6 +418,7 @@ if a mimic concealed itself as a corpse, it could pick a monster type which never leaves a corpse message given when shape-shifted vampire cheats death by reverting to its original form ignored hallucination when describing old and new forms +Vlad wasn't set up as a vampshifter properly Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository diff --git a/src/makemon.c b/src/makemon.c index d93b98354..6b750f2f6 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 makemon.c $NHDT-Date: 1555801218 2019/04/20 23:00:18 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.133 $ */ +/* NetHack 3.6 makemon.c $NHDT-Date: 1556150377 2019/04/24 23:59:37 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.134 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1282,22 +1282,19 @@ int mmflags; if (mndx == PM_VLAD_THE_IMPALER) mitem = CANDELABRUM_OF_INVOCATION; mtmp->cham = NON_PM; /* default is "not a shapechanger" */ - if ((mcham = pm_to_cham(mndx)) != NON_PM) { + if (!Protection_from_shape_changers + && (mcham = pm_to_cham(mndx)) != NON_PM) { /* this is a shapechanger after all */ - if (Protection_from_shape_changers - || mndx == PM_VLAD_THE_IMPALER) { - ; /* stuck in its natural form (NON_PM) */ - } else { - mtmp->cham = mcham; - /* Note: shapechanger's initial form used to be - chosen here with rndmonst(), yielding a monster - which was appropriate to the level's difficulty - but ignored the changer's usual type selection - so would be inappropriate for vampshifters. + mtmp->cham = mcham; + /* Vlad stays in his normal shape so he can carry the Candelabrum */ + if (mndx != PM_VLAD_THE_IMPALER + /* Note: shapechanger's initial form used to be chosen here + with rndmonst(), yielding a monster which was appropriate + to the level's difficulty but ignoring the changer's usual + type selection, so was inappropriate for vampshifters. Let newcham() pick the shape. */ - if (newcham(mtmp, (struct permonst *) 0, FALSE, FALSE)) - allow_minvent = FALSE; - } + && newcham(mtmp, (struct permonst *) 0, FALSE, FALSE)) + allow_minvent = FALSE; } else if (mndx == PM_WIZARD_OF_YENDOR) { mtmp->iswiz = TRUE; context.no_of_wizards++;