Mercurial > hg > openttd
changeset 17964:17f8340f061c draft
(svn r22773) -Add: Some grass around rivers in desert areas.
author | michi_cc <michi_cc@openttd.org> |
---|---|
date | Sat, 20 Aug 2011 20:07:02 +0000 |
parents | 4edb402ebe0e |
children | 91c35a630a92 |
files | src/landscape.cpp src/water.h src/water_cmd.cpp |
diffstat | 3 files changed, 26 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1038,7 +1038,12 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) { for (PathNode *path = ¤t->path; path != NULL; path = path->parent) { - if (!IsWaterTile(path->node.tile)) MakeRiver(path->node.tile, Random()); + TileIndex tile = path->node.tile; + if (!IsWaterTile(tile)) { + MakeRiver(tile, Random()); + /* Remove desert directly around the river tile. */ + CircularTileSearch(&tile, 5, RiverModifyDesertZone, NULL); + } } } @@ -1168,7 +1173,7 @@ if (amount == 0) return; uint wells = ScaleByMapSize(4 << _settings_game.game_creation.amount_of_rivers); - SetGeneratingWorldProgress(GWP_RIVER, wells); + SetGeneratingWorldProgress(GWP_RIVER, wells + 256 / 64); // Include the tile loop calls below. bool *marks = CallocT<bool>(MapSize()); for (; wells != 0; wells--) { @@ -1181,6 +1186,12 @@ } free(marks); + + /* Run tile loop to update the ground density. */ + for (uint i = 0; i != 256; i++) { + if (i % 64 == 0) IncreaseGeneratingWorldProgress(GWP_RIVER); + RunTileLoop(); + } } void GenerateLandscape(byte mode)
--- a/src/water.h +++ b/src/water.h @@ -41,4 +41,6 @@ void MakeWaterKeepingClass(TileIndex tile, Owner o); +bool RiverModifyDesertZone(TileIndex tile, void *data); + #endif /* WATER_H */
--- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -308,6 +308,13 @@ return DoBuildLock(tile, dir, flags); } +/** Callback to create non-desert around a river tile. */ +bool RiverModifyDesertZone(TileIndex tile, void *) +{ + if (GetTropicZone(tile) == TROPICZONE_DESERT) SetTropicZone(tile, TROPICZONE_NORMAL); + return false; +} + /** * Build a piece of canal. * @param tile end tile of stretch-dragging @@ -350,6 +357,10 @@ switch (wc) { case WATER_CLASS_RIVER: MakeRiver(tile, Random()); + if (_game_mode == GM_EDITOR) { + TileIndex tile2 = tile; + CircularTileSearch(&tile2, 5, RiverModifyDesertZone, NULL); + } break; case WATER_CLASS_SEA: