in CIV4SpellInfos.xml:
<SpellInfo> <!-- Hyborem's Whisper -->
<Type>SPELL_HYBOREMS_WHISPER</Type>
<Description>TXT_KEY_SPELL_HYBOREMS_WHISPER</Description>
<Civilopedia>TXT_KEY_SPELL_PLACEHOLDER_PEDIA</Civilopedia>
<Help>TXT_KEY_SPELL_HYBOREMS_WHISPER_HELP</Help>
<UnitClassPrereq>UNITCLASS_HYBOREM</UnitClassPrereq>
<CivilizationPrereq>CIVILIZATION_INFERNAL</CivilizationPrereq>
<TechPrereq>TECH_MALEVOLENT_DESIGNS</TechPrereq>
<bAllowAI>1</bAllowAI>
<bGlobal>1</bGlobal>
<iAIWeight>300</iAIWeight>
<bDisplayWhenDisabled>1</bDisplayWhenDisabled>
<bHasCasted>1</bHasCasted>
<PyResult>spellHyboremsWhisper(pCaster)</PyResult>
<PyRequirement>reqHyboremsWhisper(pCaster)</PyRequirement>
<Effect>EFFECT_SPELL1</Effect>
<Sound>AS3D_SPELL_HOPE</Sound>
<Button>Art/Interface/Buttons/Spells/Hyborems Whisper.dds</Button>
</SpellInfo>
----------------------
in CvSpellInterface.py:
def reqHyboremsWhisper(caster):
if gc.getGame().isNetworkMultiPlayer():
return False
pCity = cf.getAshenVeilCity(3)
if pCity == -1:
return False
return True
def spellHyboremsWhisper(caster):
iPlayer = caster.getOwner()
pPlayer = gc.getPlayer(iPlayer)
iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_HYBOREMS_WHISPER')
triggerData = pPlayer.initTriggeredData(iEvent, true, -1, caster.getX(), caster.getY(), iPlayer, -1, -1, -1, -1, -1)
----------------------
in CustomFunctions.py:
def getAshenVeilCity(self, iNum):
iInfernal = gc.getInfoTypeForString('CIVILIZATION_INFERNAL')
iVeil = gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL')
iBestValue1 = 0
iBestValue2 = 0
iBestValue3 = 0
pBestCity1 = -1
pBestCity2 = -1
pBestCity3 = -1
for iPlayer in range(gc.getMAX_PLAYERS()):
pPlayer = gc.getPlayer(iPlayer)
if (pPlayer.isAlive() and pPlayer.getCivilizationType() != iInfernal):
for iCity in range(pPlayer.getNumCities()):
pCity = pPlayer.getCity(iCity)
if (pCity.isHasReligion(iVeil) and pCity.isCapital() == False):
bValid = True
iValue = pCity.getPopulation() * 100
iValue += pCity.getCulture(iPlayer) / 3
iValue += pCity.getNumBuildings() * 10
iValue += pCity.getNumWorldWonders() * 100
iValue += pCity.countNumImprovedPlots()
if iValue > iBestValue1:
iBestValue3 = iBestValue2
pBestCity3 = pBestCity2
iBestValue2 = iBestValue1
pBestCity2 = pBestCity1
iBestValue1 = iValue
pBestCity1 = pCity
bValid = False
if (bValid and iValue > iBestValue2):
iBestValue3 = iBestValue2
pBestCity3 = pBestCity2
iBestValue2 = iValue
pBestCity2 = pCity
bValid = False
if (bValid and iValue > iBestValue3):
iBestValue3 = iValue
pBestCity3 = pCity
if iNum == 1:
return pBestCity1
if iNum == 2:
return pBestCity2
if iNum == 3:
return pBestCity3
return -1
----------------------
in CIV4EventTriggerInfos.xml:
<EventTriggerInfo>
<Type>EVENTTRIGGER_HYBOREMS_WHISPER</Type>
<WorldNewsTexts>
<Text></Text>
</WorldNewsTexts>
<TriggerTexts>
<TriggerText>
<Text>TXT_KEY_EVENT_HYBOREMS_WHISPER</Text>
<Era>NONE</Era>
</TriggerText>
</TriggerTexts>
<bSinglePlayer>1</bSinglePlayer>
<iPercentGamesActive>100</iPercentGamesActive>
<iWeight>0</iWeight>
<bProbabilityUnitMultiply>0</bProbabilityUnitMultiply>
<bProbabilityBuildingMultiply>0</bProbabilityBuildingMultiply>
<Civic>NONE</Civic>
<iMinTreasury>0</iMinTreasury>
<iMinPopulation>0</iMinPopulation>
<iMaxPopulation>0</iMaxPopulation>
<iMinMapLandmass>0</iMinMapLandmass>
<iMinOurLandmass>0</iMinOurLandmass>
<iMaxOurLandmass>-1</iMaxOurLandmass>
<MinDifficulty>NONE</MinDifficulty>
<iAngry>0</iAngry>
<iUnhealthy>0</iUnhealthy>
<UnitsRequired>
</UnitsRequired>
<iNumUnits>0</iNumUnits>
<iNumUnitsGlobal>0</iNumUnitsGlobal>
<iUnitDamagedWeight>0</iUnitDamagedWeight>
<iUnitDistanceWeight>0</iUnitDistanceWeight>
<iUnitExperienceWeight>0</iUnitExperienceWeight>
<bUnitsOnPlot>0</bUnitsOnPlot>
<BuildingsRequired>
</BuildingsRequired>
<iNumBuildings>0</iNumBuildings>
<iNumBuildingsGlobal>0</iNumBuildingsGlobal>
<iNumPlotsRequired>0</iNumPlotsRequired>
<bOwnPlot>0</bOwnPlot>
<iPlotType>-1</iPlotType>
<FeaturesRequired>
</FeaturesRequired>
<TerrainsRequired>
</TerrainsRequired>
<ImprovementsRequired>
</ImprovementsRequired>
<BonusesRequired>
</BonusesRequired>
<RoutesRequired>
</RoutesRequired>
<ReligionsRequired>
</ReligionsRequired>
<iNumReligions>0</iNumReligions>
<CorporationsRequired>
</CorporationsRequired>
<iNumCorporations>0</iNumCorporations>
<bPickReligion>0</bPickReligion>
<bStateReligion>0</bStateReligion>
<bHolyCity>0</bHolyCity>
<bPickCorporation>0</bPickCorporation>
<bHeadquarters>0</bHeadquarters>
<Events>
<Event>EVENT_HYBOREMS_WHISPER_1</Event>
<Event>EVENT_HYBOREMS_WHISPER_2</Event>
<Event>EVENT_HYBOREMS_WHISPER_3</Event>
</Events>
<PrereqEvents>
</PrereqEvents>
<bPrereqEventPlot>0</bPrereqEventPlot>
<OrPreReqs>
</OrPreReqs>
<AndPreReqs>
</AndPreReqs>
<ObsoleteTechs>
</ObsoleteTechs>
<bRecurring>0</bRecurring>
<bTeam>0</bTeam>
<bGlobal>1</bGlobal>
<bPickPlayer>0</bPickPlayer>
<bOtherPlayerWar>0</bOtherPlayerWar>
<bOtherPlayerHasReligion>0</bOtherPlayerHasReligion>
<bOtherPlayerHasOtherReligion>0</bOtherPlayerHasOtherReligion>
<bOtherPlayerAI>0</bOtherPlayerAI>
<iOtherPlayerShareBorders>0</iOtherPlayerShareBorders>
<OtherPlayerHasTech>NONE</OtherPlayerHasTech>
<bPickCity>0</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bShowPlot>0</bShowPlot>
<iCityFoodWeight>0</iCityFoodWeight>
<PythonCanDo></PythonCanDo>
<PythonCanDoCity></PythonCanDoCity>
<PythonCanDoUnit></PythonCanDoUnit>
<PythonCallback></PythonCallback>
<iPrereqCrime>0</iPrereqCrime>
<iPrereqGlobalCounter>0</iPrereqGlobalCounter>
<PrereqAlignment>NONE</PrereqAlignment>
<PrereqCivilizationPleased>NONE</PrereqCivilizationPleased>
<PrereqLeader>NONE</PrereqLeader>
<PrereqTrait>NONE</PrereqTrait>
</EventTriggerInfo>
--------------------
in CIV4EventInfos.xml:
<EventInfo>
<Type>EVENT_HYBOREMS_WHISPER_1</Type>
<Description>TXT_KEY_EVENT_HYBOREMS_WHISPER_1</Description>
<LocalInfoText></LocalInfoText>
<WorldNewsTexts>
</WorldNewsTexts>
<OtherPlayerPopup></OtherPlayerPopup>
<QuestFailText></QuestFailText>
<bQuest>0</bQuest>
<bGlobal>0</bGlobal>
<bTeam>0</bTeam>
<bPickCity>0</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bDeclareWar>0</bDeclareWar>
<iGold>0</iGold>
<bGoldToPlayer>0</bGoldToPlayer>
<iRandomGold>0</iRandomGold>
<iCulture>0</iCulture>
<iEspionagePoints>0</iEspionagePoints>
<bGoldenAge>0</bGoldenAge>
<iFreeUnitSupport>0</iFreeUnitSupport>
<iInflationMod>0</iInflationMod>
<iSpaceProductionMod>0</iSpaceProductionMod>
<Tech>NONE</Tech>
<TechFlavors>
</TechFlavors>
<iTechPercent>0</iTechPercent>
<iTechCostPercent>0</iTechCostPercent>
<iTechMinTurnsLeft>0</iTechMinTurnsLeft>
<PrereqTech>NONE</PrereqTech>
<UnitClass>NONE</UnitClass>
<iNumFreeUnits>0</iNumFreeUnits>
<bDisbandUnit>0</bDisbandUnit>
<iUnitExperience>0</iUnitExperience>
<iUnitImmobileTurns>0</iUnitImmobileTurns>
<UnitPromotion></UnitPromotion>
<UnitName></UnitName>
<UnitCombatPromotions>
</UnitCombatPromotions>
<UnitClassPromotions>
</UnitClassPromotions>
<BuildingClass>NONE</BuildingClass>
<iBuildingChange>0</iBuildingChange>
<BuildingExtraYields>
</BuildingExtraYields>
<BuildingExtraCommerces>
</BuildingExtraCommerces>
<BuildingExtraHappies>
</BuildingExtraHappies>
<BuildingExtraHealths>
</BuildingExtraHealths>
<iHappy>0</iHappy>
<iHealth>0</iHealth>
<iHurryAnger>0</iHurryAnger>
<iHappyTurns>0</iHappyTurns>
<iRevoltTurns>0</iRevoltTurns>
<iMinPillage>0</iMinPillage>
<iMaxPillage>0</iMaxPillage>
<iFood>0</iFood>
<iFoodPercent>0</iFoodPercent>
<FreeSpecialistCounts>
</FreeSpecialistCounts>
<FeatureType>NONE</FeatureType>
<iFeatureChange>0</iFeatureChange>
<ImprovementType>NONE</ImprovementType>
<iImprovementChange>0</iImprovementChange>
<BonusType>NONE</BonusType>
<iBonusChange>0</iBonusChange>
<RouteType>NONE</RouteType>
<iRouteChange>0</iRouteChange>
<BonusRevealed>NONE</BonusRevealed>
<BonusGift>NONE</BonusGift>
<PlotExtraYields>
</PlotExtraYields>
<iConvertOwnCities>0</iConvertOwnCities>
<iConvertOtherCities>0</iConvertOtherCities>
<iMaxNumReligions>-1</iMaxNumReligions>
<iOurAttitudeModifier>0</iOurAttitudeModifier>
<iAttitudeModifier>0</iAttitudeModifier>
<iTheirEnemyAttitudeModifier>0</iTheirEnemyAttitudeModifier>
<iPopulationChange>0</iPopulationChange>
<AdditionalEvents>
</AdditionalEvents>
<EventTimes>
</EventTimes>
<ClearEvents>
</ClearEvents>
<PythonCallback>applyHyboremsWhisper1</PythonCallback>
<PythonExpireCheck></PythonExpireCheck>
<PythonCanDo></PythonCanDo>
<PythonHelp>helpHyboremsWhisper1</PythonHelp>
<Button>,Art/Interface/Buttons/Process/Blank.dds,Art/Interface/Buttons/Beyond_the_Sword_Atlas.dds,8,5</Button>
<iAIValue>1000</iAIValue>
<iCrime>0</iCrime>
<iGlobalCounter>0</iGlobalCounter>
<PrereqAlignment>NONE</PrereqAlignment>
<PrereqBonus>NONE</PrereqBonus>
<PrereqCivilization>NONE</PrereqCivilization>
<PrereqCorporation>NONE</PrereqCorporation>
<PrereqReligion>NONE</PrereqReligion>
<PrereqStateReligion>NONE</PrereqStateReligion>
</EventInfo>
<EventInfo>
<Type>EVENT_HYBOREMS_WHISPER_2</Type>
<Description>TXT_KEY_EVENT_HYBOREMS_WHISPER_2</Description>
<LocalInfoText></LocalInfoText>
<WorldNewsTexts>
</WorldNewsTexts>
<OtherPlayerPopup></OtherPlayerPopup>
<QuestFailText></QuestFailText>
<bQuest>0</bQuest>
<bGlobal>0</bGlobal>
<bTeam>0</bTeam>
<bPickCity>0</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bDeclareWar>0</bDeclareWar>
<iGold>0</iGold>
<bGoldToPlayer>0</bGoldToPlayer>
<iRandomGold>0</iRandomGold>
<iCulture>0</iCulture>
<iEspionagePoints>0</iEspionagePoints>
<bGoldenAge>0</bGoldenAge>
<iFreeUnitSupport>0</iFreeUnitSupport>
<iInflationMod>0</iInflationMod>
<iSpaceProductionMod>0</iSpaceProductionMod>
<Tech>NONE</Tech>
<TechFlavors>
</TechFlavors>
<iTechPercent>0</iTechPercent>
<iTechCostPercent>0</iTechCostPercent>
<iTechMinTurnsLeft>0</iTechMinTurnsLeft>
<PrereqTech>NONE</PrereqTech>
<UnitClass>NONE</UnitClass>
<iNumFreeUnits>0</iNumFreeUnits>
<bDisbandUnit>0</bDisbandUnit>
<iUnitExperience>0</iUnitExperience>
<iUnitImmobileTurns>0</iUnitImmobileTurns>
<UnitPromotion></UnitPromotion>
<UnitName></UnitName>
<UnitCombatPromotions>
</UnitCombatPromotions>
<UnitClassPromotions>
</UnitClassPromotions>
<BuildingClass>NONE</BuildingClass>
<iBuildingChange>0</iBuildingChange>
<BuildingExtraYields>
</BuildingExtraYields>
<BuildingExtraCommerces>
</BuildingExtraCommerces>
<BuildingExtraHappies>
</BuildingExtraHappies>
<BuildingExtraHealths>
</BuildingExtraHealths>
<iHappy>0</iHappy>
<iHealth>0</iHealth>
<iHurryAnger>0</iHurryAnger>
<iHappyTurns>0</iHappyTurns>
<iRevoltTurns>0</iRevoltTurns>
<iMinPillage>0</iMinPillage>
<iMaxPillage>0</iMaxPillage>
<iFood>0</iFood>
<iFoodPercent>0</iFoodPercent>
<FreeSpecialistCounts>
</FreeSpecialistCounts>
<FeatureType>NONE</FeatureType>
<iFeatureChange>0</iFeatureChange>
<ImprovementType>NONE</ImprovementType>
<iImprovementChange>0</iImprovementChange>
<BonusType>NONE</BonusType>
<iBonusChange>0</iBonusChange>
<RouteType>NONE</RouteType>
<iRouteChange>0</iRouteChange>
<BonusRevealed>NONE</BonusRevealed>
<BonusGift>NONE</BonusGift>
<PlotExtraYields>
</PlotExtraYields>
<iConvertOwnCities>0</iConvertOwnCities>
<iConvertOtherCities>0</iConvertOtherCities>
<iMaxNumReligions>-1</iMaxNumReligions>
<iOurAttitudeModifier>0</iOurAttitudeModifier>
<iAttitudeModifier>0</iAttitudeModifier>
<iTheirEnemyAttitudeModifier>0</iTheirEnemyAttitudeModifier>
<iPopulationChange>0</iPopulationChange>
<AdditionalEvents>
</AdditionalEvents>
<EventTimes>
</EventTimes>
<ClearEvents>
</ClearEvents>
<PythonCallback>applyHyboremsWhisper2</PythonCallback>
<PythonExpireCheck></PythonExpireCheck>
<PythonCanDo></PythonCanDo>
<PythonHelp>helpHyboremsWhisper2</PythonHelp>
<Button>,Art/Interface/Buttons/Process/Blank.dds,Art/Interface/Buttons/Beyond_the_Sword_Atlas.dds,8,5</Button>
<iAIValue>900</iAIValue>
<iCrime>0</iCrime>
<iGlobalCounter>0</iGlobalCounter>
<PrereqAlignment>NONE</PrereqAlignment>
<PrereqBonus>NONE</PrereqBonus>
<PrereqCivilization>NONE</PrereqCivilization>
<PrereqCorporation>NONE</PrereqCorporation>
<PrereqReligion>NONE</PrereqReligion>
<PrereqStateReligion>NONE</PrereqStateReligion>
</EventInfo>
<EventInfo>
<Type>EVENT_HYBOREMS_WHISPER_3</Type>
<Description>TXT_KEY_EVENT_HYBOREMS_WHISPER_3</Description>
<LocalInfoText></LocalInfoText>
<WorldNewsTexts>
</WorldNewsTexts>
<OtherPlayerPopup></OtherPlayerPopup>
<QuestFailText></QuestFailText>
<bQuest>0</bQuest>
<bGlobal>0</bGlobal>
<bTeam>0</bTeam>
<bPickCity>0</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bDeclareWar>0</bDeclareWar>
<iGold>0</iGold>
<bGoldToPlayer>0</bGoldToPlayer>
<iRandomGold>0</iRandomGold>
<iCulture>0</iCulture>
<iEspionagePoints>0</iEspionagePoints>
<bGoldenAge>0</bGoldenAge>
<iFreeUnitSupport>0</iFreeUnitSupport>
<iInflationMod>0</iInflationMod>
<iSpaceProductionMod>0</iSpaceProductionMod>
<Tech>NONE</Tech>
<TechFlavors>
</TechFlavors>
<iTechPercent>0</iTechPercent>
<iTechCostPercent>0</iTechCostPercent>
<iTechMinTurnsLeft>0</iTechMinTurnsLeft>
<PrereqTech>NONE</PrereqTech>
<UnitClass>NONE</UnitClass>
<iNumFreeUnits>0</iNumFreeUnits>
<bDisbandUnit>0</bDisbandUnit>
<iUnitExperience>0</iUnitExperience>
<iUnitImmobileTurns>0</iUnitImmobileTurns>
<UnitPromotion></UnitPromotion>
<UnitName></UnitName>
<UnitCombatPromotions>
</UnitCombatPromotions>
<UnitClassPromotions>
</UnitClassPromotions>
<BuildingClass>NONE</BuildingClass>
<iBuildingChange>0</iBuildingChange>
<BuildingExtraYields>
</BuildingExtraYields>
<BuildingExtraCommerces>
</BuildingExtraCommerces>
<BuildingExtraHappies>
</BuildingExtraHappies>
<BuildingExtraHealths>
</BuildingExtraHealths>
<iHappy>0</iHappy>
<iHealth>0</iHealth>
<iHurryAnger>0</iHurryAnger>
<iHappyTurns>0</iHappyTurns>
<iRevoltTurns>0</iRevoltTurns>
<iMinPillage>0</iMinPillage>
<iMaxPillage>0</iMaxPillage>
<iFood>0</iFood>
<iFoodPercent>0</iFoodPercent>
<FreeSpecialistCounts>
</FreeSpecialistCounts>
<FeatureType>NONE</FeatureType>
<iFeatureChange>0</iFeatureChange>
<ImprovementType>NONE</ImprovementType>
<iImprovementChange>0</iImprovementChange>
<BonusType>NONE</BonusType>
<iBonusChange>0</iBonusChange>
<RouteType>NONE</RouteType>
<iRouteChange>0</iRouteChange>
<BonusRevealed>NONE</BonusRevealed>
<BonusGift>NONE</BonusGift>
<PlotExtraYields>
</PlotExtraYields>
<iConvertOwnCities>0</iConvertOwnCities>
<iConvertOtherCities>0</iConvertOtherCities>
<iMaxNumReligions>-1</iMaxNumReligions>
<iOurAttitudeModifier>0</iOurAttitudeModifier>
<iAttitudeModifier>0</iAttitudeModifier>
<iTheirEnemyAttitudeModifier>0</iTheirEnemyAttitudeModifier>
<iPopulationChange>0</iPopulationChange>
<AdditionalEvents>
</AdditionalEvents>
<EventTimes>
</EventTimes>
<ClearEvents>
</ClearEvents>
<PythonCallback>applyHyboremsWhisper3</PythonCallback>
<PythonExpireCheck></PythonExpireCheck>
<PythonCanDo></PythonCanDo>
<PythonHelp>helpHyboremsWhisper3</PythonHelp>
<Button>,Art/Interface/Buttons/Process/Blank.dds,Art/Interface/Buttons/Beyond_the_Sword_Atlas.dds,8,5</Button>
<iAIValue>800</iAIValue>
<iCrime>0</iCrime>
<iGlobalCounter>0</iGlobalCounter>
<PrereqAlignment>NONE</PrereqAlignment>
<PrereqBonus>NONE</PrereqBonus>
<PrereqCivilization>NONE</PrereqCivilization>
<PrereqCorporation>NONE</PrereqCorporation>
<PrereqReligion>NONE</PrereqReligion>
<PrereqStateReligion>NONE</PrereqStateReligion>
</EventInfo>
----------------------
in CvRandomEventInfos.py:
def applyHyboremsWhisper1(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pPlayer = gc.getPlayer(kTriggeredData.ePlayer)
pCity = cf.getAshenVeilCity(1)
pPlayer.acquireCity(pCity,false,false)
def helpHyboremsWhisper1(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pCity = cf.getAshenVeilCity(1)
szHelp = localText.getText("TXT_KEY_EVENT_HYBOREMS_WHISPER_HELP", (pCity.getName(), ))
return szHelp
def applyHyboremsWhisper2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pPlayer = gc.getPlayer(kTriggeredData.ePlayer)
pCity = cf.getAshenVeilCity(2)
pPlayer.acquireCity(pCity,false,false)
def helpHyboremsWhisper2(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pCity = cf.getAshenVeilCity(2)
szHelp = localText.getText("TXT_KEY_EVENT_HYBOREMS_WHISPER_HELP", (pCity.getName(), ))
return szHelp
def applyHyboremsWhisper3(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pPlayer = gc.getPlayer(kTriggeredData.ePlayer)
pCity = cf.getAshenVeilCity(3)
pPlayer.acquireCity(pCity,false,false)
def helpHyboremsWhisper3(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]
pCity = cf.getAshenVeilCity(3)
szHelp = localText.getText("TXT_KEY_EVENT_HYBOREMS_WHISPER_HELP", (pCity.getName(), ))
return szHelp