Sunsword vs shades, take II (trunk only)

From the newsgroup:  Sunsword is ineffective against shades.  It
gets a special bonus of double damage vs undead, but since it's not made
of silver it was only doing 1 point of damage against shades.  Make the
bonus-vs-undead attribute override the silver-required criterion.  (No
comparable handling for flimsy weapons against thick-skinned critters
this time.)
This commit is contained in:
nethack.rankin
2007-05-10 03:03:46 +00:00
parent 14b0060e42
commit 174182f0e4
5 changed files with 26 additions and 4 deletions

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)artifact.c 3.5 2007/03/05 */
/* SCCS Id: @(#)artifact.c 3.5 2007/05/09 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -275,6 +275,26 @@ struct obj *obj;
return FALSE;
}
/* decide whether this obj is effective when attacking against shades;
does not consider the bonus for blessed objects versus undead */
boolean
shade_glare(obj)
struct obj *obj;
{
const struct artifact *arti;
/* any silver object is effective */
if (objects[obj->otyp].oc_material == SILVER) return TRUE;
/* non-silver artifacts with bonus against undead also are effective */
arti = get_artifact(obj);
if (arti && (arti->spfx & SPFX_DFLAG2) && arti->mtype == M2_UNDEAD)
return TRUE;
/* [if there was anything with special bonus against noncorporeals,
it would be effective too] */
/* otherwise, harmless to shades */
return FALSE;
}
boolean
restrict_name(otmp, name) /* returns 1 if name is restricted for otmp->otyp */
register struct obj *otmp;

View File

@@ -611,7 +611,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
(is_ammo(obj) && (thrown != HMON_THROWN ||
!ammo_and_launcher(obj, uwep)))) {
/* then do only 1-2 points of damage */
if (mdat == &mons[PM_SHADE] && obj->otyp != SILVER_ARROW)
if (mdat == &mons[PM_SHADE] && !shade_glare(obj))
tmp = 0;
else
tmp = rnd(2);

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)weapon.c 3.5 2007/02/09 */
/* SCCS Id: @(#)weapon.c 3.5 2007/05/09 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -294,7 +294,7 @@ struct monst *mon;
if (objects[otyp].oc_material <= LEATHER && thick_skinned(ptr))
/* thick skinned/scaled creatures don't feel it */
tmp = 0;
if (ptr == &mons[PM_SHADE] && objects[otyp].oc_material != SILVER)
if (ptr == &mons[PM_SHADE] && !shade_glare(otmp))
tmp = 0;
/* "very heavy iron ball"; weight increase is in increments of 160 */