Index: src/lang/english.txt =================================================================== --- src/lang/english.txt (revision 11722) +++ src/lang/english.txt (working copy) @@ -1179,6 +1179,8 @@ STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2x2 grid STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3x3 grid +STR_CONFIG_PATCHES_TREE_GROWTH :{LTBLUE}Disable Tree Growth: {ORANGE}{STRING1} + STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position of main toolbar: {ORANGE}{STRING1} STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Left STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Centre Index: src/saveload.cpp =================================================================== --- src/saveload.cpp (revision 11722) +++ src/saveload.cpp (working copy) @@ -33,7 +33,7 @@ #include "vehicle_base.h" #include -extern const uint16 SAVEGAME_VERSION = 83; +extern const uint16 SAVEGAME_VERSION = 84; uint16 _sl_version; ///< the major savegame version identifier byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! Index: src/settings.cpp =================================================================== --- src/settings.cpp (revision 11722) +++ src/settings.cpp (working copy) @@ -1378,6 +1378,7 @@ SDT_VAR(Patches, drag_signals_density,SLE_UINT8,S, 0, 4, 1, 20, 0, STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY,NULL), SDT_VAR(Patches, semaphore_build_before,SLE_INT32, S, NC, 1975, MIN_YEAR, MAX_YEAR, 1, STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE, NULL), SDT_CONDVAR(Patches, town_layout, SLE_UINT8, 59, SL_MAX_VERSION, 0, MS, TL_ORIGINAL, TL_NO_ROADS, NUM_TLS - 1, 1, STR_CONFIG_PATCHES_TOWN_LAYOUT, CheckTownLayout), + SDT_CONDBOOL(Patches, disable_tree_growth, 84, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_TREE_GROWTH, NULL), /***************************************************************************/ /* Vehicle section of the GUI-configure patches window */ Index: src/settings_gui.cpp =================================================================== --- src/settings_gui.cpp (revision 11722) +++ src/settings_gui.cpp (working copy) @@ -688,6 +688,7 @@ "drag_signals_density", "oil_refinery_limit", "semaphore_build_before", + "disable_tree_growth", }; static const char *_patches_stations[] = { Index: src/tree_cmd.cpp =================================================================== --- src/tree_cmd.cpp (revision 11722) +++ src/tree_cmd.cpp (working copy) @@ -603,109 +603,115 @@ } SetTreeCounter(tile, 0); - switch (GetTreeGrowth(tile)) { - case 3: /* regular sized tree */ - if (_opt.landscape == LT_TROPIC && - GetTreeType(tile) != TREE_CACTUS && - GetTropicZone(tile) == TROPICZONE_DESERT) { - AddTreeGrowth(tile, 1); - } else { - switch (GB(Random(), 0, 3)) { - case 0: /* start destructing */ - AddTreeGrowth(tile, 1); - break; - - case 1: /* add a tree */ - if (GetTreeCount(tile) < 3) { - AddTreeCount(tile, 1); - SetTreeGrowth(tile, 0); + if (_patches.disable_tree_growth == false) + { + switch (GetTreeGrowth(tile)) { + case 3: /* regular sized tree */ + if (_opt.landscape == LT_TROPIC && + GetTreeType(tile) != TREE_CACTUS && + GetTropicZone(tile) == TROPICZONE_DESERT) { + AddTreeGrowth(tile, 1); + } else { + switch (GB(Random(), 0, 3)) { + case 0: /* start destructing */ + AddTreeGrowth(tile, 1); break; - } - /* FALL THROUGH */ - case 2: { /* add a neighbouring tree */ - TreeType treetype = GetTreeType(tile); + case 1: /* add a tree */ + if (GetTreeCount(tile) < 3) { + AddTreeCount(tile, 1); + SetTreeGrowth(tile, 0); + break; + } + /* FALL THROUGH */ - tile += TileOffsByDir((Direction)(Random() & 7)); + case 2: { /* add a neighbouring tree */ + TreeType treetype = GetTreeType(tile); - if (!IsTileType(tile, MP_CLEAR) || IsBridgeAbove(tile)) return; + tile += TileOffsByDir((Direction)(Random() & 7)); - switch (GetClearGround(tile)) { - case CLEAR_GRASS: - if (GetClearDensity(tile) != 3) return; - MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 3); - break; + if (!IsTileType(tile, MP_CLEAR) || IsBridgeAbove(tile)) return; - 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; + switch (GetClearGround(tile)) { + case CLEAR_GRASS: + if (GetClearDensity(tile) != 3) return; + MakeTree(tile, treetype, 0, 0, TREE_GROUND_GRASS, 3); + 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; } - break; + + default: + return; } - - default: - return; } - } - break; + break; - case 6: /* final stage of tree destruction */ - if (GetTreeCount(tile) > 0) { - /* more than one tree, delete it */ - AddTreeCount(tile, -1); - SetTreeGrowth(tile, 3); - } else { - /* just one tree, change type into MP_CLEAR */ - switch (GetTreeGround(tile)) { - case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, GetTreeDensity(tile)); break; - case TREE_GROUND_ROUGH: MakeClear(tile, CLEAR_ROUGH, 3); break; - default: // snow or desert - MakeClear(tile, _opt.landscape == LT_TROPIC ? CLEAR_DESERT : CLEAR_SNOW, GetTreeDensity(tile)); - break; + case 6: /* final stage of tree destruction */ + if (GetTreeCount(tile) > 0) { + /* more than one tree, delete it */ + AddTreeCount(tile, -1); + SetTreeGrowth(tile, 3); + } else { + /* just one tree, change type into MP_CLEAR */ + switch (GetTreeGround(tile)) { + case TREE_GROUND_GRASS: MakeClear(tile, CLEAR_GRASS, GetTreeDensity(tile)); break; + case TREE_GROUND_ROUGH: MakeClear(tile, CLEAR_ROUGH, 3); break; + default: // snow or desert + MakeClear(tile, _opt.landscape == LT_TROPIC ? CLEAR_DESERT : CLEAR_SNOW, GetTreeDensity(tile)); + break; + } } - } - break; + break; - default: - AddTreeGrowth(tile, 1); - break; + default: + AddTreeGrowth(tile, 1); + break; + } + + MarkTileDirtyByTile(tile); } - - MarkTileDirtyByTile(tile); } void OnTick_Trees() { - uint32 r; - TileIndex tile; - ClearGround ct; - TreeType tree; + if (_patches.disable_tree_growth == false) + { + uint32 r; + TileIndex tile; + ClearGround ct; + TreeType tree; - /* place a tree at a random rainforest spot */ - if (_opt.landscape == LT_TROPIC && - (r = Random(), tile = RandomTileSeed(r), GetTropicZone(tile) == TROPICZONE_RAINFOREST) && - IsTileType(tile, MP_CLEAR) && - !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, GetClearDensity(tile)); - } + /* place a tree at a random rainforest spot */ + if (_opt.landscape == LT_TROPIC && + (r = Random(), tile = RandomTileSeed(r), GetTropicZone(tile) == TROPICZONE_RAINFOREST) && + IsTileType(tile, MP_CLEAR) && + !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, GetClearDensity(tile)); + } - /* byte underflow */ - if (--_trees_tick_ctr != 0) return; + /* byte underflow */ + if (--_trees_tick_ctr != 0) return; - /* place a tree at a random spot */ - r = Random(); - tile = TILE_MASK(r); - if (IsTileType(tile, MP_CLEAR) && - !IsBridgeAbove(tile) && - (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, 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; + /* place a tree at a random spot */ + r = Random(); + tile = TILE_MASK(r); + if (IsTileType(tile, MP_CLEAR) && + !IsBridgeAbove(tile) && + (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, 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; + } } } } Index: src/variables.h =================================================================== --- src/variables.h (revision 11722) +++ src/variables.h (working copy) @@ -121,6 +121,7 @@ uint8 advanced_vehicle_list; // Use the "advanced" vehicle list uint8 loading_indicators; // Show loading indicators uint8 default_rail_type; ///< The default rail type for the rail GUI + bool disable_tree_growth; ///< If trees are allowed to grow uint8 toolbar_pos; // position of toolbars, 0=left, 1=center, 2=right uint8 window_snap_radius; // Windows snap at each other if closer than this