Slave Economy - A Pitiful Method to Abuse Your Neighbours

Indeed, huts+marathon+FW+No barbs is an enormous beast. Given the lack of scaling, by T10 (nothing on marathon), human units can start to pop warriors (impossible before). On quick speed, by T10, the warrior is almost insufficient and the RNG will not necessarily gives us that warrior. Not taking account the travel time.

But that article is set along the not huts and no events thing plus more geared towards Monarch and more. Indeed, on Prince and lower, getting both is far superior than just take the worker and make peace.
Nice article. I was impressed that you actually made some observations about settler level. :)
 
Perhaps, I'll change the term from exploit to "blatant flaw". Exploit is also a suggestive term that varies depending the morality of the player. Dhoomstriker is a player who refuses to steal settler while I have no qualm to do it. Duckweed has no qualm to put some trap cities while Rusten feels it is completely wrong and refuses to do it.

Not really, not sure why this got stuck to my name. At the very least I am not as adamant as you suggest. :) I don't like to rely on cheesy play, but if an opportunity arises I will take it.

The only thing I don't accept is exploits (IMO) such as flying camera displaying hidden terrain. Stealing workers/settlers and similar is not against the developers intent.
Cheese != exploit
 
Not really, not sure why this got stuck to my name. At the very least I am not as adamant as you suggest. :) I don't like to rely on cheesy play, but if an opportunity arises I will take it.

The only thing I don't accept is exploits (IMO) such as flying camera displaying hidden terrain. Stealing workers/settlers and similar is not against the developers intent.
Cheese != exploit

I labeled you that way due to an old post about trap around 2009 I guess. You were the sole players I ever heard from about trap cities and you stated your opinions. Yours seemed radical, but I probably misinterpreted. Settler capture is probably an exploit in the sense I envision it because it is a weird behaviour that came along BTS where the settler is separating from its escort in an attempt to flee and we exploit that flaw to stunt one AI expansion. And that is against the devs' intent, but they coded so badly they just created a new bug that did not existed in previous versions. Capturing a settler via killing their escorts is not a flaw at all.

Anyways, the moral code of fair play has a large spectrum that depends of the player.

========================================================


Interesting, without knowing it, there effectively was an older version of slave economy article. Shame on me not even knowing it. But it was outdated though.
 
Have you ever seen an AI delete workers to keep you from getting them? I recall that happening to me sometimes when I capture an area and the expected workers are all gone. :sad:


Most times I be sure to herd workers into a city before capturing it. Just have to get next to them to get them to flee to "safety" before taking the city and capturing them too.


Also, don't forget amphibious attacks! I recall getting workers by attacking off of galleys if they are near the coastline. Just like Woodsman II units, they don't see any threat coming from the sea.
 
Have you ever seen an AI delete workers to keep you from getting them? I recall that happening to me sometimes when I capture an area and the expected workers are all gone. :sad:


Most times I be sure to herd workers into a city before capturing it. Just have to get next to them to get them to flee to "safety" before taking the city and capturing them too.


Also, don't forget amphibious attacks! I recall getting workers by attacking off of galleys if they are near the coastline. Just like Woodsman II units, they don't see any threat coming from the sea.

He he. Yes I have seen them a long time ago during my marathon phase...before I was an lurker back 2009. Mainly barb worker showed me that. I was playing with many workers, missionaries and some militia and I was forming a complete and close area. The worker is suiciding then. The trick is just to let a single passage to freedom, whatever how crazy the path that forces the worker to stumble by a military unit.

Yes, I learnt the trick in SGOTM just like you I supposed. Hey, true! I haven't mentioned it in the tricks during a all war phase. Will do it then. Indeed, the AI cannot interpret the concept of a loaded galley.
 
Have you ever seen an AI delete workers to keep you from getting them? I recall that happening to me sometimes when I capture an area and the expected workers are all gone. :sad:


Most times I be sure to herd workers into a city before capturing it. Just have to get next to them to get them to flee to "safety" before taking the city and capturing them too.


Also, don't forget amphibious attacks! I recall getting workers by attacking off of galleys if they are near the coastline. Just like Woodsman II units, they don't see any threat coming from the sea.

I've seen that! Makes me go wtf cheaty AI every time. Have you seen the AI suicide their workers to the barbarians instead of letting you take them before? It gave me a pretty good laugh the first time I saw it. I had to cheat, and look in the WB to see what the AI did with its worker. Only to my surprise to find out that there was a barb spearman on top of where his worker should be. XD

