Communitas map script

Played with the new patch.

Still far too many oases on deserts, in fact I've noticed no change. Wheat is now spawning all over deserts as well. Overall, deserts on this mapscript are a joke. They're better than any other terrain to build a city on.

6vwN1VW.jpg

305t6wt.jpg


(Two different maps, both deserts found within a few turns.)

There has also been no change to the band of jungle and marshes at the equator on every continent, every single time I play the mapscript.

On an unrelated note, ruins are NOT being got by the AI. I sometimes find plenty one tile or two tiles away from an AI's borders at turn 100.

To be honest, so far my experience with this mapscript has been pretty average, and I'll be playing with Continents Plus until the desert and jungle issues get sorted. :undecide:
 
Still far too many oases on deserts, in fact I've noticed no change. Wheat is now spawning all over deserts as well. Overall, deserts on this mapscript are a joke. They're better than any other terrain to build a city on.

I've been generating some Standard sized maps using Communitas 3.0.5 and I've seen this happen a couple times. It seems like wheat can spawn on desert flood plains and generally on desert tiles with access to fresh water. And since there are larger desert areas and the oasis issue isn't quite squashed yet, it can lead to the (over) generation of wheat tiles.


There has also been no change to the band of jungle and marshes at the equator on every continent, every single time I play the mapscript.

That band jungle and marsh you see at the equator is as intended I believe. Would you like the jungle tiles removed or the band expanded or shrunk?


On an unrelated note, ruins are NOT being got by the AI. I sometimes find plenty one tile or two tiles away from an AI's borders at turn 100.

I also believe the ruin issue occurs in vanilla and GEM handled it by automatically giving the AI all ruins within a certain distance of their capital.


And while I enjoy the variety that atolls bring to the game, they are populated a little too generously on this map. Cut their frequency by about a half and give them bonuses from the lighthouse?


Attached are some screenshots from one of the maps I generated.
 

Attachments

  • 1-1.jpg
    1-1.jpg
    164.4 KB · Views: 290
  • 1-2.jpg
    1-2.jpg
    156.8 KB · Views: 280
  • 1-3.jpg
    1-3.jpg
    183.7 KB · Views: 288
  • 1-4.jpg
    1-4.jpg
    193.6 KB · Views: 256
  • 1-5.jpg
    1-5.jpg
    195.2 KB · Views: 290
Yours look a lot more reasonable than mine have been, especially in regard to oasis numbers! I wonder why. Maybe because I play on large maps? :think:

Are you just using the download from the blog?

And regarding the jungle, it's okay, and I suppose realistic (since there really is a band of jungle across the globe at the equator), but it's very, very predictable and there's very little variety from map to map in my experience, just a 4/5 tile wide band of jungle and marsh across the entire globe.

EDIT: I'm doing a test with IGE, going to generate 5 or so large maps and 5 or so standard maps and compare oasis numbers.
 
Yours look a lot more reasonable than mine have been, especially in regard to oasis numbers! I wonder why. Maybe because I play on large maps? :think:

Are you just using the download from the blog?

No, you're right. I just generated a ridiculous oasis filled map just a second ago. It is partially random chance from the size of deserts if I am reading the code correctly. And I'm still editing my post above so you may want to refresh (an admittedly bad habit of mine). And I am using the download from the blog.


And regarding the jungle, it's okay, and I suppose realistic (since there really is a band of jungle across the globe at the equator), but it's very, very predictable and there's very little variety from map to map in my experience, just a 4/5 tile wide band of jungle and marsh across the entire globe.

So what kind of behavior would you like to see from the jungle tiles? Would you like to see them less frequently or not as an equatorial band? I sort of see it as going north or south and finding tundra and knowing that this must be the edge of the map.
 
No problem, I do the same thing. ;)

Done 5 maps so far with large.

Oasis numbers are pretty constant throughout, especially bad if there is a large desert in the 'tropics' (that is, directly north or south of the equator). You can expect a third of desert tiles to be oases in such a case.

Isles are given far too generously and tend to "cluster" in spots you wouldn't expect. I enjoy having Archipelagos of isles but when you have isles basically every second tile in some areas of coastline it's just too much.

