PerfectWorld3

Thank you for the great work. I've been having a lot of fun with the different maps created with this script.

What constants would you recommend tweaking if I wanted fewer but very long rivers? I love it when rivers cross entire continents or even weave back and forth through long valleys.

I'm a bit unclear on what tweaking mconst.riverPercent and mconst.minRiverSize would result in.
 
I need help adding a function to the Communitas map that fills in lakes above a given size, because I don't like big lakes. So not like in PW where it's the opposite. Thalassicus is too preoccupied with real life matters to help me, so I'm asking here.
 
Thank you for the great work. I've been having a lot of fun with the different maps created with this script.

What constants would you recommend tweaking if I wanted fewer but very long rivers? I love it when rivers cross entire continents or even weave back and forth through long valleys.

I'm a bit unclear on what tweaking mconst.riverPercent and mconst.minRiverSize would result in.

riverPercent is the percent of junctions (read "Corner of a hex"), on dry land, that contain enough drainage water to be considered a river segment. minRiverSize is a lower cap, that is used to prevent most of the one and two tile rivers on coasts and it does noticeably reduce "veiny" watersheds. You can try the following:
Code:
	mconst.riverPercent = 0.15 --percent of river junctions that are large enough to become rivers.
mconst.riverRainCheatFactor = 1.6 --This value is multiplied by each river step. Values greater than one favor watershed size. Values less than one favor actual rain amount.
mconst.minRiverSize = 24 --Helps to prevent a lot of really short rivers. Recommended values are 15 to 40. -Bobert13

Keep in mind that rivers use the elevation map to plot an accurate drainage path and water generally follows the path of least resistance.

I need help adding a function to the Communitas map that fills in lakes above a given size, because I don't like big lakes. So not like in PW where it's the opposite. Thalassicus is too preoccupied with real life matters to help me, so I'm asking here.

Cephalo's function FillInLakes() should be sufficient for what you are trying to do. Communita's still has it in-tact, but it's being overridden by RestoreLakes(). Thal has FillInLakes() setup to use mg.lakeSize which may or may not be an issue as this global is also used during the routine that connects in-land seas to ocean. I'd recommend making a new global specifically for FillInLakes().

There's a number of ways to approach this. First, you could simply try commenting out the following line in FillInLakes():
Code:
					table.insert(mg.lakePlots, Map.GetPlot(elevationMap:GetXYFromIndex(n)))
This will ensure that no lakes are getting restored as RestoreLakes() relies on this table to know what plots need to be restored. Alternatively, you could add a condition so that only lakes that are of a certain size will be added to this table. I'd personally allow single tile lakes, and then play with allowing lakes that are of a certain size (say 6 tiles or more). That would look something like this:
Code:
					if area.size == 1 or area.size >= 6 then
						table.insert(mg.lakePlots, Map.GetPlot(elevationMap:GetXYFromIndex(n)))
					end

If that still isn't enough for your needs, I'd then move on to altering RestoreLakes() to only restore a given number of lake plots. You'll need a local variable to count how many plots you've restored, a while statement, and I'd recommend shuffling the table of lake plots beforehand to avoid issues where only the bottom portion of the map is considered for lake restoration since the lake plots should be stored in sequential order.
Code:
	-- Add lakes
	local lakeCount = 1
	Shuffle(mg.lakePlots)
	while lakeCount < 20 do --I'd personally use some formula dependent on the map width and height to determine the number of lakes to add, though you could use a constant or setup a new mainGlobal.
		local plot = mg.lakePlots[lakeCount] do
		--local isIce = (plot:GetFeatureType() == FeatureTypes.FEATURE_ICE)
		plot:SetTerrainType(TerrainTypes.TERRAIN_COAST, false, true)
		lakeCount = lakeCount+1
		--if isIce then
			--plot:SetFeatureType(FeatureTypes.FEATURE_ICE, -1)
		--end
	end
 
That last piece of code didn't seem to work but filling in some lakes made so much improvement that it isn't really needed. Thanks.
 
Hey, I've been tweaking Bobert's updated version (v5b) and i'm having some issues with the climate generator.

