Ideologies are stupid...

Cissnei

Warlord
Joined
Feb 27, 2013
Messages
298
In my current game, everyone took autocracy ideology because 2 major civilizations took it. out of 22 civilizations so far 10 took autocracy, 2 order and 1 freedom, and the 3 who didn't take order have -22 happiness now.
It is very unrealistic and broken. Do you know how to fix it?
I would like everyone to take ideology they find best for their civilizations and not because it's the safest one to take.
 
Still, in EU if the "right wing" parties start to win in some member countries it usually start a wave with right wing parties that rule in Europe then when the "left wing" parties start to win ground in EU, a left wing wave goes over Europe.

Besides this. Only weak civs gives in. In my games, usually two or three fairly strong or at least not that weak hold up their ideology while the all the other civs in the game gives in.
 
In my current game, everyone took autocracy ideology because 2 major civilizations took it. out of 22 civilizations so far 10 took autocracy, 2 order and 1 freedom, and the 3 who didn't take order have -22 happiness now.
It is very unrealistic and broken. Do you know how to fix it?
I would like everyone to take ideology they find best for their civilizations and not because it's the safest one to take.

Did 2 take it, or did 10 take it?
 
First 2 major civilizations took it and because of that, other civilizations did too
 
I am still failing to see the broken part here. The AI's depsite being idiots are still trying to win the game. Grabbing an SP that will break your econmy seems stupid, and the AI might just agree.
 
In my current game, everyone took autocracy ideology because 2 major civilizations took it. out of 22 civilizations so far 10 took autocracy, 2 order and 1 freedom, and the 3 who didn't take order have -22 happiness now.
It is very unrealistic and broken. Do you know how to fix it?
I would like everyone to take ideology they find best for their civilizations and not because it's the safest one to take.

Firstly if you load a game with 22 civs , you break the gameplay balance in so many ways as to almost be unquantifiable. I understand you like the flavour/experience of doing it, and that's all ok each to their own, but you have to understand the game is in no way balanced for this number of Civs. SO many mechanics will break (balancewise) if you do this.

Blowouts like this don't occur on games that don't have so many Civs. The mechanics are not designed to take this into account. They work on totals not percentages so once an ideology starts to get a few followers the entire world will pile on in you have that many civs playing the game.

BTW It is in no way unrealistic, that's a strong claim given history. Ideological homogeneity is more the norm then diversity is.

I realise this may be misinterpreted as being an attack, but I am actually trying to help.

Your issue is the total number of Civs you have. Either play with them and realise you will have things like this happening and thus consider it flavour, or alternatively dial down the number of Civs to a more balanced number.
 
I see the AI assessing the situation and making the logical choice. I did the same thing in my game. This far from broken (apart from playing a broken setup).
 
First 2 major civilizations took it and because of that, other civilizations did too

I am sorry but you are making assumptions.

Here is the code that governs how the AI chooses an ideology :

Code:
void CvPolicyAI::DoChooseIdeology(CvPlayer *pPlayer)
{
	int iFreedomPriority = 0;
	int iAutocracyPriority = 0;
	int iOrderPriority = 0;
	int iFreedomMultiplier = 1;
	int iAutocracyMultiplier = 1;
	int iOrderMultiplier = 1;
	PolicyBranchTypes eFreedomBranch = (PolicyBranchTypes)GC.getPOLICY_BRANCH_FREEDOM();
	PolicyBranchTypes eAutocracyBranch = (PolicyBranchTypes)GC.getPOLICY_BRANCH_AUTOCRACY();
	PolicyBranchTypes eOrderBranch = (PolicyBranchTypes)GC.getPOLICY_BRANCH_ORDER();
	if (eFreedomBranch == NO_POLICY_BRANCH_TYPE || eAutocracyBranch == NO_POLICY_BRANCH_TYPE || eOrderBranch == NO_POLICY_BRANCH_TYPE)
	{
		return;
	}

	// First consideration is our victory type
	int iConquestPriority = max(0, pPlayer->GetGrandStrategyAI()->GetConquestPriority());
	int iDiploPriority = max(0, pPlayer->GetGrandStrategyAI()->GetUnitedNationsPriority());
	int iTechPriority = max(0, pPlayer->GetGrandStrategyAI()->GetSpaceshipPriority());
	int iCulturePriority = max(0, pPlayer->GetGrandStrategyAI()->GetCulturePriority());

	// Rule out one ideology if we are clearly (at least 25% more priority) going for the victory this ideology doesn't support
	int iClearPrefPercent = GC.getIDEOLOGY_PERCENT_CLEAR_VICTORY_PREF();
	if (iConquestPriority > (iDiploPriority   * (100 + iClearPrefPercent) / 100) &&
		iConquestPriority > (iTechPriority    * (100 + iClearPrefPercent) / 100) &&
		iConquestPriority > (iCulturePriority * (100 + iClearPrefPercent) / 100))
	{
		iFreedomMultiplier = 0;
	}
	else if (iDiploPriority > (iConquestPriority * (100 + iClearPrefPercent) / 100) &&
		iDiploPriority > (iTechPriority     * (100 + iClearPrefPercent) / 100) &&
		iDiploPriority > (iCulturePriority  * (100 + iClearPrefPercent) / 100))
	{
		iOrderMultiplier = 0;
	}
	else if (iTechPriority > (iConquestPriority * (100 + iClearPrefPercent) / 100) &&
		iTechPriority > (iDiploPriority    * (100 + iClearPrefPercent) / 100) &&
		iTechPriority > (iCulturePriority  * (100 + iClearPrefPercent) / 100))
	{
		iAutocracyMultiplier = 0;
	}

	int iFreedomTotal = iDiploPriority + iTechPriority + iCulturePriority;
	int iAutocracyTotal = iDiploPriority + iConquestPriority + iCulturePriority;
	int iOrderTotal = iTechPriority + iConquestPriority + iCulturePriority;
	int iGrandTotal = iFreedomTotal + iAutocracyTotal + iOrderTotal;

	if (iGrandTotal > 0)
	{
		int iPriorityToDivide = GC.getIDEOLOGY_SCORE_GRAND_STRATS();
		iFreedomPriority = (iFreedomTotal * iPriorityToDivide) / iGrandTotal;
		iAutocracyPriority = (iAutocracyTotal * iPriorityToDivide) / iGrandTotal;
		iOrderPriority = (iOrderTotal * iPriorityToDivide) / iGrandTotal;
	}

	CvString stage = "After Grand Strategies";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Next look at free policies we can get
	iFreedomPriority += PolicyHelpers::GetNumFreePolicies(eFreedomBranch) * GC.getIDEOLOGY_SCORE_PER_FREE_TENET();
	iAutocracyPriority += PolicyHelpers::GetNumFreePolicies(eAutocracyBranch) * GC.getIDEOLOGY_SCORE_PER_FREE_TENET();
	iOrderPriority += PolicyHelpers::GetNumFreePolicies(eOrderBranch) * GC.getIDEOLOGY_SCORE_PER_FREE_TENET();;

	stage = "After Free Policies";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Finally see what our friends (and enemies) have already chosen
	PlayerTypes eLoopPlayer;
	for (int iPlayerLoop = 0; iPlayerLoop < MAX_MAJOR_CIVS; iPlayerLoop++)
	{
		eLoopPlayer = (PlayerTypes) iPlayerLoop;
		if (eLoopPlayer != pPlayer->GetID() && pPlayer->GetDiplomacyAI()->IsPlayerValid(eLoopPlayer))
		{
			CvPlayer &kOtherPlayer = GET_PLAYER(eLoopPlayer);
			PolicyBranchTypes eOtherPlayerIdeology;
			eOtherPlayerIdeology = kOtherPlayer.GetPlayerPolicies()->GetLateGamePolicyTree();

			switch(pPlayer->GetDiplomacyAI()->GetMajorCivApproach(eLoopPlayer, /*bHideTrueFeelings*/ true))
			{
			case MAJOR_CIV_APPROACH_HOSTILE:
				if (eOtherPlayerIdeology == eFreedomBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_HOSTILE();
					iOrderPriority += GC.getIDEOLOGY_SCORE_HOSTILE();
				}
				else if (eOtherPlayerIdeology == eAutocracyBranch)
				{
					iFreedomPriority += GC.getIDEOLOGY_SCORE_HOSTILE();
					iOrderPriority += GC.getIDEOLOGY_SCORE_HOSTILE();
				}
				else if (eOtherPlayerIdeology == eOrderBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_HOSTILE();;
					iFreedomPriority += GC.getIDEOLOGY_SCORE_HOSTILE();
				}
				break;
			case MAJOR_CIV_APPROACH_GUARDED:
				if (eOtherPlayerIdeology == eFreedomBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_GUARDED();
					iOrderPriority += GC.getIDEOLOGY_SCORE_GUARDED();
				}
				else if (eOtherPlayerIdeology == eAutocracyBranch)
				{
					iFreedomPriority += GC.getIDEOLOGY_SCORE_GUARDED();
					iOrderPriority += GC.getIDEOLOGY_SCORE_GUARDED();
				}
				else if (eOtherPlayerIdeology == eOrderBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_GUARDED();
					iFreedomPriority += GC.getIDEOLOGY_SCORE_GUARDED();
				}
				break;
			case MAJOR_CIV_APPROACH_AFRAID:
				if (eOtherPlayerIdeology == eFreedomBranch)
				{
					iFreedomPriority += GC.getIDEOLOGY_SCORE_AFRAID();
				}
				else if (eOtherPlayerIdeology == eAutocracyBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_AFRAID();
				}
				else if (eOtherPlayerIdeology == eOrderBranch)
				{
					iOrderPriority += GC.getIDEOLOGY_SCORE_AFRAID();
				}
				break;
			case MAJOR_CIV_APPROACH_FRIENDLY:
				if (eOtherPlayerIdeology == eFreedomBranch)
				{
					iFreedomPriority += GC.getIDEOLOGY_SCORE_FRIENDLY();
				}
				else if (eOtherPlayerIdeology == eAutocracyBranch)
				{
					iAutocracyPriority += GC.getIDEOLOGY_SCORE_FRIENDLY();
				}
				else if (eOtherPlayerIdeology == eOrderBranch)
				{
					iOrderPriority += GC.getIDEOLOGY_SCORE_FRIENDLY();
				}
				break;
			case MAJOR_CIV_APPROACH_NEUTRAL:
				// No changes
				break;
			}
		}
	}

	stage = "After Relations";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Look at Happiness impacts
	int iHappinessModifier = GC.getIDEOLOGY_SCORE_HAPPINESS();

	// -- Happiness we could add through tenets
	int iHappinessDelta;
	int iHappinessPoliciesInBranch;
	iHappinessDelta = GetBranchBuildingHappiness(pPlayer, eFreedomBranch);
	iHappinessPoliciesInBranch = GetNumHappinessPolicies(pPlayer, eFreedomBranch);
	if (iHappinessPoliciesInBranch > 0)
	{
		iFreedomPriority += iHappinessDelta * iHappinessModifier / iHappinessPoliciesInBranch;		
	}
	iHappinessDelta = GetBranchBuildingHappiness(pPlayer, eAutocracyBranch);
	iHappinessPoliciesInBranch = GetNumHappinessPolicies(pPlayer, eAutocracyBranch);
	if (iHappinessPoliciesInBranch > 0)
	{
		iAutocracyPriority += iHappinessDelta * iHappinessModifier / iHappinessPoliciesInBranch;		
	}
	iHappinessDelta = GetBranchBuildingHappiness(pPlayer, eOrderBranch);
	iHappinessPoliciesInBranch = GetNumHappinessPolicies(pPlayer, eOrderBranch);
	if (iHappinessPoliciesInBranch > 0)
	{
		iOrderPriority += iHappinessDelta * iHappinessModifier / iHappinessPoliciesInBranch;		
	}

	stage = "After Tenet Happiness Boosts";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// -- Happiness we'd lose through Public Opinion
	iHappinessDelta = max (0, 100 - pPlayer->GetCulture()->ComputeHypotheticalPublicOpinionUnhappiness(eFreedomBranch));
	iFreedomPriority += iHappinessDelta * iHappinessModifier;
	iHappinessDelta = max (0, 100 - pPlayer->GetCulture()->ComputeHypotheticalPublicOpinionUnhappiness(eAutocracyBranch));
	iAutocracyPriority += iHappinessDelta * iHappinessModifier;
	iHappinessDelta = max (0, 100 - pPlayer->GetCulture()->ComputeHypotheticalPublicOpinionUnhappiness(eOrderBranch));
	iOrderPriority += iHappinessDelta * iHappinessModifier;

	stage = "After Public Opinion Happiness";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Small random add-on
	iFreedomPriority += GC.getGame().getJonRandNum(10, "Freedom random priority bump");
	iAutocracyPriority += GC.getGame().getJonRandNum(10, "Autocracy random priority bump");
	iOrderPriority += GC.getGame().getJonRandNum(10, "Order random priority bump");

	stage = "After Random (1 to 10)";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Rule out any branches that are totally out of consideration
	iFreedomPriority = iFreedomPriority * iFreedomMultiplier;
	iAutocracyPriority = iAutocracyPriority * iAutocracyMultiplier;
	iOrderPriority = iOrderPriority * iOrderMultiplier;

	stage = "Final (after Clear Victory Preference)";
	LogIdeologyChoice(stage, iFreedomPriority, iAutocracyPriority, iOrderPriority);

	// Pick the ideology
	PolicyBranchTypes eChosenBranch;
	if (iFreedomPriority >= iAutocracyPriority && iFreedomPriority >= iOrderPriority)
	{
		eChosenBranch = eFreedomBranch;
	}
	else if (iAutocracyPriority >= iFreedomPriority && iAutocracyPriority >= iOrderPriority)
	{
		eChosenBranch = eAutocracyBranch;
	}
	else
	{
		eChosenBranch = eOrderBranch;
	}
	pPlayer->GetPlayerPolicies()->SetPolicyBranchUnlocked(eChosenBranch, true, false);
	LogBranchChoice(eChosenBranch);
}

