pull request #936 - feedback for grease wash off

Pull request from entrez:  if a greased item loses its grease after
being affected by water, say so.

Also, the post-water code could access freed memory for an item that
had been destroyed by the water (potion of acid).

Fixes #936
This commit is contained in:
PatR
2022-11-30 12:56:16 -08:00
2 changed files with 8 additions and 9 deletions

View File

@@ -429,12 +429,8 @@ dipfountain(register struct obj *obj)
} else { } else {
er = water_damage(obj, NULL, TRUE); er = water_damage(obj, NULL, TRUE);
if (obj->otyp == POT_ACID if (er == ER_DESTROYED || (er != ER_NOTHING && !rn2(2))) {
&& er != ER_DESTROYED) { /* Acid and water don't mix */ return; /* no further effect */
useup(obj);
return;
} else if (er != ER_NOTHING && !rn2(2)) { /* no further effect */
return;
} }
} }

View File

@@ -4146,10 +4146,13 @@ water_damage(
wet_a_towel(obj, -rnd(7 - obj->spe), TRUE); wet_a_towel(obj, -rnd(7 - obj->spe), TRUE);
return ER_NOTHING; return ER_NOTHING;
} else if (obj->greased) { } else if (obj->greased) {
if (!rn2(2)) if (!rn2(2)) {
obj->greased = 0; obj->greased = 0;
if (carried(obj)) if (carried(obj)) {
update_inventory(); pline_The("grease on %s washes off.", yname(obj));
update_inventory();
}
}
return ER_GREASED; return ER_GREASED;
} else if (Is_container(obj) } else if (Is_container(obj)
&& (!Waterproof_container(obj) || (obj->cursed && !rn2(3)))) { && (!Waterproof_container(obj) || (obj->cursed && !rn2(3)))) {