summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-24 18:04:09 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-24 18:04:09 +0000
commit52e493902ab08a3bb701a1ca81725ce97f969b3e (patch)
treeb399890a286c569bf963d36a9bbc42338b1881d8
parent78f04dd421a2af9f7019193e67dadd3a3c8b4f47 (diff)
downloadcrawl-ref-52e493902ab08a3bb701a1ca81725ce97f969b3e.tar.gz
crawl-ref-52e493902ab08a3bb701a1ca81725ce97f969b3e.zip
Modifying RLTiles to randomly use Johanna's extra blood splats when generating corpse tiles.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6862 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/rltiles/dc-co.txt18
-rw-r--r--crawl-ref/source/rltiles/tool/tile_list_processor.cc178
-rw-r--r--crawl-ref/source/rltiles/tool/tile_list_processor.h3
3 files changed, 112 insertions, 87 deletions
diff --git a/crawl-ref/source/rltiles/dc-co.txt b/crawl-ref/source/rltiles/dc-co.txt
index 4df22f38dc..ee98f5e255 100644
--- a/crawl-ref/source/rltiles/dc-co.txt
+++ b/crawl-ref/source/rltiles/dc-co.txt
@@ -3,7 +3,7 @@
%sdir dc-mon
%corpse 1
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
glowing_shapeshifter CORPSE_GLOWING_SHAPESHIFTER /* @ */
hell_knight CORPSE_HELL_KNIGHT /* @ */
human CORPSE_HUMAN /* @ */
@@ -16,7 +16,7 @@ boring_beetle CORPSE_BORING_BEETLE /* B */
boulder_beetle CORPSE_BOULDER_BEETLE /* B */
giant_beetle CORPSE_GIANT_BEETLE /* B */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
cyclops CORPSE_CYCLOPS /* C */
fire_giant CORPSE_FIRE_GIANT /* C */
frost_giant CORPSE_FROST_GIANT /* C */
@@ -53,7 +53,7 @@ giant_amoeba CORPSE_GIANT_AMOEBA /* J */
kobold CORPSE_KOBOLD /* K */
big_kobold CORPSE_BIG_KOBOLD
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
greater_naga0 CORPSE_GREATER_NAGA /* N */
guardian_naga CORPSE_GUARDIAN_NAGA /* N */
naga0 CORPSE_NAGA /* N */
@@ -67,7 +67,7 @@ two_headed_ogre CORPSE_TWO_HEADED_OGRE /* O */
queen_ant CORPSE_QUEEN_ANT /* Q */
queen_bee CORPSE_QUEEN_BEE /* Q */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
black_snake CORPSE_BLACK_SNAKE /* S */
brown_snake CORPSE_BROWN_SNAKE /* S */
grey_snake CORPSE_GREY_SNAKE /* S */
@@ -95,7 +95,7 @@ giant_cockroach CORPSE_GIANT_COCKROACH /* a */
soldier_ant CORPSE_SOLDIER_ANT /* a */
butterfly CORPSE_BUTTERFLY /* b */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
giant_bat CORPSE_GIANT_BAT /* b */
centaur CORPSE_CENTAUR /* c */
@@ -140,7 +140,7 @@ jackal CORPSE_JACKAL /* j */
bumblebee CORPSE_BUMBLEBEE /* k */
killer_bee CORPSE_KILLER_BEE /* k */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
giant_gecko CORPSE_GIANT_GECKO /* l */
giant_iguana CORPSE_GIANT_IGUANA /* l */
giant_lizard CORPSE_GIANT_LIZARD /* l */
@@ -153,14 +153,14 @@ elephant_slug CORPSE_ELEPHANT_SLUG /* m */
giant_slug CORPSE_GIANT_SLUG /* m */
giant_snail CORPSE_GIANT_SNAIL /* m */
manticore CORPSE_MANTICORE /* m */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
minotaur CORPSE_MINOTAUR /* m */
%back dc-misc/blood_green
ghoul CORPSE_GHOUL /* n */
necrophage CORPSE_NECROPHAGE /* n */
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
orc0 CORPSE_ORC /* o */
###orc_high_priest CORPSE_ORC_HIGH_PRIEST /* o */
###orc_priest CORPSE_ORC_PRIEST /* o */
@@ -256,7 +256,7 @@ yellow_wasp CORPSE_YELLOW_WASP /* y */
%finish CORPSE_DRACONIAN_YELLOW
%sdir dc-mon
-%back dc-misc/blood_red
+%back dc-misc/blood_red dc-misc/blood_red1 dc-misc/blood_red2 dc-misc/blood_red3 dc-misc/blood_red4
mermaid_water CORPSE_MERMAID
merfolk_fighter_water CORPSE_MERFOLK_FIGHTER
diff --git a/crawl-ref/source/rltiles/tool/tile_list_processor.cc b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
index 5a21e11675..3984964ab4 100644
--- a/crawl-ref/source/rltiles/tool/tile_list_processor.cc
+++ b/crawl-ref/source/rltiles/tool/tile_list_processor.cc
@@ -14,6 +14,15 @@ tile_list_processor::tile_list_processor() :
{
}
+tile_list_processor::~tile_list_processor()
+{
+ for (unsigned int i = 0; i < m_back.size(); i++)
+ {
+ delete m_back[i];
+ }
+ m_back.resize(0);
+}
+
bool tile_list_processor::load_image(tile &img, const char *filename)
{
assert(filename);
@@ -144,20 +153,22 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
eat_comments(read_line);
const char *delim = " ";
- char *arg1 = strtok(read_line, delim);
- if (!arg1)
+ char *arg;
+
+ arg = strtok(read_line, delim);
+ if (!arg)
return true;
- eat_whitespace(arg1);
+ eat_whitespace(arg);
- if (!*arg1)
+ if (!*arg)
return true;
- if (arg1[0] == '#')
+ if (arg[0] == '#')
return true;
- char *arg2 = strtok(NULL, delim);
- eat_whitespace(arg2);
+ std::vector<char *> m_args;
+ m_args.push_back(arg);
while (char *extra = strtok(NULL, delim))
{
@@ -165,53 +176,62 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
if (!*extra)
continue;
- fprintf(stderr, "Error (%s:%d): too many args.\n", list_file, line);
- return false;
+ m_args.push_back(extra);
}
- if (arg1[0] == '%')
+ if (arg[0] == '%')
{
- arg1++;
+ arg++;
- #define CHECK_NO_ARG2 \
- if (arg2) \
+ #define CHECK_NO_ARG(x) \
+ if (m_args.size() > x) \
{ \
fprintf(stderr, "Error (%s:%d): " \
- "invalid arg following '%s'.\n", \
- list_file, line, arg1); \
+ "invalid args following '%s'.\n", \
+ list_file, line, arg); \
return false; \
}
- #define CHECK_ARG2 \
- if (!arg2) \
+ #define CHECK_ARG1 \
+ if (m_args.size() <= 1) \
{ \
fprintf(stderr, "Error (%s:%d): " \
"missing arg following '%s'.\n", \
- list_file, line, arg1); \
+ list_file, line, arg); \
return false; \
}
- if (strcmp(arg1, "back") == 0)
+ if (strcmp(arg, "back") == 0)
{
- CHECK_ARG2;
+ CHECK_ARG1;
- if (strcmp(arg2, "none") == 0)
+ for (unsigned int i = 0; i < m_back.size(); i++)
{
- m_back.unload();
+ delete m_back[i];
}
- else
+ m_back.resize(0);
+
+ if (strcmp(m_args[1], "none") == 0)
+ {
+ CHECK_NO_ARG(2);
+ return true;
+ }
+
+ for (unsigned int i = 1; i < m_args.size(); i++)
{
- if (!load_image(m_back, arg2))
+ tile *img = new tile();
+ if (!load_image(*img, m_args[i]))
{
fprintf(stderr, "Error(%s:%d): couldn't load image "
- "'%s'.\n", list_file, line, arg2);
+ "'%s'.\n", list_file, line, m_args[i]);
return false;
}
+ m_back.push_back(img);
}
}
- else if (strcmp(arg1, "compose") == 0)
+ else if (strcmp(arg, "compose") == 0)
{
- CHECK_ARG2;
+ CHECK_ARG1;
if (!m_composing)
{
fprintf(stderr, "Error (%s:%d): not composing yet.\n",
@@ -222,10 +242,10 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
if (m_compose.valid())
{
tile img;
- if (!load_image(img, arg2))
+ if (!load_image(img, m_args[1]))
{
fprintf(stderr, "Error(%s:%d): couldn't load image "
- "'%s'.\n", list_file, line, arg2);
+ "'%s'.\n", list_file, line, m_args[1]);
return false;
}
@@ -235,28 +255,28 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
if (!m_compose.compose(img))
{
fprintf(stderr, "Error (%s:%d): failed composing '%s'"
- " onto compose image.\n", list_file, line, arg2);
+ " onto compose image.\n", list_file, line, m_args[1]);
return false;
}
}
else
{
- if (!load_image(m_compose, arg2))
+ if (!load_image(m_compose, m_args[1]))
{
fprintf(stderr, "Error(%s:%d): couldn't load image "
- "'%s'.\n", list_file, line, arg2);
+ "'%s'.\n", list_file, line, m_args[1]);
return false;
}
}
}
- else if (strcmp(arg1, "corpse") == 0)
+ else if (strcmp(arg, "corpse") == 0)
{
- CHECK_ARG2;
- m_corpsify = (bool)atoi(arg2);
+ CHECK_ARG1;
+ m_corpsify = (bool)atoi(m_args[1]);
}
- else if (strcmp(arg1, "end") == 0)
+ else if (strcmp(arg, "end") == 0)
{
- CHECK_NO_ARG2;
+ CHECK_NO_ARG(1);
if (m_parts_ctg.empty())
{
@@ -267,7 +287,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
m_parts_ctg.clear();
}
- else if (strcmp(arg1, "finish") == 0)
+ else if (strcmp(arg, "finish") == 0)
{
if (!m_composing)
{
@@ -281,39 +301,41 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
else if (m_rim)
m_compose.add_rim(tile_colour::black);
- if (m_back.valid())
+ if (m_back.size() > 0)
{
- tile img(m_back);
+ unsigned int psuedo_rand = m_page.m_tiles.size() * 54321;
+ tile *back = m_back[psuedo_rand % m_back.size()];
+ tile img(*back);
if (!img.compose(m_compose))
{
fprintf(stderr, "Error (%s:%d): failed composing '%s'"
" onto back image '%s'.\n", list_file, line,
- arg1, m_back.filename().c_str());
+ arg, back->filename().c_str());
return false;
}
- add_image(img, arg2);
+ add_image(img, m_args[1]);
}
else
{
- add_image(m_compose, arg2);
+ add_image(m_compose, m_args[1]);
}
m_compose.unload();
m_composing = false;
}
- else if (strcmp(arg1, "include") == 0)
+ else if (strcmp(arg, "include") == 0)
{
- CHECK_ARG2;
- if (!process_list(arg2))
+ CHECK_ARG1;
+ if (!process_list(m_args[1]))
{
fprintf(stderr, "Error (%s:%d): include failed.\n",
list_file, line);
return false;
}
}
- else if (strcmp(arg1, "name") == 0)
+ else if (strcmp(arg, "name") == 0)
{
- CHECK_ARG2;
+ CHECK_ARG1;
if (m_name != "")
{
@@ -323,50 +345,50 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
return false;
}
- m_name = arg2;
+ m_name = m_args[1];
}
- else if (strcmp(arg1, "parts_ctg") == 0)
+ else if (strcmp(arg, "parts_ctg") == 0)
{
- CHECK_ARG2;
+ CHECK_ARG1;
for (unsigned int i = 0; i < m_categories.size(); i++)
{
- if (arg2 == m_categories[i])
+ if (m_args[1] == m_categories[i])
{
fprintf(stderr,
"Error (%s:%d): category '%s' already used.\n",
- list_file, line, arg2);
+ list_file, line, m_args[1]);
return false;
}
}
- m_parts_ctg = arg2;
+ m_parts_ctg = m_args[1];
m_categories.push_back(m_parts_ctg);
m_ctg_counts.push_back(0);
}
- else if (strcmp(arg1, "prefix") == 0)
+ else if (strcmp(arg, "prefix") == 0)
{
- CHECK_ARG2;
- m_prefix = arg2;
+ CHECK_ARG1;
+ m_prefix = m_args[1];
}
- else if (strcmp(arg1, "rim") == 0)
+ else if (strcmp(arg, "rim") == 0)
{
- CHECK_ARG2;
- m_rim = (bool)atoi(arg2);
+ CHECK_ARG1;
+ m_rim = (bool)atoi(m_args[1]);
}
- else if (strcmp(arg1, "sdir") == 0)
+ else if (strcmp(arg, "sdir") == 0)
{
- CHECK_ARG2;
- m_sdir = arg2;
+ CHECK_ARG1;
+ m_sdir = m_args[1];
}
- else if (strcmp(arg1, "shrink") == 0)
+ else if (strcmp(arg, "shrink") == 0)
{
- CHECK_ARG2;
- m_shrink = (bool)atoi(arg2);
+ CHECK_ARG1;
+ m_shrink = (bool)atoi(m_args[1]);
}
- else if (strcmp(arg1, "start") == 0)
+ else if (strcmp(arg, "start") == 0)
{
- CHECK_NO_ARG2;
+ CHECK_NO_ARG(1);
if (m_composing)
{
@@ -380,7 +402,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
else
{
fprintf(stderr, "Error (%s:%d): unknown command '%%%s'\n",
- list_file, line, arg1);
+ list_file, line, arg);
return false;
}
}
@@ -395,34 +417,36 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
tile img;
- if (m_back.valid())
+ if (m_back.size() > 0)
{
// compose
- if (!load_image(m_compose, arg1))
+ if (!load_image(m_compose, arg))
{
fprintf(stderr, "Error (%s:%d): couldn't load image "
- "'%s'.\n", list_file, line, arg1);
+ "'%s'.\n", list_file, line, arg);
return false;
}
if (m_corpsify)
m_compose.corpsify();
- img.copy(m_back);
+ unsigned int psuedo_rand = m_page.m_tiles.size() * 54321;
+ tile *back = m_back[psuedo_rand % m_back.size()];
+ img.copy(*back);
if (!img.compose(m_compose))
{
fprintf(stderr, "Error (%s:%d): failed composing '%s'"
" onto back image '%s'.\n", list_file, line,
- arg1, m_back.filename().c_str());
+ arg, back->filename().c_str());
return false;
}
}
else
{
- if (!load_image(img, arg1))
+ if (!load_image(img, arg))
{
fprintf(stderr, "Error (%s:%d): couldn't load image "
- "'%s'.\n", list_file, line, arg1);
+ "'%s'.\n", list_file, line, arg);
return false;
}
@@ -434,7 +458,7 @@ bool tile_list_processor::process_line(char *read_line, const char *list_file,
img.add_rim(tile_colour::black);
// push tile onto tile page
- add_image(img, arg2);
+ add_image(img, m_args[1]);
}
return true;
diff --git a/crawl-ref/source/rltiles/tool/tile_list_processor.h b/crawl-ref/source/rltiles/tool/tile_list_processor.h
index cb3c22da49..0c718a8044 100644
--- a/crawl-ref/source/rltiles/tool/tile_list_processor.h
+++ b/crawl-ref/source/rltiles/tool/tile_list_processor.h
@@ -10,6 +10,7 @@ class tile_list_processor
{
public:
tile_list_processor();
+ virtual ~tile_list_processor();
bool process_list(const char *list_file);
bool write_data();
@@ -28,7 +29,7 @@ protected:
bool m_corpsify;
bool m_composing;
bool m_shrink;
- tile m_back;
+ std::vector<tile*> m_back;
std::string m_parts_ctg;
std::string m_sdir;
std::string m_prefix;