diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-07-18 16:31:53 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-07-18 16:31:53 +0000 |
commit | 280290a5fabe951a68d53c09f6c92c1172b27454 (patch) | |
tree | 780f4274f2548cd1a475682b95eab93acc428a25 /crawl-ref/source/travel.cc | |
parent | 1d98e2f42503bee2a5ed1842db732f6a6b03884d (diff) | |
download | crawl-ref-280290a5fabe951a68d53c09f6c92c1172b27454.tar.gz crawl-ref-280290a5fabe951a68d53c09f6c92c1172b27454.zip |
[1754412] New rock stair behaviour: rock stairs take you to the nearest
point on the target level that is connected to at least one stone stair.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1893 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r-- | crawl-ref/source/travel.cc | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index 130d74451c..b5c6b48b04 100644 --- a/crawl-ref/source/travel.cc +++ b/crawl-ref/source/travel.cc @@ -190,7 +190,7 @@ static const char *trap_name(int x, int y) /* * Returns true if the character can cross this dungeon feature. */ -bool is_traversable(int grid) +bool is_traversable(dungeon_feature_type grid) { return traversable_terrain[grid] == TRAVERSABLE; } @@ -380,7 +380,7 @@ bool is_travelsafe_square(int x, int y, bool ignore_hostile, if (!ignore_terrain_knowledge && !is_terrain_known(x, y)) return (false); - const int grid = grd[x][y]; + const dungeon_feature_type grid = grd[x][y]; // Special-case secret doors so that we don't run into awkwardness when // a monster opens a secret door without the hero seeing it, but the travel @@ -468,22 +468,31 @@ static void set_pass_feature(unsigned char grid, signed char pass) * Sets traversable terrain based on the character's role and whether or not he * has permanent levitation */ -static void init_terrain_check() +void init_travel_terrain_check(bool check_race_equip) { - // Swimmers get deep water. - signed char water = player_can_swim()? TRAVERSABLE : IMPASSABLE; + if (check_race_equip) + { + // Swimmers get deep water. + signed char water = player_can_swim()? TRAVERSABLE : IMPASSABLE; - // If the player has overridden deep water already, we'll respect that. - set_pass_feature(DNGN_DEEP_WATER, water); + // If the player has overridden deep water already, we'll respect that. + set_pass_feature(DNGN_DEEP_WATER, water); - // Permanently levitating players can cross most hostile terrain. - signed char trav = player_is_permalevitating()? - TRAVERSABLE : IMPASSABLE; + // Permanently levitating players can cross most hostile terrain. + signed char trav = player_is_permalevitating()? + TRAVERSABLE : IMPASSABLE; - if (water != TRAVERSABLE) - set_pass_feature(DNGN_DEEP_WATER, trav); - set_pass_feature(DNGN_LAVA, trav); - set_pass_feature(DNGN_TRAP_MECHANICAL, trav); + if (water != TRAVERSABLE) + set_pass_feature(DNGN_DEEP_WATER, trav); + set_pass_feature(DNGN_LAVA, trav); + set_pass_feature(DNGN_TRAP_MECHANICAL, trav); + } + else + { + set_pass_feature(DNGN_DEEP_WATER, IMPASSABLE); + set_pass_feature(DNGN_LAVA, IMPASSABLE); + set_pass_feature(DNGN_TRAP_MECHANICAL, IMPASSABLE); + } } void travel_init_new_level() @@ -1256,7 +1265,7 @@ const coord_def travel_pathfind::pathfind(run_mode_type rmode) // Check whether species or levitation permits travel through terrain such // as deep water. - init_terrain_check(); + init_travel_terrain_check(); need_for_greed = (rmode == RMODE_EXPLORE_GREEDY && can_autopickup()); |