Used curved instead of square circular area for mapgen water desert removal
This commit is contained in:
@@ -1115,8 +1115,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1186,10 +1185,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;
|
||||||
}
|
}
|
||||||
@@ -1213,7 +1211,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1326,8 +1324,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.
|
||||||
|
|
||||||
|
@@ -443,10 +443,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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -459,7 +458,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -525,8 +524,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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user