FANDOM


The difficulty in the Community Patch is unchanged, but the rest of Vox Populi changes difficulty greatly, as described below.

If you're interested in modifying these values for your own game, see the guide on Customizing Difficulty Levels.

Difficulty Level Edit

The values listed below are accurate as of the 6-19 (June 19, 2020) release version.

General Bonuses Edit

Bonus Meaning AI Settler Chieftain Warlord Prince King Emperor Immortal Deity
StartingLocPercent Determines the order in which players are placed on the map at game start[1] 50 20 30 40 50 50 50 50 50
HappinessDefault Global happiness bonus 10 12 11 10 9 8 7 6 6
HappinessDefaultCapital Local happiness bonus for the capital 2 2 2 2 1 1 0 0 0
PopulationUnhappinessMod % reduction to citizen happiness need modifiers / -20 -15 -10 -10 -5 0 0 0
ProductionFreeUnits Base unit supply[2] 7 9 9 9 8 8 7 6 6
ProductionFreeUnitsPopulationPercent  % of total population added to unit supply[3] 25 35 30 30 25 25 20 20 20
BarbCampGold Gold given when clearing an encampment 50 30 30 30 30 20 20 20 15
BarbarianBonus Extra CS/RCS % vs barbarians / 50 40 30 30 20 20 10 0
EarliestBarbarianReleaseTurn # of turn before barbarians can cross player borders 0 40 40 35 35 30 30 25 25
BarbarianLandTargetRange Maximum range for Barbarian land unit target search[4] / 3 3 4 4 5 5 6 7
BarbarianSeaTargetRange Maximum range for Barbarian naval unit target search[4] / 6 6 7 7 8 8 9 10
ResistanceCap Maximum[5] CS/RCS bonus (%) to enemy units from this player's warmongering penalties 50 0 15 25 35 45 55 65 75

Additional Settler Bonuses Edit

Bonus Meaning Settler Other
RouteCostPercent Discount on road/railroad maintenance 75 100
UnitCostPercent Discount on unit maintenance 90 100
PolicyPercent Discount on social policy cost 90 100
AICreatePercent Malus to AI production of Manhattan Project

& Apollo Program

110 100
AIWorldConstructPercent Malus to AI world wonder production 110 100
AIWorldCreatePercent Malus to AI world congress project production 110 100

AI Bonuses Edit

Bonus Meaning Settler Chieftain Warlord Prince King Emperor Immortal Deity
CityProductionNumOptionsConsidered

TechNumOptionsConsidered PolicyNumOptionsConsidered

AI will randomly choose between the top X best options when choosing city production,

research and social policies

3 3 3 2 2 2 1 1
AIBarbarianBonus Extra CS/RCS % vs barbarians for the AI 0 5 10 10 15 15 20 25
StartingMinorDefenseUnits Bonus Warriors for City-States at game start 0 0 1 1 1 2 2 3
AIStartingDefenseUnits Bonus Warriors at game start 1 1 1 1 1 1 1 1
AIDeclareWarProb Increases AI enmity towards humans who get too close to victory 50 75 100 125 150 175 200 225
AIWorkRateModifier % bonus to Worker tile improvement speed 0 10 20 30 40 50 60 70
AIUnhappinessPercent % reduction to citizen happiness need modifiers (malus on Settler difficulty) 5 0 0 0 0 0 -5 -10
AIConstructPercent

AITrainPercent

Discount on building and combat unit production costs (increased by AIPerEraModifier each era) 110 100 100 90 90 80 80 70
AIBuildingCostPercent

AIUnitCostPercent

