summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clear_cmd.c3
-rw-r--r--functions.h1
-rw-r--r--tunnel_map.c27
-rw-r--r--tunnel_map.h1
-rw-r--r--tunnelbridge_cmd.c34
5 files changed, 32 insertions, 34 deletions
diff --git a/clear_cmd.c b/clear_cmd.c
index c3ac7c73e..591f2a1ab 100644
--- a/clear_cmd.c
+++ b/clear_cmd.c
@@ -10,6 +10,7 @@
#include "tile.h"
#include "viewport.h"
#include "command.h"
+#include "tunnel_map.h"
#include "variables.h"
#include "table/sprites.h"
@@ -277,7 +278,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
t = TerraformGetHeightOfTile(&ts, tile + TileDiffXY(0, 1));
if (t <= z) z = t;
- if (!CheckTunnelInWay(tile, z * 8)) {
+ if (IsTunnelInWay(tile, z * 8)) {
return_cmd_error(STR_1002_EXCAVATION_WOULD_DAMAGE);
}
}
diff --git a/functions.h b/functions.h
index 39d270ff1..f5ba1b6ba 100644
--- a/functions.h
+++ b/functions.h
@@ -145,7 +145,6 @@ void AnimateAnimatedTiles(void);
void InitializeAnimatedTiles(void);
/* tunnelbridge_cmd.c */
-bool CheckTunnelInWay(TileIndex tile, int z);
bool CheckBridge_Stuff(byte bridge_type, uint bridge_len);
uint32 GetBridgeLength(TileIndex begin, TileIndex end);
int CalcBridgeLenCostFactor(int x);
diff --git a/tunnel_map.c b/tunnel_map.c
index d39c7ef04..8752d8107 100644
--- a/tunnel_map.c
+++ b/tunnel_map.c
@@ -23,3 +23,30 @@ TileIndex GetOtherTunnelEnd(TileIndex tile)
return tile;
}
+
+
+static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
+{
+ TileIndexDiff delta = TileOffsByDir(dir);
+ uint height;
+
+ do {
+ tile -= delta;
+ height = GetTileZ(tile);
+ } while (z < height);
+
+ return
+ z == height &&
+ IsTileType(tile, MP_TUNNELBRIDGE) &&
+ GB(_m[tile].m5, 4, 4) == 0 &&
+ GetTunnelDirection(tile) == dir;
+}
+
+bool IsTunnelInWay(TileIndex tile, uint z)
+{
+ return
+ IsTunnelInWayDir(tile, z, DIAGDIR_NE) ||
+ IsTunnelInWayDir(tile, z, DIAGDIR_SE) ||
+ IsTunnelInWayDir(tile, z, DIAGDIR_SW) ||
+ IsTunnelInWayDir(tile, z, DIAGDIR_NW);
+}
diff --git a/tunnel_map.h b/tunnel_map.h
index aa30e12c3..047f631f9 100644
--- a/tunnel_map.h
+++ b/tunnel_map.h
@@ -22,6 +22,7 @@ static inline TransportType GetTunnelTransportType(TileIndex t)
TileIndex GetOtherTunnelEnd(TileIndex);
+bool IsTunnelInWay(TileIndex, uint z);
static inline void MakeRoadTunnel(TileIndex t, Owner o, DiagDirection d)
diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c
index 50f38f16e..42c54a621 100644
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -428,36 +428,6 @@ not_valid_below:;
return cost;
}
-static bool DoCheckTunnelInWay(TileIndex tile, uint z, DiagDirection dir)
-{
- TileIndexDiff delta = TileOffsByDir(dir);
- uint height;
-
- do {
- tile -= delta;
- height = GetTileZ(tile);
- } while (z < height);
-
- if (z == height &&
- IsTileType(tile, MP_TUNNELBRIDGE) &&
- GB(_m[tile].m5, 4, 4) == 0 &&
- GetTunnelDirection(tile) == dir) {
- _error_message = STR_5003_ANOTHER_TUNNEL_IN_THE_WAY;
- return false;
- }
-
- return true;
-}
-
-bool CheckTunnelInWay(TileIndex tile, int z)
-{
- return
- DoCheckTunnelInWay(tile, z, DIAGDIR_NE) &&
- DoCheckTunnelInWay(tile, z, DIAGDIR_SE) &&
- DoCheckTunnelInWay(tile, z, DIAGDIR_SW) &&
- DoCheckTunnelInWay(tile, z, DIAGDIR_NW);
-}
-
/** Build Tunnel.
* @param x,y start tile coord of tunnel
@@ -504,8 +474,8 @@ int32 CmdBuildTunnel(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (start_z == end_z) break;
- if (!_cheats.crossing_tunnels.value && !CheckTunnelInWay(end_tile, start_z)) {
- return CMD_ERROR;
+ if (!_cheats.crossing_tunnels.value && IsTunnelInWay(end_tile, start_z)) {
+ return_cmd_error(STR_5003_ANOTHER_TUNNEL_IN_THE_WAY);
}
cost += _price.build_tunnel;