From 14da0d8a05d8f7ca55d05a198733e9abf82208f1 Mon Sep 17 00:00:00 2001 From: Darshan Shaligram Date: Sat, 26 Dec 2009 19:17:44 +0530 Subject: Tweak placement of rune hut on Shoal:$. --- crawl-ref/source/dungeon.cc | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'crawl-ref') 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, -- cgit v1.2.3-54-g00ecf