diff options
author | Darkvater <darkvater@openttd.org> | 2006-01-22 17:17:11 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2006-01-22 17:17:11 +0000 |
commit | 188352ea3e8c0ea27518f5b5a436fa2d982eeefd (patch) | |
tree | 56c78e6816a7c40e9094049ccb97eacd760ce9c7 | |
parent | cc7a9d1ce69448beb55da1932ef9e209fa754b6d (diff) | |
download | openttd-188352ea3e8c0ea27518f5b5a436fa2d982eeefd.tar.xz |
(svn r3419) - Fix: [FS#40] (Possible) game crash on removing track/road under bridge. This was caused by a wrong tile-occupancy testing where it was assumed that a vehicle's height is only a multitude of 8 (a single height-difference). This is incorrect as a vehicle on a slope will assume all height levels between the lower-and upper-bounds. The crash is still possible as seen in the Flyspray bugreport but this has a different cause.
-rw-r--r-- | vehicle.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -128,8 +128,8 @@ static void *EnsureNoVehicleProcZ(Vehicle *v, void *data) { const TileInfo *ti = data; - if (v->tile != ti->tile || v->z_pos != ti->z || v->type == VEH_Disaster) - return NULL; + if (v->tile != ti->tile || v->type == VEH_Disaster) return NULL; + if (v->z_pos != ti->z && abs(ti->z - v->z_pos) >= 8) return NULL; VehicleInTheWayErrMsg(v); return v; @@ -151,8 +151,8 @@ bool EnsureNoVehicleZ(TileIndex tile, byte z) { TileInfo ti; - FindLandscapeHeightByTile(&ti, tile); - ti.z = z + Correct_Z(ti.tileh); + ti.tile = tile; + ti.z = z + GetCorrectTileHeight(tile); return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL; } |