diff options
author | Robert Burnham <burnhamrobertp@gmail.com> | 2011-11-21 06:53:32 -0600 |
---|---|---|
committer | Robert Burnham <burnhamrobertp@gmail.com> | 2011-11-21 06:53:32 -0600 |
commit | c7ddbe0fddd027f54cacc4a9789c0d96d2158873 (patch) | |
tree | 24cb37ac6b0b071126715eee333cbf31f7ec5a75 /crawl-ref/source/map_knowledge.cc | |
parent | e4c48d780ed14b1d7894b4ed613dd8d80d01bd57 (diff) | |
parent | 74be35c0377dd55cca3a3e860ed336b7e63db21f (diff) | |
download | crawl-ref-c7ddbe0fddd027f54cacc4a9789c0d96d2158873.tar.gz crawl-ref-c7ddbe0fddd027f54cacc4a9789c0d96d2158873.zip |
Merge remote branch 'origin/master' into unified_combat_control
Conflicts:
crawl-ref/source/fight.cc
Diffstat (limited to 'crawl-ref/source/map_knowledge.cc')
-rw-r--r-- | crawl-ref/source/map_knowledge.cc | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/crawl-ref/source/map_knowledge.cc b/crawl-ref/source/map_knowledge.cc index 8f0c1d46ea..0bba9f8acb 100644 --- a/crawl-ref/source/map_knowledge.cc +++ b/crawl-ref/source/map_knowledge.cc @@ -83,10 +83,10 @@ void clear_map(bool clear_detected_items, bool clear_detected_monsters) if (!cell.known() || cell.visible()) continue; - if (!clear_detected_items || !cell.detected_item()) + if (clear_detected_items || !cell.detected_item()) cell.clear_item(); - if ((!clear_detected_monsters || !cell.detected_monster()) + if ((clear_detected_monsters || !cell.detected_monster()) && !mons_class_is_stationary(cell.monster())) { cell.clear_monster(); @@ -182,3 +182,58 @@ void map_cell::set_detected_item() _item->base_type = OBJ_DETECTED; _item->colour = Options.detected_item_colour; } + +map_feature get_cell_map_feature(const map_cell& cell) +{ + map_feature mf = MF_SKIP; + if (cell.invisible_monster()) + mf = MF_MONS_HOSTILE; + else if (cell.monster() != MONS_NO_MONSTER) + { + switch (cell.monsterinfo() ? cell.monsterinfo()->attitude : ATT_HOSTILE) + { + case ATT_FRIENDLY: + mf = MF_MONS_FRIENDLY; + break; + case ATT_GOOD_NEUTRAL: + mf = MF_MONS_PEACEFUL; + break; + case ATT_NEUTRAL: + case ATT_STRICT_NEUTRAL: + mf = MF_MONS_NEUTRAL; + break; + case ATT_HOSTILE: + default: + if (mons_class_flag(cell.monster(), M_NO_EXP_GAIN)) + mf = MF_MONS_NO_EXP; + else + mf = MF_MONS_HOSTILE; + break; + } + } + else if (cell.cloud()) + { + show_type show; + show.cls = SH_CLOUD; + mf = get_feature_def(show).minimap; + } + + if (mf == MF_SKIP && cell.item()) + mf = get_feature_def(*cell.item()).minimap; + if (mf == MF_SKIP) + mf = get_feature_def(cell.feat()).minimap; + if (mf == MF_SKIP) + mf = MF_UNSEEN; + + if (mf == MF_WALL || mf == MF_FLOOR) + { + if (cell.known() && !cell.seen() + || cell.detected_item() + || cell.detected_monster()) + { + mf = (mf == MF_WALL) ? MF_MAP_WALL : MF_MAP_FLOOR; + } + } + + return mf; +} |