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:
@@ -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)
|
||||
|
||||
10
src/eat.c
10
src/eat.c
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user