Modders Guide to FfH2

This is in the portion of CvEventManager.py where planar gate units are spawned:
Code:
					if iUnit == gc.getInfoTypeForString('UNIT_MOBIUS_WITCH'):
						promotions = [ 'PROMOTION_AIR1','PROMOTION_BODY1','PROMOTION_CHAOS1','PROMOTION_DEATH1','PROMOTION_DIMENSIONAL1','PROMOTION_EARTH1','PROMOTION_ENCHANTMENT1','PROMOTION_ENTROPY1','PROMOTION_FIRE1','PROMOTION_LAW1','PROMOTION_LIFE1','PROMOTION_MIND1','PROMOTION_NATURE1','PROMOTION_SPIRIT1','PROMOTION_WATER1' ]
						newUnit.setLevel(4)
						newUnit.setExperience(14, -1)
						for i in promotions:
							if CyGame().getSorenRandNum(10, "Bob") == 1:
								newUnit.setHasPromotion(gc.getInfoTypeForString(i), True)

I think that Imps' and Djinns' free promotions are handled in another file, possibly in the SDK.
 
Need some help with this one. I am trying to add Dimensional 2 & 3 promotions so I can implement new summons, but they aren't inserting properly in the promotion chains.

For some reason, when I set this code in, the result is that it claims Dimensional 1 is a Pre-req for Aeron's Bounty, and Dimensional 2 is a Pre-req for Air 1. Meanwhile, every unit in the game is allowed to take Dimensional 2 & 3 without any prereqs at all....

Really not sure how this is happening sadly.

