drowned in a moat on the Plane of Water (trunk only)

From the newsgroup:  drowning on the Plane of Water gave cause of
death as "drowned in a moat".  There was already some post-3.4.3 code to
handle naming of moat on Juiblex level as "swamp", but it wasn't used for
drowning's cause of death and we were still getting "drowned in a moat"
there too.  Now the Plane of Water yields "drowned in deep water" and
Juiblex's level yields "drowned in a swamp".
This commit is contained in:
nethack.rankin
2007-06-19 03:58:36 +00:00
parent acc0aa3ff3
commit ed1e29f9ca
3 changed files with 30 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)mkmaze.c 3.5 2007/03/02 */
/* SCCS Id: @(#)mkmaze.c 3.5 2007/06/18 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1131,7 +1131,8 @@ register int fd;
was_waterlevel = TRUE;
}
const char *waterbody_name(x, y)
const char *
waterbody_name(x, y)
xchar x,y;
{
register struct rm *lev;
@@ -1141,22 +1142,28 @@ xchar x,y;
return "drink"; /* should never happen */
lev = &levl[x][y];
ltyp = lev->typ;
if (ltyp == DRAWBRIDGE_UP)
switch (lev->drawbridgemask & DB_UNDER) {
case DB_ICE: ltyp = ICE; break;
case DB_LAVA: ltyp = LAVAPOOL; break;
case DB_MOAT: ltyp = MOAT; break;
default: ltyp = STONE; break;
}
if (is_lava(x,y))
if (ltyp == LAVAPOOL)
return "lava";
else if (ltyp == ICE ||
(ltyp == DRAWBRIDGE_UP &&
(levl[x][y].drawbridgemask & DB_UNDER) == DB_ICE))
else if (ltyp == 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";
else if (ltyp == WATER || Is_waterlevel(&u.uz))
; /* fall through to default return value */
else if (Is_juiblex_level(&u.uz))
return "swamp";
else if (ltyp == MOAT && !Is_medusa_level(&u.uz))
return "moat";
return "water";
}
STATIC_OVL void

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)trap.c 3.5 2007/05/26 */
/* SCCS Id: @(#)trap.c 3.5 2007/06/18 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -3230,7 +3230,8 @@ boolean *lostsome;
boolean
drown()
{
boolean inpool_ok = FALSE, crawl_ok, pool_of_water;
const char *pool_of_water;
boolean inpool_ok = FALSE, crawl_ok;
int i, x, y;
/* happily wading in the same contiguous pool */
@@ -3352,12 +3353,15 @@ drown()
}
u.uinwater = 1;
You("drown.");
pool_of_water = levl[u.ux][u.uy].typ == POOL || Is_medusa_level(&u.uz);
for (;;) {
/* killer format and name are reconstructed every iteration
because lifesaving resets them */
pool_of_water = waterbody_name(u.ux, u.uy);
killer.format = KILLED_BY_AN;
Strcpy(killer.name, pool_of_water ? "pool of water" : "moat");
/* avoid "drowned in [a] water" */
if (!strcmp(pool_of_water, "water"))
pool_of_water = "deep water", killer.format = KILLED_BY;
Strcpy(killer.name, pool_of_water);
done(DROWNING);
/* oops, we're still alive. better get out of the water. */
if (safe_teleds(TRUE)) break; /* successful life-save */