wet towel enhancements

Flesh out wet towels a bit:
1) wielding a wet towel--or a dry one which becomes wet--won't give a
   "you begin bashing with your wet towel" message when attacking;
2) if a formerly wet towel dries out completely while wielded, *do* give
   "you begin bashing with your towel" on the next attack;
3) successfully hitting with a wet towel no longer always loses wetness;
4) water damage to dry towel always confers at least 1 point of wetness;
5) taking fire damage (via burnarmor() which is used for most types of
   fire damage) has a chance to partially or fully dry a wet towel
   (regardless of whether it's wielded at the time; applies to monsters
   as well as hero; each towel being carried is checked until one is
   affected, then any others escape drying.

Not done:
-) attacking with a wielded wet towel perhaps ought to be treated as a
   weapon attack using whip skill rather than an augmented arbitrary-
   junk-by-weight attack;
-) throwing a wet towel should probably ignore wetness--it's just a wet
   piece of cloth when not finishing with a whip snap; right now, it
   loses a point of wetness when thrown and usually--#3 above--another
   point if it hits...;
-) hitting burning creatures is no different than hitting anything else;
-) likewise for hitting wet creatures.
This commit is contained in:
PatR
2015-10-17 17:00:53 -07:00
parent af1c77808b
commit 4b8db661dd
8 changed files with 163 additions and 67 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 uhitm.c $NHDT-Date: 1432512769 2015/05/25 00:12:49 $ $NHDT-Branch: master $:$NHDT-Revision: 1.144 $ */
/* NetHack 3.6 uhitm.c $NHDT-Date: 1445126430 2015/10/18 00:00:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.148 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -785,7 +785,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
tmp = (obj->corpsenm >= LOW_PM ? mons[obj->corpsenm].msize
: 0) + 1;
break;
case EGG: {
#define useup_eggs(o) \
{ \
if (thrown) \
@@ -794,6 +794,7 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
useupall(o); \
o = (struct obj *) 0; \
} /* now gone */
case EGG: {
long cnt = obj->quan;
tmp = 1; /* nominal physical damage */
@@ -925,9 +926,13 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
/* non-weapons can damage because of their weight */
/* (but not too much) */
tmp = obj->owt / 100;
if (obj->otyp == TOWEL && obj->spe > 0) { /* wet towel */
if (is_wet_towel(obj)) {
/* wielded wet towel should probably use whip skill
(but not by setting objects[TOWEL].oc_skill==P_WHIP
because that would turn towel into a weptool) */
tmp += obj->spe;
obj->spe--;
if (rn2(obj->spe + 1)) /* usually lose some wetness */
dry_a_towel(obj, -1, TRUE);
}
if (tmp < 1)
tmp = 1;
@@ -1075,11 +1080,10 @@ int thrown; /* HMON_xxx (0 => hand-to-hand, other => ranged) */
monflee(mon, 10 * rnd(tmp), FALSE, FALSE);
}
if ((mdat == &mons[PM_BLACK_PUDDING] || mdat == &mons[PM_BROWN_PUDDING])
&&
/* pudding is alive and healthy enough to split */
mon->mhp > 1 && !mon->mcan &&
&& mon->mhp > 1 && !mon->mcan
/* iron weapon using melee or polearm hit */
obj && obj == uwep && objects[obj->otyp].oc_material == IRON
&& obj && obj == uwep && objects[obj->otyp].oc_material == IRON
&& hand_to_hand) {
if (clone_mon(mon, 0, 0)) {
pline("%s divides as you hit it!", Monnam(mon));