summaryrefslogtreecommitdiff
path: root/tunnelbridge_cmd.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2005-03-25 17:30:54 +0000
committerDarkvater <Darkvater@openttd.org>2005-03-25 17:30:54 +0000
commit4089c85653e3aa047e23a2c72b35b0493e0993e9 (patch)
treeb34a0cc2fdff699cda869e5823f0501b2b8c37aa /tunnelbridge_cmd.c
parent44d901dba71a4f39d35dc5822f17b82eaa59c081 (diff)
downloadopenttd-4089c85653e3aa047e23a2c72b35b0493e0993e9.tar.xz
(svn r2066) - Fix: [ 1164248 ] game crash while AI builds bridge. Also protect bridge building against invalid bridges and some safeguards when drawing.
Diffstat (limited to 'tunnelbridge_cmd.c')
-rw-r--r--tunnelbridge_cmd.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c
index 4b98be103..df2191dec 100644
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -197,6 +197,9 @@ int32 CmdBuildBridge(int x, int y, uint32 flags, uint32 p1, uint32 p2)
direction = 0;
+ if (bridge_type >= MAX_BRIDGES) // out of bounds bridge
+ return_cmd_error(STR_5015_CAN_T_BUILD_BRIDGE_HERE);
+
/* check if valid, and make sure that (x,y) are smaller than (sx,sy) */
if (x == sx) {
if (y == sy)
@@ -1046,7 +1049,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
}
// bridge ending.
- b = _bridge_sprite_table[_map2[ti->tile]>>4][6];
+ b = _bridge_sprite_table[(_map2[ti->tile] >> 4) & 0xF][6];
b += (tmp&(3<<1))*4; /* actually ((tmp>>2)&3)*8 */
b += (tmp&1); // direction
if (ti->tileh == 0) b += 4; // sloped "entrance" ?
@@ -1106,7 +1109,7 @@ static void DrawTile_TunnelBridge(TileInfo *ti)
DrawGroundSprite(image);
}
// get bridge sprites
- b = _bridge_sprite_table[_map2[ti->tile]>>4][_map2[ti->tile]&0xF] + tmp * 4;
+ b = _bridge_sprite_table[(_map2[ti->tile] >> 4) & 0xF][_map2[ti->tile]&0xF] + tmp * 4;
z = GetBridgeHeight(ti) + 5;