summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authorDarshan Shaligram <dshaligram@users.sourceforge.net>2009-12-26 19:17:44 +0530
committerDarshan Shaligram <dshaligram@users.sourceforge.net>2009-12-26 19:17:44 +0530
commit14da0d8a05d8f7ca55d05a198733e9abf82208f1 (patch)
treee9515c648a1e33f099c1f073f9dedc94f570c543 /crawl-ref/source/dungeon.cc
parentf0dccf90776fe087a34b22d04e7125b8ce3842fc (diff)
downloadcrawl-ref-14da0d8a05d8f7ca55d05a198733e9abf82208f1.tar.gz
crawl-ref-14da0d8a05d8f7ca55d05a198733e9abf82208f1.zip
Tweak placement of rune hut on Shoal:$.
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index c7b1f9c88d..88fdbddc67 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -2191,6 +2191,30 @@ static coord_def _pick_shoals_island()
return c;
}
+struct point_sort_distance_from
+{
+ coord_def bad_place;
+ point_sort_distance_from(coord_def c) : bad_place(c) { }
+ bool operator () (coord_def a, coord_def b) const
+ {
+ const int dista = (a - bad_place).abs(), distb = (b - bad_place).abs();
+ return dista >= distb;
+ }
+};
+
+static coord_def _pick_shoals_island_distant_from(coord_def bad_place)
+{
+ ASSERT(!_shoals_islands.empty());
+
+ std::sort(_shoals_islands.begin(), _shoals_islands.end(),
+ point_sort_distance_from(bad_place));
+ const int top_picks = std::min(4, int(_shoals_islands.size()));
+ const int choice = random2(top_picks);
+ coord_def chosen = _shoals_islands[choice];
+ _shoals_islands.erase(_shoals_islands.begin() + choice);
+ return chosen;
+}
+
static void _shoals_furniture(int margin)
{
if (at_branch_bottom())
@@ -2201,7 +2225,7 @@ static void _shoals_furniture(int margin)
grd(c + coord_def(1, 0)) = DNGN_STONE_STAIRS_UP_II;
grd(c - coord_def(1, 0)) = DNGN_STONE_STAIRS_UP_III;
- const coord_def p = _pick_shoals_island();
+ const coord_def p = _pick_shoals_island_distant_from(c);
// Place the rune
const map_def *vault = random_map_for_tag("shoal_rune");
_build_secondary_vault(you.your_level, vault, -1, false, true,