Spoiler Code :
Code:
        <PromotionInfo>
            <Type>PROMOTION_DIMENSIONAL1</Type>
            <Description>TXT_KEY_PROMOTION_DIMENSIONAL1</Description>
            <Help></Help>
            <Sound>AS2D_IF_LEVELUP</Sound>
            <LayerAnimationPath>NONE</LayerAnimationPath>
            <PromotionPrereq>PROMOTION_CHANNELING1</PromotionPrereq>
            <PromotionPrereqOr1>NONE</PromotionPrereqOr1>
            <PromotionPrereqOr2>NONE</PromotionPrereqOr2>
            <TechPrereq>NONE</TechPrereq>
            <StateReligionPrereq>NONE</StateReligionPrereq>
            <bLeader>0</bLeader>
            <bBlitz>0</bBlitz>
            <bAmphib>0</bAmphib>
            <bRiver>0</bRiver>
            <bEnemyRoute>0</bEnemyRoute>
            <bAlwaysHeal>0</bAlwaysHeal>
            <bHillsDoubleMove>0</bHillsDoubleMove>
            <bImmuneToFirstStrikes>0</bImmuneToFirstStrikes>
            <iVisibilityChange>0</iVisibilityChange>
            <iMovesChange>0</iMovesChange>
            <iMoveDiscountChange>0</iMoveDiscountChange>
            <iAirRangeChange>0</iAirRangeChange>
            <iInterceptChange>0</iInterceptChange>
            <iEvasionChange>0</iEvasionChange>
            <iWithdrawalChange>0</iWithdrawalChange>
            <iCargoChange>0</iCargoChange>
            <iCollateralDamageChange>0</iCollateralDamageChange>
            <iBombardRateChange>0</iBombardRateChange>
            <iFirstStrikesChange>0</iFirstStrikesChange>
            <iChanceFirstStrikesChange>0</iChanceFirstStrikesChange>
            <iEnemyHealChange>0</iEnemyHealChange>
            <iNeutralHealChange>0</iNeutralHealChange>
            <iFriendlyHealChange>0</iFriendlyHealChange>
            <iSameTileHealChange>0</iSameTileHealChange>
            <iAdjacentTileHealChange>0</iAdjacentTileHealChange>
            <iCombatPercent>0</iCombatPercent>
            <iCityAttack>0</iCityAttack>
            <iCityDefense>0</iCityDefense>
            <iHillsAttack>0</iHillsAttack>
            <iHillsDefense>0</iHillsDefense>
            <iKamikazePercent>0</iKamikazePercent>
            <iRevoltProtection>0</iRevoltProtection>
            <iCollateralDamageProtection>0</iCollateralDamageProtection>
            <iPillageChange>0</iPillageChange>
            <iUpgradeDiscount>0</iUpgradeDiscount>
            <iExperiencePercent>0</iExperiencePercent>
            <TerrainAttacks>
            </TerrainAttacks>
            <TerrainDefenses>
            </TerrainDefenses>
            <FeatureAttacks>
            </FeatureAttacks>
            <FeatureDefenses>
            </FeatureDefenses>
            <UnitCombatMods>
            </UnitCombatMods>
            <DomainMods>
            </DomainMods>
            <TerrainDoubleMoves>
            </TerrainDoubleMoves>
            <FeatureDoubleMoves>
            </FeatureDoubleMoves>
            <UnitCombats>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ADEPT</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
            </UnitCombats>
            <HotKey></HotKey>
            <bAltDown>0</bAltDown>
            <bShiftDown>0</bShiftDown>
            <bCtrlDown>0</bCtrlDown>
            <bGraphicalOnly>0</bGraphicalOnly>
            <iHotKeyPriority>0</iHotKeyPriority>
            <Button>Art/Interface/Buttons/Promotions/DIMENSIONAL1.dds</Button>
            <bBoarding>0</bBoarding>
            <bOnlyDefensive>0</bOnlyDefensive>
            <bDispellable>0</bDispellable>
            <bDoubleFortifyBonus>0</bDoubleFortifyBonus>
            <bEquipment>0</bEquipment>
            <bFear>0</bFear>
            <bFlying>0</bFlying>
            <bHiddenNationality>0</bHiddenNationality>
            <bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
            <bImmortal>0</bImmortal>
            <bImmuneToCapture>0</bImmuneToCapture>
            <bImmuneToFear>0</bImmuneToFear>
            <bImmuneToMagic>0</bImmuneToMagic>
            <bInvisible>0</bInvisible>
            <bMutation>0</bMutation>
            <bNotAlive>0</bNotAlive>
            <bPrereqAlive>0</bPrereqAlive>
            <bRace>0</bRace>
            <bRemovedByCasting>0</bRemovedByCasting>
            <bRemovedByCombat>0</bRemovedByCombat>
            <bRemovedWhenHealed>0</bRemovedWhenHealed>
            <bTargetWeakestUnit>0</bTargetWeakestUnit>
            <bTargetWeakestUnitCounter>0</bTargetWeakestUnitCounter>
            <bTwincast>0</bTwincast>
            <bValidate>0</bValidate>
            <bWaterWalking>0</bWaterWalking>
            <iAIWeight>50</iAIWeight>
            <iBetrayalChance>0</iBetrayalChance>
            <iBetterDefenderThanPercent>0</iBetterDefenderThanPercent>
            <iCasterResistModify>0</iCasterResistModify>
            <iCombatCapturePercent>0</iCombatCapturePercent>
            <iCombatHealPercent>0</iCombatHealPercent>
            <iCombatPercentDefense>0</iCombatPercentDefense>
            <iCombatPercentGlobalCounter>0</iCombatPercentGlobalCounter>
            <iCombatPercentInBorders>0</iCombatPercentInBorders>
            <iExpireChance>0</iExpireChance>
            <iExtraCombatStr>0</iExtraCombatStr>
            <iExtraCombatDefense>0</iExtraCombatDefense>
            <iFreeXPPerTurn>0</iFreeXPPerTurn>
            <iFreeXPFromCombat>0</iFreeXPFromCombat>
            <iModifyGlobalCounter>0</iModifyGlobalCounter>
            <iResistMagic>0</iResistMagic>
            <iSpellCasterXP>0</iSpellCasterXP>
            <iSpellDamageModify>0</iSpellDamageModify>
            <CaptureUnitCombat>NONE</CaptureUnitCombat>
            <PromotionCombatApply>NONE</PromotionCombatApply>
            <PromotionImmune1>NONE</PromotionImmune1>
            <PromotionImmune2>NONE</PromotionImmune2>
            <PromotionImmune3>NONE</PromotionImmune3>
            <PromotionRandomApply>NONE</PromotionRandomApply>
            <PromotionSummonPerk>NONE</PromotionSummonPerk>
            <BonusPrereq>BONUS_MANA_DIMENSIONAL</BonusPrereq>
            <PromotionPrereqOr3>NONE</PromotionPrereqOr3>
            <PromotionPrereqOr4>NONE</PromotionPrereqOr4>
            <PromotionPrereqAnd>NONE</PromotionPrereqAnd>
            <PromotionNextLevel>PROMOTION_DIMENSIONAL2</PromotionNextLevel>
            <PyPerTurn></PyPerTurn>
            <iGroupSize>0</iGroupSize>
            <UnitArtStyleType>NONE</UnitArtStyleType>
            <PromotionCombatType>NONE</PromotionCombatType>
            <iPromotionCombatMod>0</iPromotionCombatMod>
            <DamageTypeCombats>
            </DamageTypeCombats>
            <BonusAffinities>
            </BonusAffinities>
            <DamageTypeResists>
            </DamageTypeResists>
        </PromotionInfo>
        <PromotionInfo>
            <Type>PROMOTION_DIMENSIONAL2</Type>
            <Description>TXT_KEY_PROMOTION_DIMENSIONAL2</Description>
            <Help></Help>
            <Sound>AS2D_IF_LEVELUP</Sound>
            <LayerAnimationPath>NONE</LayerAnimationPath>
            <PromotionPrereq>PROMOTION_DIMENSIONAL1</PromotionPrereq>
            <PromotionPrereqOr1>NONE</PromotionPrereqOr1>
            <PromotionPrereqOr2>NONE</PromotionPrereqOr2>
            <TechPrereq>NONE</TechPrereq>
            <StateReligionPrereq>NONE</StateReligionPrereq>
            <bLeader>0</bLeader>
            <bBlitz>0</bBlitz>
            <bAmphib>0</bAmphib>
            <bRiver>0</bRiver>
            <bEnemyRoute>0</bEnemyRoute>
            <bAlwaysHeal>0</bAlwaysHeal>
            <bHillsDoubleMove>0</bHillsDoubleMove>
            <bImmuneToFirstStrikes>0</bImmuneToFirstStrikes>
            <iVisibilityChange>0</iVisibilityChange>
            <iMovesChange>0</iMovesChange>
            <iMoveDiscountChange>0</iMoveDiscountChange>
            <iAirRangeChange>0</iAirRangeChange>
            <iInterceptChange>0</iInterceptChange>
            <iEvasionChange>0</iEvasionChange>
            <iWithdrawalChange>0</iWithdrawalChange>
            <iCargoChange>0</iCargoChange>
            <iCollateralDamageChange>0</iCollateralDamageChange>
            <iBombardRateChange>0</iBombardRateChange>
            <iFirstStrikesChange>0</iFirstStrikesChange>
            <iChanceFirstStrikesChange>0</iChanceFirstStrikesChange>
            <iEnemyHealChange>0</iEnemyHealChange>
            <iNeutralHealChange>0</iNeutralHealChange>
            <iFriendlyHealChange>0</iFriendlyHealChange>
            <iSameTileHealChange>0</iSameTileHealChange>
            <iAdjacentTileHealChange>0</iAdjacentTileHealChange>
            <iCombatPercent>0</iCombatPercent>
            <iCityAttack>0</iCityAttack>
            <iCityDefense>0</iCityDefense>
            <iHillsAttack>0</iHillsAttack>
            <iHillsDefense>0</iHillsDefense>
            <iKamikazePercent>0</iKamikazePercent>
            <iRevoltProtection>0</iRevoltProtection>
            <iCollateralDamageProtection>0</iCollateralDamageProtection>
            <iPillageChange>0</iPillageChange>
            <iUpgradeDiscount>0</iUpgradeDiscount>
            <iExperiencePercent>0</iExperiencePercent>
            <TerrainAttacks>
            </TerrainAttacks>
            <TerrainDefenses>
            </TerrainDefenses>
            <FeatureAttacks>
            </FeatureAttacks>
            <FeatureDefenses>
            </FeatureDefenses>
            <UnitCombatMods>
            </UnitCombatMods>
            <DomainMods>
            </DomainMods>
            <TerrainDoubleMoves>
            </TerrainDoubleMoves>
            <FeatureDoubleMoves>
            </FeatureDoubleMoves>
            <UnitCombats>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ADEPT</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ANIMAL</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ARCHER</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_BEAST</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_DISCIPLE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_MELEE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_MOUNTED</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_NAVAL</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_RECON</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_SIEGE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
            </UnitCombats>
            <HotKey></HotKey>
            <bAltDown>0</bAltDown>
            <bShiftDown>0</bShiftDown>
            <bCtrlDown>0</bCtrlDown>
            <bGraphicalOnly>0</bGraphicalOnly>
            <iHotKeyPriority>0</iHotKeyPriority>
            <Button>Art/Interface/Buttons/Buildings/trust.dds</Button>
            <bBoarding>0</bBoarding>
            <bOnlyDefensive>0</bOnlyDefensive>
            <bDispellable>0</bDispellable>
            <bDoubleFortifyBonus>0</bDoubleFortifyBonus>
            <bEquipment>0</bEquipment>
            <bFear>0</bFear>
            <bFlying>0</bFlying>
            <bHiddenNationality>0</bHiddenNationality>
            <bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
            <bImmortal>0</bImmortal>
            <bImmuneToCapture>0</bImmuneToCapture>
            <bImmuneToFear>0</bImmuneToFear>
            <bImmuneToMagic>0</bImmuneToMagic>
            <bInvisible>0</bInvisible>
            <bMutation>0</bMutation>
            <bNotAlive>0</bNotAlive>
            <bPrereqAlive>0</bPrereqAlive>
            <bRace>0</bRace>
            <bRemovedByCasting>0</bRemovedByCasting>
            <bRemovedByCombat>0</bRemovedByCombat>
            <bRemovedWhenHealed>0</bRemovedWhenHealed>
            <bTargetWeakestUnit>0</bTargetWeakestUnit>
            <bTargetWeakestUnitCounter>0</bTargetWeakestUnitCounter>
            <bTwincast>0</bTwincast>
            <bValidate>0</bValidate>
            <bWaterWalking>0</bWaterWalking>
            <iAIWeight>100</iAIWeight>
            <iBetrayalChance>0</iBetrayalChance>
            <iBetterDefenderThanPercent>0</iBetterDefenderThanPercent>
            <iCasterResistModify>0</iCasterResistModify>
            <iCombatCapturePercent>0</iCombatCapturePercent>
            <iCombatHealPercent>0</iCombatHealPercent>
            <iCombatPercentDefense>0</iCombatPercentDefense>
            <iCombatPercentGlobalCounter>0</iCombatPercentGlobalCounter>
            <iCombatPercentInBorders>0</iCombatPercentInBorders>
            <iExpireChance>0</iExpireChance>
            <iExtraCombatStr>0</iExtraCombatStr>
            <iExtraCombatDefense>0</iExtraCombatDefense>
            <iFreeXPPerTurn>0</iFreeXPPerTurn>
            <iFreeXPFromCombat>0</iFreeXPFromCombat>
            <iModifyGlobalCounter>0</iModifyGlobalCounter>
            <iResistMagic>0</iResistMagic>
            <iSpellCasterXP>0</iSpellCasterXP>
            <iSpellDamageModify>0</iSpellDamageModify>
            <CaptureUnitCombat>NONE</CaptureUnitCombat>
            <PromotionCombatApply>NONE</PromotionCombatApply>
            <PromotionImmune1>NONE</PromotionImmune1>
            <PromotionImmune2>NONE</PromotionImmune2>
            <PromotionImmune3>NONE</PromotionImmune3>
            <PromotionRandomApply>NONE</PromotionRandomApply>
            <PromotionSummonPerk>NONE</PromotionSummonPerk>
            <BonusPrereq>NONE</BonusPrereq>
            <PromotionPrereqOr3>NONE</PromotionPrereqOr3>
            <PromotionPrereqOr4>NONE</PromotionPrereqOr4>
            <PromotionPrereqAnd>PROMOTION_CHANNELING2</PromotionPrereqAnd>
            <PromotionNextLevel>PROMOTION_DIMENSIONAL3</PromotionNextLevel>
            <PyPerTurn></PyPerTurn>
            <iGroupSize>0</iGroupSize>
            <UnitArtStyleType>NONE</UnitArtStyleType>
            <PromotionCombatType>NONE</PromotionCombatType>
            <iPromotionCombatMod>0</iPromotionCombatMod>
            <DamageTypeCombats>
            </DamageTypeCombats>
            <BonusAffinities>
            </BonusAffinities>
            <DamageTypeResists>
            </DamageTypeResists>
        </PromotionInfo>
        <PromotionInfo>
            <Type>PROMOTION_DIMENSIONAL3</Type>
            <Description>TXT_KEY_PROMOTION_DIMENSIONAL3</Description>
            <Help></Help>
            <Sound>AS2D_IF_LEVELUP</Sound>
            <LayerAnimationPath>NONE</LayerAnimationPath>
            <PromotionPrereq>PROMOTION_DIMENSIONAL2</PromotionPrereq>
            <PromotionPrereqOr1>NONE</PromotionPrereqOr1>
            <PromotionPrereqOr2>NONE</PromotionPrereqOr2>
            <TechPrereq>NONE</TechPrereq>
            <StateReligionPrereq>NONE</StateReligionPrereq>
            <bLeader>0</bLeader>
            <bBlitz>0</bBlitz>
            <bAmphib>0</bAmphib>
            <bRiver>0</bRiver>
            <bEnemyRoute>0</bEnemyRoute>
            <bAlwaysHeal>0</bAlwaysHeal>
            <bHillsDoubleMove>0</bHillsDoubleMove>
            <bImmuneToFirstStrikes>0</bImmuneToFirstStrikes>
            <iVisibilityChange>0</iVisibilityChange>
            <iMovesChange>0</iMovesChange>
            <iMoveDiscountChange>0</iMoveDiscountChange>
            <iAirRangeChange>0</iAirRangeChange>
            <iInterceptChange>0</iInterceptChange>
            <iEvasionChange>0</iEvasionChange>
            <iWithdrawalChange>0</iWithdrawalChange>
            <iCargoChange>0</iCargoChange>
            <iCollateralDamageChange>0</iCollateralDamageChange>
            <iBombardRateChange>0</iBombardRateChange>
            <iFirstStrikesChange>0</iFirstStrikesChange>
            <iChanceFirstStrikesChange>0</iChanceFirstStrikesChange>
            <iEnemyHealChange>0</iEnemyHealChange>
            <iNeutralHealChange>0</iNeutralHealChange>
            <iFriendlyHealChange>0</iFriendlyHealChange>
            <iSameTileHealChange>0</iSameTileHealChange>
            <iAdjacentTileHealChange>0</iAdjacentTileHealChange>
            <iCombatPercent>0</iCombatPercent>
            <iCityAttack>0</iCityAttack>
            <iCityDefense>0</iCityDefense>
            <iHillsAttack>0</iHillsAttack>
            <iHillsDefense>0</iHillsDefense>
            <iKamikazePercent>0</iKamikazePercent>
            <iRevoltProtection>0</iRevoltProtection>
            <iCollateralDamageProtection>0</iCollateralDamageProtection>
            <iPillageChange>0</iPillageChange>
            <iUpgradeDiscount>0</iUpgradeDiscount>
            <iExperiencePercent>0</iExperiencePercent>
            <TerrainAttacks>
            </TerrainAttacks>
            <TerrainDefenses>
            </TerrainDefenses>
            <FeatureAttacks>
            </FeatureAttacks>
            <FeatureDefenses>
            </FeatureDefenses>
            <UnitCombatMods>
            </UnitCombatMods>
            <DomainMods>
            </DomainMods>
            <TerrainDoubleMoves>
            </TerrainDoubleMoves>
            <FeatureDoubleMoves>
            </FeatureDoubleMoves>
            <UnitCombats>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ADEPT</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ANIMAL</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_ARCHER</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_BEAST</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_DISCIPLE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_MELEE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_MOUNTED</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_NAVAL</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_RECON</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
                <UnitCombat>
                    <UnitCombatType>UNITCOMBAT_SIEGE</UnitCombatType>
                    <bUnitCombat>1</bUnitCombat>
                </UnitCombat>
            </UnitCombats>
            <HotKey></HotKey>
            <bAltDown>0</bAltDown>
            <bShiftDown>0</bShiftDown>
            <bCtrlDown>0</bCtrlDown>
            <bGraphicalOnly>0</bGraphicalOnly>
            <iHotKeyPriority>0</iHotKeyPriority>
            <Button>Art/Interface/Buttons/Techtree/divination.dds</Button>
            <bBoarding>0</bBoarding>
            <bOnlyDefensive>0</bOnlyDefensive>
            <bDispellable>0</bDispellable>
            <bDoubleFortifyBonus>0</bDoubleFortifyBonus>
            <bEquipment>0</bEquipment>
            <bFear>0</bFear>
            <bFlying>0</bFlying>
            <bHiddenNationality>0</bHiddenNationality>
            <bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
            <bImmortal>0</bImmortal>
            <bImmuneToCapture>0</bImmuneToCapture>
            <bImmuneToFear>0</bImmuneToFear>
            <bImmuneToMagic>0</bImmuneToMagic>
            <bInvisible>0</bInvisible>
            <bMutation>0</bMutation>
            <bNotAlive>0</bNotAlive>
            <bPrereqAlive>0</bPrereqAlive>
            <bRace>0</bRace>
            <bRemovedByCasting>0</bRemovedByCasting>
            <bRemovedByCombat>0</bRemovedByCombat>
            <bRemovedWhenHealed>0</bRemovedWhenHealed>
            <bTargetWeakestUnit>0</bTargetWeakestUnit>
            <bTargetWeakestUnitCounter>0</bTargetWeakestUnitCounter>
            <bTwincast>0</bTwincast>
            <bValidate>0</bValidate>
            <bWaterWalking>0</bWaterWalking>
            <iAIWeight>150</iAIWeight>
            <iBetrayalChance>0</iBetrayalChance>
            <iBetterDefenderThanPercent>0</iBetterDefenderThanPercent>
            <iCasterResistModify>0</iCasterResistModify>
            <iCombatCapturePercent>0</iCombatCapturePercent>
            <iCombatHealPercent>0</iCombatHealPercent>
            <iCombatPercentDefense>0</iCombatPercentDefense>
            <iCombatPercentGlobalCounter>0</iCombatPercentGlobalCounter>
            <iCombatPercentInBorders>0</iCombatPercentInBorders>
            <iExpireChance>0</iExpireChance>
            <iExtraCombatStr>0</iExtraCombatStr>
            <iExtraCombatDefense>0</iExtraCombatDefense>
            <iFreeXPPerTurn>0</iFreeXPPerTurn>
            <iFreeXPFromCombat>0</iFreeXPFromCombat>
            <iModifyGlobalCounter>0</iModifyGlobalCounter>
            <iResistMagic>0</iResistMagic>
            <iSpellCasterXP>0</iSpellCasterXP>
            <iSpellDamageModify>0</iSpellDamageModify>
            <CaptureUnitCombat>NONE</CaptureUnitCombat>
            <PromotionCombatApply>NONE</PromotionCombatApply>
            <PromotionImmune1>NONE</PromotionImmune1>
            <PromotionImmune2>NONE</PromotionImmune2>
            <PromotionImmune3>NONE</PromotionImmune3>
            <PromotionRandomApply>NONE</PromotionRandomApply>
            <PromotionSummonPerk>NONE</PromotionSummonPerk>
            <BonusPrereq>NONE</BonusPrereq>
            <PromotionPrereqOr3>NONE</PromotionPrereqOr3>
            <PromotionPrereqOr4>NONE</PromotionPrereqOr4>
            <PromotionPrereqAnd>PROMOTION_CHANNELING3</PromotionPrereqAnd>
            <PromotionNextLevel>NONE</PromotionNextLevel>
            <PyPerTurn></PyPerTurn>
            <iGroupSize>0</iGroupSize>
            <UnitArtStyleType>NONE</UnitArtStyleType>
            <PromotionCombatType>NONE</PromotionCombatType>
            <iPromotionCombatMod>0</iPromotionCombatMod>
            <DamageTypeCombats>
            </DamageTypeCombats>
            <BonusAffinities>
            </BonusAffinities>
            <DamageTypeResists>
            </DamageTypeResists>
        </PromotionInfo>
 