Jungles are a separate issue. While the jungle+marsh bands are, as I said, predictable, they are pretty interesting. It's just a shame that on some generated maps that are equator-heavy (unlike our own Earth, which is considerably more top heavy) you'll get a map that is 50% jungle, but I suppose variety from game to game is nice. What's more of a problem is the second, smaller band of jungle I find at the 'tropics'. It basically ruins any chance of interesting geographic regions between them and the equator, it just has a sudden jump to jungle again.

The overall 'shape' of the maps is beautiful, however.

Going to try standard now.

EDIT:

Standard maps are MUCH better on average. Whether this is simply because there is less room to have such an indiscriminate band of jungle, and smaller deserts to fill with oases, I have no idea.

EDIT #2:

After some more map generating, it's definitely the case that standard maps don't have such a problem as large. It's a shame, because large maps generated by this script have an amazing 'shape', with jutting peninsulas, split continents akin to North and South America, and inland seas.


FINAL EDIT:

I'm an idiot. When I switched to standard, I also accidentally switched to the vanilla continents plus map script. :crazyeye:

Standard Communitas maps have the same problems as large Communitas maps. Too many oases, too much desert wheat, too many isles, relatively unfitting jungles at the tropics.
 
I believe the following is the code for the oasis placement:

Spoiler :
Code:
function PlacePossibleOasis(plotX,plotY)
	local plot = Map.GetPlot(plotX,plotY)
	if not plot:IsHills() and not plot:IsMountain() and plot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT and plot:GetFeatureType() == FeatureTypes.NO_FEATURE then
		local odds = 0
		for _, adjPlot in pairs(Plot_GetPlotsInCircle(plot, 1)) do
			if adjPlot:GetFeatureType() == FeatureTypes.FEATURE_OASIS then
				odds = -1
				break
			end
			if adjPlot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT then
				odds = odds + 10
			end
			if adjPlot:GetPlotType() == PlotTypes.PLOT_OCEAN or adjPlot:GetFeatureType() ~= FeatureTypes.NO_FEATURE then
				odds = odds - 10
			end
		end
		if odds >= Map.Rand(100, "PlacePossibleOasis - Lua") then
			plot:SetFeatureType(FeatureTypes.FEATURE_OASIS,-1)
		end
	end
end

For a tile to have a chance of having an oasis it must:

1) Not be on a hill
2) Be a desert
3) Have no "features" (not sure what a feature is defined as)
4) Not have an oasis adjacent to it

From there the actual chance of the oasis being placed is determined by it's adjacent tiles:
1) +10% chance if the tile is a desert
2) -10% chance if the tile is an ocean or has a feature

I'm going to modify some of these conditions and see if more favorable placements occur.



The jungle banding could possibly be modified using the following constant:

