Used curved instead of square circular area for mapgen water desert removal

mapgen-water-desert-removal-circular
Jonathan G Rennison 4 months ago
parent c41d452107
commit a644632a82

@ -1116,8 +1116,7 @@ static bool MakeLake(TileIndex tile, void *user_data)
MakeRiver(tile, Random()); MakeRiver(tile, Random());
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
/* Remove desert directly around the river tile. */ /* Remove desert directly around the river tile. */
TileIndex t = tile; IterateCurvedCircularTileArea(tile, _settings_game.game_creation.lake_tropics_width, RiverModifyDesertZone, nullptr);
CircularTileSearch(&t, _settings_game.game_creation.lake_tropics_width, RiverModifyDesertZone, nullptr);
return false; return false;
} }
} }
@ -1187,10 +1186,9 @@ static bool RiverMakeWider(TileIndex tile, void *data)
if (IsValidTile(tile) && !IsWaterTile(tile) && GetTileSlope(tile) == GetTileSlope(*(TileIndex *)data)) { if (IsValidTile(tile) && !IsWaterTile(tile) && GetTileSlope(tile) == GetTileSlope(*(TileIndex *)data)) {
MakeRiver(tile, Random()); MakeRiver(tile, Random());
/* Remove desert directly around the river tile. */ /* Remove desert directly around the river tile. */
TileIndex cur_tile = tile;
MarkTileDirtyByTile(cur_tile); MarkTileDirtyByTile(tile);
CircularTileSearch(&cur_tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); IterateCurvedCircularTileArea(tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
} }
return false; return false;
} }
@ -1214,7 +1212,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
CircularTileSearch(&tile, radius + RandomRange(1), RiverMakeWider, (void *)&path->node.tile); CircularTileSearch(&tile, radius + RandomRange(1), RiverMakeWider, (void *)&path->node.tile);
} else { } else {
/* Remove desert directly around the river tile. */ /* 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()); MakeRiver(lakeCenter, Random());
MarkTileDirtyByTile(lakeCenter); MarkTileDirtyByTile(lakeCenter);
/* Remove desert directly around the river tile. */ /* Remove desert directly around the river tile. */
CircularTileSearch(&lakeCenter, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); IterateCurvedCircularTileArea(lakeCenter, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
lakeCenter = end;
// Setting lake size +- 25% // Setting lake size +- 25%
const auto random_percentage = 75 + RandomRange(50); const auto random_percentage = 75 + RandomRange(50);

@ -40,7 +40,7 @@ void DrawShoreTile(Slope tileh);
void MakeWaterKeepingClass(TileIndex tile, Owner o); void MakeWaterKeepingClass(TileIndex tile, Owner o);
void CheckForDockingTile(TileIndex t); void CheckForDockingTile(TileIndex t);
bool RiverModifyDesertZone(TileIndex tile, void *data); void RiverModifyDesertZone(TileIndex tile, void *data);
void MakeRiverAndModifyDesertZoneAround(TileIndex tile); void MakeRiverAndModifyDesertZoneAround(TileIndex tile);
static const uint RIVER_OFFSET_DESERT_DISTANCE = 5; ///< Circular tile search radius to create non-desert around a river tile. static const uint RIVER_OFFSET_DESERT_DISTANCE = 5; ///< Circular tile search radius to create non-desert around a river tile.

@ -444,10 +444,9 @@ CommandCost CmdBuildLock(TileIndex tile, DoCommandFlag flags, uint32_t p1, uint3
} }
/** Callback to create non-desert around a river tile. */ /** 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); if (GetTropicZone(tile) == TROPICZONE_DESERT) SetTropicZone(tile, TROPICZONE_NORMAL);
return false;
} }
/** /**
@ -460,7 +459,7 @@ void MakeRiverAndModifyDesertZoneAround(TileIndex tile)
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
/* Remove desert directly around the river 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: case WATER_CLASS_RIVER:
MakeRiver(current_tile, Random()); MakeRiver(current_tile, Random());
if (_game_mode == GM_EDITOR) { if (_game_mode == GM_EDITOR) {
TileIndex tile2 = current_tile; IterateCurvedCircularTileArea(current_tile, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
CircularTileSearch(&tile2, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr);
} }
break; break;

Loading…
Cancel
Save