summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/files.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/files.cc')
-rw-r--r--crawl-ref/source/files.cc42
1 files changed, 21 insertions, 21 deletions
diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc
index d2085cc678..057a3a32bc 100644
--- a/crawl-ref/source/files.cc
+++ b/crawl-ref/source/files.cc
@@ -827,15 +827,7 @@ static void _place_player_on_stair(level_area_type old_level_type,
bool find_first = true;
// Order is important here.
- if (you.level_type == LEVEL_DUNGEON
- && old_branch == BRANCH_VESTIBULE_OF_HELL
- && stair_taken == DNGN_STONE_STAIRS_UP_I)
- {
- // Leaving hell - look for entry portal first.
- stair_taken = DNGN_ENTER_HELL;
- find_first = false;
- }
- else if (stair_taken == DNGN_EXIT_PANDEMONIUM)
+ if (stair_taken == DNGN_EXIT_PANDEMONIUM)
{
stair_taken = DNGN_ENTER_PANDEMONIUM;
find_first = false;
@@ -845,6 +837,10 @@ static void _place_player_on_stair(level_area_type old_level_type,
stair_taken = DNGN_ENTER_ABYSS;
find_first = false;
}
+ else if (stair_taken == DNGN_EXIT_HELL)
+ {
+ stair_taken = DNGN_ENTER_HELL;
+ }
else if (stair_taken == DNGN_ENTER_HELL)
{
// The vestibule and labyrinth always start from this stair.
@@ -885,9 +881,15 @@ static void _place_player_on_stair(level_area_type old_level_type,
- DNGN_ENTER_FIRST_BRANCH);
}
else if (stair_taken >= DNGN_ENTER_DIS
- && stair_taken <= DNGN_TRANSIT_PANDEMONIUM)
+ && stair_taken <= DNGN_ENTER_TARTARUS)
+ {
+ // Only when entering a hell - when exiting, go back to the
+ // entry stair.
+ if (player_in_hell())
+ stair_taken = DNGN_STONE_STAIRS_UP_I;
+ }
+ else if (stair_taken == DNGN_EXIT_ABYSS)
{
- // When entering a hell or pandemonium.
stair_taken = DNGN_STONE_STAIRS_UP_I;
}
else if (stair_taken == DNGN_ENTER_PORTAL_VAULT)
@@ -1078,13 +1080,14 @@ bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
if (you.level_type == LEVEL_DUNGEON && old_level_type == LEVEL_DUNGEON
|| load_mode == LOAD_START_GAME && you.char_direction != GDT_GAME_START)
{
- if (tmp_file_pairs[you.your_level][you.where_are_you] == false)
+ const level_id current(level_id::current());
+ if (Generated_Levels.find(current) == Generated_Levels.end())
{
// Make sure the old file is gone.
unlink(cha_fil.c_str());
// Save the information for later deletion -- DML 6/11/99
- tmp_file_pairs[you.your_level][you.where_are_you] = true;
+ Generated_Levels.insert(current);
}
}
@@ -1104,8 +1107,7 @@ bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
{
_grab_followers();
- if (old_level_type == LEVEL_DUNGEON)
- _save_level( old_level, LEVEL_DUNGEON, old_branch );
+ _save_level( old_level, old_level_type, old_branch );
}
if (make_changes)
@@ -1135,7 +1137,7 @@ bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
// generation.
you.your_level = 0;
you.char_direction = GDT_DESCENDING;
- tmp_file_pairs[you.your_level][you.where_are_you] = true;
+ Generated_Levels.insert(level_id::current());
}
_clear_env_map();
@@ -1657,13 +1659,11 @@ static void _restore_level(const level_id &original)
you.level_type, you.your_level, you.where_are_you );
}
-// Given a level in the dungeon (i.e. level_type == LEVEL_DUNGEON),
-// returns true if the level has been created already in this game.
-// Asserts if the level_type is not LEVEL_DUNGEON.
+// Given a level returns true if the level has been created already
+// in this game.
bool is_existing_level(const level_id &level)
{
- ASSERT(level.level_type == LEVEL_DUNGEON);
- return (tmp_file_pairs[level.absdepth()][level.branch]);
+ return (Generated_Levels.find(level) != Generated_Levels.end());
}
// Applies an operation (applicator) after switching to the specified level.