I'm trying to make a land-heavy, fantasy (think middle earth) styled map. Here's the main code I've changed:

Code:
-------------------------------------------------------------------------------------------
	--Landmass constants
	-------------------------------------------------------------------------------------------
	mconst.landPercent = 0.72 		--Percent of land tiles on the map.
	mconst.hillsPercent = 0.50 		--Percent of dry land that is below the hill elevation deviance threshold.
	mconst.mountainsPercent = 0.75 	--Percent of dry land that is below the mountain elevation deviance threshold.
	mconst.mountainWeight = 0.7		--Weight of the mountain elevation map versus the coastline elevation map.
	
	--Adjusting these frequences will generate larger or smaller landmasses and features. Default frequencies for map of width 128.
	mconst.twistMinFreq = 0.1 		--Recommended range:[0.02 to 0.1] Lower values result in more blob-like landmasses, higher values make more stringy landmasses, even higher values results in lots and lots of islands.
	mconst.twistMaxFreq = 0.03		--Recommended range:[0.03 to 0.3] Lower values result in Pangeas, higher values makes continental divisions and stringy features more likely, and very high values  result in a lot of stringy continents and islands.
	mconst.twistVar = 0.042			--Recommended range:[0.01 to 0.3] Determines the deviation range in elevation from one plot to another. Low values result in regular landmasses with few islands, higher values result in more islands and more variance on landmasses and coastlines.
	mconst.mountainFreq = 0.05		--Recommended range:[0.1 to 0.8] Lower values make large, long, mountain ranges. Higher values make sporadic mountainous features.
	
	--These attenuation factors lower the altitude of the map edges. This is currently used to prevent large continents in the uninhabitable polar regions.
	mconst.northAttenuationFactor = 0.0
	mconst.northAttenuationRange = 0.0 --percent of the map height.
	mconst.southAttenuationFactor = 0.0
	mconst.southAttenuationRange = 0.0 --percent of the map height.

	--East/west attenuation is set to zero, but modded maps may have need for them.
	mconst.eastAttenuationFactor = 0.0
	mconst.eastAttenuationRange = 0.0 --percent of the map width.
	mconst.westAttenuationFactor = .25
	mconst.westAttenuationRange = 0.75 --percent of the map width.
	
	--Hex maps are shorter in the y direction than they are wide per unit by this much. We need to know this to sample the perlin maps properly so they don't look squished.
	local W,H = Map.GetGridSize()
	mconst.YtoXRatio = math.sqrt(W/H)
	-------------------------------------------------------------------------------------------
	--Terrain type constants
	-------------------------------------------------------------------------------------------
	mconst.desertPercent = 0.36		--Percent of land that is below the desert rainfall threshold.
	mconst.desertMinTemperature = 0.34 --Coldest absolute temperature allowed to be desert, plains if colder.
	mconst.plainsPercent = 0.56 	--Percent of land that is below the plains rainfall threshold.
	mconst.tundraTemperature = 0.30	--Absolute temperature below which is tundra.
	mconst.snowTemperature = 0.25 	--Absolute temperature below which is snow.
	mconst.simpleCleanup = true		--Turns parts of the terrain matching function on or off. 
	-------------------------------------------------------------------------------------------
	--Terrain feature constants
	-------------------------------------------------------------------------------------------
	mconst.zeroTreesPercent = 0.30 	--Percent of land that is below the rainfall threshold where no trees can appear.
	mconst.treesMinTemperature = 0.27 --Coldest absolute temperature where trees appear.

	mconst.junglePercent = 0.85 	--Percent of land below the jungle rainfall threshold.
	mconst.jungleMinTemperature = 0.70 --Coldest absolute temperature allowed to be jungle, forest if colder.

	mconst.riverPercent = 0.19 		--percent of river junctions that are large enough to become rivers.
	mconst.riverRainCheatFactor = 1.6 --This value is multiplied by each river step. Values greater than one favor watershed size. Values less than one favor actual rain amount.
	mconst.minRiverSize = 24		--Helps to prevent a lot of really short rivers. Recommended values are 15 to 40. -Bobert13
	mconst.minOceanSize = 5			--Fill in any lakes smaller than this. It looks bad to have large river systems flowing into a tiny lake.
	
	--mconst.marshPercent = 0.92 	--(Deprecated) Percent of land below the jungle marsh rainfall threshold.
	mconst.marshElevation = 0.33 	--Percent of land below the lowlands marsh threshold.
	
	mconst.OasisThreshold = 7 		--Maximum fertility around a tile for it to be considered for an Oasis -Bobert13
	
	mconst.atollNorthLatitudeLimit = 20 --Northern Atoll latitude limit.
	mconst.atollSouthLatitudeLimit = -20 --Southern Atoll latitude limit.
	mconst.atollMinDeepWaterNeighbors = 4 --Minimum nearby deeap water tiles for it to be considered for an Atoll.
	
	mconst.iceNorthLatitudeLimit = 65 --Northern Ice latitude limit.
	mconst.iceSouthLatitudeLimit = -65 --Southern Ice latitude limit.
	-------------------------------------------------------------------------------------------
	--Weather constants
	-------------------------------------------------------------------------------------------
	--Important latitude markers used for generating climate.
	mconst.polarFrontLatitude = 40
	mconst.tropicLatitudes = 20
	mconst.horseLatitudes = 30
	mconst.topLatitude = 70
	mconst.bottomLatitude = -19

	--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

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

