diff options
author | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-01-01 02:44:31 +0530 |
---|---|---|
committer | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-01-01 02:44:31 +0530 |
commit | 5a78294f6e2a266a7943b642b1014cdae36f7e66 (patch) | |
tree | a3f4cec7c010dd8ee9fd3b2c0324be7ae7557da2 | |
parent | 60c15d1dff03922dc62d71690667e5f36f4137a8 (diff) | |
download | crawl-ref-5a78294f6e2a266a7943b642b1014cdae36f7e66.tar.gz crawl-ref-5a78294f6e2a266a7943b642b1014cdae36f7e66.zip |
Guarantee a small guard around the shoal rune.
-rw-r--r-- | crawl-ref/source/dat/shoals.des | 13 | ||||
-rw-r--r-- | crawl-ref/source/dgn-shoals.cc | 9 | ||||
-rw-r--r-- | crawl-ref/source/l_dgn.cc | 7 | ||||
-rw-r--r-- | crawl-ref/source/maps.cc | 15 | ||||
-rw-r--r-- | crawl-ref/source/maps.h | 12 |
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 ¶meters) + : 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 ¶meters); +private: + unwind_var<string_vector> mpar; +}; #ifdef DEBUG_DIAGNOSTICS void mg_report_random_maps(FILE *outf, const level_id &place); |