(svn r3554) Add accessors for the field type and fences of clear tiles
authortron
Sun, 05 Feb 2006 11:54:25 +0000
changeset 2979 3ddf7c78d469
parent 2978 a67025958ebb
child 2980 598420e23b40
(svn r3554) Add accessors for the field type and fences of clear tiles
clear.h
clear_cmd.c
industry_cmd.c
--- a/clear.h	Sun Feb 05 11:10:31 2006 +0000
+++ b/clear.h	Sun Feb 05 11:54:25 2006 +0000
@@ -33,4 +33,14 @@
 	_m[t].m5 = 0 << 5 | type << 2 | density;
 }
 
+static inline uint GetFieldType(TileIndex t) { return GB(_m[t].m3, 0, 4); }
+static inline void SetFieldType(TileIndex t, uint f) { SB(_m[t].m3, 0, 4, f); }
+
+/* Is used by tree tiles, too */
+static inline uint GetFenceSE(TileIndex t) { return GB(_m[t].m4, 2, 3); }
+static inline void SetFenceSE(TileIndex t, uint h) { SB(_m[t].m4, 2, 3, h); }
+
+static inline uint GetFenceSW(TileIndex t) { return GB(_m[t].m4, 5, 3); }
+static inline void SetFenceSW(TileIndex t, uint h) { SB(_m[t].m4, 5, 3, h); }
+
 #endif
--- a/clear_cmd.c	Sun Feb 05 11:10:31 2006 +0000
+++ b/clear_cmd.c	Sun Feb 05 11:54:25 2006 +0000
@@ -482,7 +482,6 @@
 
 void DrawClearLandFence(const TileInfo *ti)
 {
-	byte m4 = _m[ti->tile].m4;
 	byte z = ti->z;
 
 	if (ti->tileh & 2) {
@@ -490,12 +489,12 @@
 		if (ti->tileh == 0x17) z += 8;
 	}
 
-	if (GB(m4, 5, 3) != 0) {
-		DrawGroundSpriteAt(_clear_land_fence_sprites_1[GB(m4, 5, 3) - 1] + _fence_mod_by_tileh[ti->tileh], ti->x, ti->y, z);
+	if (GetFenceSW(ti->tile) != 0) {
+		DrawGroundSpriteAt(_clear_land_fence_sprites_1[GetFenceSW(ti->tile) - 1] + _fence_mod_by_tileh[ti->tileh], ti->x, ti->y, z);
 	}
 
-	if (GB(m4, 2, 3) != 0) {
-		DrawGroundSpriteAt(_clear_land_fence_sprites_1[GB(m4, 2, 3) - 1] + _fence_mod_by_tileh_2[ti->tileh], ti->x, ti->y, z);
+	if (GetFenceSE(ti->tile) != 0) {
+		DrawGroundSpriteAt(_clear_land_fence_sprites_1[GetFenceSE(ti->tile) - 1] + _fence_mod_by_tileh_2[ti->tileh], ti->x, ti->y, z);
 	}
 }
 
@@ -515,7 +514,7 @@
 			break;
 
 		case CL_FIELDS:
-			DrawGroundSprite(_clear_land_sprites_1[GB(_m[ti->tile].m3, 0, 4)] + _tileh_to_sprite[ti->tileh]);
+			DrawGroundSprite(_clear_land_sprites_1[GetFieldType(ti->tile)] + _tileh_to_sprite[ti->tileh]);
 			break;
 
 		case CL_SNOW:
@@ -559,27 +558,27 @@
 	self = (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CL_FIELDS));
 
 	neighbour = (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 1, 0), CL_FIELDS));
-	if (GB(_m[tile].m4, 5, 3) == 0) {
+	if (GetFenceSW(tile) == 0) {
 		if (self != neighbour) {
-			SB(_m[tile].m4, 5, 3, 3);
+			SetFenceSW(tile, 3);
 			dirty = tile;
 		}
 	} else {
 		if (self == 0 && neighbour == 0) {
-			SB(_m[tile].m4, 5, 3, 0);
+			SetFenceSW(tile, 0);
 			dirty = tile;
 		}
 	}
 
 	neighbour = (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, 1), CL_FIELDS));
