diff --git a/doc/fixes34.4 b/doc/fixes34.4 index b35687bcc..c3fd2bc2b 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -307,6 +307,8 @@ non-unicorn horn healing magic which cures sickness now also cures vomiting vomiting/nauseated state is included in enlightenment feedback vomiting countdown actually triggered the final vomit code twice rats aren't capable of vomiting +fireproof, non-rustable weapon would be revealed as fireproof by hitting a + rust-causing target; ditto for fixed crysknife Platform- and/or Interface-Specific Fixes diff --git a/src/wield.c b/src/wield.c index 1c4bd3c54..3a4883e0a 100644 --- a/src/wield.c +++ b/src/wield.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)wield.c 3.5 2006/07/14 */ +/* SCCS Id: @(#)wield.c 3.5 2007/02/07 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -622,7 +622,7 @@ boolean for_dip; { int erosion; struct monst *victim; - boolean vismon, visobj, chill; + boolean vismon, visobj, chill, erodible; boolean ret = FALSE; boolean already_affected = FALSE; @@ -638,6 +638,7 @@ boolean for_dip; if (already_affected) ret = TRUE; } erosion = acid_dmg ? target->oeroded2 : target->oeroded; + erodible = acid_dmg ? is_corrodeable(target) : is_rustprone(target); if (target->greased) { grease_protect(target,(char *)0,victim); @@ -677,20 +678,24 @@ boolean for_dip; Yobjnam2(target, chill ? "freeze" : "boil")); } /* no damage to object */ - } else if (target->oerodeproof || - (acid_dmg ? !is_corrodeable(target) : !is_rustprone(target))) { - if (flags.verbose || !(target->oerodeproof && target->rknown)) { - if (((victim == &youmonst) || vismon) && !for_dip) + } else if (target->oerodeproof || !erodible) { + /* no message if dipping or not carried */ + if (for_dip) { + /* assumes that for_dip implies player action */ + if (!Blind) target->rknown = 0; + } else if (victim == &youmonst || vismon) { + if (flags.verbose || (erodible && !target->rknown)) pline("%s not %s.", Yobjnam2(target, "are"), already_affected ? "harmed" : "affected"); - /* no message if not carried or dipping */ + if (erodible) target->rknown = 1; } - if (target->oerodeproof) target->rknown = !for_dip; } else if (erosion < MAX_ERODE) { - if ((victim == &youmonst) || vismon || visobj) + if (victim == &youmonst || vismon || visobj) { pline("%s%s!", Yobjnam2(target, acid_dmg ? "corrode" : "rust"), erosion+1 == MAX_ERODE ? " completely" : erosion ? " further" : ""); + target->rknown = 1; /* it's obviously not erode-proof */ + } if (acid_dmg) target->oeroded2++; else