From 0d9801e17f1c96a667baaa636e6224726e7e1679 Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 17 Mar 2023 16:21:43 -0700 Subject: [PATCH] vampshifting via polymorph When a vampire that's already in bat or fog form gets polymorphed, sometimes take on base vampire form instead of always toggling to fog or bat. --- src/mon.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mon.c b/src/mon.c index 26f4d6031..68565164a 100644 --- a/src/mon.c +++ b/src/mon.c @@ -4325,7 +4325,7 @@ decide_to_shapeshift(struct monst *mon, int shiftflags) } static int -pickvampshape(struct monst* mon) +pickvampshape(struct monst *mon) { int mndx = mon->cham, wolfchance = 10; /* avoid picking monsters with lowercase display symbols ('d' for wolf @@ -4350,7 +4350,11 @@ pickvampshape(struct monst* mon) break; } - if (gm.mvitals[mndx].mvflags & G_GENOD) + /* return to base form if chosen poly target has been genocided + or randomly if already in an alternate form (to prevent always + switching back and forth between bat and fog) */ + if ((gm.mvitals[mndx].mvflags & G_GENOD) != 0 + || (mon->data != &mons[mon->cham] && !rn2(4))) return mon->cham; return mndx;