summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/rltiles/tool
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-01 02:22:31 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-01 02:22:31 +0000
commit2e4aeb705dc8383ddc846ea17613251df8601847 (patch)
treedca212cd8072eccc0fc259a3a677bafc739ecee8 /crawl-ref/source/rltiles/tool
parenta2bd3ea6e687bee89ff41074c713af99e8bd9886 (diff)
downloadcrawl-ref-2e4aeb705dc8383ddc846ea17613251df8601847.tar.gz
crawl-ref-2e4aeb705dc8383ddc846ea17613251df8601847.zip
[2054793] Partial implementation of the request to have COLOUR tags affect tile choice. Vaults can now override the default tileset (walls and floors) for an entire level. This has been pushed to vaults where it makes sense (sewers, ice caves, ziggurats, bazaars, Shoals:5, Zot).
ROCKTILE and FLOORTILE can be used when authoring vaults to set these values, both of which take a single tile name as a string. These values are ignored in console builds. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7700 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/rltiles/tool')
-rw-r--r--crawl-ref/source/rltiles/tool/tile_list_processor.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/crawl-ref/source/rltiles/tool/tile_list_processor.cc b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
index e0f8628a23..4f43f20793 100644
--- a/crawl-ref/source/rltiles/tool/tile_list_processor.cc
+++ b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
@@ -607,6 +607,8 @@ bool tile_list_processor::write_data()
lcname.c_str());
fprintf(fp, "tile_info &tile_%s_info(unsigned int idx);\n",
lcname.c_str());
+ fprintf(fp, "bool tile_%s_index(const char *str, unsigned int &idx);\n",
+ lcname.c_str());
if (m_categories.size() > 0)
{
@@ -644,6 +646,10 @@ bool tile_list_processor::write_data()
fprintf(fp, "// This file has been automatically generated.\n\n");
fprintf(fp, "#include \"tiledef-%s.h\"\n\n", lcname.c_str());
+ fprintf(fp, "#include <map>\n");
+ fprintf(fp, "#include <string>\n");
+ fprintf(fp, "#include <assert.h>\n");
+ fprintf(fp, "using namespace std;\n");
fprintf(fp, "int _tile_%s_count[%s - %s] =\n{\n",
lcname.c_str(), max.c_str(), m_start_value.c_str());
@@ -720,6 +726,56 @@ bool tile_list_processor::write_data()
fprintf(fp, "};\n\n");
}
+
+ fprintf(fp, "\nclass tile_%s_map : public map<string, int>\n"
+ "{\n"
+ "public:\n"
+ " tile_%s_map();\n"
+ "} %s_name_map;\n\n",
+ lcname.c_str(), lcname.c_str(), lcname.c_str());
+
+ fprintf(fp,
+ "tile_%s_map::tile_%s_map()\n"
+ "{\n"
+ " map<string, int>::iterator itr = begin();\n",
+ lcname.c_str(), lcname.c_str());
+
+ for (unsigned int i = 0; i < m_page.m_tiles.size(); i++)
+ {
+ const std::string &enumname = m_page.m_tiles[i]->enumname();
+ // Filler can't be looked up.
+ if (enumname.empty())
+ continue;
+
+ std::string lcenum = enumname;
+ for (unsigned int c = 0; c < enumname.size(); c++)
+ lcenum[c] = std::tolower(enumname[c]);
+
+ fprintf(fp, " insert(itr, map<string, int>::value_type(\"%s\", %d + %s));\n",
+ lcenum.c_str(), i, m_start_value.c_str());
+ }
+
+ fprintf(fp, "}\n\n");
+
+ fprintf(fp,
+ "bool tile_%s_index(const char *str, unsigned int &idx)\n"
+ "{\n"
+ " assert(str);\n"
+ " if (!str)\n"
+ " return false;\n"
+ "\n"
+ " string lc = str;\n"
+ " for (unsigned int i = 0; i < lc.size(); i++)\n"
+ " lc[i] = tolower(lc[i]);\n"
+ "\n"
+ " map<string, int>::const_iterator itr = %s_name_map.find(lc);\n"
+ " if (itr == %s_name_map.end())\n"
+ " return false;\n"
+ "\n"
+ " idx = itr->second;\n"
+ " return true;\n"
+ "}\n",
+ lcname.c_str(), lcname.c_str(), lcname.c_str());
}
delete[] part_min;