Changeset - r2934:94158a76ebcf
[Not reviewed]
master
0 6 0
tron - 19 years ago 2006-01-30 17:18:45
tron@openttd.org
(svn r3490) -Fix: A bunch (10) of off-by-one errors when checking if a TileIndex points to a tile on the map
6 files changed with 10 insertions and 10 deletions:
0 comments (0 inline, 0 general)
clear_cmd.c
Show inline comments
 
@@ -230,13 +230,13 @@ int32 CmdTerraformLand(int x, int y, uin
 
	ts.modheight = modheight_data;
 
	ts.tile_table = tile_table_data;
 

	
 
	tile = TileVirtXY(x, y);
 

	
 
	/* Make an extra check for map-bounds cause we add tiles to the originating tile */
 
	if (tile + TileDiffXY(1, 1) > MapSize()) return CMD_ERROR;
 
	if (tile + TileDiffXY(1, 1) >= MapSize()) return CMD_ERROR;
 

	
 
	if (p1 & 1) {
 
		if (!TerraformTileHeight(&ts, tile + TileDiffXY(1, 0),
 
				TileHeight(tile + TileDiffXY(1, 0)) + direction))
 
					return CMD_ERROR;
 
	}
 
@@ -329,13 +329,13 @@ int32 CmdLevelLand(int ex, int ey, uint3
 
	int size_x, size_y;
 
	int sx, sy;
 
	uint h, curh;
 
	TileIndex tile;
 
	int32 ret, cost, money;
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	// remember level height
 
	h = TileHeight(p1);
 

	
landscape.c
Show inline comments
 
@@ -304,13 +304,13 @@ int32 CmdClearArea(int ex, int ey, uint3
 
{
 
	int32 cost, ret, money;
 
	int sx,sy;
 
	int x,y;
 
	bool success = false;
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	// make sure sx,sy are smaller than ex,ey
 
	sx = TileX(p1) * 16;
 
	sy = TileY(p1) * 16;
rail_cmd.c
Show inline comments
 
@@ -563,13 +563,13 @@ static int32 CmdRailTrackHelper(int x, i
 
	Track track = (Track)GB(p2, 4, 3);
 
	Trackdir trackdir;
 
	byte mode = HASBIT(p2, 7);
 
	RailType railtype = (RailType)GB(p2, 0, 4);
 

	
 
	if (!ValParamRailtype(railtype) || !ValParamTrackOrientation(track)) return CMD_ERROR;
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 
	trackdir = TrackToTrackdir(track);
 

	
 
	/* unpack end point */
 
	ex = TileX(p1) * TILE_SIZE;
 
	ey = TileY(p1) * TILE_SIZE;
 

	
 
@@ -826,13 +826,13 @@ static int32 CmdSignalTrackHelper(int x,
 
	int mode = p2 & 0x1;
 
	Track track = GB(p2, 4, 3);
 
	Trackdir trackdir = TrackToTrackdir(track);
 
	byte semaphores = (HASBIT(p2, 3)) ? 8 : 0;
 
	byte signal_density = (p2 >> 24);
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 
	if (signal_density == 0 || signal_density > 20) return CMD_ERROR;
 

	
 
	if (!IsTileType(tile, MP_RAILWAY)) return CMD_ERROR;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
@@ -985,13 +985,13 @@ int32 CmdConvertRail(int ex, int ey, uin
 
	int32 ret, cost, money;
 
	int sx, sy, x, y;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	if (!ValParamRailtype(p2)) return CMD_ERROR;
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	// make sure sx,sy are smaller than ex,ey
 
	sx = TileX(p1) * TILE_SIZE;
 
	sy = TileY(p1) * TILE_SIZE;
 
	if (ex < sx) intswap(ex, sx);
 
	if (ey < sy) intswap(ey, sy);
road_cmd.c
Show inline comments
 
@@ -515,13 +515,13 @@ int32 CmdBuildLongRoad(int x, int y, uin
 
{
 
	TileIndex start_tile, end_tile, tile;
 
	int32 cost, ret;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	start_tile = p1;
 
	end_tile = TileVirtXY(x, y);
 

	
 
	/* Only drag in X or Y direction dictated by the direction variable */
 
	if (!HASBIT(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
 
@@ -570,13 +570,13 @@ int32 CmdRemoveLongRoad(int x, int y, ui
 
{
 
	TileIndex start_tile, end_tile, tile;
 
	int32 cost, ret;
 

	
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	start_tile = p1;
 
	end_tile = TileVirtXY(x, y);
 

	
 
	/* Only drag in X or Y direction dictated by the direction variable */
 
	if (!HASBIT(p2, 2) && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
tunnelbridge_cmd.c
Show inline comments
 
@@ -206,13 +206,13 @@ int32 CmdBuildBridge(int x, int y, uint3
 
	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 

	
 
	/* unpack parameters */
 
	bridge_type = GB(p2, 0, 8);
 
	railtype    = GB(p2, 8, 8);
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	// type of bridge
 
	if (HASBIT(railtype, 7)) { // bit 15 of original p2 param
 
		railtype = 0;
 
		rail_or_road = 2;
 
	} else {
water_cmd.c
Show inline comments
 
@@ -212,13 +212,13 @@ int32 CmdBuildLock(int x, int y, uint32 
 
int32 CmdBuildCanal(int x, int y, uint32 flags, uint32 p1, uint32 p2)
 
{
 
	int32 ret, cost;
 
	int size_x, size_y;
 
	int sx, sy;
 

	
 
	if (p1 > MapSize()) return CMD_ERROR;
 
	if (p1 >= MapSize()) return CMD_ERROR;
 

	
 
	sx = TileX(p1);
 
	sy = TileY(p1);
 
	/* x,y are in pixel-coordinates, transform to tile-coordinates
 
	 * to be able to use the BEGIN_TILE_LOOP() macro */
 
	x >>= 4; y >>= 4;
0 comments (0 inline, 0 general)