From f838967c0445f4aa944d91b62ad3e9d6236b1a49 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 24 Apr 2019 16:59:44 -0700 Subject: [PATCH] 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++;