diff options
Diffstat (limited to 'crawl-ref/source/misc.cc')
-rw-r--r-- | crawl-ref/source/misc.cc | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc index e419a646fc..a3c77d2036 100644 --- a/crawl-ref/source/misc.cc +++ b/crawl-ref/source/misc.cc @@ -2669,10 +2669,8 @@ std::vector<monsters*> get_nearby_monsters(bool want_move, // Sweep every visible square within range. for (radius_iterator ri(you.pos(), range); ri; ++ri) { - const unsigned short targ_monst = env.mgrid(*ri); - if (targ_monst != NON_MONSTER) + if (monsters* mon = monster_at(*ri)) { - monsters *mon = &menv[targ_monst]; if (mon->alive() && (!require_visible || player_monster_visible(mon)) && !mons_is_submerged(mon) @@ -2682,7 +2680,7 @@ std::vector<monsters*> get_nearby_monsters(bool want_move, { mons.push_back(mon); if (just_check) // stop once you find one - return mons; + break; } } } @@ -2908,23 +2906,12 @@ coord_def pick_adjacent_free_square(const coord_def& p) { int num_ok = 0; coord_def result(-1, -1); - for ( int ux = p.x-1; ux <= p.x+1; ++ux ) - { - for ( int uy = p.y-1; uy <= p.y+1; ++uy ) - { - if ( ux == p.x && uy == p.y ) - continue; - if ( in_bounds(ux, uy) - && grd[ux][uy] == DNGN_FLOOR - && mgrd[ux][uy] == NON_MONSTER ) - { - ++num_ok; - if ( one_chance_in(num_ok) ) - result.set(ux, uy); - } - } - } + for (adjacent_iterator ai(p); ai; ++ai) + if (grd(*ai) == DNGN_FLOOR && monster_at(*ai) == NULL) + if (one_chance_in(++num_ok)) + result = *ai; + return result; } |