Bazaar developer reference

CvGameReligions::GetAdjacentCityReligiousPressure(ReligionTypes, CvCity *, CvCity *, int &, bool)

Defined in
CvReligionClasses.cpp, line 2318
Class
CvGameReligions
Hook name
CivHooks::CvGameReligions_GetAdjacentCityReligiousPressure

Hooks

static bool BeforeCvGameReligions_GetAdjacentCityReligiousPressure(CvGameReligions* self, ReligionTypes eReligion, CvCity * pFromCity, CvCity * pToCity, int& iNumTradeRoutesInfluencing, bool bPretendTradeConnection, int& result);static void AfterCvGameReligions_GetAdjacentCityReligiousPressure(CvGameReligions* self, ReligionTypes eReligion, CvCity * pFromCity, CvCity * pToCity, int& iNumTradeRoutesInfluencing, bool bPretendTradeConnection, int& result);static int ReplaceCvGameReligions_GetAdjacentCityReligiousPressure(int (*original)(CvGameReligions*, ReligionTypes, CvCity *, CvCity *, int&, bool), CvGameReligions* self, ReligionTypes eReligion, CvCity * pFromCity, CvCity * pToCity, int& iNumTradeRoutesInfluencing, bool bPretendTradeConnection);CivRegisterBefore<CivHooks::CvGameReligions_GetAdjacentCityReligiousPressure>(host, &BeforeCvGameReligions_GetAdjacentCityReligiousPressure);CivRegisterAfter<CivHooks::CvGameReligions_GetAdjacentCityReligiousPressure>(host, &AfterCvGameReligions_GetAdjacentCityReligiousPressure);CivRegisterReplace<CivHooks::CvGameReligions_GetAdjacentCityReligiousPressure>(host, &ReplaceCvGameReligions_GetAdjacentCityReligiousPressure);

Code

