(svn r23168) -Feature [FS#1824]: always draw fences around field tiles

This commit is contained in:
yexo 2011-11-08 19:48:47 +00:00
parent 704dcc0a47
commit 5c838ff1c3
9 changed files with 168 additions and 69 deletions

View File

@ -106,6 +106,7 @@
<ul> <ul>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the tile (normally <tt>10</tt>)</li> <li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> of the tile (normally <tt>10</tt>)</li>
<li>m2: see fields</li> <li>m2: see fields</li>
<li>m3 bits 7..5: type of hedge on NE border of the tile</li>
<li>m3 bits 3..0: see fields</li> <li>m3 bits 3..0: see fields</li>
<li>m3 bit 4: set if the tile is covered with snow</li> <li>m3 bit 4: set if the tile is covered with snow</li>
<li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none)</li> <li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none)</li>
@ -196,6 +197,7 @@
</table> </table>
</li> </li>
<li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li> <li>m6 bits 7..6 : Possibility of a bridge above, in the <a href="#bridge_direction">direction specified</a></li>
<li>m6 bits 4..2: type of hedge on NW border of the tile</li>
<li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li> <li>m6 bits 1..0 : <a href="#tropic_zone">Tropic zone definition</a></li>
</ul> </ul>
</td> </td>
@ -816,8 +818,6 @@
</table> </table>
<small>Note: the actually displayed set of trees depends on both type and number of trees</small> <small>Note: the actually displayed set of trees depends on both type and number of trees</small>
</li> </li>
<li>m4 bits 7..5: type of hedge on the SW border of the tile (1 through 6, or 0=none)</li>
<li>m4 bits 4..2: type of hedge on the SE border of the tile (1 through 6, or 0=none)</li>
<li>m5 bits 7..6: number of trees minus one</li> <li>m5 bits 7..6: number of trees minus one</li>
<li>m5 bits 2..0: growth status: <li>m5 bits 2..0: growth status:
<table border="0"> <table border="0">

View File

@ -68,10 +68,10 @@ the array so you can quickly see what is used and what is not.
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td> <td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOO</span>X <span class="free">OOOO</span></td> <td class="bits">XXXX <span class="free">OOOO</span></td>
<td class="bits">XXXX XX<span class="free">OO</span></td> <td class="bits">XXXX XX<span class="free">OO</span></td>
<td class="bits">XXXX XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td> <td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
@ -79,10 +79,10 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td> <td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span>X XXXX</td> <td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">-inherit-</td> <td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td> <td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
</tr> </tr>
<tr> <tr>
@ -172,7 +172,7 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td> <td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td> <td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
<td class="bits"><span class="option">~~</span>XX XXXX</td> <td class="bits"><span class="option">~~</span>XX XXXX</td>
<td class="bits">XXXX XX<span class="free">OO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XX<span class="free">OO O</span>XXX</td> <td class="bits">XX<span class="free">OO O</span>XXX</td>
<td class="bits"><span class="free">OOOO OO</span>XX</td> <td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td> <td class="bits"><span class="free">OOOO OOOO</span></td>

View File

