summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/map_knowledge.cc13
-rw-r--r--crawl-ref/source/show.cc16
-rw-r--r--crawl-ref/source/show.h4
-rw-r--r--crawl-ref/source/spells2.cc1
-rw-r--r--crawl-ref/source/view.cc10
-rw-r--r--crawl-ref/source/viewmap.cc132
-rw-r--r--crawl-ref/source/viewmap.h3
7 files changed, 75 insertions, 104 deletions
diff --git a/crawl-ref/source/map_knowledge.cc b/crawl-ref/source/map_knowledge.cc
index fd19abfdc7..6ecac9706b 100644
--- a/crawl-ref/source/map_knowledge.cc
+++ b/crawl-ref/source/map_knowledge.cc
@@ -9,6 +9,7 @@
#include "feature.h"
#include "mon-util.h"
#include "notes.h"
+#include "options.h"
#include "overmap.h"
#include "showsymb.h"
#include "stuff.h"
@@ -70,7 +71,10 @@ show_type get_map_knowledge_obj(int x, int y)
void set_map_knowledge_detected_item(int x, int y, bool detected)
{
if (detected)
+ {
env.map_knowledge[x][y].flags |= MAP_DETECTED_ITEM;
+ env.map_knowledge[x][y].object.colour = Options.detected_item_colour;
+ }
else
env.map_knowledge[x][y].flags &= ~MAP_DETECTED_ITEM;
}
@@ -83,7 +87,10 @@ bool is_map_knowledge_detected_item(int x, int y)
void set_map_knowledge_detected_mons(int x, int y, bool detected)
{
if (detected)
+ {
env.map_knowledge[x][y].flags |= MAP_DETECTED_MONSTER;
+ env.map_knowledge[x][y].object.colour = Options.detected_monster_colour;
+ }
else
env.map_knowledge[x][y].flags &= ~MAP_DETECTED_MONSTER;
}
@@ -151,8 +158,10 @@ void set_terrain_changed( int x, int y )
void set_terrain_mapped( int x, int y )
{
- env.map_knowledge[x][y].flags &= (~MAP_CHANGED_FLAG);
- env.map_knowledge[x][y].flags |= MAP_MAGIC_MAPPED_FLAG;
+ map_cell* cell = &env.map_knowledge[x][y];
+ cell->flags &= (~MAP_CHANGED_FLAG);
+ cell->flags |= MAP_MAGIC_MAPPED_FLAG;
+ cell->object.colour = get_feature_def(cell->object).map_colour;
#ifdef USE_TILE
tiles.update_minimap(x, y);
#endif
diff --git a/crawl-ref/source/show.cc b/crawl-ref/source/show.cc
index 784eac2994..a28a5b5777 100644
--- a/crawl-ref/source/show.cc
+++ b/crawl-ref/source/show.cc
@@ -393,3 +393,19 @@ void show_def::init()
for (radius_iterator ri(&you.get_los()); ri; ++ri)
update_at(*ri, grid2show(*ri));
}
+
+show_type to_knowledge(show_type obj, bool emph)
+{
+ if (Options.item_colour && obj.cls == SH_ITEM)
+ return (obj);
+ if (obj.cls == SH_MONSTER)
+ {
+ obj.colour = DARKGREY;
+ return (obj);
+ }
+ const feature_def& fdef = get_feature_def(obj);
+ obj.colour = fdef.seen_colour;
+ if (emph && fdef.seen_em_colour)
+ obj.colour = fdef.seen_em_colour;
+ return (obj);
+}
diff --git a/crawl-ref/source/show.h b/crawl-ref/source/show.h
index 3f2e4cb88a..1554aa8b23 100644
--- a/crawl-ref/source/show.h
+++ b/crawl-ref/source/show.h
@@ -82,4 +82,8 @@ public:
void update_at(const coord_def &gp, const coord_def &ep);
};
+// Convert a show object as in env.show to one to be stored in
+// env.map_knowledge (dropping feature colour mainly).
+show_type to_knowledge(show_type obj, bool emph);
+
#endif
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index d421b80f9d..7287a9694c 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -82,7 +82,6 @@ int detect_items(int pow)
&& (!get_map_knowledge_obj(*ri) || !is_map_knowledge_item(*ri)))
{
items_found++;
-
set_map_knowledge_obj(*ri, show_type(SHOW_ITEM_DETECTED));
set_map_knowledge_detected_item(*ri);
#ifdef USE_TILE
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index ef6cb52244..5d57574d1f 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -697,7 +697,7 @@ static bool player_view_update_at(const coord_def &gc)
bool need_excl_update = is_terrain_changed(gc) || !is_terrain_seen(gc);
set_terrain_seen(gc);
- set_map_knowledge_obj(gc, env.show(ep));
+ set_map_knowledge_obj(gc, to_knowledge(env.show(ep), emphasise(gc)));
set_map_knowledge_detected_mons(gc, false);
set_map_knowledge_detected_item(gc, false);
@@ -712,7 +712,8 @@ static bool player_view_update_at(const coord_def &gc)
#endif
if (Options.clean_map && env.show.get_backup(ep))
- set_map_knowledge_obj(gc, env.show.get_backup(ep));
+ set_map_knowledge_obj(gc, to_knowledge(env.show.get_backup(ep),
+ emphasise(gc)));
return (need_excl_update);
}
@@ -772,9 +773,8 @@ static void draw_outside_los(screen_buffer_t* buffy, const coord_def &gc)
// Outside the env.show area.
buffy[0] = get_map_knowledge_char(gc);
buffy[1] = DARKGREY;
-
if (Options.colour_map)
- buffy[1] = colour_code_map(gc, Options.item_colour);
+ buffy[1] = real_colour(get_map_knowledge_col(gc));
#else
unsigned int bg = env.tile_bk_bg(gc);
unsigned int fg = env.tile_bk_fg(gc);
@@ -829,7 +829,7 @@ static void draw_los_backup(screen_buffer_t* buffy,
buffy[1] = DARKGREY;
if (Options.colour_map)
- buffy[1] = colour_code_map(gc, Options.item_colour);
+ buffy[1] = real_colour(get_map_knowledge_col(gc));
#else
if (env.tile_bk_fg(gc) != 0
|| env.tile_bk_bg(gc) != 0)
diff --git a/crawl-ref/source/viewmap.cc b/crawl-ref/source/viewmap.cc
index b9249199f6..8bf3161e80 100644
--- a/crawl-ref/source/viewmap.cc
+++ b/crawl-ref/source/viewmap.cc
@@ -377,6 +377,9 @@ static std::string _level_description_string()
return buf;
}
+static bool _travel_colour_override(const coord_def& p);
+static unsigned _get_travel_colour(const coord_def& p);
+
static void _draw_level_map(int start_x, int start_y, bool travel_mode,
bool on_level)
{
@@ -393,8 +396,6 @@ static void _draw_level_map(int start_x, int start_y, bool travel_mode,
for (int screen_y = 0; screen_y < num_lines; screen_y++)
for (int screen_x = 0; screen_x < num_cols; screen_x++)
{
- screen_buffer_t colour = DARKGREY;
-
coord_def c(start_x + screen_x, start_y + screen_y);
if (!map_bounds(c))
@@ -404,14 +405,14 @@ static void _draw_level_map(int start_x, int start_y, bool travel_mode,
}
else
{
- colour = colour_code_map(c,
- Options.item_colour,
- travel_mode,
- on_level);
-
- buffer2[bufcount2 + 1] = colour;
buffer2[bufcount2] = env.map_knowledge(c).glyph();
+ // Override some feature colours according to travel distance.
+ unsigned col = (travel_mode && _travel_colour_override(c))
+ ? _get_travel_colour(c)
+ : get_map_knowledge_col(c);
+ buffer2[bufcount2 + 1] = real_colour(col);
+
if (c == you.pos() && !crawl_state.arena_suspended && on_level)
{
// [dshaligram] Draw the @ symbol on the level-map. It's no
@@ -466,43 +467,32 @@ static void _reset_travel_colours(std::vector<coord_def> &features,
arrange_features(features);
}
-static char _get_travel_colour( const coord_def& p )
-{
- if (is_waypoint(p))
- return LIGHTGREEN;
-
- short dist = travel_point_distance[p.x][p.y];
- return dist > 0? Options.tc_reachable :
- dist == PD_EXCLUDED? Options.tc_excluded :
- dist == PD_EXCLUDED_RADIUS? Options.tc_exclude_circle :
- dist < 0? Options.tc_dangerous :
- Options.tc_disconnected;
-}
-
class feature_list
{
std::vector<glyph> data;
glyph _get_glyph(const coord_def& gc)
{
- // FIXME: duplicating code from colour_code_map and elsewhere
+ // XXX: it's unclear whether we want to display all features
+ // or just those not obscured by remembered/detected stuff.
dungeon_feature_type feat = env.map_knowledge(gc).feat();
const bool terrain_seen = is_terrain_seen(gc);
const feature_def &fdef = get_feature_def(feat);
glyph g;
g.ch = terrain_seen ? fdef.symbol : fdef.magic_symbol;
- g.col = terrain_seen ? fdef.seen_colour : fdef.map_colour;
- if (terrain_seen && fdef.seen_em_colour && emphasise(gc))
- g.col = fdef.seen_em_colour;
- if (is_waypoint(gc) || travel_point_distance[gc.x][gc.y] == PD_EXCLUDED)
- g.col = real_colour(_get_travel_colour(gc));
+ if (_travel_colour_override(gc))
+ g.col = _get_travel_colour(gc);
+ else
+ g.col = get_map_knowledge_col(gc);
return (g);
}
bool _show(const coord_def& gc)
{
- dungeon_feature_type feat = env.map_knowledge(gc).feat();
-
+ show_type obj = env.map_knowledge(gc).object;
+ if (obj != SH_FEATURE)
+ return (false);
+ dungeon_feature_type feat = obj.feat;
return (feat_is_staircase(feat) || feat_is_trap(feat) ||
feat_is_altar(feat) || get_feature_dchar(feat) == DCHAR_ARCH);
}
@@ -1174,76 +1164,32 @@ bool emphasise(const coord_def& where)
&& you.where_are_you != BRANCH_VESTIBULE_OF_HELL);
}
-screen_buffer_t colour_code_map(const coord_def& p, bool item_colour,
- bool travel_colour, bool on_level)
+static unsigned _get_travel_colour(const coord_def& p)
{
- if (!is_terrain_known(p))
- return (BLACK);
-
#ifdef WIZARD
- if (travel_colour && you.wizard
- && testbits(env.pgrid(p), FPROP_HIGHLIGHT))
- {
+ if (you.wizard && testbits(env.pgrid(p), FPROP_HIGHLIGHT))
return (LIGHTGREEN);
- }
#endif
- dungeon_feature_type feat_value = get_map_knowledge_obj(p).feat;
-
- unsigned tc = travel_colour ? _get_travel_colour(p) : DARKGREY;
-
- if (is_map_knowledge_detected_item(p))
- return real_colour(Options.detected_item_colour);
+ if (is_waypoint(p))
+ return LIGHTGREEN;
- if (is_map_knowledge_detected_mons(p))
- {
- tc = Options.detected_monster_colour;
- return real_colour(tc);
- }
+ short dist = travel_point_distance[p.x][p.y];
+ return dist > 0? Options.tc_reachable :
+ dist == PD_EXCLUDED? Options.tc_excluded :
+ dist == PD_EXCLUDED_RADIUS? Options.tc_exclude_circle :
+ dist < 0? Options.tc_dangerous :
+ Options.tc_disconnected;
+}
- // If this is an important travel square, don't allow the colour
- // to be overridden.
+static bool _travel_colour_override(const coord_def& p)
+{
if (is_waypoint(p) || travel_point_distance[p.x][p.y] == PD_EXCLUDED)
- return real_colour(tc);
-
- if (item_colour && is_map_knowledge_item(p))
- return get_map_knowledge_col(p);
-
- int feature_colour = DARKGREY;
- const bool terrain_seen = is_terrain_seen(p);
- const feature_def &fdef = get_feature_def(feat_value);
- feature_colour = terrain_seen ? fdef.seen_colour : fdef.map_colour;
-
- if (terrain_seen && fdef.seen_em_colour && emphasise(p))
- feature_colour = fdef.seen_em_colour;
-
- if (feature_colour != DARKGREY)
- tc = feature_colour;
- else if (on_level && you.beheld())
- {
- // If mesmerised, colour the few grids that can be reached anyway
- // lightgrey.
- const monsters *blocker = monster_at(p);
- const bool seen_blocker = blocker && you.can_see(blocker);
- if (grd(p) >= DNGN_MINMOVE && !seen_blocker && !you.get_beholder(p))
- tc = LIGHTGREY;
- }
-
- if (Options.feature_item_brand
- && is_critical_feature(feat_value)
- && igrd(p) != NON_ITEM)
- {
- tc |= COLFLAG_FEATURE_ITEM;
- }
- else if (Options.trap_item_brand
- && feat_is_trap(feat_value) && igrd(p) != NON_ITEM)
- {
- // FIXME: this uses the real igrd, which the player shouldn't
- // be aware of.
- tc |= COLFLAG_TRAP_ITEM;
- }
-
- return real_colour(tc);
+ return (true);
+#ifdef WIZARD
+ if (you.wizard && testbits(env.pgrid(p), FPROP_HIGHLIGHT))
+ return (true);
+#endif
+ show_type obj = get_map_knowledge_obj(p);
+ return (obj.cls == SH_FEATURE && obj.feat == DNGN_FLOOR);
}
-
-
diff --git a/crawl-ref/source/viewmap.h b/crawl-ref/source/viewmap.h
index b5f94ef71b..f667b80979 100644
--- a/crawl-ref/source/viewmap.h
+++ b/crawl-ref/source/viewmap.h
@@ -1,9 +1,6 @@
#ifndef VIEWMAP_H
#define VIEWMAP_H
-screen_buffer_t colour_code_map(const coord_def& p, bool item_colour = false,
- bool travel_colour = false, bool on_level = true);
-
bool emphasise(const coord_def& where);
#endif