diff options
author | truelight <truelight@openttd.org> | 2004-08-24 12:54:37 +0000 |
---|---|---|
committer | truelight <truelight@openttd.org> | 2004-08-24 12:54:37 +0000 |
commit | a0ba5a79394c4a6b8087bf5f2d076bba7ff13135 (patch) | |
tree | 897b6585f4866af42f4b45e81f6c517977a93d05 | |
parent | c32166a5c9d6cd969bdc3a6942b62286a685d26f (diff) | |
download | openttd-a0ba5a79394c4a6b8087bf5f2d076bba7ff13135.tar.xz |
(svn r132) -Fix: [1014278] TileAddWrap() gave wrong results. Fixed now.
-rw-r--r-- | functions.h | 2 | ||||
-rw-r--r-- | industry_cmd.c | 6 | ||||
-rw-r--r-- | landscape.c | 19 |
3 files changed, 19 insertions, 8 deletions
diff --git a/functions.h b/functions.h index 64be83efb..7c39c8a31 100644 --- a/functions.h +++ b/functions.h @@ -28,7 +28,7 @@ void ClickTile(uint tile); void GetTileDesc(uint tile, TileDesc *td); void DrawTile(TileInfo *ti); -uint TileAddWrap(TileIndex tile, int add); +uint TileAddWrap(TileIndex tile, int addx, int addy); enum { TILE_WRAPPED = (uint)-1 }; diff --git a/industry_cmd.c b/industry_cmd.c index 031540510..067a91458 100644 --- a/industry_cmd.c +++ b/industry_cmd.c @@ -969,7 +969,7 @@ static void MaybePlantFarmField(Industry *i) { uint tile; if (CHANCE16(1,8)) { - tile = TileAddWrap(i->xy, TILE_XY(i->width>>1, i->height>>1) + (Random()&TILE_XY(31,31))-TILE_XY(16,16)); + tile = TileAddWrap(i->xy, ((i->width>>1) + Random() % 31 - 16), ((i->height>>1) + Random() % 31 - 16)); if (tile != TILE_WRAPPED) PlantFarmField(tile); } @@ -1473,10 +1473,10 @@ static void DoCreateNewIndustry(Industry *i, uint tile, int type, const Industry if (i->type == IT_FARM || i->type == IT_FARM_2) { tile = i->xy + TILE_XY((i->width >> 1), (i->height >> 1)); for(j=0; j!=50; j++) { - uint new_tile = TileAddWrap(tile, (Random() & TILE_XY(31,31)) - TILE_XY(16,16)); + uint new_tile = TileAddWrap(tile, Random() % 31 - 16, Random() % 31 - 16); if (new_tile != TILE_WRAPPED) PlantFarmField(new_tile); - } + } } _industry_sort_dirty = true; InvalidateWindow(WC_INDUSTRY_DIRECTORY, 0); diff --git a/landscape.c b/landscape.c index 45e371bb2..4c13d880b 100644 --- a/landscape.c +++ b/landscape.c @@ -742,11 +742,22 @@ TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng) ); } -uint TileAddWrap(TileIndex tile, int add) +// This function checks if we add addx/addy to tile, if we +// do wrap around the edges. For example, tile = (10,2) and +// addx = +3 and addy = -4. This function will now return +// TILE_WRAPPED, because the y is wrapped. This is needed in +// for example, farmland. When the tile is not wrapped, +// the result will be tile + TILE_XY(addx, addy) +uint TileAddWrap(TileIndex tile, int addx, int addy) { - uint t = tile + add; - if (t < TILES_X * TILE_Y_MAX && GET_TILE_X(t) != TILE_X_MAX) - return t; + int x, y; + x = GET_TILE_X(tile) + addx; + y = GET_TILE_Y(tile) + addy; + + // Are we about to wrap? + if (x > 0 && x < TILE_X_MAX && y > 0 && y < TILE_Y_MAX) + return tile + TILE_XY(addx, addy); + return TILE_WRAPPED; } |