Code
130// Public Functions...131CvUnit::CvUnit() :132 m_syncArchive(*this)133 , m_iID("CvUnit::m_iID", m_syncArchive)134 , m_iHotKeyNumber("CvUnit::m_iHotKeyNumber", m_syncArchive)135 , m_iX("CvUnit::m_iX", m_syncArchive, true)136 , m_iY("CvUnit::m_iY", m_syncArchive, true)137 , m_iLastMoveTurn(0)138 , m_iCycleOrder(-1)139#if defined(MOD_API_UNIT_STATS)140 , m_iStatsTravelled(0)141 , m_iStatsKilled(0)142#endif143 , m_iDeployFromOperationTurn("CvUnit::DeployFromOperationTurn", m_syncArchive)144 , m_iReconX("CvUnit::m_iReconX", m_syncArchive)145 , m_iReconY("CvUnit::m_iReconY", m_syncArchive)146 , m_iReconCount("CvUnit::m_iReconCount", m_syncArchive)147 , m_iGameTurnCreated("CvUnit::m_iGameTurnCreated", m_syncArchive)148 , m_iDamage("CvUnit::m_iDamage", m_syncArchive, true)149 , m_iMoves("CvUnit::m_iMoves", m_syncArchive, true)150 , m_bImmobile("CvUnit::m_bImmobile", m_syncArchive)151 , m_iExperience("CvUnit::m_iExperience", m_syncArchive)152#if defined(MOD_UNITS_XP_TIMES_100)153 , m_iExperienceTimes100(0)154#endif155 , m_iLevel("CvUnit::m_iLevel", m_syncArchive)156 , m_iCargo("CvUnit::m_iCargo", m_syncArchive)157 , m_iCargoCapacity("CvUnit::m_iCargoCapacity", m_syncArchive)158 , m_iAttackPlotX("CvUnit::m_iAttackPlotX", m_syncArchive)159 , m_iAttackPlotY("CvUnit::m_iAttackPlotY", m_syncArchive)160 , m_iCombatTimer("CvUnit::m_iCombatTimer", m_syncArchive)161 , m_iCombatFirstStrikes("CvUnit::m_iCombatFirstStrikes", m_syncArchive)162 , m_iCombatDamage("CvUnit::m_iCombatDamage", m_syncArchive)163 , m_iFortifyTurns("CvUnit::m_iFortifyTurns", m_syncArchive, true)164 , m_bFortifiedThisTurn("CvUnit::m_bFortifiedThisTurn", m_syncArchive)165 , m_iBlitzCount("CvUnit::m_iBlitzCount", m_syncArchive)166 , m_iAmphibCount("CvUnit::m_iAmphibCount", m_syncArchive)167 , m_iRiverCrossingNoPenaltyCount("CvUnit::m_iRiverCrossingNoPenaltyCount", m_syncArchive)168 , m_iEnemyRouteCount("CvUnit::m_iEnemyRouteCount", m_syncArchive)169 , m_iRivalTerritoryCount("CvUnit::m_iRivalTerritoryCount", m_syncArchive)170 , m_iMustSetUpToRangedAttackCount("CvUnit::m_iMustSetUpToRangedAttackCount", m_syncArchive)171 , m_iRangeAttackIgnoreLOSCount("CvUnit::m_iRangeAttackIgnoreLOSCount", m_syncArchive)172 , m_iCityAttackOnlyCount(0)173 , m_iCaptureDefeatedEnemyCount(0)174 , m_iRangedSupportFireCount("CvUnit::m_iRangedSupportFireCount", m_syncArchive)175 , m_iAlwaysHealCount("CvUnit::m_iAlwaysHealCount", m_syncArchive)176 , m_iHealOutsideFriendlyCount("CvUnit::m_iHealOutsideFriendlyCount", m_syncArchive)177 , m_iHillsDoubleMoveCount("CvUnit::m_iHillsDoubleMoveCount", m_syncArchive)178 , m_iImmuneToFirstStrikesCount("CvUnit::m_iImmuneToFirstStrikesCount", m_syncArchive)179 , m_iExtraVisibilityRange("CvUnit::m_iExtraVisibilityRange", m_syncArchive)180#if defined(MOD_PROMOTIONS_VARIABLE_RECON)181 , m_iExtraReconRange("CvUnit::m_iExtraReconRange", m_syncArchive)182#endif183 , m_iExtraMoves("CvUnit::m_iExtraMoves", m_syncArchive)184 , m_iExtraMoveDiscount("CvUnit::m_iExtraMoveDiscount", m_syncArchive)185 , m_iExtraRange("CvUnit::m_iExtraRange", m_syncArchive)186 , m_iExtraIntercept("CvUnit::m_iExtraIntercept", m_syncArchive)187 , m_iExtraEvasion("CvUnit::m_iExtraEvasion", m_syncArchive)188 , m_iExtraFirstStrikes("CvUnit::m_iExtraFirstStrikes", m_syncArchive)189 , m_iExtraChanceFirstStrikes("CvUnit::m_iExtraChanceFirstStrikes", m_syncArchive)190 , m_iExtraWithdrawal("CvUnit::m_iExtraWithdrawal", m_syncArchive)191 , m_iExtraEnemyHeal("CvUnit::m_iExtraEnemyHeal", m_syncArchive)192 , m_iExtraNeutralHeal("CvUnit::m_iExtraNeutralHeal", m_syncArchive)193 , m_iExtraFriendlyHeal("CvUnit::m_iExtraFriendlyHeal", m_syncArchive)194 , m_iSameTileHeal("CvUnit::m_iSameTileHeal", m_syncArchive)195 , m_iAdjacentTileHeal("CvUnit::m_iAdjacentTileHeal", m_syncArchive)196 , m_iEnemyDamageChance(0)197 , m_iNeutralDamageChance(0)198 , m_iEnemyDamage(0)199 , m_iNeutralDamage(0)200 , m_iNearbyEnemyCombatMod(0)201 , m_iNearbyEnemyCombatRange(0)202 , m_iSapperCount(0)203 , m_iCanHeavyCharge(0)204 , m_iNumExoticGoods(0)205 , m_iAdjacentModifier("CvUnit::m_iAdjacentModifier", m_syncArchive)206 , m_iRangedAttackModifier("CvUnit::m_iRangedAttackModifier", m_syncArchive)207 , m_iInterceptionCombatModifier("CvUnit::m_iInterceptionCombatModifier", m_syncArchive)208 , m_iInterceptionDefenseDamageModifier("CvUnit::m_iInterceptionDefenseDamageModifier", m_syncArchive)209 , m_iAirSweepCombatModifier("CvUnit::m_iAirSweepCombatModifier", m_syncArchive)210 , m_iAttackModifier("CvUnit::m_iAttackModifier", m_syncArchive)211 , m_iDefenseModifier("CvUnit::m_iDefenseModifier", m_syncArchive)212 , m_iExtraCombatPercent("CvUnit::m_iExtraCombatPercent", m_syncArchive)213 , m_iExtraCityAttackPercent("CvUnit::m_iExtraCityAttackPercent", m_syncArchive)214 , m_iExtraCityDefensePercent("CvUnit::m_iExtraCityDefensePercent", m_syncArchive)215 , m_iExtraRangedDefenseModifier("CvUnit::m_iExtraRangedDefenseModifier", m_syncArchive)216 , m_iExtraHillsAttackPercent("CvUnit::m_iExtraHillsAttackPercent", m_syncArchive)217 , m_iExtraHillsDefensePercent("CvUnit::m_iExtraHillsDefensePercent", m_syncArchive)218 , m_iExtraOpenAttackPercent("CvUnit::m_iExtraOpenAttackPercent", m_syncArchive)219 , m_iExtraOpenRangedAttackMod("CvUnit::m_iExtraOpenRangedAttackMod", m_syncArchive)220 , m_iExtraRoughAttackPercent("CvUnit::m_iExtraRoughAttackPercent", m_syncArchive)221 , m_iExtraRoughRangedAttackMod("CvUnit::m_iExtraRoughRangedAttackMod", m_syncArchive)222 , m_iExtraAttackFortifiedMod("CvUnit::m_iExtraAttackFortifiedMod", m_syncArchive)223 , m_iExtraAttackWoundedMod("CvUnit::m_iExtraAttackWoundedMod", m_syncArchive)224 , m_iFlankAttackModifier(0)225 , m_iExtraOpenDefensePercent("CvUnit::m_iExtraOpenDefensePercent", m_syncArchive)226 , m_iExtraRoughDefensePercent("CvUnit::m_iExtraRoughDefensePercent", m_syncArchive)227 , m_iPillageChange("CvUnit::m_iPillageChange", m_syncArchive)228 , m_iUpgradeDiscount("CvUnit::m_iUpgradeDiscount", m_syncArchive)229 , m_iExperiencePercent("CvUnit::m_iExperiencePercent", m_syncArchive)230 , m_iDropRange("CvUnit::m_iDropRange", m_syncArchive)231 , m_iAirSweepCapableCount("CvUnit::m_iAirSweepCapableCount", m_syncArchive)232 , m_iExtraNavalMoves("CvUnit::m_iExtraNavalMoves", m_syncArchive)233 , m_iKamikazePercent("CvUnit::m_iKamikazePercent", m_syncArchive)234 , m_iBaseCombat("CvUnit::m_iBaseCombat", m_syncArchive)235#if defined(MOD_API_EXTENSIONS)236 , m_iBaseRangedCombat(0)237#endif238 , m_eFacingDirection("CvUnit::m_eFacingDirection", m_syncArchive, true)239 , m_iArmyId("CvUnit::m_iArmyId", m_syncArchive)240 , m_iIgnoreTerrainCostCount("CvUnit::m_iIgnoreTerrainCostCount", m_syncArchive)241#if defined(MOD_API_PLOT_BASED_DAMAGE)242 , m_iIgnoreTerrainDamageCount("CvUnit::m_iIgnoreTerrainDamageCount", m_syncArchive)243 , m_iIgnoreFeatureDamageCount("CvUnit::m_iIgnoreFeatureDamageCount", m_syncArchive)244 , m_iExtraTerrainDamageCount("CvUnit::m_iExtraTerrainDamageCount", m_syncArchive)245 , m_iExtraFeatureDamageCount("CvUnit::m_iExtraFeatureDamageCount", m_syncArchive)246#endif247#if defined(MOD_PROMOTIONS_IMPROVEMENT_BONUS)248 , m_iNearbyImprovementCombatBonus("CvUnit::m_iNearbyImprovementCombatBonus", m_syncArchive)249 , m_iNearbyImprovementBonusRange("CvUnit::m_iNearbyImprovementBonusRange", m_syncArchive)250 , m_eCombatBonusImprovement("CvUnit::m_eCombatBonusImprovement", m_syncArchive)251#endif252#if defined(MOD_PROMOTIONS_CROSS_MOUNTAINS)253 , m_iCanCrossMountainsCount("CvUnit::m_iCanCrossMountainsCount", m_syncArchive)254#endif255#if defined(MOD_PROMOTIONS_CROSS_OCEANS)256 , m_iCanCrossOceansCount("CvUnit::m_iCanCrossOceansCount", m_syncArchive)257#endif258#if defined(MOD_PROMOTIONS_CROSS_ICE)259 , m_iCanCrossIceCount("CvUnit::m_iCanCrossIceCount", m_syncArchive)260#endif261#if defined(MOD_PROMOTIONS_GG_FROM_BARBARIANS)262 , m_iGGFromBarbariansCount("CvUnit::m_iGGFromBarbariansCount", m_syncArchive)263#endif264 , m_iRoughTerrainEndsTurnCount("CvUnit::m_iRoughTerrainEndsTurnCount", m_syncArchive)265 , m_iEmbarkAbilityCount("CvUnit::m_iEmbarkAbilityCount", m_syncArchive)266 , m_iHoveringUnitCount("CvUnit::m_iHoveringUnitCount", m_syncArchive)267 , m_iFlatMovementCostCount("CvUnit::m_iFlatMovementCostCount", m_syncArchive)268 , m_iCanMoveImpassableCount("CvUnit::m_iCanMoveImpassableCount", m_syncArchive)269 , m_iOnlyDefensiveCount("CvUnit::m_iOnlyDefensiveCount", m_syncArchive)270 , m_iNoDefensiveBonusCount("CvUnit::m_iNoDefensiveBonusCount", m_syncArchive)271 , m_iNoCaptureCount("CvUnit::m_iNoCaptureCount", m_syncArchive)272 , m_iNukeImmuneCount("CvUnit::m_iNukeImmuneCount", m_syncArchive)273 , m_iHiddenNationalityCount("CvUnit::m_iHiddenNationalityCount", m_syncArchive)274 , m_iAlwaysHostileCount("CvUnit::m_iAlwaysHostileCount", m_syncArchive)275 , m_iNoRevealMapCount("CvUnit::m_iNoRevealMapCount", m_syncArchive)276 , m_iCanMoveAllTerrainCount("CvUnit::m_iCanMoveAllTerrainCount", m_syncArchive)277 , m_iCanMoveAfterAttackingCount("CvUnit::m_iCanMoveAfterAttackingCount", m_syncArchive)278 , m_iFreePillageMoveCount("CvUnit::m_iFreePillageMoveCount", m_syncArchive)279 , m_iHealOnPillageCount(0)280 , m_iHPHealedIfDefeatEnemy("CvUnit::m_iHPHealedIfDefeatEnemy", m_syncArchive)281 , m_iGoldenAgeValueFromKills(0)282 , m_iHealIfDefeatExcludeBarbariansCount("CvUnit::m_iHealIfDefeatExcludeBarbariansCount", m_syncArchive)283 , m_iTacticalAIPlotX("CvUnit::m_iTacticalAIPlotX", m_syncArchive)284 , m_iTacticalAIPlotY("CvUnit::m_iTacticalAIPlotY", m_syncArchive)285 , m_iGarrisonCityID("CvUnit::m_iGarrisonCityID", m_syncArchive) // unused286 , m_iFlags("CvUnit::m_iFlags", m_syncArchive)287 , m_iNumAttacks("CvUnit::m_iNumAttacks", m_syncArchive)288 , m_iAttacksMade("CvUnit::m_iAttacksMade", m_syncArchive)289 , m_iGreatGeneralCount("CvUnit::m_iGreatGeneralCount", m_syncArchive)290 , m_iGreatAdmiralCount(0)291#if defined(MOD_PROMOTIONS_AURA_CHANGE)292 , m_iAuraRangeChange(0)293 , m_iAuraEffectChange(0)294#endif295 , m_iGreatGeneralModifier("CvUnit::m_iGreatGeneralModifier", m_syncArchive)296#if defined(MOD_UNITS_NO_SUPPLY)297 , m_iNoSupply(0)298#endif299#if defined(MOD_UNITS_MAX_HP)300 , m_iMaxHitPointsBase(GC.getMAX_HIT_POINTS())301 , m_iMaxHitPointsChange(0)302 , m_iMaxHitPointsModifier(0)303#endif304 , m_iFriendlyLandsModifier("CvUnit::m_iFriendlyLandsModifier", m_syncArchive)305 , m_iFriendlyLandsAttackModifier("CvUnit::m_iFriendlyLandsAttackModifier", m_syncArchive)306 , m_iOutsideFriendlyLandsModifier("CvUnit::m_iOutsideFriendlyLandsModifier", m_syncArchive)307 , m_iNumInterceptions("CvUnit::m_iNumInterceptions", m_syncArchive)308 , m_iMadeInterceptionCount("CvUnit::m_iMadeInterceptionCount", m_syncArchive)309 , m_iEverSelectedCount(0)310 , m_bIgnoreDangerWakeup(false) // slewis - make autovariable when saved games are broken311 , m_iEmbarkedAllWaterCount(0)312#if defined(MOD_PROMOTIONS_DEEP_WATER_EMBARKATION)313 , m_iEmbarkedDeepWaterCount(0)314#endif315 , m_iEmbarkExtraVisibility(0)316 , m_iEmbarkDefensiveModifier(0)317 , m_iCapitalDefenseModifier(0)318 , m_iCapitalDefenseFalloff(0)319 , m_iCityAttackPlunderModifier(0)320 , m_iReligiousStrengthLossRivalTerritory(0)321 , m_iTradeMissionInfluenceModifier(0)322 , m_iTradeMissionGoldModifier(0)323#if defined(MOD_PROMOTIONS_UNIT_NAMING)324 , m_strUnitName("")325#endif326 , m_strName("")327#if defined(MOD_GLOBAL_NO_LOST_GREATWORKS)328 , m_strGreatName("")329#endif330 , m_eGreatWork(NO_GREAT_WORK)331 , m_iTourismBlastStrength(0)332 , m_bPromotionReady("CvUnit::m_bPromotionReady", m_syncArchive)333 , m_bDeathDelay("CvUnit::m_bDeathDelay", m_syncArchive)334 , m_bCombatFocus("CvUnit::m_bCombatFocus", m_syncArchive)335 , m_bInfoBarDirty("CvUnit::m_bInfoBarDirty", m_syncArchive)336 , m_bNotConverting("CvUnit::m_bNotConverting", m_syncArchive)337 , m_bAirCombat("CvUnit::m_bAirCombat", m_syncArchive)338 , m_bSetUpForRangedAttack("CvUnit::m_bSetUpForRangedAttack", m_syncArchive)339 , m_bEmbarked("CvUnit::m_bEmbarked", m_syncArchive)340 , m_bAITurnProcessed("CvUnit::m_bAITurnProcessed", m_syncArchive, false, true)341 , m_eTacticalMove("CvUnit::m_eTacticalMove", m_syncArchive)342 , m_eOwner("CvUnit::m_eOwner", m_syncArchive)343 , m_eOriginalOwner("CvUnit::m_eOriginalOwner", m_syncArchive)344 , m_eCapturingPlayer("CvUnit::m_eCapturingPlayer", m_syncArchive)345 , m_bCapturedAsIs(false)346 , m_eUnitType("CvUnit::m_eUnitType", m_syncArchive)347 , m_eLeaderUnitType("CvUnit::m_eLeaderUnitType", m_syncArchive)348 , m_eInvisibleType("CvUnit::m_eInvisibleType", m_syncArchive)349 , m_eSeeInvisibleType("CvUnit::m_eSeeInvisibleType", m_syncArchive)350 , m_eGreatPeopleDirectiveType("CvUnit::m_eGreatPeopleDirectiveType", m_syncArchive)351 , m_combatUnit()352 , m_transportUnit()353 , m_extraDomainModifiers()354 , m_strNameIAmNotSupposedToBeUsedAnyMoreBecauseThisShouldNotBeCheckedAndWeNeedToPreserveSaveGameCompatibility("CvUnit::m_strNameIAmNotSupposedToBeUsedAnyMoreBecauseThisShouldNotBeCheckedAndWeNeedToPreserveSaveGameCompatibility", m_syncArchive, "")355 , m_strScriptData("CvUnit::m_szScriptData", m_syncArchive)356 , m_iScenarioData(0)357 , m_terrainDoubleMoveCount("CvUnit::m_terrainDoubleMoveCount", m_syncArchive)358 , m_featureDoubleMoveCount("CvUnit::m_featureDoubleMoveCount", m_syncArchive)359#if defined(MOD_PROMOTIONS_HALF_MOVE)360 , m_terrainHalfMoveCount("CvUnit::m_terrainHalfMoveCount", m_syncArchive)361 , m_featureHalfMoveCount("CvUnit::m_featureHalfMoveCount", m_syncArchive)362#endif363 , m_terrainImpassableCount("CvUnit::m_terrainImpassableCount", m_syncArchive)364 , m_featureImpassableCount("CvUnit::m_featureImpassableCount", m_syncArchive)365 , m_extraTerrainAttackPercent("CvUnit::m_extraTerrainAttackPercent", m_syncArchive/*, true*/)366 , m_extraTerrainDefensePercent("CvUnit::m_extraTerrainDefensePercent", m_syncArchive/*, true*/)367 , m_extraFeatureAttackPercent("CvUnit::m_extraFeatureAttackPercent", m_syncArchive/*, true*/)368 , m_extraFeatureDefensePercent("CvUnit::m_extraFeatureDefensePercent", m_syncArchive/*, true*/)369#if defined(MOD_API_UNIFIED_YIELDS)370 , m_yieldFromKills("CvUnit::m_yieldFromKills", m_syncArchive/*, true*/)371 , m_yieldFromBarbarianKills("CvUnit::m_yieldFromBarbarianKills", m_syncArchive/*, true*/)372#endif373 , m_extraUnitCombatModifier("CvUnit::m_extraUnitCombatModifier", m_syncArchive/*, true*/)374 , m_unitClassModifier("CvUnit::m_unitClassModifier", m_syncArchive/*, true*/)375 , m_iMissionTimer(0)376 , m_iMissionAIX("CvUnit::m_iMissionAIX", m_syncArchive)377 , m_iMissionAIY("CvUnit::m_iMissionAIY", m_syncArchive)378 , m_eMissionAIType("CvUnit::m_eMissionAIType", m_syncArchive)379 , m_missionAIUnit()380 , m_eActivityType("CvUnit::m_eActivityType", m_syncArchive, true)381 , m_eAutomateType("CvUnit::m_eAutomateType", m_syncArchive)382 , m_eUnitAIType("CvUnit::m_eUnitAIType", m_syncArchive)383 , m_thisHandle(this)384 , m_bWaitingForMove(false)385 , m_pReligion(FNEW(CvUnitReligion, c_eCiv5GameplayDLL, 0))386 , m_iMapLayer(DEFAULT_UNIT_MAP_LAYER)387 , m_iNumGoodyHutsPopped(0)388 , m_iLastGameTurnAtFullHealth(-1)389{390 initPromotions();391 OBJECT_ALLOCATED392 FSerialization::unitsToCheck.insert(this);393 reset(0, NO_UNIT, NO_PLAYER, true);394}