Good call on the amphibious worker capitulation! I would have never thought of that.
 
Spoiler :
Spoiler :

Under Sun Tzu Wu & Lymond's clairvoyance, I found justified to add another section in "Select your target".
A GREAT THANKS FOR GodEmperor for his precious help in deciphering the code or pointing out the important parts.

Indeed, given the prevalence amongst skilled players of early rush factor and abuses in AI unintelligence to respond to crippling actions from human players, they implemented lines of codes so the workers meet chance to be escorted.

Actually, what some players encounter occasionally is a worker protected by a puppy archer following the initial worker. Why it happens; that is the goal of this annexed post?

First, important information: if you meet an escorted worker, forget that target for slave economy for a moment as that protecting archer will stop doing after a while (often once the settler is out) and the waiting will just impede the start of a good slave economy. You just uncheck slave as a possibility for the present game too. It is not a must. Or find another victim.

Now, the explanation part.
First, archers and warriors (settler to prince) are main units that share your early BC times. They can have multiple personalities attributed to them as unit script. All in CvUnitAI.cpp in CvCoreGameDLL folder. Usually, given worker stealing is best on Monarch and more (because on lower levels, one prefers take both city and worker), archers are main actor. Initial archers received as bonus have UNITAI_CITY_DEFENSE where their main task is to protect their mother city at all cost. So much they sometimes refuse to quit it even for a juicy human worker next to the city (because there was an exploit about it in Vanilla). But, next archer in line is almost 100% an archer with UNITAI_ATTACK script and this one behaves differently. They join stack, defend cities, stacks for barb cities, defend units, scout as backup and are versatile!
In the script:

