#define Is_medusa_level(x) (on_level(x, &medusa_level))
#define Is_oracle_level(x) (on_level(x, &oracle_level))
#define Is_valley(x) (on_level(x, &valley_level))
+#define Is_juiblex_level(x) (on_level(x, &juiblex_level))
#define Is_asmo_level(x) (on_level(x, &asmodeus_level))
#define Is_baal_level(x) (on_level(x, &baalzebub_level))
#define Is_wiz1_level(x) (on_level(x, &wiz1_level))
E void NDECL(water_friction);
E void FDECL(save_waterlevel, (int,int));
E void FDECL(restore_waterlevel, (int));
+E const char *FDECL(waterbody_name, (XCHAR_P,XCHAR_P));
/* ### mkobj.c ### */
impossible("Not a boulder?");
else if (!Is_waterlevel(&u.uz) && (is_pool(rx,ry) || is_lava(rx,ry))) {
boolean lava = is_lava(rx,ry), fills_up;
- const char *what = lava ? "lava" : "water";
+ const char *what = waterbody_name(rx,ry);
schar ltyp = levl[rx][ry].typ;
int chance = rn2(10); /* water: 90%; lava: 10% */
fills_up = lava ? chance == 0 : chance != 0;
There("is a large splash as %s %s the %s.",
the(xname(otmp)), fills_up? "fills":"falls into",
- lava ? "lava" : ltyp==POOL ? "pool" :
- moat ? "moat" : "water");
+ what);
} else if (flags.soundok)
You_hear("a%s splash.", lava ? " sizzling" : "");
wake_nearto(rx, ry, 40);
was_waterlevel = TRUE;
}
+const char *waterbody_name(x, y)
+xchar x,y;
+{
+ register struct rm *lev;
+ schar ltyp;
+
+ if (!isok(x,y))
+ return "drink"; /* should never happen */
+ lev = &levl[x][y];
+ ltyp = lev->typ;
+
+ if (is_lava(x,y))
+ return "lava";
+ else if (ltyp == ICE ||
+ (ltyp == DRAWBRIDGE_UP &&
+ (levl[x][y].drawbridgemask & DB_UNDER) == DB_ICE))
+ return "ice";
+ else if (((ltyp != POOL) && (ltyp != WATER) &&
+ !Is_medusa_level(&u.uz) && !Is_waterlevel(&u.uz) && !Is_juiblex_level(&u.uz)) ||
+ (ltyp == DRAWBRIDGE_UP && (levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT))
+ return "moat";
+ else if ((ltyp != POOL) && (ltyp != WATER) && Is_juiblex_level(&u.uz))
+ return "swamp";
+ else if (ltyp == POOL)
+ return "pool of water";
+ else return "water";
+}
+
STATIC_OVL void
set_wportal()
{
return(1);
}
} else if (is_pool(u.ux,u.uy)) {
- tmp = (here == POOL) ? "pool" : "moat";
+ tmp = waterbody_name(u.ux,u.uy);
Sprintf(qbuf, "Dip it into the %s?", tmp);
if (yn(qbuf) == 'y') {
if (Levitation) {