Bazaar developer reference

CvGame::initScoreCalculation()

Defined in
CvGame.cpp, line 4939
Class
CvGame
Hook name
CivHooks::CvGame_initScoreCalculation

Hooks

static bool BeforeCvGame_initScoreCalculation(CvGame* self);static void AfterCvGame_initScoreCalculation(CvGame* self);static void ReplaceCvGame_initScoreCalculation(void (*original)(CvGame*), CvGame* self);CivRegisterBefore<CivHooks::CvGame_initScoreCalculation>(host, &BeforeCvGame_initScoreCalculation);CivRegisterAfter<CivHooks::CvGame_initScoreCalculation>(host, &AfterCvGame_initScoreCalculation);CivRegisterReplace<CivHooks::CvGame_initScoreCalculation>(host, &ReplaceCvGame_initScoreCalculation);

Code

4939void CvGame::initScoreCalculation()4940{4941	// initialize score calculation4942	int iMaxFood = 0;4943	for(int i = 0; i < GC.getMap().numPlots(); i++)4944	{4945		CvPlot* pPlot = GC.getMap().plotByIndexUnchecked(i);4946		if(!pPlot->isWater() || pPlot->isAdjacentToLand())4947		{4948			iMaxFood += pPlot->calculateBestNatureYield(YIELD_FOOD, NO_TEAM);4949		}4950	}4951	m_iMaxPopulation = getPopulationScore(iMaxFood / std::max(1, GC.getFOOD_CONSUMPTION_PER_POPULATION()));4952	if(NO_ERA != getStartEra())4953	{4954		CvEraInfo& kStartEra = getStartEraInfo();4955		int iNumSettlers = kStartEra.getStartingUnitMultiplier();4956		m_iInitPopulation = getPopulationScore(iNumSettlers * (kStartEra.getFreePopulation() + 1));4957#if defined(MOD_GLOBAL_CITY_WORKING)4958		m_iInitLand = getLandPlotsScore(iNumSettlers *  AVG_CITY_PLOTS);4959#else4960		m_iInitLand = getLandPlotsScore(iNumSettlers *  NUM_CITY_PLOTS);4961#endif4962	}4963	else4964	{4965		m_iInitPopulation = 0;4966		m_iInitLand = 0;4967	}49684969	m_iInitTech = 0;4970	for(int i = 0; i < GC.getNumTechInfos(); i++)4971	{4972		const TechTypes eTech = static_cast<TechTypes>(i);4973		CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);4974		if(pkTechInfo)4975		{4976			if(pkTechInfo->GetEra() < getStartEra())4977			{4978				m_iInitTech += getTechScore(eTech);4979			}4980			else4981			{4982				// count all possible free techs as initial to lower the score from immediate retirement4983				for(int iCiv = 0; iCiv < GC.getNumCivilizationInfos(); iCiv++)4984				{4985					const CivilizationTypes eCivilization = static_cast<CivilizationTypes>(iCiv);4986					CvCivilizationInfo* pkCivilizationInfo = GC.getCivilizationInfo(eCivilization);4987					if(pkCivilizationInfo)4988					{4989						if(pkCivilizationInfo->isPlayable())4990						{4991							if(pkCivilizationInfo->isCivilizationFreeTechs(i))4992							{4993								m_iInitTech += getTechScore(eTech);4994								break;4995							}4996						}4997					}4998				}4999			}5000		}5001	}5002	m_iInitWonders = 0;5003}

Calls

Called by