Spoiler :
A lot of users of this script may have noticed the blatant band of marsh/jungle on the equator. Literally a two tile wide band circumnavigating the globe. To fix this, I implemented a new MainConstant (so it's tweakable) that somewhat normalizes rainfall at the highest and lowest rainfall areas of the map. This alteration requires the fix for latitude determination or you will end up with a one-tile-wide band of dry land (plains and desert) just north of the equator.

First, add the following line anywhere in the MainConstants section of the script (up at the top). I personally put it with the crazy rain tweaking constants, because that's where I feel it belongs, but it really doesn't matter.:
Code:
mconst.pressureNorm = 0.9 --[1.0 = no normalization] Helps to prevent exaggerated Jungle/Marsh banding on the equator. -Bobert13

I'm still not sure what direction to take the constant to get the desired results.



And finally the atoll code:

Spoiler :
Code:
function PlacePossibleAtoll(x,y)
	local shallowWater = GameDefines.SHALLOW_WATER_TERRAIN
	local deepWater = GameDefines.DEEP_WATER_TERRAIN
	local featureAtoll = nil
	for thisFeature in GameInfo.Features() do
		if thisFeature.Type == "FEATURE_ATOLL" then
			featureAtoll = thisFeature.ID;
		end
	end
	local plot = Map.GetPlot(x,y)
	local i = temperatureMap:GetIndex(x,y)
	if plot:GetTerrainType() == shallowWater then
		local temp = temperatureMap.data[i]
		local latitude = temperatureMap:GetLatitudeForY(y)
		if latitude < mc.atollNorthLatitudeLimit and latitude > mc.atollSouthLatitudeLimit then
			local tiles = elevationMap:GetRadiusAroundHex(x,y,1)
			local deepCount = 0
			for n=1,#tiles do
				local xx = tiles[n][1]
				local yy = tiles[n][2]
				local nPlot = Map.GetPlot(xx,yy)
				if nPlot:GetTerrainType() == deepWater then
					deepCount = deepCount + 1
				end
			end
			if deepCount >= mc.atollMinDeepWaterNeighbors then
				plot:SetFeatureType(featureAtoll,-1)
			end
		end
	end
end

I'm not quite sure what I'm looking at here but I'll divide the probability by two. What could go wrong? Never mind, that function is never executed. I'm not sure where to start looking then.
 
So, a desert tile surrounded by desert will have a 60% chance to have an oasis. I'm not sure if floodplains count as a feature either, which would exacerbate the problem, and this placement of oases is almost definitely done before the placement of wheat. Wheat placement could be fixed by Thal when he does resource placement anyway.

And regarding the jungle band - eh, it makes sense how it is. I just don't like getting the occasional centre-heavy map and it's all jungle, but, that's part of the fun of the game.
 
Here's a revised code:

Spoiler :
Code:
function PlacePossibleOasis(plotX,plotY)
	local plot = Map.GetPlot(plotX,plotY)
	if not plot:IsHills() and not plot:IsMountain() and plot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT and plot:GetFeatureType() == FeatureTypes.NO_FEATURE then
		local odds = 0
		for _, adjPlot in pairs(Plot_GetPlotsInCircle(plot, 1)) do
			if adjPlot:GetFeatureType() == FeatureTypes.FEATURE_OASIS or adjPlot:GetTerrainType() ~= TerrainTypes.TERRAIN_DESERT then
				odds = -1
				break
			end
			if adjPlot:GetFeatureType() == FeatureTypes.NO_FEATURE then
				odds = odds + 5
			end
		end
		if odds >= Map.Rand(100, "PlacePossibleOasis - Lua") then
			plot:SetFeatureType(FeatureTypes.FEATURE_OASIS,-1)
		end
	end
end

For a tile to have a chance of having an oasis it must:

1) Not be on a hill
2) Be a desert
3) Have no "features" (not sure what a feature is defined as)
4) Not have an oasis adjacent to it
5) Be completely surrounded by desert

From there the actual chance of the oasis being placed is determined by it's adjacent tiles:
1) +5% chance if the tile has no features

If you don't want to restrict it to being surrounded by desert, you could instead add a -10% penalty to any tiles that aren't desert.

There also seems to be a minimum amount of oases required. On maps generated that had less than four, oases would appear in tiles not defined by the above (adjacent to the ocean, next to two mountains).

Attached are some screenshots from a couple Large maps I generated.
 

Attachments

  • 3-1.jpg
    3-1.jpg
    194.9 KB · Views: 228
  • 2-2.jpg
    2-2.jpg
    177.5 KB · Views: 278
  • 2-1.jpg
    2-1.jpg
    169.4 KB · Views: 217
  • 3-2.jpg
    3-2.jpg
    156 KB · Views: 229
  • 3-3.jpg
    3-3.jpg
    164.9 KB · Views: 215
Looks a lot better to me. When you say 'tiles not defined by the above', were they at least all on desert? It also looks just making that change did a fair bit towards toning down desert wheat.
 
Looks a lot better to me. When you say 'tiles not defined by the above', were they at least all on desert? It also looks just making that change did a fair bit towards toning down desert wheat.

I believe that they were on desert tiles and just did not follow the rules defined.

I think that the default resource placement generously places wheat on desert tiles with access with fresh water because the default maps don't usually have that many desert tiles to begin with. And when you add in this map's (awesome) generation of rivers everywhere and the oasis problem, you get a lot of wheat.

I also just realized that flood plains must be considered a "feature" or else I would've seen an oasis spawn next to a river by now (which would have driven me crazy).
 
Just generated some maps with your oasis fix, and it's perfect!

Oases are rare and only present in large deserts, just like they should be. :) They're also not so rare that you can't get lucky with them - I saw quite a good desert that had two quite close to each other and some luxuries.

Really impressed with what a great change such a small fix could do. :D Thal, strong suggestion to implement this in the next patch.
 
Just generated some maps with your oasis fix, and it's perfect!

