diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-07-14 14:04:36 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-07-14 14:04:36 +0000 |
commit | 258300c2d7b30f3ccdcd43b804b4ff9055dae917 (patch) | |
tree | 464d99a361c9585f8d4c3822aa8f14bc318f8a66 /crawl-ref/source/dungeon.cc | |
parent | 432a476393eaf11088b9859592a1993df292228c (diff) | |
download | crawl-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.cc | 26 |
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. |