From: Michael Meyer Date: Tue, 4 Oct 2022 21:52:01 +0000 (-0400) Subject: Use function for combined str/hp loss from poison X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02367077bde9af6f62164142f6f03ef6788826da;p=nethack Use function for combined str/hp loss from poison Since losestr and losehp calls go together most of the time, this feels like it probably makes more sense than repeating the killer name/format twice in a row all over the place. --- diff --git a/include/extern.h b/include/extern.h index 2f7e2b3c8..85c0afd09 100644 --- a/include/extern.h +++ b/include/extern.h @@ -115,6 +115,7 @@ extern struct obj *has_magic_key(struct monst *); 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); diff --git a/src/attrib.c b/src/attrib.c index e74abd3e2..8dd57b291 100644 --- a/src/attrib.c +++ b/src/attrib.c @@ -241,6 +241,14 @@ losestr(int num, const char *knam, schar k_format) (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; diff --git a/src/eat.c b/src/eat.c index c7108eafa..bfd567006 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1815,9 +1815,9 @@ eatcorpse(struct obj *otmp) 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."); @@ -2753,9 +2753,7 @@ doeat(void) 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) { diff --git a/src/fountain.c b/src/fountain.c index 8791f39b3..d965b0a0a 100644 --- a/src/fountain.c +++ b/src/fountain.c @@ -292,8 +292,8 @@ drinkfountain(void) 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! */ diff --git a/src/spell.c b/src/spell.c index d72e42dde..248ec0685 100644 --- a/src/spell.c +++ b/src/spell.c @@ -152,10 +152,9 @@ cursed_book(struct obj* bp) /* 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: