grammar bit: fatal cockatrice corpse theft (trunk only)
From a bug report, stealing a cockatrice corpse from a monster while polymorphed into a nymph and not wearing any gloves, the cause of death ended up being "petrified by cockatrice corpse". It would also have said the same thing if a stack of multiple corpses was involved. This fixes both cases, and also hypothetical unique monsters with petrifying touch. (Last bit tested by temporarily adding Medusa to touch_petrifies().)
This commit is contained in:
@@ -99,6 +99,7 @@ assigning an artifact name is rejected on objects with similar description to
|
|||||||
adjust feedback for gas spore explosion when hallucinating
|
adjust feedback for gas spore explosion when hallucinating
|
||||||
traps detected by scroll or crystal ball overlooked carried or buried chests
|
traps detected by scroll or crystal ball overlooked carried or buried chests
|
||||||
can't wish for a trapped box/chest/tin by specifying "poisoned"
|
can't wish for a trapped box/chest/tin by specifying "poisoned"
|
||||||
|
grammar bit if killed by stealing a cockatrice corpse from a monster
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
+34
-9
@@ -1,4 +1,4 @@
|
|||||||
/* SCCS Id: @(#)uhitm.c 3.5 2005/09/27 */
|
/* SCCS Id: @(#)uhitm.c 3.5 2005/11/30 */
|
||||||
/* 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. */
|
||||||
|
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
STATIC_DCL boolean FDECL(known_hitum, (struct monst *,struct obj *,
|
STATIC_DCL boolean FDECL(known_hitum, (struct monst *,struct obj *,
|
||||||
int *,int,int,struct attack *));
|
int *,int,int,struct attack *));
|
||||||
|
STATIC_DCL boolean FDECL(theft_petrifies, (struct obj *));
|
||||||
STATIC_DCL void FDECL(steal_it, (struct monst *, struct attack *));
|
STATIC_DCL void FDECL(steal_it, (struct monst *, struct attack *));
|
||||||
STATIC_DCL boolean FDECL(hitum, (struct monst *,struct attack *));
|
STATIC_DCL boolean FDECL(hitum, (struct monst *,struct attack *));
|
||||||
STATIC_DCL boolean FDECL(hmon_hitmon, (struct monst *,struct obj *,int));
|
STATIC_DCL boolean FDECL(hmon_hitmon, (struct monst *,struct obj *,int));
|
||||||
@@ -1210,6 +1211,36 @@ demonpet()
|
|||||||
exercise(A_WIS, TRUE);
|
exercise(A_WIS, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_OVL boolean
|
||||||
|
theft_petrifies(otmp)
|
||||||
|
struct obj *otmp;
|
||||||
|
{
|
||||||
|
const char *fmt;
|
||||||
|
char *p, cbuf[BUFSZ], kbuf[BUFSZ];
|
||||||
|
|
||||||
|
if (uarmg || otmp->otyp != CORPSE ||
|
||||||
|
!touch_petrifies(&mons[otmp->corpsenm])) return FALSE;
|
||||||
|
|
||||||
|
/* stealing this corpse is fatal... */
|
||||||
|
Strcpy(cbuf, cxname(otmp)); /* "cockatrice corpse" */
|
||||||
|
fmt = "a stolen %s";
|
||||||
|
if (otmp->quan > 1L) {
|
||||||
|
/* stack of multiple cockatrice corpses; no article for plural */
|
||||||
|
fmt += 2; /* skip "a ", leaving "stolen %s" */
|
||||||
|
} else if ((p = strstri(cbuf, "'s corpse")) != 0 ||
|
||||||
|
(p = strstri(cbuf, "s' corpse")) != 0) {
|
||||||
|
/* in case a unique monster with petrifying touch and
|
||||||
|
a personal name ever gets introduced: we want to use
|
||||||
|
"Foo's stolen corpse" instead of "a stolen Foo's corpse" */
|
||||||
|
*(p + 2) = '\0'; /* chop " corpse" off of cbuf */
|
||||||
|
fmt = "%s stolen corpse";
|
||||||
|
}
|
||||||
|
Sprintf(kbuf, fmt, cbuf);
|
||||||
|
instapetrify(kbuf);
|
||||||
|
/* apparently wasn't fatal after all... */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Player uses theft attack against monster.
|
* Player uses theft attack against monster.
|
||||||
*
|
*
|
||||||
@@ -1280,14 +1311,8 @@ struct attack *mattk;
|
|||||||
otmp = hold_another_object(otmp, "You snatched but dropped %s.",
|
otmp = hold_another_object(otmp, "You snatched but dropped %s.",
|
||||||
doname(otmp), "You steal: ");
|
doname(otmp), "You steal: ");
|
||||||
if (otmp->where != OBJ_INVENT) continue;
|
if (otmp->where != OBJ_INVENT) continue;
|
||||||
if (otmp->otyp == CORPSE &&
|
if (theft_petrifies(otmp))
|
||||||
touch_petrifies(&mons[otmp->corpsenm]) && !uarmg) {
|
break; /* stop thieving even though hero survived */
|
||||||
char kbuf[BUFSZ];
|
|
||||||
|
|
||||||
Sprintf(kbuf, "stolen %s corpse", mons[otmp->corpsenm].mname);
|
|
||||||
instapetrify(kbuf);
|
|
||||||
break; /* stop the theft even if hero survives */
|
|
||||||
}
|
|
||||||
/* more take-away handling, after theft message */
|
/* more take-away handling, after theft message */
|
||||||
if (unwornmask & W_WEP) { /* stole wielded weapon */
|
if (unwornmask & W_WEP) { /* stole wielded weapon */
|
||||||
possibly_unwield(mdef, FALSE);
|
possibly_unwield(mdef, FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user