Bazaar developer reference

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

Called by