extern boolean adjattrib(int, int, int);
extern void gainstr(struct obj *, int, boolean);
extern void losestr(int, const char *, schar);
+extern void poison_strdmg(int, int, const char *, schar);
extern void poisontell(int, boolean);
extern void poisoned(const char *, int, const char *, int, boolean);
extern void change_luck(schar);
(void) adjattrib(A_STR, -num, 1);
}
+/* combined strength loss and damage from some poisons */
+void
+poison_strdmg(int strloss, int dmg, const char *knam, schar k_format)
+{
+ losestr(strloss, knam, k_format);
+ losehp(dmg, knam, k_format);
+}
+
static const struct poison_effect_message {
void (*delivery_func)(const char *, ...);
const char *effect_msg;
tp++;
pline("Ecch - that must have been poisonous!");
if (!Poison_resistance) {
- const char *knam = !glob ? "poisonous corpse" : "poisonous glob";
- losestr(rnd(4), knam, KILLED_BY_AN);
- losehp(rnd(15), knam, KILLED_BY_AN);
+ poison_strdmg(rnd(4), rnd(15),
+ !glob ? "poisonous corpse" : "poisonous glob",
+ KILLED_BY_AN);
} else
You("seem unaffected by the poison.");
if (otmp->oclass == WEAPON_CLASS && otmp->opoisoned) {
pline("Ecch - that must have been poisonous!");
if (!Poison_resistance) {
- const char *knam = xname(otmp);
- losestr(rnd(4), knam, KILLED_BY_AN);
- losehp(rnd(15), knam, KILLED_BY_AN);
+ poison_strdmg(rnd(4), rnd(15), xname(otmp), KILLED_BY_AN);
} else
You("seem unaffected by the poison.");
} else if (!nodelicious) {
losehp(rnd(4), "unrefrigerated sip of juice", KILLED_BY_AN);
break;
}
- losestr(rn1(4, 3), "contaminated water", KILLED_BY);
- losehp(rnd(10), "contaminated water", KILLED_BY);
+ poison_strdmg(rn1(4, 3), rnd(10), "contaminated water",
+ KILLED_BY);
exercise(A_CON, FALSE);
break;
case 22: /* Fountain of snakes! */
/* temp disable in_use; death should not destroy the book */
was_in_use = bp->in_use;
bp->in_use = FALSE;
- losestr(Poison_resistance ? rn1(2, 1) : rn1(4, 3),
- "contact-poisoned spellbook", KILLED_BY_AN);
- losehp(rnd(Poison_resistance ? 6 : 10), "contact-poisoned spellbook",
- KILLED_BY_AN);
+ poison_strdmg(Poison_resistance ? rn1(2, 1) : rn1(4, 3),
+ rnd(Poison_resistance ? 6 : 10),
+ "contact-poisoned spellbook", KILLED_BY_AN);
bp->in_use = was_in_use;
break;
case 6: