Bazaar developer reference

CvUnit::reset(int, UnitTypes, PlayerTypes, bool)

Defined in
CvUnit.cpp, line 862
Class
CvUnit
Hook name
CivHooks::CvUnit_reset

Hooks

static bool BeforeCvUnit_reset(CvUnit* self, int iID, UnitTypes eUnit, PlayerTypes eOwner, bool bConstructorCall);static void AfterCvUnit_reset(CvUnit* self, int iID, UnitTypes eUnit, PlayerTypes eOwner, bool bConstructorCall);static void ReplaceCvUnit_reset(void (*original)(CvUnit*, int, UnitTypes, PlayerTypes, bool), CvUnit* self, int iID, UnitTypes eUnit, PlayerTypes eOwner, bool bConstructorCall);CivRegisterBefore<CivHooks::CvUnit_reset>(host, &BeforeCvUnit_reset);CivRegisterAfter<CivHooks::CvUnit_reset>(host, &AfterCvUnit_reset);CivRegisterReplace<CivHooks::CvUnit_reset>(host, &ReplaceCvUnit_reset);

Code

860// FUNCTION: reset()861// Initializes data members that are serialized.862void CvUnit::reset(int iID, UnitTypes eUnit, PlayerTypes eOwner, bool bConstructorCall)863{864	VALIDATE_OBJECT865	int iI;866867	FAutoArchive& archive = getSyncArchive();868	archive.clearDelta();869	archive.reset();870871	m_iID = iID;872	m_iHotKeyNumber = -1;873	m_iX = INVALID_PLOT_COORD;874	m_iY = INVALID_PLOT_COORD;875	m_iLastMoveTurn = 0;876	m_iCycleOrder = -1;877#if defined(MOD_API_UNIT_STATS)878	m_iStatsTravelled = 0;879	m_iStatsKilled = 0;880#endif881	m_iDeployFromOperationTurn = -100;882	m_iReconX = INVALID_PLOT_COORD;883	m_iReconY = INVALID_PLOT_COORD;884	m_iReconCount = 0;885	m_iGameTurnCreated = 0;886	m_iDamage = 0;887	m_iMoves = 0;888	m_bImmobile = false;889	m_iExperience = 0;890#if defined(MOD_UNITS_XP_TIMES_100)891	m_iExperienceTimes100 = 0;892#endif893	m_iLevel = 1;894	m_iCargo = 0;895	m_iAttackPlotX = INVALID_PLOT_COORD;896	m_iAttackPlotY = INVALID_PLOT_COORD;897	m_iCombatTimer = 0;898	m_iCombatFirstStrikes = 0;899	m_iCombatDamage = 0;900	m_iFortifyTurns = 0;901	m_bFortifiedThisTurn = false;902	m_iBlitzCount = 0;903	m_iAmphibCount = 0;904	m_iRiverCrossingNoPenaltyCount = 0;905	m_iEnemyRouteCount = 0;906	m_iRivalTerritoryCount = 0;907	m_iMustSetUpToRangedAttackCount = 0;908	m_iRangeAttackIgnoreLOSCount = 0;909	m_iCityAttackOnlyCount = 0;910	m_iCaptureDefeatedEnemyCount = 0;911	m_iRangedSupportFireCount = 0;912	m_iAlwaysHealCount = 0;913	m_iHealOutsideFriendlyCount = 0;914	m_iHillsDoubleMoveCount = 0;915	m_iImmuneToFirstStrikesCount = 0;916	m_iExtraVisibilityRange = 0;917#if defined(MOD_PROMOTIONS_VARIABLE_RECON)918	m_iExtraReconRange = 0;919#endif920	m_iExtraMoves = 0;921	m_iExtraMoveDiscount = 0;922	m_iExtraRange = 0;923	m_iExtraIntercept = 0;924	m_iExtraEvasion = 0;925	m_iExtraFirstStrikes = 0;926	m_iExtraChanceFirstStrikes = 0;927	m_iExtraWithdrawal = 0;928	m_iExtraEnemyHeal = 0;929	m_iExtraNeutralHeal = 0;930	m_iExtraFriendlyHeal = 0;931	m_iSameTileHeal = 0;932	m_iAdjacentTileHeal = 0;933	m_iEnemyDamageChance = 0;934	m_iNeutralDamageChance = 0;935	m_iEnemyDamage = 0;936	m_iNeutralDamage = 0;937	m_iNearbyEnemyCombatMod = 0;938	m_iNearbyEnemyCombatRange = 0;939	m_iExtraCombatPercent = 0;940	m_iAdjacentModifier = 0;941	m_iRangedAttackModifier = 0;942	m_iInterceptionCombatModifier = 0;943	m_iInterceptionDefenseDamageModifier = 0;944	m_iAirSweepCombatModifier = 0;945	m_iAttackModifier = 0;946	m_iDefenseModifier = 0;947	m_iExtraCityAttackPercent = 0;948	m_iExtraCityDefensePercent = 0;949	m_iExtraRangedDefenseModifier = 0;950	m_iExtraHillsAttackPercent = 0;951	m_iExtraHillsDefensePercent = 0;952	m_iExtraOpenAttackPercent = 0;953	m_iExtraOpenRangedAttackMod= 0;954	m_iExtraRoughAttackPercent = 0;955	m_iExtraRoughRangedAttackMod= 0;956	m_iExtraAttackFortifiedMod= 0;957	m_iExtraAttackWoundedMod= 0;958	m_iFlankAttackModifier=0;959	m_iExtraOpenDefensePercent = 0;960	m_iExtraRoughDefensePercent = 0;961	m_iPillageChange = 0;962	m_iUpgradeDiscount = 0;963	m_iExperiencePercent = 0;964	m_iDropRange = 0;965	m_iAirSweepCapableCount = 0;966	m_iExtraNavalMoves = 0;967	m_iKamikazePercent = 0;968	m_eFacingDirection = DIRECTION_SOUTHEAST;969	m_iIgnoreTerrainCostCount = 0;970#if defined(MOD_API_PLOT_BASED_DAMAGE)971	m_iIgnoreTerrainDamageCount = 0;972	m_iIgnoreFeatureDamageCount = 0;973	m_iExtraTerrainDamageCount = 0;974	m_iExtraFeatureDamageCount = 0;975#endif976#if defined(MOD_PROMOTIONS_IMPROVEMENT_BONUS)977	m_iNearbyImprovementCombatBonus = 0;978	m_iNearbyImprovementBonusRange = 0;979	m_eCombatBonusImprovement = NO_IMPROVEMENT;980#endif981#if defined(MOD_PROMOTIONS_CROSS_MOUNTAINS)982	m_iCanCrossMountainsCount = 0;983#endif984#if defined(MOD_PROMOTIONS_CROSS_OCEANS)985	m_iCanCrossOceansCount = 0;986#endif987#if defined(MOD_PROMOTIONS_CROSS_ICE)988	m_iCanCrossIceCount = 0;989#endif990#if defined(MOD_PROMOTIONS_GG_FROM_BARBARIANS)991	m_iGGFromBarbariansCount = 0;992#endif993	m_iRoughTerrainEndsTurnCount = 0;994	m_iEmbarkAbilityCount = 0;995	m_iHoveringUnitCount = 0;996	m_iFlatMovementCostCount = 0;997	m_iCanMoveImpassableCount = 0;998	m_iOnlyDefensiveCount = 0;999	m_iNoDefensiveBonusCount = 0;1000	m_iNoCaptureCount = 0;1001	m_iNukeImmuneCount = 0;1002	m_iAlwaysHealCount = 0;1003	m_iHiddenNationalityCount = 0;1004	m_iAlwaysHostileCount = 0;1005	m_iNoRevealMapCount = 0;1006	m_iCanMoveAllTerrainCount = 0;1007	m_iCanMoveAfterAttackingCount = 0;1008	m_iFreePillageMoveCount = 0;1009	m_iHPHealedIfDefeatEnemy = 0;1010	m_iGoldenAgeValueFromKills = 0;1011	m_iSapperCount = 0;1012	m_iCanHeavyCharge = 0;1013	m_iNumExoticGoods = 0;1014	m_iTacticalAIPlotX = INVALID_PLOT_COORD;1015	m_iTacticalAIPlotY = INVALID_PLOT_COORD;1016	m_iGarrisonCityID = -1;   // unused1017	m_iFlags = 0;1018	m_iNumAttacks = 1;1019	m_iAttacksMade = 0;1020	m_iGreatGeneralCount = 0;1021	m_iGreatAdmiralCount = 0;1022#if defined(MOD_PROMOTIONS_AURA_CHANGE)1023	m_iAuraRangeChange = 0;1024	m_iAuraEffectChange = 0;1025#endif1026	m_iGreatGeneralModifier = 0;1027	m_iGreatGeneralReceivesMovementCount = 0;1028	m_iGreatGeneralCombatModifier = 0;1029	m_iIgnoreGreatGeneralBenefit = 0;1030	m_iIgnoreZOC = 0;1031#if defined(MOD_UNITS_NO_SUPPLY)1032	m_iNoSupply = 0;1033#endif1034	m_iHealIfDefeatExcludeBarbariansCount = 0;1035	m_iNumInterceptions = 1;1036	m_iMadeInterceptionCount = 0;1037	m_iEverSelectedCount = 0;10381039	m_bIgnoreDangerWakeup = false;1040	m_iEmbarkedAllWaterCount = 0;1041#if defined(MOD_PROMOTIONS_DEEP_WATER_EMBARKATION)1042	m_iEmbarkedDeepWaterCount = 0;1043#endif1044	m_iEmbarkExtraVisibility = 0;1045	m_iEmbarkDefensiveModifier = 0;1046	m_iCapitalDefenseModifier = 0;1047	m_iCapitalDefenseFalloff = 0;1048	m_iCityAttackPlunderModifier = 0;1049	m_iReligiousStrengthLossRivalTerritory = 0;1050	m_iTradeMissionInfluenceModifier = 0;1051	m_iTradeMissionGoldModifier = 0;10521053	m_bPromotionReady = false;1054	m_bDeathDelay = false;1055	m_bCombatFocus = false;1056	m_bInfoBarDirty = false;1057	m_bNotConverting = false;1058	m_bAirCombat = false;1059	m_bSetUpForRangedAttack = false;1060	m_bEmbarked = false;1061	m_bAITurnProcessed = false;1062	m_bWaitingForMove = false;1063	m_eTacticalMove = NO_TACTICAL_MOVE;10641065	m_eOwner = eOwner;1066	m_eOriginalOwner = eOwner;1067	m_eCapturingPlayer = NO_PLAYER;1068	m_bCapturedAsIs = false;1069	m_eUnitType = eUnit;1070	m_pUnitInfo = (NO_UNIT != m_eUnitType) ? GC.getUnitInfo(m_eUnitType) : NULL;1071	m_iBaseCombat = (NO_UNIT != m_eUnitType) ? m_pUnitInfo->GetCombat() : 0;1072#if defined(MOD_API_EXTENSIONS)1073	m_iBaseRangedCombat = (NO_UNIT != m_eUnitType) ? m_pUnitInfo->GetRangedCombat() : 0;1074#endif1075#if defined(MOD_UNITS_MAX_HP)1076	m_iMaxHitPointsBase = (NO_UNIT != m_eUnitType) ? m_pUnitInfo->GetMaxHitPoints() : GC.getMAX_HIT_POINTS();1077	m_iMaxHitPointsChange = 0;1078	m_iMaxHitPointsModifier = 0;1079#endif1080	m_eLeaderUnitType = NO_UNIT;1081	m_eInvisibleType = NO_INVISIBLE;1082	m_eSeeInvisibleType = NO_INVISIBLE;1083	m_eGreatPeopleDirectiveType = NO_GREAT_PEOPLE_DIRECTIVE_TYPE;1084	m_iCargoCapacity = 0;10851086	m_combatUnit.reset();1087	m_transportUnit.reset();10881089	m_extraDomainModifiers.clear();10901091	for(iI = 0; iI < NUM_DOMAIN_TYPES; iI++)1092	{1093		m_extraDomainModifiers.push_back(0);1094	}10951096#if defined(MOD_PROMOTIONS_UNIT_NAMING)1097	m_strUnitName = "";1098#endif1099	m_strName = "";1100#if defined(MOD_GLOBAL_NO_LOST_GREATWORKS)1101	m_strGreatName = "";1102#endif1103	m_eGreatWork = NO_GREAT_WORK;1104	m_iTourismBlastStrength = 0;1105	m_strNameIAmNotSupposedToBeUsedAnyMoreBecauseThisShouldNotBeCheckedAndWeNeedToPreserveSaveGameCompatibility = "";1106	m_strScriptData ="";1107	m_iScenarioData = 0;11081109	m_unitMoveLocs.clear();11101111	uninitInfos();11121113	// Migrated in from CvSelectionGroup1114	m_iMissionTimer = 0;1115	m_eActivityType = ACTIVITY_AWAKE;1116	m_eAutomateType = NO_AUTOMATE;11171118	m_kLastPath.clear();1119	m_uiLastPathCacheDest = (uint)-1;11201121	m_iMapLayer = DEFAULT_UNIT_MAP_LAYER;1122	m_iNumGoodyHutsPopped = 0;1123	m_iLastGameTurnAtFullHealth = -1;11241125	if(!bConstructorCall)1126	{1127		m_Promotions.Reset();11281129		CvAssertMsg((0 < GC.getNumTerrainInfos()), "GC.getNumTerrainInfos() is not greater than zero but a float array is being allocated in CvUnit::reset");1130		m_terrainDoubleMoveCount.clear();1131#if defined(MOD_PROMOTIONS_HALF_MOVE)1132		m_terrainHalfMoveCount.clear();1133#endif1134		m_terrainImpassableCount.clear();1135		m_extraTerrainAttackPercent.clear();1136		m_extraTerrainDefensePercent.clear();11371138		m_terrainDoubleMoveCount.resize(GC.getNumTerrainInfos());1139#if defined(MOD_PROMOTIONS_HALF_MOVE)1140		m_terrainHalfMoveCount.resize(GC.getNumTerrainInfos());1141#endif1142		m_terrainImpassableCount.resize(GC.getNumTerrainInfos());1143		m_extraTerrainAttackPercent.resize(GC.getNumTerrainInfos());1144		m_extraTerrainDefensePercent.resize(GC.getNumTerrainInfos());11451146		for(int i = 0; i < GC.getNumTerrainInfos(); i++)1147		{1148			m_terrainDoubleMoveCount.setAt(i,0);1149#if defined(MOD_PROMOTIONS_HALF_MOVE)1150			m_terrainHalfMoveCount.setAt(i,0);1151#endif1152			m_terrainImpassableCount.setAt(i,0);1153			m_extraTerrainAttackPercent.setAt(i,0);1154			m_extraTerrainDefensePercent.setAt(i,0);1155		}11561157		CvAssertMsg((0 < GC.getNumFeatureInfos()), "GC.getNumFeatureInfos() is not greater than zero but a float array is being allocated in CvUnit::reset");1158		m_featureDoubleMoveCount.clear();1159#if defined(MOD_PROMOTIONS_HALF_MOVE)1160		m_featureHalfMoveCount.clear();1161#endif1162		m_featureImpassableCount.clear();1163		m_extraFeatureDefensePercent.clear();1164		m_extraFeatureAttackPercent.clear();11651166		m_featureDoubleMoveCount.resize(GC.getNumFeatureInfos());1167#if defined(MOD_PROMOTIONS_HALF_MOVE)1168		m_featureHalfMoveCount.resize(GC.getNumFeatureInfos());1169#endif1170		m_featureImpassableCount.resize(GC.getNumFeatureInfos());1171		m_extraFeatureDefensePercent.resize(GC.getNumFeatureInfos());1172		m_extraFeatureAttackPercent.resize(GC.getNumFeatureInfos());11731174		for(int i = 0; i < GC.getNumFeatureInfos(); i++)1175		{1176			m_featureDoubleMoveCount.setAt(i,0);1177#if defined(MOD_PROMOTIONS_HALF_MOVE)1178			m_featureHalfMoveCount.setAt(i,0);1179#endif1180			m_featureImpassableCount.setAt(i,0);1181			m_extraFeatureAttackPercent.setAt(i,0);1182			m_extraFeatureDefensePercent.setAt(i,0);1183		}11841185#if defined(MOD_API_UNIFIED_YIELDS)1186		m_yieldFromKills.clear();1187		m_yieldFromBarbarianKills.clear();1188		1189		m_yieldFromKills.resize(NUM_YIELD_TYPES);1190		m_yieldFromBarbarianKills.resize(NUM_YIELD_TYPES);11911192		for(int i = 0; i < NUM_YIELD_TYPES; i++)1193		{1194			m_yieldFromKills.setAt(i,0);1195			m_yieldFromBarbarianKills.setAt(i,0);1196		}1197#endif11981199		CvAssertMsg((0 < GC.getNumUnitCombatClassInfos()), "GC.getNumUnitCombatClassInfos() is not greater than zero but an array is being allocated in CvUnit::reset");1200		m_extraUnitCombatModifier.clear();1201		m_extraUnitCombatModifier.resize(GC.getNumUnitCombatClassInfos());1202		for(int i = 0; i < GC.getNumUnitCombatClassInfos(); i++)1203		{1204			m_extraUnitCombatModifier.setAt(i,0);1205		}12061207		m_unitClassModifier.clear();1208		m_unitClassModifier.resize(GC.getNumUnitClassInfos());1209		for(int i = 0; i < GC.getNumUnitClassInfos(); i++)1210		{1211			CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo((UnitClassTypes)i);1212			if(!pkUnitClassInfo)1213			{1214				continue;1215			}12161217			m_unitClassModifier.setAt(i,0);1218		}12191220		// Migrated in from CvSelectionGroup1221		m_iMissionAIX = INVALID_PLOT_COORD;1222		m_iMissionAIY = INVALID_PLOT_COORD;1223		m_eMissionAIType = NO_MISSIONAI;1224		m_missionAIUnit.reset();12251226		m_eUnitAIType = NO_UNITAI;1227	}1228}

Calls

Called by