Hooks
static bool BeforeCvCity_foodDifferenceTimes100(const CvCity* self, bool bBottom, CvString* toolTipSink, int& result);static void AfterCvCity_foodDifferenceTimes100(const CvCity* self, bool bBottom, CvString* toolTipSink, int& result);static int ReplaceCvCity_foodDifferenceTimes100(int (*original)(const CvCity*, bool, CvString*), const CvCity* self, bool bBottom, CvString* toolTipSink);CivRegisterBefore<CivHooks::CvCity_foodDifferenceTimes100>(host, &BeforeCvCity_foodDifferenceTimes100);CivRegisterAfter<CivHooks::CvCity_foodDifferenceTimes100>(host, &AfterCvCity_foodDifferenceTimes100);CivRegisterReplace<CivHooks::CvCity_foodDifferenceTimes100>(host, &ReplaceCvCity_foodDifferenceTimes100);
Code
7288int CvCity::foodDifferenceTimes100(bool bBottom, CvString* toolTipSink) const7289{7290 VALIDATE_OBJECT7291 int iDifference;72927293 if(isFoodProduction())7294 {7295 iDifference = std::min(0, GetFoodProduction(getYieldRate(YIELD_FOOD, false) - foodConsumption()) * 100);7296 }7297 else7298 {7299 iDifference = (getYieldRateTimes100(YIELD_FOOD, false) - foodConsumption() * 100);7300 }73017302 if(bBottom)7303 {7304 if((getPopulation() == 1) && (getFood() == 0))7305 {7306 iDifference = std::max(0, iDifference);7307 }7308 }73097310 // Growth Mods - Only apply if the City is growing (and not starving, otherwise it would actually have the OPPOSITE of the intended effect!)7311 if(iDifference > 0)7312 {7313 int iTotalMod = 100;73147315 // Capital Mod for player. Used for Policies and such7316 if(isCapital())7317 {7318 int iCapitalGrowthMod = GET_PLAYER(getOwner()).GetCapitalGrowthMod();7319 if(iCapitalGrowthMod != 0)7320 {7321 iTotalMod += iCapitalGrowthMod;7322 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_CAPITAL", iCapitalGrowthMod);7323 }7324 }73257326 // City Mod for player. Used for Policies and such7327 int iCityGrowthMod = GET_PLAYER(getOwner()).GetCityGrowthMod();7328 if(iCityGrowthMod != 0)7329 {7330 iTotalMod += iCityGrowthMod;7331 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_PLAYER", iCityGrowthMod);7332 }73337334 // Religion growth mod7335 int iReligionGrowthMod = 0;7336 ReligionTypes eMajority = GetCityReligions()->GetReligiousMajority();7337 if(eMajority != NO_RELIGION)7338 {7339 const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, getOwner());7340 if(pReligion)7341 {7342 bool bAtPeace = GET_TEAM(getTeam()).getAtWarCount(false) == 0;7343 iReligionGrowthMod = pReligion->m_Beliefs.GetCityGrowthModifier(bAtPeace);7344 BeliefTypes eSecondaryPantheon = GetCityReligions()->GetSecondaryReligionPantheonBelief();7345 if (eSecondaryPantheon != NO_BELIEF)7346 {7347 iReligionGrowthMod += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetCityGrowthModifier();7348 }7349 iTotalMod += iReligionGrowthMod;7350 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_RELIGION", iReligionGrowthMod);7351 }7352 }73537354 // Cities stop growing when empire is very unhappy7355 if(GET_PLAYER(getOwner()).IsEmpireVeryUnhappy())7356 {7357 int iMod = /*-100*/ GC.getVERY_UNHAPPY_GROWTH_PENALTY();7358 iTotalMod += iMod;7359 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_UNHAPPY", iMod);7360 }7361 // Cities grow slower if the player is over his Happiness Limit7362 else if(GET_PLAYER(getOwner()).IsEmpireUnhappy())7363 {7364 int iMod = /*-75*/ GC.getUNHAPPY_GROWTH_PENALTY();7365 iTotalMod += iMod;7366 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_UNHAPPY", iMod);7367 }7368 // WLTKD Growth Bonus7369 else if(GetWeLoveTheKingDayCounter() > 0)7370 {7371 int iMod = /*25*/ GC.getWLTKD_GROWTH_MULTIPLIER();7372 iTotalMod += iMod;7373 GC.getGame().BuildProdModHelpText(toolTipSink, "TXT_KEY_FOODMOD_WLTKD", iMod);7374 }73757376 iDifference *= iTotalMod;7377 iDifference /= 100;7378 }73797380 return iDifference;7381}