FfH2 0.34 Bug Thread

With patch g Acheron the Red Dragon loves work boats. Lots of them. When I got to his city with my attack force there were 9 of them along with a couple real units. Maybe they are tasty to dragons? :drool::drool::drool::drool:
 
Playing f version. Shadowwalk doesn't work - casted it on my stack to make it easier to attack enemies on a forested hill but they still had the 50% tile defence bonus.

If you mouseover the ring of flames it says that caster must have AV religion. That's not true, once you have ritualists you can have switch to any religion and still use the ring of flames. So it's either a description error or a bug.
 
a) Shadowwalk works on building bonus not on terrain bonus.

b) The unit has to have the religion which it still has when you switch. Mouseover the unit and you'll see it.
 
Patch G: Rising difficulty resets to the original on reloading from save and fails to raise -- or at least the difficulty does not say it's higher (above the scores.)
 
With patch g Acheron the Red Dragon loves work boats. Lots of them. When I got to his city with my attack force there were 9 of them along with a couple real units. Maybe they are tasty to dragons? :drool::drool::drool::drool:

This post reminded me of an AI issue I've seen a lot. I'm almost done with my first game as Illians and I'd like to bring this up again. I think it may be a vanilla BTS issue but the Civ IV AI is ******** when it comes to boats. The old Civ III AI was evil with boats so I don't know what they changed and why.

So the AI builds boats even when it's getting overrun via land. But what got me in my current game is I am on one continent that by the time I built the tech that allowed me to go for Ascension around turn 435-ish, I shared it only with the Hippus. So the 3 other races (later 5 w/the Infernals & Mercurians) where on different continents. So they all go to war with me, yet I'm on turn 500 or so and never once have I had any of the other teams try to land any troops on my territory.

Worse, I own an island with about 6 cities that I keep in my empire since it has the terrain feature (that I can't remember to spell) where the Godslayer was used. This is within reach of galleys to the Bannor and while they send over ships occasionally to bombard the defenses of my cities, they've never landed troop. I took a Infernal city on an island near the Elves and while they send out galleons, they send them out unescorted and even when they get to where they could unload, they never do and I sink them before they could on the next turn. (I miss the old Civ where it would tell you if the ship had troops on it when you sank them).

So I've been at war with the entire world and except for having to wipe out the Hippus, I'm pretty much impervious to attack because the AI just seems ********. :cry:
 
I have a problem with liches. Dunno if it is a bug, but the option is grayed out. I have a level 8 Eater of Dreams with death 3. I can cast other spells though. Not the team limit because I dont have a teammate or any other liches.
 
Hi,

Been playing the mod for a while now (tis awesome), this is the first time I've posted on the forums. I've had the same problem as the343danny, the problem is in the CvSpellInterface python script (the debugger caught it, not me) in line 1588, there's a typo (Promtoion instead of Promotion if I remember right).

I only found this however after trying to check another issue. In the pedia, it says that multiple types of one mana resource give free promotions to adepts. However, I think it's changed since the entry was written, since new adepts don't start with Metamagic III no matter how many nodes I get (shame...).

I can understand that bit being to prevent tons of units running around casting T3 spells, but when upgrading to a Lich I seem only to be getting T1 spells, even though I have 4 nodes of that mana.

Any help?

Cheers,
Jojomo
 
I have the same problem wiht games with islands/continents, the AI never seems to form armies to invade them. The only thing I have seen is a bunch of water walking OO units high stepping across the sea. It's why I only play Pangaea.
 
Adepts can only learn level 1 spells, so after you have 2 (or more) of any mana nodes, any new Adepts will start with the appropriate level 1 spell. The same applies to 3 nodes and Mages for level 2 spells. And again for 4 of the same node with Archmages.

Note that the bonus spells are *NOT* retroactive, but they are applied on upgrades. So if you have an Adept and use him to build two Death nodes, that Adept will not get a free Death 1 promotion. But if you upgrade that Adept to a Mage (and when you build new Adepts) then you will get the free spell promotion.

Since the upgrade to Lich is done by spell, not by the normal upgrade system, I guess that is why Liches don't learn new free spells.
 
Since the upgrade to Lich is done by spell, not by the normal upgrade system, I guess that is why Liches don't learn new free spells.

That's the thing... when I cast the Lichdom spell, I get a free Life I promotion (trying to get Life III for free to resurrect Govannon to have an endless supply of free Liches), but not Life II or III. I'm just wondering if this is working as intended.
 
Free promotions are applied onUnitCreated, which I believe means it does work when a unit is converted though a spell or when a unit is summoned (I know that one works; I really like my unitcombat_adept, Channeling 1 + 2 Djinni), as well when a unit is built or upgraded.

That's the thing... when I cast the Lichdom spell, I get a free Life I promotion (trying to get Life III for free to resurrect Govannon to have an endless supply of free Liches), but not Life II or III. I'm just wondering if this is working as intended.

I believe it should work, provided you have enough mana. Do you have the four sources of Life mana you'd need in order to get Life III for free?
 
Liches really only get Tier 1 Spheres for free (tested this extensively over quite some versions). But its still nice to get 4 Picks on free Spheres. (One on built 3 on upgrade...)
I for one think its fine that way. Another pick of free Tier 3 Spells might be a bit hefty (especially because this upgrade from Archmage to Lich is "for free")

They also don't get Extension 1 and Combat one (so the pedia is wrong. But it still seems intended for above-mentioned reasons...)
 
I think I understand why that'd work... Life II requires Life I. So, at level up, he's qualified for Life I and therefore receives it, but is not qualified for Life II and so does not. Once he gains Life I, of course, he becomes qualified for Life II, but by then it's too late, the promotions are finished applying.
 
Ok, I was wrong.

Spoiler :
Code:
        <UnitInfo>
            <Class>UNITCLASS_LICH</Class>
            <Type>UNIT_LICH</Type>
            <UniqueNames>
            </UniqueNames>
            <Special>NONE</Special>
            <Capture>NONE</Capture>
            <Combat>UNITCOMBAT_ADEPT</Combat>
            <Domain>DOMAIN_LAND</Domain>
            <DefaultUnitAI>UNITAI_RESERVE</DefaultUnitAI>
            <Invisible>NONE</Invisible>
            <SeeInvisible>NONE</SeeInvisible>
            <Description>TXT_KEY_UNIT_LICH</Description>
            <Civilopedia>TXT_KEY_UNIT_LICH_PEDIA</Civilopedia>
            <Strategy></Strategy>
            <Advisor>ADVISOR_MILITARY</Advisor>
            <bAnimal>0</bAnimal>
            <bFood>0</bFood>
            <bNoBadGoodies>0</bNoBadGoodies>
            <bOnlyDefensive>0</bOnlyDefensive>
            <bNoCapture>0</bNoCapture>
            <bQuickCombat>0</bQuickCombat>
            <bRivalTerritory>0</bRivalTerritory>
            <bMilitaryHappiness>1</bMilitaryHappiness>
            <bMilitarySupport>1</bMilitarySupport>
            <bMilitaryProduction>1</bMilitaryProduction>
            <bPillage>1</bPillage>
            <bSpy>0</bSpy>
            <bSabotage>0</bSabotage>
            <bDestroy>0</bDestroy>
            <bStealPlans>0</bStealPlans>
            <bInvestigate>0</bInvestigate>
            <bCounterSpy>0</bCounterSpy>
            <bFound>0</bFound>
            <bGoldenAge>0</bGoldenAge>
            <bInvisible>0</bInvisible>
            <bFirstStrikeImmune>0</bFirstStrikeImmune>
            <bNoDefensiveBonus>0</bNoDefensiveBonus>
            <bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
            <bCanMoveImpassable>0</bCanMoveImpassable>
            <bCanMoveAllTerrain>0</bCanMoveAllTerrain>
            <bFlatMovementCost>0</bFlatMovementCost>
            <bIgnoreTerrainCost>0</bIgnoreTerrainCost>
            <bNukeImmune>0</bNukeImmune>
            <bPrereqBonuses>0</bPrereqBonuses>
            <bPrereqReligion>0</bPrereqReligion>
            <bMechanized>0</bMechanized>
            <bSuicide>0</bSuicide>
            <bHiddenNationality>0</bHiddenNationality>
            <bAlwaysHostile>0</bAlwaysHostile>
            <UnitClassUpgrades>
            </UnitClassUpgrades>
            <UnitClassTargets>
            </UnitClassTargets>
            <UnitCombatTargets>
            </UnitCombatTargets>
            <UnitClassDefenders>
            </UnitClassDefenders>
            <UnitCombatDefenders>
            </UnitCombatDefenders>
            <FlankingStrikes>
            </FlankingStrikes>
            <UnitAIs>
                <UnitAI>
                    <UnitAIType>UNITAI_RESERVE</UnitAIType>
                    <bUnitAI>1</bUnitAI>
                </UnitAI>
            </UnitAIs>
            <NotUnitAIs>
                <UnitAI>
                    <UnitAIType>UNITAI_WORKER</UnitAIType>
                    <bUnitAI>1</bUnitAI>
                </UnitAI>
            </NotUnitAIs>
            <Builds>
                <Build>
                    <BuildType>BUILD_MANA_AIR</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_BODY</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_CHAOS</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_DEATH</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_EARTH</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_ENCHANTMENT</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_ENTROPY</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_FIRE</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_LAW</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_LIFE</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_METAMAGIC</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_MIND</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_NATURE</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_SPIRIT</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_WATER</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_SHADOW</BuildType>
                    <bBuild>1</bBuild>
                </Build>
                <Build>
                    <BuildType>BUILD_MANA_SUN</BuildType>
                    <bBuild>1</bBuild>
                </Build>
            </Builds>
            <ReligionSpreads>
            </ReligionSpreads>
            <CorporationSpreads>
            </CorporationSpreads>
            <GreatPeoples>
            </GreatPeoples>
            <Buildings>
            </Buildings>
            <ForceBuildings>
            </ForceBuildings>
            <HolyCity>NONE</HolyCity>
            <ReligionType>NONE</ReligionType>
            <StateReligion>NONE</StateReligion>
            <PrereqReligion>NONE</PrereqReligion>
            <PrereqCorporation>NONE</PrereqCorporation>
            <PrereqBuilding>NONE</PrereqBuilding>
            <PrereqTech>NONE</PrereqTech>
            <TechTypes>
            </TechTypes>
            <BonusType>NONE</BonusType>
            <PrereqBonuses>
            </PrereqBonuses>
            <ProductionTraits>
            </ProductionTraits>
            <Flavors>
            </Flavors>
            <iAIWeight>0</iAIWeight>
            <iCost>-1</iCost>
            <iHurryCostModifier>0</iHurryCostModifier>
            <iAdvancedStartCost>-1</iAdvancedStartCost>
            <iAdvancedStartCostIncrease>0</iAdvancedStartCostIncrease>
            <iMinAreaSize>-1</iMinAreaSize>
            <iMoves>1</iMoves>
            <bNoRevealMap>0</bNoRevealMap>
            <iAirRange>0</iAirRange>
            <iAirUnitCap>0</iAirUnitCap>
            <iDropRange>0</iDropRange>
            <iNukeRange>-1</iNukeRange>
            <iWorkRate>400</iWorkRate>
            <iBaseDiscover>0</iBaseDiscover>
            <iDiscoverMultiplier>0</iDiscoverMultiplier>
            <iBaseHurry>0</iBaseHurry>
            <iHurryMultiplier>0</iHurryMultiplier>
            <iBaseTrade>0</iBaseTrade>
            <iTradeMultiplier>0</iTradeMultiplier>
            <iGreatWorkCulture>0</iGreatWorkCulture>
            <iEspionagePoints>0</iEspionagePoints>
            <TerrainImpassables>
            </TerrainImpassables>
            <FeatureImpassables>
            </FeatureImpassables>
            <TerrainPassableTechs>
            </TerrainPassableTechs>
            <FeaturePassableTechs>
            </FeaturePassableTechs>
            <iCombat>5</iCombat>
            <iCombatLimit>100</iCombatLimit>
            <iAirCombat>0</iAirCombat>
            <iAirCombatLimit>0</iAirCombatLimit>
            <iXPValueAttack>8</iXPValueAttack>
            <iXPValueDefense>4</iXPValueDefense>
            <iFirstStrikes>0</iFirstStrikes>
            <iChanceFirstStrikes>0</iChanceFirstStrikes>
            <iInterceptionProbability>0</iInterceptionProbability>
            <iEvasionProbability>0</iEvasionProbability>
            <iWithdrawalProb>0</iWithdrawalProb>
            <iCollateralDamage>0</iCollateralDamage>
            <iCollateralDamageLimit>0</iCollateralDamageLimit>
            <iCollateralDamageMaxUnits>0</iCollateralDamageMaxUnits>
            <iCityAttack>0</iCityAttack>
            <iCityDefense>0</iCityDefense>
            <iAnimalCombat>0</iAnimalCombat>
            <iHillsAttack>0</iHillsAttack>
            <iHillsDefense>0</iHillsDefense>
            <TerrainNatives>
            </TerrainNatives>
            <FeatureNatives>
            </FeatureNatives>
            <TerrainAttacks>
            </TerrainAttacks>
            <TerrainDefenses>
            </TerrainDefenses>
            <FeatureAttacks>
            </FeatureAttacks>
            <FeatureDefenses>
            </FeatureDefenses>
            <UnitClassAttackMods>
            </UnitClassAttackMods>
            <UnitClassDefenseMods>
            </UnitClassDefenseMods>
            <UnitCombatMods>
            </UnitCombatMods>
            <UnitCombatCollateralImmunes>
            </UnitCombatCollateralImmunes>
            <DomainMods>
            </DomainMods>
            <BonusProductionModifiers>
            </BonusProductionModifiers>
            <iBombRate>0</iBombRate>
            <iBombardRate>0</iBombardRate>
            <SpecialCargo>NONE</SpecialCargo>
            <DomainCargo>NONE</DomainCargo>
            <iCargo>0</iCargo>
            <iConscription>0</iConscription>
            <iCultureGarrison>3</iCultureGarrison>
            <iExtraCost>0</iExtraCost>
            <iAsset>10</iAsset>
            <iPower>20</iPower>
            <UnitMeshGroups>
            <iGroupSize>1</iGroupSize>
            <fMaxSpeed>1.75</fMaxSpeed>
            <fPadTime>1</fPadTime>
            <iMeleeWaveSize>1</iMeleeWaveSize>
            <iRangedWaveSize>0</iRangedWaveSize>
                <UnitMeshGroup>
                    <iRequired>1</iRequired>
                    <EarlyArtDefineTag>ART_DEF_UNIT_LICH</EarlyArtDefineTag>
                </UnitMeshGroup>
            </UnitMeshGroups>
            <FormationType>FORMATION_TYPE_DEFAULT</FormationType>
            <HotKey></HotKey>
            <bAltDown>0</bAltDown>
            <bShiftDown>0</bShiftDown>
            <bCtrlDown>0</bCtrlDown>
            <bGraphicalOnly>0</bGraphicalOnly>
            <iHotKeyPriority>0</iHotKeyPriority>
          [B]  <FreePromotions>
                <FreePromotion>
                    <PromotionType>PROMOTION_UNDEAD</PromotionType>
                    <bFreePromotion>1</bFreePromotion>
                </FreePromotion>
                [COLOR="Cyan"]<FreePromotion>
                    <PromotionType>PROMOTION_CHANNELING1</PromotionType>
                    <bFreePromotion>1</bFreePromotion>
                </FreePromotion>
                <FreePromotion>
                    <PromotionType>PROMOTION_CHANNELING2</PromotionType>
                    <bFreePromotion>1</bFreePromotion>
                </FreePromotion>
                <FreePromotion>
                    <PromotionType>PROMOTION_CHANNELING3</PromotionType>
                    <bFreePromotion>1</bFreePromotion>
                </FreePromotion>[/COLOR]
            </FreePromotions>[/B]
            <LeaderPromotion>NONE</LeaderPromotion>
            <iLeaderExperience>0</iLeaderExperience>
            <bAbandon>0</bAbandon>
            <bAutoRaze>0</bAutoRaze>
            <bDisableUpgradeTo>0</bDisableUpgradeTo>
            <bExplodeInCombat>0</bExplodeInCombat>
            <bFreeXP>1</bFreeXP>
            <bImmortal>0</bImmortal>
            <bNeverObsolete>1</bNeverObsolete>
            <bNoWarWeariness>0</bNoWarWeariness>
            <iCombatDefense>5</iCombatDefense>
            <iDurationFromCombat>0</iDurationFromCombat>
            <iEnslavementChance>0</iEnslavementChance>
            <iExtraGoldSupport>0</iExtraGoldSupport>
            <iFreePromotionPick>0</iFreePromotionPick>
            <iGoldFromCombat>0</iGoldFromCombat>
            <iMinLevel>0</iMinLevel>
            <iMiscastChance>0</iMiscastChance>
            <iModifyGlobalCounter>0</iModifyGlobalCounter>
            <iPrereqGlobalCounter>0</iPrereqGlobalCounter>
            <iTier>4</iTier>
            <iWeaponTier>0</iWeaponTier>
            <iWithdrawlProbDefensive>0</iWithdrawlProbDefensive>
            <DiploVoteType>NONE</DiploVoteType>
            <EquipmentPromotion>NONE</EquipmentPromotion>
            <PrereqAlignment>NONE</PrereqAlignment>
            <PrereqBuildingClass>NONE</PrereqBuildingClass>
            <PrereqCivic>NONE</PrereqCivic>
            <PromotionFromCombat>NONE</PromotionFromCombat>
            <Image>NONE</Image>
            <UnitConvertFromCombat>NONE</UnitConvertFromCombat>
            <iUnitConvertFromCombatChance>0</iUnitConvertFromCombatChance>
            <UnitCreateFromCombat>NONE</UnitCreateFromCombat>
            <iUnitCreateFromCombatChance>0</iUnitCreateFromCombatChance>
            <UpgradeCiv>NONE</UpgradeCiv>
            <PythonPostCombatLost></PythonPostCombatLost>
            <PythonPostCombatWon></PythonPostCombatWon>
            <DamageTypeCombats>
                <DamageTypeCombat>
                    <DamageType>DAMAGE_DEATH</DamageType>
                    <iCombat>2</iCombat>
                </DamageTypeCombat>
            </DamageTypeCombats>
            <BonusAffinities>
            </BonusAffinities>
        </UnitInfo>



--------------------------------
	def onUnitCreated(self, argsList):
		'Unit Completed'
		unit = argsList[0]
		player = PyPlayer(unit.getOwner())
		pPlayer = gc.getPlayer(unit.getOwner())
		[B]iChanneling2 = gc.getInfoTypeForString('PROMOTION_CHANNELING2')
		iChanneling3 = gc.getInfoTypeForString('PROMOTION_CHANNELING3')

		if unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ADEPT'):[/B]
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_AIR'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_AIR1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_AIR2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_AIR3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_BODY'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_BODY1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_BODY2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_BODY3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_CHAOS'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHAOS1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHAOS2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHAOS3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_DEATH'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_EARTH'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_EARTH1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_EARTH2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_EARTH3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENCHANTMENT1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENCHANTMENT2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENCHANTMENT3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENTROPY'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_FIRE'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ICE'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ICE1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ICE2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ICE3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LAW'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LAW1'), True)
				[B]if (iNum > 2 and unit.isHasPromotion(iChanneling2)):[/B]
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LAW2'), True)
					[B]if (iNum > 3 and unit.isHasPromotion(iChanneling3)):[/B]
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LAW3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LIFE'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_METAMAGIC'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_METAMAGIC1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_METAMAGIC2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_METAMAGIC3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_MIND'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MIND1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MIND2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MIND3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_NATURE'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NATURE1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NATURE2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NATURE3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SHADOW'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SHADOW1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SHADOW2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SHADOW3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SPIRIT'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SUN'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SUN1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SUN2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_SUN3'), True)
			iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_WATER'))
			if iNum > 1:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_WATER1'), True)
				if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
					unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_WATER2'), True)
					if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
						unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_WATER3'), True)

		if unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ELEMENTAL')):
			if pPlayer.getNumBuilding(gc.getInfoTypeForString('BUILDING_TOWER_OF_THE_ELEMENTS')) > 0:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)

		if unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_UNDEAD')):
			if pPlayer.getNumBuilding(gc.getInfoTypeForString('BUILDING_TOWER_OF_NECROMANCY')) > 0:
				unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)

		if (not self.__LOG_UNITBUILD):
			return
------------ 
The I added the cyan part, to show way to fix the problem

The check that gives out the first level of a sphere does not require a channeling promotion, while the third and fourth do. The XML only gives Liches 1 free promotion, Undead. The convert function works by first creating a new unit, then transferring all the promotions, xp, level, and religion from the old unit to the new and deleting the old. Since Liches don't gain Channeling 2 or 3 until after def onUnitCreated has run, they only get the first level for free.

Giving Liches Channeling 1-3 in the xml would fix this, if it needs fixing.

They haven't gotten the promotions the 'pedia says they do in a long time. I guess this was intentional, and the pedia is just outdated.
 
Mapscript bug (encountered twice) when launching custom game Erebus map, all default except Kuriotate deity player + 15 random AI civs & end of winter:
line 3221 in AssignStartingPlots
line 2153 in AssignStartingPlots
line 2209 in GetBestStartRegion
IndexError: list index out of range

I've gotten a similar error before. In short, the problem it that the map you're using is to small to place all the civilizations.

Use fewer civs or larger maps. Or get lucky and have a small map with many regions.

http://forums.civfanatics.com/showthread.php?p=7097582#post7097582
 
umh, there is an event where a hill giant demands pigs. if you tell him to piss off, he will spawn next to the city as a barbarian unit. is it supposed to just stand there and do nothing? cuz that's what it does right now ..
 
A couple of oddities with Hell terrain:

1- When retreating or being sanctified, hell terrain will change all resources to a default one:
- corn, wheat rice > rice
- any plantation resource > cotton
- any pasture resource > cow
- marble correctly comes back since it's the only quarry resource

If hell terrain spreads to these tiles with resources again, and it is again cleansed, the resources will revert to their original status. So it takes two cleansing to bring them back right, but not always you will get that chance.

2- The turn after completing Genesis, in the lands of the player who completed it, Hell terrain will spread to some tiles it originally didn't spread to. When this happened to me, Hyborem had even been eliminated... and I was playing a Good Civ (originally Neutral - Amurites).
 
Back
Top Bottom