SGOTM 23 - Turbo Ants

@WT: I've been working on the assumption that our goal should be to get the many visible triple-food sites under our control ASAP.

Capturing Alexandria and Thebes first is paying enough lip service to research (and is also convenient because it might be harder later - I wasn't convinced until we saw how weak Alexandria's units were). If we capture them early, we're not really constrained by research any more - I feel like we're in danger of metaphorically double-bulbing Education without having 6 cities for Oxford if we prioritise research over expansion any more than that.

If we can work out some shenanigans with Hamburg or something similar and it doesn't delay our conquest, I might be game for it.
I'd like to war and tech at the same time. I'm hoping T55 is the last turn we have to run a 0% slider. We're still in good position to cash in on Currency.

I definitely like Math asap. It'd save us 1t on Currency with Alexa (6t instead of 7t). Currently Math is 9t or 10t with looking at Hatty's research. Our workers aren't going to be ready to go gung-ho chopping before that, so one question is how many chops get delayed waiting for math? And how many units does that delay and how much?

But rather than delve into that, I think we're agreed on playing 2 turns and seeing if we see Hatty's research. I haven't calculated how much the cost to see it will rise as we put more eps on her.
 
How do we calculate how many eps we need on Hatty to see her research?
Is this it?
Spoiler :
Passive Missions
Base Factor * (100+How much they have against you)

Demographics=0.3
City Visibility=1.2
Investigate=2
See Research=0.75

Destroy improvement
75 * Game speed factor

Destroy building/Project/Production
6 * hammer cost

Steal gold
3* gold to steal [gold available to steal is Total Gold* pop of this city/total pop]

Insert Culture
3* culture to insert (5% of Total culture for the tile)

Poison Water/Unhapiness
120

City Revolt
500

Steal Tech
1.5 * cost of tech

Switch civic/religion
600 * game speed factor

Counter espionage
100* game speed factor


One note, missions that target cities are eligible for bonuses

Spoiler :