@ -61,22 +61,44 @@ void DrawHillyLandTile(const TileInfo *ti)
} }
} }
void DrawClearLandFence(const TileInfo *ti) static void DrawClearLandFence(const TileInfo *ti)
{ {
/* combine fences into one sprite object */
StartSpriteCombine();
int maxz = GetSlopeMaxPixelZ(ti->tileh);
bool fence_nw = GetFenceNW(ti->tile) != 0;
if (fence_nw) {
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_W);
SpriteID sprite = _clear_land_fence_sprites[GetFenceNW(ti->tile) - 1] + _fence_mod_by_tileh_nw[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y - 15, 16, 31, maxz - z + 4, ti->z + z, false, 0, 15, -z);
}
bool fence_ne = GetFenceNE(ti->tile) != 0;
if (fence_ne) {
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_E);
SpriteID sprite = _clear_land_fence_sprites[GetFenceNE(ti->tile) - 1] + _fence_mod_by_tileh_ne[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x - 15, ti->y, 31, 16, maxz - z + 4, ti->z + z, false, 15, 0, -z);
}
bool fence_sw = GetFenceSW(ti->tile) != 0; bool fence_sw = GetFenceSW(ti->tile) != 0;
bool fence_se = GetFenceSE(ti->tile) != 0; bool fence_se = GetFenceSE(ti->tile) != 0;
if (!fence_sw && !fence_se) return; if (fence_sw || fence_se) {
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_S);
int z = GetSlopePixelZInCorner(ti->tileh, CORNER_S); if (fence_sw) {
SpriteID sprite = _clear_land_fence_sprites[GetFenceSW(ti->tile) - 1] + _fence_mod_by_tileh_sw[ti->tileh];
AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
}
if (fence_sw) { if (fence_se) {
DrawGroundSpriteAt(_clear_land_fence_sprites[GetFenceSW(ti->tile) - 1] + _fence_mod_by_tileh_sw[ti->tileh], PAL_NONE, 0, 0, z); SpriteID sprite = _clear_land_fence_sprites[GetFenceSE(ti->tile) - 1] + _fence_mod_by_tileh_se[ti->tileh];
} AddSortableSpriteToDraw(sprite, PAL_NONE, ti->x, ti->y, 16, 16, maxz - z + 4, ti->z + z, false, 0, 0, -z);
}
if (fence_se) {
DrawGroundSpriteAt(_clear_land_fence_sprites[GetFenceSE(ti->tile) - 1] + _fence_mod_by_tileh_se[ti->tileh], PAL_NONE, 0, 0, z);
} }
EndSpriteCombine();
} }
static void DrawTile_Clear(TileInfo *ti) static void DrawTile_Clear(TileInfo *ti)
@ -96,6 +118,7 @@ static void DrawTile_Clear(TileInfo *ti)
case CLEAR_FIELDS: case CLEAR_FIELDS:
DrawGroundSprite(_clear_land_sprites_farmland[GetFieldType(ti->tile)] + SlopeToSpriteOffset(ti->tileh), PAL_NONE); DrawGroundSprite(_clear_land_sprites_farmland[GetFieldType(ti->tile)] + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
DrawClearLandFence(ti);
break; break;
case CLEAR_SNOW: case CLEAR_SNOW:
@ -104,7 +127,6 @@ static void DrawTile_Clear(TileInfo *ti)
break; break;
} }
DrawClearLandFence(ti);
DrawBridgeMiddle(ti); DrawBridgeMiddle(ti);
} }
@ -121,35 +143,33 @@ static Foundation GetFoundation_Clear(TileIndex tile, Slope tileh)
return FOUNDATION_NONE; return FOUNDATION_NONE;
} }
void TileLoopClearHelper(TileIndex tile) static void UpdateFences(TileIndex tile)
{ {
bool self = (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)); assert(IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS));
bool dirty = false; bool dirty = false;
bool neighbour = (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 1, 0), CLEAR_FIELDS)); bool neighbour = (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 1, 0), CLEAR_FIELDS));
if (GetFenceSW(tile) == 0) { if (!neighbour && GetFenceSW(tile) == 0) {
if (self != neighbour) { SetFenceSW(tile, 3);
SetFenceSW(tile, 3); dirty = true;
dirty = true;
}
} else {
if (self == 0 && neighbour == 0) {
SetFenceSW(tile, 0);
dirty = true;
}
} }
neighbour = (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, 1), CLEAR_FIELDS)); neighbour = (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, 1), CLEAR_FIELDS));
if (GetFenceSE(tile) == 0) { if (!neighbour && GetFenceSE(tile) == 0) {
if (self != neighbour) { SetFenceSE(tile, 3);
SetFenceSE(tile, 3); dirty = true;
dirty = true; }
}
} else { neighbour = (IsTileType(TILE_ADDXY(tile, -1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, -1, 0), CLEAR_FIELDS));
if (self == 0 && neighbour == 0) { if (!neighbour && GetFenceNE(tile) == 0) {
SetFenceSE(tile, 0); SetFenceNE(tile, 3);
dirty = true; dirty = true;
} }
neighbour = (IsTileType(TILE_ADDXY(tile, 0, -1), MP_CLEAR) && IsClearGround(TILE_ADDXY(tile, 0, -1), CLEAR_FIELDS));
if (!neighbour && GetFenceNW(tile) == 0) {
SetFenceNW(tile, 3);
dirty = true;
} }
if (dirty) MarkTileDirtyByTile(tile); if (dirty) MarkTileDirtyByTile(tile);
@ -239,7 +259,6 @@ static void TileLoop_Clear(TileIndex tile)
return; return;
} }
} }
TileLoopClearHelper(tile);
AmbientSoundEffectCallback(tile); AmbientSoundEffectCallback(tile);
switch (_settings_game.game_creation.landscape) { switch (_settings_game.game_creation.landscape) {
@ -264,8 +283,8 @@ static void TileLoop_Clear(TileIndex tile)
} }
break; break;
case CLEAR_FIELDS: { case CLEAR_FIELDS:
uint field_type; UpdateFences(tile);
if (_game_mode == GM_EDITOR) return; if (_game_mode == GM_EDITOR) return;
@ -280,12 +299,11 @@ static void TileLoop_Clear(TileIndex tile)
/* This farmfield is no longer farmfield, so make it grass again */ /* This farmfield is no longer farmfield, so make it grass again */
MakeClear(tile, CLEAR_GRASS, 2); MakeClear(tile, CLEAR_GRASS, 2);
} else { } else {
field_type = GetFieldType(tile); uint field_type = GetFieldType(tile);
field_type = (field_type < 8) ? field_type + 1 : 0; field_type = (field_type < 8) ? field_type + 1 : 0;
SetFieldType(tile, field_type); SetFieldType(tile, field_type);
} }
break; break;
}
default: default:
return; return;

