diff options
author | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2009-12-26 19:17:44 +0530 |
---|---|---|
committer | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2009-12-26 19:17:44 +0530 |
commit | 14da0d8a05d8f7ca55d05a198733e9abf82208f1 (patch) | |
tree | e9515c648a1e33f099c1f073f9dedc94f570c543 /crawl-ref/source/dungeon.cc | |
parent | f0dccf90776fe087a34b22d04e7125b8ce3842fc (diff) | |
download | crawl-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.cc | 26 |
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, |