summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-05-09 19:52:59 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-05-09 19:52:59 +0000
commitd69688f0d70ebd684181678a77ca10f800258cfe (patch)
tree19b8b9fdd4c8194ea65d0729cdf44adf31ee7e60 /crawl-ref/source/dungeon.cc
parentb31a9edb3090aa8dac6dc1fc70c5e241c3019642 (diff)
downloadcrawl-ref-d69688f0d70ebd684181678a77ca10f800258cfe.tar.gz
crawl-ref-d69688f0d70ebd684181678a77ca10f800258cfe.zip
Added Lemuel's mines minivaults.
Extended map DEPTH: attribute to support branch specifiers and negated depth specifiers. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1442 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc48
1 files changed, 16 insertions, 32 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index 46fb3b6c79..c2b3c8aebd 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -177,6 +177,7 @@ static dgn_region_list no_monster_zones;
static dgn_region_list no_item_zones;
static dgn_region_list no_pool_fixup_zones;
static dgn_region_list no_door_fixup_zones;
+static int minivault_chance = 3;
static std::vector<vault_placement> level_vaults;
@@ -341,6 +342,7 @@ static void reset_level()
no_item_zones.clear();
no_pool_fixup_zones.clear();
no_door_fixup_zones.clear();
+ minivault_chance = 3;
// blank level with DNGN_ROCK_WALL
make_box(0, 0, GXM - 1, GYM - 1, DNGN_ROCK_WALL, DNGN_ROCK_WALL);
@@ -1177,8 +1179,18 @@ static void place_special_minivaults(int level_number, int level_type)
if (level_type != LEVEL_DUNGEON)
return;
- int chance = level_number == 0? 50 : 100;
std::set<int> used;
+ if (minivault_chance && one_chance_in(minivault_chance))
+ {
+ const int vault = random_map_for_depth(level_id::current(), true);
+ if (vault != -1)
+ {
+ build_minivaults(level_number, vault);
+ used.insert(vault);
+ }
+ }
+
+ int chance = level_number == 0? 50 : 100;
while (chance && random2(100) < chance)
{
const int vault = random_map_for_dlevel(level_number, true);
@@ -1216,7 +1228,7 @@ static builder_rc_type builder_normal(int level_number, char level_type,
if (vault == -1
&& player_in_branch( BRANCH_MAIN_DUNGEON )
&& one_chance_in(9))
- vault = random_map_for_depth(level_number);
+ vault = random_map_for_depth(level_id::current());
if (vault != -1)
{
@@ -1257,14 +1269,7 @@ static builder_rc_type builder_normal(int level_number, char level_type,
if (level_number > 2 && level_number < 23 && one_chance_in(3))
{
plan_main(level_number, 0);
-
- if (one_chance_in(3))
- {
- int mvault = random_map_for_depth(level_number, true);
- if (mvault != -1)
- build_minivaults(level_number, mvault);
- }
-
+ minivault_chance = 3;
return BUILD_SKIP;
}
@@ -1276,17 +1281,7 @@ static builder_rc_type builder_normal(int level_number, char level_type,
{
// sometimes roguey_levels generate a special room
roguey_level(level_number, sr);
-
- if (player_in_branch( BRANCH_MAIN_DUNGEON )
- && one_chance_in(4))
- {
- int mvault = random_map_for_depth(level_number, true);
- if (mvault != -1)
- {
- build_minivaults(level_number, mvault);
- return BUILD_SKIP;
- }
- }
+ minivault_chance = 4;
}
else
{
@@ -1413,17 +1408,6 @@ static void builder_extras( int level_number, int level_type )
if (level_number >= 11 && level_number <= 23 && one_chance_in(15))
place_specific_stair(DNGN_ENTER_LABYRINTH);
- if (player_in_branch( BRANCH_MAIN_DUNGEON )
- && one_chance_in(3))
- {
- int mvault = random_map_for_depth(level_number, true);
- if (mvault != -1)
- {
- build_minivaults(level_number, mvault);
- return;
- }
- }
-
if (level_number > 6 && one_chance_in(10))
{
many_pools( level_number < 11 || coinflip() ?