Paraphrasing, and at a quick glance, it works like this.

1. Evaluate the best choice based on our chosen VICTORY TYPE.
2. Evaluate how many FREE POLICIES we can get.
3. See what our FRIENDS and ENEMIES have chosen.
4. Look at the HAPPINESS impact of each choice and how it affects us.
5. Add a small RANDOM component.
6. Eliminate any choices that are clearly unhelpfull.
7. Choose the ideology based on the above.


As you can see there is much more then what you hink going on.

That said, adding a huge number of Civs will greatly unbalance step 3, as the algorithm does not take into account the total number of Civs no the map, primarily because it doesn't need to under normal circumstances.

Hope this helps.

BTW Added the code so that people could check for themselves, and verify my quick summation.
 
This formula actually seems to suggest it'll prioritize taking a different ideology if no one has taken it before (certainly not exclusively, but as a factor).
 
Trust me, I think the Ideology trees are way too simplistic, and they're basically forcing your Civ to become the United States, Soviet Russia/Communist China, or Nazi Germany.

On the other hand, the way civs choose these SP's makes sense to me. Look at history -- in the final millennium BC, Greek tribes started to form city-states with complex laws, which influences the entire Mediterranean world. In the 1600's, European Kings start to look down on traditional methods of government via feudal lords, and absolutism is born - which takes Europe by storm until the French Revolution. The French Revolution is obvious, but then in 1945, the world suddenly becomes democratic -- nations throughout are bending over backwards to mirror the American/British forms of government, with even the Soviet Union and its sphere being forced to pay lip service to representative government.