View File

@ -16,7 +16,5 @@
void DrawHillyLandTile(const TileInfo *ti); void DrawHillyLandTile(const TileInfo *ti);
void DrawClearLandTile(const TileInfo *ti, byte set); void DrawClearLandTile(const TileInfo *ti, byte set);
void DrawClearLandFence(const TileInfo *ti);
void TileLoopClearHelper(TileIndex tile);
#endif /* CLEAR_FUNC_H */ #endif /* CLEAR_FUNC_H */

View File

@ -216,12 +216,12 @@ static inline void SetIndustryIndexOfField(TileIndex t, IndustryID i)
/** /**
* Is there a fence at the south eastern border? * Is there a fence at the south eastern border?
* @param t the tile to check for fences * @param t the tile to check for fences
* @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES) * @pre IsClearGround(t, CLEAR_FIELDS)
* @return 0 if there is no fence, otherwise the fence type * @return 0 if there is no fence, otherwise the fence type
*/ */
static inline uint GetFenceSE(TileIndex t) static inline uint GetFenceSE(TileIndex t)
{ {
assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); assert(IsClearGround(t, CLEAR_FIELDS));
return GB(_m[t].m4, 2, 3); return GB(_m[t].m4, 2, 3);
} }
@ -230,23 +230,23 @@ static inline uint GetFenceSE(TileIndex t)
* eastern border. * eastern border.
* @param t the tile to check for fences * @param t the tile to check for fences
* @param h 0 if there is no fence, otherwise the fence type * @param h 0 if there is no fence, otherwise the fence type
* @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES) * @pre IsClearGround(t, CLEAR_FIELDS)
*/ */
static inline void SetFenceSE(TileIndex t, uint h) static inline void SetFenceSE(TileIndex t, uint h)
{ {
assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); // XXX incomplete assert(IsClearGround(t, CLEAR_FIELDS));
SB(_m[t].m4, 2, 3, h); SB(_m[t].m4, 2, 3, h);
} }
/** /**
* Is there a fence at the south western border? * Is there a fence at the south western border?
* @param t the tile to check for fences * @param t the tile to check for fences
* @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES) * @pre IsClearGround(t, CLEAR_FIELDS)
* @return 0 if there is no fence, otherwise the fence type * @return 0 if there is no fence, otherwise the fence type
*/ */
static inline uint GetFenceSW(TileIndex t) static inline uint GetFenceSW(TileIndex t)
{ {
assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); assert(IsClearGround(t, CLEAR_FIELDS));
return GB(_m[t].m4, 5, 3); return GB(_m[t].m4, 5, 3);
} }
@ -255,14 +255,64 @@ static inline uint GetFenceSW(TileIndex t)
* western border. * western border.
* @param t the tile to check for fences * @param t the tile to check for fences
* @param h 0 if there is no fence, otherwise the fence type * @param h 0 if there is no fence, otherwise the fence type
* @pre IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES) * @pre IsClearGround(t, CLEAR_FIELDS)
*/ */
static inline void SetFenceSW(TileIndex t, uint h) static inline void SetFenceSW(TileIndex t, uint h)
{ {
assert(IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)); // XXX incomplete assert(IsClearGround(t, CLEAR_FIELDS));
SB(_m[t].m4, 5, 3, h); SB(_m[t].m4, 5, 3, h);
} }
/**
* Is there a fence at the north eastern border?
* @param t the tile to check for fences
* @pre IsClearGround(t, CLEAR_FIELDS)
* @return 0 if there is no fence, otherwise the fence type
*/
static inline uint GetFenceNE(TileIndex t)
{
assert(IsClearGround(t, CLEAR_FIELDS));
return GB(_m[t].m3, 5, 3);
}
/**
* Sets the type of fence (and whether there is one) for the north
* eastern border.
* @param t the tile to check for fences
* @param h 0 if there is no fence, otherwise the fence type
* @pre IsClearGround(t, CLEAR_FIELDS)
*/
static inline void SetFenceNE(TileIndex t, uint h)
{
assert(IsClearGround(t, CLEAR_FIELDS));
SB(_m[t].m3, 5, 3, h);
}
/**
* Is there a fence at the north western border?
* @param t the tile to check for fences
* @pre IsClearGround(t, CLEAR_FIELDS)
* @return 0 if there is no fence, otherwise the fence type
*/
static inline uint GetFenceNW(TileIndex t)
{
assert(IsClearGround(t, CLEAR_FIELDS));
return GB(_m[t].m6, 2, 3);
}
/**
* Sets the type of fence (and whether there is one) for the north
* western border.
* @param t the tile to check for fences
* @param h 0 if there is no fence, otherwise the fence type
* @pre IsClearGround(t, CLEAR_FIELDS)
*/
static inline void SetFenceNW(TileIndex t, uint h)
{
assert(IsClearGround(t, CLEAR_FIELDS));
SB(_m[t].m6, 2, 3, h);
}
/** /**
* Make a clear tile. * Make a clear tile.

View File

@ -955,20 +955,28 @@ static bool IsBadFarmFieldTile2(TileIndex tile)
} }
} }
static void SetupFarmFieldFence(TileIndex tile, int size, byte type, Axis direction) static void SetupFarmFieldFence(TileIndex tile, int size, byte type, Axis direction, bool north)
{ {
do { do {
tile = TILE_MASK(tile); tile = TILE_MASK(tile);
if (IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) { if (IsTileType(tile, MP_CLEAR) && IsClearGround(tile, CLEAR_FIELDS)) {
byte or_ = type; byte or_ = type;
if (or_ == 1 && Chance16(1, 7)) or_ = 2; if (or_ == 1 && Chance16(1, 7)) or_ = 2;
if (direction == AXIS_X) { if (direction == AXIS_X) {
SetFenceSE(tile, or_); if (north) {
SetFenceNW(tile, or_);
} else {
SetFenceSE(tile, or_);
}
} else { } else {
SetFenceSW(tile, or_); if (north) {
SetFenceNE(tile, or_);
} else {
SetFenceSW(tile, or_);
}
} }
} }
@ -1021,10 +1029,10 @@ static void PlantFarmField(TileIndex tile, IndustryID industry)
type = _plantfarmfield_type[Random() & 0xF]; type = _plantfarmfield_type[Random() & 0xF];
} }
SetupFarmFieldFence(ta.tile - TileDiffXY(1, 0), ta.h, type, AXIS_Y); SetupFarmFieldFence(ta.tile, ta.h, type, AXIS_Y, true);
SetupFarmFieldFence(ta.tile - TileDiffXY(0, 1), ta.w, type, AXIS_X); SetupFarmFieldFence(ta.tile, ta.w, type, AXIS_X, true);
SetupFarmFieldFence(ta.tile + TileDiffXY(ta.w - 1, 0), ta.h, type, AXIS_Y); SetupFarmFieldFence(ta.tile + TileDiffXY(ta.w - 1, 0), ta.h, type, AXIS_Y, false);
SetupFarmFieldFence(ta.tile + TileDiffXY(0, ta.h - 1), ta.w, type, AXIS_X); SetupFarmFieldFence(ta.tile + TileDiffXY(0, ta.h - 1), ta.w, type, AXIS_X, false);
} }
void PlantRandomFarmField(const Industry *i) void PlantRandomFarmField(const Industry *i)

View File

@ -1267,10 +1267,6 @@ bool AfterLoadGame()
if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) { if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) {
/* remove fields */ /* remove fields */
MakeClear(t, CLEAR_GRASS, 3); MakeClear(t, CLEAR_GRASS, 3);
} else if (IsTileType(t, MP_CLEAR) || IsTileType(t, MP_TREES)) {
/* remove fences around fields */
SetFenceSE(t, 0);
SetFenceSW(t, 0);
} }
} }
@ -2653,6 +2649,24 @@ bool AfterLoadGame()
_settings_game.game_creation.snow_line_height /= TILE_HEIGHT; _settings_game.game_creation.snow_line_height /= TILE_HEIGHT;
} }
if (IsSavegameVersionBefore(164) && !IsSavegameVersionBefore(32)) {
/* We store 4 fences in the field tiles instead of only SE and SW. */
for (TileIndex t = 0; t < map_size; t++) {
if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue;
if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) continue;
uint fence = GB(_m[t].m4, 5, 3);
if (fence != 0 && IsTileType(TILE_ADDXY(t, 1, 0), MP_CLEAR) && IsClearGround(TILE_ADDXY(t, 1, 0), CLEAR_FIELDS)) {
SetFenceNE(TILE_ADDXY(t, 1, 0), fence);
}
fence = GB(_m[t].m4, 2, 3);
if (fence != 0 && IsTileType(TILE_ADDXY(t, 0, 1), MP_CLEAR) && IsClearGround(TILE_ADDXY(t, 0, 1), CLEAR_FIELDS)) {
SetFenceNW(TILE_ADDXY(t, 0, 1), fence);
}
SB(_m[t].m4, 2, 3, 0);
SB(_m[t].m4, 5, 3, 0);
}
}
/* When any NewGRF has been changed the availability of some vehicles might /* When any NewGRF has been changed the availability of some vehicles might
* have been changed too. e->company_avail must be set to 0 in that case * have been changed too. e->company_avail must be set to 0 in that case
* which is done by StartupEngines(). */ * which is done by StartupEngines(). */

