Fall Update 2017 BUGS

Can you please leave this link up for a couple of days? I linked to it over at Reddit so users can follow this solution. Unfortunately not everyone comes over to civ fanatics.

Can you please change the link you posted on Reddit to the permanent one I just posted.

Thanks for posting there and helping that community as well.
 
The production options for religious buildings is allows all buildings. The production queue acts like it wants allow queued builds but the are hidden.

I can no longer select a location for districts. Brings up the tile options but can't select a tile.

This is a problem with the Production Queue mod you're using. It is not currently compatible with the patch.

Cannot get the game past turn 3 before it crashed, so have deleted all mods and was going to start again. First mod I wanted was Alert Guard, but cannot find it anywhere on the mod page. anyone know if there is another mod that will cause a sentry to wake up when threatened?

The mod was likely removed when Firaxis added it to the base game. You do not need a mod for this. Just use the "Alert" button when selecting a unit.
 
@PYITE What does Assignstartingplots.Lua from v. 1.0.0.167 exactly do? What about starting biases for Khmer and Indonesia? Are the biases for specific civs in another file?
 
@PYITE What does Assignstartingplots.Lua from v. 1.0.0.167 exactly do? What about starting biases for Khmer and Indonesia? Are the biases for specific civs in another file?

It doesn't change start biases, they are in the civilizations Lua. It also uses the minimum start distances and minimum fertility values from the global parameters lua.

The file assigns start plots and then evaluates if they meet requirements such as distance to other civ and CS. If the plot doesn't meet all requirements it is thrown out and another attempt is made with a different plot. That is the part that seems to not be working correctly in the Fall 2017 version.
 
Since the patch the scroll bar on the city screen on mine has disappeared meaning I can’t see the detail of the housing or any recomendations for improving amenities or housing?

Just me?
 
