summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarshan Shaligram <dshaligram@users.sourceforge.net>2010-01-01 02:44:31 +0530
committerDarshan Shaligram <dshaligram@users.sourceforge.net>2010-01-01 02:44:31 +0530
commit5a78294f6e2a266a7943b642b1014cdae36f7e66 (patch)
treea3f4cec7c010dd8ee9fd3b2c0324be7ae7557da2
parent60c15d1dff03922dc62d71690667e5f36f4137a8 (diff)
downloadcrawl-ref-5a78294f6e2a266a7943b642b1014cdae36f7e66.tar.gz
crawl-ref-5a78294f6e2a266a7943b642b1014cdae36f7e66.zip
Guarantee a small guard around the shoal rune.
-rw-r--r--crawl-ref/source/dat/shoals.des13
-rw-r--r--crawl-ref/source/dgn-shoals.cc9
-rw-r--r--crawl-ref/source/l_dgn.cc7
-rw-r--r--crawl-ref/source/maps.cc15
-rw-r--r--crawl-ref/source/maps.h12
5 files changed, 50 insertions, 6 deletions
diff --git a/crawl-ref/source/dat/shoals.des b/crawl-ref/source/dat/shoals.des
index de2f6bfc3d..05fc08c98f 100644
--- a/crawl-ref/source/dat/shoals.des
+++ b/crawl-ref/source/dat/shoals.des
@@ -244,13 +244,20 @@ TAGS: shoal_rune water_ok no_dump allow_dup
SHUFFLE: ABCD
SUBST: A:x, B:x, C:x=, D=+
SUBST: 0 = 0.
+KMONS: g = merfolk impaler / merfolk javelineer / merfolk aquamancer
LROCKTILE: wall_vines
+{{
+ local mapmode = unpack(dgn.map_parameters())
+ if mapmode ~= 'rune' then
+ subst("g = .")
+ end
+}}
MAP
xxCxx
xx.0.xx
-x.0.0.x
-B0.O.0D
-x.0.0.x
+x.0g0.x
+B0gOg0D
+x.0g0.x
xx.0.xx
xxAxx
ENDMAP
diff --git a/crawl-ref/source/dgn-shoals.cc b/crawl-ref/source/dgn-shoals.cc
index 7a0764f8e7..4108da94c0 100644
--- a/crawl-ref/source/dgn-shoals.cc
+++ b/crawl-ref/source/dgn-shoals.cc
@@ -405,10 +405,13 @@ static void _shoals_furniture(int margin)
dgn_excavate(c, dgn_random_direction());
const coord_def p = _pick_shoals_island_distant_from(c);
- // Place the rune
const map_def *vault = random_map_for_tag("shoal_rune");
- dgn_ensure_vault_placed(dgn_place_map(vault, false, false, p),
- false);
+ {
+ // Place the rune
+ dgn_map_parameters mp("rune");
+ dgn_ensure_vault_placed(dgn_place_map(vault, false, false, p),
+ false);
+ }
const int nhuts = std::min(8, int(_shoals_islands.size()));
for (int i = 2; i < nhuts; ++i)
diff --git a/crawl-ref/source/l_dgn.cc b/crawl-ref/source/l_dgn.cc
index dddb216da4..e0cb80bf33 100644
--- a/crawl-ref/source/l_dgn.cc
+++ b/crawl-ref/source/l_dgn.cc
@@ -1522,6 +1522,11 @@ LUAFN(_dgn_in_vault)
return (1);
}
+LUAFN(_dgn_map_parameters)
+{
+ return clua_stringtable(ls, map_parameters);
+}
+
LUAFN(_dgn_find_marker_position_by_prop)
{
const char *prop = luaL_checkstring(ls, 1);
@@ -1785,6 +1790,8 @@ const struct luaL_reg dgn_dlib[] =
{ "resolve_map", _dgn_resolve_map },
{ "in_vault", _dgn_in_vault },
+{ "map_parameters", _dgn_map_parameters },
+
{ "find_marker_position_by_prop", _dgn_find_marker_position_by_prop },
{ "find_marker_positions_by_prop", _dgn_find_marker_positions_by_prop },
{ "find_markers_by_prop", _dgn_find_markers_by_prop },
diff --git a/crawl-ref/source/maps.cc b/crawl-ref/source/maps.cc
index 072b7c8557..d48cdad5c0 100644
--- a/crawl-ref/source/maps.cc
+++ b/crawl-ref/source/maps.cc
@@ -61,6 +61,21 @@ point_vector map_anchor_points;
typedef std::vector<map_def> map_vector;
static map_vector vdefs;
+// Parameter array that vault code can use.
+string_vector map_parameters;
+
+dgn_map_parameters::dgn_map_parameters(const std::string &astring)
+ : mpar(map_parameters)
+{
+ map_parameters.push_back(astring);
+}
+
+dgn_map_parameters::dgn_map_parameters(const string_vector &parameters)
+ : mpar(map_parameters)
+{
+ map_parameters = parameters;
+}
+
/* ******************** BEGIN PUBLIC FUNCTIONS ******************* */
// Remember (!!!) - if a member of the monster array isn't specified
diff --git a/crawl-ref/source/maps.h b/crawl-ref/source/maps.h
index 3626db6dd5..5beee64992 100644
--- a/crawl-ref/source/maps.h
+++ b/crawl-ref/source/maps.h
@@ -68,12 +68,24 @@ typedef bool (*map_place_check_t)(const map_def &, const coord_def &c,
const coord_def &size);
typedef std::vector<coord_def> point_vector;
+typedef std::vector<std::string> string_vector;
extern map_place_check_t map_place_valid;
extern point_vector map_anchor_points;
+// Use dgn_map_parameters to modify:
+extern string_vector map_parameters;
+
const int MAP_CACHE_VERSION = 1012;
+class dgn_map_parameters
+{
+public:
+ dgn_map_parameters(const std::string &astring);
+ dgn_map_parameters(const string_vector &parameters);
+private:
+ unwind_var<string_vector> mpar;
+};
#ifdef DEBUG_DIAGNOSTICS
void mg_report_random_maps(FILE *outf, const level_id &place);