summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-11-04 08:36:40 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-11-04 08:45:44 +0100
commit182fb011ad05dafabadf1e3cee27a68f56fa82dc (patch)
tree23668bd598e9c17ab64e6a0fe44a94133e4bc147 /crawl-ref/source
parent89ff79ab008f440bc9126103fc21ed71aac0526f (diff)
downloadcrawl-ref-182fb011ad05dafabadf1e3cee27a68f56fa82dc.tar.gz
crawl-ref-182fb011ad05dafabadf1e3cee27a68f56fa82dc.zip
Move feature_def and Feature array into feature.cc from view.cc.
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/externs.h22
-rw-r--r--crawl-ref/source/feature.cc749
-rw-r--r--crawl-ref/source/feature.h30
-rw-r--r--crawl-ref/source/makefile.obj1
-rw-r--r--crawl-ref/source/overmap.cc1
-rw-r--r--crawl-ref/source/view.cc770
-rw-r--r--crawl-ref/source/view.h3
-rw-r--r--crawl-ref/source/xom.cc1
8 files changed, 797 insertions, 780 deletions
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index 0c7bc73119..c064975b82 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -688,28 +688,6 @@ struct message_colour_mapping
int colour;
};
-struct feature_def
-{
- dungeon_char_type dchar;
- unsigned symbol; // symbol used for seen terrain
- unsigned magic_symbol; // symbol used for magic-mapped terrain
- unsigned short colour; // normal in LoS colour
- unsigned short map_colour; // colour when out of LoS on display
- unsigned short seen_colour; // map_colour when is_terrain_seen()
- unsigned short em_colour; // Emphasised colour when in LoS.
- unsigned short seen_em_colour; // Emphasised colour when out of LoS
- unsigned flags;
- map_feature minimap; // mini-map categorization
-
- bool is_notable() const { return (flags & FFT_NOTABLE); }
-};
-
-struct feature_override
-{
- dungeon_feature_type feat;
- feature_def override;
-};
-
class InvEntry;
typedef int (*item_sort_fn)(const InvEntry *a, const InvEntry *b);
struct item_comparator
diff --git a/crawl-ref/source/feature.cc b/crawl-ref/source/feature.cc
new file mode 100644
index 0000000000..85eab18c94
--- /dev/null
+++ b/crawl-ref/source/feature.cc
@@ -0,0 +1,749 @@
+#include "AppHdr.h"
+
+#include "feature.h"
+
+#include "colour.h"
+#include "fixvec.h"
+#include "options.h"
+
+static FixedVector<feature_def, NUM_FEATURES> Feature;
+
+const feature_def &get_feature_def(dungeon_feature_type feat)
+{
+ return (Feature[feat]);
+}
+
+void apply_feature_overrides()
+{
+ for (int i = 0, size = Options.feature_overrides.size(); i < size; ++i)
+ {
+ const feature_override &fov = Options.feature_overrides[i];
+ const feature_def &ofeat = fov.override;
+ feature_def &feat = Feature[fov.feat];
+
+ if (ofeat.symbol)
+ feat.symbol = ofeat.symbol;
+ if (ofeat.magic_symbol)
+ feat.magic_symbol = ofeat.magic_symbol;
+ if (ofeat.colour)
+ feat.colour = ofeat.colour;
+ if (ofeat.map_colour)
+ feat.map_colour = ofeat.map_colour;
+ if (ofeat.seen_colour)
+ feat.seen_colour = ofeat.seen_colour;
+ if (ofeat.seen_em_colour)
+ feat.seen_em_colour = ofeat.seen_em_colour;
+ if (ofeat.em_colour)
+ feat.em_colour = ofeat.em_colour;
+ }
+}
+
+void init_feature_table(void)
+{
+ for (int i = 0; i < NUM_FEATURES; i++)
+ {
+ Feature[i].dchar = NUM_DCHAR_TYPES;
+ Feature[i].symbol = 0;
+ Feature[i].colour = BLACK; // means must be set some other way
+ Feature[i].flags = FFT_NONE;
+ Feature[i].magic_symbol = 0; // set to symbol if unchanged
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = BLACK; // -> no special seen map handling
+ Feature[i].seen_em_colour = BLACK;
+ Feature[i].em_colour = BLACK;
+ Feature[i].minimap = MF_UNSEEN;
+
+ switch (i)
+ {
+ case DNGN_UNSEEN:
+ default:
+ break;
+
+ case DNGN_ROCK_WALL:
+ case DNGN_PERMAROCK_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = ETC_ROCK;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_STONE_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = ETC_STONE;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_CLEAR_ROCK_WALL:
+ case DNGN_CLEAR_STONE_WALL:
+ case DNGN_CLEAR_PERMAROCK_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].colour = LIGHTCYAN;
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_TREES:
+ Feature[i].dchar = DCHAR_TREES;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].colour = BLACK; // overridden later
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_OPEN_SEA:
+#ifdef USE_TILE
+ Feature[i].dchar = DCHAR_WAVY;
+#else
+ Feature[i].dchar = DCHAR_WALL;
+#endif
+ Feature[i].colour = BLUE;
+ Feature[i].minimap = MF_WATER;
+ break;
+
+ case DNGN_OPEN_DOOR:
+ Feature[i].dchar = DCHAR_DOOR_OPEN;
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].minimap = MF_DOOR;
+ break;
+
+ case DNGN_CLOSED_DOOR:
+ case DNGN_DETECTED_SECRET_DOOR:
+ Feature[i].dchar = DCHAR_DOOR_CLOSED;
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].minimap = MF_DOOR;
+ break;
+
+ case DNGN_METAL_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = CYAN;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_SECRET_DOOR:
+ // Note: get_secret_door_appearance means this probably isn't used.
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = ETC_ROCK;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_GREEN_CRYSTAL_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = GREEN;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_ORCISH_IDOL:
+ Feature[i].dchar = DCHAR_STATUE;
+ Feature[i].colour = BROWN; // same as clay golem, I hope that's okay
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_WAX_WALL:
+ Feature[i].dchar = DCHAR_WALL;
+ Feature[i].colour = YELLOW;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_GRANITE_STATUE:
+ Feature[i].dchar = DCHAR_STATUE;
+ Feature[i].colour = DARKGREY;
+ Feature[i].minimap = MF_WALL;
+ break;
+
+ case DNGN_LAVA:
+ Feature[i].dchar = DCHAR_WAVY;
+ Feature[i].colour = RED;
+ Feature[i].minimap = MF_LAVA;
+ break;
+
+ case DNGN_DEEP_WATER:
+ Feature[i].dchar = DCHAR_WAVY;
+ Feature[i].colour = BLUE;
+ Feature[i].minimap = MF_WATER;
+ break;
+
+ case DNGN_SHALLOW_WATER:
+ Feature[i].dchar = DCHAR_WAVY;
+ Feature[i].colour = CYAN;
+ Feature[i].minimap = MF_WATER;
+ break;
+
+ case DNGN_FLOOR:
+ Feature[i].dchar = DCHAR_FLOOR;
+ Feature[i].colour = ETC_FLOOR;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
+ Feature[i].minimap = MF_FLOOR;
+ break;
+
+ case DNGN_FLOOR_SPECIAL:
+ Feature[i].dchar = DCHAR_FLOOR;
+ Feature[i].colour = YELLOW;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
+ Feature[i].minimap = MF_FLOOR;
+ break;
+
+ case DNGN_EXIT_HELL:
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].colour = LIGHTRED;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = LIGHTRED;
+ Feature[i].minimap = MF_STAIR_UP;
+ break;
+
+ case DNGN_ENTER_HELL:
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].colour = RED;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = RED;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_TRAP_MECHANICAL:
+ Feature[i].colour = LIGHTCYAN;
+ Feature[i].dchar = DCHAR_TRAP;
+ Feature[i].map_colour = LIGHTCYAN;
+ Feature[i].minimap = MF_TRAP;
+ break;
+
+ case DNGN_TRAP_MAGICAL:
+ Feature[i].colour = MAGENTA;
+ Feature[i].dchar = DCHAR_TRAP;
+ Feature[i].map_colour = MAGENTA;
+ Feature[i].minimap = MF_TRAP;
+ break;
+
+ case DNGN_TRAP_NATURAL:
+ Feature[i].colour = BROWN;
+ Feature[i].dchar = DCHAR_TRAP;
+ Feature[i].map_colour = BROWN;
+ Feature[i].minimap = MF_TRAP;
+ break;
+
+ case DNGN_UNDISCOVERED_TRAP:
+ Feature[i].dchar = DCHAR_FLOOR;
+ Feature[i].colour = ETC_FLOOR;
+ Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
+ Feature[i].minimap = MF_FLOOR;
+ break;
+
+ case DNGN_ENTER_SHOP:
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].colour = YELLOW;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = YELLOW;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ABANDONED_SHOP:
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].minimap = MF_FLOOR;
+ break;
+
+ case DNGN_ENTER_LABYRINTH:
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].colour = CYAN;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = CYAN;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_PORTAL_VAULT:
+ Feature[i].flags |= FFT_NOTABLE;
+ // fall through
+
+ case DNGN_EXIT_PORTAL_VAULT:
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].colour = ETC_SHIMMER_BLUE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = ETC_SHIMMER_BLUE;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ESCAPE_HATCH_DOWN:
+ Feature[i].dchar = DCHAR_STAIRS_DOWN;
+ Feature[i].colour = BROWN;
+ Feature[i].map_colour = BROWN;
+ Feature[i].minimap = MF_STAIR_DOWN;
+ break;
+
+ case DNGN_STONE_STAIRS_DOWN_I:
+ case DNGN_STONE_STAIRS_DOWN_II:
+ case DNGN_STONE_STAIRS_DOWN_III:
+ Feature[i].dchar = DCHAR_STAIRS_DOWN;
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].em_colour = WHITE;
+ Feature[i].map_colour = RED;
+ Feature[i].seen_em_colour = WHITE;
+ Feature[i].minimap = MF_STAIR_DOWN;
+ break;
+
+ case DNGN_ESCAPE_HATCH_UP:
+ Feature[i].dchar = DCHAR_STAIRS_UP;
+ Feature[i].colour = BROWN;
+ Feature[i].map_colour = BROWN;
+ Feature[i].minimap = MF_STAIR_UP;
+ break;
+
+ case DNGN_STONE_STAIRS_UP_I:
+ case DNGN_STONE_STAIRS_UP_II:
+ case DNGN_STONE_STAIRS_UP_III:
+ Feature[i].dchar = DCHAR_STAIRS_UP;
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].map_colour = GREEN;
+ Feature[i].em_colour = WHITE;
+ Feature[i].seen_em_colour = WHITE;
+ Feature[i].minimap = MF_STAIR_UP;
+ break;
+
+ case DNGN_ENTER_DIS:
+ Feature[i].colour = CYAN;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = CYAN;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_GEHENNA:
+ Feature[i].colour = RED;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = RED;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_COCYTUS:
+ Feature[i].colour = LIGHTCYAN;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = LIGHTCYAN;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_TARTARUS:
+ Feature[i].colour = DARKGREY;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = DARKGREY;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_ABYSS:
+ Feature[i].colour = ETC_RANDOM;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = ETC_RANDOM;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_EXIT_ABYSS:
+ Feature[i].colour = ETC_RANDOM;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = ETC_RANDOM;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_STONE_ARCH:
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].minimap = MF_FLOOR;
+ break;
+
+ case DNGN_ENTER_PANDEMONIUM:
+ Feature[i].colour = LIGHTBLUE;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = LIGHTBLUE;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_EXIT_PANDEMONIUM:
+ // Note: Has special handling for colouring with mutation.
+ Feature[i].colour = LIGHTBLUE;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = LIGHTBLUE;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_TRANSIT_PANDEMONIUM:
+ Feature[i].colour = LIGHTGREEN;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = LIGHTGREEN;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_ORCISH_MINES:
+ case DNGN_ENTER_HIVE:
+ case DNGN_ENTER_LAIR:
+ case DNGN_ENTER_SLIME_PITS:
+ case DNGN_ENTER_VAULTS:
+ case DNGN_ENTER_CRYPT:
+ case DNGN_ENTER_HALL_OF_BLADES:
+ case DNGN_ENTER_TEMPLE:
+ case DNGN_ENTER_SNAKE_PIT:
+ case DNGN_ENTER_ELVEN_HALLS:
+ case DNGN_ENTER_TOMB:
+ case DNGN_ENTER_SWAMP:
+ case DNGN_ENTER_SHOALS:
+ Feature[i].colour = YELLOW;
+ Feature[i].dchar = DCHAR_STAIRS_DOWN;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = RED;
+ Feature[i].seen_colour = YELLOW;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ENTER_ZOT:
+ Feature[i].colour = MAGENTA;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = MAGENTA;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_RETURN_FROM_ORCISH_MINES:
+ case DNGN_RETURN_FROM_HIVE:
+ case DNGN_RETURN_FROM_LAIR:
+ case DNGN_RETURN_FROM_SLIME_PITS:
+ case DNGN_RETURN_FROM_VAULTS:
+ case DNGN_RETURN_FROM_CRYPT:
+ case DNGN_RETURN_FROM_HALL_OF_BLADES:
+ case DNGN_RETURN_FROM_TEMPLE:
+ case DNGN_RETURN_FROM_SNAKE_PIT:
+ case DNGN_RETURN_FROM_ELVEN_HALLS:
+ case DNGN_RETURN_FROM_TOMB:
+ case DNGN_RETURN_FROM_SWAMP:
+ case DNGN_RETURN_FROM_SHOALS:
+ Feature[i].colour = YELLOW;
+ Feature[i].dchar = DCHAR_STAIRS_UP;
+ Feature[i].map_colour = GREEN;
+ Feature[i].seen_colour = YELLOW;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_RETURN_FROM_ZOT:
+ Feature[i].colour = MAGENTA;
+ Feature[i].dchar = DCHAR_ARCH;
+ Feature[i].map_colour = LIGHTGREY;
+ Feature[i].seen_colour = MAGENTA;
+ Feature[i].minimap = MF_STAIR_BRANCH;
+ break;
+
+ case DNGN_ALTAR_ZIN:
+ Feature[i].colour = WHITE;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = WHITE;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_SHINING_ONE:
+ Feature[i].colour = YELLOW;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = YELLOW;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_KIKUBAAQUDGHA:
+ Feature[i].colour = DARKGREY;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = DARKGREY;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_YREDELEMNUL:
+ Feature[i].colour = ETC_UNHOLY;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_UNHOLY;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_XOM:
+ Feature[i].colour = ETC_RANDOM;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_RANDOM;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_VEHUMET:
+ Feature[i].colour = ETC_VEHUMET;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_VEHUMET;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_OKAWARU:
+ Feature[i].colour = CYAN;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = CYAN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_MAKHLEB:
+ Feature[i].colour = ETC_FIRE;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_FIRE;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_SIF_MUNA:
+ Feature[i].colour = BLUE;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = BLUE;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_TROG:
+ Feature[i].colour = RED;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = RED;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_NEMELEX_XOBEH:
+ Feature[i].colour = LIGHTMAGENTA;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = LIGHTMAGENTA;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_ELYVILON:
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = LIGHTGREY;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_LUGONU:
+ Feature[i].colour = MAGENTA;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = MAGENTA;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_BEOGH:
+ Feature[i].colour = ETC_BEOGH;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_BEOGH;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_JIYVA:
+ Feature[i].colour = ETC_SLIME;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = ETC_SLIME;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_FEAWN:
+ Feature[i].colour = GREEN;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = GREEN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_ALTAR_CHEIBRIADOS:
+ Feature[i].colour = LIGHTCYAN;
+ Feature[i].dchar = DCHAR_ALTAR;
+ Feature[i].flags |= FFT_NOTABLE;
+ Feature[i].map_colour = DARKGREY;
+ Feature[i].seen_colour = LIGHTCYAN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_FOUNTAIN_BLUE:
+ Feature[i].colour = BLUE;
+ Feature[i].dchar = DCHAR_FOUNTAIN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_FOUNTAIN_SPARKLING:
+ Feature[i].colour = LIGHTBLUE;
+ Feature[i].dchar = DCHAR_FOUNTAIN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_FOUNTAIN_BLOOD:
+ Feature[i].colour = RED;
+ Feature[i].dchar = DCHAR_FOUNTAIN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_DRY_FOUNTAIN_BLUE:
+ case DNGN_DRY_FOUNTAIN_SPARKLING:
+ case DNGN_DRY_FOUNTAIN_BLOOD:
+ case DNGN_PERMADRY_FOUNTAIN:
+ Feature[i].colour = LIGHTGREY;
+ Feature[i].dchar = DCHAR_FOUNTAIN;
+ Feature[i].minimap = MF_FEATURE;
+ break;
+
+ case DNGN_INVIS_EXPOSED:
+ Feature[i].dchar = DCHAR_INVIS_EXPOSED;
+ Feature[i].minimap = MF_MONS_HOSTILE;
+ break;
+
+ case DNGN_ITEM_DETECTED:
+ Feature[i].dchar = DCHAR_ITEM_DETECTED;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_ORB:
+ Feature[i].dchar = DCHAR_ITEM_ORB;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_WEAPON:
+ Feature[i].dchar = DCHAR_ITEM_WEAPON;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_ARMOUR:
+ Feature[i].dchar = DCHAR_ITEM_ARMOUR;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_WAND:
+ Feature[i].dchar = DCHAR_ITEM_WAND;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_FOOD:
+ Feature[i].dchar = DCHAR_ITEM_FOOD;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_SCROLL:
+ Feature[i].dchar = DCHAR_ITEM_SCROLL;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_RING:
+ Feature[i].dchar = DCHAR_ITEM_RING;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_POTION:
+ Feature[i].dchar = DCHAR_ITEM_POTION;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_MISSILE:
+ Feature[i].dchar = DCHAR_ITEM_MISSILE;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_BOOK:
+ Feature[i].dchar = DCHAR_ITEM_BOOK;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_STAVE:
+ Feature[i].dchar = DCHAR_ITEM_STAVE;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_MISCELLANY:
+ Feature[i].dchar = DCHAR_ITEM_MISCELLANY;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_CORPSE:
+ Feature[i].dchar = DCHAR_ITEM_CORPSE;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_GOLD:
+ Feature[i].dchar = DCHAR_ITEM_GOLD;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_ITEM_AMULET:
+ Feature[i].dchar = DCHAR_ITEM_AMULET;
+ Feature[i].minimap = MF_ITEM;
+ break;
+
+ case DNGN_CLOUD:
+ Feature[i].dchar = DCHAR_CLOUD;
+ Feature[i].minimap = MF_SKIP;
+ break;
+ }
+
+ if (i == DNGN_ENTER_ORCISH_MINES || i == DNGN_ENTER_SLIME_PITS
+ || i == DNGN_ENTER_LABYRINTH)
+ {
+ Feature[i].flags |= FFT_EXAMINE_HINT;
+ }
+
+ if (Feature[i].dchar != NUM_DCHAR_TYPES)
+ Feature[i].symbol = Options.char_table[ Feature[i].dchar ];
+ }
+
+ apply_feature_overrides();
+
+ for (int i = 0; i < NUM_FEATURES; ++i)
+ {
+ feature_def &f(Feature[i]);
+
+ if (!f.magic_symbol)
+ f.magic_symbol = f.symbol;
+
+ if (f.seen_colour == BLACK)
+ f.seen_colour = f.map_colour;
+
+ if (f.seen_em_colour == BLACK)
+ f.seen_em_colour = f.seen_colour;
+
+ if (f.em_colour == BLACK)
+ f.em_colour = f.colour;
+ }
+}
diff --git a/crawl-ref/source/feature.h b/crawl-ref/source/feature.h
new file mode 100644
index 0000000000..f9a7115693
--- /dev/null
+++ b/crawl-ref/source/feature.h
@@ -0,0 +1,30 @@
+#ifndef FEATURE_H
+#define FEATURE_H
+
+struct feature_def
+{
+ dungeon_char_type dchar;
+ unsigned symbol; // symbol used for seen terrain
+ unsigned magic_symbol; // symbol used for magic-mapped terrain
+ unsigned short colour; // normal in LoS colour
+ unsigned short map_colour; // colour when out of LoS on display
+ unsigned short seen_colour; // map_colour when is_terrain_seen()
+ unsigned short em_colour; // Emphasised colour when in LoS.
+ unsigned short seen_em_colour; // Emphasised colour when out of LoS
+ unsigned flags;
+ map_feature minimap; // mini-map categorization
+
+ bool is_notable() const { return (flags & FFT_NOTABLE); }
+};
+
+struct feature_override
+{
+ dungeon_feature_type feat;
+ feature_def override;
+};
+
+const feature_def &get_feature_def(dungeon_feature_type feat);
+
+void init_feature_table();
+
+#endif
diff --git a/crawl-ref/source/makefile.obj b/crawl-ref/source/makefile.obj
index 183a392cd3..b47df8f2a3 100644
--- a/crawl-ref/source/makefile.obj
+++ b/crawl-ref/source/makefile.obj
@@ -29,6 +29,7 @@ dlua.o \
dungeon.o \
effects.o \
exclude.o \
+feature.o \
fight.o \
files.o \
food.o \
diff --git a/crawl-ref/source/overmap.cc b/crawl-ref/source/overmap.cc
index 523989d022..7c33da7f73 100644
--- a/crawl-ref/source/overmap.cc
+++ b/crawl-ref/source/overmap.cc
@@ -25,6 +25,7 @@
#include "dgnevent.h"
#include "directn.h"
#include "dungeon.h"
+#include "feature.h"
#include "files.h"
#include "initfile.h"
#include "menu.h"
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index 358db488bb..057591bbba 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -35,6 +35,7 @@
#include "directn.h"
#include "dungeon.h"
#include "exclude.h"
+#include "feature.h"
#include "files.h"
#include "format.h"
#include "ghost.h"
@@ -86,8 +87,6 @@
#define MC_ITEM 0x01
#define MC_MONS 0x02
-static FixedVector<feature_def, NUM_FEATURES> Feature;
-
crawl_view_geometry crawl_view;
FixedArray < unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER > Show_Backup;
@@ -110,11 +109,6 @@ static int _get_item_dngn_code(const item_def &item);
static void _set_show_backup( int ex, int ey );
static int _get_viewobj_flags(int viewobj);
-const feature_def &get_feature_def(dungeon_feature_type feat)
-{
- return (Feature[feat]);
-}
-
unsigned map_cell::glyph() const
{
if (!object)
@@ -349,7 +343,7 @@ void clear_envmap_grid( int x, int y )
bool is_notable_terrain(dungeon_feature_type ftype)
{
- return (Feature[ftype].is_notable());
+ return (get_feature_def(ftype).is_notable());
}
#if defined(TARGET_OS_WINDOWS) || defined(TARGET_OS_DOS) || defined(USE_TILE)
@@ -466,7 +460,7 @@ static void _get_symbol( const coord_def& where,
{
const dungeon_feature_type feat =
static_cast<dungeon_feature_type>(object);
- const feature_def &fdef = Feature[object];
+ const feature_def &fdef = get_feature_def(feat);
*ch = magic_mapped? fdef.magic_symbol
: fdef.symbol;
@@ -586,11 +580,12 @@ void get_item_symbol(unsigned int object, unsigned *ch,
{
if (object < NUM_FEATURES)
{
- *ch = Feature[object].symbol;
+ dungeon_feature_type feat = static_cast<dungeon_feature_type>(object);
+ *ch = get_feature_def(feat).symbol;
// Don't clobber with BLACK, because the colour should be already set.
- if (Feature[object].colour != BLACK)
- *colour = Feature[object].colour;
+ if (get_feature_def(feat).colour != BLACK)
+ *colour = get_feature_def(feat).colour;
}
*colour = real_colour(*colour);
@@ -598,21 +593,21 @@ void get_item_symbol(unsigned int object, unsigned *ch,
dungeon_char_type get_feature_dchar( dungeon_feature_type feat )
{
- return (Feature[feat].dchar);
+ return (get_feature_def(feat).dchar);
}
-unsigned get_sightmap_char( int feature )
+unsigned get_sightmap_char(dungeon_feature_type feature)
{
if (feature < NUM_FEATURES)
- return (Feature[feature].symbol);
+ return (get_feature_def(feature).symbol);
return (0);
}
-unsigned get_magicmap_char( int feature )
+unsigned get_magicmap_char(dungeon_feature_type feature)
{
if (feature < NUM_FEATURES)
- return (Feature[feature].magic_symbol);
+ return (get_feature_def(feature).magic_symbol);
return (0);
}
@@ -752,7 +747,7 @@ screen_buffer_t colour_code_map(const coord_def& p, bool item_colour,
int feature_colour = DARKGREY;
const bool terrain_seen = is_terrain_seen(p);
- const feature_def &fdef = Feature[feat_value];
+ 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, feat_value))
@@ -3391,741 +3386,6 @@ unsigned dchar_glyph(dungeon_char_type dchar)
return (Options.char_table[dchar]);
}
-void apply_feature_overrides()
-{
- for (int i = 0, size = Options.feature_overrides.size(); i < size; ++i)
- {
- const feature_override &fov = Options.feature_overrides[i];
- const feature_def &ofeat = fov.override;
- feature_def &feat = Feature[fov.feat];
-
- if (ofeat.symbol)
- feat.symbol = ofeat.symbol;
- if (ofeat.magic_symbol)
- feat.magic_symbol = ofeat.magic_symbol;
- if (ofeat.colour)
- feat.colour = ofeat.colour;
- if (ofeat.map_colour)
- feat.map_colour = ofeat.map_colour;
- if (ofeat.seen_colour)
- feat.seen_colour = ofeat.seen_colour;
- if (ofeat.seen_em_colour)
- feat.seen_em_colour = ofeat.seen_em_colour;
- if (ofeat.em_colour)
- feat.em_colour = ofeat.em_colour;
- }
-}
-
-void init_feature_table( void )
-{
- for (int i = 0; i < NUM_FEATURES; i++)
- {
- Feature[i].dchar = NUM_DCHAR_TYPES;
- Feature[i].symbol = 0;
- Feature[i].colour = BLACK; // means must be set some other way
- Feature[i].flags = FFT_NONE;
- Feature[i].magic_symbol = 0; // set to symbol if unchanged
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = BLACK; // -> no special seen map handling
- Feature[i].seen_em_colour = BLACK;
- Feature[i].em_colour = BLACK;
- Feature[i].minimap = MF_UNSEEN;
-
- switch (i)
- {
- case DNGN_UNSEEN:
- default:
- break;
-
- case DNGN_ROCK_WALL:
- case DNGN_PERMAROCK_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = ETC_ROCK;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_STONE_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = ETC_STONE;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_CLEAR_ROCK_WALL:
- case DNGN_CLEAR_STONE_WALL:
- case DNGN_CLEAR_PERMAROCK_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].colour = LIGHTCYAN;
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_TREES:
- Feature[i].dchar = DCHAR_TREES;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].colour = BLACK; // overridden later
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_OPEN_SEA:
-#ifdef USE_TILE
- Feature[i].dchar = DCHAR_WAVY;
-#else
- Feature[i].dchar = DCHAR_WALL;
-#endif
- Feature[i].colour = BLUE;
- Feature[i].minimap = MF_WATER;
- break;
-
- case DNGN_OPEN_DOOR:
- Feature[i].dchar = DCHAR_DOOR_OPEN;
- Feature[i].colour = LIGHTGREY;
- Feature[i].minimap = MF_DOOR;
- break;
-
- case DNGN_CLOSED_DOOR:
- case DNGN_DETECTED_SECRET_DOOR:
- Feature[i].dchar = DCHAR_DOOR_CLOSED;
- Feature[i].colour = LIGHTGREY;
- Feature[i].minimap = MF_DOOR;
- break;
-
- case DNGN_METAL_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = CYAN;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_SECRET_DOOR:
- // Note: get_secret_door_appearance means this probably isn't used.
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = ETC_ROCK;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_GREEN_CRYSTAL_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = GREEN;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_ORCISH_IDOL:
- Feature[i].dchar = DCHAR_STATUE;
- Feature[i].colour = BROWN; // same as clay golem, I hope that's okay
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_WAX_WALL:
- Feature[i].dchar = DCHAR_WALL;
- Feature[i].colour = YELLOW;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_WALL_MAGIC ];
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_GRANITE_STATUE:
- Feature[i].dchar = DCHAR_STATUE;
- Feature[i].colour = DARKGREY;
- Feature[i].minimap = MF_WALL;
- break;
-
- case DNGN_LAVA:
- Feature[i].dchar = DCHAR_WAVY;
- Feature[i].colour = RED;
- Feature[i].minimap = MF_LAVA;
- break;
-
- case DNGN_DEEP_WATER:
- Feature[i].dchar = DCHAR_WAVY;
- Feature[i].colour = BLUE;
- Feature[i].minimap = MF_WATER;
- break;
-
- case DNGN_SHALLOW_WATER:
- Feature[i].dchar = DCHAR_WAVY;
- Feature[i].colour = CYAN;
- Feature[i].minimap = MF_WATER;
- break;
-
- case DNGN_FLOOR:
- Feature[i].dchar = DCHAR_FLOOR;
- Feature[i].colour = ETC_FLOOR;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
- Feature[i].minimap = MF_FLOOR;
- break;
-
- case DNGN_FLOOR_SPECIAL:
- Feature[i].dchar = DCHAR_FLOOR;
- Feature[i].colour = YELLOW;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
- Feature[i].minimap = MF_FLOOR;
- break;
-
- case DNGN_EXIT_HELL:
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].colour = LIGHTRED;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = LIGHTRED;
- Feature[i].minimap = MF_STAIR_UP;
- break;
-
- case DNGN_ENTER_HELL:
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].colour = RED;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = RED;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_TRAP_MECHANICAL:
- Feature[i].colour = LIGHTCYAN;
- Feature[i].dchar = DCHAR_TRAP;
- Feature[i].map_colour = LIGHTCYAN;
- Feature[i].minimap = MF_TRAP;
- break;
-
- case DNGN_TRAP_MAGICAL:
- Feature[i].colour = MAGENTA;
- Feature[i].dchar = DCHAR_TRAP;
- Feature[i].map_colour = MAGENTA;
- Feature[i].minimap = MF_TRAP;
- break;
-
- case DNGN_TRAP_NATURAL:
- Feature[i].colour = BROWN;
- Feature[i].dchar = DCHAR_TRAP;
- Feature[i].map_colour = BROWN;
- Feature[i].minimap = MF_TRAP;
- break;
-
- case DNGN_UNDISCOVERED_TRAP:
- Feature[i].dchar = DCHAR_FLOOR;
- Feature[i].colour = ETC_FLOOR;
- Feature[i].magic_symbol = Options.char_table[ DCHAR_FLOOR_MAGIC ];
- Feature[i].minimap = MF_FLOOR;
- break;
-
- case DNGN_ENTER_SHOP:
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].colour = YELLOW;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = YELLOW;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ABANDONED_SHOP:
- Feature[i].colour = LIGHTGREY;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].minimap = MF_FLOOR;
- break;
-
- case DNGN_ENTER_LABYRINTH:
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].colour = CYAN;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = CYAN;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_PORTAL_VAULT:
- Feature[i].flags |= FFT_NOTABLE;
- // fall through
-
- case DNGN_EXIT_PORTAL_VAULT:
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].colour = ETC_SHIMMER_BLUE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = ETC_SHIMMER_BLUE;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ESCAPE_HATCH_DOWN:
- Feature[i].dchar = DCHAR_STAIRS_DOWN;
- Feature[i].colour = BROWN;
- Feature[i].map_colour = BROWN;
- Feature[i].minimap = MF_STAIR_DOWN;
- break;
-
- case DNGN_STONE_STAIRS_DOWN_I:
- case DNGN_STONE_STAIRS_DOWN_II:
- case DNGN_STONE_STAIRS_DOWN_III:
- Feature[i].dchar = DCHAR_STAIRS_DOWN;
- Feature[i].colour = LIGHTGREY;
- Feature[i].em_colour = WHITE;
- Feature[i].map_colour = RED;
- Feature[i].seen_em_colour = WHITE;
- Feature[i].minimap = MF_STAIR_DOWN;
- break;
-
- case DNGN_ESCAPE_HATCH_UP:
- Feature[i].dchar = DCHAR_STAIRS_UP;
- Feature[i].colour = BROWN;
- Feature[i].map_colour = BROWN;
- Feature[i].minimap = MF_STAIR_UP;
- break;
-
- case DNGN_STONE_STAIRS_UP_I:
- case DNGN_STONE_STAIRS_UP_II:
- case DNGN_STONE_STAIRS_UP_III:
- Feature[i].dchar = DCHAR_STAIRS_UP;
- Feature[i].colour = LIGHTGREY;
- Feature[i].map_colour = GREEN;
- Feature[i].em_colour = WHITE;
- Feature[i].seen_em_colour = WHITE;
- Feature[i].minimap = MF_STAIR_UP;
- break;
-
- case DNGN_ENTER_DIS:
- Feature[i].colour = CYAN;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = CYAN;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_GEHENNA:
- Feature[i].colour = RED;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = RED;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_COCYTUS:
- Feature[i].colour = LIGHTCYAN;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = LIGHTCYAN;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_TARTARUS:
- Feature[i].colour = DARKGREY;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = DARKGREY;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_ABYSS:
- Feature[i].colour = ETC_RANDOM;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = ETC_RANDOM;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_EXIT_ABYSS:
- Feature[i].colour = ETC_RANDOM;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = ETC_RANDOM;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_STONE_ARCH:
- Feature[i].colour = LIGHTGREY;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].minimap = MF_FLOOR;
- break;
-
- case DNGN_ENTER_PANDEMONIUM:
- Feature[i].colour = LIGHTBLUE;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = LIGHTBLUE;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_EXIT_PANDEMONIUM:
- // Note: Has special handling for colouring with mutation.
- Feature[i].colour = LIGHTBLUE;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = LIGHTBLUE;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_TRANSIT_PANDEMONIUM:
- Feature[i].colour = LIGHTGREEN;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = LIGHTGREEN;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_ORCISH_MINES:
- case DNGN_ENTER_HIVE:
- case DNGN_ENTER_LAIR:
- case DNGN_ENTER_SLIME_PITS:
- case DNGN_ENTER_VAULTS:
- case DNGN_ENTER_CRYPT:
- case DNGN_ENTER_HALL_OF_BLADES:
- case DNGN_ENTER_TEMPLE:
- case DNGN_ENTER_SNAKE_PIT:
- case DNGN_ENTER_ELVEN_HALLS:
- case DNGN_ENTER_TOMB:
- case DNGN_ENTER_SWAMP:
- case DNGN_ENTER_SHOALS:
- Feature[i].colour = YELLOW;
- Feature[i].dchar = DCHAR_STAIRS_DOWN;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = RED;
- Feature[i].seen_colour = YELLOW;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ENTER_ZOT:
- Feature[i].colour = MAGENTA;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = MAGENTA;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_RETURN_FROM_ORCISH_MINES:
- case DNGN_RETURN_FROM_HIVE:
- case DNGN_RETURN_FROM_LAIR:
- case DNGN_RETURN_FROM_SLIME_PITS:
- case DNGN_RETURN_FROM_VAULTS:
- case DNGN_RETURN_FROM_CRYPT:
- case DNGN_RETURN_FROM_HALL_OF_BLADES:
- case DNGN_RETURN_FROM_TEMPLE:
- case DNGN_RETURN_FROM_SNAKE_PIT:
- case DNGN_RETURN_FROM_ELVEN_HALLS:
- case DNGN_RETURN_FROM_TOMB:
- case DNGN_RETURN_FROM_SWAMP:
- case DNGN_RETURN_FROM_SHOALS:
- Feature[i].colour = YELLOW;
- Feature[i].dchar = DCHAR_STAIRS_UP;
- Feature[i].map_colour = GREEN;
- Feature[i].seen_colour = YELLOW;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_RETURN_FROM_ZOT:
- Feature[i].colour = MAGENTA;
- Feature[i].dchar = DCHAR_ARCH;
- Feature[i].map_colour = LIGHTGREY;
- Feature[i].seen_colour = MAGENTA;
- Feature[i].minimap = MF_STAIR_BRANCH;
- break;
-
- case DNGN_ALTAR_ZIN:
- Feature[i].colour = WHITE;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = WHITE;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_SHINING_ONE:
- Feature[i].colour = YELLOW;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = YELLOW;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_KIKUBAAQUDGHA:
- Feature[i].colour = DARKGREY;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = DARKGREY;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_YREDELEMNUL:
- Feature[i].colour = ETC_UNHOLY;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_UNHOLY;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_XOM:
- Feature[i].colour = ETC_RANDOM;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_RANDOM;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_VEHUMET:
- Feature[i].colour = ETC_VEHUMET;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_VEHUMET;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_OKAWARU:
- Feature[i].colour = CYAN;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = CYAN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_MAKHLEB:
- Feature[i].colour = ETC_FIRE;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_FIRE;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_SIF_MUNA:
- Feature[i].colour = BLUE;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = BLUE;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_TROG:
- Feature[i].colour = RED;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = RED;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_NEMELEX_XOBEH:
- Feature[i].colour = LIGHTMAGENTA;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = LIGHTMAGENTA;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_ELYVILON:
- Feature[i].colour = LIGHTGREY;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = LIGHTGREY;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_LUGONU:
- Feature[i].colour = MAGENTA;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = MAGENTA;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_BEOGH:
- Feature[i].colour = ETC_BEOGH;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_BEOGH;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_JIYVA:
- Feature[i].colour = ETC_SLIME;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = ETC_SLIME;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_FEAWN:
- Feature[i].colour = GREEN;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = GREEN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_ALTAR_CHEIBRIADOS:
- Feature[i].colour = LIGHTCYAN;
- Feature[i].dchar = DCHAR_ALTAR;
- Feature[i].flags |= FFT_NOTABLE;
- Feature[i].map_colour = DARKGREY;
- Feature[i].seen_colour = LIGHTCYAN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_FOUNTAIN_BLUE:
- Feature[i].colour = BLUE;
- Feature[i].dchar = DCHAR_FOUNTAIN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_FOUNTAIN_SPARKLING:
- Feature[i].colour = LIGHTBLUE;
- Feature[i].dchar = DCHAR_FOUNTAIN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_FOUNTAIN_BLOOD:
- Feature[i].colour = RED;
- Feature[i].dchar = DCHAR_FOUNTAIN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_DRY_FOUNTAIN_BLUE:
- case DNGN_DRY_FOUNTAIN_SPARKLING:
- case DNGN_DRY_FOUNTAIN_BLOOD:
- case DNGN_PERMADRY_FOUNTAIN:
- Feature[i].colour = LIGHTGREY;
- Feature[i].dchar = DCHAR_FOUNTAIN;
- Feature[i].minimap = MF_FEATURE;
- break;
-
- case DNGN_INVIS_EXPOSED:
- Feature[i].dchar = DCHAR_INVIS_EXPOSED;
- Feature[i].minimap = MF_MONS_HOSTILE;
- break;
-
- case DNGN_ITEM_DETECTED:
- Feature[i].dchar = DCHAR_ITEM_DETECTED;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_ORB:
- Feature[i].dchar = DCHAR_ITEM_ORB;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_WEAPON:
- Feature[i].dchar = DCHAR_ITEM_WEAPON;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_ARMOUR:
- Feature[i].dchar = DCHAR_ITEM_ARMOUR;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_WAND:
- Feature[i].dchar = DCHAR_ITEM_WAND;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_FOOD:
- Feature[i].dchar = DCHAR_ITEM_FOOD;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_SCROLL:
- Feature[i].dchar = DCHAR_ITEM_SCROLL;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_RING:
- Feature[i].dchar = DCHAR_ITEM_RING;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_POTION:
- Feature[i].dchar = DCHAR_ITEM_POTION;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_MISSILE:
- Feature[i].dchar = DCHAR_ITEM_MISSILE;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_BOOK:
- Feature[i].dchar = DCHAR_ITEM_BOOK;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_STAVE:
- Feature[i].dchar = DCHAR_ITEM_STAVE;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_MISCELLANY:
- Feature[i].dchar = DCHAR_ITEM_MISCELLANY;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_CORPSE:
- Feature[i].dchar = DCHAR_ITEM_CORPSE;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_GOLD:
- Feature[i].dchar = DCHAR_ITEM_GOLD;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_ITEM_AMULET:
- Feature[i].dchar = DCHAR_ITEM_AMULET;
- Feature[i].minimap = MF_ITEM;
- break;
-
- case DNGN_CLOUD:
- Feature[i].dchar = DCHAR_CLOUD;
- Feature[i].minimap = MF_SKIP;
- break;
- }
-
- if (i == DNGN_ENTER_ORCISH_MINES || i == DNGN_ENTER_SLIME_PITS
- || i == DNGN_ENTER_LABYRINTH)
- {
- Feature[i].flags |= FFT_EXAMINE_HINT;
- }
-
- if (Feature[i].dchar != NUM_DCHAR_TYPES)
- Feature[i].symbol = Options.char_table[ Feature[i].dchar ];
- }
-
- apply_feature_overrides();
-
- for (int i = 0; i < NUM_FEATURES; ++i)
- {
- feature_def &f(Feature[i]);
-
- if (!f.magic_symbol)
- f.magic_symbol = f.symbol;
-
- if (f.seen_colour == BLACK)
- f.seen_colour = f.map_colour;
-
- if (f.seen_em_colour == BLACK)
- f.seen_em_colour = f.seen_colour;
-
- if (f.em_colour == BLACK)
- f.em_colour = f.colour;
- }
-}
-
unsigned get_screen_glyph( int x, int y )
{
return get_screen_glyph(coord_def(x,y));
@@ -4166,9 +3426,9 @@ int multibyte_strlen(const std::string &s)
// is set to false, only the viewable area is returned. Leading and trailing
// spaces are trimmed from each line. Leading and trailing empty lines are also
// snipped.
-std::string screenshot( bool fullscreen )
+std::string screenshot(bool fullscreen)
{
- UNUSED( fullscreen );
+ UNUSED(fullscreen);
// [ds] Screenshots need to be straight ASCII. We will now proceed to force
// the char and feature tables back to ASCII.
diff --git a/crawl-ref/source/view.h b/crawl-ref/source/view.h
index c2815302a7..88b2958a79 100644
--- a/crawl-ref/source/view.h
+++ b/crawl-ref/source/view.h
@@ -11,7 +11,6 @@
#include "externs.h"
void init_char_table(char_set_type set);
-void init_feature_table();
void init_monsters_seens();
void beogh_follower_convert(monsters *monster, bool orc_hit = false);
@@ -57,8 +56,6 @@ void get_item_symbol(unsigned int object, unsigned *ch,
unsigned real_colour(unsigned raw_colour);
int get_mons_colour(const monsters *mons);
-const feature_def &get_feature_def(dungeon_feature_type feat);
-
void set_envmap_obj( const coord_def& where, int object );
unsigned get_envmap_char(int x, int y);
inline unsigned get_envmap_char(const coord_def& c) {
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 6cc4cc214e..17bd18b9f0 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -15,6 +15,7 @@
#include "delay.h"
#include "directn.h"
#include "effects.h"
+#include "feature.h"
#include "goditem.h"
#include "it_use2.h"
#include "items.h"