Oases are rare and only present in large deserts, just like they should be. :) They're also not so rare that you can't get lucky with them - I saw quite a good desert that had two quite close to each other and some luxuries.

Really impressed with what a great change such a small fix could do. :D Thal, strong suggestion to implement this in the next patch.

Thal did an amazing job with this map in the first place. With the ocean dividing the continents and the generation of smaller islands and city state placements being both off and on the main continents, I really want to help him work out the kinks in the map.

Also if you want to tackle the atoll problem find "function AddAtolls()" and modify the following line:

Code:
local atoll_target = numCoast * 0.15;

It looks like 15% is too high, maybe something like 5% would be better.
 
It looks like you two are making some good progress on that oasis issue. Excellent!

I see oases aren't placed if adjacent to an existing oasis. Can the code be tweaked to look 2 or 3 hexes away? So oases would only appear if no other oasis is within a 2 or 3 radius.
 
I did see the Oasis problem as well, but I fear for making them too weak. Though there's a few civs that specialize in deserts and the food trade routes do boost them quite a lot (to get them off the ground), so I'm not sure how big a problem this is. Maybe one can make sheep spawn a bit more in deserts or - my favourite - introducing a glass luxury (quarry improved) for deserts.

As for atolls, agreed. Though that one is mainly dependent on the general economy changes. It's easy to set, so I agree with toning them down for the moment.

As for the jungle band, I'd personally like to randomize it a bit. So that it's not a 4 tile band throughout the map, but a 3 tile in some places and 5 tiles in another. There also doesn't seem to be a "Sahel" zone with Plains, Rivers and bonus ressources, is there? Or just put a few open grassland, hills or lakes in between those jungle.

The randomness of where we get water is definately "guilty" for these jungle or desert heavy maps...
 
I've kinda gotten used to the jungle band now - I think the randomness there comes from the shape of the continents themselves. Last game I had a gigantic mountain rage that went through the jungle, forming deserts, very reminiscent of the Andes. I've also seen some quite large in-land seas that resemble the Mediterranean which I absolutely adore. While it may not be perfect (despite the name :p), it's a really great mapscript, and easily my new favourite!

The oasis problem though was quite game-breaking for desert starts. While desert tiles themselves aren't great (and neither should they be, not all terrain is meant to be fertile) they aren't that bad considering floodplains and the usually unique luxuries, not to mention Petra and the belief bonus. The abundance of oases made them far, far better than grasslands. 3 :c5food: food and 1 :c5gold: gold unimproved + fresh water bonus to all adjacent is a powerful tile indeed.

Setting the atolls to a lower number seemed to lower their frequency but not by a huge amount, 10% was similar enough without being overboard.

It looks like you two are making some good progress on that oasis issue. Excellent!

All I did was complain, thank stackpointer for actually doing something about it. ;)
 
I see oases aren't placed if adjacent to an existing oasis. Can the code be tweaked to look 2 or 3 hexes away? So oases would only appear if no other oasis is within a 2 or 3 radius.

Actually, I just took another look at the code and it looks like the function Plot_GetPlotsInCircle will take a radius. Increasing the minimum distance between oases to at least 2 would also solve the clustering problem and allow us to increase its frequency.


As for the jungle band, I'd personally like to randomize it a bit. So that it's not a 4 tile band throughout the map, but a 3 tile in some places and 5 tiles in another. There also doesn't seem to be a "Sahel" zone with Plains, Rivers and bonus ressources, is there? Or just put a few open grassland, hills or lakes in between those jungle.

The randomness of where we get water is definately "guilty" for these jungle or desert heavy maps...

Thal has modified the global variables that the script uses to generate the maps significantly from the original. I don't know if that's what causes the lack of rolling plains in this map because I'm not entirely sure what kind of effects that modifying the values has. You can see below all the different values that can be modified to generate the map. I don't really know a better way of getting it right other than trying a bunch of different values out and generating a bunch of maps to compare.

