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:
@@ -227,6 +227,7 @@ explosion while engulfed only affects engulfer and hero, not adjacent monsters
|
||||
eliminate case-sensitivity when converting words from singular to plural and
|
||||
vice versa, so some failing wishes like "Gauntlets of Power" now work
|
||||
breath attack directed at self by poly'd hero always hits
|
||||
override non-silver vs shades for artifacts which deal extra damage to undead
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
@@ -64,6 +64,7 @@ E boolean FDECL(arti_immune, (struct obj *,int));
|
||||
E boolean FDECL(spec_ability, (struct obj *,unsigned long));
|
||||
E boolean FDECL(confers_luck, (struct obj *));
|
||||
E boolean FDECL(arti_reflects, (struct obj *));
|
||||
E boolean FDECL(shade_glare, (struct obj *));
|
||||
E boolean FDECL(restrict_name, (struct obj *,const char *));
|
||||
E boolean FDECL(defends, (int,struct obj *));
|
||||
E boolean FDECL(protects, (int,struct obj *));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user