diff options
-rw-r--r-- | crawl-ref/source/map_knowledge.cc | 13 | ||||
-rw-r--r-- | crawl-ref/source/show.cc | 16 | ||||
-rw-r--r-- | crawl-ref/source/show.h | 4 | ||||
-rw-r--r-- | crawl-ref/source/spells2.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/view.cc | 10 | ||||
-rw-r--r-- | crawl-ref/source/viewmap.cc | 132 | ||||
-rw-r--r-- | crawl-ref/source/viewmap.h | 3 |
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 |