summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authorJude Brown <bookofjude@users.sourceforge.net>2009-11-29 18:06:05 +1000
committerJude Brown <bookofjude@users.sourceforge.net>2009-11-29 18:06:05 +1000
commit2af84a1dc526c634dd29f3b5f87299c8e026b110 (patch)
tree4c4471a7bffac879b817b3baf940c178272be368 /crawl-ref/source/dungeon.cc
parent0680cf8d68d7f51d7e8e2a52d03afe3e555bb8d4 (diff)
downloadcrawl-ref-2af84a1dc526c634dd29f3b5f87299c8e026b110.tar.gz
crawl-ref-2af84a1dc526c634dd29f3b5f87299c8e026b110.zip
Reset uniques and unrands when a level is vetoed.
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index c0147fb63b..e79550a2c7 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -248,6 +248,9 @@ static bool _fixup_interlevel_connectivity();
map_mask dgn_Map_Mask;
std::vector<vault_placement> Level_Vaults;
std::vector<vault_placement> Temp_Vaults;
+FixedVector<bool, NUM_MONSTERS> temp_unique_creatures;
+FixedVector<unique_item_status_type, MAX_UNRANDARTS> temp_unique_items;
+
std::set<std::string> Level_Unique_Maps;
std::set<std::string> Level_Unique_Tags;
std::string dgn_Build_Method;
@@ -955,6 +958,9 @@ void dgn_reset_level()
Level_Unique_Maps.clear();
Level_Unique_Tags.clear();
+ you.unique_creatures = temp_unique_creatures;
+ you.unique_items = temp_unique_items;
+
_portal_vault_map_name.clear();
_you_vault_list.clear();
dgn_Build_Method.clear();
@@ -1822,6 +1828,11 @@ static void _build_dungeon_level(int level_number, int level_type)
return;
}
+ // Save a copy of unique creatures in case we get vetoed.
+ temp_unique_creatures = you.unique_creatures;
+ // And unrands
+ temp_unique_items = you.unique_items;
+
// Try to place minivaults that really badly want to be placed. Still
// no guarantees, seeing this is a minivault.
_place_minivaults();