nt CvPlayer::getEspionageMissionBaseCost(EspionageMissionTypes eMission, PlayerTypes eTargetPlayer, const CvPlot* pPlot, int iExtraData, const CvUnit* pSpyUnit) const
{
CvEspionageMissionInfo& kMission = GC.getEspionageMissionInfo(eMission);
int iBaseMissionCost = kMission.getCost();

// -1 means this mission is disabled
if (iBaseMissionCost == -1)
{
return -1;
}

CvCity* pCity = NULL;
if (NULL != pPlot)
{
pCity = pPlot->getPlotCity();
}

if (kMission.isSelectPlot())
{
if (NULL == pPlot)
{
return -1;
}

if (!pPlot->isRevealed(getTeam(), false))
{
return -1;
}
}

if (NULL == pCity && kMission.isTargetsCity())
{
return -1;
}

int iMissionCost = -1;

if (kMission.getStealTreasuryTypes() > 0)
{
// Steal Treasury
int iNumTotalGold = (GET_PLAYER(eTargetPlayer).getGold() * kMission.getStealTreasuryTypes()) / 100;

if (NULL != pCity)
{
iNumTotalGold *= pCity->getPopulation();
iNumTotalGold /= std::max(1, GET_PLAYER(eTargetPlayer).getTotalPopulation());
}

if (iNumTotalGold > 0)
{
iMissionCost = (iBaseMissionCost * iNumTotalGold) / 100;
}
}
else if (kMission.getBuyTechCostFactor() > 0)
{
// Buy (Steal) Tech
TechTypes eTech = (TechTypes)iExtraData;
int iProdCost = MAX_INT;

if (NO_TECH == eTech)
{
for (int iTech = 0; iTech < GC.getNumTechInfos(); ++iTech)
{
if (canStealTech(eTargetPlayer, (TechTypes)iTech))
{
int iCost = GET_TEAM(getTeam()).getResearchCost((TechTypes)iTech);
if (iCost < iProdCost)
{
iProdCost = iCost;
eTech = (TechTypes)iTech;
}
}
}
}
else
{
iProdCost = GET_TEAM(getTeam()).getResearchCost(eTech);
}

if (NO_TECH != eTech)
{
if (canStealTech(eTargetPlayer, eTech))
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getBuyTechCostFactor()) * iProdCost) / 100;
}
}
}
else if (kMission.getSwitchCivicCostFactor() > 0)
{
// Switch Civics
CivicTypes eCivic = (CivicTypes)iExtraData;

if (NO_CIVIC == eCivic)
{
for (int iCivic = 0; iCivic < GC.getNumCivicInfos(); ++iCivic)
{
if (canForceCivics(eTargetPlayer, (CivicTypes)iCivic))
{
eCivic = (CivicTypes)iCivic;
break;
}
}
}

if (NO_CIVIC != eCivic)
{
if (canForceCivics(eTargetPlayer, eCivic))
{
iMissionCost = iBaseMissionCost + (kMission.getSwitchCivicCostFactor() * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getAnarchyPercent()) / 10000;
}
}
}
else if (kMission.getSwitchReligionCostFactor() > 0)
{
// Switch Religions
ReligionTypes eReligion = (ReligionTypes)iExtraData;

if (NO_RELIGION == eReligion)
{
for (int iReligion = 0; iReligion < GC.getNumReligionInfos(); ++iReligion)
{
if (canForceReligion(eTargetPlayer, (ReligionTypes)iReligion))
{
eReligion = (ReligionTypes)iReligion;
break;
}
}
}

if (NO_RELIGION != eReligion)
{
if (canForceReligion(eTargetPlayer, eReligion))
{
iMissionCost = iBaseMissionCost + (kMission.getSwitchReligionCostFactor() * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getAnarchyPercent()) / 10000;
}
}
}
else if (kMission.getDestroyUnitCostFactor() > 0)
{
// Destroys Unit
CvUnit* pUnit = GET_PLAYER(eTargetPlayer).getUnit(iExtraData);
int iCost = MAX_INT;

if (NULL == pUnit)
{
if (NULL != pPlot)
{
CLLNode<IDInfo>* pUnitNode = pPlot->headUnitNode();

while (pUnitNode != NULL)
{
CvUnit* pLoopUnit = ::getUnit(pUnitNode->m_data);
pUnitNode = pPlot->nextUnitNode(pUnitNode);

if (canSpyDestroyUnit(eTargetPlayer, *pLoopUnit))
{
int iValue = getProductionNeeded(pLoopUnit->getUnitType());
if (iValue < iCost)
{
iCost = iValue;
pUnit = pLoopUnit;
}
}
}

}
}
else
{
iCost = getProductionNeeded(pUnit->getUnitType());
}

if (NULL != pUnit)
{
if (canSpyDestroyUnit(eTargetPlayer, *pUnit))
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getDestroyUnitCostFactor()) * iCost) / 100;
}
}
}
else if (kMission.getDestroyProjectCostFactor() > 0)
{
ProjectTypes eProject = (ProjectTypes) iExtraData;
int iCost = MAX_INT;

if (NO_PROJECT == eProject)
{
for (int iProject = 0; iProject < GC.getNumProjectInfos(); ++iProject)
{
if (canSpyDestroyProject(eTargetPlayer, (ProjectTypes)iProject))
{
int iValue = getProductionNeeded((ProjectTypes)iProject);

if (iValue < iCost)
{
iCost = iValue;
eProject = (ProjectTypes)iProject;
}
}
}
}
else
{
iCost = getProductionNeeded(eProject);
}

if (NO_PROJECT != eProject)
{
if (canSpyDestroyProject(eTargetPlayer, eProject))
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getDestroyProjectCostFactor()) * iCost) / 100;
}
}
}
else if (kMission.getDestroyProductionCostFactor() > 0)
{
FAssert(NULL != pCity);
if (NULL != pCity)
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getDestroyProductionCostFactor()) * pCity->getProduction()) / 100;
}
}
else if (kMission.getBuyUnitCostFactor() > 0)
{
// Buy Unit
CvUnit* pUnit = GET_PLAYER(eTargetPlayer).getUnit(iExtraData);
int iCost = MAX_INT;

if (NULL == pUnit)
{
if (NULL != pPlot)
{
CLLNode<IDInfo>* pUnitNode = pPlot->headUnitNode();

while (pUnitNode != NULL)
{
CvUnit* pLoopUnit = ::getUnit(pUnitNode->m_data);
pUnitNode = pPlot->nextUnitNode(pUnitNode);

if (canSpyBribeUnit(eTargetPlayer, *pLoopUnit))
{
int iValue = getProductionNeeded(pLoopUnit->getUnitType());
if (iValue < iCost)
{
iCost = iValue;
pUnit = pLoopUnit;
}
}
}

}
}
else
{
iCost = getProductionNeeded(pUnit->getUnitType());
}


if (NULL != pUnit)
{
if (canSpyBribeUnit(eTargetPlayer, *pUnit))
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getBuyUnitCostFactor()) * iCost) / 100;
}
}
}
else if (kMission.getDestroyBuildingCostFactor() > 0)
{
BuildingTypes eBuilding = (BuildingTypes) iExtraData;
int iCost = MAX_INT;

if (NO_BUILDING == eBuilding)
{
for (int iBuilding = 0; iBuilding < GC.getNumBuildingInfos(); ++iBuilding)
{
if (canSpyDestroyBuilding(eTargetPlayer, (BuildingTypes)iBuilding))
{
int iValue = getProductionNeeded((BuildingTypes)iBuilding);

if (iValue < iCost)
{
iCost = iValue;
eBuilding = (BuildingTypes)iBuilding;
}
}
}
}
else
{
iCost = getProductionNeeded(eBuilding);
}

if (NO_BUILDING != eBuilding)
{
if (NULL != pCity && pCity->getNumRealBuilding(eBuilding) > 0)
{
if (canSpyDestroyBuilding(eTargetPlayer, eBuilding))
{
iMissionCost = iBaseMissionCost + ((100 + kMission.getDestroyBuildingCostFactor()) * iCost) / 100;
}
}
}
}
else if (kMission.getBuyCityCostFactor() > 0)
{
// Buy City
if (NULL != pCity)
{
iMissionCost = iBaseMissionCost + (kMission.getBuyCityCostFactor() * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getGrowthPercent()) / 10000;
}
}
else if (kMission.getCityInsertCultureCostFactor() > 0)
{
// Insert Culture into City
if (NULL != pPlot && pPlot->getCulture(getID()) > 0)
{
int iCultureAmount = kMission.getCityInsertCultureAmountFactor() * pCity->countTotalCultureTimes100();
iCultureAmount /= 10000;
iCultureAmount = std::max(1, iCultureAmount);
iMissionCost = iBaseMissionCost + (kMission.getCityInsertCultureCostFactor() * iCultureAmount) / 100;
}
}
else if (kMission.isDestroyImprovement())
{
if (NULL != pPlot && !pPlot->isCity())
{
if (pPlot->getImprovementType() != NO_IMPROVEMENT || pPlot->getRouteType() != NO_ROUTE)
{
iMissionCost = (iBaseMissionCost * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getBuildPercent()) / 100;
}
}
}
else if (kMission.getCityPoisonWaterCounter() > 0)
{
FAssert(NULL != pCity);
// Cannot poison a city's water supply if it's already poisoned (value is negative when active)
if (NULL != pCity && pCity->getEspionageHealthCounter() <= 0)
{
iMissionCost = iBaseMissionCost;
}
}