Spoiler :
Code:
void CvUnitAI::AI_attackMove()
{
	PROFILE_FUNC();
	bool bDanger = (GET_PLAYER(getOwnerINLINE()).AI_getPlotDanger(plot(), 3) > 0);
	{
		PROFILE("CvUnitAI::AI_attackMove() 1");

		if (AI_guardCity(true))
		{
			return;
		}

		if (AI_heal(30, 1))
		{
			return;
		}
		
		if (!bDanger)
		{
			if (AI_group(UNITAI_SETTLE, 1, -1, -1, false, false, false, 3, true))
			{
				return;
			}

			if (AI_group(UNITAI_SETTLE, 2, -1, -1, false, false, false, 3, true))
			{
				return;
			}
		}

		if (AI_guardCityAirlift())
		{
			return;
		}

		if (AI_guardCity(false, true, 1))
		{
			return;
		}

		//join any city attacks in progress
		if (plot()->getOwnerINLINE() != getOwnerINLINE())
		{
			if (AI_groupMergeRange(UNITAI_ATTACK_CITY, 1, true, true))
			{
				return;
			}
		}
		
		AreaAITypes eAreaAIType = area()->getAreaAIType(getTeam());
        if (plot()->isCity())
        {
            if (plot()->getOwnerINLINE() == getOwnerINLINE())
            {
                if ((eAreaAIType == AREAAI_ASSAULT) || (eAreaAIType == AREAAI_ASSAULT_ASSIST))
                {
                    if (AI_offensiveAirlift())
                    {
                        return;
                    }
                }
            }
        }
		
		if (bDanger)
		{
			if (AI_cityAttack(1, 55))
			{
				return;
			}

			if (AI_anyAttack(1, 65))
			{
				return;
			}

			if (collateralDamage() > 0)
			{
				if (AI_anyAttack(1, 45, 3))
				{
					return;
				}
			}
		}

		if (!noDefensiveBonus())
		{
			if (AI_guardCity(false, false))
			{
				return;
			}
		}
		
		if (!bDanger)
		{
			if (plot()->getOwnerINLINE() == getOwnerINLINE())
			{
				if (AI_load(UNITAI_SETTLER_SEA, MISSIONAI_LOAD_SETTLER, UNITAI_SETTLE, 3, -1, -1, -1, MOVE_SAFE_TERRITORY, 3))
				{
					return;
				}

				if (AI_load(UNITAI_ASSAULT_SEA, MISSIONAI_LOAD_ASSAULT, NO_UNITAI, -1, 2, -1, -1, MOVE_SAFE_TERRITORY, 4))
				{
					return;
				}

				if (GET_PLAYER(getOwnerINLINE()).AI_unitTargetMissionAIs(this, MISSIONAI_GROUP) > 0)
				{
					getGroup()->pushMission(MISSION_SKIP);
					return;
				}
			}
		}
		
		if (bDanger)
		{
			if (AI_pillageRange(1, 20))
			{
				return;
			}

			if (AI_cityAttack(1, 35))
			{
				return;
			}

			if (AI_anyAttack(1, 45))
			{
				return;
			}

			if (AI_pillageRange(3, 20))
			{
				return;
			}
			
			if (AI_choke(1))
			{
				return;
			}
		}

		if (AI_goody(3))
		{
			return;
		}

		if (AI_anyAttack(1, 70))
		{
			return;
		}
	}

	{
		PROFILE("CvUnitAI::AI_attackMove() 2");

		if (bDanger)
		{
			if (AI_cityAttack(4, 30))
			{
				return;
			}

			if (AI_anyAttack(2, 40))
			{
				return;
			}
		}

		if (!isEnemy(plot()->getTeam()))
		{
			if (AI_heal())
			{
				return;
			}
		}

		if ((GET_PLAYER(getOwnerINLINE()).AI_getNumAIUnits(UNITAI_CITY_DEFENSE) > 0) || (GET_TEAM(getTeam()).getAtWarCount(true) > 0))
		{
				if (AI_group(UNITAI_ATTACK_CITY, /*iMaxGroup*/ 1, /*iMaxOwnUnitAI*/ 1, -1, true, true, true, /*iMaxPath*/ 5))
				{
					return;
				}

			if (AI_group(UNITAI_ATTACK, /*iMaxGroup*/ 1, /*iMaxOwnUnitAI*/ 1, -1, true, true, false, /*iMaxPath*/ 4))
			{
				return;
			}
			
			if ((getMoves() > 1) && GET_PLAYER(getOwnerINLINE()).AI_isDoStrategy(AI_STRATEGY_FASTMOVERS))
			{
				if (AI_group(UNITAI_ATTACK, /*iMaxGroup*/ 4, /*iMaxOwnUnitAI*/ 1, -1, true, false, false, /*iMaxPath*/ 3))
				{
					return;
				}
			}
		}

		if (area()->getAreaAIType(getTeam()) != AREAAI_OFFENSIVE)
		{
			if (area()->getCitiesPerPlayer(BARBARIAN_PLAYER) > 0)
			{
				if (AI_targetBarbCity())
				{
					return;
				}
			}
		}
		else
		{
			if (getGroup()->getNumUnits() > 1)
			{
				if (AI_targetCity())
				{
					return;
				}
			}
		}

		if (AI_guardCity(false, true, 3))
		{
			return;
		}

		if ((GET_PLAYER(getOwnerINLINE()).getNumCities() > 1) && (getGroup()->getNumUnits() == 1))
		{
			if (area()->getAreaAIType(getTeam()) != AREAAI_DEFENSIVE)
			{
				if (area()->getNumUnrevealedTiles(getTeam()) > 0)
				{
					if (GET_PLAYER(getOwnerINLINE()).AI_areaMissionAIs(area(), MISSIONAI_EXPLORE, getGroup()) < (GET_PLAYER(getOwnerINLINE()).AI_neededExplorers(area()) + 1))
					{
						if (AI_exploreRange(3))
						{
							return;
						}

						if (AI_explore())
						{
							return;
						}
					}
				}
			}
		}

		if (AI_protect(35))
		{
			return;
		}

		if (AI_offensiveAirlift())
		{
			return;
		}

		if (AI_defend())
		{
			return;
		}

		if (AI_travelToUpgradeCity())
		{
			return;
		}

		if (AI_patrol())
		{
			return;
		}

		if (AI_retreatToCity())
		{
			return;
		}

		if (AI_safety())
		{
			return;
		}
	}

	getGroup()->pushMission(MISSION_SKIP);
	return;
}



They have an order of priority in their missions, but I won't go in detail on all missions.
The lower you scroll in the code, that means the least important the mission is in priority. And that line :

Code:
if (AI_defend())
		{
			return;
		}

is the one about protecting units. Pretty low in the list. So here is the first factor of its rare occurrence.

Second factor is archers tending in such promiscuity with workers are usually archers built before worker first. It happens sometimes and only depends on RNG. Total irrelevance to leaders. So (low odd occurrence)x(low occurrence) = pretty low occurrence.

Third factor comes from detail study of what is "AI_defend()" subscript.

Spoiler :
Code:
// Returns true if a mission was pushed...
bool CvUnitAI::AI_defend()
{
	PROFILE_FUNC();

	CvPlot* pLoopPlot;
	CvPlot* pBestPlot;
	int iSearchRange;
	int iPathTurns;
	int iValue;
	int iBestValue;
	int iDX, iDY;

	if (AI_defendPlot(plot()))
	{
		getGroup()->pushMission(MISSION_SKIP);
		return true;
	}

	iSearchRange = AI_searchRange(1);

	iBestValue = 0;
	pBestPlot = NULL;

	for (iDX = -(iSearchRange); iDX <= iSearchRange; iDX++)
	{
		for (iDY = -(iSearchRange); iDY <= iSearchRange; iDY++)
		{
			pLoopPlot	= plotXY(getX_INLINE(), getY_INLINE(), iDX, iDY);

			if (pLoopPlot != NULL)
			{
				if (AI_plotValid(pLoopPlot))
				{
					if (AI_defendPlot(pLoopPlot))
					{
						if (!(pLoopPlot->isVisibleEnemyUnit(this)))
						{
							if (!atPlot(pLoopPlot) && generatePath(pLoopPlot, 0, true, &iPathTurns))
							{
								if (iPathTurns <= 1)
								{
									iValue = (1 + GC.getGameINLINE().getSorenRandNum(10000, "AI Defend"));

									if (iValue > iBestValue)
									{
										iBestValue = iValue;
										pBestPlot = pLoopPlot;
									}
								}
							}
						}
					}
				}
			}
		}
	}

	if (pBestPlot != NULL)
	{
		FAssert(!atPlot(pBestPlot));
		getGroup()->pushMission(MISSION_MOVE_TO, pBestPlot->getX_INLINE(), pBestPlot->getY_INLINE());
		return true;
	}

	return false;
}

Without extreme details, it is basically conditions that push the archer to protect a worker. Experimentally, I felt UNITAI_ATTACK archers were roaming without aim, but it is because they started protecting workers adjacent to them if RNG leads it to the worker. So here is the third factor that makes worker escort a pretty rare occurence.
And once the worker fled his last improvement and make full use of roads, then the small squad worker+archer is broken and the archer is free again. Until RNG bring it again to the worker.
Anyways, here are the basic rules:

The archer will go on defend mode for another non-offensive unit if

  • If the worker is within his radar mode (mode that permits the units to see beyond their real sight), that is a 4 tiles distance.
  • If the archer can make the distance within a turn.

So what to induce. First that radar thing is a cheat given to AI to enhance their capacity to react to many situations. Without it, the game would be more terrible than CiV. Then, an archer in ancient times cannot go more than tiles with road. So what's the deal with the capacity of feeling units beyond? Well, on road with Enginnering tech, archers (or stronger 1 :move: units by the right timeframe) wil move 3 tiles and with railroad as far as 4 tiles.

Coming back in the BC's, if the archer cannot reach the worker withing 1 tiles or 2 tiles with a road, then they will take another mission or roam (some kind of patrol).

Finally, what to remember:

  1. Archer escorts are a very rate occurrence.
  2. They will protect the worker until a better task is given like a settler escort.
  3. Will protect a worker if one tile away in the BC timeframe.
  4. A very versatile unit.

As a bonus, here is a small window to the early journey of a UNITAI_ATTACK archer.

Now, I spy with little eye...

Emperor level. Gilgamesh.
Feeling the ominous air, the great God decided to ordain more archers for a voyage.
He has to find Enkidu, but he prefers to stay on his couch and entertain with some women doing some belly dances. And good and boring music of ol'times.
Those archers have a different mission than all the others who are vowed to protect the nation.
First, those archers (the archer unit in fact) are roaming as a patrol. They find some workers busy on grain lanes. As time grows, those workers are busy elsewere and are dispatched too fast for the archers to keep. No problemo, a new colony is about to form and they follow as escorts. Time grows and another squad of archers are trained in the new cities and our fellows are once again free.

