# HG changeset patch # User Peter Nelson # Date 2024-02-08 18:32:44 # Node ID e9f10824f0ddea1fed67d081b668e276e58c9898 # Parent 8ca07a87b8609facb1a718483bff7a112b9ea448 Change: Avoid adjacent fence fields. This restores pre-r23168 behaviour of only a single fence between adjacent fields. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1013,16 +1013,21 @@ static bool IsSuitableForFarmField(TileI static void SetupFarmFieldFence(TileIndex tile, int size, byte type, DiagDirection side) { TileIndexDiff diff = (DiagDirToAxis(side) == AXIS_Y ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); + TileIndexDiff neighbour_diff = TileOffsByDiagDir(side); do { tile = Map::WrapToMap(tile); if (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)) { - byte or_ = type; - - if (or_ == 1 && Chance16(1, 7)) or_ = 2; - - SetFence(tile, side, or_); + TileIndex neighbour = tile + neighbour_diff; + if (!IsTileType(neighbour, MP_CLEAR) || !IsClearGround(neighbour, CLEAR_FIELDS) || GetFence(neighbour, ReverseDiagDir(side)) == 0) { + /* Add fence as long as neighbouring tile does not already have a fence in the same position. */ + byte or_ = type; + + if (or_ == 1 && Chance16(1, 7)) or_ = 2; + + SetFence(tile, side, or_); + } } tile += diff;