mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r1583) -Fix: You should no longer be able to delete bridges on any type of underground when there is a vehicle on it
This commit is contained in:
parent
5290d5f667
commit
0a944dc950
|
@ -214,6 +214,7 @@ bool ScrollWindowTo(int x, int y, Window * w);
|
||||||
bool ScrollMainWindowToTile(TileIndex tile);
|
bool ScrollMainWindowToTile(TileIndex tile);
|
||||||
bool ScrollMainWindowTo(int x, int y);
|
bool ScrollMainWindowTo(int x, int y);
|
||||||
void DrawSprite(uint32 img, int x, int y);
|
void DrawSprite(uint32 img, int x, int y);
|
||||||
|
uint GetCorrectTileHeight(TileIndex tile);
|
||||||
bool EnsureNoVehicle(TileIndex tile);
|
bool EnsureNoVehicle(TileIndex tile);
|
||||||
bool EnsureNoVehicleZ(TileIndex tile, byte z);
|
bool EnsureNoVehicleZ(TileIndex tile, byte z);
|
||||||
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
|
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
|
||||||
|
|
|
@ -742,7 +742,8 @@ static int32 DoClearBridge(uint tile, uint32 flags)
|
||||||
*/
|
*/
|
||||||
tile += direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
|
tile += direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
|
||||||
endtile -= direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
|
endtile -= direction ? TILE_XY(0, 1) : TILE_XY( 1,0);
|
||||||
if ((v = FindVehicleBetween(tile, endtile, TilePixelHeight(tile) + 8)) != NULL) {
|
/* Bridges on slopes might have their Z-value offset..correct this */
|
||||||
|
if ((v = FindVehicleBetween(tile, endtile, TilePixelHeight(tile) + 8 + GetCorrectTileHeight(tile))) != NULL) {
|
||||||
VehicleInTheWayErrMsg(v);
|
VehicleInTheWayErrMsg(v);
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -804,25 +805,21 @@ clear_it:;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32 ClearTile_TunnelBridge(uint tile, byte flags) {
|
static int32 ClearTile_TunnelBridge(uint tile, byte flags) {
|
||||||
int32 ret;
|
|
||||||
byte m5 = _map5[tile];
|
byte m5 = _map5[tile];
|
||||||
|
|
||||||
if ((m5 & 0xF0) == 0) {
|
if ((m5 & 0xF0) == 0) {
|
||||||
if (flags & DC_AUTO)
|
if (flags & DC_AUTO)
|
||||||
return_cmd_error(STR_5006_MUST_DEMOLISH_TUNNEL_FIRST);
|
return_cmd_error(STR_5006_MUST_DEMOLISH_TUNNEL_FIRST);
|
||||||
|
|
||||||
return DoClearTunnel(tile, flags);
|
return DoClearTunnel(tile, flags);
|
||||||
} else if (m5 & 0x80) {
|
} else if (m5 & 0x80) {
|
||||||
if (flags & DC_AUTO)
|
if (flags & DC_AUTO)
|
||||||
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
|
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
|
||||||
|
|
||||||
ret = DoClearBridge(tile, flags);
|
return DoClearBridge(tile, flags);
|
||||||
if (ret == CMD_ERROR)
|
}
|
||||||
return CMD_ERROR;
|
|
||||||
|
return CMD_ERROR;
|
||||||
return ret;
|
|
||||||
} else {
|
|
||||||
return CMD_ERROR;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
|
int32 DoConvertTunnelBridgeRail(uint tile, uint totype, bool exec)
|
||||||
|
|
22
vehicle.c
22
vehicle.c
|
@ -73,17 +73,27 @@ static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint Correct_Z(uint tileh)
|
||||||
|
{
|
||||||
|
// needs z correction for slope-type graphics that have the NORTHERN tile lowered
|
||||||
|
// 1, 2, 3, 4, 5, 6 and 7
|
||||||
|
return (CORRECT_Z(tileh)) ? 8 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint GetCorrectTileHeight(TileIndex tile)
|
||||||
|
{
|
||||||
|
TileInfo ti;
|
||||||
|
|
||||||
|
FindLandscapeHeightByTile(&ti, tile);
|
||||||
|
return Correct_Z(ti.tileh);
|
||||||
|
}
|
||||||
|
|
||||||
bool EnsureNoVehicleZ(TileIndex tile, byte z)
|
bool EnsureNoVehicleZ(TileIndex tile, byte z)
|
||||||
{
|
{
|
||||||
TileInfo ti;
|
TileInfo ti;
|
||||||
|
|
||||||
FindLandscapeHeightByTile(&ti, tile);
|
FindLandscapeHeightByTile(&ti, tile);
|
||||||
// needs z correction for slope-type graphics that have the NORTHERN tile lowered
|
ti.z = z + Correct_Z(ti.tileh);
|
||||||
// 1, 2, 3, 4, 5, 6 and 7
|
|
||||||
if (CORRECT_Z(ti.tileh))
|
|
||||||
z += 8;
|
|
||||||
|
|
||||||
ti.z = z;
|
|
||||||
|
|
||||||
return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
|
return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue