Bazaar developer reference

CvUnitCombat::GenerateAirSweepCombatInfo(CvUnit &, CvUnit *, CvPlot &, CvCombatInfo *)

Defined in
CvUnitCombat.cpp, line 1885
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_GenerateAirSweepCombatInfo

Hooks

static bool BeforeCvUnitCombat_GenerateAirSweepCombatInfo(CvUnit& kAttacker, CvUnit* pkDefender, CvPlot& plot, CvCombatInfo* pkCombatInfo);static void AfterCvUnitCombat_GenerateAirSweepCombatInfo(CvUnit& kAttacker, CvUnit* pkDefender, CvPlot& plot, CvCombatInfo* pkCombatInfo);static void ReplaceCvUnitCombat_GenerateAirSweepCombatInfo(void (*original)(CvUnit&, CvUnit*, CvPlot&, CvCombatInfo*), CvUnit& kAttacker, CvUnit* pkDefender, CvPlot& plot, CvCombatInfo* pkCombatInfo);CivRegisterBefore<CivHooks::CvUnitCombat_GenerateAirSweepCombatInfo>(host, &BeforeCvUnitCombat_GenerateAirSweepCombatInfo);CivRegisterAfter<CivHooks::CvUnitCombat_GenerateAirSweepCombatInfo>(host, &AfterCvUnitCombat_GenerateAirSweepCombatInfo);CivRegisterReplace<CivHooks::CvUnitCombat_GenerateAirSweepCombatInfo>(host, &ReplaceCvUnitCombat_GenerateAirSweepCombatInfo);

Code

