various tests of flaming monsters

This change adds a new flaming() macro and uses it in several places
where the list of flaming monsters was tested.  on_fire() didn't list
salamanders as already being on fire, but should have.  A couple other
cases were not updated to include flaming sphere.
This commit is contained in:
cohrs
2003-09-26 00:37:24 +00:00
parent 96b56a7bd7
commit 929f9ce2c7
7 changed files with 11 additions and 19 deletions

View File

@@ -48,6 +48,10 @@
#define has_horns(ptr) (num_horns(ptr) > 0)
#define is_whirly(ptr) ((ptr)->mlet == S_VORTEX || \
(ptr) == &mons[PM_AIR_ELEMENTAL])
#define flaming(ptr) ((ptr) == &mons[PM_FIRE_VORTEX] || \
(ptr) == &mons[PM_FLAMING_SPHERE] || \
(ptr) == &mons[PM_FIRE_ELEMENTAL] || \
(ptr) == &mons[PM_SALAMANDER])
#define is_silent(ptr) ((ptr)->msound == MS_SILENT)
#define unsolid(ptr) (((ptr)->mflags1 & M1_UNSOLID) != 0L)
#define mindless(ptr) (((ptr)->mflags1 & M1_MINDLESS) != 0L)

View File

@@ -471,10 +471,7 @@ register int pm;
return;
}
case PM_GREEN_SLIME:
if (!Slimed && !Unchanging &&
youmonst.data != &mons[PM_FIRE_VORTEX] &&
youmonst.data != &mons[PM_FIRE_ELEMENTAL] &&
youmonst.data != &mons[PM_SALAMANDER] &&
if (!Slimed && !Unchanging && !flaming(youmonst.data) &&
youmonst.data != &mons[PM_GREEN_SLIME]) {
You("don't feel very well.");
Slimed = 10L;
@@ -1728,10 +1725,7 @@ struct obj *otmp;
!poly_when_stoned(youmonst.data));
if (mnum == PM_GREEN_SLIME)
stoneorslime = (!Unchanging &&
youmonst.data != &mons[PM_FIRE_VORTEX] &&
youmonst.data != &mons[PM_FIRE_ELEMENTAL] &&
youmonst.data != &mons[PM_SALAMANDER] &&
stoneorslime = (!Unchanging && !flaming(youmonst.data) &&
youmonst.data != &mons[PM_GREEN_SLIME]);
if (cadaver && mnum != PM_LIZARD && mnum != PM_LICHEN) {

View File

@@ -1093,9 +1093,7 @@ mdamagem(magr, mdef, mattk)
break;
case AD_SLIM:
if (cancelled) break; /* physical damage only */
if (!rn2(4) && mdef->data != &mons[PM_FIRE_VORTEX] &&
mdef->data != &mons[PM_FIRE_ELEMENTAL] &&
mdef->data != &mons[PM_SALAMANDER] &&
if (!rn2(4) && !flaming(mdef->data) &&
mdef->data != &mons[PM_GREEN_SLIME]) {
(void) newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, vis);
mdef->mstrategy &= ~STRAT_WAITFORU;

View File

@@ -1482,9 +1482,7 @@ dopois:
case AD_SLIM:
hitmsg(mtmp, mattk);
if (!uncancelled) break;
if (youmonst.data == &mons[PM_FIRE_VORTEX] ||
youmonst.data == &mons[PM_SALAMANDER] ||
youmonst.data == &mons[PM_FIRE_ELEMENTAL]) {
if (flaming(youmonst.data)) {
pline_The("slime burns away!");
dmg = 0;
} else if (Unchanging ||

View File

@@ -692,6 +692,7 @@ struct attack *mattk;
case PM_FLAMING_SPHERE:
case PM_FIRE_VORTEX:
case PM_FIRE_ELEMENTAL:
case PM_SALAMANDER:
what = "already on fire";
break;
case PM_WATER_ELEMENTAL:

View File

@@ -407,8 +407,7 @@ int mntmp;
You("no longer feel sick.");
}
if (Slimed) {
if (mntmp == PM_FIRE_VORTEX || mntmp == PM_FIRE_ELEMENTAL ||
mntmp == PM_SALAMANDER || mntmp == PM_FLAMING_SPHERE) {
if (flaming(youmonst.data)) {
pline_The("slime burns away!");
Slimed = 0L;
context.botl = 1;

View File

@@ -1605,9 +1605,7 @@ register struct attack *mattk;
break;
case AD_SLIM:
if (negated) break; /* physical damage only */
if (!rn2(4) && mdef->data != &mons[PM_FIRE_VORTEX] &&
mdef->data != &mons[PM_FIRE_ELEMENTAL] &&
mdef->data != &mons[PM_SALAMANDER] &&
if (!rn2(4) && !flaming(mdef->data) &&
mdef->data != &mons[PM_GREEN_SLIME]) {
You("turn %s into slime.", mon_nam(mdef));
(void) newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, FALSE);