From: Sean Hunt Date: Mon, 23 Feb 2015 19:59:24 +0000 (-0500) Subject: Factor out a new `is_moat` function. X-Git-Tag: NetHack-3.6.0_RC01~643 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5ffd5a3000c6d90c26402ac2a79f588bb35b8a6a;p=nethack Factor out a new `is_moat` function. The fact that Juiblex's swamp is MOAT but not moat is weird and should probably be looked at at some point. --- diff --git a/include/extern.h b/include/extern.h index cdeee5478..0f7fb0d3f 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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*)); diff --git a/src/dbridge.c b/src/dbridge.c index 316b2707f..a82805377 100644 --- a/src/dbridge.c +++ b/src/dbridge.c @@ -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. diff --git a/src/dig.c b/src/dig.c index 00a60aaba..39791dde0 100644 --- 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)) || diff --git a/src/zap.c b/src/zap.c index dfdf95d4c..03cbc6c52 100644 --- 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);