CvUnit::GetMaxDefenseStrength(const CvPlot *, const CvUnit *, bool) const
- Defined in
- CvUnit.cpp, line 12582
- Class
- CvUnit
- Hook name
CivHooks::CvUnit_GetMaxDefenseStrength
Hooks
static bool BeforeCvUnit_GetMaxDefenseStrength(const CvUnit* self, const CvPlot* pInPlot, const CvUnit* pAttacker, bool bFromRangedAttack, int& result);static void AfterCvUnit_GetMaxDefenseStrength(const CvUnit* self, const CvPlot* pInPlot, const CvUnit* pAttacker, bool bFromRangedAttack, int& result);static int ReplaceCvUnit_GetMaxDefenseStrength(int (*original)(const CvUnit*, const CvPlot*, const CvUnit*, bool), const CvUnit* self, const CvPlot* pInPlot, const CvUnit* pAttacker, bool bFromRangedAttack);CivRegisterBefore<CivHooks::CvUnit_GetMaxDefenseStrength>(host, &BeforeCvUnit_GetMaxDefenseStrength);CivRegisterAfter<CivHooks::CvUnit_GetMaxDefenseStrength>(host, &AfterCvUnit_GetMaxDefenseStrength);CivRegisterReplace<CivHooks::CvUnit_GetMaxDefenseStrength>(host, &ReplaceCvUnit_GetMaxDefenseStrength);
Code
12581/// What is the max strength of this Unit when defending?12582int CvUnit::GetMaxDefenseStrength(const CvPlot* pInPlot, const CvUnit* pAttacker, bool bFromRangedAttack) const12583{12584 VALIDATE_OBJECT1258512586 if(m_bEmbarked)12587 {12588 return GetEmbarkedUnitDefense();;12589 }1259012591 if(GetBaseCombatStrength() == 0)12592 return 0;1259312594 int iCombat;1259512596 int iTempModifier;12597 int iModifier = GetGenericMaxStrengthModifier(pAttacker, pInPlot, /*bIgnoreUnitAdjacency*/ bFromRangedAttack);1259812599 // Generic Defense Bonus12600 iTempModifier = getDefenseModifier();12601 iModifier += iTempModifier;1260212603 // Defense against Ranged12604 if(bFromRangedAttack)12605 iModifier += rangedDefenseModifier();1260612607 ////////////////////////12608 // KNOWN DEFENSE PLOT12609 ////////////////////////1261012611 if(pInPlot != NULL)12612 {12613 // No TERRAIN bonuses for this Unit?12614 iTempModifier = pInPlot->defenseModifier(getTeam(), (pAttacker != NULL) ? pAttacker->ignoreBuildingDefense() : true);1261512616 // If we receive normal defensive bonuses OR iTempModifier is actually a PENALTY, then add in the mod12617 if(!noDefensiveBonus() || iTempModifier < 0)12618 iModifier += iTempModifier;1261912620 // Fortification12621 iTempModifier = fortifyModifier();12622 iModifier += iTempModifier;1262312624 // City Defense12625 if(pInPlot->isCity())12626 {12627 iTempModifier = cityDefenseModifier();12628 iModifier += iTempModifier;12629 }1263012631 // Hill Defense12632 if(pInPlot->isHills())12633 {12634 iTempModifier = hillsDefenseModifier();12635 iModifier += iTempModifier;12636 }1263712638 // Open Ground Defense12639 if(pInPlot->isOpenGround())12640 {12641 iTempModifier = openDefenseModifier();12642 iModifier += iTempModifier;12643 }1264412645 // Rough Ground Defense12646 if(pInPlot->isRoughGround())12647 {12648 iTempModifier = roughDefenseModifier();12649 iModifier += iTempModifier;12650 }1265112652 // Feature Defense12653 if(pInPlot->getFeatureType() != NO_FEATURE)12654 {12655 iTempModifier = featureDefenseModifier(pInPlot->getFeatureType());12656 iModifier += iTempModifier;12657 }12658 // No Feature - use Terrain Defense Mod12659 else12660 {12661 iTempModifier = terrainDefenseModifier(pInPlot->getTerrainType());12662 iModifier += iTempModifier;1266312664 // Tack on Hills Defense Mod12665 if(pInPlot->isHills())12666 {12667 iTempModifier = terrainDefenseModifier(TERRAIN_HILL);12668 iModifier += iTempModifier;12669 }12670 }12671 }1267212673 ////////////////////////12674 // KNOWN ATTACKER12675 ////////////////////////1267612677 if(pAttacker != NULL)12678 {12679 CvAssertMsg(pAttacker != this, "Compared defense strength against one's own pointer. This is weird and probably wrong.");1268012681 // Unit Class Defense Modifier12682 iTempModifier = unitClassDefenseModifier(pAttacker->getUnitClassType());12683 iModifier += iTempModifier;12684 }1268512686 // Unit can't drop below 10% strength12687 if(iModifier < -90)12688 iModifier = -90;1268912690 iCombat = GetBaseCombatStrength() * (iModifier + 100);1269112692 // Boats do more damage VS one another12693 if(pAttacker != NULL)12694 {12695 if(pAttacker->getDomainType() == DOMAIN_SEA && getDomainType() == DOMAIN_SEA)12696 {12697 iCombat *= /*40*/ GC.getNAVAL_COMBAT_DEFENDER_STRENGTH_MULTIPLIER();12698 iCombat /= 100;12699 }12700 }1270112702 return std::max(1, iCombat);12703}
Calls
- CvGlobals::getNAVAL_COMBAT_DEFENDER_STRENGTH_MULTIPLIER()
- CvPlot::defenseModifier(TeamTypes, bool, bool) const
- CvPlot::getFeatureType() const
- CvPlot::getTerrainType() const
- CvPlot::isCity() const
- CvPlot::isHills() const
- CvPlot::isOpenGround() const
- CvPlot::isRoughGround() const
- CvUnit::cityDefenseModifier() const
- CvUnit::featureDefenseModifier(FeatureTypes) const
- CvUnit::fortifyModifier() const
- CvUnit::GetBaseCombatStrength(bool) const
- CvUnit::getDefenseModifier() const
- CvUnit::getDomainType() const
- CvUnit::GetEmbarkedUnitDefense() const
- CvUnit::GetGenericMaxStrengthModifier(const CvUnit *, const CvPlot *, bool) const
- CvUnit::getTeam() const
- CvUnit::getUnitClassType() const
- CvUnit::hillsDefenseModifier() const
- CvUnit::ignoreBuildingDefense() const
- CvUnit::noDefensiveBonus() const
- CvUnit::openDefenseModifier() const
- CvUnit::rangedDefenseModifier() const
- CvUnit::roughDefenseModifier() const
- CvUnit::terrainDefenseModifier(TerrainTypes) const
- CvUnit::unitClassDefenseModifier(UnitClassTypes) const
FAutoVariable::operator const bool &std::max
Called by
- CvCity::rangeCombatUnitDefense(const CvUnit *) const
- CvGame::GetCombatPrediction(const CvUnit *, const CvUnit *)
- CvHomelandAI::MoveCivilianToSafety(CvUnit *, bool, bool)
- CvTacticalAI::ComputeTotalExpectedDamage(CvTacticalTarget *, CvPlot *)
- CvUnit::GetAirCombatDamage(const CvUnit *, CvCity *, bool, int) const
- CvUnit::GetAirStrikeDefenseDamage(const CvUnit *, bool) const
- CvUnit::GetInterceptionDamage(const CvUnit *, bool) const
- CvUnit::GetParadropInterceptionDamage(const CvUnit *, bool) const
- CvUnit::GetRangeCombatDamage(const CvUnit *, CvCity *, bool, int) const
- CvUnit::isBetterDefenderThan(const CvUnit *, const CvUnit *) const
- CvUnitCombat::GenerateMeleeCombatInfo(CvUnit &, CvUnit *, CvPlot &, CvCombatInfo *)
- CvLuaUnit::lGetMaxDefenseStrength(lua_State *)