flyers vs kelp

Flying monsters that want to pick up items tend to get stuck above
kelp fronds, particularly on the Medusa level.  They're allowed to
move to the water location, but can't reach an underwater item so
end up doing nothing.
This commit is contained in:
PatR
2016-06-25 14:59:52 -07:00
parent 98a90e353b
commit 66e7b84077
2 changed files with 11 additions and 4 deletions

View File

@@ -302,6 +302,7 @@ conduct: wishing for an artifact and not getting it because it already exists
avoid ring of poison resistance as starting equipment for orcish wizard
gelatinous cube shouldn't be able to eat a scroll of scare monster
make fireballs or cones of cold cast a skilled or higher not go through walls
prevent flying monsters from hovering over unreachable underwater objects
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository

View File

@@ -979,15 +979,21 @@ not_special:
* mpickstuff() as well.
*/
if (xx >= lmx && xx <= oomx && yy >= lmy && yy <= oomy) {
/* don't get stuck circling around an object that's
underneath
an immobile or hidden monster; paralysis victims
excluded */
/* don't get stuck circling around object that's
underneath an immobile or hidden monster;
paralysis victims excluded */
if ((mtoo = m_at(xx, yy)) != 0
&& (mtoo->msleeping || mtoo->mundetected
|| (mtoo->mappearance && !mtoo->iswiz)
|| !mtoo->data->mmove))
continue;
/* the mfndpos() test for whether to allow a move to a
water location accepts flyers, but they can't reach
underwater objects, so being able to move to a spot
is insufficient for deciding whether to do so */
if ((is_pool(xx, yy) && !is_swimmer(ptr))
|| (is_lava(xx, yy) && !likes_lava(ptr)))
continue;
if (((likegold && otmp->oclass == COIN_CLASS)
|| (likeobjs && index(practical, otmp->oclass)