@ -1059,11 +1059,13 @@ static bool FindSpring(TileIndex tile, void *user_data)
if ( num < 4 ) return false ;
/* Are we near the top of a hill? */
for ( int dx = - 16 ; dx < = 16 ; dx + + ) {
for ( int dy = - 16 ; dy < = 16 ; dy + + ) {
TileIndex t = TileAddWrap ( tile , dx , dy ) ;
if ( t ! = INVALID_TILE & & GetTileMaxZ ( t ) > referenceHeight + 2 ) return false ;
if ( _settings_game . game_creation . rivers_top_of_hill ) {
/* Are we near the top of a hill? */
for ( int dx = - 16 ; dx < = 16 ; dx + + ) {
for ( int dy = - 16 ; dy < = 16 ; dy + + ) {
TileIndex t = TileAddWrap ( tile , dx , dy ) ;
if ( t ! = INVALID_TILE & & GetTileMaxZ ( t ) > referenceHeight + 2 ) return false ;
}
}
}
@ -1088,7 +1090,7 @@ static bool MakeLake(TileIndex tile, void *user_data)
MakeRiver ( tile , Random ( ) ) ;
/* Remove desert directly around the river tile. */
TileIndex t = tile ;
CircularTileSearch ( & t , RIVER_OFFSET_DESERT_DISTANCE , RiverModifyDesertZone , nullptr ) ;
CircularTileSearch ( & t , _settings_game. game_creation . river_tropics_width , RiverModifyDesertZone , nullptr ) ;
return false ;
}
}
@ -1160,7 +1162,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
if ( ! IsWaterTile ( tile ) ) {
MakeRiver ( tile , Random ( ) ) ;
/* Remove desert directly around the river tile. */
CircularTileSearch ( & tile , RIVER_OFFSET_DESERT_DISTANCE , RiverModifyDesertZone , nullptr ) ;
CircularTileSearch ( & tile , _settings_game. game_creation . river_tropics_width , RiverModifyDesertZone , nullptr ) ;
}
}
}
@ -1266,15 +1268,15 @@ static bool FlowRiver(TileIndex spring, TileIndex begin)
/* We don't want the lake at the entry of the valley. */
lakeCenter ! = begin & &
/* We don't want lakes in the desert. */
( _settings_game . game_creation . landscape ! = LT_TROPIC | | GetTropicZone( lakeCenter ) ! = TROPICZONE_DESERT ) & &
( _settings_game . game_creation . landscape ! = LT_TROPIC | | _settings_game. game_creation . lakes_allowed_in_deserts | | GetTropicZone( lakeCenter ) ! = TROPICZONE_DESERT ) & &
/* We only want a lake if the river is long enough. */
DistanceManhattan ( spring , lakeCenter ) > _settings_game . game_creation . min_river_length ) {
end = lakeCenter ;
MakeRiver ( lakeCenter , Random ( ) ) ;
/* Remove desert directly around the river tile. */
CircularTileSearch ( & lakeCenter , RIVER_OFFSET_DESERT_DISTANCE , RiverModifyDesertZone , nullptr ) ;
CircularTileSearch ( & lakeCenter , _settings_game. game_creation . river_tropics_width , RiverModifyDesertZone , nullptr ) ;
lakeCenter = end ;
uint range = RandomRange ( 8 ) + 3 ;
uint range = RandomRange ( _settings_game . game_creation . lake_size ) + 3 ;
CircularTileSearch ( & lakeCenter , range , MakeLake , & height ) ;
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */
lakeCenter = end ;