View File

@ -34,6 +34,20 @@ static const byte _fence_mod_by_tileh_se[32] = {
1, 1, 5, 5, 3, 3, 3, 1, 1, 1, 5, 5, 3, 3, 3, 1,
}; };
static const byte _fence_mod_by_tileh_ne[32] = {
0, 0, 0, 0, 4, 4, 4, 4,
2, 2, 2, 2, 0, 0, 0, 0,
0, 0, 0, 0, 4, 4, 4, 4,
2, 2, 2, 2, 0, 0, 0, 0,
};
static const byte _fence_mod_by_tileh_nw[32] = {
1, 5, 1, 5, 1, 5, 1, 5,
3, 1, 3, 1, 3, 1, 3, 1,
1, 5, 1, 5, 1, 5, 1, 5,
3, 1, 3, 1, 3, 1, 3, 1,
};
static const SpriteID _clear_land_fence_sprites[7] = { static const SpriteID _clear_land_fence_sprites[7] = {
SPR_HEDGE_BUSHES, SPR_HEDGE_BUSHES,

View File

@ -453,8 +453,6 @@ static void DrawTile_Trees(TileInfo *ti)
default: DrawGroundSprite(_clear_land_sprites_snow_desert[GetTreeDensity(ti->tile)] + SlopeToSpriteOffset(ti->tileh), PAL_NONE); break; default: DrawGroundSprite(_clear_land_sprites_snow_desert[GetTreeDensity(ti->tile)] + SlopeToSpriteOffset(ti->tileh), PAL_NONE); break;
} }
DrawClearLandFence(ti);
/* Do not draw trees when the invisible trees setting is set */ /* Do not draw trees when the invisible trees setting is set */
if (IsInvisibilitySet(TO_TREES)) return; if (IsInvisibilitySet(TO_TREES)) return;
@ -630,7 +628,6 @@ static void TileLoop_Trees(TileIndex tile)
} }
AmbientSoundEffectCallback(tile); AmbientSoundEffectCallback(tile);
TileLoopClearHelper(tile);
uint treeCounter = GetTreeCounter(tile); uint treeCounter = GetTreeCounter(tile);