diff options
author | Charles Otto <ottochar@gmail.com> | 2009-11-07 18:10:51 -0500 |
---|---|---|
committer | Charles Otto <ottochar@gmail.com> | 2009-11-07 18:11:24 -0500 |
commit | 6b6ba7b163b1c716f419ec0cbcb12fbb96525888 (patch) | |
tree | 6a1a57e187f271b55f3225e419fea62639d849a8 /crawl-ref/source/exclude.cc | |
parent | 1b6b5735d019d49a580693b30687bbf149ae5e59 (diff) | |
download | crawl-ref-6b6ba7b163b1c716f419ec0cbcb12fbb96525888.tar.gz crawl-ref-6b6ba7b163b1c716f419ec0cbcb12fbb96525888.zip |
Avoid an infinite loop in tilse related to Feawn neutralizing plants
Avoid an infinite loop caused caused by calling remove_auto_exclude on
plants that get neutralized by Feawn. feawn_neutralise is called via
viewwindow, and it was calling remove_auto_exclude, in tiles
remove_auto_exclude calls viewwindow creating an infinite loop.
Instead of calling remove_auto_exclude directly I added an attitude
check to maybe_remove_autoexclusion which is (safely) called from
viewwindow already.
Diffstat (limited to 'crawl-ref/source/exclude.cc')
-rw-r--r-- | crawl-ref/source/exclude.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/crawl-ref/source/exclude.cc b/crawl-ref/source/exclude.cc index 1c91a673d4..630d549d2b 100644 --- a/crawl-ref/source/exclude.cc +++ b/crawl-ref/source/exclude.cc @@ -328,8 +328,11 @@ void maybe_remove_autoexclusion(const coord_def &p) if (travel_exclude *exc = _find_exclude_root(p)) { const monsters *m = monster_at(p); - if (exc->autoex && (!m || !you.can_see(m) || m->type != exc->mon)) + if (exc->autoex && (!m || !you.can_see(m) || m->type != exc->mon + || m->attitude != ATT_HOSTILE)) + { del_exclude(p); + } } } |