summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/rltiles/tool
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-06 03:13:34 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-06 03:13:34 +0000
commita8a183dca9dfa75807dadc556e84b20aab993ce8 (patch)
treef2dcca4db96304a94b07c9282cd02a71f43f64a3 /crawl-ref/source/rltiles/tool
parent7349eedd00eabe85d7e76e457011d48522b97593 (diff)
downloadcrawl-ref-a8a183dca9dfa75807dadc556e84b20aab993ce8.tar.gz
crawl-ref-a8a183dca9dfa75807dadc556e84b20aab993ce8.zip
Tiles mcache improvements. Monsters out of sight are now shown with their last seen equipment. Player ghosts are now drawn correctly again. Denzi's new 48x32 pandemonium demon tiles are now used.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6875 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/rltiles/tool')
-rw-r--r--crawl-ref/source/rltiles/tool/tile_list_processor.cc105
-rw-r--r--crawl-ref/source/rltiles/tool/tile_list_processor.h2
2 files changed, 75 insertions, 32 deletions
diff --git a/crawl-ref/source/rltiles/tool/tile_list_processor.cc b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
index e1cf1191ad..80d17bcc11 100644
--- a/crawl-ref/source/rltiles/tool/tile_list_processor.cc
+++ b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
@@ -10,7 +10,8 @@ tile_list_processor::tile_list_processor() :
m_corpsify(false),
m_composing(false),
m_shrink(true),
- m_prefix("TILE")
+ m_prefix("TILE"),
+ m_start_value("0")
{
}
@@ -192,8 +193,8 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
return false; \
}
- #define CHECK_ARG1 \
- if (m_args.size() <= 1) \
+ #define CHECK_ARG(x) \
+ if (m_args.size() <= x) \
{ \
fprintf(stderr, "Error (%s:%d): " \
"missing arg following '%s'.\n", \
@@ -203,7 +204,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
if (strcmp(arg, "back") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
for (unsigned int i = 0; i < m_back.size(); i++)
{
@@ -231,7 +232,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "compose") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
if (!m_composing)
{
fprintf(stderr, "Error (%s:%d): not composing yet.\n",
@@ -271,7 +272,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "corpse") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
m_corpsify = (bool)atoi(m_args[1]);
}
else if (strcmp(arg, "end") == 0)
@@ -325,7 +326,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "include") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
if (!process_list(m_args[1]))
{
fprintf(stderr, "Error (%s:%d): include failed.\n",
@@ -335,7 +336,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "name") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
if (m_name != "")
{
@@ -349,7 +350,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "parts_ctg") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
for (unsigned int i = 0; i < m_categories.size(); i++)
{
@@ -368,22 +369,22 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
}
else if (strcmp(arg, "prefix") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
m_prefix = m_args[1];
}
else if (strcmp(arg, "rim") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
m_rim = (bool)atoi(m_args[1]);
}
else if (strcmp(arg, "sdir") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
m_sdir = m_args[1];
}
else if (strcmp(arg, "shrink") == 0)
{
- CHECK_ARG1;
+ CHECK_ARG(1);
m_shrink = (bool)atoi(m_args[1]);
}
else if (strcmp(arg, "start") == 0)
@@ -399,6 +400,14 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
m_composing = true;
m_compose.unload();
}
+ else if (strcmp(arg, "startvalue") == 0)
+ {
+ CHECK_ARG(2);
+ CHECK_NO_ARG(3);
+
+ m_start_value = m_args[1];
+ m_include = m_args[2];
+ }
else
{
fprintf(stderr, "Error (%s:%d): unknown command '%%%s'\n",
@@ -542,28 +551,38 @@ bool tile_list_processor::write_data()
ucname.c_str(), ucname.c_str());
fprintf(fp, "#include \"tiledef_defines.h\"\n\n");
+ if (!m_include.empty())
+ {
+ fprintf(fp, "#include \"%s\"\n\n", m_include.c_str());
+ }
+
fprintf(fp, "enum tile_%s_type\n{\n", lcname.c_str());
+ std::string start_val = " = ";
+ start_val += m_start_value;
+
for (unsigned int i = 0; i < m_page.m_tiles.size(); i++)
{
const std::string &enumname = m_page.m_tiles[i]->enumname();
const std::string &parts_ctg = m_page.m_tiles[i]->parts_ctg();
if (enumname.empty())
{
- fprintf(fp, " %s_%s_FILLER_%d,\n", m_prefix.c_str(),
- ucname.c_str(), i);
+ fprintf(fp, " %s_%s_FILLER_%d%s,\n", m_prefix.c_str(),
+ ucname.c_str(), i, start_val.c_str());
}
else if (parts_ctg.empty())
{
- fprintf(fp, " %s_%s,\n", m_prefix.c_str(),
- enumname.c_str());
+ fprintf(fp, " %s_%s%s,\n", m_prefix.c_str(),
+ enumname.c_str(), start_val.c_str());
}
else
{
- fprintf(fp, " %s_%s_%s,\n", m_prefix.c_str(),
- parts_ctg.c_str(), enumname.c_str());
+ fprintf(fp, " %s_%s_%s%s,\n", m_prefix.c_str(),
+ parts_ctg.c_str(), enumname.c_str(), start_val.c_str());
}
+ start_val = "";
+
if (!parts_ctg.empty())
{
int idx;
@@ -580,12 +599,11 @@ bool tile_list_processor::write_data()
fprintf(fp, " %s_%s_MAX\n};\n\n", m_prefix.c_str(), ucname.c_str());
- fprintf(fp, "extern int tile_%s_count[%s];\n",
- lcname.c_str(), max.c_str());
- fprintf(fp, "extern const char *tile_%s_name[%s];\n",
- lcname.c_str(), max.c_str());
- fprintf(fp, "extern tile_info tile_%s_info[%s];\n",
- lcname.c_str(), max.c_str());
+ fprintf(fp, "int tile_%s_count(unsigned int idx);\n", lcname.c_str());
+ fprintf(fp, "const char *tile_%s_name(unsigned int idx);\n",
+ lcname.c_str());
+ fprintf(fp, "tile_info &tile_%s_info(unsigned int idx);\n",
+ lcname.c_str());
if (m_categories.size() > 0)
{
@@ -624,14 +642,21 @@ 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, "int tile_%s_count[%s] =\n{\n",
- lcname.c_str(), max.c_str());
+ fprintf(fp, "int _tile_%s_count[%s - %s] =\n{\n",
+ lcname.c_str(), max.c_str(), m_start_value.c_str());
for (unsigned int i = 0; i < m_page.m_counts.size(); i++)
fprintf(fp, " %d,\n", m_page.m_counts[i]);
fprintf(fp, "};\n\n");
- fprintf(fp, "const char *tile_%s_name[%s] =\n{\n",
- lcname.c_str(), max.c_str());
+ fprintf(fp, "int tile_%s_count(unsigned int idx)\n{\n", lcname.c_str());
+ fprintf(fp, " assert(idx >= %s && idx < %s);\n",
+ m_start_value.c_str(), max.c_str());
+ fprintf(fp, " return _tile_%s_count[idx - %s];\n",
+ lcname.c_str(), m_start_value.c_str());
+ fprintf(fp, "}\n\n");
+
+ fprintf(fp, "const char *_tile_%s_name[%s - %s] =\n{\n",
+ lcname.c_str(), max.c_str(), m_start_value.c_str());
for (unsigned int i = 0; i < m_page.m_tiles.size(); i++)
{
const std::string &enumname = m_page.m_tiles[i]->enumname();
@@ -642,8 +667,16 @@ bool tile_list_processor::write_data()
}
fprintf(fp, "};\n\n");
- fprintf(fp, "tile_info tile_%s_info[%s] =\n{\n",
- lcname.c_str(), max.c_str());
+ fprintf(fp, "const char *tile_%s_name(unsigned int idx)\n{\n",
+ lcname.c_str());
+ fprintf(fp, " assert(idx >= %s && idx < %s);\n",
+ m_start_value.c_str(), max.c_str());
+ fprintf(fp, " return _tile_%s_name[idx - %s];\n",
+ lcname.c_str(), m_start_value.c_str());
+ fprintf(fp, "}\n\n");
+
+ fprintf(fp, "tile_info _tile_%s_info[%s - %s] =\n{\n",
+ lcname.c_str(), max.c_str(), m_start_value.c_str());
for (unsigned int i = 0; i < m_page.m_offsets.size(); i+=4)
{
fprintf(fp, " tile_info(%d, %d, %d, %d, %d, %d, %d, %d),\n",
@@ -654,6 +687,14 @@ bool tile_list_processor::write_data()
}
fprintf(fp, "};\n\n");
+ fprintf(fp, "tile_info &tile_%s_info(unsigned int idx)\n{\n",
+ lcname.c_str());
+ fprintf(fp, " assert(idx >= %s && idx < %s);\n",
+ m_start_value.c_str(), max.c_str());
+ fprintf(fp, " return _tile_%s_info[idx - %s];\n",
+ lcname.c_str(), m_start_value.c_str());
+ fprintf(fp, "}\n\n");
+
if (m_categories.size() > 0)
{
fprintf(fp, "int tile_%s_part_count[%s] =\n{\n",
@@ -671,7 +712,7 @@ bool tile_list_processor::write_data()
for (int i = 0; i < m_categories.size(); i++)
{
- fprintf(fp, " %d,\n", part_min[i]);
+ fprintf(fp, " %d+%s,\n", part_min[i], m_start_value.c_str());
}
fprintf(fp, "};\n\n");
diff --git a/crawl-ref/source/rltiles/tool/tile_list_processor.h b/crawl-ref/source/rltiles/tool/tile_list_processor.h
index 0c718a8044..74b199b5ef 100644
--- a/crawl-ref/source/rltiles/tool/tile_list_processor.h
+++ b/crawl-ref/source/rltiles/tool/tile_list_processor.h
@@ -33,6 +33,8 @@ protected:
std::string m_parts_ctg;
std::string m_sdir;
std::string m_prefix;
+ std::string m_start_value;
+ std::string m_include;
std::vector<std::string> m_categories;
std::vector<int> m_ctg_counts;
tile m_compose;