Mercurial > hg > openttd
changeset 2979:5f4509eb504c draft
(svn r3554) Add accessors for the field type and fences of clear tiles
author | tron <tron@openttd.org> |
---|---|
date | Sun, 05 Feb 2006 11:54:25 +0000 |
parents | 8e62af9acd41 |
children | 7c5065b1038e |
files | clear.h clear_cmd.c industry_cmd.c |
diffstat | 3 files changed, 40 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/clear.h +++ b/clear.h @@ -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 +++ b/clear_cmd.c @@ -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 +++ b/industry_cmd.c @@ -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)