summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/terrain.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-06 09:54:50 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-06 09:54:50 +0000
commit47173f1092b4f4f3bdc0da19d6dc4553f62cdee7 (patch)
treeb5d87980beec66a00b2314ca94475ac2715e71ae /crawl-ref/source/terrain.cc
parent7640ea1ef75cecb46066e956ec446038c884643c (diff)
downloadcrawl-ref-47173f1092b4f4f3bdc0da19d6dc4553f62cdee7.tar.gz
crawl-ref-47173f1092b4f4f3bdc0da19d6dc4553f62cdee7.zip
"?/" can now be used to look up items. A side effect of this is that
item descriptions have been moved to dat/descript/items.txt and dat/descript/unident.txt. STL maps are now used to look up exact matches for the names of monsters, features and spells, so that looking them up with "?/" won't get too slow if there's a large descriptions DB and each key has to be tested if its a monster/spell/etc. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3009 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/terrain.cc')
-rw-r--r--crawl-ref/source/terrain.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc
index fd0a9e0ff6..79e10609ae 100644
--- a/crawl-ref/source/terrain.cc
+++ b/crawl-ref/source/terrain.cc
@@ -16,6 +16,7 @@
#include "terrain.h"
#include "dgnevent.h"
+#include "direct.h"
#include "itemprop.h"
#include "items.h"
#include "message.h"
@@ -554,3 +555,33 @@ bool fall_into_a_pool( int entry_x, int entry_y, bool allow_shift,
return (false);
} // end fall_into_a_pool()
+typedef std::map<std::string, dungeon_feature_type> feat_desc_map;
+static feat_desc_map feat_desc_cache;
+
+void init_feat_desc_cache()
+{
+ for (int i = 0; i < NUM_FEATURES; i++)
+ {
+ dungeon_feature_type grid = static_cast<dungeon_feature_type>(i);
+ std::string desc = feature_description(grid);
+
+ lowercase(desc);
+ if (feat_desc_cache.find(desc) == feat_desc_cache.end())
+ feat_desc_cache[desc] = grid;
+ }
+}
+
+dungeon_feature_type feat_by_desc(std::string desc)
+{
+ lowercase(desc);
+
+ if (desc[desc.size() - 1] != '.')
+ desc += ".";
+
+ feat_desc_map::iterator i = feat_desc_cache.find(desc);
+
+ if (i != feat_desc_cache.end())
+ return (i->second);
+
+ return (DNGN_UNSEEN);
+}