Combat odds?

TanyaR

Chieftain
Joined
Jun 4, 2022
Messages
2
I have recently taken up this old game and have noticed something I find slightly annoying with the combat system and just wondering if others have noticed this too. - As you set the difficulty higher you lose combat on higher end higher odds. The point I'm at now I have noticed that anything short of 98% is always a rout and around 99% seems to be 50/50. I'm not sure how this translates on the two highest difficulty levels? Will I always need 3 or 4 Axemen to defeat a barbarian warrior?
 
I have recently taken up this old game and have noticed something I find slightly annoying with the combat system and just wondering if others have noticed this too. - As you set the difficulty higher you lose combat on higher end higher odds. The point I'm at now I have noticed that anything short of 98% is always a rout and around 99% seems to be 50/50. I'm not sure how this translates on the two highest difficulty levels? Will I always need 3 or 4 Axemen to defeat a barbarian warrior?
Hello Tanya...welcome to CFC! :) (or your awakening from lurkerhood)

Barbarians get bonuses against the human player as difficulty increases. I'm not sure if that bonus directly reflects in the odds one sees, but it can lead to more unexpected losses. Regardless, Axes should win at almost 100% against barb warriors. You might get a rare loss to a defending warrior on good terrain, but that should be extremely rare.

What level are you currently playing?

Someone like herr @f1rpo may have more details on how the odds work.
 
It isn't just barbarians though. In battles against computer opponents I see most of the time for example cavalry lose outright to longbow or pikemen or later tanks and even modern armor lose to infantry. With the barbarians mostly it is my swordsmen vs. barbarian archers, where the odds calculation says around 80% but any difficulty above Warlord I have never once won a single battle like that, I have to have two swordsmen to take out one archer.
 
In the case of cavalry vs. longbow or pike, don't underestimate the value of stacking defensive bonuses. You might look at the respective unit :strength: values and think that a 15:strength: cavalry should never struggle against a 6:strength: unit, but large bonuses make a big difference. Also don't overestimate the value of certain promotions - Combat gives a Cavalry unit as much of a strength boost as a promotion like Shock or Cover takes away from a defending Pike or Longbow, but Combat works regardless of what unit is being attacked whereas the unit-specific promotions only apply if you're actually fighting that specific unit. Which in many cases you won't end up doing since the best defender against a specific attacking unit will always defend the stack.

In the case of early barbarian fights, particularly against Archers (although this also applies to the cavalry vs. longbow situation to some extend), be aware that First Strike can be very painful and the game doesn't necessarily know how to calculate it's effect on combat odds properly. Also note that very low difficulties actually give you a number of free Mulligan fights against barbarians, where even if you pit your warrior against a barbarian tank you'll still win. This bonus mostly exists to save your initial scout/warrior from being eaten by a stray animal, but it never goes away either, so if you never fight barbarians in the early game you can end up doing some really silly stuff with it.
 
There are (as far as I can tell from the code) 3 modifiers regarding combat vs difficulty level.
  1. Amount of free wins. The lower the difficulty the more "automatically win against barbs"
    <iFreeWinsVsBarbs>5</iFreeWinsVsBarbs>
  2. Modifier against animals
    <iAnimalBonus>-70</iAnimalBonus>
  3. Modifier against barbarians
    <iBarbarianBonus>-40</iBarbarianBonus>
They are all exposed in the Civ4HandicapInfo.xml.

Besides that its all the same regarding difficulty level. But these will be shown in the game as well, so nothing is hidden.

Code:
    // do modifiers for animals and barbarians (leaving these out for bAttackingUnknownDefender case)
    if (pAttacker != NULL)
    {
        if (isAnimal())
        {
            if (pAttacker->isHuman())
            {
                iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAnimalCombatModifierTA = iExtraModifier;
                }
            }
            else
            {
                iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIAnimalCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAIAnimalCombatModifierTA = iExtraModifier;
                }
            }
        }

        if (pAttacker->isAnimal())
        {
            if (isHuman())
            {
                iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAnimalCombatModifierAA = iExtraModifier;
                }
            }
            else
            {
                iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIAnimalCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAIAnimalCombatModifierAA = iExtraModifier;
                }
            }
        }

        if (isBarbarian())
        {
            if (pAttacker->isHuman())
            {
                iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iBarbarianCombatModifierTB = iExtraModifier;
                }
            }
            else
            {
                iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIBarbarianCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAIBarbarianCombatModifierTB = iExtraModifier;
                }
            }
        }

        if (pAttacker->isBarbarian())
        {
            if (isHuman())
            {
                iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iBarbarianCombatModifierAB = iExtraModifier;
                }
            }
            else
            {
                iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIBarbarianCombatModifier();
                iModifier += iExtraModifier;
                if (pCombatDetails != NULL)
                {
                    pCombatDetails->iAIBarbarianCombatModifierTB = iExtraModifier;
                }
            }
        }
    }

Everything related to difficulty in the SDK
Spoiler References to handicap :

Code File Line Column
LoadGlobalClassInfo(GC.getHandicapInfo(), "CIV4HandicapInfo", "GameInfo", "Civ4HandicapInfo/HandicapInfos/HandicapInfo", false, &CvDLLUtilityIFaceBase::createHandicapInfoCacheObject); D:\Civ\original CvGameCoreDLL\CvXMLLoadUtilitySet.cpp 606 22
iUnhappiness -= std::min(0, GC.getHandicapInfo(getHandicapType()).getHappyBonus()); D:\Civ\original CvGameCoreDLL\CvCity.cpp 4255 31
iHappiness += std::max(0, GC.getHandicapInfo(getHandicapType()).getHappyBonus()); D:\Civ\original CvGameCoreDLL\CvCity.cpp 4282 28
iHealth = GC.getHandicapInfo(getHandicapType()).getHealthBonus(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 4421 12
iHealth = GC.getHandicapInfo(getHandicapType()).getHealthBonus(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 4480 12
iTempMaintenance *= GC.getHandicapInfo(getHandicapType()).getDistanceMaintenancePercent(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5404 23
iNumCitiesPercent *= GC.getHandicapInfo(getHandicapType()).getNumCitiesMaintenancePercent(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5438 23
iNumCitiesMaintenance = std::min(iNumCitiesMaintenance, GC.getHandicapInfo(getHandicapType()).getMaxNumCitiesMaintenance() * 100); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5454 58
iNumCitiesPercent *= GC.getHandicapInfo(getHandicapType()).getColonyMaintenancePercent(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5491 23
iMaintenance = std::min(iMaintenance, (GC.getHandicapInfo(getHandicapType()).getMaxColonyMaintenance() * calculateDistanceMaintenanceTimes100()) / 100); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5498 41
iMaintenance *= GC.getHandicapInfo(getHandicapType()).getCorporationMaintenancePercent(); D:\Civ\original CvGameCoreDLL\CvCity.cpp 5555 18
if ((GC.getHandicapInfo(getHandicapType()).isFreeTechs(iI)) || D:\Civ\original CvGameCoreDLL\CvGame.cpp 675 11
(!(GET_TEAM((TeamTypes)iJ).isHuman())&& GC.getHandicapInfo(getHandicapType()).isAIFreeTechs(iI)) || D:\Civ\original CvGameCoreDLL\CvGame.cpp 676 49
iHumanSlot = range((((countCivPlayersAlive() - 1) * GC.getHandicapInfo(getHandicapType()).getStartingLocationPercent()) / 100), 0, (countCivPlayersAlive() - 1)); D:\Civ\original CvGameCoreDLL\CvGame.cpp 905 55
if (GC.getHandicapInfo(getHandicapType()).getUnownedTilesPerBarbarianCity() <= 0) D:\Civ\original CvGameCoreDLL\CvGame.cpp 6087 6
if (getElapsedGameTurns() < (((GC.getHandicapInfo(getHandicapType()).getBarbarianCityCreationTurnsElapsed() * GC.getGameSpeedInfo(getGameSpeedType()).getBarbPercent()) / 100) / std::max(getStartEra() + 1, 1))) D:\Civ\original CvGameCoreDLL\CvGame.cpp 6097 33
if (getSorenRandNum(100, "Barb City Creation") >= GC.getHandicapInfo(getHandicapType()).getBarbarianCityCreationProb()) D:\Civ\original CvGameCoreDLL\CvGame.cpp 6102 52
int iTargetBarbCities = (getNumCivCities() * 5 * GC.getHandicapInfo(getHandicapType()).getBarbarianCityCreationProb()) / 100; D:\Civ\original CvGameCoreDLL\CvGame.cpp 6112 52
int iUnownedTilesThreshold = GC.getHandicapInfo(getHandicapType()).getUnownedTilesPerBarbarianCity(); D:\Civ\original CvGameCoreDLL\CvGame.cpp 6142 34
if (getElapsedGameTurns() < ((GC.getHandicapInfo(getHandicapType()).getBarbarianCreationTurnsElapsed() * GC.getGameSpeedInfo(getGameSpeedType()).getBarbPercent()) / 100)) D:\Civ\original CvGameCoreDLL\CvGame.cpp 6222 32
iDivisor = GC.getHandicapInfo(getHandicapType()).getUnownedWaterTilesPerBarbarianUnit(); D:\Civ\original CvGameCoreDLL\CvGame.cpp 6238 16
iDivisor = GC.getHandicapInfo(getHandicapType()).getUnownedTilesPerBarbarianUnit(); D:\Civ\original CvGameCoreDLL\CvGame.cpp 6243 16
if (GC.getHandicapInfo(getHandicapType()).getUnownedTilesPerGameAnimal() <= 0) D:\Civ\original CvGameCoreDLL\CvGame.cpp 6395 6
iNeededAnimals = ((pLoopArea->getNumUnownedTiles() / GC.getHandicapInfo(getHandicapType()).getUnownedTilesPerGameAnimal()) - pLoopArea->getUnitsPerPlayer(BARBARIAN_PLAYER)); D:\Civ\original CvGameCoreDLL\CvGame.cpp 6414 57
iModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalCombatModifier(); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 1838 18
iModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianCombatModifier(); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 1851 18
iHealth = -(GC.getHandicapInfo(city.getHandicapType()).getHealthBonus()); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 8230 15
iHealth = GC.getHandicapInfo(city.getHandicapType()).getHealthBonus(); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 8334 13
iNewAnger -= std::min(0, GC.getHandicapInfo(city.getHandicapType()).getHappyBonus()); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 8592 28
iHappy = GC.getHandicapInfo(city.getHandicapType()).getHappyBonus(); D:\Civ\original CvGameCoreDLL\CvGameTextMgr.cpp 8725 12
changeGold(GC.getHandicapInfo(getHandicapType()).getStartingGold()); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 764 13
iPoints *= GC.getHandicapInfo(getHandicapType()).getAdvancedStartPointsMod(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 781 14
iPoints *= GC.getHandicapInfo(getHandicapType()).getAIAdvancedStartPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 786 15
iFreeCount *= (GC.getEraInfo(GC.getGameINLINE().getStartEra()).getStartingUnitMultiplier() + ((!isHuman()) ? GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIStartingUnitMultiplier() : 0)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 817 114
iFreeCount += GC.getHandicapInfo(getHandicapType()).getStartingDefenseUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 827 17
iFreeCount += GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIStartingDefenseUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 831 18
iFreeCount += GC.getHandicapInfo(getHandicapType()).getStartingWorkerUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 840 17
iFreeCount += GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIStartingWorkerUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 844 18
iFreeCount += GC.getHandicapInfo(getHandicapType()).getStartingExploreUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 853 17
iFreeCount += GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIStartingExploreUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 857 18
if (GC.getHandicapInfo(getHandicapType()).getNumGoodies() > 0) D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 4868 8
GoodyTypes eGoody = (GoodyTypes)GC.getHandicapInfo(getHandicapType()).getGoodies(GC.getGameINLINE().getSorenRandNum(GC.getHandicapInfo(getHandicapType()).getNumGoodies(), "Goodies")); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 4870 37
for (iI = 0; iI < GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianInitialDefenders(); iI++) D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5055 22
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIWorldTrainPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5627 25
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAITrainPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5632 25
iProductionNeeded *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5636 38
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIWorldConstructPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5681 25
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIConstructPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5686 25
iProductionNeeded *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5690 38
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIWorldCreatePercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5717 25
iProductionNeeded *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAICreatePercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5722 25
iProductionNeeded *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 5726 38
iFreeUnits = GC.getHandicapInfo(getHandicapType()).getFreeUnits(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6183 15
iSupport *= GC.getHandicapInfo(getHandicapType()).getUnitCostPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6211 14
iSupport *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIUnitCostPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6216 15
iSupport *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6219 29
iSupply *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIUnitSupplyPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6273 14
iSupply *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6276 28
iInflationPerTurnTimes10000 *= GC.getHandicapInfo(getHandicapType()).getInflationPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6314 33
int iAIModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIInflationPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6320 21
iAIModifier *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 6321 32
iWarWearinessPercentAnger *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIWarWearinessPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 8768 32
iWarWearinessPercentAnger *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 8771 46
iUpkeep *= GC.getHandicapInfo(getHandicapType()).getCivicUpkeepPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 11469 13
iUpkeep *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAICivicUpkeepPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 11474 14
iUpkeep *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 11477 28
iThreshold *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIGrowthPercent(); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 20455 17
iThreshold *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvPlayer.cpp 20458 31
iAttitude += GC.getHandicapInfo(GET_PLAYER(ePlayer).getHandicapType()).getAttitudeChange(); D:\Civ\original CvGameCoreDLL\CvPlayerAI.cpp 4772 15
iDagger += range(100 - GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAITrainPercent(), 0, 15); D:\Civ\original CvGameCoreDLL\CvPlayerAI.cpp 14026 27
iDefenders /= std::max(30, (GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAITrainPercent() - 20)); D:\Civ\original CvGameCoreDLL\CvPlayerAI.cpp 14995 30
iCost *= GC.getHandicapInfo(getHandicapType()).getResearchPercent(); D:\Civ\original CvGameCoreDLL\CvTeam.cpp 2388 11
iNoTechTradeThreshold *= std::max(0, (GC.getHandicapInfo(GET_TEAM(eTeam).getHandicapType()).getNoTechTradeModifier() + 100)); D:\Civ\original CvGameCoreDLL\CvTeamAI.cpp 1305 42
iTechTradeKnownPercent *= std::max(0, (GC.getHandicapInfo(GET_TEAM(eTeam).getHandicapType()).getTechTradeKnownModifier() + 100)); D:\Civ\original CvGameCoreDLL\CvTeamAI.cpp 1338 42
if (GC.getGameINLINE().getSorenRandNum(100, "AI Declare War 1") < GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIDeclareWarProb()) D:\Civ\original CvGameCoreDLL\CvTeamAI.cpp 3480 71
if (GC.getGameINLINE().getSorenRandNum(100, "AI Declare War 1") > GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIDeclareWarProb()) D:\Civ\original CvGameCoreDLL\CvTeamAI.cpp 3684 68
iPrice *= GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIUnitUpgradePercent(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 6673 13
iPrice *= std::max(0, ((GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIPerEraModifier() * GET_PLAYER(getOwnerINLINE()).getCurrentEra()) + 100)); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 6676 27
iRate *= std::max(0, (GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIWorkRateModifier() + 100)); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7265 25
iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7521 22
iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIAnimalCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7530 22
iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7543 23
iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIAnimalCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7552 23
iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7565 22
iExtraModifier = GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIBarbarianCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7574 22
iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getBarbarianCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7587 23
iExtraModifier = -GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAIBarbarianCombatModifier(); D:\Civ\original CvGameCoreDLL\CvUnit.cpp 7596 23
if (GET_PLAYER(getOwnerINLINE()).getWinsVsBarbs() < GC.getHandicapInfo(GET_PLAYER(getOwnerINLINE()).getHandicapType()).getFreeWinsVsBarbs()) D:\Civ\original CvGameCoreDLL\CvUnit.cpp 12289 55
if (GET_PLAYER(kDefender.getOwnerINLINE()).getWinsVsBarbs() < GC.getHandicapInfo(GET_PLAYER(kDefender.getOwnerINLINE()).getHandicapType()).getFreeWinsVsBarbs()) D:\Civ\original CvGameCoreDLL\CvUnit.cpp 12296 65
if (GC.getGameINLINE().getSorenRandNum(100, "Animal Attack") < GC.getHandicapInfo(GC.getGameINLINE().getHandicapType()).getAnimalAttackProb()) D:\Civ\original CvGameCoreDLL\CvUnitAI.cpp 1061 65
return (i>=0 && i<GC.getNumHandicapInfos()) ? &GC.getHandicapInfo((HandicapTypes) i) : NULL; D:\Civ\original CvGameCoreDLL\CyGlobalContext.cpp 200 49

 
Last edited:
Top Bottom