diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-08-11 09:27:40 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-08-11 09:27:40 +0000 |
commit | 6ba9d6040bb157abd71e13505cf6f0f20fb961e8 (patch) | |
tree | ddf25012370b8f5a310c52b0183ae38b6959875c /crawl-ref/source/travel.cc | |
parent | d164f117510f973ca900ec805c8404d9e21f3288 (diff) | |
download | crawl-ref-6ba9d6040bb157abd71e13505cf6f0f20fb961e8.tar.gz crawl-ref-6ba9d6040bb157abd71e13505cf6f0f20fb961e8.zip |
Trunk->0.4 r6814: 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/branches/stone_soup-0.4@6815 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r-- | crawl-ref/source/travel.cc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index 058cbf7d22..0faca23a84 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; @@ -2499,7 +2502,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(); @@ -2821,7 +2825,8 @@ 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 || level_target.p.pos != best_stair) + if ((level_target.p.id != current + || level_target.p.pos != best_stair) && _Src_Dest_Level_Delta != -1) { // If so, is the original level closer to the target level than @@ -2831,11 +2836,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)) |