# HG changeset patch # User tron # Date 1141820816 0 # Node ID 22513656d02ba1616ad5ae1b7dc86017273861de # Parent 129a91e147b8d6778cc87c403d58ebeec7193cdb (svn r3791) Replace home grown direction handling for placing lighthouses by standard DiagDir diff -r 129a91e147b8 -r 22513656d02b unmovable_cmd.c --- a/unmovable_cmd.c Wed Mar 08 08:51:26 2006 +0000 +++ b/unmovable_cmd.c Wed Mar 08 12:26:56 2006 +0000 @@ -308,12 +308,6 @@ } } -static const TileIndexDiffC _tile_add[] = { - { 1, 0}, - { 0, 1}, - {-1, 0}, - { 0, -1} -}; /* checks, if a radio tower is within a 9x9 tile square around tile */ static bool checkRadioTowerNearby(TileIndex tile) @@ -332,9 +326,9 @@ { int i,j; TileIndex tile; - uint32 r; - int dir; uint h; + uint maxx; + uint maxy; if (_opt.landscape == LT_CANDY) return; @@ -356,20 +350,26 @@ /* add lighthouses */ i = ScaleByMapSize1D((Random() & 3) + 7); + maxx = MapMaxX(); + maxy = MapMaxY(); do { + uint32 r; + DiagDirection dir; + restart: r = Random(); - dir = r >> 30; - r %= (dir == 0 || dir == 2) ? MapMaxY() : MapMaxX(); - tile = - (dir == 0) ? TileXY(0, r) : 0 + // left - (dir == 1) ? TileXY(r, 0) : 0 + // top - (dir == 2) ? TileXY(MapMaxX(), r) : 0 + // right - (dir == 3) ? TileXY(r, MapMaxY()) : 0; // bottom + dir = GB(r, 30, 2); + switch (dir) { + default: + case DIAGDIR_NE: tile = TileXY(maxx, r % maxy); break; + case DIAGDIR_SE: tile = TileXY(r % maxx, 0); break; + case DIAGDIR_SW: tile = TileXY(0, r % maxy); break; + case DIAGDIR_NW: tile = TileXY(r % maxx, maxy); break; + } j = 20; do { if (--j == 0) goto restart; - tile = TILE_MASK(tile + ToTileIndexDiff(_tile_add[dir])); + tile = TILE_MASK(tile + TileOffsByDir(dir)); } while (!(IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h <= 16)); assert(tile == TILE_MASK(tile));