CvUnit::GetGenericMaxStrengthModifier(const CvUnit *, const CvPlot *, bool) const
- Defined in
- CvUnit.cpp, line 12152
- Class
- CvUnit
- Hook name
CivHooks::CvUnit_GetGenericMaxStrengthModifier
Hooks
static bool BeforeCvUnit_GetGenericMaxStrengthModifier(const CvUnit* self, const CvUnit* pOtherUnit, const CvPlot* pBattlePlot, bool bIgnoreUnitAdjacency, int& result);static void AfterCvUnit_GetGenericMaxStrengthModifier(const CvUnit* self, const CvUnit* pOtherUnit, const CvPlot* pBattlePlot, bool bIgnoreUnitAdjacency, int& result);static int ReplaceCvUnit_GetGenericMaxStrengthModifier(int (*original)(const CvUnit*, const CvUnit*, const CvPlot*, bool), const CvUnit* self, const CvUnit* pOtherUnit, const CvPlot* pBattlePlot, bool bIgnoreUnitAdjacency);CivRegisterBefore<CivHooks::CvUnit_GetGenericMaxStrengthModifier>(host, &BeforeCvUnit_GetGenericMaxStrengthModifier);CivRegisterAfter<CivHooks::CvUnit_GetGenericMaxStrengthModifier>(host, &AfterCvUnit_GetGenericMaxStrengthModifier);CivRegisterReplace<CivHooks::CvUnit_GetGenericMaxStrengthModifier>(host, &ReplaceCvUnit_GetGenericMaxStrengthModifier);
Code
12151/// What are the generic strength modifiers for this Unit?12152int CvUnit::GetGenericMaxStrengthModifier(const CvUnit* pOtherUnit, const CvPlot* pBattlePlot, bool bIgnoreUnitAdjacency) const12153{12154 VALIDATE_OBJECT1215512156 int iModifier = 0;12157 int iTempModifier;1215812159 // Generic combat bonus12160 iTempModifier = getExtraCombatPercent();12161 iModifier += iTempModifier;1216212163 CvPlayerAI& kPlayer = GET_PLAYER(getOwner());12164 CvGameReligions* pReligions = GC.getGame().GetGameReligions();12165 ReligionTypes eFoundedReligion = pReligions->GetFounderBenefitsReligion(kPlayer.GetID());1216612167 // If the empire is unhappy, then Units get a combat penalty12168#if defined(MOD_GLOBAL_CS_RAZE_RARELY)12169 if((!kPlayer.isMinorCiv() && kPlayer.IsEmpireUnhappy()) || (kPlayer.isMinorCiv() && kPlayer.IsEmpireVeryUnhappy()))12170#else12171 if(kPlayer.IsEmpireUnhappy())12172#endif12173 {12174 iModifier += GetUnhappinessCombatPenalty();12175 }1217612177 // Over our strategic resource limit?12178 iTempModifier = GetStrategicResourceCombatPenalty();12179 if(iTempModifier != 0)12180 iModifier += iTempModifier;1218112182 // Great General nearby12183#if defined(MOD_PROMOTIONS_AURA_CHANGE)12184 int iAuraEffectChange = 0;12185 if(IsNearGreatGeneral(iAuraEffectChange) && !IsIgnoreGreatGeneralBenefit())12186#else12187 if(IsNearGreatGeneral() && !IsIgnoreGreatGeneralBenefit())12188#endif12189 {12190 iModifier += kPlayer.GetGreatGeneralCombatBonus();12191 iModifier += kPlayer.GetPlayerTraits()->GetGreatGeneralExtraBonus();12192#if defined(MOD_PROMOTIONS_AURA_CHANGE)12193 iModifier += iAuraEffectChange;12194#endif1219512196 if(IsStackedGreatGeneral())12197 {12198 iModifier += GetGreatGeneralCombatModifier();12199 }12200 }1220112202 // Reverse Great General nearby12203 int iReverseGGModifier = GetReverseGreatGeneralModifier();12204 if(iReverseGGModifier != 0)12205 {12206 iModifier += iReverseGGModifier;12207 }1220812209 // Improvement with combat bonus (from trait) nearby12210 int iNearbyImprovementModifier = GetNearbyImprovementModifier();12211 if(iNearbyImprovementModifier != 0)12212 {12213 iModifier += iNearbyImprovementModifier;12214 }1221512216 // Adjacent Friendly military Unit?12217 if(IsFriendlyUnitAdjacent(/*bCombatUnit*/ true))12218 iModifier += GetAdjacentModifier();1221912220 // Our empire fights well in Golden Ages?12221 if(kPlayer.isGoldenAge())12222 iModifier += kPlayer.GetPlayerTraits()->GetGoldenAgeCombatModifier();1222312224 ////////////////////////12225 // KNOWN BATTLE PLOT12226 ////////////////////////1222712228 if(pBattlePlot != NULL)12229 {12230 // Bonuses for fighting in one's lands12231 if(pBattlePlot->IsFriendlyTerritory(getOwner()))12232 {12233 iTempModifier = getFriendlyLandsModifier();12234 iModifier += iTempModifier;1223512236 // Founder Belief bonus12237 CvCity* pPlotCity = pBattlePlot->getWorkingCity();12238 if(pPlotCity)12239 {12240 ReligionTypes eReligion = pPlotCity->GetCityReligions()->GetReligiousMajority();12241 if(eReligion != NO_RELIGION && eReligion == eFoundedReligion)12242 {12243 const CvReligion* pCityReligion = pReligions->GetReligion(eReligion, pPlotCity->getOwner());12244 if(pCityReligion)12245 {12246 iTempModifier = pCityReligion->m_Beliefs.GetCombatModifierFriendlyCities();12247 iModifier += iTempModifier;12248 }12249 }12250 }12251 }1225212253 // Bonuses outside one's lands12254 else12255 {12256 iTempModifier = getOutsideFriendlyLandsModifier();12257 iModifier += iTempModifier;1225812259 // Bonus against city states?12260 if(pBattlePlot->isCity() && GET_PLAYER(pBattlePlot->getOwner()).isMinorCiv())12261 {12262 iModifier += kPlayer.GetPlayerTraits()->GetCityStateCombatModifier();12263 }1226412265 // Founder Belief bonus (this must be a city controlled by an enemy)12266 CvCity* pPlotCity = pBattlePlot->getWorkingCity();12267 if(pPlotCity)12268 {12269 if(atWar(getTeam(), pPlotCity->getTeam()))12270 {12271 ReligionTypes eReligion = pPlotCity->GetCityReligions()->GetReligiousMajority();12272 if(eReligion != NO_RELIGION && eReligion == eFoundedReligion)12273 {12274 const CvReligion* pCityReligion = GC.getGame().GetGameReligions()->GetReligion(eReligion, pPlotCity->getOwner());12275 if(pCityReligion)12276 {12277 iTempModifier = pCityReligion->m_Beliefs.GetCombatModifierEnemyCities();12278 iModifier += iTempModifier;12279 }12280 }12281 }12282 }12283 }1228412285 // Capital Defense12286 iTempModifier = GetCapitalDefenseModifier();12287 if(iTempModifier > 0)12288 {12289 CvCity* pCapital = GET_PLAYER(getOwner()).getCapitalCity();12290 if(pCapital)12291 {12292 int iDistanceToCapital = plotDistance(pBattlePlot->getX(), pBattlePlot->getY(), pCapital->getX(), pCapital->getY());12293 iTempModifier += (iDistanceToCapital * GetCapitalDefenseFalloff());12294 if (iTempModifier > 0)12295 {12296 iModifier += iTempModifier;12297 }12298 }12299 }1230012301 // Trait (player level) bonus against higher tech units12302 iTempModifier = GET_PLAYER(getOwner()).GetPlayerTraits()->GetCombatBonusVsHigherTech();12303 if(iTempModifier > 0)12304 {12305 // Only applies defending friendly territory12306 if(pBattlePlot->getOwner() == getOwner())12307 {12308 // Check tech levels too12309 UnitTypes eMyUnitType = getUnitType();12310 if(pOtherUnit && pOtherUnit->IsHigherTechThan(eMyUnitType))12311 {12312 iModifier += iTempModifier;12313 }12314 }12315 }1231612317 // Trait (player level) bonus against larger civs12318 iTempModifier = GET_PLAYER(getOwner()).GetPlayerTraits()->GetCombatBonusVsLargerCiv();12319 if(iTempModifier > 0)12320 {12321 if(pOtherUnit && pOtherUnit->IsLargerCivThan(this))12322 {12323 iModifier += iTempModifier;12324 }12325 }12326 }1232712328 ////////////////////////12329 // OTHER UNIT IS KNOWN12330 ////////////////////////1233112332 if(pOtherUnit != NULL)12333 {12334 CvAssertMsg(pOtherUnit != this, "Compared combat strength against one's own pointer. This is weird and probably wrong.");1233512336 if(!bIgnoreUnitAdjacency)12337 {12338 // Flanking12339 int iNumAdjacentFriends = pOtherUnit->GetNumEnemyUnitsAdjacent(this);12340 if(iNumAdjacentFriends > 0)12341 {12342 iTempModifier = /*15*/ GC.getBONUS_PER_ADJACENT_FRIEND() * iNumAdjacentFriends;1234312344 int iFlankModifier = GetFlankAttackModifier();12345 if(iFlankModifier > 0)12346 {12347 iTempModifier = iTempModifier * (100 + iFlankModifier) / 100;12348 }1234912350 iModifier += iTempModifier;12351 }12352 }1235312354 // Generic Unit Class Modifier12355 iTempModifier = getUnitClassModifier(pOtherUnit->getUnitClassType());12356 iModifier += iTempModifier;1235712358 // Unit Combat type Modifier12359 if(pOtherUnit->getUnitCombatType() != NO_UNITCOMBAT)12360 {12361 iTempModifier = unitCombatModifier(pOtherUnit->getUnitCombatType());12362 iModifier += iTempModifier;12363 }1236412365 // Domain Modifier12366 iTempModifier = domainModifier(pOtherUnit->getDomainType());12367 iModifier += iTempModifier;1236812369 // Bonus against city states?12370 if(GET_PLAYER(pOtherUnit->getOwner()).isMinorCiv())12371 {12372 iModifier += kPlayer.GetPlayerTraits()->GetCityStateCombatModifier();12373 }1237412375 // OTHER UNIT is a Barbarian12376 if(pOtherUnit->isBarbarian())12377 {12378 // Generic Barb Combat Bonus12379 iTempModifier = kPlayer.GetBarbarianCombatBonus();12380 iModifier += iTempModifier;1238112382 CvHandicapInfo& thisGameHandicap = GC.getGame().getHandicapInfo();1238312384 // Human bonus12385 if(isHuman())12386 {12387 iTempModifier = thisGameHandicap.getBarbarianCombatModifier();12388 iModifier += iTempModifier;12389 }12390 // AI bonus12391 else12392 {12393 iTempModifier = thisGameHandicap.getAIBarbarianCombatModifier();12394 iModifier += iTempModifier;12395 }1239612397 if(GC.getGame().isOption(GAMEOPTION_RAGING_BARBARIANS))12398 {12399 iModifier += 25;12400 }12401 }12402 }1240312404 return iModifier;12405}
Calls
- atWar(TeamTypes, TeamTypes)
- CvCity::GetCityReligions() const
- CvCity::getOwner() const
- CvCity::getTeam() const
- CvCity::getX() const
- CvCity::getY() const
- CvCityReligions::GetReligiousMajority()
- CvGame::GetGameReligions()
- CvGame::getHandicapInfo() const
- CvGame::isOption(GameOptionTypes) const
- CvGameReligions::GetFounderBenefitsReligion(PlayerTypes) const
- CvGameReligions::GetReligion(ReligionTypes, PlayerTypes) const
- CvGlobals::getBONUS_PER_ADJACENT_FRIEND()
- CvGlobals::getGame()
- CvHandicapInfo::getAIBarbarianCombatModifier() const
- CvHandicapInfo::getBarbarianCombatModifier() const
- CvPlayer::GetBarbarianCombatBonus() const
- CvPlayer::getCapitalCity()
- CvPlayer::GetGreatGeneralCombatBonus() const
- CvPlayer::GetID() const
- CvPlayer::GetPlayerTraits() const
- CvPlayer::IsEmpireUnhappy() const
- CvPlayer::IsEmpireVeryUnhappy() const
- CvPlayer::isGoldenAge() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTraits::GetCityStateCombatModifier() const
- CvPlayerTraits::GetCombatBonusVsHigherTech() const
- CvPlayerTraits::GetCombatBonusVsLargerCiv() const
- CvPlayerTraits::GetGoldenAgeCombatModifier() const
- CvPlayerTraits::GetGreatGeneralExtraBonus() const
- CvPlot::getOwner() const
- CvPlot::getWorkingCity() const
- CvPlot::getX() const
- CvPlot::getY() const
- CvPlot::isCity() const
- CvPlot::IsFriendlyTerritory(PlayerTypes) const
- CvReligionBeliefs::GetCombatModifierEnemyCities() const
- CvReligionBeliefs::GetCombatModifierFriendlyCities() const
- CvUnit::domainModifier(DomainTypes) const
- CvUnit::GetAdjacentModifier() const
- CvUnit::GetCapitalDefenseFalloff() const
- CvUnit::GetCapitalDefenseModifier() const
- CvUnit::getDomainType() const
- CvUnit::getExtraCombatPercent() const
- CvUnit::GetFlankAttackModifier() const
- CvUnit::getFriendlyLandsModifier() const
- CvUnit::GetGreatGeneralCombatModifier() const
- CvUnit::GetNearbyImprovementModifier() const
- CvUnit::GetNumEnemyUnitsAdjacent(const CvUnit *) const
- CvUnit::getOutsideFriendlyLandsModifier() const
- CvUnit::getOwner() const
- CvUnit::GetReverseGreatGeneralModifier() const
- CvUnit::GetStrategicResourceCombatPenalty() const
- CvUnit::getTeam() const
- CvUnit::GetUnhappinessCombatPenalty() const
- CvUnit::getUnitClassModifier(UnitClassTypes) const
- CvUnit::getUnitClassType() const
- CvUnit::getUnitCombatType() const
- CvUnit::getUnitType() const
- CvUnit::isBarbarian() const
- CvUnit::IsFriendlyUnitAdjacent(bool) const
- CvUnit::IsHigherTechThan(UnitTypes) const
- CvUnit::isHuman() const
- CvUnit::IsIgnoreGreatGeneralBenefit() const
- CvUnit::IsLargerCivThan(const CvUnit *) const
- CvUnit::IsNearGreatGeneral(int &) const
- CvUnit::IsStackedGreatGeneral() const
- CvUnit::unitCombatModifier(UnitCombatTypes) const
- plotDistance(int, int, int, int)