Discount on unit and building maintenance 100 100 90 90 90 80 80 70
AIUnitSupplyPercent Bonus to unit supply cap (increased by AIPerEraModifier each era) 0 5 10 15 20 25 30 35
AIUnitUpgradePercent Discount on unit upgrade costs 100 95 90 85 80 75 70 65
AIFreeXP Free XP given to new units, modified by game speed[6] 0 5 10 15 20 20 25 30
AIFreeXPPercent Extra XP earned from combat (%) 0 10 25 33 50 66 75 100
VisionBonus Extra sight[7] for AI units (# tiles) 0 0 0 0 0 0 1 2
AIPerEraModifier Value increasing some other bonuses (see above)[8] 0 -2 -4 -6 -7 -8 -9 -10
DifficultyBonusBase See AI Handicap Bonuses, below 0 1 2 3 4 5 7 9
DifficultyBonusA See below 300 310 320 330 340 350 360 375
DifficultyBonusB See below 170 180 190 200 220 230 240 260
DifficultyBonusC See below 70 85 100 115 130 145 160 180

Additional Informations in DifficultyMod.xml Edit

Name Meaning Value
ExtraHappinessPerLuxury Bonus to Global Happiness for each owned or controlled Luxury Resource 0
StartingPolicyPoints Extra Culture given to human players at game start (modified by game speed) 0
FreeCulturePerTurn Extra Culture per turn given to human players for free 0
Gold Extra Gold given at game start to human players (modified by game speed) 0
GoldFreeUnits Number of human player Units which do not require gold maintenance 0
ProductionFreeUnitsPerCity Amount added to unit supply per owned city 1
BuildingCostPercent

ResearchPercent ImprovementCostPercent

Production cost of buildings, science cost of technologies and worker time cost of improvements for the player 100
AIStartingExploreUnits Bonus Pathfinders at game start 0
AIStartingWorkerUnits Bonus Workers at game start 0
AIStartingUnitMultiplier Bonus Settlers at game start 0
AIGrowthPercent Discount on food requirement to grow in population for the AI (no longer used in VP) 100
AttitudeChange Diplomacy bonus or penalty to the AI's Opinion score for human players. Negative values make Opinion more favorable, positive values make Opinion less favorable. See Detailed Guide to Diplomacy for more information on the Opinion calculation. 0
BarbSpawnMod Delays barb spawns from camps by X turns, modified by game speed 0

AI Periodic Yield Bonuses Edit

When playing on difficulty levels higher than Settler, the AI receives bonus yields periodically upon triggering certain events, in an effort to match increasingly skilled human players. These bonus yields scale exponentially with era, beginning in the Medieval Era, and are much higher in later eras. Successful AI players will tend to trigger yield bonuses more often and as a result become more difficult opponents for others to take on.

An AI civilization receives bonus yields when it achieves any of the following:

  • Enters a new era (3x normal bonus; Food, Production, Gold, Golden Age Points, Science, Culture)
  • Founds its original capital (Food, Production, Gold, Golden Age Points)
  • Founds a new city, other than its capital (Food, Production, Gold, Golden Age Points, Science, Culture)
  • Wins a war (warscore 25+) (Food, Production, Gold, Golden Age Points, Science, Culture)
  • Starts a Golden Age (Food, Production, Gold, Science, Culture)
  • Constructs a World Wonder (Gold, Golden Age Points)
  • Generates a Great Person (Gold, Golden Age Points)
  • Completes an antiquity site dig by building a Landmark or extracting an artifact (Gold)
  • Completes a trade route to another civilization or City-State (Gold)

The types of yields received by the AI differ based on the trigger for the event, and are listed above. Bonus Gold, Golden Age Points, Science and Culture are applied once at the empire level, whereas bonus Food and Production yields are applied to every city in the AI player's empire.

The specific amount of yields received is based on the formula below, with the following outside variables:

  • iEra is the average era among all major civilizations[9]. It is 1 in Ancient/Classical, 2 in Medieval, 3 in Renaissance and so on.
  • iHandicapBase, iHandicapA, iHandicapB, and iHandicapC are defined in the DifficultyMod.xml file, and are listed above. iHandicapBase is effectively a multiplier on the total number of yields received.
  • TrainPercent is 67 on Quick speed, 100 on Standard, 150 on Epic, and 300 on Marathon.

Finally the formula:

void CvPlayer::DoDifficultyBonus(HistoricEventTypes eHistoricEvent)
{
	int iEra = GC.getGame().getCurrentEra();
	if (iEra <= 0)
	{
		iEra = 1;
	}
	int iHandicapBase = 0;
	int iHandicapA = 0;
	int iHandicapB = 0;
	int iHandicapC = 0;
	int iYieldHandicap = 0;

	CvString strLogString;

	CvHandicapInfo* pHandicapInfo = GC.getHandicapInfo(GC.getGame().getHandicapType());
	if (pHandicapInfo)
	{
		iHandicapBase = pHandicapInfo->getAIDifficultyBonusBase();
		iHandicapA = pHandicapInfo->getAIDifficultyBonusEarly();
		iHandicapB = pHandicapInfo->getAIDifficultyBonusMid();
		iHandicapC = pHandicapInfo->getAIDifficultyBonusLate();
		iYieldHandicap = iHandicapBase * ((iHandicapC * iEra * iEra) + (iHandicapB * iEra) + iHandicapA) / 100;

		iYieldHandicap *= GC.getGame().getGameSpeedInfo().getTrainPercent();
		iYieldHandicap /= 100;
	}
	if (iYieldHandicap > 0)
	{
		switch (eHistoricEvent)
		{
			case HISTORIC_EVENT_ERA:
			{
				iYieldHandicap *= 3;
				int iLoop;
				CvCity* pLoopCity;
				for (pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))
				{
					if (pLoopCity != NULL)
					{
						pLoopCity->changeFood(iYieldHandicap);
						pLoopCity->changeProduction(iYieldHandicap);
					}
				}
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				changeJONSCulture(iYieldHandicap);

				TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();
				if (eCurrentTech == NO_TECH)
				{
					changeOverflowResearch(iYieldHandicap);
				}
				else
				{
					GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iYieldHandicap, GetID());
				}
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: ERA - Received Handicap Bonus (%d in Yields): FOOD, PRODUCTION, GOLD, GAP, CULTURE, SCIENCE.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_WONDER:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: WONDER - Received Handicap Bonus (%d in Yields): GOLD, GAP.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_GP:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: GREAT PERSON - Received Handicap Bonus (%d in Yields): GOLD, GAP", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_WAR:
			{
				int iLoop;
				CvCity* pLoopCity;
				for (pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))
				{
					if (pLoopCity != NULL)
					{
						pLoopCity->changeFood(iYieldHandicap);
						pLoopCity->changeProduction(iYieldHandicap);
					}
				}
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				changeJONSCulture(iYieldHandicap);

				TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();
				if (eCurrentTech == NO_TECH)
				{
					changeOverflowResearch(iYieldHandicap);
				}
				else
				{
					GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iYieldHandicap, GetID());
				}
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: WAR - Received Handicap Bonus (%d in Yields): FOOD, PRODUCTION, GOLD, GAP, CULTURE, SCIENCE.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_GA:
			{
				int iLoop;
				CvCity* pLoopCity;
				for (pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))
				{
					if (pLoopCity != NULL)
					{
						pLoopCity->changeFood(iYieldHandicap);
						pLoopCity->changeProduction(iYieldHandicap);
					}
				}
				GetTreasury()->ChangeGold(iYieldHandicap);
				changeJONSCulture(iYieldHandicap);

				TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();
				if (eCurrentTech == NO_TECH)
				{
					changeOverflowResearch(iYieldHandicap);
				}
				else
				{
					GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iYieldHandicap, GetID());
				}
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: GOLDEN AGE - Received Handicap Bonus (%d in Yields): FOOD, PRODUCTION, GOLD, CULTURE, SCIENCE.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_DIG:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: DIG - Received Handicap Bonus (%d in Yields): GOLD.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_TRADE_CS:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: TRADE (CITY-STATE) - Received Handicap Bonus (%d in Yields): GOLD.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_TRADE_LAND:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: TRADE (LAND) - Received Handicap Bonus (%d in Yields): GOLD.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_TRADE_SEA:
			{
				GetTreasury()->ChangeGold(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: TRADE (SEA) - Received Handicap Bonus (%d in Yields): GOLD.", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_CITY_FOUND_CAPITAL:
			{
				int iLoop;
				CvCity* pLoopCity;
				for (pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))
				{
					if (pLoopCity != NULL)
					{
						pLoopCity->changeFood(iYieldHandicap);
						pLoopCity->changeProduction(iYieldHandicap);
					}
				}
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: FOUND CAPITAL - Received Handicap Bonus (%d in Yields): FOOD, PRODUCTION, GOLD, GAP", iYieldHandicap);
				break;
			}
			case HISTORIC_EVENT_CITY_FOUND:
			{
				int iLoop;
				CvCity* pLoopCity;
				for (pLoopCity = firstCity(&iLoop); pLoopCity != NULL; pLoopCity = nextCity(&iLoop))
				{
					if (pLoopCity != NULL)
					{
						pLoopCity->changeFood(iYieldHandicap);
						pLoopCity->changeProduction(iYieldHandicap);
					}
				}
				GetTreasury()->ChangeGold(iYieldHandicap);
				ChangeGoldenAgeProgressMeter(iYieldHandicap);
				changeJONSCulture(iYieldHandicap);

				TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();
				if (eCurrentTech == NO_TECH)
				{
					changeOverflowResearch(iYieldHandicap);
				}
				else
				{
					GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iYieldHandicap, GetID());
				}
				strLogString.Format("CBP AI DIFFICULTY BONUS FROM HISTORIC EVENT: FOUND CITY - Received Handicap Bonus (%d in Yields): FOOD, PRODUCTION, GOLD, GAP, CULTURE, SCIENCE.", iYieldHandicap);
				break;
			}
		}
	}

	if (GC.getLogging() && GC.getAILogging())
	{
		CvString strTemp;

		CvString strFileName = "DifficultyHandicapLog.csv";
		FILogFile* pLog;
		pLog = LOGFILEMGR.GetLog(strFileName, FILogFile::kDontTimeStamp);

		CvString strPlayerName;
		strPlayerName = getCivilizationShortDescription();
		strTemp += strPlayerName;
		strTemp += ", ";

		CvString strTurn;

		strTurn.Format("%d, ", GC.getGame().getGameTurn()); // turn
		strTemp += strTurn;

		strTemp += strLogString;

		pLog->Msg(strTemp);
	}
}

Notes Edit

  1. Players with lower StartingLocPercent values are placed on the map before players with higher values (somewhat increasing the odds of obtaining a favorable starting position). If two or more players have the same StartingLocPercent value, the order of placement is determined randomly. Civilizations are always placed on the map before City-States, since the StartingLocPercent value for City-States is multiplied by 10.
  2. If the game starts in a later era (e.g. Industrial rather than Ancient), an additional 2 base unit supply is added per era, beginning in the Classical Era.
  3. Puppet cities only contribute half of their total population towards this percentage, unless you're playing as Venice.
  4. 4.0 4.1 This is measured in approximate pathfinder turns (i.e. a range of 3 means a Barbarian unit will search for visible targets that it can reach within 3 turns of movement.)
  5. This is the maximum bonus when fighting in the enemy's territory. In neutral territory, the maximum CS/RCS bonus is reduced by half (rounded down). In owned territory, the bonus does not apply. The bonus begins at 0, is raised by the player's warmongering behavior (declaring war and capturing cities), and decays over time.
  6. The AI receives 33% less XP on Quick, 50% more XP on Epic, and 200% more XP on Marathon. These multipliers are also used for the AI's periodic yield bonuses.
  7. AI units that gain XP from revealing tiles (i.e. scouts) do not receive the sight bonus.
  8. While most per-era scaling in Vox Populi counts the Ancient and Classical Era as one era, the AIPerEraModifier does not, and its discount is applied starting in the Classical Era.
  9. Calculated by adding the era number of each major civ team together, then dividing by the number of major civ teams and rounding down.
Community content is available under CC-BY-SA unless otherwise noted.