It can also be used as a mod (ie without replacing the game's files) following those instruction:
https://forums.civfanatics.com/resources/how-to-install-a-mod.25400/

Thanks for posting this. I've found testing another map it spawns two AI on each other's doorstep. It's pretty rubbish how Firaxis change one thing and break another :cringe:

The game needs our mods/hotfixes in order to run.

BTW have you figured out why it's spawning civs so weirdly? Are there changes to the maps we can make to mitigate this?
 
Thanks for posting this. I've found testing another map it spawns two AI on each other's doorstep. It's pretty rubbish how Firaxis change one thing and break another :cringe:

The game needs our mods/hotfixes in order to run.

BTW have you figured out why it's spawning civs so weirdly? Are there changes to the maps we can make to mitigate this?
You're using map scripts in your mods?
 
All my maps are scripts. They're based off the map script from the Outback Tycoon scenario, fashioned after Civ V's "Scrambled" maps →
https://forums.civfanatics.com/threads/scrambled-maps-pack.616588/

BTW I had a look at the standard maps and the start conditions haven't changed. So the hotfix/mod is the only solution RN.
Alternate solution: add the old placement code directly in your scripts:

Spoiler :

Code:
------------------------------------------------------------------------------
function AssignStartingPlots:__SetStartMajor(plots)
    -- Sort by fertility of all the plots
    -- eliminate them if they do not meet the following:
    -- distance to another civilization
    -- distance to a natural wonder
    -- minimum production
    -- minimum food
    -- minimum luxuries
    -- minimum strategic

    sortedPlots ={};

    local iSize = #plots;
    local iContinentIndex = 1;

    for i, plot in ipairs(plots) do
        row = {};
        row.Plot = plot;
        row.Fertility = self:__WeightedFertility(plot);
        table.insert (sortedPlots, row);
    end

    if(self.uiStartConfig > 1 ) then
        table.sort (sortedPlots, function(a, b) return a.Fertility > b.Fertility; end);
    else
        self.sortedFertilityArray = {};
        sortedPlotsFertility = {};
        sortedPlotsFertility = self:__PreFertilitySort(sortedPlots);
        self:__SortByFertilityArray(sortedPlots, sortedPlotsFertility);
        for k, v in pairs(sortedPlots) do
            sortedPlots[k] = nil;
        end
        for i, newPlot in ipairs(self.sortedFertilityArray) do
            row = {};
            row.Plot = newPlot.Plot;
            row.Fertility = newPlot.Fertility;
            table.insert (sortedPlots, row);
        end
    end

    local bValid = false;
    while bValid == false and iSize >= iContinentIndex do
        bValid = true;
        local NWMajor = 0;
        pTempPlot = Map.GetPlotByIndex(sortedPlots[iContinentIndex].Plot);
        iContinentIndex = iContinentIndex + 1;
        --print("Fertility: ", sortedPlots[iContinentIndex].Fertility)

        -- Checks to see if the plot is impassable
        if(pTempPlot:IsImpassable() == true) then
            bValid = false;
        end

        -- Checks to see if the plot is water
        if(pTempPlot:IsWater() == true) then
            bValid = false;
        end

        -- Checks to see if there are resources
        if(pTempPlot:GetResourceCount() > 0) then
           local bValidResource = self:__BonusResource(pTempPlot);
            if(bValidResource == false) then
               bValid = false;
            end
        end

        -- Checks to see if there are luxuries
        if (math.ceil(self.iDefaultNumberMajor * 1.25) + self.iDefaultNumberMinor > self.iNumMinorCivs + self.iNumMajorCivs) then
            local bLuxuryCheck = self:__LuxuryBuffer(pTempPlot);
            if(bLuxuryCheck  == false) then
                bValid = false;
            end
        end
        

        --Checks to see if there are strategics
        -- local bStrategicCheck = self:__StrategicBuffer(pTempPlot);
        -- if(bStrategicCheck  == false) then
        --     bValid = false;
        -- end

        -- Checks to see if there is fresh water or coast
        local bWaterCheck = self:__GetWaterCheck(pTempPlot);
        if(bWaterCheck == false) then
            bValid = false;
        end

        local bValidAdjacentCheck = self:__GetValidAdjacent(pTempPlot, 0);
        if(bValidAdjacentCheck == false) then
            bValid = false;
        end

        -- Checks to see if there are natural wonders in the given distance
        local bNaturalWonderCheck = self:__NaturalWonderBuffer(pTempPlot, false);
        if(bNaturalWonderCheck == false) then
            bValid = false;
        end

        -- Checks to see if there are any major civs in the given distance
        local bMajorCivCheck = self:__MajorCivBuffer(pTempPlot);
        if(bMajorCivCheck == false) then
            bValid = false;
        end

        -- Checks to see if there is an Oasis
        local featureType = pTempPlot:GetFeatureType();
        if(featureType == g_FEATURE_OASIS) then
            bValid = false;
        end

        -- If the plots passes all the checks then the plot equals the temp plot
        if(bValid == true) then
            self:__TryToRemoveBonusResource(pTempPlot);
            self:__AddBonusFoodProduction(pTempPlot);
            return pTempPlot;
        end
    end
 
    return nil;
end

------------------------------------------------------------------------------
function AssignStartingPlots:__SetStartMinor(plots)
    -- Sort by fertility of all the plots
    -- eliminate them if they do not meet the following:
    -- distance to another civilization
    -- distance to a natural wonder
    -- minimum production
    -- minimum food

    sortedPlots ={};

    local iSize = #plots;
    local iContinentIndex = 1;

    for i, plot in ipairs(plots) do
        row = {};
        row.Plot = plot;
        row.Fertility = self:__WeightedFertility(plot);
        table.insert (sortedPlots, row);
    end

    table.sort (sortedPlots, function(a, b) return a.Fertility > b.Fertility; end);

    local bValid = false;
    while bValid == false and iSize >= iContinentIndex do
        bValid = true;
        local NWMinor = 2;
        pTempPlot = Map.GetPlotByIndex(sortedPlots[iContinentIndex].Plot);
        iContinentIndex = iContinentIndex + 1;
        --print("Fertility: ", sortedPlots[iContinentIndex].Fertility)

        -- Checks to see if the plot is impassable
        if(pTempPlot:IsImpassable() == true) then
            bValid = false;
        end

        -- Checks to see if the plot is water
        if(pTempPlot:IsWater() == true) then
            bValid = false;
        end

        -- Checks to see if there are resources
        if(pTempPlot:GetResourceCount() > 0) then
            local bValidResource = self:__BonusResource(pTempPlot);
            if(bValidResource == false) then
                bValid = false;
            end
        end

        local bValidAdjacentCheck = self:__GetValidAdjacent(pTempPlot, 2);
        if(bValidAdjacentCheck == false) then
            bValid = false;
        end

        -- Checks to see if there are natural wonders in the given distance
        local bNaturalWonderCheck = self:__NaturalWonderBuffer(pTempPlot, true);
        if(bNaturalWonderCheck == false) then
            bValid = false;
        end

        -- Checks to see if there are any minor civs in the given distance
        local bMinorCivCheck = self:__MinorCivBuffer(pTempPlot, 1);
        if(bMinorCivCheck == false) then
            bValid = false;
        end

        -- Checks to see if there is an Oasis
        local featureType = pTempPlot:GetFeatureType();
        if(featureType == g_FEATURE_OASIS) then
            bValid = false;
        end

        -- If the plots passes all the checks then the plot equals the temp plot
        if(bValid == true) then
            self:__TryToRemoveBonusResource(pTempPlot);
            return pTempPlot;
        end
    end
 
    return nil;
end
 
I think I understand why AssignStartingPlots.lua misbehaves the way it does. The fallback code consistently uses this logic, where X increases as you pass more validity checks:
Code:
if(validity test fails) then
    bValid = false;
else
    local iFallBackScoreTemp = X;
    if (iFallBackScore <= iFallBackScoreTemp) then
        pFallback = pTempPlot;
        iFallBackScore = iFallBackScoreTemp;
    end
end
The apparent intent is to choose the plot that passes as many checks as possible, if it's not possible to pass all of them.

I think the <= comparison is the root cause of the problem. The game checks plots from best (very fertile) to worst (arctic wasteland). Using <= to check the validity score means that the game will keep updating the fallback when validity scores are tied between two plots. Roughly speaking, that means it will choose the worst possible tile that hits a given validity score. If the problem is that there is not enough room left between civs, it will effectively throw the remaining civs together in the arctic.

If my suspicion is correct, then probably the easiest fix is to replace all of those <= tests with < tests instead, and increase all of the X scores by 1.
 
It looks like Alert is broken again. Barb scouts are walking past my units on alert without being noticed, pillaging my traders...
 
I wonder how this starting position problem came up in the first place. They didn't introduce any changes to the game that would require a change to the starting position code, did they. So how come this doesn't work anymore when it worked fine for a year now.

Apart from that : could someone kindly summarize how to actually fix this myself? I see some solutions here and there, but I did not quite understand if they fix the problem completely or if I'll have to deal with other problems then. And what code has to be replaced by which code and where in which file?

Highly appreciated.
 
peezartiste said:
Cannot get the game past turn 3 before it crashed, so have deleted all mods and was going to start again. First mod I wanted was Alert Guard, but cannot find it anywhere on the mod page. anyone know if there is another mod that will cause a sentry to wake up when threatened?

The mod was likely removed when Firaxis added it to the base game. You do not need a mod for this. Just use the "Alert" button when selecting a unit.

Formerly known as GamerKG

Alert doesn't Alert! Units just stand there and get hammered by Barbs, and no noticication. Ok if you are on that screen but not if your view is a different part of the map.
 
Anyone know what is it?
[1034600.935] [Localization]: Validating Foreign Key Constraints...
[1034600.936] [Localization]: Passed Validation.
[1034601.097] [Configuration]: Validating Foreign Key Constraints...
[1034601.098] [Configuration]: Passed Validation.
[1034610.044] [FullTextSearch]: Initializing FullTextSearch
[1034623.136] [Gameplay]: Validating Foreign Key Constraints...
[1034623.152] [Gameplay]: Passed Validation.
[1034643.638] [Configuration]: Validating Foreign Key Constraints...
[1034643.639] [Configuration]: Passed Validation.
[1034643.860] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034643.860] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034670.067] [FullTextSearch]: FTS - Creating Context
[1034764.989] [Configuration]: Validating Foreign Key Constraints...
[1034764.989] [Configuration]: Passed Validation.
[1034765.075] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034765.075] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034772.894] [Gameplay]: Validating Foreign Key Constraints...
[1034772.916] [Gameplay]: Passed Validation.
[1034773.043] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034773.043] [Database] ERROR: UNIQUE constraint failed: IconTextureAtlases.Name, IconTextureAtlases.IconSize
[1034804.790] [FullTextSearch]: FTS - Creating Context
[1034811.872] [FullTextSearch]: FTS - Creating Context
[1034823.286] [FullTextSearch]: FTS - Creating Context

