summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/map_knowledge.cc
diff options
context:
space:
mode:
authorRobert Burnham <burnhamrobertp@gmail.com>2011-11-21 06:53:32 -0600
committerRobert Burnham <burnhamrobertp@gmail.com>2011-11-21 06:53:32 -0600
commitc7ddbe0fddd027f54cacc4a9789c0d96d2158873 (patch)
tree24cb37ac6b0b071126715eee333cbf31f7ec5a75 /crawl-ref/source/map_knowledge.cc
parente4c48d780ed14b1d7894b4ed613dd8d80d01bd57 (diff)
parent74be35c0377dd55cca3a3e860ed336b7e63db21f (diff)
downloadcrawl-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.cc59
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;
+}