From a644632a821dd04ce420e2202563342578afda43 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 9 Jan 2024 03:18:02 +0000 Subject: [PATCH] Used curved instead of square circular area for mapgen water desert removal --- src/landscape.cpp | 13 +++++-------- src/water.h | 2 +- src/water_cmd.cpp | 8 +++----- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index e8e4732097..87316a3dec 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1116,8 +1116,7 @@ static bool MakeLake(TileIndex tile, void *user_data) MakeRiver(tile, Random()); MarkTileDirtyByTile(tile); /* Remove desert directly around the river tile. */ - TileIndex t = tile; - CircularTileSearch(&t, _settings_game.game_creation.lake_tropics_width, RiverModifyDesertZone, nullptr); + IterateCurvedCircularTileArea(tile, _settings_game.game_creation.lake_tropics_width, RiverModifyDesertZone, nullptr); return false; } } @@ -1187,10 +1186,9 @@ static bool RiverMakeWider(TileIndex tile, void *data) if (IsValidTile(tile) && !IsWaterTile(tile) && GetTileSlope(tile) == GetTileSlope(*(TileIndex *)data)) { MakeRiver(tile, Random()); /* Remove desert directly around the river tile. */ - TileIndex cur_tile = tile; - MarkTileDirtyByTile(cur_tile); - CircularTileSearch(&cur_tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); + MarkTileDirtyByTile(tile); + IterateCurvedCircularTileArea(tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); } return false; } @@ -1214,7 +1212,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) CircularTileSearch(&tile, radius + RandomRange(1), RiverMakeWider, (void *)&path->node.tile); } else { /* Remove desert directly around the river tile. */ - CircularTileSearch(&tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); + IterateCurvedCircularTileArea(tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); } } } @@ -1327,8 +1325,7 @@ static bool FlowRiver(TileIndex spring, TileIndex begin, uint min_river_length) MakeRiver(lakeCenter, Random()); MarkTileDirtyByTile(lakeCenter); /* Remove desert directly around the river tile. */ - CircularTileSearch(&lakeCenter, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); - lakeCenter = end; + IterateCurvedCircularTileArea(lakeCenter, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); // Setting lake size +- 25% const auto random_percentage = 75 + RandomRange(50); diff --git a/src/water.h b/src/water.h index 0fdd848434..6ca2045422 100644 --- a/src/water.h +++ b/src/water.h @@ -40,7 +40,7 @@ void DrawShoreTile(Slope tileh); void MakeWaterKeepingClass(TileIndex tile, Owner o); void CheckForDockingTile(TileIndex t); -bool RiverModifyDesertZone(TileIndex tile, void *data); +void RiverModifyDesertZone(TileIndex tile, void *data); void MakeRiverAndModifyDesertZoneAround(TileIndex tile); static const uint RIVER_OFFSET_DESERT_DISTANCE = 5; ///< Circular tile search radius to create non-desert around a river tile. diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index cab8143923..9ff6fbd1b8 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -444,10 +444,9 @@ CommandCost CmdBuildLock(TileIndex tile, DoCommandFlag flags, uint32_t p1, uint3 } /** Callback to create non-desert around a river tile. */ -bool RiverModifyDesertZone(TileIndex tile, void *) +void RiverModifyDesertZone(TileIndex tile, void *) { if (GetTropicZone(tile) == TROPICZONE_DESERT) SetTropicZone(tile, TROPICZONE_NORMAL); - return false; } /** @@ -460,7 +459,7 @@ void MakeRiverAndModifyDesertZoneAround(TileIndex tile) MarkTileDirtyByTile(tile); /* Remove desert directly around the river tile. */ - CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); + IterateCurvedCircularTileArea(tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); } /** @@ -526,8 +525,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32_t p1, uint case WATER_CLASS_RIVER: MakeRiver(current_tile, Random()); if (_game_mode == GM_EDITOR) { - TileIndex tile2 = current_tile; - CircularTileSearch(&tile2, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); + IterateCurvedCircularTileArea(current_tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); } break;