Gilgamesh convokes them immediately. He is angry by his scouts. They died miserably and not even finding Enkidu. He ordained them to pursue as some sort of scout. They received and go for a long stroll.

Time grows and they find a small nation of barbaric specimens. They approached and find another civilization more advanced attempted to conquer with men with axes. They failed. Our cordial archers are feeling chance is about to come. They attack.

They died.

End of Story.
 
Excellent new additional to your worker enslaving article with mind boggling code diving to support it! Excellent work!

This is "the" strategy article on worker enslaving that the best players will be refering to for many years to come.

Sun Tzu Wu
 
Her Royal Tachy of Waxon said:
That's unfair. Brennus.Quigley got as much views as my article
:lol:
That thread may have more views and comments, but very little of it is constructive or worthwhile. As Wu mentioned, this article will be valuable for all for a long time. You should be proud. No boo-hooing ;)
 
I know, but people are actually reading his stuff and what he has to say. Not sure about my article. I think few does it actually. I wouldn't be suprised someone comes read 1-2 paragraphs, looks at the complexity and then comment: Nice one. Yeah, nice one~~~~

Some of you added constructive stuff, but most like were "Yahoo,that is great!". Now that I think about it...being way too descriptive and detailed, no one can counterattack. Hmmmm
BTW, Huge(quick) way easier than huge/marathon.


EDIT: I'm surprised no one started a flame war about how exploitive it can be or such thing.
 
Oh, if I am so blessed by royal rights. Then, my lowly subject, put your hand in mouth. And spell my pseudonym correctly or I'll free the lions onto you!
 
I don't find it all that exploitative. And it can certainly back fire on you.

I've not much to add really as I'm still in the process of mastering it. I've had some really good games though with the approach and I'm trying it out mainly on HOF games. You've been pretty thorough.

However,

Spoiler :
It is a rather complex article. As friendly constructive advice, and I point out that your English is quite exceptional for not being your first language, there are some idiosyncrasies with your grammar and word usage occasionally. I think your article could use some editing by another party. Additionally, I think you should keep all the detail and complexity that you've worked on throughout the top of the thread, but then pull it into more of shorter itemized summary. A sort of quick read for stupid people like me.
 
I started winning games on Immortal when I gave up my usual relaxed empire-builder attitude and accepted the fact that sometimes an early rush is the way to win. Nevertheless I haven't specifically tried milking an AI for workers until recently, so I'm still very much in the process of learning it. Your article contains lots of great ideas for people like me... sorry if I couldn't come up with more constructive comments.

Just out of curiosity: how often do you steal workers from Ragnar?
 
You can most likely always steal from close neighbors on immortal, at least @AZ always does when he's not on Deity ;) Just based on them having only 1 city, and not doing much useful while choked.
 
I started winning games on Immortal when I gave up my usual relaxed empire-builder attitude and accepted the fact that sometimes an early rush is the way to win. Nevertheless I haven't specifically tried milking an AI for workers until recently, so I'm still very much in the process of learning it. Your article contains lots of great ideas for people like me... sorry if I couldn't come up with more constructive comments.

Just out of curiosity: how often do you steal workers from Ragnar?

That's okay. I thought about it once again and given the extreme detailed report about the slave strat. , I'm expecting too much. I think my article is more factual than advocating an unorthodox strategy (or tactic when done occasionnally and not relying on it). Worker stealing was proven to be a strong path for years with several cases where it dwarves your benefit, but that was already mentioned here. Duckweed comment also means that (in my twisted mind): "Really detailed, but nothing new here. I'm hungry for some real strategic pabulum!"

And what I realized about slave economy; it is some sort of positive handicap to the player. As you experienced it, IMM is harder to wade through without all the gains from workers. One has to manipulate its economy better and that is one aspect of highly trained player for high levels. By now, I'm asking myself if I am simply a EMP player after all. The gains from workers are simply astounding occasionally.

Now, do I steal from Ragnar. Sure. In fact, I think almost no leader frightens me anymore IMM and below. Perhaps occasionally some really bad IMM games (start with scout and really bad neighbour and bad lands) forces me to remain peaceful. The trick about dangerous AI's lies in abuse of ceasefire. They have not enough time to retaliate. As an IMM ragnar, IIRC, soundjata posted a certain immortal HoF game (that was really unpopular for some reason) and I did make an agression on Ragnar. The thing is I think I had copper by that time. So it doesn't count.