// Make city unhappy
else if (kMission.getCityUnhappinessCounter() > 0)
{
FAssert(NULL != pCity);
// Cannot make a city unhappy if you've already done it (value is negative when active)
if (NULL != pCity && pCity->getEspionageHappinessCounter() <= 0)
{
iMissionCost = iBaseMissionCost;
}
}

// Make city Revolt
else if (kMission.getCityRevoltCounter() > 0)
{
FAssert(NULL != pCity);
// Cannot make a city revolt if it's already revolting
if (NULL != pCity && pCity->getOccupationTimer() == 0)
{
iMissionCost = iBaseMissionCost;
}
}
else if (kMission.getCounterespionageMod() > 0)
{
if (GET_TEAM(getTeam()).getCounterespionageTurnsLeftAgainstTeam(GET_PLAYER(eTargetPlayer).getTeam()) <= 0)
{
iMissionCost = (iBaseMissionCost * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getResearchPercent()) / 100;
}
}
else if (kMission.getPlayerAnarchyCounter() > 0)
{
// Player anarchy timer: can't add more turns of anarchy to player already in the midst of it
if (!GET_PLAYER(eTargetPlayer).isAnarchy())
{
iMissionCost = (iBaseMissionCost * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getAnarchyPercent()) / 100;
}
}
else if (kMission.isPassive())
{
iMissionCost = (iBaseMissionCost * (100 + GET_TEAM(GET_PLAYER(eTargetPlayer).getTeam()).getEspionagePointsAgainstTeam(getTeam()))) / 100;
}
else
{
iMissionCost = (iBaseMissionCost * GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getResearchPercent()) / 100;
}

if (iMissionCost < 0)
{
return -1;
}

return iMissionCost;
}
Now the cost is 85 eps on Hatty. Her ep spending is 114%. That seems like:

(.75 * (100 + 0))* 1.14 = 85

Is that it?

