E boolean FDECL(is_lava, (int,int));
E boolean FDECL(is_pool_or_lava, (int,int));
E boolean FDECL(is_ice, (int,int));
+E boolean FDECL(is_moat, (int,int));
E int FDECL(is_drawbridge_wall, (int,int));
E boolean FDECL(is_db_wall, (int,int));
E boolean FDECL(find_drawbridge, (int *,int*));
if (!isok(x,y)) return FALSE;
ltyp = levl[x][y].typ;
- if (ltyp == POOL || ltyp == MOAT || ltyp == WATER) return TRUE;
- if (ltyp == DRAWBRIDGE_UP &&
- (levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT) return TRUE;
+ /* The ltyp == MOAT is not redundant with is_moat, because the
+ * Juiblex level does not have moats, although it has MOATs. There
+ * is probably a better way to express this. */
+ if (ltyp == POOL || ltyp == MOAT || ltyp == WATER || is_moat(x, y))
+ return TRUE;
return FALSE;
}
return FALSE;
}
+boolean
+is_moat(x,y)
+int x, y;
+{
+ schar ltyp;
+
+ if (!isok(x, y)) return FALSE;
+ ltyp = levl[x][y].typ;
+ if (!Is_juiblex_level(&u.uz) &&
+ (ltyp == MOAT || (ltyp == DRAWBRIDGE_UP &&
+ (levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT)))
+ return TRUE;
+ return FALSE;
+}
+
/*
* We want to know whether a wall (or a door) is the portcullis (passageway)
* of an eventual drawbridge.
for (x1 = lo_x; x1 <= hi_x; x1++)
for (y1 = lo_y; y1 <= hi_y; y1++)
- if (levl[x1][y1].typ == POOL)
- pool_cnt++;
- else if (levl[x1][y1].typ == MOAT ||
- (levl[x1][y1].typ == DRAWBRIDGE_UP &&
- (levl[x1][y1].drawbridgemask & DB_UNDER) == DB_MOAT))
- moat_cnt++;
- else if (levl[x1][y1].typ == LAVAPOOL ||
- (levl[x1][y1].typ == DRAWBRIDGE_UP &&
- (levl[x1][y1].drawbridgemask & DB_UNDER) == DB_LAVA))
- lava_cnt++;
+ if (is_moat(x1, y1))
+ moat_cnt++;
+ else if (is_pool(x1, y1))
+ /* This must come after is_moat since moats are pools
+ * but not vice-versa. */
+ pool_cnt++;
+ else if (is_lava(x1, y1))
+ lava_cnt++;
+
if (!fill_if_any) pool_cnt /= 3; /* not as much liquid as the others */
if ((lava_cnt > moat_cnt + pool_cnt && rn2(lava_cnt + 1)) ||
case ZT_COLD:
if (is_pool(x,y) || is_lava(x,y)) {
boolean lava = is_lava(x,y);
- const char *moat = waterbody_name(x, y);
+ boolean moat = is_moat(x,y);
if (lev->typ == WATER) {
/* For now, don't let WATER freeze. */
if (see_it) {
if(lava)
Norep("The lava cools and solidifies.");
- else if(strcmp(moat, "moat") == 0)
- Norep("The %s is bridged with ice!", moat);
+ else if(moat)
+ Norep("The %s is bridged with ice!",
+ waterbody_name(x,y));
else
Norep("The water freezes.");
newsym(x,y);