diff --git a/doc/fixes34.3 b/doc/fixes34.3 index 78061640f..5ac1d0997 100644 --- a/doc/fixes34.3 +++ b/doc/fixes34.3 @@ -42,6 +42,8 @@ couldn't insert gold into a container using full menu style if no other objects in inventory unless compiling with GOLDOBJ nagas eat always have warriors on the Valkyrie quest be female +be more consistent with sounds when dropping into water +surface() returns "bottom" when Underwater Platform- and/or Interface-Specific Fixes diff --git a/src/do.c b/src/do.c index 49ef8cada..4e06a45bb 100644 --- a/src/do.c +++ b/src/do.c @@ -183,10 +183,17 @@ const char *verb; return fire_damage(obj, FALSE, FALSE, x, y); } else if (is_pool(x, y)) { /* Reasonably bulky objects (arbitrary) splash when dropped. + * If you're floating above the water even small things make noise. * Stuff dropped near fountains always misses */ - if (Blind && !Deaf && ((x == u.ux) && (y == u.uy)) && - weight(obj) > 9) { - pline("Splash!"); + if ((Blind || (Levitation || Flying)) && !Deaf && + ((x == u.ux) && (y == u.uy))) { + if (!Underwater) { + if (weight(obj) > 9) { + pline("Splash!"); + } else if (Levitation || Flying) { + pline("Plop!"); + } + } map_background(x, y, 0); newsym(x, y); } diff --git a/src/engrave.c b/src/engrave.c index 922197404..058e2c504 100644 --- a/src/engrave.c +++ b/src/engrave.c @@ -153,7 +153,7 @@ register int x, y; else if (IS_AIR(lev->typ) && Is_airlevel(&u.uz)) return "air"; else if (is_pool(x,y)) - return "water"; + return (Underwater && !Is_waterlevel(&u.uz)) ? "bottom" : "water"; else if (is_ice(x,y)) return "ice"; else if (is_lava(x,y)) diff --git a/src/polyself.c b/src/polyself.c index d5c55c0d5..3952f8125 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -234,6 +234,7 @@ boolean forcecontrol; uarm->otyp <= YELLOW_DRAGON_SCALES); boolean iswere = (u.ulycn >= LOW_PM || is_were(youmonst.data)); boolean isvamp = (youmonst.data->mlet == S_VAMPIRE || u.umonnum == PM_VAMPIRE_BAT); + boolean was_floating = (Levitation || Flying); if(!Polymorph_control && !forcecontrol && !draconian && !iswere && !isvamp) { if (rn2(20) > ACURR(A_CON)) { @@ -323,6 +324,9 @@ boolean forcecontrol; new_light_source(u.ux, u.uy, new_light, LS_MONSTER, (genericptr_t)&youmonst); } + if (is_pool(u.ux,u.uy) && was_floating && !(Levitation || Flying) && + !breathless(youmonst.data) && !amphibious(youmonst.data) && + !Swimming) drown(); } /* (try to) make a mntmp monster out of the player */