Use a macro for all foo_RES to MR_foo conversions

This makes it easier to understand what is happening in each of those
places, and also much easier to find the places that conversion between
hero and monster resistances happens (since you can now just grep for
"res_to_mr").  I think I got all the instances where the macro should be
used but I'm not 100% sure since there wasn't a single unique term to
search for to find them all.

I replaced the modifications to give_u_to_m_resistances made in the
previous commit, so that it now uses the same macro as other
conversions, since otherwise it would be much harder to find the
complete list of places where conversions between hero and monster
properties happen.
This commit is contained in:
Michael Meyer
2023-12-20 13:33:40 -05:00
committed by PatR
parent a71866d7d9
commit 4ac8241917
5 changed files with 17 additions and 27 deletions

View File

@@ -1682,33 +1682,28 @@ mon_give_prop(struct monst *mtmp, int prop)
control or whatever, ignore it. */
switch (prop) {
case FIRE_RES:
intrinsic = MR_FIRE;
msg = "%s shivers slightly.";
break;
case COLD_RES:
intrinsic = MR_COLD;
msg = "%s looks quite warm.";
break;
case SLEEP_RES:
intrinsic = MR_SLEEP;
msg = "%s looks wide awake.";
break;
case DISINT_RES:
intrinsic = MR_DISINT;
msg = "%s looks very firm.";
break;
case SHOCK_RES:
intrinsic = MR_ELEC;
msg = "%s crackles with static electricity.";
break;
case POISON_RES:
intrinsic = MR_POISON;
msg = "%s looks healthy.";
break;
default:
return; /* can't give it */
break;
}
intrinsic = res_to_mr(prop);
/* Don't give message if it already had this property intrinsically, but
still do grant the intrinsic if it only had it from mresists.

View File

@@ -1498,20 +1498,14 @@ monstunseesu(unsigned long seenres)
void
give_u_to_m_resistances(struct monst *mtmp)
{
const struct {
int u;
unsigned short m;
} u_to_m_res[] = {
{ FIRE_RES, MR_FIRE }, { COLD_RES, MR_COLD },
{ SLEEP_RES, MR_SLEEP }, { DISINT_RES, MR_DISINT },
{ SHOCK_RES, MR_ELEC }, { POISON_RES, MR_POISON },
{ ACID_RES, MR_ACID }, { STONE_RES, MR_STONE },
};
int i;
int intr;
for (i = 0; i < SIZE(u_to_m_res); i++) {
if ((u.uprops[u_to_m_res[i].u].intrinsic & INTRINSIC) != 0L) {
mtmp->mintrinsics |= u_to_m_res[i].m;
/* convert the hero's current set of intrinsics to their monster
equivalents -- FIRE_RES to MR_FIRE, COLD_RES to MR_COLD, etc -- and
add each to the mintrinsics field for the given monster */
for (intr = FIRE_RES; intr <= STONE_RES; intr++) {
if ((u.uprops[intr].intrinsic & INTRINSIC) != 0L) {
mtmp->mintrinsics |= (unsigned short) res_to_mr(intr);
}
}
}

View File

@@ -550,12 +550,7 @@ update_mon_extrinsics(
case JUMPING:
break;
default:
/* 1 through 8 correspond to MR_xxx mask values */
if (which >= 1 && which <= 8) {
/* FIRE,COLD,SLEEP,DISINT,SHOCK,POISON,ACID,STONE */
mask = (uchar) (1 << (which - 1));
mon->mextrinsics |= (unsigned short) mask;
}
mon->mextrinsics |= (unsigned short) res_to_mr(which);
break;
}
} else { /* off */
@@ -592,7 +587,7 @@ update_mon_extrinsics(
* only one pass but a worn alchemy smock will be an
* alternate source for either of those two resistances.
*/
mask = (uchar) (1 << (which - 1));
mask = res_to_mr(which);
for (otmp = mon->minvent; otmp; otmp = otmp->nobj) {
if (otmp == obj || !otmp->owornmask)
continue;