Nappy is another highly dangerous AI.


You can most likely always steal from close neighbors on immortal, at least @AZ always does when he's not on Deity ;) Just based on them having only 1 city, and not doing much useful while choked.

Immortal is the best level for slave economy. I perform best on that level. Getting a worker on T5-6 occasionally is a terrible boost. And ceasefires are still easy to get...as long one makes enough warriors to scare the AI.

The big problem on deity are resumed:

  • Starting with two cities mean more chance to get a strategic resource.
  • Two cities mean more unit spamming.
  • More unit spamming mean impossibility to catch up in power, then destroying any chance of ceasefire. Of all the tries, I succeeded 2 times.
  • Two cities are more difficult to keep in check.
  • All in all, two cities are two cities! Eek!

On deity, you simply need something strong to backup in case something goes wrong.
And DoWing sometimes mean an eternal AW with that AI. Once I crippled JoaoII, but his last cities were way too much defended due to the lack of peace periods. It lasted so long I suffered from Charlie next as he peacevassaled Joao II.

On deity, succeeded worker stealing is a gratifying achievement. I succeeded few times and I learnt I won't do that anymore.

But hey, Mylene, you are quite tame against me. I am expecting "agressive you" next time. ;)

I really should put some vids by now. That should entertain "stupid" people like Lymond. :shake: Ah, self-mutilation. Bad thing. Bad thing. Self-reliance. Good.

Spoiler :
STOP CONSIDERING YOURSELF AS STUPID!
 
Worker stealing is addictive...I find myself starting up test game after test game to try and get that first worker as soon as possible. And I still marvel at how the AI won't attack my Warrior on flatland who has just stolen a Worker with its two Archers in the capital.
 
Worker stealing is addictive...I find myself starting up test game after test game to try and get that first worker as soon as possible. And I still marvel at how the AI won't attack my Warrior on flatland who has just stolen a Worker with its two Archers in the capital.

This is because the AI is coded to have to leave 2 units in its cities to defend.
 
Interesting thing I noticed in my (failed) attempts on the current G Minor.



The scout is blocking the shortest path for it to the city, but the worker keeps on building the mine. It ignore my warrior that is on its way and when it's one step away, it's too late :lol:

This could work well with AI that have low attack courage.
 
And I still marvel at how the AI won't attack my Warrior on flatland who has just stolen a Worker with its two Archers in the capital.

This is because the AI is coded to have to leave 2 units in its cities to defend.

Close enough. In fact, it has more to do with a particular and main script for an archer: UNITAI_CITY_DEFENSE, which lowers the retaliation by lowering the odd attacks and AI starting archers are set to that script except on monarch where non-Hunting civs have their initial archer set to UNITAI_EXPLORE.

Those archers that retaliate are mainly set to UNITAI_ATTACK.
By experience, the capital has its two UNITAI_CITY_DEFENSE while often the second city has one UNITAI_CITY DEFENSE and one UNITAI_ATTACK, making worker stealing more dangerous around the second city.

Interesting thing I noticed in my (failed) attempts on the current G Minor.

The scout is blocking the shortest path for it to the city, but the worker keeps on building the mine. It ignore my warrior that is on its way and when it's one step away, it's too late :lol:

This could work well with AI that have low attack courage.

That looks like a case of a trap tactic for worker stealing.
First, scouts don't bother workers at all as they are no aggressive units. A worker next to a enemy worker won't bother him. Indeed, that was a great use of that scout, but that warrior moving 1N, then 1NE would have done the same result and I think you entrapped the worker 1NW of the city, am I right?

If I misunderstood the situation, tell me.
I'm keen to see new paths to worker stealing.
 
What I'm asking myself is: On Emperor and below, I usually will want to rush my neighbour(s) rather sooner than later (Chariots, Axes, Catapults). Are the extra Workers going to be useful enough to offset the fact that my neighbour will settle less extra cities for me (and - if I can't take peace again - will have additional units built so I need a larger army to take fewer cities)?


I'd also be interested in knowing which AIs are more likely to take peace after the first Worker steal. I've noticed some unexpected things, like Monty offering peace three turns after I declared war while Ramses or Cyrus refused to make peace for more than twenty turns (in all cases, no battles whatsoever beyond the first steal took place).
 
Top Bottom