-	if (GB(_m[tile].m4, 2, 3) == 0) {
+	if (GetFenceSE(tile) == 0) {
 		if (self != neighbour) {
-			SB(_m[tile].m4, 2, 3, 3);
+			SetFenceSE(tile, 3);
 			dirty = tile;
 		}
 	} else {
 		if (self == 0 && neighbour == 0) {
-			SB(_m[tile].m4, 2, 3, 0);
+			SetFenceSE(tile, 0);
 			dirty = tile;
 		}
 	}
@@ -673,9 +672,9 @@
 				SetClearCounter(tile, 0);
 			}
 
-			field_type = GB(_m[tile].m3, 0, 4);
+			field_type = GetFieldType(tile);
 			field_type = (field_type < 8) ? field_type + 1 : 0;
-			SB(_m[tile].m3, 0, 4, field_type);
+			SetFieldType(tile, field_type);
 			break;
 		}
 
--- a/industry_cmd.c	Sun Feb 05 11:10:31 2006 +0000
+++ b/industry_cmd.c	Sun Feb 05 11:54:25 2006 +0000
@@ -903,23 +903,19 @@
 
 static void SetupFarmFieldFence(TileIndex tile, int size, byte type, int direction)
 {
-	byte or, and;
-
 	do {
 		tile = TILE_MASK(tile);
 
 		if (IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) {
+			byte or = type;
 
-			or = type;
 			if (or == 1 && CHANCE16(1, 7)) or = 2;
 
-			or <<= 2;
-			and = (byte)~0x1C;
 			if (direction) {
-				or <<= 3;
-				and = (byte)~0xE0;
+				SetFenceSW(tile, or);
+			} else {
+				SetFenceSE(tile, or);
 			}
-			_m[tile].m4 = (_m[tile].m4 & and) | or;
 		}
 
 		tile += direction ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
@@ -931,7 +927,9 @@
 	uint size_x, size_y;
 	uint32 r;
 	uint count;
-	int type, type2;
+	uint counter;
+	uint field_type;
+	int type;
 
 	if (_opt.landscape == LT_HILLY) {
 		if (GetTileZ(tile) + 16 >= _opt.snow_line)
@@ -957,19 +955,21 @@
 
 	/* determine type of field */
 	r = Random();
-	type = ((r & 0xE0) | 0xF);
-	type2 = GB(r, 8, 8) * 9 >> 8;
+	counter = GB(r, 5, 3);
+	field_type = GB(r, 8, 8) * 9 >> 8;
 
 	/* make field */
 	BEGIN_TILE_LOOP(cur_tile, size_x, size_y, tile)
 		cur_tile = TILE_MASK(cur_tile);
 		if (!IsBadFarmFieldTile2(cur_tile)) {
-			ModifyTile(cur_tile,
-				MP_SETTYPE(MP_CLEAR) |
-				MP_MAP2_CLEAR | MP_MAP3LO | MP_MAP3HI_CLEAR | MP_MAPOWNER | MP_MAP5,
-				type2,			/* map3_lo */
-				OWNER_NONE,	/* map_owner */
-				type);			/* map5 */
+			SetTileType(cur_tile, MP_CLEAR);
+			SetTileOwner(cur_tile, OWNER_NONE);
+			SetFieldType(cur_tile, field_type);
+			SetFenceSW(cur_tile, 0);
+			SetFenceSE(cur_tile, 0);
+			SetClearGroundDensity(cur_tile, CL_FIELDS, 3);
+			SetClearCounter(cur_tile, counter);
+			MarkTileDirtyByTile(cur_tile);
 		}
 	END_TILE_LOOP(cur_tile, size_x, size_y, tile)