Spoiler :
Code:
	--Top and bottom map latitudes.
	mconst.topLatitude			= 70
	mconst.bottomLatitude		= -70

	--Important latitude markers used for generating climate.
	mconst.tropicLatitudes		= 23 --23
	mconst.horseLatitudes		= 28 --28
	mconst.polarFrontLatitude	= 60 --60
	
	-- need open terrain for horses
	mconst.mountainsPercent = 0.95 --0.85	--Percent of dry land that is below the mountain elevation deviance threshold.
	mconst.hillsPercent		= 0.80 --0.50	--Percent of dry land that is below the hill elevation deviance threshold.
	
	mconst.marshPercent		= 0.92 --0.92	--Percent of land below the marsh rainfall threshold.
	mconst.junglePercent	= 0.75 --0.75	--Percent of land below the jungle rainfall threshold.
	mconst.plainsPercent	= 0.56 --0.56	--Percent of land that is below the plains rainfall threshold.
	mconst.zeroTreesPercent	= 0.40 --0.30	--Percent of land that is below the rainfall threshold where no trees can appear.
	mconst.desertPercent	= 0.30 --0.36	--Percent of land that is below the desert rainfall threshold.
	
	mconst.jungleMinTemperature	= 0.70 --0.70	--Coldest absolute temperature allowed to be jungle, forest if colder.
	mconst.desertMinTemperature	= 0.40 --0.34	--Coldest absolute temperature allowed to be desert, plains if colder.
	mconst.tundraTemperature	= 0.35 --0.30	--Absolute temperature below which is tundra.
	mconst.treesMinTemperature	= 0.25 --0.27	--Coldest absolute temperature where trees appear.
	mconst.snowTemperature		= 0.25 --0.25	--Absolute temperature below which is snow.
	
	

	--North and south ice latitude limits.
	mconst.iceNorthLatitudeLimit = 60
	mconst.iceSouthLatitudeLimit = -60

	--North and south atoll latitude limits.
	mconst.atollNorthLatitudeLimit = 80
	mconst.atollSouthLatitudeLimit = -80
	mconst.atollMinDeepWaterNeighbors = 0

	--percent of river junctions that are large enough to become rivers.
	mconst.riverPercent = 0.10 --0.19

	--This value is multiplied by each river step. Values greater than one favor
	--watershed size. Values less than one favor actual rain amount.
	mconst.riverRainCheatFactor = 2 --1.6

	--These attenuation factors lower the altitude of the map edges. This is
	--currently used to prevent large continents in the uninhabitable polar
	--regions. East/west attenuation is set to zero, but modded maps may
	--have need for them.
	mconst.northAttenuationFactor = 0.75
	mconst.northAttenuationRange = 0.15 --percent of the map height.
	mconst.southAttenuationFactor = 0.75
	mconst.southAttenuationRange = 0.15

	--east west attenuation may be desired for flat maps.
	mconst.eastAttenuationFactor = 0.0
	mconst.eastAttenuationRange = 0.0 --percent of the map width.
	mconst.westAttenuationFactor = 0.0
	mconst.westAttenuationRange = 0.0

	--These set the water temperature compression that creates the land/sea
	--seasonal temperature differences that cause monsoon winds.
	mconst.minWaterTemp = 0.10
	mconst.maxWaterTemp = 0.60

	--Strength of geostrophic climate generation versus monsoon climate generation.
	mconst.geostrophicFactor = 3.0

	mconst.geostrophicLateralWindStrength = 0.6

	--Fill in any lakes smaller than this. It looks bad to have large
	--river systems flowing into a tiny lake.
	mconst.minOceanSize = 10 --50

	--Weight of the mountain elevation map versus the coastline elevation map.
	mconst.mountainWeight = 0.8

	--Crazy rain tweaking variables. I wouldn't touch these if I were you.
	mconst.minimumRainCost = 0.0001
	mconst.upLiftExponent = 4
	mconst.polarRainBoost = 0.00
	mconst.pressureNorm = 0.9 --[1.0 = no normalization] Helps to prevent exaggerated Jungle/Marsh banding on the equator. -Bobert13

	--default frequencies for map of width 128. Adjusting these frequences
	--will generate larger or smaller map features.
	mconst.twistMinFreq = 0.02
	mconst.twistMaxFreq = 0.12
	mconst.twistVar = 0.042
	mconst.mountainFreq = 0.078


All I did was complain, thank stackpointer for actually doing something about it. ;)

All I can do is make small edits and generate maps. I'm sure Thal appreciates feedback, I sure do.


EDIT:
Gave the two tile oasis distance a try and increased the frequency. Probably by too much. See below for screenshots, code and explanation:

For a tile to have a chance of having an oasis it must:

