summaryrefslogtreecommitdiff
path: root/src/tree_cmd.cpp
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2007-10-11 11:06:04 +0000
committertruelight <truelight@openttd.org>2007-10-11 11:06:04 +0000
commit645e5b1fb08d4f75a7940857872bc4fdc8876ef7 (patch)
tree2f02157b68131ccb2d373fae8a24ef9d92b428de /src/tree_cmd.cpp
parent1ff0197ca406eb1eb197a18a5a8e525f9c0f28bc (diff)
downloadopenttd-645e5b1fb08d4f75a7940857872bc4fdc8876ef7.tar.xz
(svn r11244) -Fix: trees can now be planted on bare land without making it grassy (Csaboka)
-Fix: planting tree in desert doesn't make it grassy for the first tile-cycle (Csaboka) -Fix: when a tree dies in desert, it no longer becomes a snowy tile for the first tile-cycle (Csaboka)
Diffstat (limited to 'src/tree_cmd.cpp')
-rw-r--r--src/tree_cmd.cpp43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index 123fd8a49..062670066 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -85,7 +85,7 @@ static void PlaceTree(TileIndex tile, uint32 r)
SetTreeGroundDensity(tile, TREE_GROUND_SNOW_DESERT, 3);
SetTreeCounter(tile, (TreeGround)GB(r, 24, 3));
} else {
- SetTreeGroundDensity(tile, (TreeGround)GB(r, 28, 1), 0);
+ SetTreeGroundDensity(tile, (TreeGround)GB(r, 28, 1), 3);
SetTreeCounter(tile, (TreeGround)GB(r, 24, 4));
}
}
@@ -346,9 +346,10 @@ CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
growth = _game_mode == GM_EDITOR ? 3 : 0;
switch (GetClearGround(tile)) {
- case CLEAR_ROUGH: MakeTree(tile, treetype, 0, growth, TREE_GROUND_ROUGH, 0); break;
- case CLEAR_SNOW: MakeTree(tile, treetype, 0, growth, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break;
- default: MakeTree(tile, treetype, 0, growth, TREE_GROUND_GRASS, 0); break;
+ case CLEAR_ROUGH: MakeTree(tile, treetype, 0, growth, TREE_GROUND_ROUGH, 3); break;
+ case CLEAR_SNOW:
+ case CLEAR_DESERT: MakeTree(tile, treetype, 0, growth, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break;
+ default: MakeTree(tile, treetype, 0, growth, TREE_GROUND_GRASS, GetClearDensity(tile)); break;
}
MarkTileDirtyByTile(tile);
@@ -385,7 +386,7 @@ static void DrawTile_Trees(TileInfo *ti)
byte z;
switch (GetTreeGround(ti->tile)) {
- case TREE_GROUND_GRASS: DrawClearLandTile(ti, 3); break;
+ case TREE_GROUND_GRASS: DrawClearLandTile(ti, GetTreeDensity(ti->tile)); break;
case TREE_GROUND_ROUGH: DrawHillyLandTile(ti); break;
default: DrawGroundSprite(_tree_sprites_1[GetTreeDensity(ti->tile)] + _tileh_to_sprite[ti->tileh], PAL_NONE); break;
}
@@ -557,7 +558,7 @@ static void TileLoopTreesAlps(TileIndex tile)
if (k < 0) {
if (GetTreeGround(tile) != TREE_GROUND_SNOW_DESERT) return;
- SetTreeGroundDensity(tile, TREE_GROUND_GRASS, 0);
+ SetTreeGroundDensity(tile, TREE_GROUND_GRASS, 3);
} else {
uint density = min((uint)k / TILE_HEIGHT, 3);
@@ -586,6 +587,16 @@ static void TileLoop_Trees(TileIndex tile)
TileLoopClearHelper(tile);
+ uint treeCounter = GetTreeCounter(tile);
+
+ /* Handle growth of grass at every 8th processings, like it's done for grass */
+ if ((treeCounter & 7) == 7 && GetTreeGround(tile) == TREE_GROUND_GRASS) {
+ uint density = GetTreeDensity(tile);
+ if (density < 3) {
+ SetTreeGroundDensity(tile, TREE_GROUND_GRASS, density + 1);
+ MarkTileDirtyByTile(tile);
+ }
+ }
if (GetTreeCounter(tile) < 15) {
AddTreeCounter(tile, 1);
return;
@@ -622,11 +633,12 @@ static void TileLoop_Trees(TileIndex tile)
switch (GetClearGround(tile)) {
case CLEAR_GRASS:
if (GetClearDensity(tile) != 3) return;
- MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 0);
+ MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 3);
break;
- case CLEAR_ROUGH: MakeTree(tile, treetype, 0, 0, TREE_GROUND_ROUGH, 0); break;
- case CLEAR_SNOW: MakeTree(tile, treetype, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break;
+ case CLEAR_ROUGH: MakeTree(tile, treetype, 0, 0, TREE_GROUND_ROUGH, 3); break;
+ case CLEAR_DESERT: return; // Cacti don't spread
+ case CLEAR_SNOW: MakeTree(tile, treetype, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break;
default: return;
}
break;
@@ -646,9 +658,12 @@ static void TileLoop_Trees(TileIndex tile)
} else {
/* just one tree, change type into MP_CLEAR */
switch (GetTreeGround(tile)) {
- case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, 3); break;
+ case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, GetTreeDensity(tile)); break;
case TREE_GROUND_ROUGH: MakeClear(tile, CLEAR_ROUGH, 3); break;
- default: MakeClear(tile, CLEAR_SNOW, GetTreeDensity(tile)); break;
+ default: // snow or desert
+ if (_opt.landscape == LT_TROPIC) MakeClear(tile, CLEAR_DESERT, GetTreeDensity(tile));
+ else MakeClear(tile, CLEAR_SNOW, GetTreeDensity(tile));
+ break;
}
}
break;
@@ -675,7 +690,7 @@ void OnTick_Trees()
!IsBridgeAbove(tile) &&
(ct = GetClearGround(tile), ct == CLEAR_GRASS || ct == CLEAR_ROUGH) &&
(tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TREE_INVALID) {
- MakeTree(tile, tree, 0, 0, ct == CLEAR_ROUGH ? TREE_GROUND_ROUGH : TREE_GROUND_GRASS, 0);
+ MakeTree(tile, tree, 0, 0, ct == CLEAR_ROUGH ? TREE_GROUND_ROUGH : TREE_GROUND_GRASS, GetClearDensity(tile));
}
/* byte underflow */
@@ -689,8 +704,8 @@ void OnTick_Trees()
(ct = GetClearGround(tile), ct == CLEAR_GRASS || ct == CLEAR_ROUGH || ct == CLEAR_SNOW) &&
(tree = GetRandomTreeType(tile, GB(r, 24, 8))) != TREE_INVALID) {
switch (ct) {
- case CLEAR_GRASS: MakeTree(tile, tree, 0, 0, TREE_GROUND_GRASS, 0); break;
- case CLEAR_ROUGH: MakeTree(tile, tree, 0, 0, TREE_GROUND_ROUGH, 0); break;
+ case CLEAR_GRASS: MakeTree(tile, tree, 0, 0, TREE_GROUND_GRASS, GetClearDensity(tile)); break;
+ case CLEAR_ROUGH: MakeTree(tile, tree, 0, 0, TREE_GROUND_ROUGH, 3); break;
default: MakeTree(tile, tree, 0, 0, TREE_GROUND_SNOW_DESERT, GetClearDensity(tile)); break;
}
}