Factor out a new `is_moat` function.
authorSean Hunt <scshunt@csclub.uwaterloo.ca>
Mon, 23 Feb 2015 19:59:24 +0000 (14:59 -0500)
committerPasi Kallinen <paxed@alt.org>
Tue, 17 Mar 2015 16:46:57 +0000 (18:46 +0200)
The fact that Juiblex's swamp is MOAT but not moat is weird and should
probably be looked at at some point.

include/extern.h
src/dbridge.c
src/dig.c
src/zap.c

index cdeee5478ad469a1beece23c069adffa37ee85d9..0f7fb0d3ffaa3a61236b991d79087e2aa26405eb 100644 (file)
@@ -219,6 +219,7 @@ E boolean FDECL(is_pool, (int,int));
 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*));
index 316b2707fd7837cb8311bb8c405a26c21e78b3ec..a82805377f5d1e04e080f1ae5cb4e0f1168ca696 100644 (file)
@@ -42,9 +42,11 @@ int x,y;
 
     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;
 }
 
@@ -86,6 +88,21 @@ int x,y;
     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.
index 00a60aabaaea05c823391b31e6ad8abf1affe20f..39791dde07e495147113cb334d0837e1c56a65a4 100644 (file)
--- a/src/dig.c
+++ b/src/dig.c
@@ -486,16 +486,15 @@ boolean fill_if_any;      /* force filling if it exists at all */
 
     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)) ||
index dfdf95d4cc2d47956c4d2897fce85a0ab8d7d313..03cbc6c520f8e3fd465cbbd1f13f247eaeb1a9d4 100644 (file)
--- a/src/zap.c
+++ b/src/zap.c
@@ -4017,7 +4017,7 @@ short exploding_wand_typ;
        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. */
@@ -4041,8 +4041,9 @@ short exploding_wand_typ;
                    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);