1) Not be on a hill
2) Be a desert
3) Have no "features" (not sure what a feature is defined as)
4) Not have an oasis within two tiles

From there the actual chance of the oasis being placed is determined by all tiles within two:
1) +3% chance if the tile is a desert
2) +6% chance if the tile is a featureless desert


Spoiler :
Code:
function PlacePossibleOasis(plotX,plotY)
	local plot = Map.GetPlot(plotX,plotY)
	if not plot:IsHills() and not plot:IsMountain() and plot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT and plot:GetFeatureType() == FeatureTypes.NO_FEATURE then
		local odds = 0
		for _, adjPlot in pairs(Plot_GetPlotsInCircle(plot, 1, 2)) do
			if adjPlot:GetFeatureType() == FeatureTypes.FEATURE_OASIS then
				odds = -1
				break
			end
			if adjPlot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT then
				odds = odds + 3
				
				if adjPlot:GetFeatureType() == FeatureTypes.NO_FEATURE then
					odds = odds + 3
				end
			end
		end
		if odds >= Map.Rand(100, "PlacePossibleOasis - Lua") then
			plot:SetFeatureType(FeatureTypes.FEATURE_OASIS,-1)
		end
	end
end
 

Attachments

  • 4-1.jpg
    4-1.jpg
    172.2 KB · Views: 235
  • 4-2.jpg
    4-2.jpg
    190.3 KB · Views: 218
  • 4-3.jpg
    4-3.jpg
    177 KB · Views: 215
Made the code a bit easier to edit and set the rates back to this:

Spoiler :
Code:
function PlacePossibleOasis(plotX,plotY)
	local plot = Map.GetPlot(plotX,plotY)
	if not plot:IsHills() and not plot:IsMountain() and plot:GetTerrainType() == TerrainTypes.TERRAIN_DESERT and plot:GetFeatureType() == FeatureTypes.NO_FEATURE then
		
		local odds = 0
		
		for _, adjPlot in pairs(Plot_GetPlotsInCircle(plot, 1)) do
			if adjPlot:GetFeatureType() == FeatureTypes.FEATURE_OASIS then
				odds = -1
				break
			end
			
			odds = odds + 5 --default desert odds
			
			if adjPlot:GetTerrainType() ~= TerrainTypes.TERRAIN_DESERT then --penalty not desert
				odds = odds - 10
			elseif adjPlot:GetFeatureType() ~= FeatureTypes.NO_FEATURE then --penalty desert feature
				odds = odds - 5
			end
		end
		
		if odds > 0 then
			for _, adjPlot in pairs(Plot_GetPlotsInCircle(plot, 2)) do
				if adjPlot:GetFeatureType() == FeatureTypes.FEATURE_OASIS then
					odds = -1
					break
				end
			end
		end
		
		if odds >= Map.Rand(100, "PlacePossibleOasis - Lua") then
			plot:SetFeatureType(FeatureTypes.FEATURE_OASIS,-1)
		end
	end
end

For a tile to have a chance of having an oasis it must:

1) Not be on a hill
2) Be a desert
3) Not be a flood plain
4) Not have an oasis within two tiles

From there the actual chance of the oasis being placed is determined by it's adjacent tiles:
1) +5% chance if the tile is a featureless (not flood plain or hill) desert
2) -5% chance if the tile is not a desert

Some examples percentages from the above:

1) 6 featureless deserts (6*5) = 30%
2) 5 featureless deserts (5*5) + 1 desert hill (0) = 25%
3) 4 featureless deserts (4*5) + 2 coastal (2*-5) = 10%
4) 3 featureless deserts (3*5) + 2 flood plain (2*0) + 1 grassland (-5) = 10%
5) 3 featureless deserts (3*5) + 3 mountains (3*-5) = 0%
6) 1 featureless deserts (5) + 4 flood plain (4*0) + 1 grassland (-5) = 0%


So if Thal wants to use this, this code allows the chance for the oasis to be generated next to a non desert at an easily modifiable penalty and removes the clustering problem further by disallowing oases within two tiles of each other. It also allows for the percentages for featured and featureless deserts to be set at separate rates.
 
That is some seriously good work.:goodjob:

How hard would it be to make oases only appear if surrounded by desert?

It really wouldn't be much of a oasis if it was next to a floodplain or river.;)
 
Back
Top Bottom