From 3746a590d7d1a0b1e717178dbae8cc68eb16957a Mon Sep 17 00:00:00 2001 From: dshaligram Date: Thu, 25 Oct 2007 13:43:39 +0000 Subject: Added a flag to disable generation of exits from a vault. Need to clean up vault placement to make it easier to parameterise it. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2567 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/debug.cc | 2 +- crawl-ref/source/decks.cc | 2 +- crawl-ref/source/dungeon.cc | 43 +++++++++++++++++++++++++++---------------- crawl-ref/source/dungeon.h | 1 + 4 files changed, 30 insertions(+), 18 deletions(-) (limited to 'crawl-ref') diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc index d4aea3a01a..22e8303bd6 100644 --- a/crawl-ref/source/debug.cc +++ b/crawl-ref/source/debug.cc @@ -2885,7 +2885,7 @@ static void debug_load_map_by_name(std::string name) where = you.pos(); } - if (dgn_place_map(map, false, true, where)) + if (dgn_place_map(map, false, true, false, where)) mprf("Successfully placed %s.", map_by_index(map)->name.c_str()); else mprf("Failed to place %s.", map_by_index(map)->name.c_str()); diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index a936165d23..60bc2fa278 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -1893,7 +1893,7 @@ static void trowel_card(int power, deck_rarity_type rarity) { { no_messages n; - dgn_place_map(mapidx, false, true, you.pos()); + dgn_place_map(mapidx, false, true, true, you.pos()); } mpr("A mystic portal forms."); } diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index a919e4b268..c0ab8006d5 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -209,15 +209,18 @@ static bool build_secondary_vault(int level_number, int vault, int rune_subst = -1, bool generating_level = true, bool clobber = false, + bool make_no_exits = false, const coord_def &where = coord_def(-1, -1)); static bool build_vaults(int level_number, int vault_number, int rune_subst = -1, bool build_only = false, bool check_vault_place = false, bool generating_level = true, bool clobber = false, + bool make_no_exits = false, const coord_def &where = coord_def(-1, -1)); static bool build_minivaults(int level_number, int force_vault, bool level_builder = true, bool clobber = false, - coord_def where = coord_def() ); + bool make_no_exits = false, + const coord_def &where = coord_def() ); static int vault_grid( vault_placement &, int level_number, int vx, int vy, int altar_count, FixedVector < object_class_type, 7 > &acq_item_class, @@ -1283,8 +1286,8 @@ static void prepare_shoals(int level_number) } while ( vaultidx == -1 || !map_by_index(vaultidx)->has_tag("has_rune") ); - build_minivaults( level_number, vaultidx, true, false, - centres[1] - coord_def(3,3) ); + build_minivaults( level_number, vaultidx, true, false, false, + centres[1] ); for ( int i = 2; i < num_islands; ++i ) { @@ -1293,8 +1296,8 @@ static void prepare_shoals(int level_number) vaultidx = dgn_random_map_for_place(true); } while ( vaultidx == -1 || map_by_index(vaultidx)->has_tag("has_rune") ); - build_minivaults( level_number, vaultidx, true, false, - centres[i] - coord_def(3,3) ); + build_minivaults( level_number, vaultidx, true, false, false, + centres[i] ); } } else @@ -3178,7 +3181,7 @@ static bool find_minivault_place(const vault_placement &place, static bool build_minivaults(int level_number, int force_vault, bool building_level, bool clobber, - coord_def where) + bool make_no_exits, const coord_def &where) { // for some weird reason can't put a vault on level 1, because monster equip // isn't generated. @@ -3260,11 +3263,14 @@ static bool build_minivaults(int level_number, int force_vault, place.map.map.apply_overlays(coord_def(v1x, v1y)); - if (target_connections.empty() && place.map.has_tag("mini_float")) - pick_float_exits(place, target_connections); + if (!make_no_exits) + { + if (target_connections.empty() && place.map.has_tag("mini_float")) + pick_float_exits(place, target_connections); - if (!target_connections.empty()) - connect_vault(place); + if (!target_connections.empty()) + connect_vault(place); + } return (true); } // end build_minivaults() @@ -3653,7 +3659,7 @@ static dungeon_feature_type dgn_find_rune_subst_tags(const std::string &tags) // items and monsters (items may be destroyed, monsters may be // teleported). bool dgn_place_map(int map, bool generating_level, bool clobber, - const coord_def &where) + bool make_no_exits, const coord_def &where) { const map_def *mdef = map_by_index(map); bool did_map = false; @@ -3681,14 +3687,15 @@ bool dgn_place_map(int map, bool generating_level, bool clobber, if (mdef->is_minivault()) did_map = build_minivaults(you.your_level, map, generating_level, clobber, - where); + make_no_exits, where); else { dungeon_feature_type rune_subst = DNGN_FLOOR; if (mdef->has_tag_suffix("_entry")) rune_subst = dgn_find_rune_subst_tags(mdef->tags); did_map = build_secondary_vault(you.your_level, map, rune_subst, - generating_level, clobber, where); + generating_level, clobber, + make_no_exits, where); } // Activate any markers within the map. @@ -3730,10 +3737,11 @@ bool dgn_place_map(int map, bool generating_level, bool clobber, */ static bool build_secondary_vault(int level_number, int vault, int rune_subst, bool generating_level, - bool clobber, const coord_def &where) + bool clobber, bool no_exits, + const coord_def &where) { if (build_vaults(level_number, vault, rune_subst, true, true, - generating_level, clobber, where)) + generating_level, clobber, no_exits, where)) { const vault_placement &vp = level_vaults[ level_vaults.size() - 1 ]; connect_vault(vp); @@ -3746,7 +3754,7 @@ static bool build_secondary_vault(int level_number, int vault, static bool build_vaults(int level_number, int force_vault, int rune_subst, bool build_only, bool check_collisions, bool generating_level, bool clobber, - const coord_def &where) + bool make_no_exits, const coord_def &where) { int altar_count = 0; FixedVector < char, 10 > stair_exist; @@ -3820,6 +3828,9 @@ static bool build_vaults(int level_number, int force_vault, int rune_subst, if (gluggy == MAP_FLOAT && target_connections.empty()) pick_float_exits(place, target_connections); + if (make_no_exits) + target_connections.clear(); + // Must do this only after target_connections is finalised, or the vault // exits will not be correctly set. level_vaults.push_back(place); diff --git a/crawl-ref/source/dungeon.h b/crawl-ref/source/dungeon.h index c6095128aa..506a84845e 100644 --- a/crawl-ref/source/dungeon.h +++ b/crawl-ref/source/dungeon.h @@ -304,6 +304,7 @@ bool builder(int level_number, int level_type); void dgn_set_colours_from_monsters(); bool dgn_place_map(int map, bool generating_level, bool clobber, + bool make_no_exits, const coord_def &pos = coord_def(-1, -1)); void level_clear_vault_memory(); void level_welcome_messages(); -- cgit v1.2.3-54-g00ecf