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}