unmovable_cmd.c
changeset 3164 22513656d02b
parent 3017 915fae59d5e0
child 3183 cf71bd234ebd
--- 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));