summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--unmovable_cmd.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/unmovable_cmd.c b/unmovable_cmd.c
index 07389b414..6dddbb502 100644
--- a/unmovable_cmd.c
+++ b/unmovable_cmd.c
@@ -308,12 +308,6 @@ static void ClickTile_Unmovable(TileIndex tile)
}
}
-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 @@ void GenerateUnmovables(void)
{
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 @@ void GenerateUnmovables(void)
/* 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));