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.
This commit is contained in:
Michael Meyer
2022-10-04 17:52:01 -04:00
committed by PatR
parent 70fe2ce5cd
commit 02367077bd
5 changed files with 18 additions and 12 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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! */

View File

@@ -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: