diff options
Diffstat (limited to 'src/landscape.cpp')
-rw-r--r-- | src/landscape.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/landscape.cpp b/src/landscape.cpp index 35a00e1d2..adc510253 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1038,7 +1038,12 @@ static void River_GetNeighbours(AyStar *aystar, OpenListNode *current) 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 @@ static void CreateRivers() 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 @@ static void CreateRivers() } 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) |