1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

Peacevassal mechanics question

Discussion in 'Civ4 - Strategy & Tips' started by LeftAdjoint, Jul 28, 2011.

  1. LeftAdjoint

    LeftAdjoint Chieftain

    Joined:
    May 22, 2011
    Messages:
    273
    Location:
    Berkeley
    First, the generic question is: is there a single go-to thread for understanding vassal mechanics? I've done a lot of searches and only found incomplete discussions, so apologies if this is really obvious.

    If there is no such thread, my question is this: While at war with Civ A, is the likelihood that Civ A peacevassals to Civ B directly affected by whether Civ B is in war—particularly war with me?

    It seems intuitive that the answer should be yes, but if I've learned one thing from Civ, it's to not make assumptions about the AI behavior.
     
  2. Um the Muse

    Um the Muse Chieftain

    Joined:
    Sep 11, 2009
    Messages:
    922
    Location:
    surrounded in the USA
    I don't know how credible a source this is, but here you go:
    And source.
     
  3. LeftAdjoint

    LeftAdjoint Chieftain

    Joined:
    May 22, 2011
    Messages:
    273
    Location:
    Berkeley
    The fact that military power is compared is well-known, but my question is regarding other factors, specifically ongoing wars.
     
  4. Um the Muse

    Um the Muse Chieftain

    Joined:
    Sep 11, 2009
    Messages:
    922
    Location:
    surrounded in the USA
    Oh, I see what you're saying now. Sorry, I don't know for sure. I would speculate that they don't; as far as I can tell, the victim always seems to join forces with the most annoying guy that they can. Maybe the would-be protector does the more elaborate checks? If that's the case, and the victim doesn't keep shopping around after having been turned away once, that might explain why they don't always peacevassal just before they get wiped out.
     
  5. LeftAdjoint

    LeftAdjoint Chieftain

    Joined:
    May 22, 2011
    Messages:
    273
    Location:
    Berkeley
    I'm asking specifically about the protector, but more generally I am curious about how these things work.
     
  6. kossin

    kossin Chieftain

    Joined:
    Dec 4, 2008
    Messages:
    9,572
    Location:
    Canada
    I've never read anything about the likelihood once all conditions all are met. Usually they insta-vassal once it can be done I'd think.
     
  7. shyuhe

    shyuhe Chieftain

    Joined:
    Nov 30, 2006
    Messages:
    6,062
    Location:
    Gone fishing for the summer
    I don't have any source code proof but I think this is right. I've had my war targets run away to become a vassal while they were in a "refuse to talk" mode. Pretty frustrating stuff since they would have capitulated to me had they been willing to talk! :mad:

    As for the likelihood of forming peace vassals, I don't know. Given that the AI tend to jump in and out of such vassal relationships, I think it has to do with power calculations and how threatened that AI feels. Or something stupid like that.
     
  8. Mylene

    Mylene Chieftain

    Joined:
    Jan 30, 2011
    Messages:
    4,000
    Location:
    Pangea
    If Civ B is big and not "scared" of a war with you, and Civ A likes him, the chance is high yes.
    I have had it happen while Civ B was at war with someone else too.
    Overall i have the feeling that what matters most is how many/big cities and production power Civ B has, that usually comes along with the amount of units cos the big AI has more.
     
  9. nfw

    nfw Chieftain

    Joined:
    Aug 31, 2010
    Messages:
    733
    If you have a peace treaty with the would be master, it prevents peace vassaling.
     
  10. TheMeInTeam

    TheMeInTeam Top Logic

    Joined:
    Jan 26, 2008
    Messages:
    25,044
    Going by history it's almost certainly a straight power calculation (not my own history, history of other war-mechanics considerations for AI). I've not seen much difference in whether the nation that becomes master is already at war or not ------> as long it kind of sort of likes the would-be vassal and vice versa it can happen if they pass a power check together (extremely likely unless human is running away).

    Essentially, the vassal is using "itself" as a war-bribe for the master, and it seems like that is considered more valuable than even numerous techs.

    I've seen some horrid stuff over the years, like zara taking izzy as a vassal when both are heathens relative to each other and zara is across the entire world. Fortunately for me, that meant I saw no material extra military pressure, but it's still annoying...much like how it is annoying that a player gets a demerit for honoring a defensive pact (but masters/vassals don't get demerits for coming to each other's aid).

    What annoys me most, however, is that firaxis never bothered to refine/fix vassal mechanics. In 3.19, it's still possible to:

    1. Have one vassal
    2. Be fighting another enemy
    3. Enemy is "doing fine on his own"
    4. However, if you go into worldbuilder and delete your own vassal, making no other changes, NOW the AI will capitulate.
    5. But, if said useless deleted vassal happens to border the AI, even if it is actively losing cities as a result, the AI is still threatened by it and will capitulate.

    Of course, for a sense of perspective, keep in mind we're talking about the same design team that thinks desert fairy magic (DFM) was a good idea to include in the base game, even though it doesn't change the relative positions of the civs one bit.
     
  11. r_rolo1

    r_rolo1 King of myself

    Joined:
    May 19, 2006
    Messages:
    13,818
    Location:
    Lisbon, Portugal
    Ok, as this was bugging me for quite a while, I decided to give a look to the code ... and was surprised :D

    First I decided to check CvPlayerAI and look for the name of the function that the vassal trade called:
    Code:
    		case TRADE_VASSAL:
    			if (!bIgnoreAnnual)
    			{
    				iValue += GET_TEAM(getTeam()).AI_vassalTradeVal(GET_PLAYER(ePlayer).getTeam());
    			}
    			break;
    Fine so far ... so i go the CvTeamAI and see what this function calls:
    Code:
    int CvTeamAI::AI_vassalTradeVal(TeamTypes eTeam) const
    {
    	FAssertMsg(eTeam != getID(), "shouldn't call this function on ourselves");
    
    	return AI_surrenderTradeVal(eTeam);
    }
    And it calls the code that is also used for calculating capitulation :confused: To be honest, I should know better ,since I actually had read CvTeamAI::AI_surrenderTradeVal quite a while ago to suggest changes to the better AI mod :blush:

    Anyway, here is the full code, for those lazy to check the Dll folder :p

    Code:
    DenialTypes CvTeamAI::AI_surrenderTrade(TeamTypes eTeam, int iPowerMultiplier) const
    {
    	PROFILE_FUNC();
    
    	FAssertMsg(eTeam != getID(), "shouldn't call this function on ourselves");
    
    	CvTeam& kMasterTeam = GET_TEAM(eTeam);
    
    	for (int iLoopTeam = 0; iLoopTeam < MAX_TEAMS; iLoopTeam++)
    	{
    		CvTeam& kLoopTeam = GET_TEAM((TeamTypes)iLoopTeam);
    		if (kLoopTeam.isAlive() && iLoopTeam != getID() && iLoopTeam != kMasterTeam.getID())
    		{
    			if (kLoopTeam.isAtWar(kMasterTeam.getID()) && !kLoopTeam.isAtWar(getID()))
    			{
    				if (isForcePeace((TeamTypes)iLoopTeam) || !canChangeWarPeace((TeamTypes)iLoopTeam))
    				{
    					if (!kLoopTeam.isAVassal())
    					{
    						return DENIAL_WAR_NOT_POSSIBLE_US;
    					}
    				}
    			}
    			else if (!kLoopTeam.isAtWar(kMasterTeam.getID()) && kLoopTeam.isAtWar(getID()))
    			{
    				if (!canChangeWarPeace((TeamTypes)iLoopTeam))
    				{
    					if (!kLoopTeam.isAVassal())
    					{
    						return DENIAL_PEACE_NOT_POSSIBLE_US;
    					}
    				}
    			}
    		}
    	}
    
    	if (isHuman())
    	{
    		return NO_DENIAL;
    	}
    
    	int iAttitudeModifier = 0;
    
    	if (!GET_TEAM(eTeam).isParent(getID()))
    	{
    		int iPersonalityModifier = 0;
    		int iMembers = 0;
    		for (int iI = 0; iI < MAX_PLAYERS; iI++)
    		{
    			if (GET_PLAYER((PlayerTypes)iI).isAlive())
    			{
    				if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
    				{
    					iPersonalityModifier += GC.getLeaderHeadInfo(GET_PLAYER((PlayerTypes)iI).getPersonalityType()).getVassalPowerModifier();
    					++iMembers;
    				}
    			}
    		}
    
    		int iTotalPower = GC.getGameINLINE().countTotalCivPower();
    		int iAveragePower = iTotalPower / std::max(1, GC.getGameINLINE().countCivTeamsAlive());
    		int iMasterPower = GET_TEAM(eTeam).getPower(false);
    		int iVassalPower = (getPower(true) * (iPowerMultiplier + iPersonalityModifier / std::max(1, iMembers))) / 100;
    
    		if (isAtWar(eTeam))
    		{
    			int iTheirSuccess = std::max(10, GET_TEAM(eTeam).AI_getWarSuccess(getID()));
    			int iOurSuccess = std::max(10, AI_getWarSuccess(eTeam));
    			int iOthersBestSuccess = 0;
    			for (int iTeam = 0; iTeam < MAX_CIV_TEAMS; ++iTeam)
    			{
    				if (iTeam != eTeam && iTeam != getID())
    				{
    					CvTeam& kLoopTeam = GET_TEAM((TeamTypes)iTeam);
    
    					if (kLoopTeam.isAlive() && kLoopTeam.isAtWar(getID()))
    					{
    						int iSuccess = kLoopTeam.AI_getWarSuccess(getID());
    						if (iSuccess > iOthersBestSuccess)
    						{
    							iOthersBestSuccess = iSuccess;
    						}
    					}
    				}
    			}
    
    			// Discourage capitulation to a team that has not done the most damage
    			if (iTheirSuccess < iOthersBestSuccess)
    			{
    				iOurSuccess += iOthersBestSuccess - iTheirSuccess;
    			}
    
    			iMasterPower = (2 * iMasterPower * iTheirSuccess) / (iTheirSuccess + iOurSuccess);
    
    			if (AI_getWorstEnemy() == eTeam)
    			{
    				iMasterPower *= 3;
    				iMasterPower /= 4;
    			}
    		}
    		else
    		{
    			if (!GET_TEAM(eTeam).AI_isLandTarget(getID()))
    			{
    				iMasterPower /= 2;
    			}
    		}
    
    
    		for (int iLoopTeam = 0; iLoopTeam < MAX_CIV_TEAMS; iLoopTeam++)
    		{
    			if (iLoopTeam != getID())
    			{
    				CvTeamAI& kLoopTeam = GET_TEAM((TeamTypes)iLoopTeam);
    
    				if (kLoopTeam.isAlive())
    				{
    					if (kLoopTeam.AI_isLandTarget(getID()))
    					{
    						if (iLoopTeam != eTeam)
    						{
    							if (kLoopTeam.getPower(true) > getPower(true))
    							{
    								if (kLoopTeam.isAtWar(eTeam) && !kLoopTeam.isAtWar(getID()))
    								{
    									return DENIAL_POWER_YOUR_ENEMIES;
    								}
    
    								iAveragePower = (2 * iAveragePower * kLoopTeam.getPower(true)) / std::max(1, kLoopTeam.getPower(true) + getPower(true));
    
    								iAttitudeModifier += (3 * kLoopTeam.getPower(true)) / std::max(1, getPower(true)) - 2;
    							}
    
    							if (!kLoopTeam.isAtWar(eTeam) && kLoopTeam.isAtWar(getID()))
    							{
    								iAveragePower = (iAveragePower * (getPower(true) + GET_TEAM(eTeam).getPower(false))) / std::max(1, getPower(true));
    							}
    						}
    					}
    
    					if (!atWar(getID(), eTeam))
    					{
    						if (kLoopTeam.isAtWar(eTeam) && !kLoopTeam.isAtWar(getID()))
    						{
    							DenialTypes eDenial = AI_declareWarTrade((TeamTypes)iLoopTeam, eTeam, false);
    							if (eDenial != NO_DENIAL)
    							{
    								return eDenial;
    							}
    						}
    					}
    				}
    			}
    		}
    
    		if (!isVassal(eTeam) && canVassalRevolt(eTeam))
    		{
    			return DENIAL_POWER_US;
    		}
    
    		if (iVassalPower > iAveragePower || 3 * iVassalPower > 2 * iMasterPower)
    		{
    			return DENIAL_POWER_US;
    		}
    
    		for (int i = 0; i < GC.getNumVictoryInfos(); i++)
    		{
    			bool bPopulationThreat = true;
    			if (GC.getGameINLINE().getAdjustedPopulationPercent((VictoryTypes)i) > 0)
    			{
    				bPopulationThreat = false;
    
    				int iThreshold = GC.getGameINLINE().getTotalPopulation() * GC.getGameINLINE().getAdjustedPopulationPercent((VictoryTypes)i);
    				if (400 * getTotalPopulation(!isAVassal()) > 3 * iThreshold)
    				{
    					return DENIAL_VICTORY;
    				}
    
    				if (!atWar(getID(), eTeam))
    				{
    					if (400 * (getTotalPopulation(isAVassal()) + GET_TEAM(eTeam).getTotalPopulation()) > 3 * iThreshold)
    					{
    						bPopulationThreat = true;
    					}
    				}
    			}
    
    			bool bLandThreat = true;
    			if (GC.getGameINLINE().getAdjustedLandPercent((VictoryTypes)i) > 0)
    			{
    				bLandThreat = false;
    
    				int iThreshold = GC.getMapINLINE().getLandPlots() * GC.getGameINLINE().getAdjustedLandPercent((VictoryTypes)i);
    				if (400 * getTotalLand(!isAVassal()) > 3 * iThreshold)
    				{
    					return DENIAL_VICTORY;
    				}
    
    				if (!atWar(getID(), eTeam))
    				{
    					if (400 * (getTotalLand(isAVassal()) + GET_TEAM(eTeam).getTotalLand()) > 3 * iThreshold)
    					{
    						bLandThreat = true;
    					}
    				}
    			}
    
    			if (GC.getGameINLINE().getAdjustedPopulationPercent((VictoryTypes)i) > 0 || GC.getGameINLINE().getAdjustedLandPercent((VictoryTypes)i) > 0)
    			{
    				if (bLandThreat && bPopulationThreat)
    				{
    					return DENIAL_POWER_YOU;
    				}
    			}
    		}
    	}
    
    	if (!isAtWar(eTeam))
    	{
    		if (!GET_TEAM(eTeam).isParent(getID()))
    		{
    			if (AI_getWorstEnemy() == eTeam)
    			{
    				return DENIAL_WORST_ENEMY;
    			}
    
    			if (!AI_hasCitiesInPrimaryArea(eTeam) && AI_calculateAdjacentLandPlots(eTeam) == 0)
    			{
    				return DENIAL_TOO_FAR;
    			}
    		}
    
    		AttitudeTypes eAttitude = AI_getAttitude(eTeam, false);
    
    		AttitudeTypes eModifiedAttitude = CvPlayerAI::AI_getAttitudeFromValue(AI_getAttitudeVal(eTeam, false) + iAttitudeModifier);
    
    		for (int iI = 0; iI < MAX_PLAYERS; iI++)
    		{
    			if (GET_PLAYER((PlayerTypes)iI).isAlive())
    			{
    				if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
    				{
    					if (eAttitude <= ATTITUDE_FURIOUS)
    					{
    						return DENIAL_ATTITUDE;
    					}
    
    					if (eModifiedAttitude <= GC.getLeaderHeadInfo(GET_PLAYER((PlayerTypes)iI).getPersonalityType()).getVassalRefuseAttitudeThreshold())
    					{
    						return DENIAL_ATTITUDE;
    					}
    				}
    			}
    		}
    	}
    	else
    	{
    		if (AI_getWarSuccess(eTeam) + 4 * GC.getDefineINT("WAR_SUCCESS_CITY_CAPTURING") > GET_TEAM(eTeam).AI_getWarSuccess(getID()))
    		{
    			return DENIAL_JOKING;
    		}
    	}
    	
    	return NO_DENIAL;
    }
    Ok, it is already 11.30 PM around here , so I'll not make a extensive reading of the code, but some stuff jumped out to my sight as I (re)read the code ( all of this is IIUC , so beware :D ):

    - They will not propose or acept a peaceful vassaling if they would be forced to a war with someone they have a enforced peace deal with. Duh, but with so much things taking precedence before peace deals (say, AP stuff ), this is actually good to know.

    - As far as I understand, the average rule still applies in peacevassal ... in other words, if the AI has more than the average power of the alive civs ( vassals included ), they will not acept or propose peacevassaling

    - They will also not acept or propose peacevassaling if they have more than 2/3 of the possible master power. This power gauge includes the usual modifications due to the existance of other vassals of the possible master...

    - The power gauge is cut in half if the possible master has no presence in the landmass where the possible vassal has his cap ( well, it is a little more esoterical than that ... the infamous isLandTarget is called for this :p )

    - They will not peacevassal if the master is warring someone more powerful than them ( the dreaded DENIAL_POWER_YOUR_ENEMIES :mad: )

    - There are 2 DENIAL_VICTORY below this that I do not undertand very well, but they seem to me similar to the other DENIAL_VICTORY around ( aka "We want to win the game, thank you" red text ), so it makes sense : a AI that considers it self in the path to a win ( in spite of this being highly schematic in BtS ) will not consider itself to become a vassal peacefully :D

    - They will also not acept peacevassaling if the possible master has either the pop or the land area for a dom win ( atleast I think you can't get there without hitting the other conditions in that loop ... can someone check ? )

    - The possible master will not acept their worst enemy as a peacevassal

    - They will also not acept a peacevassal that is not located in the master cap landmass and that has no border with him or with other vassal of the master

    - No peacevassaling if the master is furious with the possible peacevassal

    - Also no peace vassaling if the master has less than the VassalRefuseAttitudeThreshold ( check CivIVLeaderHeadInfos.XML for the leader in question ) to the possible vassal (atleast I think it is the master one it is called ... getting sleepy :/ )

    I just want to point 2 things:

    - There is no evaluation of the vassal value to the master ;) In other terms, and unlike it is widely said in here ( including by me :( ), this is not a deal where the peacevassal sells it self. It is simply a bunch of power , geographical and diplochecks ( like in capitulation ). If the proposed peacevassal passes all those checks, the deal is done.

    - There is no direct "fear factor". The AI will not peacevassal just because they are in war and need protection ... it is the consequences of the war that might push the AI to a peacevassal deal with a third party ( most likely the reduced power :devil: )

    P.S Please , can someone check the conclusions I made here? I'm sleepy and I would not be surprised if I understood something in the wrong way, especially the diplochecks.

    EDIT:

    I prefer the term "Evil Sand Fairy" :D
     
  12. obsolete

    obsolete Chieftain

    Joined:
    Dec 17, 2005
    Messages:
    6,201
    Location:
    Planet Earth
    I always considered this a mistake, since Firaxis rushed this gimmick without clearly thinking it out.

    In any case, the comment about a civ not vassaling if they are going to give you too much pop or land for domination doesn't quite seem right. Unless you mean, an AI vassals to you FRIENDLY, and you are NOT at war with him.

    Almost all my conquest victories are from having the last AI in the game vassal to me. It does however, seem that they DO put up a more determined fight than the second-last guy to vassal, so maybe it does try to stall it a bit longer knowing you will automatically win? Who knows what goes on when Firaxis is involved.
     
  13. r_rolo1

    r_rolo1 King of myself

    Joined:
    May 19, 2006
    Messages:
    13,818
    Location:
    Lisbon, Portugal
    Note, all of the above is about peacevassaling . The function is the same than for capitulations, but I only highlighted the parts that are relevant for the topic question.

    That part, specifically, IIRC, is only called when the two parts are in peace with eachother ;)
    Consequence of the hardcoded lower thresholds, mainly the 2/3 power limit ... or maybe the war success count ?

    There is no special code for the last civ standing in this function as far as I understand this ;)
     
  14. LeftAdjoint

    LeftAdjoint Chieftain

    Joined:
    May 22, 2011
    Messages:
    273
    Location:
    Berkeley
    Thanks a lot r_rolo1! Seems like your post is now the go-to post on peace vassals. :D

    So it seems like the final answer to my question is this: You can directly prevent Civ A from peace-vassaling to Civ B either with an enforced peace deal, or being at war with Civ B&#8212;but the latter only works if you are more powerful than Civ B.
     
  15. r_rolo1

    r_rolo1 King of myself

    Joined:
    May 19, 2006
    Messages:
    13,818
    Location:
    Lisbon, Portugal
    I guess that the most reliable way to prevent peacevassaling is to mess the diplomacy. Most of the VassalRefuseAttitudeThreshold are pretty high ( pleased or above ), so it if have time you can isolate the AI in question preemtively.

    Other thing to have in mind is that the AI are very reluctant to peacevassal to someone that is not on their landmass. If you notice the code it makes quite hard to get peacevassals in there unless you already have cities and/or vassals in that landmass. Peaceassals should be close to impossible in Archipelago ;)
     
  16. kossin

    kossin Chieftain

    Joined:
    Dec 4, 2008
    Messages:
    9,572
    Location:
    Canada
    From what I remember in SGOTM11, the requirement was 3 cities on the same landmass. It pushed Saladin to accept peace-vassaling right away even though the 3rd city was nowhere close to his borders.
     
  17. CaF

    CaF Chieftain

    Joined:
    Jan 9, 2011
    Messages:
    239
    Location:
    Germany
    So is there 2 different values needed? Some AIs are not willing to vassal unless they are pleased or better, I know that from the XML file of DanF. But I think I never saw the other value in that file?!

    So basically when Mansa Musa vassals to his neighbour, which he always does, there are some demographic checks and diplo checks à la "i have 4 cities and I suck, he took all my land and has 9 cities, let's vassal" and thats it?
    I mean, messing the diplo is a nice idea but how can you do that against missionary spammers? In many cases one common thing is enough and there goes the peacevassal. Sharing a religion or a civic is already enough to get many to pleased with each other. I have seen peacevassals of Mansa to heathens who declared on him, it's just ridiculous.
    Can I find those refusal values anywhere?
     
  18. obsolete

    obsolete Chieftain

    Joined:
    Dec 17, 2005
    Messages:
    6,201
    Location:
    Planet Earth
    I think size of map should also differ.

    Anyhow, it looks like there must have been changes in the last patch, because I remember from before even when I made a 10-turn peace deal, these were often broken by a vassaling and I'd be at war with the civ I had forced peace with.

    But when I posted this as a bug in the bug forum, I was told something about it was designed that way (I guess so you can't purposely stop vassaling by peace deals).
     
  19. obsolete

    obsolete Chieftain

    Joined:
    Dec 17, 2005
    Messages:
    6,201
    Location:
    Planet Earth
    Well this makes me think. I've had games where I was hugely in favour of power. But after gifting 100 cavalry to one of my vassals to take over the maintenance, Monte would immediately plan to war on me. Do I always get bad luck here, or does the AI only look at your OWN power rating, and not your vassals when plotting? (Not that monte was really a thread of course...)

    The best broken war mechanic I think in the game, is how an AI can not be bribed to attack Mr. X because Mr. X is TOO POWERFULL, but if you somehow make a peace-deal or defense pact with Mr. X, stupid AI has no problems deciding to insta DoW on you, despite he'll be forced to attack Mr. X.

    Back in civ III non of this nonsense happened, the AI used to check every turn to avoid these exploits, but after how many years and versions Firaxis can't even check such simple things. In fact the AI is worse than in previous versions.
     
  20. r_rolo1

    r_rolo1 King of myself

    Joined:
    May 19, 2006
    Messages:
    13,818
    Location:
    Lisbon, Portugal
    I wonder ... I don't see any direct 3 city call in the code above. can you point me the SGOTM discussion ?
    Yes, basically the peacevassaling is pretty much "I'm weak, so let me find someone not too much pissed with me to protect my behind".

    The value you are refering is in the LH XML, the CivIVLeaderHeadInfos.XML file. Dunno if DanF putted it in his xml, though ...
    I'm reading the code for 3.19 . I admit I might be not understanding well the code, but my interpretation of it is that the AI will not peacevassal if it breaks a enforced peace deal...

    And the good ol'working as intended ... like I said so many times in the BBAI mod forum back in the days, working as intended is not the same as working well :/
    I wonder if Monty was not already able to start planning war on you and didn't had done it before by fluke ( remember that monty will not be detered by anything short than the double of his power ). Anyway, the issue is most likely because the vassal power is not simply added ( don't ask for details now because i don't remember that part of the code from heart ), so transfering power from you to your vassal dragged your perceived power down enough for moty to give sign ...

    DP parters power is also considered in those calcs, but again is not a simple sum.

    And please.... please, don't get me started on civ III AI :p
     

Share This Page