I play with mods.
 
This is a problem with the Production Queue mod you're using. It is not currently compatible with the patch.



The mod was likely removed when Firaxis added it to the base game. You do not need a mod for this. Just use the "Alert" button when selecting a unit.
Alert doesn't do anything. Units on alert just sit there and get hammered by Barbs/Other civs and do nothing. Ok if you are on that screen, but not if you are looking at a different part of the map. No notification
 
After building a barracks, you are still offered the choice of building a stable (not grayed out), but cannot select it.
I'm fed up with having to work for a couple of weeks to sort out the problems caused by these updates. Who is writing these and is any testing done on them. Think I'll leave it a couple of weeks and see what transpires.
Or go back to WoW.
 
I wonder how this starting position problem came up in the first place. They didn't introduce any changes to the game that would require a change to the starting position code, did they. So how come this doesn't work anymore when it worked fine for a year now.

Apart from that : could someone kindly summarize how to actually fix this myself? I see some solutions here and there, but I did not quite understand if they fix the problem completely or if I'll have to deal with other problems then. And what code has to be replaced by which code and where in which file?

Highly appreciated.
Since 2K acquired Firaxis and the Civ franchise, Firaxis no longer does anything but in-house QA testing and the majority of that is automated just looking for script running errors. So it seems they use their limited human testing resources to test only if the code they write does what they want for the specific situation they wrote it for. It appears no overall testing is done as I recall happening in Civ 4, I was a beta tester for Civ 4 and all of its expansions.
 
Top Bottom