mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
cc7a9d1ce6
commit
188352ea3e
|
@ -128,8 +128,8 @@ static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
|
||||||
{
|
{
|
||||||
const TileInfo *ti = data;
|
const TileInfo *ti = data;
|
||||||
|
|
||||||
if (v->tile != ti->tile || v->z_pos != ti->z || v->type == VEH_Disaster)
|
if (v->tile != ti->tile || v->type == VEH_Disaster) return NULL;
|
||||||
return NULL;
|
if (v->z_pos != ti->z && abs(ti->z - v->z_pos) >= 8) return NULL;
|
||||||
|
|
||||||
VehicleInTheWayErrMsg(v);
|
VehicleInTheWayErrMsg(v);
|
||||||
return v;
|
return v;
|
||||||
|
@ -151,8 +151,8 @@ bool EnsureNoVehicleZ(TileIndex tile, byte z)
|
||||||
{
|
{
|
||||||
TileInfo ti;
|
TileInfo ti;
|
||||||
|
|
||||||
FindLandscapeHeightByTile(&ti, tile);
|
ti.tile = tile;
|
||||||
ti.z = z + Correct_Z(ti.tileh);
|
ti.z = z + GetCorrectTileHeight(tile);
|
||||||
|
|
||||||
return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
|
return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue