shattering monster's weapon stack
Something I encountered while playing slash'em a while back, but
relevant to nethack: "Its orcish spears shatter from the force of your
blow!". I was using a two-handed weapon (at skilled or expert level) to
fight an invisible monster which was wielding a stack of multiple spears
(slash'em gives them out in groups of 3 for monsters' starting inventory).
After killing it, I found 2 orcish spears along with an invisible corpse
of somebody-or-other the Kobold King. The message suggested that the
whole spear stack had been destroyed (and the weapon shattering code in
hmon_hitmon() clearly expects that to be the case), but only one of them
had actually gotten used up.
I can't recall whether "shatter" was actually given as singular or
plural at the time; nethack handles that aspect correctly. Only object
destruction needed tweaking.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)mthrowu.c 3.5 2005/06/21 */
|
||||
/* SCCS Id: @(#)mthrowu.c 3.5 2006/03/29 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -445,23 +445,32 @@ struct obj *obj; /* missile (or stack providing it) */
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove an item from the monster's inventory and destroy it. */
|
||||
/* remove an entire item from a monster's inventory; destroy that item */
|
||||
void
|
||||
m_useupall(mon, obj)
|
||||
struct monst *mon;
|
||||
struct obj *obj;
|
||||
{
|
||||
obj_extract_self(obj);
|
||||
possibly_unwield(mon, FALSE);
|
||||
if (obj->owornmask) {
|
||||
mon->misc_worn_check &= ~obj->owornmask;
|
||||
update_mon_intrinsics(mon, obj, FALSE, FALSE);
|
||||
}
|
||||
obfree(obj, (struct obj*) 0);
|
||||
}
|
||||
|
||||
/* remove one instance of an item from a monster's inventory */
|
||||
void
|
||||
m_useup(mon, obj)
|
||||
struct monst *mon;
|
||||
struct obj *obj;
|
||||
{
|
||||
if (obj->quan > 1L) {
|
||||
obj->quan--;
|
||||
obj->owt = weight(obj);
|
||||
obj->quan--;
|
||||
obj->owt = weight(obj);
|
||||
} else {
|
||||
obj_extract_self(obj);
|
||||
possibly_unwield(mon, FALSE);
|
||||
if (obj->owornmask) {
|
||||
mon->misc_worn_check &= ~obj->owornmask;
|
||||
update_mon_intrinsics(mon, obj, FALSE, FALSE);
|
||||
}
|
||||
obfree(obj, (struct obj*) 0);
|
||||
m_useupall(mon, obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)uhitm.c 3.5 2005/11/30 */
|
||||
/* SCCS Id: @(#)uhitm.c 3.5 2006/03/29 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -662,7 +662,7 @@ int thrown;
|
||||
mon->weapon_check = NEED_WEAPON;
|
||||
pline("%s from the force of your blow!",
|
||||
Yobjnam2(monwep, "shatter"));
|
||||
m_useup(mon, monwep);
|
||||
m_useupall(mon, monwep);
|
||||
/* If someone just shattered MY weapon, I'd flee! */
|
||||
if (rn2(4)) {
|
||||
monflee(mon, d(2,3), TRUE, TRUE);
|
||||
|
||||
Reference in New Issue
Block a user