summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/travel.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-11 09:14:57 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-08-11 09:14:57 +0000
commit60f0a9053b155127c5a9b3f9b14778091c4af142 (patch)
tree3b8a533933f61dc6a848e2d800a63dd4884cd3a8 /crawl-ref/source/travel.cc
parent2f0d13d69ee910d07aab5c85dd9e9c83416e9e82 (diff)
downloadcrawl-ref-60f0a9053b155127c5a9b3f9b14778091c4af142.tar.gz
crawl-ref-60f0a9053b155127c5a9b3f9b14778091c4af142.zip
Check both ends of interlevel travel to see if travel is going out of [src,dst] range (sorear).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6814 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r--crawl-ref/source/travel.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc
index 6e21637f35..f4cc1ac58d 100644
--- a/crawl-ref/source/travel.cc
+++ b/crawl-ref/source/travel.cc
@@ -97,6 +97,9 @@ static travel_target level_target;
// interlevel travel, as estimated by level_distance.
static int _Src_Dest_Level_Delta = -1;
+// Source level where interlevel travel was last activated.
+static level_id _Src_Level;
+
// Remember the last place explore stopped because autopickup failed.
static coord_def explore_stopped_pos;
@@ -2483,7 +2486,8 @@ void start_translevel_travel(bool prompt_for_destination)
_Route_Warning.new_dest(level_target);
- _Src_Dest_Level_Delta = level_distance(level_id::current(),
+ _Src_Level = level_id::current();
+ _Src_Dest_Level_Delta = level_distance(_Src_Level,
level_target.p.id);
_start_running();
@@ -2790,7 +2794,7 @@ static bool _find_transtravel_square(const level_pos &target, bool verbose)
if (best_stair.x != -1 && best_stair.y != -1)
{
// Is this stair going offlevel?
- if ((level_target.p.id != current
+ if ((level_target.p.id != current
|| level_target.p.pos != best_stair)
&& _Src_Dest_Level_Delta != -1)
{
@@ -2801,11 +2805,12 @@ static bool _find_transtravel_square(const level_pos &target, bool verbose)
if (dest_stair && dest_stair->destination.id.is_valid())
{
- const int ndist =
- level_distance(dest_stair->destination.id,
- level_target.p.id);
-
- if (_Src_Dest_Level_Delta < ndist
+ if ((_Src_Dest_Level_Delta <
+ level_distance(dest_stair->destination.id,
+ level_target.p.id) ||
+ _Src_Dest_Level_Delta <
+ level_distance(dest_stair->destination.id,
+ _Src_Level))
&& !_Route_Warning.warn_continue_travel(
level_target,
dest_stair->destination.id))