Thats odd. The only thing that seems wrong here that the Dimensional1.dds file is not in all caps, so the button for Dimensional1 seems wrong. It doesn't seem like that would cause this problem though.
 
Caps don't matter with the buttons, so that part works fine (Happened because I decided to start from scratch and just did a cut/paste of Air, then a Search/Replace for changing Air to Dimensional. Pretty sure caps do matter on all the rest of the instances). But yeah, completely mystified so far, but fortunately it isn't a huge setback since I can still test out my summons I am creating. Definitely cannot release the way it is though :(
 
Did your search and replace happen to replace Air with dimensional in the Air promotions too? I suspect that the problem may be in a portion of the xml that you didn't post.
 
No, that is ALL the XML in the file. (Using Modules)

I forgot to point out that Aeron's Chosen & Air 1 happen to be the 2nd and 3rd promotions in the listed XML, so it is probably reading a number somwhere that I meant to have a text string. But I replaced the <NextLevel> tags and wasn't able to change the strange lineups.

Good news from testing though is that the AI LOVES my new dimensional 3 spell. I don't think there was a warrior in the game who didn't take it for first promotion and begin wiping out other Civilizations from afar...
 
Promotions (units, buildings, etc) are all identified as integers, and that integer is the position of the promotion's (or unit, building, ect. xml define in the file.

I really don't know anything about modular xml, but I think that the module is read first and then the main file is. The first 3 promotions in the main file are accuracy, aeron's chosen, and air 1. I think that both the promotions in your module and those in the main file are being identified by the same integer. Perhaps there is some part way to make sure that your module is appended to the end of the file instead of replacing it (although it probably should replace dimensional1). I'd probably just go a head and include the whole file if I were doing tit (of course, I like python changes too much to make a modular modmod anyway)
 
Yeah, I know they are done by integers, which is why I thought that the order might have some relevance.

Modules are read after the main XML (thus if you assign the same TYPE tag then you overwrite whatever was done before). The Dimensional summons are the 7 & 8th Modules I have written now, and all the others worked fine. This is however the first time I have placed in a Promotion with any Pre-reqs.


Played with it some more. I cleared out all the Pre-Reqs and it was fine. So then I started to add them back in 1 by 1, and decided to change the position of Dimensional2 & Channeling 3 for Pre-reqs on Dimensional3. That revealed that whatever I put in the first Pre-req slot winds up being declared as leading to Air1. So somehow it is deciding that Dimensional3 is the same thing as AIR1....
 
is there any way to get the funky effects from the gods of old scenario that came with BTS (ie Earthquake and meteors) into FfH? ive lookes at the flies for Gods of Old but cant see the effects :( any help?
 
I think that these parts of the CvEventManager.py for that mod does most of it:
Code:
	def doAIOperations( self, iPlayer ):
		lPlayers = PyGame().getCivPlayerList( )
		player = gc.getPlayer( iPlayer )
		lUnits = PyPlayer( iPlayer ).getUnitList( )
		playerStateReligion = gc.getPlayer( iPlayer ).getStateReligion( )
		
		for unit in lUnits:
			if unit.getUnitType( ) == CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), "UNIT_PROPHET"):
				if playerStateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_KI"):
					for iOpponent in lPlayers:
						if iOpponent.getID() != iPlayer:
							iAttitude = player.AI_getAttitude( iOpponent.getID() )
							if iAttitude == AttitudeTypes.ATTITUDE_ANNOYED:
								if self.getRandomNumber( 15 ) == 0:
									self.doAITargetOpponentEarthquake( iOpponent.getID(), iPlayer )
									unit.kill( 0, unit.getOwner())
							if iAttitude == AttitudeTypes.ATTITUDE_FURIOUS:
								if self.getRandomNumber( 5 ) == 0:
									unit.kill( 0, unit.getOwner())
									self.doAITargetOpponentEarthquake( iOpponent.getID(), iPlayer )
				if playerStateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_ENKI"):
					for iOpponent in lPlayers:
						if iOpponent.getID() != iPlayer:
							iAttitude = player.AI_getAttitude( iOpponent.getID() )
							if iAttitude == AttitudeTypes.ATTITUDE_ANNOYED:
								if self.getRandomNumber( 15 ) == 0:
									self.doAITargetOpponentTsunami( iOpponent.getID(), unit, iPlayer )
							if iAttitude == AttitudeTypes.ATTITUDE_FURIOUS:
								if self.getRandomNumber( 5 ) == 0:
									self.doAITargetOpponentTsunami( iOpponent.getID(), unit, iPlayer )
				if playerStateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_ENLIL"):
					for iOpponent in lPlayers:
						if iOpponent.getID() != iPlayer:
							iAttitude = player.AI_getAttitude( iOpponent.getID() )
							if iAttitude == AttitudeTypes.ATTITUDE_ANNOYED:
								if self.getRandomNumber( 15 ) == 0:
									self.doAITargetOpponentPlague( iOpponent.getID(), iPlayer )
									unit.kill( 0, unit.getOwner())
							if iAttitude == AttitudeTypes.ATTITUDE_FURIOUS:
								if self.getRandomNumber( 5 ) == 0:
									unit.kill( 0, unit.getOwner())
									self.doAITargetOpponentPlague( iOpponent.getID(), iPlayer )
				if playerStateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_NANNA"):
					for iOpponent in lPlayers:
						if iOpponent.getID() != iPlayer:
							iAttitude = player.AI_getAttitude( iOpponent.getID() )
							if iAttitude == AttitudeTypes.ATTITUDE_ANNOYED:
								if self.getRandomNumber( 15 ) == 0:
									self.doAITargetOpponentMeteor( iOpponent.getID(), iPlayer )
									unit.kill( 0, unit.getOwner())
							if iAttitude == AttitudeTypes.ATTITUDE_FURIOUS:
								if self.getRandomNumber( 5 ) == 0:
									unit.kill( 0, unit.getOwner())
									self.doAITargetOpponentMeteor( iOpponent.getID(), iPlayer )									
				if playerStateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_UTU"):
					for iOpponent in lPlayers:
						if iOpponent.getID() != iPlayer:
							iAttitude = player.AI_getAttitude( iOpponent.getID() )
							if iAttitude == AttitudeTypes.ATTITUDE_ANNOYED:
								if self.getRandomNumber( 15 ) == 0:
									self.doAITargetOpponentBlight( iOpponent.getID(), iPlayer )
									unit.kill( 0, unit.getOwner())
							if iAttitude == AttitudeTypes.ATTITUDE_FURIOUS:
								if self.getRandomNumber( 5 ) == 0:
									unit.kill( 0, unit.getOwner())
									self.doAITargetOpponentBlight( iOpponent.getID(), iPlayer )	
		
	def doAITargetOpponentEarthquake( self, iOpponent, iPlayer ):
		lCities = PyPlayer( iOpponent ).getCityList()
		numCities = len( lCities )
		pCity = lCities[ self.getRandomNumber( numCities ) ]
		
		if not self.doAnReligionCheck( iOpponent, iPlayer ):
			self.doEventEarthquake( pCity.plot() )
		
	def doAITargetOpponentPlague( self, iOpponent, iPlayer ):
		lCities = PyPlayer( iOpponent ).getCityList()
		numCities = len( lCities )
		pCity = lCities[ self.getRandomNumber( numCities ) ]
		if not self.doAnReligionCheck( iOpponent, iPlayer ):
			self.doEventPlague( pCity.plot() )
	
	def doAITargetOpponentMeteor( self, iOpponent, iPlayer ):
		lCities = PyPlayer( iOpponent ).getCityList()
		numCities = len( lCities )
		pCity = lCities[ self.getRandomNumber( numCities ) ]

		if not self.doAnReligionCheck( iOpponent, iPlayer ):
			self.doEventMinorMeteorStrike( pCity.plot() )
		
	def doAITargetOpponentBlight( self, iOpponent, iPlayer ):
		lCities = PyPlayer( iOpponent ).getCityList()
		numCities = len( lCities )
		pCity = lCities[ self.getRandomNumber( numCities ) ]

		if not self.doAnReligionCheck( iOpponent, iPlayer ):
			self.doEventBlight( pCity.plot() )
		
	def doAITargetOpponentTsunami( self, iOpponent, unit, iPlayer ):
		lAllCities = PyPlayer( iOpponent ).getCityList()
		lValidCities = [ ]
		
		for pCity in lAllCities:
			if pCity.plot().isCoastalLand():
				lValidCities.append( pCity )
		if len( lValidCities ) > 0:
			numCities = len( lValidCities )
			pChosenCity = lValidCities[ self.getRandomNumber( numCities ) ]
			if not self.doAnReligionCheck( iOpponent, iPlayer ):
				self.doEventTsunami( pChosenCity.plot() )
			unit.kill( 0, unit.getOwner( ) )

	def doAnReligionCheck( self, iOpponent, iPlayer ):
		pyTargetPlayer = PyPlayer( iOpponent )
		pDefendingPlayer = gc.getPlayer( iOpponent )
		pAttackingPlayer = gc.getPlayer( iPlayer )
		
		if pyTargetPlayer.getStateReligion( ) == CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), "RELIGION_AN"):
			lUnits = pyTargetPlayer.getUnitList()
			for unit in lUnits:
				if unit.getUnitType() == CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), "UNIT_PROPHET"):
					unit.kill( 0, unit.getOwner( ) )

					if not ( pDefendingPlayer.isHuman( ) ):
						pDefendingPlayer.AI_changeAttitudeExtra( iPlayer, -5 )
						szAttackedCiv = pDefendingPlayer.getCivilizationDescriptionKey()
						szAttackingCiv = pAttackingPlayer.getCivilizationDescriptionKey()
						szTitle = localText.getText("TXT_KEY_GODS_DISASTER_ANGER_BLOCKED", (szAttackedCiv , szAttackingCiv, ))
						CyInterface().addImmediateMessage( szTitle , None)			
					else:
						szAttackedCiv = pDefendingPlayer.getCivilizationDescriptionKey()
						szAttackingCiv = pAttackingPlayer.getCivilizationDescriptionKey()
						szTitle = localText.getText("TXT_KEY_GODS_DISASTER_HUMAN_BLOCKED", (szAttackedCiv , szAttackingCiv, ))
						CyInterface().addImmediateMessage( szTitle , None)	
					return 1
		return 0


In FfH though, most of this could be much more easily implemented like the other spells are.
 
Well, in case anyone attempts to solve my problem, I have just tried doing it non-modular and it works like a charm. So the code is flawless, it just isn't possible to set a Promotion with a Pre-req via modular loading for some strange reason (or at least not THESE promotions with the complicated pre-reqs)

Kael: Any chance you could add Dimensional2 & Dimensional3 promotions into the main game, even if you never put in spells for them?
 
Great! thanks Magister! mow all i need to do is find the special effects (ie the graphics, ive found meteors and tsunami, but not earthquake, and thats the one i want most :( )

EDIT: i cant get it to work :( the code is huge. maybe im missing a trigger...
 
The following tags are linked numerically instead of linked to the Type declaration in CIV4PromotionInfos.xml (only really an issue for Modular Loading most likely):

<PromotionPrereq/>
<PromotionPrereqOr1/>
<PromotionPrereqOr2/>
<PromotionPrereqOr3/>
<PromotionPrereqOr4/>
<PromotionPrereqAnd/>
<PromotionCombatApply/>
<PromotionImmune1/>
<PromotionImmune2/>
<PromotionImmune3/>
<PromotionRandomApply/>
<PromotionSummonPerk/>


If it is at all possible to change that it'd be awesome :)
 
Thats a BtS bug. Im not sure if its an engine thing or in the SDK, but I'll rewrite the promotion loading stage the way I think its suppsoed to be in the next patch and you check it out to see if it fixes modular loading.
 
I wanted to give the GUARDIAN VINES a defensive bonus in a Jungle (40%) and Forest (20%). I edited the Civ4UnitInfos.xml file.

But I'm getting this error:

"Tag: 80 in Info Class was incorrect...."

Could someone please explain what I'm doing wrong.
Why can't the Vines get the bonus.

Also, the FfH Editor.xlms errors out when you try to "Export Unit Information"
 
Most likely you are entering in a feature as a terrain, or otherwise placing the wrong tag.

Go to the Woodsman promotions and look for where they apply the bonus to Forests & Jungles, cut/paste that section into the matching tags for the Guardian Vines and it should work.
 
There isn't really enough info in your post for us to find your mistake. If xienwolf's recomendation doesn't fix it, you should edit your post to include the xml defines for the units you changed so we can actually help you.


Not sure what the FfH Editor error is.
 
Top Bottom