2317/// How much pressure is exerted between these cities?2318int CvGameReligions::GetAdjacentCityReligiousPressure (ReligionTypes eReligion, CvCity *pFromCity, CvCity *pToCity, int& iNumTradeRoutesInfluencing, bool bPretendTradeConnection)2319{2320	int iPressure = 0;2321	iNumTradeRoutesInfluencing = 0;23222323	if (eReligion <= RELIGION_PANTHEON)2324	{2325		return iPressure;2326	}23272328	const CvReligion* pReligion = GetReligion(eReligion, pFromCity->getOwner());2329	if (!pReligion)2330	{2331		return iPressure;2332	}23332334#if defined(MOD_RELIGION_LOCAL_RELIGIONS)2335	if (MOD_RELIGION_LOCAL_RELIGIONS && GC.getReligionInfo(eReligion)->IsLocalReligion()) {2336		// Can only spread a local religion to our own cities or City States2337		if (pToCity->getOwner() < MAX_MAJOR_CIVS && pFromCity->getOwner() != pToCity->getOwner()) {2338			return iPressure;2339		}23402341		// Cannot spread if either city is occupied or a puppet2342		if ((pFromCity->IsOccupied() && !pFromCity->IsNoOccupiedUnhappiness()) || pFromCity->IsPuppet() ||2343			(pToCity->IsOccupied() && !pToCity->IsNoOccupiedUnhappiness()) || pToCity->IsPuppet()) {2344			return iPressure;2345		}2346	}2347#endif23482349	// Are the cities within the minimum distance?2350	int iDistance = GC.getRELIGION_ADJACENT_CITY_DISTANCE();23512352	// Boost to distance due to belief?2353	int iDistanceMod = pReligion->m_Beliefs.GetSpreadDistanceModifier();2354	if(iDistanceMod > 0)2355	{2356		iDistance *= (100 + iDistanceMod);2357		iDistance /= 100;2358	}23592360	bool bWithinDistance = (plotDistance(pFromCity->getX(), pFromCity->getY(), pToCity->getX(), pToCity->getY()) <= iDistance);2361	bool bConnectedWithTrade = GC.getGame().GetGameTrade()->IsCityConnectedToCity(pFromCity, pToCity) || bPretendTradeConnection;23622363	if(bWithinDistance || bConnectedWithTrade)2364	{2365		bool bIncrementTRInfluencing = false;2366		iPressure = GC.getGame().getGameSpeedInfo().getReligiousPressureAdjacentCity();2367		if (bConnectedWithTrade && !bWithinDistance)2368		{2369			if (!bIncrementTRInfluencing)2370			{2371				iNumTradeRoutesInfluencing++;2372				bIncrementTRInfluencing = true;2373			}2374		}23752376		if (bConnectedWithTrade)2377		{2378			if (GC.getGame().GetGameTrade()->IsCityConnectedFromCityToCity(pFromCity, pToCity))2379			{2380				int iTradeReligionModifer = GET_PLAYER(pFromCity->getOwner()).GetPlayerTraits()->GetTradeReligionModifier();2381				if (iTradeReligionModifer != 0)2382				{2383					iPressure *= 100 + iTradeReligionModifer;2384					iPressure /= 100;23852386					if (!bIncrementTRInfluencing)2387					{2388						iNumTradeRoutesInfluencing++;2389						bIncrementTRInfluencing = true;2390					}2391				}2392			}2393		}23942395		// If we are spreading to a friendly city state, increase the effectiveness if we have the right belief2396		if(IsCityStateFriendOfReligionFounder(eReligion, pToCity->getOwner()))2397		{2398			int iFriendshipMod = pReligion->m_Beliefs.GetFriendlyCityStateSpreadModifier();2399			if(iFriendshipMod > 0)2400			{2401				iPressure *= (100 + iFriendshipMod);2402				iPressure /= 100;2403			}2404		}24052406		// Have a belief that always strengthens spread?2407		int iStrengthMod = pReligion->m_Beliefs.GetSpreadStrengthModifier();2408		if(iStrengthMod > 0)2409		{2410			TechTypes eDoublingTech = pReligion->m_Beliefs.GetSpreadModifierDoublingTech();2411			if(eDoublingTech != NO_TECH)2412			{2413				CvPlayer& kPlayer = GET_PLAYER(pReligion->m_eFounder);2414				if(GET_TEAM(kPlayer.getTeam()).GetTeamTechs()->HasTech(eDoublingTech))2415				{2416					iStrengthMod *= 2;2417				}2418			}2419			iPressure *= (100 + iStrengthMod);2420			iPressure /= 100;2421		}24222423		// Strengthened spread from World Congress? (World Religion)2424		int iLeaguesMod = GC.getGame().GetGameLeagues()->GetReligionSpreadStrengthModifier(pFromCity->getOwner(), eReligion);2425#if defined(MOD_API_EXTENSIONS)2426		// Trust the modder if they set a negative mod2427		if (iLeaguesMod != 0)2428#else2429		if (iLeaguesMod > 0)2430#endif2431		{2432			iPressure *= (100 + iLeaguesMod);2433			iPressure /= 100;2434		}24352436		// Building that boosts pressure from originating city?2437		int iModifier = pFromCity->GetCityReligions()->GetReligiousPressureModifier();2438#if defined(MOD_API_EXTENSIONS)2439		// Trust the modder if they set a negative mod2440		if (iModifier != 0)2441#else2442		if (iModifier > 0)2443#endif2444		{2445			iPressure *= (100 + iModifier);2446			iPressure /= 100;2447		}2448	}24492450#if defined(MOD_RELIGION_CONVERSION_MODIFIERS)2451	if (MOD_RELIGION_CONVERSION_MODIFIERS) {2452		// Modify iPressure based on city defenses, but only against hostile cities (ie any not the same player as this city)2453		PlayerTypes eFromPlayer = pFromCity->getOwner();2454		PlayerTypes eToPlayer = pToCity->getOwner();2455		2456		if (eFromPlayer != eToPlayer) {2457			CvPlayer& pToPlayer = GET_PLAYER(eToPlayer);2458			int iCityModifier = pToCity->GetConversionModifier();2459			2460			if (pToPlayer.isMinorCiv() && pToPlayer.GetMinorCivAI()->IsActiveQuestForPlayer(eFromPlayer, MINOR_CIV_QUEST_SPREAD_RELIGION)) {2461				// The City State actively wants this religion2462				iCityModifier *= -1;2463			}24642465			iPressure *= (100 + (iCityModifier + pToPlayer.GetConversionModifier() + pToPlayer.GetPlayerPolicies()->GetNumericModifier(POLICYMOD_CONVERSION_MODIFIER)));2466			iPressure /= 100;2467		}2468	}2469#endif2470	2471	// CUSTOMLOG("GetAdjacentCityReligiousPressure for %i from %s to %s is %i", eReligion, pFromCity->getName().c_str(), pToCity->getName().c_str(), iPressure);2472	return iPressure;2473}

Calls

Called by