If so, and we do 4eps this turn and 42eps next turn, we're at 94eps, so she would have to add 95 / 1.14 /.75 - 100 = 11.11 eps. (.75 * 112) * 1.14 = 95. Check. She's not going to do that.
 
(.75 * (100 + 0))* 1.14 = 85

Is that it?
Correct.

2. Delaying Alexa by 8t costs us 240 raw beakers @30bpt. If Alexa is currently running a castes scientist, she could pop the GS as early as t70, bulbing T71. Pollina, can you tell if Alexa is working more than two tiles in the current save? The two fogged desert tiles would have roads if they were improved, right?
We can see Hatty's demo graphs. Her production dropped to 4 after she adopted Caste. That could mean that she is running a priest somewhere. Her crop yield seems to be 22. That could be 2 floodplains cottages and a coast tile in Alexa and 2 fish in Thebes. Or 1 floodplains cottage (hamlet) in Alexa and 3 fish in Thebes.
 
With Hatty being CRE, I don't much like the idea of giving her one of our cities to keep her alive. I do like the idea of stealing a tech or two from her if she settles a 3rd city before we capture her two main cities. Not sure if it is worth it to delay capturing the Mids for it though. Our :science:/:espionage: ratio won't be all that great anyway, maybe around 1.4 after running the EP slider. She's been running her EP slider quite a bit. With the prereq mod from PH and Currency, the cost of self teching CoL is roughly the same. There might be a better use for our free 4 :espionage: per turn.
I'm not sure how you're calculating the 1.4 ratio. For CoL, assuming Alexa is delayed 8t, we roughly break even. But then for Philosophy, I get a ratio of 2.4/2.7/3.8 for religion 1/.85/.6. If we steal Math or other techs Philo just keeps getting cheaper. I see Philo costing as low as 400/340/240 eps for religion 1/.85/.6.

So for me, the question is, will we want Philo or not? If so, we want to steal it.

Did the AI start with the whole map (or at least a good chunk of it) revealed? Seems pretty likely at this point.
That's curious. What leads you to think that?
 
I'm not sure how you're calculating the 1.4 ratio. For CoL, assuming Alexa is delayed 8t, we roughly break even. But then for Philosophy, I get a ratio of 2.4/2.7/3.8 for religion 1/.85/.6. If we steal Math or other techs Philo just keeps getting cheaper. I see Philo costing as low as 400/340/240 eps for religion 1/.85/.6.

So for me, the question is, will we want Philo or not? If so, we want to steal it.
Sorry, I accidently did my calculations in the steal gold tab. :hammer2:

That's curious. What leads you to think that?
Yeah, that's probably not the case. I was wondering why we had a trade connection with Gandhi and others. I also thought we had more trade connections pre-Sailing, but after checking the saves I see that was not the case.
 
We can see Hatty's demo graphs. Her production dropped to 4 after she adopted Caste. That could mean that she is running a priest somewhere. Her crop yield seems to be 22. That could be 2 floodplains cottages and a coast tile in Alexa and 2 fish in Thebes. Or 1 floodplains cottage (hamlet) in Alexa and 3 fish in Thebes.
Good spot! Interesting. Note there are no religious buildings to work a priest with, but your observation of the 4 total hammers confirms the settled scientist in Alexa, which gives the 4th hammer. :goodjob:

The graphs also show an increase in Hatty's ep spending in the last two turns, from 90% to 80% to 70% or from 90% to 80% or from 90% to 70%, not sure. Assuming 90-80-70 works for T59 and T61 but not perfectly for T60. For T59 I get close to the 117 f-b I had calculated here using 2 sci in Alexa and 4 sci Thebes. T60 swaps a sci for a fp in Alexa, but is still missing 3 GNP.. T61 works perfectly with no sci in Alexa.
Spoiler :
Code:
T59: Thebes 3fish+4sci; Alexa hamlet+2sci
Thebes      Alexa
 8 palace    2 TR
 1 city      1 city
 2 TR        3 hamlet
 6 fish     12 2 GLib sci
24 4 sci    12 2 sci 
             9 settled GS
--          --
15.3=17*.9   5.4=6*.9 (90% tech slider)
24          33
----        --
39.3        38.4
            19.2 50% acad bonus
----------------
            97 (including free beaker)
            19 20% tech bonus
            ==
           116 final bpt

T60: Thebes 3fish+4sci; Alexa hamlet+cott+sci
Thebes      Alexa
 8 palace    2 TR
 1 city      1 city
 2 TR        5 hamlet
 6 fish     12 2 GLib sci
