summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_tunnel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ai/api/ai_tunnel.cpp')
-rw-r--r--src/ai/api/ai_tunnel.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/ai/api/ai_tunnel.cpp b/src/ai/api/ai_tunnel.cpp
index cc7d95606..ea103ce4e 100644
--- a/src/ai/api/ai_tunnel.cpp
+++ b/src/ai/api/ai_tunnel.cpp
@@ -23,8 +23,21 @@
/* If it's a tunnel alread, take the easy way out! */
if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile);
- ::DoCommand(tile, 0, 0, DC_AUTO, CMD_BUILD_TUNNEL);
- return _build_tunnel_endtile == 0 ? INVALID_TILE : _build_tunnel_endtile;
+ uint start_z;
+ Slope start_tileh = ::GetTileSlope(tile, &start_z);
+ DiagDirection direction = ::GetInclinedSlopeDirection(start_tileh);
+ if (direction == INVALID_DIAGDIR) return INVALID_TILE;
+
+ TileIndexDiff delta = ::TileOffsByDiagDir(direction);
+ uint end_z;
+ do {
+ tile += delta;
+ if (!::IsValidTile(tile)) return INVALID_TILE;
+
+ ::GetTileSlope(tile, &end_z);
+ } while (start_z != end_z);
+
+ return tile;
}
static void _DoCommandReturnBuildTunnel2(class AIInstance *instance)