one statue from single vampire via cockatrice corpse
Changes to be committed: modified: doc/fixes36.1 modified: include/extern.h modified: src/mon.c Fixes H4148 (bz246) and H4150 (bz248) comments: I wielded a c-corpse against a shapeshifting vampire bat (checked with a stethoscope, it said "shapeshifter".) The bat turned to stone and spawned a vampire. I hit the vampire and it also turned to stone, so I had two statues from one monster (vampire bat and vampire.) Not sure if this is a bug or a feature... comments: Engulfed by a fog cloud that was actually a Vampire, and got the message: "You break out of the vampire!"
This commit is contained in:
@@ -67,6 +67,7 @@ tone down energy vortex's drain energy attack
|
|||||||
fix message typo if tame mind flayer dies trying to eat Medusa's brains
|
fix message typo if tame mind flayer dies trying to eat Medusa's brains
|
||||||
use alternate rejection message if attempting to name an unnameable monster
|
use alternate rejection message if attempting to name an unnameable monster
|
||||||
with the name it already has
|
with the name it already has
|
||||||
|
cockatrice corpse no longer leaves multiple statues for shape-shifted vampire
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 extern.h $NHDT-Date: 1450432755 2015/12/18 09:59:15 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.521 $ */
|
/* NetHack 3.6 extern.h $NHDT-Date: 1451174855 2015/12/27 00:07:35 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.526 $ */
|
||||||
/* Copyright (c) Steve Creps, 1988. */
|
/* Copyright (c) Steve Creps, 1988. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -1351,6 +1351,7 @@ E void FDECL(golemeffects, (struct monst *, int, int));
|
|||||||
E boolean FDECL(angry_guards, (BOOLEAN_P));
|
E boolean FDECL(angry_guards, (BOOLEAN_P));
|
||||||
E void NDECL(pacify_guards);
|
E void NDECL(pacify_guards);
|
||||||
E void FDECL(decide_to_shapeshift, (struct monst *, int));
|
E void FDECL(decide_to_shapeshift, (struct monst *, int));
|
||||||
|
E boolean FDECL(vamp_stone, (struct monst *));
|
||||||
|
|
||||||
/* ### mondata.c ### */
|
/* ### mondata.c ### */
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 mon.c $NHDT-Date: 1449908726 2015/12/12 08:25:26 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.200 $ */
|
/* NetHack 3.6 mon.c $NHDT-Date: 1451174868 2015/12/27 00:07:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.201 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -2311,6 +2311,69 @@ struct monst *mtmp;
|
|||||||
impossible("Can't polystone %s!", a_monnam(mtmp));
|
impossible("Can't polystone %s!", a_monnam(mtmp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean
|
||||||
|
vamp_stone(mtmp)
|
||||||
|
struct monst *mtmp;
|
||||||
|
{
|
||||||
|
if (is_vampshifter(mtmp)) {
|
||||||
|
int mndx = mtmp->cham;
|
||||||
|
int x = mtmp->mx, y = mtmp->my;
|
||||||
|
|
||||||
|
/* this only happens if shapeshifted */
|
||||||
|
if (mndx >= LOW_PM && mndx != monsndx(mtmp->data)
|
||||||
|
&& !(mvitals[mndx].mvflags & G_GENOD)) {
|
||||||
|
char buf[BUFSZ];
|
||||||
|
boolean in_door = (amorphous(mtmp->data)
|
||||||
|
&& closed_door(mtmp->mx, mtmp->my)),
|
||||||
|
/* alternate message phrasing for some monster types */
|
||||||
|
spec_mon = (nonliving(mtmp->data)
|
||||||
|
|| noncorporeal(mtmp->data)
|
||||||
|
|| amorphous(mtmp->data));
|
||||||
|
|
||||||
|
/* construct a format string before transformation */
|
||||||
|
Sprintf(buf, "The lapidifying %s %s %s",
|
||||||
|
x_monnam(mtmp, ARTICLE_NONE, (char *) 0,
|
||||||
|
SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION
|
||||||
|
| SUPPRESS_INVISIBLE | SUPPRESS_IT,
|
||||||
|
FALSE),
|
||||||
|
amorphous(mtmp->data) ? "coalesces on the" :
|
||||||
|
is_flyer(mtmp->data) ? "drops to the" : "writhes on the",
|
||||||
|
surface(x,y));
|
||||||
|
mtmp->mcanmove = 1;
|
||||||
|
mtmp->mfrozen = 0;
|
||||||
|
if (mtmp->mhpmax <= 0)
|
||||||
|
mtmp->mhpmax = 10;
|
||||||
|
mtmp->mhp = mtmp->mhpmax;
|
||||||
|
/* this can happen if previously a fog cloud */
|
||||||
|
if (u.uswallow && (mtmp == u.ustuck))
|
||||||
|
expels(mtmp, mtmp->data, FALSE);
|
||||||
|
if (in_door) {
|
||||||
|
coord new_xy;
|
||||||
|
|
||||||
|
if (enexto(&new_xy, mtmp->mx, mtmp->my, &mons[mndx])) {
|
||||||
|
rloc_to(mtmp, new_xy.x, new_xy.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (canspotmon(mtmp)) {
|
||||||
|
pline("%s!", buf);
|
||||||
|
display_nhwindow(WIN_MESSAGE, FALSE);
|
||||||
|
}
|
||||||
|
newcham(mtmp, &mons[mndx], FALSE, FALSE);
|
||||||
|
if (mtmp->data == &mons[mndx])
|
||||||
|
mtmp->cham = NON_PM;
|
||||||
|
else
|
||||||
|
mtmp->cham = mndx;
|
||||||
|
if (canspotmon(mtmp)) {
|
||||||
|
pline("%s rises from the %s with renewed agility!",
|
||||||
|
Amonnam(mtmp), surface(mtmp->mx, mtmp->my));
|
||||||
|
}
|
||||||
|
newsym(mtmp->mx, mtmp->my);
|
||||||
|
return FALSE; /* didn't petrify */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* make monster mtmp next to you (if possible);
|
/* make monster mtmp next to you (if possible);
|
||||||
might place monst on far side of a wall or boulder */
|
might place monst on far side of a wall or boulder */
|
||||||
void
|
void
|
||||||
@@ -3184,8 +3247,17 @@ boolean msg; /* "The oldmon turns into a newmon!" */
|
|||||||
/* Does mdat care? */
|
/* Does mdat care? */
|
||||||
if (!noncorporeal(mdat) && !amorphous(mdat)
|
if (!noncorporeal(mdat) && !amorphous(mdat)
|
||||||
&& !is_whirly(mdat) && (mdat != &mons[PM_YELLOW_LIGHT])) {
|
&& !is_whirly(mdat) && (mdat != &mons[PM_YELLOW_LIGHT])) {
|
||||||
You("break out of %s%s!", mon_nam(mtmp),
|
char msgtrail[BUFSZ];
|
||||||
(is_animal(mdat) ? "'s stomach" : ""));
|
|
||||||
|
if (is_vampshifter(mtmp)) {
|
||||||
|
Strcpy(msgtrail, " that had been shapeshifted");
|
||||||
|
} else if (is_animal(mdat)) {
|
||||||
|
Strcpy(msgtrail, "'s stomach");
|
||||||
|
} else {
|
||||||
|
msgtrail[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
You("break out of %s%s!", mon_nam(mtmp), msgtrail);
|
||||||
mtmp->mhp = 1; /* almost dead */
|
mtmp->mhp = 1; /* almost dead */
|
||||||
}
|
}
|
||||||
expels(mtmp, olddata, FALSE);
|
expels(mtmp, olddata, FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user