24 4 sci     6 2 sci 
             9 settled GS
--          --
13.6=17*.8   6.4=8*.8 (80% tech slider)
24          27
----        --
37.6        33.4
            16.7 50% acad bonus
----------------
            88 (including free beaker)
            17 20% tech bonus
            ==
           105 final bpt
            +2 eps for +10% slider
           107 still  missing 3 GNP points.
           ================================
T61: Thebes 2fish+5sci; Alexa 2fp+coastal

Thebes      Alexa
 8 palace    2 TR
 1 city      1 city
 2 TR        7 cottages+coastal
 4 fish     12 2 GLib sci
30 5 sci     9 settled GS
--          --
10.5=15*.7   7=10*.7 (70% tech slider)
30          21
----        --
40.5        28
            14 50% acad bonus
----------------
            82 (including free beaker)
            16 20% tech bonus
            ==
            96 final bpt
            +4 eps for +20% ep slider
           100 <== checks out!!!
           =====================
In any case, it seems likely that Alexa is working an extra scientist or even two on some turns, possibly creating the next GS sooner than T75. :eek: If Alexa were to work 2 sci from T59 for 9t, the GS would pop on T68. So our range is now from T68 to T75. Not sure I feel like monitoring the GNP calcs all that closely, especially since I'm not certain about it, but we could do it. Maybe we won't have to delay Alexa much at all waiting for the GS.
 
Via Stalin, I'm pretty sure. See here.
Will we lose our resource networks when we DoW Hatty?

The question is, what happened between T55 and T56 that connected us to Mehmed, Darius, and Gandhi? Did Sal connect the Red Sea to the Arabian Sea? Did Stalin connect to the Black Sea?
Did Sal get Sailing ibt 55/56? Could that have connected Thebes and Delhi/Persepolis? I don't know. I'm always confused by the trade connection mechanics.
 
ZPV, you're still not certain we should delay Math. Does that mean you want to debate more or do you agree on playing forward 2t to see Hatty's research, using something like the following?

PPP T61-T63

T61 0% slider
T62 100% ep slider

Trade fur to Darius for silver.

Other stuff as planned here.
 
Turns until AI considers another civic switch:
Religions:
SPI: 10t
non-SPI: 15t
after bribe via diplo: 10t
after espionage mission: 5t

Civics:
SPI: 10t
non-SPI: 25t
after bribe via diplo: 10t
after espionage mission: 5t
 
Did Sal get Sailing ibt 55/56? Could that have connected Thebes and Delhi/Persepolis? I don't know. I'm always confused by the trade connection mechanics.

Pollina, you almost gave me a heart attack. I thought we were surely going to lose our resource trades with Gandhi and Darius. Maybe we still will, but thankfully on T56 we had all those new trade networks and Sal still lacked Sailing. He then proceeded to get Sailing on T57. :faint:
 
ZPV, you're still not certain we should delay Math. Does that mean you want to debate more or do you agree on playing forward 2t to see Hatty's research, using something like the following?

PPP T61-T63

T61 0% slider
T62 100% ep slider

Trade fur to Darius for silver.

Other stuff as planned here.

So long as we're committed to stealing something (anything) moderately useful, the EPs won't go to waste, so go ahead.
I don't think we'll achieve anything more with debate. Maybe we'll find out that Hatty is teching Aesthetics->Lit->Music and we have to kill her ASAP to protect our free artist. :cool:
 
Turnset Report T61-T63

T61 1560BC
Furs to Darius for Silver
0% sliders

Hatty GNP: 150
Thebes 16/877
Alexa 239/838
Berlin --


IT
Hatty calls to offer IW for HBR. Nice offer but no thanks.

T62 1520BC
Joao has IW and both he and Hatty will trade it. Joao has iron 1n of his cows on a coastal plains hill. He just got harder to capture unless we deny it. We could worker harvest that tile with a galley. AIs don't sense danger from sea.
Gandhi completes BW.
Joao founds Oporto on the hill 2w of Spice Island.
100% ep slider

Hatty GNP: 167; Crops: 22; Prod: 4h (The 167 could just be Monarchy at 40% tech bonus, or 2sci in Alexa again)
Thebes 32/877
Alexa 255/838 -- 33h looks like a granary
Berlin 199/832

Pausing to consider IW trade
 
I'd do IW-HBR with Joao. We don't really care if he builds HAs.

Sent from my Nexus 5 using Tapatalk
 
Back
Top Bottom