1885void CvUnitCombat::GenerateAirSweepCombatInfo(CvUnit& kAttacker, CvUnit* pkDefender, CvPlot& plot, CvCombatInfo* pkCombatInfo)1886{1887	BATTLE_STARTED(BATTLE_TYPE_SWEEP, plot);1888#if defined(MOD_UNITS_MAX_HP)1889	int iAttackerMaxHP = kAttacker.GetMaxHitPoints();1890#else1891	int iMaxHP = GC.getMAX_HIT_POINTS();1892#endif18931894	pkCombatInfo->setUnit(BATTLE_UNIT_ATTACKER, &kAttacker);1895	pkCombatInfo->setUnit(BATTLE_UNIT_DEFENDER, pkDefender);1896	pkCombatInfo->setPlot(&plot);18971898	// Unit vs. Unit1899	CvAssert(pkDefender != NULL);19001901	int iAttackerStrength = kAttacker.GetMaxRangedCombatStrength(pkDefender, /*pCity*/ NULL, true, false);19021903	// Mod to air sweep strength1904	iAttackerStrength *= (100 + kAttacker.GetAirSweepCombatModifier());1905	iAttackerStrength /= 100;19061907	int iDefenderStrength = 0;19081909	int iDefenderExperience = 0;19101911	// Ground AA interceptor1912	if(pkDefender->getDomainType() != DOMAIN_AIR)1913	{1914		int iInterceptionDamage = pkDefender->GetInterceptionDamage(&kAttacker);19151916		// Reduce damage for performing a sweep1917		iInterceptionDamage *= /*75*/ GC.getAIR_SWEEP_INTERCEPTION_DAMAGE_MOD();1918		iInterceptionDamage /= 100;19191920		iDefenderExperience = /*2*/ GC.getEXPERIENCE_DEFENDING_AIR_SWEEP_GROUND();19211922		pkCombatInfo->setDamageInflicted(BATTLE_UNIT_DEFENDER, iInterceptionDamage);		// Damage inflicted this round1923	}1924	// Air interceptor1925	else1926	{1927		iDefenderStrength = pkDefender->GetMaxRangedCombatStrength(&kAttacker, /*pCity*/ NULL, false, false);1928#if defined(MOD_UNITS_MAX_HP)1929		int iDefenderMaxHP = pkDefender->GetMaxHitPoints();1930#endif19311932		int iAttackerDamageInflicted = kAttacker.getCombatDamage(iAttackerStrength, iDefenderStrength, kAttacker.getDamage(), /*bIncludeRand*/ true, /*bAttackerIsCity*/ false, /*bDefenderIsCity*/ false);1933		int iDefenderDamageInflicted = pkDefender->getCombatDamage(iDefenderStrength, iAttackerStrength, pkDefender->getDamage(), /*bIncludeRand*/ true, /*bAttackerIsCity*/ false, /*bDefenderIsCity*/ false);19341935		int iAttackerTotalDamageInflicted = iAttackerDamageInflicted + pkDefender->getDamage();1936		int iDefenderTotalDamageInflicted = iDefenderDamageInflicted + kAttacker.getDamage();19371938		// Will both units be killed by this? :o If so, take drastic corrective measures1939#if defined(MOD_UNITS_MAX_HP)1940		if (iAttackerTotalDamageInflicted >= iDefenderMaxHP && iDefenderTotalDamageInflicted >= iAttackerMaxHP)1941#else1942		if (iAttackerTotalDamageInflicted >= iMaxHP && iDefenderTotalDamageInflicted >= iMaxHP)1943#endif1944		{1945			// He who hath the least amount of damage survives with 1 HP left1946			if(iAttackerTotalDamageInflicted > iDefenderTotalDamageInflicted)1947			{1948#if defined(MOD_UNITS_MAX_HP)1949				iDefenderDamageInflicted = iAttackerMaxHP - kAttacker.getDamage() - 1;1950				iDefenderTotalDamageInflicted = iAttackerMaxHP - 1;1951				iAttackerTotalDamageInflicted = iDefenderMaxHP;1952#else1953				iDefenderDamageInflicted = iMaxHP - kAttacker.getDamage() - 1;1954				iDefenderTotalDamageInflicted = iMaxHP - 1;1955				iAttackerTotalDamageInflicted = iMaxHP;1956#endif1957			}1958			else1959			{1960#if defined(MOD_UNITS_MAX_HP)1961				iAttackerDamageInflicted = iDefenderMaxHP - pkDefender->getDamage() - 1;1962				iAttackerTotalDamageInflicted = iDefenderMaxHP - 1;1963				iDefenderTotalDamageInflicted = iAttackerMaxHP;1964#else1965				iAttackerDamageInflicted = iMaxHP - pkDefender->getDamage() - 1;1966				iAttackerTotalDamageInflicted = iMaxHP - 1;1967				iDefenderTotalDamageInflicted = iMaxHP;1968#endif1969			}1970		}19711972		iDefenderExperience = /*6*/ GC.getEXPERIENCE_DEFENDING_AIR_SWEEP_AIR();19731974		pkCombatInfo->setFinalDamage(BATTLE_UNIT_ATTACKER, iDefenderTotalDamageInflicted);1975		pkCombatInfo->setDamageInflicted(BATTLE_UNIT_ATTACKER, iAttackerDamageInflicted);1976		pkCombatInfo->setFinalDamage(BATTLE_UNIT_DEFENDER, iAttackerTotalDamageInflicted);1977		pkCombatInfo->setDamageInflicted(BATTLE_UNIT_DEFENDER, iDefenderDamageInflicted);19781979		// Fear Damage1980		//pkCombatInfo->setFearDamageInflicted( BATTLE_UNIT_ATTACKER, kAttacker.getCombatDamage(iAttackerStrength, iDefenderStrength, kAttacker.getDamage(), true, false, true) );1981		//	pkCombatInfo->setFearDamageInflicted( BATTLE_UNIT_DEFENDER, getCombatDamage(iDefenderStrength, iAttackerStrength, pDefender->getDamage(), true, false, true) );19821983#if defined(MOD_UNITS_MAX_HP)1984		int iAttackerEffectiveStrength = iAttackerStrength * (iAttackerMaxHP - range(kAttacker.getDamage(), 0, iAttackerMaxHP - 1)) / iAttackerMaxHP;1985#else1986		int iAttackerEffectiveStrength = iAttackerStrength * (iMaxHP - range(kAttacker.getDamage(), 0, iMaxHP - 1)) / iMaxHP;1987#endif1988		iAttackerEffectiveStrength = iAttackerEffectiveStrength > 0 ? iAttackerEffectiveStrength : 1;1989#if defined(MOD_UNITS_MAX_HP)1990		int iDefenderEffectiveStrength = iDefenderStrength * (iDefenderMaxHP - range(pkDefender->getDamage(), 0, iDefenderMaxHP - 1)) / iDefenderMaxHP;1991#else1992		int iDefenderEffectiveStrength = iDefenderStrength * (iMaxHP - range(pkDefender->getDamage(), 0, iMaxHP - 1)) / iMaxHP;1993#endif1994		iDefenderEffectiveStrength = iDefenderEffectiveStrength > 0 ? iDefenderEffectiveStrength : 1;19951996		//int iExperience = kAttacker.defenseXPValue();1997		//iExperience = ((iExperience * iAttackerEffectiveStrength) / iDefenderEffectiveStrength); // is this right? looks like more for less [Jon: Yes, it's XP for the defender]1998		//iExperience = range(iExperience, GC.getMIN_EXPERIENCE_PER_COMBAT(), GC.getMAX_EXPERIENCE_PER_COMBAT());1999		pkCombatInfo->setExperience(BATTLE_UNIT_DEFENDER, iDefenderExperience);2000		pkCombatInfo->setMaxExperienceAllowed(BATTLE_UNIT_ATTACKER, pkDefender->maxXPValue());2001		pkCombatInfo->setInBorders(BATTLE_UNIT_ATTACKER, plot.getOwner() == pkDefender->getOwner());2002#if defined(MOD_TRAITS_GG_FROM_BARBARIANS) || defined(MOD_PROMOTIONS_GG_FROM_BARBARIANS)2003		pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_ATTACKER, kAttacker.isGGFromBarbarians() || !kAttacker.isBarbarian());2004#else2005		pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_ATTACKER, !kAttacker.isBarbarian());2006#endif20072008		//iExperience = ((iExperience * iDefenderEffectiveStrength) / iAttackerEffectiveStrength);2009		//iExperience = range(iExperience, GC.getMIN_EXPERIENCE_PER_COMBAT(), GC.getMAX_EXPERIENCE_PER_COMBAT());2010		int iExperience = /*6*/ GC.getEXPERIENCE_ATTACKING_AIR_SWEEP();2011		pkCombatInfo->setExperience(BATTLE_UNIT_ATTACKER, iExperience);2012		pkCombatInfo->setMaxExperienceAllowed(BATTLE_UNIT_DEFENDER, kAttacker.maxXPValue());2013		pkCombatInfo->setInBorders(BATTLE_UNIT_DEFENDER, plot.getOwner() == kAttacker.getOwner());2014#if defined(MOD_TRAITS_GG_FROM_BARBARIANS) || defined(MOD_PROMOTIONS_GG_FROM_BARBARIANS)2015		pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_DEFENDER, pkDefender->isGGFromBarbarians() || !pkDefender->isBarbarian());2016#else2017		pkCombatInfo->setUpdateGlobal(BATTLE_UNIT_DEFENDER, !pkDefender->isBarbarian());2018#endif2019	}20202021	pkCombatInfo->setAttackIsRanged(false);2022	pkCombatInfo->setAttackIsAirSweep(true);2023	pkCombatInfo->setAttackerAdvances(false);2024	pkCombatInfo->setDefenderRetaliates(true);20252026	GC.GetEngineUserInterface()->setDirty(UnitInfo_DIRTY_BIT, true);2027}

Calls

Called by