Ideologies do take the world by storm in waves, I just wish BNW would make them more flexible (ie: changing tides), and more generic (less SP's that are clearly historically identifiable to the US/USSR/PRC/Germany/etc.).
 
Trust me, I think the Ideology trees are way too simplistic, and they're basically forcing your Civ to become the United States, Soviet Russia/Communist China, or Nazi Germany.

On the other hand, the way civs choose these SP's makes sense to me. Look at history -- in the final millennium BC, Greek tribes started to form city-states with complex laws, which influences the entire Mediterranean world. In the 1600's, European Kings start to look down on traditional methods of government via feudal lords, and absolutism is born - which takes Europe by storm until the French Revolution. The French Revolution is obvious, but then in 1945, the world suddenly becomes democratic -- nations throughout are bending over backwards to mirror the American/British forms of government, with even the Soviet Union and its sphere being forced to pay lip service to representative government.

Ideologies do take the world by storm in waves, I just wish BNW would make them more flexible (ie: changing tides), and more generic (less SP's that are clearly historically identifiable to the US/USSR/PRC/Germany/etc.).

Although I agree with your premise, that said however your historical examples are at best an oversimplification.

The Arab Spring would have been a better example.
 
This formula actually seems to suggest it'll prioritize taking a different ideology if no one has taken it before (certainly not exclusively, but as a factor).

I would have to look more closely at it, but even if it does the formulae will get so over balanced because of the number of Civs on the OP's map. Once quite a few have chosen then part 3 will become the overwhelming part of calculation, ether forcing them towards an ideology, or away from one.

As the formulae just += everything and does not scale the result between sections, it will become overly dependent on part 3 if the number of Civs is large.
 
I would have to look more closely at it, but even if it does the formulae will get so over balanced because of the number of Civs on the OP's map. Once quite a few have chosen then part 3 will become the overwhelming part of calculation, ether forcing them towards an ideology, or away from one.

As the formulae just += everything and does not scale the result between sections, it will become overly dependent on part 3 if the number of Civs is large.

I don't know the weighing between them, but I would probably guess 1 and 3 are probably both given lots of weight. Likewise, the one with the strongest pressure would be a bit factor as well. My point was just that it's clear they aren't just going to take the one others have taken, the value of being first is quite high.
 
They're not stupid and they're not broken. They add some much needed intensity and spice to the end game. I had a world war over ideologies, it was awesome. Pre-BNW the end game consisted of hitting next turn for 2 hours. Now, with the addition of culture, tourism, and ideologies the end game is much more exciting. Civ 5 fanatics will appreciate these new systems.
 
Back
Top Bottom