summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-14 14:04:36 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-14 14:04:36 +0000
commit258300c2d7b30f3ccdcd43b804b4ff9055dae917 (patch)
tree464d99a361c9585f8d4c3822aa8f14bc318f8a66 /crawl-ref/source/dungeon.cc
parent432a476393eaf11088b9859592a1993df292228c (diff)
downloadcrawl-ref-258300c2d7b30f3ccdcd43b804b4ff9055dae917.tar.gz
crawl-ref-258300c2d7b30f3ccdcd43b804b4ff9055dae917.zip
Fix Zot random non-minivaults not being placeable. This change also allows random vault use on top of 'layout' maps.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10212 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc26
1 files changed, 17 insertions, 9 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index 5403924f7d..f4b43a957d 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -819,15 +819,23 @@ void dgn_register_place(const vault_placement &place, bool register_vault)
#endif
}
-static bool _ensure_vault_placed(bool vault_success)
+static bool _ensure_vault_placed(bool vault_success,
+ bool disable_further_vaults)
{
if (!vault_success)
dgn_level_vetoed = true;
- else
+ else if (disable_further_vaults)
can_create_vault = false;
return (vault_success);
}
+static bool _ensure_vault_placed_ex( bool vault_success, const map_def *vault )
+{
+ return _ensure_vault_placed( vault_success,
+ (!vault->has_tag("extra")
+ && vault->orient == MAP_ENCOMPASS) );
+}
+
static coord_def _find_level_feature(int feat)
{
for (int y = 1; y < GYM; ++y)
@@ -2302,7 +2310,7 @@ static builder_rc_type _builder_by_type(int level_number, char level_type)
end(1, false, "Failed to find Pandemonium level %s!\n",
pandemon_level_names[which_demon]);
- _ensure_vault_placed( _build_vaults(level_number, vault) );
+ _ensure_vault_placed( _build_vaults(level_number, vault), true );
}
else
{
@@ -2373,7 +2381,7 @@ static void _portal_vault_level(int level_number)
vault = random_map_for_tag(level_name, false);
if (vault)
- _ensure_vault_placed( _build_vaults(level_number, vault) );
+ _ensure_vault_placed( _build_vaults(level_number, vault), true );
else
{
_plan_main(level_number, 0);
@@ -2439,7 +2447,7 @@ static builder_rc_type _builder_by_branch(int level_number)
if (vault)
{
dgn_Build_Method += " random_map_for_place";
- _ensure_vault_placed( _build_vaults(level_number, vault) );
+ _ensure_vault_placed_ex( _build_vaults(level_number, vault), vault );
return BUILD_SKIP;
}
@@ -2532,7 +2540,7 @@ static builder_rc_type _builder_normal(int level_number, char level_type,
if (vault)
{
dgn_Build_Method += " normal_random_map_for_place";
- _ensure_vault_placed( _build_vaults(level_number, vault) );
+ _ensure_vault_placed_ex( _build_vaults(level_number, vault), vault );
return BUILD_SKIP;
}
@@ -5926,7 +5934,7 @@ static char _plan_1(int level_number)
ASSERT(vault);
bool success = _build_vaults(level_number, vault);
- _ensure_vault_placed(success);
+ _ensure_vault_placed(success, false);
return 0;
}
@@ -5940,7 +5948,7 @@ static char _plan_2(int level_number)
ASSERT(vault);
bool success = _build_vaults(level_number, vault);
- _ensure_vault_placed(success);
+ _ensure_vault_placed(success, false);
return 0;
}
@@ -6174,7 +6182,7 @@ static char _plan_6(int level_number)
ASSERT(vault);
bool success = _build_vaults(level_number, vault);
- _ensure_vault_placed(success);
+ _ensure_vault_placed(success, false);
// This "back door" is often one of the easier ways to get out of
// pandemonium... the easiest is to use the banish spell.