Bazaar developer reference

CvCity::reset(int, PlayerTypes, int, int, bool)

Defined in
CvCity.cpp, line 838
Class
CvCity
Hook name
CivHooks::CvCity_reset

Hooks

static bool BeforeCvCity_reset(CvCity* self, int iID, PlayerTypes eOwner, int iX, int iY, bool bConstructorCall);static void AfterCvCity_reset(CvCity* self, int iID, PlayerTypes eOwner, int iX, int iY, bool bConstructorCall);static void ReplaceCvCity_reset(void (*original)(CvCity*, int, PlayerTypes, int, int, bool), CvCity* self, int iID, PlayerTypes eOwner, int iX, int iY, bool bConstructorCall);CivRegisterBefore<CivHooks::CvCity_reset>(host, &BeforeCvCity_reset);CivRegisterAfter<CivHooks::CvCity_reset>(host, &AfterCvCity_reset);CivRegisterReplace<CivHooks::CvCity_reset>(host, &ReplaceCvCity_reset);

Code

836// FUNCTION: reset()837// Initializes data members that are serialized.838void CvCity::reset(int iID, PlayerTypes eOwner, int iX, int iY, bool bConstructorCall)839{840	VALIDATE_OBJECT841	m_syncArchive.reset();842843	int iI;844845	//--------------------------------846	// Uninit class847	uninit();848849	m_iID = iID;850	m_iX = iX;851	m_iY = iY;852	m_iRallyX = INVALID_PLOT_COORD;853	m_iRallyY = INVALID_PLOT_COORD;854	m_iGameTurnFounded = 0;855	m_iGameTurnAcquired = 0;856	m_iPopulation = 0;857#if defined(MOD_GLOBAL_CITY_AUTOMATON_WORKERS)858	m_iAutomatons = 0;859#endif860	m_iHighestPopulation = 0;861	m_iExtraHitPoints = 0;862	m_iNumGreatPeople = 0;863	m_iBaseGreatPeopleRate = 0;864	m_iGreatPeopleRateModifier = 0;865	m_iJONSCultureStored = 0;866	m_iJONSCultureLevel = 0;867	m_iJONSCulturePerTurnFromBuildings = 0;868	m_iJONSCulturePerTurnFromPolicies = 0;869	m_iJONSCulturePerTurnFromSpecialists = 0;870	m_iJONSCulturePerTurnFromReligion = 0;871	m_iFaithPerTurnFromBuildings = 0;872	m_iFaithPerTurnFromPolicies = 0;873	m_iFaithPerTurnFromReligion = 0;874	m_iCultureRateModifier = 0;875	m_iNumWorldWonders = 0;876	m_iNumTeamWonders = 0;877	m_iNumNationalWonders = 0;878	m_iWonderProductionModifier = 0;879	m_iCapturePlunderModifier = 0;880	m_iPlotCultureCostModifier = 0;881	m_iPlotBuyCostModifier = 0;882#if defined(MOD_BUILDINGS_CITY_WORKING)883	m_iCityWorkingChange = 0;884#endif885#if defined(MOD_BUILDINGS_CITY_AUTOMATON_WORKERS)886	m_iCityAutomatonWorkersChange = 0;887#endif888	m_iMaintenance = 0;889	m_iHealRate = 0;890	m_iEspionageModifier = 0;891#if defined(MOD_RELIGION_CONVERSION_MODIFIERS)892	m_iConversionModifier = 0;893#endif894	m_iNoOccupiedUnhappinessCount = 0;895	m_iFood = 0;896	m_iFoodKept = 0;897	m_iMaxFoodKeptPercent = 0;898	m_iOverflowProduction = 0;899	m_iFeatureProduction = 0;900	m_iMilitaryProductionModifier = 0;901	m_iSpaceProductionModifier = 0;902	m_iFreeExperience = 0;903	m_iCurrAirlift = 0; // unused904	m_iMaxAirUnits = GC.getBASE_CITY_AIR_STACKING();905	m_iAirModifier = 0; // unused906	m_iNukeModifier = 0;907	m_iTradeRouteRecipientBonus = 0;908	m_iTradeRouteTargetBonus = 0;909	m_iCultureUpdateTimer = 0;910	m_iCitySizeBoost = 0;911	m_iSpecialistFreeExperience = 0;912	m_iStrengthValue = 0;913	m_iDamage = 0;914	m_iThreatValue = 0;915	m_iGarrisonedUnit = -1;    // unused916	m_iResourceDemanded = -1;917	m_iWeLoveTheKingDayCounter = 0;918	m_iLastTurnGarrisonAssigned = -1;919	m_iThingsProduced = 0;920	m_iDemandResourceCounter = 0;921	m_iResistanceTurns = 0;922	m_iRazingTurns = 0;923	m_iCountExtraLuxuries = 0;924	m_iCheapestPlotInfluence = 0;925	m_unitBeingBuiltForOperation.Invalidate();926927	m_bNeverLost = true;928	m_bDrafted = false;929	m_bAirliftTargeted = false;   // unused930	m_bProductionAutomated = false;931	m_bLayoutDirty = false;932	m_bMadeAttack = false;933	m_bOccupied = false;934	m_bPuppet = false;935	m_bIgnoreCityForHappiness = false;936	m_bEverCapital = false;937	m_bIndustrialRouteToCapital = false;938	m_bFeatureSurrounded = false;939	m_bOwedCultureBuilding = false;940#if defined(MOD_BUGFIX_FREE_FOOD_BUILDING)941	m_bOwedFoodBuilding = false;942#endif943944	m_eOwner = eOwner;945	m_ePreviousOwner = NO_PLAYER;946	m_eOriginalOwner = eOwner;947	m_ePlayersReligion = NO_PLAYER;948949950	m_aiSeaPlotYield.resize(NUM_YIELD_TYPES);951	m_aiRiverPlotYield.resize(NUM_YIELD_TYPES);952	m_aiSeaResourceYield.resize(NUM_YIELD_TYPES);953	m_aiLakePlotYield.resize(NUM_YIELD_TYPES);954	m_aiBaseYieldRateFromTerrain.resize(NUM_YIELD_TYPES);955	m_aiBaseYieldRateFromBuildings.resize(NUM_YIELD_TYPES);956	m_aiBaseYieldRateFromSpecialists.resize(NUM_YIELD_TYPES);957	m_aiBaseYieldRateFromMisc.resize(NUM_YIELD_TYPES);958	m_aiBaseYieldRateFromReligion.resize(NUM_YIELD_TYPES);959	m_aiYieldPerPop.resize(NUM_YIELD_TYPES);960	m_aiYieldPerReligion.resize(NUM_YIELD_TYPES);961	m_aiYieldRateModifier.resize(NUM_YIELD_TYPES);962	m_aiPowerYieldRateModifier.resize(NUM_YIELD_TYPES);963	m_aiResourceYieldRateModifier.resize(NUM_YIELD_TYPES);964	m_aiExtraSpecialistYield.resize(NUM_YIELD_TYPES);965	m_aiProductionToYieldModifier.resize(NUM_YIELD_TYPES);966	for(iI = 0; iI < NUM_YIELD_TYPES; iI++)967	{968		m_aiSeaPlotYield.setAt(iI, 0);969		m_aiRiverPlotYield.setAt(iI, 0);970		m_aiLakePlotYield.setAt(iI, 0);971		m_aiSeaResourceYield.setAt(iI, 0);972		m_aiBaseYieldRateFromTerrain.setAt(iI, 0);973		m_aiBaseYieldRateFromBuildings.setAt(iI, 0);974		m_aiBaseYieldRateFromSpecialists.setAt(iI, 0);975		m_aiBaseYieldRateFromMisc.setAt(iI, 0);976		m_aiBaseYieldRateFromReligion[iI] = 0;977		m_aiYieldPerPop.setAt(iI, 0);978		m_aiYieldPerReligion[iI] = 0;979		m_aiYieldRateModifier.setAt(iI, 0);980		m_aiPowerYieldRateModifier.setAt(iI, 0);981		m_aiResourceYieldRateModifier.setAt(iI, 0);982		m_aiExtraSpecialistYield.setAt(iI, 0);983		m_aiProductionToYieldModifier.setAt(iI, 0);984	}985986	m_aiDomainFreeExperience.resize(NUM_DOMAIN_TYPES);987	m_aiDomainProductionModifier.resize(NUM_DOMAIN_TYPES);988	for(iI = 0; iI < NUM_DOMAIN_TYPES; iI++)989	{990		m_aiDomainFreeExperience.setAt(iI, 0);991		m_aiDomainProductionModifier.setAt(iI, 0);992	}993994	m_abEverOwned.resize(REALLY_MAX_PLAYERS);995	for(iI = 0; iI < REALLY_MAX_PLAYERS; iI++)996	{997		m_abEverOwned.setAt(iI, false);998	}9991000	m_abRevealed.resize(REALLY_MAX_TEAMS);1001	for(iI = 0; iI < REALLY_MAX_TEAMS; iI++)1002	{1003		m_abRevealed.setAt(iI, false);1004	}10051006	m_strName = "";1007	m_strNameIAmNotSupposedToBeUsedAnyMoreBecauseThisShouldNotBeCheckedAndWeNeedToPreserveSaveGameCompatibility = "";1008	m_strScriptData = "";10091010	m_bPopulationRankValid = false;1011	m_iPopulationRank = -1;10121013	m_abBaseYieldRankValid.resize(NUM_YIELD_TYPES);1014	m_abYieldRankValid.resize(NUM_YIELD_TYPES);1015	m_aiBaseYieldRank.resize(NUM_YIELD_TYPES);1016	m_aiYieldRank.resize(NUM_YIELD_TYPES);1017	for(iI = 0; iI < NUM_YIELD_TYPES; iI++)1018	{1019		m_abBaseYieldRankValid.setAt(iI, false);1020		m_abYieldRankValid.setAt(iI, false);1021		m_aiBaseYieldRank.setAt(iI, -1);1022		m_aiYieldRank.setAt(iI, -1);1023	}10241025	if(!bConstructorCall)1026	{1027		int iNumResources = GC.getNumResourceInfos();1028		CvAssertMsg((0 < iNumResources),  "GC.getNumResourceInfos() is not greater than zero but an array is being allocated in CvCity::reset");1029		m_paiNoResource.clear();1030		m_paiNoResource.resize(iNumResources);1031		m_paiFreeResource.clear();1032		m_paiFreeResource.resize(iNumResources);1033		m_paiNumResourcesLocal.clear();1034		m_paiNumResourcesLocal.resize(iNumResources);1035		for(iI = 0; iI < iNumResources; iI++)1036		{1037			m_paiNoResource.setAt(iI, 0);1038			m_paiFreeResource.setAt(iI, 0);1039			m_paiNumResourcesLocal.setAt(iI, 0);1040		}10411042		int iNumProjectInfos = GC.getNumProjectInfos();1043		m_paiProjectProduction.clear();1044		m_paiProjectProduction.resize(iNumProjectInfos);1045		for(iI = 0; iI < iNumProjectInfos; iI++)1046		{1047			m_paiProjectProduction.setAt(iI, 0);1048		}10491050		int iNumSpecialistInfos = GC.getNumSpecialistInfos();1051		m_paiSpecialistProduction.clear();1052		m_paiSpecialistProduction.resize(iNumSpecialistInfos);1053		for(iI = 0; iI < GC.getNumSpecialistInfos(); iI++)1054		{1055			m_paiSpecialistProduction.setAt(iI, 0);1056		}10571058		m_pCityBuildings->Init(GC.GetGameBuildings(), this);10591060		int iNumUnitInfos = GC.getNumUnitInfos();1061		CvAssertMsg((0 < iNumUnitInfos),  "GC.getNumUnitInfos() is not greater than zero but an array is being allocated in CvCity::reset");1062		m_paiUnitProduction.clear();1063		m_paiUnitProduction.resize(iNumUnitInfos);1064		m_paiUnitProductionTime.clear();1065		m_paiUnitProductionTime.resize(iNumUnitInfos);1066		for(iI = 0; iI < iNumUnitInfos; iI++)1067		{1068			m_paiUnitProduction.setAt(iI, 0);1069			m_paiUnitProductionTime.setAt(iI, 0);1070		}10711072		CvAssertMsg((0 < iNumSpecialistInfos),  "GC.getNumSpecialistInfos() is not greater than zero but an array is being allocated in CvCity::reset");1073		m_paiSpecialistCount.clear();1074		m_paiSpecialistCount.resize(iNumSpecialistInfos);1075		m_paiMaxSpecialistCount.clear();1076		m_paiMaxSpecialistCount.resize(iNumSpecialistInfos);1077		m_paiForceSpecialistCount.clear();1078		m_paiForceSpecialistCount.resize(iNumSpecialistInfos);1079		m_paiFreeSpecialistCount.clear();1080		m_paiFreeSpecialistCount.resize(iNumSpecialistInfos);10811082		for(iI = 0; iI < iNumSpecialistInfos; iI++)1083		{1084			m_paiSpecialistCount.setAt(iI, 0);1085			m_paiMaxSpecialistCount.setAt(iI, 0);1086			m_paiForceSpecialistCount.setAt(iI, 0);1087			m_paiFreeSpecialistCount.setAt(iI, 0);1088		}10891090		int iNumImprovementInfos = GC.getNumImprovementInfos();1091		CvAssertMsg((0 < iNumImprovementInfos),  "GC.getNumImprovementInfos() is not greater than zero but an array is being allocated in CvCity::reset");1092		m_paiImprovementFreeSpecialists.clear();1093		m_paiImprovementFreeSpecialists.resize(iNumImprovementInfos);1094		for(iI = 0; iI < iNumImprovementInfos; iI++)1095		{1096			m_paiImprovementFreeSpecialists.setAt(iI, 0);1097		}10981099		int iNumUnitCombatClassInfos = GC.getNumUnitCombatClassInfos();1100		CvAssertMsg((0 < iNumUnitCombatClassInfos),  "GC.getNumUnitCombatClassInfos() is not greater than zero but an array is being allocated in CvCity::reset");1101		m_paiUnitCombatFreeExperience.clear();1102		m_paiUnitCombatFreeExperience.resize(iNumUnitCombatClassInfos);1103		m_paiUnitCombatProductionModifier.clear();1104		m_paiUnitCombatProductionModifier.resize(iNumUnitCombatClassInfos);1105		for(iI = 0; iI < iNumUnitCombatClassInfos; iI++)1106		{1107			m_paiUnitCombatFreeExperience.setAt(iI, 0);1108			m_paiUnitCombatProductionModifier.setAt(iI, 0);1109		}11101111		int iNumPromotionInfos = GC.getNumPromotionInfos();1112		CvAssertMsg((0 < iNumPromotionInfos),  "GC.getNumPromotionInfos() is not greater than zero but an array is being allocated in CvCity::reset");1113		m_paiFreePromotionCount.clear();1114		m_paiFreePromotionCount.resize(iNumPromotionInfos);1115		for(iI = 0; iI < iNumPromotionInfos; iI++)1116		{1117			m_paiFreePromotionCount.setAt(iI, 0);1118		}11191120		int iJ;11211122		int iNumBuildingInfos = GC.getNumBuildingInfos();1123		int iMAX_SPECIALISTS_FROM_BUILDING = GC.getMAX_SPECIALISTS_FROM_BUILDING();1124		CvAssertMsg(m_aaiBuildingSpecialistUpgradeProgresses==NULL, "about to leak memory, CvCity::m_aaiBuildingSpecialistUpgradeProgresses");1125		m_aaiBuildingSpecialistUpgradeProgresses = FNEW(int*[iNumBuildingInfos], c_eCiv5GameplayDLL, 0);1126		for(iI = 0; iI < iNumBuildingInfos; iI++)1127		{1128			m_aaiBuildingSpecialistUpgradeProgresses[iI] = FNEW(int[iMAX_SPECIALISTS_FROM_BUILDING], c_eCiv5GameplayDLL, 0);1129			for(iJ = 0; iJ < iMAX_SPECIALISTS_FROM_BUILDING; iJ++)1130			{1131				m_aaiBuildingSpecialistUpgradeProgresses[iI][iJ] = -1;1132			}1133		}11341135		int iNumResourceInfos = GC.getNumResourceInfos();1136		CvAssertMsg(m_ppaiResourceYieldChange==NULL, "about to leak memory, CvCity::m_ppaiResourceYieldChange");1137		m_ppaiResourceYieldChange = FNEW(int*[iNumResourceInfos], c_eCiv5GameplayDLL, 0);1138		for(iI = 0; iI < iNumResourceInfos; iI++)1139		{1140			m_ppaiResourceYieldChange[iI] = FNEW(int[NUM_YIELD_TYPES], c_eCiv5GameplayDLL, 0);1141			for(iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)1142			{1143				m_ppaiResourceYieldChange[iI][iJ] = 0;1144			}1145		}11461147		int iNumFeatureInfos = GC.getNumFeatureInfos();1148		CvAssertMsg(m_ppaiFeatureYieldChange==NULL, "about to leak memory, CvCity::m_ppaiFeatureYieldChange");1149		m_ppaiFeatureYieldChange = FNEW(int*[iNumFeatureInfos], c_eCiv5GameplayDLL, 0);1150		for(iI = 0; iI < iNumFeatureInfos; iI++)1151		{1152			m_ppaiFeatureYieldChange[iI] = FNEW(int[NUM_YIELD_TYPES], c_eCiv5GameplayDLL, 0);1153			for(iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)1154			{1155				m_ppaiFeatureYieldChange[iI][iJ] = 0;1156			}1157		}11581159		int iNumTerrainInfos = GC.getNumTerrainInfos();1160		CvAssertMsg(m_ppaiTerrainYieldChange==NULL, "about to leak memory, CvCity::m_ppaiTerrainYieldChange");1161		m_ppaiTerrainYieldChange = FNEW(int*[iNumTerrainInfos], c_eCiv5GameplayDLL, 0);1162		for(iI = 0; iI < iNumTerrainInfos; iI++)1163		{1164			m_ppaiTerrainYieldChange[iI] = FNEW(int[NUM_YIELD_TYPES], c_eCiv5GameplayDLL, 0);1165			for(iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)1166			{1167				m_ppaiTerrainYieldChange[iI][iJ] = 0;1168			}1169		}11701171#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)1172		int iNumPlotInfos = GC.getNumPlotInfos();1173		CvAssertMsg(m_ppaiPlotYieldChange==NULL, "about to leak memory, CvCity::m_ppaiPlotYieldChange");1174		m_ppaiPlotYieldChange = FNEW(int*[iNumPlotInfos], c_eCiv5GameplayDLL, 0);1175		for(iI = 0; iI < iNumPlotInfos; iI++)1176		{1177			m_ppaiPlotYieldChange[iI] = FNEW(int[NUM_YIELD_TYPES], c_eCiv5GameplayDLL, 0);1178			for(iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)1179			{1180				m_ppaiPlotYieldChange[iI][iJ] = 0;1181			}1182		}1183#endif1184	}11851186	if(!bConstructorCall)1187	{1188		// Set up AI and hook it up to the flavor manager1189		m_pCityStrategyAI->Init(GC.GetGameAICityStrategies(), this, true);1190		if(m_eOwner != NO_PLAYER)1191		{1192			GET_PLAYER(getOwner()).GetFlavorManager()->AddFlavorRecipient(m_pCityStrategyAI);1193			m_pCityStrategyAI->SetDefaultSpecialization(GET_PLAYER(getOwner()).GetCitySpecializationAI()->GetNextSpecializationDesired());1194		}11951196		m_pCityCitizens->Init(this);1197		m_pCityReligions->Init(this);1198		m_pEmphases->Init(GC.GetGameEmphases(), this);1199		m_pCityEspionage->Init(this);1200		m_pCityCulture->Init(this);12011202		AI_reset();12031204#if defined(MOD_GLOBAL_CITY_AUTOMATON_WORKERS)1205		if (m_eOwner != NO_PLAYER) {1206			setAutomatons(GET_TEAM(GET_PLAYER(getOwner()).getTeam()).GetCityAutomatonWorkersChange());1207			setAutomatons(GET_PLAYER(getOwner()).GetCityAutomatonWorkersChange());1208		}1209#endif1210	}1211}

Calls

Called by