impact_drop((struct obj *) 0, x, y, 0);
if (mtmp) {
/*[don't we need special sokoban handling here?]*/
- if (is_flyer(mtmp->data) || is_floater(mtmp->data)
- || mtmp->data == &mons[PM_WUMPUS]
+ if (!grounded(mtmp->data)
|| (mtmp->wormno && count_wsegs(mtmp) > 5)
|| mtmp->data->msize >= MZ_HUGE)
return;
/* check for entering water or lava */
if (!u.ustuck && !Levitation && !Flying && is_pool_or_lava(u.ux, u.uy)) {
- if (u.usteed
- && (is_flyer(u.usteed->data) || is_floater(u.usteed->data)
- || is_clinger(u.usteed->data))) {
+ if (u.usteed && !grounded(u.usteed->data)) {
/* floating or clinging steed keeps hero safe (is_flyer() test
is redundant; it can't be true since Flying yielded false) */
return FALSE;
nodiag = NODIAG(mdat - mons);
wantpool = (mdat->mlet == S_EEL);
poolok = ((!Is_waterlevel(&u.uz) && !(nowtyp != WATER)
- && (is_flyer(mdat) || is_floater(mdat) || is_clinger(mdat)))
+ && !grounded(mdat))
|| (is_swimmer(mdat) && !wantpool));
/* note: floating eye is the only is_floater() so this could be
simplified, but then adding another floater would be error prone */
- lavaok = (is_flyer(mdat) || is_floater(mdat) || is_clinger(mdat)
- || likes_lava(mdat));
+ lavaok = (!grounded(mdat) || likes_lava(mdat));
if (mdat == &mons[PM_FLOATING_EYE]) /* prefers to avoid heat */
lavaok = FALSE;
thrudoor = ((flag & (ALLOW_WALL | BUSTDOOR)) != 0L);
struct permonst *mdat = mtmp->data;
/* The steed may drop into water/lava */
- if (!is_flyer(mdat) && !is_floater(mdat) && !is_clinger(mdat)) {
+ if (grounded(mdat)) {
if (is_pool(u.ux, u.uy)) {
if (!Underwater)
pline("%s falls into the %s!", Monnam(mtmp),
return (is_swimmer(mdat)
|| (!Is_waterlevel(&u.uz)
&& !(levl[x][y].typ == WATER)
- && (is_floater(mdat) || is_flyer(mdat)
- || is_clinger(mdat))));
+ && !grounded(mdat)));
} else if (mdat->mlet == S_EEL && rn2(13) && !ignorewater) {
return FALSE;
} else if (is_lava(x, y)) {
const char *fallverb;
fallverb = "falls";
- if (is_flyer(mptr) || is_floater(mptr)
- || (mtmp->wormno && count_wsegs(mtmp) > 5)
- || is_clinger(mptr)) {
+ if (!grounded(mptr) || (mtmp->wormno && count_wsegs(mtmp) > 5)) {
if (g.force_mintrap && !Sokoban) {
/* openfallingtrap; not inescapable here */
if (in_sight) {
trapname(tt, TRUE));
return Trap_Effect_Finished; /* don't activate it after all */
}
- if (is_flyer(mptr) || is_floater(mptr) || mptr == &mons[PM_WUMPUS]
- || (mtmp->wormno && count_wsegs(mtmp) > 5)
+ if (!grounded(mptr) || (mtmp->wormno && count_wsegs(mtmp) > 5)
|| mptr->msize >= MZ_HUGE) {
if (g.force_mintrap && !Sokoban) {
/* openfallingtrap; not inescapable here */