I've also tweaked some of the code farther down (no xwrap, changing map orientation, a couple other tweaks to remove unneeded features, like centering, and that edge flattener)

Regardless of the latitudes, the top/bottom of the map always seem to generate the same amount of tundra+snow (whichever is warmer won't generate snow, but will generate tundra).
I'm also having some desert and jungle/forest banding issues, but these are much less of an issue.

I'm looking to generate a map with the top being tundra/snow, and the bottom being jungle or desert (whichever avoids repeating the same biome)

I don't know if this is a bug, or if I'm not tweaking it correctly, so any help would be appreciated.
 
A lot of the latitude markers are mirrored in the code (they automatically correspond to a line above the equator and a line below it):
Code:
	mconst.polarFrontLatitude = 40
	mconst.tropicLatitudes = 20
	mconst.horseLatitudes = 30
You're going to need to alter the functions that use these so that they aren't mirrored.

Additionally, you have pressureNorm way, waaaay too low. Even at 0.90 it may be causing some very minor issues (pressures of 0.51 become lower than 0.50 while pressures of 0.49 become higher than .50), anything lower than that and you're going to run into problems. 0.10 is basically inverting geostrophic pressure across the entirety of the map.
 
Wow thanks for the fast reply!

This is my first experience with .lua, so It may take me a bit to alter any functions (I have some experience with other languages though)

So do the top/bottom latitude variables not work, or do I simply misunderstand their function?

EDIT: I just noticed that the code to set continent art type is disabled. Is this set using on of the other included scripts, or does it default to something in particular?
 
I'll run a few tests of my own using your configuration and see. Do you mind sharing any other relevant settings (Map size, etc.)?

Edit: It's using Civ's default continent art stamper for the time being. The update for BNW brought new tile art and some of what Cephalo's art determination routine was doing looks odd with the newer art.

Edit2: function GetLatitudeForY() may be causing some of your issue. It needs to be corrected to adjust the equator down. Approximately what percentage of map height would you say your equator is falling on? ~12%?
 
Here's all the sections of code (aside from the generation constants I already sent you, which I set back to default) I've modified:

Code:
-------------------------------------------------------------------------------
--functions that Civ needs
-------------------------------------------------------------------------------
function GetMapScriptInfo()
	local world_age, temperature, rainfall, sea_level, resources = GetCoreMapOptions()
	return {
		Name = "PerfectWorld 3 (v5b) Fantasy",
		Description = "Fantasy customization of PerfectWorld3 (v5b)",
		IsAdvancedMap = 0,
		SupportsMultiplayer = true,
		IconIndex = 1,
		SortIndex = 1,
		CustomOptions = {
			{
                Name = "Orientation",
                Values = {
                    "Square",
                    "Horizontal",
                    "Vertical"
                },
                DefaultValue = 1,
                SortPriority = 1,
            },
			resources},
	};
end
-------------------------------------------------------------------------------------------
function GetMapInitData(worldSize)
        -- Square maps for the fantasy style maps
	local worldsizes = {
		[GameInfo.Worlds.WORLDSIZE_DUEL.ID] = {33, 33},
		[GameInfo.Worlds.WORLDSIZE_TINY.ID] = {41, 41},
		[GameInfo.Worlds.WORLDSIZE_SMALL.ID] = {51, 51},
		[GameInfo.Worlds.WORLDSIZE_STANDARD.ID] = {66, 66},
		[GameInfo.Worlds.WORLDSIZE_LARGE.ID] = {82, 82},
		[GameInfo.Worlds.WORLDSIZE_HUGE.ID] = {101, 101}
		}
	if Map.GetCustomOption(6) == 2 then
        -- Standard east-west orientation maps
		worldsizes = {
		[GameInfo.Worlds.WORLDSIZE_DUEL.ID] = {42, 26},
		[GameInfo.Worlds.WORLDSIZE_TINY.ID] = {52, 32},
		[GameInfo.Worlds.WORLDSIZE_SMALL.ID] = {64, 40},
		[GameInfo.Worlds.WORLDSIZE_STANDARD.ID] = {84, 52},
		[GameInfo.Worlds.WORLDSIZE_LARGE.ID] = {104, 64},
		[GameInfo.Worlds.WORLDSIZE_HUGE.ID] = {128, 80}
		}
        elseif Map.GetCustomOption(6) == 3 then
        -- Custom North-South maps for the fantasy style maps
		worldsizes = {
		[GameInfo.Worlds.WORLDSIZE_DUEL.ID] = {26, 42},
		[GameInfo.Worlds.WORLDSIZE_TINY.ID] = {32, 52},
		[GameInfo.Worlds.WORLDSIZE_SMALL.ID] = {40, 64},
		[GameInfo.Worlds.WORLDSIZE_STANDARD.ID] = {52, 84},
		[GameInfo.Worlds.WORLDSIZE_LARGE.ID] = {64, 104},
		[GameInfo.Worlds.WORLDSIZE_HUGE.ID] = {80, 128}
		}
	end
	local grid_size = worldsizes[worldSize];
	--
	local world = GameInfo.Worlds[worldSize];
	if(world ~= nil) then
	return {
		Width = grid_size[1],
		Height = grid_size[2],
		WrapX = false, -- Altered for fantasy mapstyle
	};
     end
end
-------------------------------------------------------------------------------------------
--ShiftMap Class
-------------------------------------------------------------------------------------------
function ShiftMaps()
	--local stripRadius = self.stripRadius;
	local shift_x = 0
	local shift_y = 0

	-- shift_x = DetermineXShift() -- Breaks when WrapX disabled
	
	ShiftMapsBy(shift_x, shift_y)
end
-------------------------------------------------------------------------------------------

and the terrain flattener

Code:
--This code makes the game only ever plot flat land if it's within two tiles of 
			--the seam. This prevents issues with tiles that don't look like what they are.
			--removed for fantasy style map
			--elseif x == 0 or x == 1 or x == W - 1 or x == W -2 then
			--	plot:SetPlotType(PlotTypes.PLOT_LAND,false,false)
			--	table.insert(landTab,i)
			-- Bobert13

EDIT: Eh, I don't know exactly, mostly due to the fact that I've messed with the bottom latitude a lot to try and figure out exactly what biome looked best at the bottom of the map.
 
Ok, so I've viewed the relevant maps and there's definitely an issue with temperature map generation causing this. The issue is not due to latitude determination at all as it's putting out correct latitudes. I'm pretty confident that it's between the following lines in GenerateTempMaps():
Code:
			local latPercent = (lat - bottomTempLat)/latRange
			local temp = (math.sin(latPercent * math.pi * 2 - math.pi * 0.5) * 0.5 + 0.5)

This is forcing colder temperatures over the southern region regardless of latitude. These lines are present in both the winterMap and summerMap portions so changes will need to be made in parallel, or one of them may be disabled (normalization should work out any kinks disabling one of these would be expected to cause). I'm pretty confident that the best course of action would be to figure out why the math is forcing the equator towards the center of your top and bottom latitudes instead of shifting temperatures as expected as disabling the summerMap isn't going to eliminate the problem you're experiencing entirely.
 
I don't know much about lua, but is it possible that the error is in these initializations (and their equivalent in the winterMap section?)?

Code:
        local zenith = mc.tropicLatitudes
        local topTempLat = mc.topLatitude + zenith
	local bottomTempLat = mc.bottomLatitude
	local latRange = topTempLat - bottomTempLat

It looks to me like this is forcing the bottomLatitude and topLatitude values to be cold sections of the map (Like I said, could be completely wrong about this)
 
Those values are almost arbitrary; they're just used to shift temperatures for the seasonal extremes. The problem is definitely in the formula for determining temperature. It's the formula for plotting a Bell Curve so I suppose you could say it's working as intended. :mischief:

I commented out the lines for latPercent and temp and replaced them with:
Code:
			local temp = (topTempLat - math.abs(lat))
for summer; and:
Code:
			local temp = ((bottomTempLat - math.abs(lat)) - bottomTempLat)
for winter.

It works decently well though it's a bit direct and you will need to readjust your terrain and feature constants.

I also moved the southern latitude up to -10 to reinforce that you only want one of each biome on the map. You'll still have two-ish areas of planes/grassy forest, but there's not much that can be done about that if you're trying to transition from desert to snow. I did revert pressureNorm to 0.90 as well.

I most likely won't be making these changes in temperature determination for any of my release versions as they break Cephalo's default settings and retweaking them feels bad. However, for you or anyone else who is trying to do a region instead of a world, the suggestions in this post should go a long way towards making that possible.
 
I think I may have found a more 'general' solution by editing the seasonal variations

here's the code I ended up using:

Code:
-------------------------------------------------------------------------------------------
function GenerateTempMaps(elevationMap)

	local aboveSeaLevelMap = FloatMap:New(elevationMap.width,elevationMap.height,elevationMap.xWrap,elevationMap.yWrap)
	local i = 0
	for y = 0,elevationMap.height - 1,1 do
		for x = 0,elevationMap.width - 1,1 do
			if elevationMap:IsBelowSeaLevel(x,y) then
				aboveSeaLevelMap.data[i] = 0.0
			else
				aboveSeaLevelMap.data[i] = elevationMap.data[i] - elevationMap.seaLevelThreshold
			end
			i=i+1
		end
	end
	aboveSeaLevelMap:Normalize()
	--aboveSeaLevelMap:Save("aboveSeaLevelMap.csv")

	local summerMap = FloatMap:New(elevationMap.width,elevationMap.height,elevationMap.xWrap,elevationMap.yWrap)
	local zenith = mc.tropicLatitudes
	local topTempLat
	local bottomTempLat
	if math.abs(mc.topLatitude) < math.abs(mc.bottomLatitude) then -- bottom of the map is further from the equator
		topTempLat = -mc.bottomLatitude + zenith
	else
		topTempLat = mc.topLatitude + zenith
	end
	if math.abs(mc.topLatitude) > math.abs(mc.bottomLatitude) then -- top of the map is further from the equator
		bottomTempLat = -mc.topLatitude
	else
		bottomTempLat = mc.bottomLatitude
	end
	local latRange = topTempLat - bottomTempLat
	i = 0
	for y = 0,elevationMap.height - 1,1 do
		for x = 0,elevationMap.width - 1,1 do
			local lat = summerMap:GetLatitudeForY(y)
			--print("y=" .. y ..",lat=" .. lat)
			local latPercent = (lat - bottomTempLat)/latRange
			--print("latPercent=" .. latPercent)
			local temp = (math.sin(latPercent * math.pi * 2 - math.pi * 0.5) * 0.5 + 0.5)
			if elevationMap:IsBelowSeaLevel(x,y) then
				temp = temp * mc.maxWaterTemp + mc.minWaterTemp
			end
			summerMap.data[i] = temp
			i=i+1
		end
	end
	summerMap:Smooth(math.floor(elevationMap.width/8))
	summerMap:Normalize()

	local winterMap = FloatMap:New(elevationMap.width,elevationMap.height,elevationMap.xWrap,elevationMap.yWrap)
	zenith = -mc.tropicLatitudes
	if math.abs(mc.topLatitude) < math.abs(mc.bottomLatitude) then -- bottom of the map is further from the equator
		topTempLat = -mc.bottomLatitude
	else
		topTempLat = mc.topLatitude
	end
	if math.abs(mc.topLatitude) > math.abs(mc.bottomLatitude) then -- top of the map is further from the equator
		bottomTempLat = -mc.topLatitude + zenith
	else
		bottomTempLat = mc.bottomLatitude + zenith
	end
	latRange = topTempLat - bottomTempLat
	i = 0
	for y = 0,elevationMap.height - 1,1 do
		for x = 0,elevationMap.width - 1,1 do
			local lat = winterMap:GetLatitudeForY(y)
			local latPercent = (lat - bottomTempLat)/latRange
			local temp = math.sin(latPercent * math.pi * 2 - math.pi * 0.5) * 0.5 + 0.5
			if elevationMap:IsBelowSeaLevel(x,y) then
				temp = temp * mc.maxWaterTemp + mc.minWaterTemp
			end
			winterMap.data[i] = temp
			i=i+1
		end
	end
	winterMap:Smooth(math.floor(elevationMap.width/8))
	winterMap:Normalize()

	local temperatureMap = FloatMap:New(elevationMap.width,elevationMap.height,elevationMap.xWrap,elevationMap.yWrap)
	i = 0
	for y = 0,elevationMap.height - 1,1 do
		for x = 0,elevationMap.width - 1,1 do
			temperatureMap.data[i] = (winterMap.data[i] + summerMap.data[i]) * (1.0 - aboveSeaLevelMap.data[i])
			i=i+1
		end
	end
	temperatureMap:Normalize()

	return summerMap,winterMap,temperatureMap
end
-------------------------------------------------------------------------------------------

I tested it and it looks OK in preliminary tests (the maps I generated were very desert heavy, but I need to tweak the latitude defines back from default.

I think what my edited code does is adjusts adjusts the bell curve to continue outside the map boundaries if your top and bottom latitudes aren't equidistant from the equator. it shouldn't effect the standard generation at all, and should accurately adjust which portion of the bell curve you do see.

EDIT: Found a different problem. looks like the map is still being divided into 8 different regions for weather, causing rain shadows to appear in unexpected places. I'll probably need to tweak that too...

Actually, a better way to put that is wind is sometimes coming from inland, when the primary forces should be seaward and north winds, I think (keeping deserts further inland and southerly, and providing some more variance to the northern tundra.

EDIT: It would appear that this is because there is still a bit of code that's treating the map as if it's wrapping (which is also why there are coast tiles along the map edge. if I could isolate that bit of code it would go a long way...
 
There are so many post so i have to ask this... Is this compatible with Brave New World? If it isnt did anyone make a compatible version and where can i find it?
Sorry again, but i couldnt read through all those posts. :(
 
Tnx Bobert! Perfect World scripts are the best! Gonna try it out now!
 
Hello Bobert13 and congratulations for this welcome update! :)

A user reported (here then there) a compatibility problem between Reseed and your mod. Long story short, it appears that a lua file cannot be included if there are parentheses in its file name. I renamed it to PerfectWorld3_v5b.lua and updated the modinfo file and it works like a charm. Would you mind doing this change in your distribution please?
 
Odd... I use Reseed for map revealing and such and have never run into this. I attempted to recreate it and could not. It may be that I have the map script installed to the \MAPS\ folder under \My Documents\My Games\ which is how I've recommended everyone install it for multiple reasons.

Spoiler :
Code:
[159766.515] CivilopediaScreen: SetSelectedCategory(12)
[159766.515] CivilopediaScreen: CivilopediaCategory[CategoryTerrain].DisplayList
[159766.609] CivilopediaScreen: SetSelectedCategory(1)
[159766.609] CivilopediaScreen: CivilopediaCategory[CategoryHomePage].DisplayList
[159768.625] Tutorial: Loaded Additional Tutorial checks - Assets\DLC\Expansion\Tutorial\lua\TutorialInclude_Expansion1.lua
[159770.078] GenericPopup: Loaded Popup - Assets\DLC\Expansion\UI\InGame\PopupsGeneric\DeclareWarMovePopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\DLC\Expansion\UI\InGame\PopupsGeneric\PuppetCityPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ConfirmImprovementRebuildPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\NetworkKickedPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\CityPlotManagementPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ConfirmCommandPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\MinorCivEnterTerritoryPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\LiberateMinorPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ReturnCivilianPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\AnnexCityPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\DeclareWarMovePopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\BarbarianRansomPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ConfirmGiftPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ConfirmCityTaskPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\PuppetCityPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\DeclareWarRangeStrikePopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\ConfirmPolicyBranchPopup.lua
[159770.078] GenericPopup: Loaded Popup - Assets\UI\InGame\PopupsGeneric\MinorCivGoldPopup.lua
[159771.843] ChoosePantheonPopup: 60
[159771.843] ChoosePantheonPopup: 963
[159771.843] ChoosePantheonPopup: 1023
[159772.750] RSD_UI: 'Reseed!'... loading
[159772.906] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: 'Reseed!'... loaded
[159772.906] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: v11.06
[159773.531] AdvisorInfoPopup: Closing Advisor Info
[159773.531] Demographics: Dequeuing demographics
[159773.531] Demographics: Dequeuing demographics
[159892.531] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: initialize
[159892.531] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: InitializeMapScripts
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: InitializeMapOptions
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Map:	PerfectWorld 3 (v5b)	C:\Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\Maps\PerfectWorld3 modded\PerfectWorld3(v5b).lua
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: GetWorldSize:	4
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update maps
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update options
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update Options - Done
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update error status
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update layout - begin
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update restart label
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update stack sizes
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Update layout - done
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Done update
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: Initialize - Done
[159892.625] \Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\MODS\Reseed! (v 11)\RSD_Loader: success
[159900.609] RSD_UI: Update layout - begin
[159900.609] RSD_UI: Update restart label
[159900.609] RSD_UI: Update stack sizes
[159900.609] RSD_UI: Update layout - done
[159900.609] RSD_UI: OnHidePreview
[159900.609] RSD_UI: Update layout - begin
[159900.609] RSD_UI: Update restart label
[159900.609] RSD_UI: Update stack sizes
[159900.609] RSD_UI: Update layout - done
[159900.609] RSD_UI: InitializeMapOptions
[159900.609] RSD_UI: Map:	PerfectWorld 3 (v5b)	C:\Users\Boberto\Documents\My Games\Sid Meier's Civilization 5\Maps\PerfectWorld3 modded\PerfectWorld3(v5b).lua
[159900.609] RSD_UI: GetWorldSize:	4
[159900.609] RSD_UI: Update maps
[159900.609] RSD_UI: Update options
[159900.609] RSD_UI: Update Options - Done
[159900.609] RSD_UI: Update error status
[159900.609] RSD_UI: Update layout - begin
[159900.609] RSD_UI: Update restart label
[159900.609] RSD_UI: Update stack sizes
[159900.609] RSD_UI: Update layout - done
[159900.609] RSD_UI: Done update

I'll change the file name to not have parentheses when I get around to uploading v6. Until then, either your workaround (renaming the file and updating the .modinfo {altered version available here} or just placing the file into the correct folder) will have to suffice.
 
So civ5 would only sanitize file names for some folders? Interesting. That being said the problem only used to happen during reseeding or restart, something that didn't happen in that log.

Anyway thank you for this quick reaction. :)
 
It does appear to be an issue in the C source. It's not loading the script via the string; it's using some other method that's confusing the parentheses to be parameters. I'll get a v5c hotfix out some time tonight or tomorrow.

It's been a while since I worked on v6... Never did set up an environment that could compile the source FLua stuff so I never proceeded with working on a synchronization library.
 
Top Bottom