summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/misc.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-13 00:47:33 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-13 00:47:33 +0000
commit412bcd6e779cd3883bc5c6ce29a8e79ad32c63f4 (patch)
tree45316891325a63a834b5baef43896e464ed8fedb /crawl-ref/source/misc.cc
parent2dd4fe4a7f0b809a9f3a565f64ed6b5dcb1ab814 (diff)
downloadcrawl-ref-412bcd6e779cd3883bc5c6ce29a8e79ad32c63f4.tar.gz
crawl-ref-412bcd6e779cd3883bc5c6ce29a8e79ad32c63f4.zip
Remove a great many cases where mgrd is accessed directly in favour
of monster_at(). The hope is to eventually remove mgrd completely (in favour of scanning through the monster list, or a different datastructure which gets updated automatically when monsters move), and thus fix all the mgrd-out-of-sync bugs in one fell swoop. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9056 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/misc.cc')
-rw-r--r--crawl-ref/source/misc.cc27
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;
}