shapeshifting on rogue level

Limit vampire shapeshifting on rogue level to vampire bats (only
choice represented by uppercase letter) and have other shapeshifting
try for uppercase.  The latter isn't rigorous because shapeshifters
(chameleon=':', doppelganger='@', sandestin='&') aren't uppercase
themselves, so won't be created there under ordinary circumstances.
It applies to the "summon nasties" monster spell and post-invocation/
post-Wizard's-death harassment effect too.
This commit is contained in:
PatR
2015-06-04 15:31:25 -07:00
parent 2de17b059c
commit def2549592
3 changed files with 47 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 makemon.c $NHDT-Date: 1432685497 2015/05/27 00:11:37 $ $NHDT-Branch: master $:$NHDT-Revision: 1.89 $ */
/* NetHack 3.6 makemon.c $NHDT-Date: 1433457069 2015/06/04 22:31:09 $ $NHDT-Branch: master $:$NHDT-Revision: 1.92 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1134,23 +1134,18 @@ register int mmflags;
mtmp->cham = NON_PM; /* default is "not a shapechanger" */
if ((mcham = pm_to_cham(mndx)) != NON_PM) {
/* this is a shapechanger after all */
if (Protection_from_shape_changers) {
if (Protection_from_shape_changers
|| mtmp->cham == PM_VLAD_THE_IMPALER) {
; /* stuck in its natural form (NON_PM) */
} else {
/* Note: shapechanger's initial form used to be
chosen with rndmonst(), yielding a monster
chosen here with rndmonst(), yielding a monster
which was approriate to the level's difficulty
but ignored the changer's usual type selection
so would be inppropriate for vampshifters. */
mtmp->cham = mcham; /* remember base form */
if (mcham != PM_VLAD_THE_IMPALER &&
/* select initial shape */
(mcham = select_newcham_form(mtmp)) != NON_PM) {
/* take on initial shape; if successful,
avoid giving that shape's usual inventory */
if (newcham(mtmp, &mons[mcham], FALSE, FALSE))
allow_minvent = FALSE;
}
so would be inppropriate for vampshifters.
Let newcham() pick the shape. */
if (newcham(mtmp, (struct permonst *) 0, FALSE, FALSE))
allow_minvent = FALSE;
}
} else if (mndx == PM_WIZARD_OF_YENDOR) {
mtmp->iswiz = TRUE;