diff --git a/doc/fixes34.0 b/doc/fixes34.0 index 6c1477985..fc0913b8c 100644 --- a/doc/fixes34.0 +++ b/doc/fixes34.0 @@ -437,6 +437,8 @@ throwing an artifact upwards will trigger artifact hit effects when it falls being hit by Fire Brand stops the turning-into-slime process monsters hitting other monsters can split puddings with weapons be consistent with checking for iron weapons when splitting puddings +prevent corpses of undead creatures just killed by undead turning from being + instantly revived by the same undead turning attack Platform- and/or Interface-Specific Fixes diff --git a/src/mon.c b/src/mon.c index 92163cda0..0664b7cab 100644 --- a/src/mon.c +++ b/src/mon.c @@ -238,6 +238,10 @@ register struct monst *mtmp; } /* All special cases should precede the G_NOCORPSE check */ + /* if polymorph or undead turning has killed this monster, + prevent the same attack beam from hitting its corpse */ + if (flags.bypasses) bypass_obj(obj); + if (mtmp->mnamelth) obj = oname(obj, NAME(mtmp)); diff --git a/src/zap.c b/src/zap.c index 19242142d..aad71a8e3 100644 --- a/src/zap.c +++ b/src/zap.c @@ -166,8 +166,10 @@ struct obj *otmp; if(dbldam) dmg *= 2; if (otyp == SPE_TURN_UNDEAD) dmg += spell_damage_bonus(); - if(!resist(mtmp, otmp->oclass, dmg, NOTELL)) - monflee(mtmp, 0, FALSE, TRUE); + flags.bypasses = TRUE; /* for make_corpse() */ + if (!resist(mtmp, otmp->oclass, dmg, NOTELL)) { + if (mtmp->mhp > 0) monflee(mtmp, 0, FALSE, TRUE); + } } break; case WAN_POLYMORPH: @@ -186,12 +188,14 @@ struct obj *otmp; pline("%s shudders!", Monnam(mtmp)); makeknown(otyp); } + /* flags.bypasses = TRUE; ## for make_corpse() */ /* no corpse after system shock */ xkilled(mtmp, 3); - } - else if (newcham(mtmp, (struct permonst *)0, (otyp != POT_POLYMORPH)) ) + } else if (newcham(mtmp, (struct permonst *)0, + (otyp != POT_POLYMORPH))) { if (!Hallucination && canspotmon(mtmp)) makeknown(otyp); + } } break; case WAN_CANCELLATION: @@ -1435,6 +1439,10 @@ struct obj *obj, *otmp; * consistent with items that remain in the * monster's inventory. They are not polymorphed * either. + * UNDEAD_TURNING - When an undead creature gets killed via + * undead turning, prevent its corpse from being + * immediately revived by the same effect. + * * The bypass bit on all objects is reset each turn, whenever * flags.bypasses is set. *