Hooks
static bool BeforeCvCityReligions_AddProphetSpread(CvCityReligions* self, ReligionTypes eReligion, int iPressure, PlayerTypes eResponsiblePlayer);static void AfterCvCityReligions_AddProphetSpread(CvCityReligions* self, ReligionTypes eReligion, int iPressure, PlayerTypes eResponsiblePlayer);static void ReplaceCvCityReligions_AddProphetSpread(void (*original)(CvCityReligions*, ReligionTypes, int, PlayerTypes), CvCityReligions* self, ReligionTypes eReligion, int iPressure, PlayerTypes eResponsiblePlayer);CivRegisterBefore<CivHooks::CvCityReligions_AddProphetSpread>(host, &BeforeCvCityReligions_AddProphetSpread);CivRegisterAfter<CivHooks::CvCityReligions_AddProphetSpread>(host, &AfterCvCityReligions_AddProphetSpread);CivRegisterReplace<CivHooks::CvCityReligions_AddProphetSpread>(host, &ReplaceCvCityReligions_AddProphetSpread);
Code
3919/// Prophet spread is very powerful: eliminates all existing religions and adds to his3920void CvCityReligions::AddProphetSpread(ReligionTypes eReligion, int iPressure, PlayerTypes eResponsiblePlayer)3921{3922 int iAtheismPressure = 0;3923 int iReligionPressure = 0;3924 int iPressureRetained = 0;3925 ReligionTypes eOldMajorityReligion = GetReligiousMajority();3926 ReligionTypes eHolyCityReligion = NO_RELIGION;3927 ReligionTypes ePressureRetainedReligion = NO_RELIGION;3928 bool bProphetsReligionFoundedHere = false;39293930 ReligionInCityList::iterator it;3931 for(it = m_ReligionStatus.begin(); it != m_ReligionStatus.end(); it++)3932 {3933 if (it->m_eReligion == NO_RELIGION)3934 {3935 iAtheismPressure = it->m_iPressure;3936 }3937 else if (eReligion == it->m_eReligion)3938 {3939 iReligionPressure = it->m_iPressure;3940 if (it->m_bFoundedHere)3941 {3942 bProphetsReligionFoundedHere = true;3943 }3944 }3945 else if (it->m_bFoundedHere)3946 {3947 eHolyCityReligion = it->m_eReligion;3948 }39493950 if (it->m_eReligion > RELIGION_PANTHEON && it->m_eReligion != eReligion)3951 {3952 const CvReligion *pReligion = GC.getGame().GetGameReligions()->GetReligion(it->m_eReligion, NO_PLAYER);3953 int iPressureRetention = pReligion->m_Beliefs.GetInquisitorPressureRetention(); // Normally 03954 if (iPressureRetention > 0)3955 {3956 ePressureRetainedReligion = it->m_eReligion;3957 iPressureRetained = it->m_iPressure * iPressureRetention / 100;3958 }3959 }3960 }39613962 // Clear list3963 m_ReligionStatus.clear();39643965 // Add atheists and this back in3966 CvReligionInCity atheism(NO_RELIGION, false/*bFoundedHere*/, 0, iAtheismPressure);3967 m_ReligionStatus.push_back(atheism);3968 CvReligionInCity prophetReligion(eReligion, bProphetsReligionFoundedHere, 0, iReligionPressure + iPressure);3969 m_ReligionStatus.push_back(prophetReligion);39703971 // Reestablish Holy City religion3972 if (eHolyCityReligion != NO_RELIGION && !bProphetsReligionFoundedHere)3973 {3974 if (eHolyCityReligion == ePressureRetainedReligion)3975 {3976 CvReligionInCity holyCityReligion(eHolyCityReligion, true/*bFoundedHere*/, 0, iPressureRetained);3977 m_ReligionStatus.push_back(holyCityReligion); 3978 }3979 else3980 {3981 CvReligionInCity holyCityReligion(eHolyCityReligion, true/*bFoundedHere*/, 0, 0);3982 m_ReligionStatus.push_back(holyCityReligion);3983 }3984 }39853986 // Reestablish pressure-retained religion (if wasn't Holy City religion)3987 if (ePressureRetainedReligion != NO_RELIGION && eHolyCityReligion != ePressureRetainedReligion)3988 {3989 CvReligionInCity pressureRetainedReligion(ePressureRetainedReligion, false/*bFoundedHere*/, 0, iPressureRetained);3990 m_ReligionStatus.push_back(pressureRetainedReligion);3991 }39923993 RecomputeFollowers(FOLLOWER_CHANGE_PROPHET, eOldMajorityReligion, eResponsiblePlayer);3994}