summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-10-07 11:53:26 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-10-07 11:53:26 +0000
commit522955930be026a79588e83952e7abca19e20e73 (patch)
treee49fd857e4799c3ff0776ddf341610d3c60027d9 /crawl-ref/source
parent10aeabaacb1c2cdc6b6227328df34287b7f75d4f (diff)
downloadcrawl-ref-522955930be026a79588e83952e7abca19e20e73.tar.gz
crawl-ref-522955930be026a79588e83952e7abca19e20e73.zip
Allow overriding monster colours in map specs using col:<newcolour>.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2353 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/dungeon.cc17
-rw-r--r--crawl-ref/source/mapdef.cc12
-rw-r--r--crawl-ref/source/mapdef.h3
3 files changed, 26 insertions, 6 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index 09f8b43ecb..23daf0d16c 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -4002,11 +4002,18 @@ bool dgn_place_monster(const mons_spec &mspec,
grd[vx][vy] = habitat;
}
- int not_used;
- return (place_monster( not_used, mid, monster_level,
- m_generate_awake? BEH_WANDER : BEH_SLEEP,
- MHITNOT, true, vx, vy, false,
- PROX_ANYWHERE, mspec.monnum));
+ int mindex = NON_MONSTER;
+ const bool placed =
+ place_monster( mindex, mid, monster_level,
+ m_generate_awake? BEH_WANDER : BEH_SLEEP,
+ MHITNOT, true, vx, vy, false,
+ PROX_ANYWHERE, mspec.monnum);
+ if (placed && mindex != -1 && mindex != NON_MONSTER
+ && mspec.colour != BLACK)
+ {
+ menv[mindex].colour = mspec.colour;
+ }
+ return (placed);
}
return (false);
}
diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc
index 8dadc81c8f..c446f6d969 100644
--- a/crawl-ref/source/mapdef.cc
+++ b/crawl-ref/source/mapdef.cc
@@ -1907,6 +1907,18 @@ mons_list::mons_spec_slot mons_list::parse_mons_spec(std::string spec)
mspec.fix_mons = strip_tag(s, "fix_mons");
mspec.generate_awake = strip_tag(s, "generate_awake");
+ std::string colour = strip_tag_prefix(s, "col:");
+ if (!colour.empty())
+ {
+ mspec.colour = str_to_colour(colour, BLACK);
+ if (mspec.colour == BLACK)
+ {
+ error = make_stringf("bad monster colour \"%s\" in \"%s\"",
+ colour.c_str(), specs[i].c_str());
+ return (slot);
+ }
+ }
+
trim_string(s);
if (s == "8")
diff --git a/crawl-ref/source/mapdef.h b/crawl-ref/source/mapdef.h
index 9d2e7e2b57..de6ead6047 100644
--- a/crawl-ref/source/mapdef.h
+++ b/crawl-ref/source/mapdef.h
@@ -333,12 +333,13 @@ struct mons_spec
int genweight, mlevel;
bool fix_mons;
bool generate_awake;
+ int colour;
mons_spec(int id = RANDOM_MONSTER, int num = 250,
int gw = 10, int ml = 0,
bool _fixmons = false, bool awaken = false)
: mid(id), monnum(num), genweight(gw), mlevel(ml), fix_mons(_fixmons),
- generate_awake(awaken)
+ generate_awake(awaken), colour(BLACK)
{
}
};