Magister Modmod

I stared at the code for several minutes, could not come up with a reason why it should be doing that, didn't believe it was really happening, tested it, found it was happening, looked at the code again, still couldn't figure out why it was happening, gave up, and went to bed. Then, almost first thing after I woke up I looked at the code again, and the cause of the problems jumped out at me: I have forgotten the parentheses after unit.isAlive
 
Then, almost first thing after I woke up I looked at the code again, and the cause of the problems jumped out at me: I have forgotten the parentheses after unit.isAlive

Such an easy to miss bug :cry:
I added the parentheses to my copy and now it works as intended. No mane farming any more :goodjob:

Here is a fixed (I think) version of Govannons teaching code (with changes in red):
(note also that there are two lines in the lList2 array creation that were referencing lList)
Spoiler :
Code:
def perTurnTeachMagic(caster):
	lList = []
	iMagLib = gc.getInfoTypeForString('PROMOTION_MAGICALLY_LIBERAL')
	lList = lList + [iMagLib]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING2')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_CHANNELING1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_AIR1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_AIR1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_BODY1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_BODY1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHAOS1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_CHAOS1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CREATION1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_CREATION1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_DEATH1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DIMENSIONAL1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_DIMENSIONAL1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_EARTH1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_EARTH1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENCHANTMENT1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_ENCHANTMENT1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_ENTROPY1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_FIRE1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FORCE1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_FORCE1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ICE1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_ICE1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_LAW1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_LAW1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_LIFE1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_METAMAGIC1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_METAMAGIC1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_MIND1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_MIND1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_NATURE1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_NATURE1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SHADOW1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_SHADOW1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_SPIRIT1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUN1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_SUN1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_WATER1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_WATER1')]
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_EXTENSION1')):
		lList = lList + [gc.getInfoTypeForString('PROMOTION_EXTENSION1')]
	
	lList2 = []
	if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING3')):
		lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_CHANNELING2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_AIR3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_AIR2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_BODY3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_BODY2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHAOS3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_CHAOS2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CREATION3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_CREATION2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_DEATH2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DIMENSIONAL3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_DIMENSIONAL2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_EARTH3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_EARTH2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENCHANTMENT3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_ENCHANTMENT2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_ENTROPY2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_FIRE2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FORCE3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_FORCE2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ICE3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_ICE2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_LAW3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_LAW2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_LIFE2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_MIND3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_MIND2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_NATURE3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_NATURE2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SHADOW3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_SHADOW2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_SPIRIT2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SUN3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_SUN2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_WATER3')):
			lList2 = lList2 + [gc.getInfoTypeForString('PROMOTION_WATER2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_EXTENSION2')):
[COLOR="Red"]			lList2 = lList2[/COLOR] + [gc.getInfoTypeForString('PROMOTION_EXTENSION2')]
		if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CASWALLAWN')):
		[COLOR="Red"]	lList2 = lList2[/COLOR] + [gc.getInfoTypeForString('PROMOTION_CHANNELING3')]
	if len(lList) > 0:
		iAdept = gc.getInfoTypeForString('UNITCOMBAT_ADEPT')
		iAnimal = gc.getInfoTypeForString('UNITCOMBAT_ANIMAL')
		iBeast = gc.getInfoTypeForString('UNITCOMBAT_BEAST')
		pPlot = caster.plot()
		iPlayer = caster.getOwner()
		iTaught = 0
		iProm = lList[CyGame().getSorenRandNum(len(lList), "Govannon")]
		for i in range(pPlot.getNumUnits()):
			pUnit = pPlot.getUnit(i)
			if pUnit.getOwner() == iPlayer:
				if pUnit.isAlive():
					if pUnit.getUnitCombatType() != iAnimal and pUnit.getUnitCombatType() != iBeast:
						if iProm == iMagLib or pUnit.isHasPromotion(iMagLib) or pUnit.getUnitCombatType() != iAdept:
							if not pUnit.isHasPromotion(iProm):
								pUnit.setHasPromotion(iProm, True)
								iTaught += 1
								CyInterface().addMessage(caster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_MAGIC_TAUGHT", ()),'',1,gc.getPromotionInfo(iProm).getButton(),ColorTypes(8),[COLOR="Red"]caster.getX(),caster.getY()[/COLOR],True,True)
		if iTaught == 0:
			iProm = lList[CyGame().getSorenRandNum(len(lList), "Govannon")]
			for i in range(pPlot.getNumUnits()):
				pUnit = pPlot.getUnit(i)
				if pUnit.getOwner() == iPlayer:
					if pUnit.isAlive():
						if pUnit.getUnitCombatType() != iAnimal and pUnit.getUnitCombatType() != iBeast:
							if iProm == iMagLib or pUnit.isHasPromotion(iMagLib) or pUnit.getUnitCombatType() != iAdept:
								if not pUnit.isHasPromotion(iProm):
									pUnit.setHasPromotion(iProm, True)
									iTaught += 1
									CyInterface().addMessage([COLOR="Red"]caster.getOwner()[/COLOR],True,25,CyTranslator().getText("TXT_KEY_MESSAGE_MAGIC_TAUGHT", ()),'',1,gc.getPromotionInfo(iProm).getButton(),ColorTypes(8),[COLOR="Red"]caster.getX(),caster.getY()[/COLOR],True,True)
[COLOR="Red"]		if len(lList2) > 0:[/COLOR]
			if iTaught == 0:
				iProm = lList2[CyGame().getSorenRandNum(len([COLOR="Red"]lList2[/COLOR]), "Govannon")]
				for i in range(pPlot.getNumUnits()):
					pUnit = pPlot.getUnit(i)
					if pUnit.getOwner() == iPlayer:
						if pUnit.isAlive():
							if pUnit.getUnitCombatType() != iAnimal and pUnit.getUnitCombatType() != iBeast:
								if pUnit.isHasPromotion(iMagLib):
									if not pUnit.isHasPromotion(iProm):
										pUnit.setHasPromotion(iProm, True)
										iTaught += 1
										CyInterface().addMessage([COLOR="Red"]caster.getOwner()[/COLOR],True,25,CyTranslator().getText("TXT_KEY_MESSAGE_MAGIC_TAUGHT", ()),'',1,gc.getPromotionInfo(iProm).getButton(),ColorTypes(8),[COLOR="Red"]caster.getX(),caster.getY()[/COLOR],True,True)
										break
			if iTaught == 0:
				iProm = lList2[CyGame().getSorenRandNum(len([COLOR="Red"]lList2[/COLOR]), "Govannon")]
				for i in range(pPlot.getNumUnits()):
					pUnit = pPlot.getUnit(i)
					if pUnit.getOwner() == iPlayer:
						if pUnit.isAlive():
							if pUnit.getUnitCombatType() != iAnimal and pUnit.getUnitCombatType() != iBeast:
								if pUnit.isHasPromotion(iMagLib):
									if not pUnit.isHasPromotion(iProm):
										pUnit.setHasPromotion(iProm, True)
										iTaught += 1
										CyInterface().addMessage([COLOR="Red"]caster.getOwner()[/COLOR],True,25,CyTranslator().getText("TXT_KEY_MESSAGE_MAGIC_TAUGHT", ()),'',1,gc.getPromotionInfo(iProm).getButton(),ColorTypes(8),[COLOR="Red"]caster.getX(),caster.getY()[/COLOR],True,True)
										break

Thats all for now. Keep up the good work :)
 
Got a new error today:

Spoiler :
Code:
Traceback (most recent call last):
  File "CvSpellInterface", line 22, in cast
  File "<string>", line 0, in ?
  File "CvSpellInterface", line 2907, in spellLegends
NameError
: 
global name 'city' is not defined

ERR: Python function cast failed, module CvSpellInterface

Basically in spellLegends:
Spoiler :
Code:
def spellLegends(caster):
	iPlayer = caster.getOwner()
	pPlayer = gc.getPlayer(iPlayer)
	iCult = gc.getInfoTypeForString('PROMOTION_CULT_OF_THE_DRAGON')
	for pyCity in PyPlayer(iPlayer).getCityList() :
		pCity = pyCity.GetCy()
		pCity.changeCulture(iPlayer, 300, True)
	for iPlayer2 in range(gc.getMAX_PLAYERS()):
			pPlayer2 = gc.getPlayer(iPlayer2)				
			if pPlayer2.isAlive():
				py = PyPlayer(iPlayer2)
				for pUnit in py.getUnitList():
					iChance = 20
					if not pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DRAGON_SLAYING')):
						pPlot = pUnit.plot()
						if pPlot.isCity():
							pCity = pPlot.getPlotCity()			
							if pCity.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SHEAIM'):
								iChance = iChance + 20
							if pCity.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_KURIOTATES'):
								iChance = iChance + 15
							if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_DRAGON_SHRINE')) > 0:
								iChance = iChance + 15
							if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_BONE_PALACE')) > 0:
								iChance = iChance + 5
							if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_THE_DRAGONS_HORDE')):
								if pCity.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_BARBARIAN'):
									iChance = 100
								else:
									iChance = iChance + 15
							if [COLOR="Red"]city[/COLOR].getNumRealBuilding(gc.getInfoTypeForString('BUILDING_SHRINE_OF_THE_INFERNO')) > 0:
								iCultChance = iChance + 20
						if pUnit.isAlive() and CyGame().getSorenRandNum(100, "Cult") <= iChance:
							pUnit.setHasPromotion(iCult, True)
							CyInterface().addMessage(pUnit.getOwner(),True,25,CyTranslator().getText("A unit has converted to the Cult of the Dragon.",()),'AS2D_DRAGON_DINK',1,'Art/Interface/Buttons/Promotions/dragon.dds',ColorTypes(5),pUnit.getX(),pUnit.getY(),True,True)
							pUnit.setReligion(-1)
							if pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DIVINE2')):
								pUnit.kill(True, 0)

city should be pCity
 
Hi MC,

would you be so kind to release a new download/patch/zipfile which fixes the previous mentioned bugs. Please do it soon, I love your mod. Thanks for your great work, I really appreciate it very very much!!! When I have time I like to play all the modmods and atm I always come back to yours.

Greez,

Tschuggi
 
Great update thank you so much for this briliant modmod.I'm glad you fixed many bugs and also took care of the TXT_KEY...... things in-game (they really get on my nerves)
 
I took care of care of more of them, as well as fixing all the bugs listed here, over a week ago. I would have released a new version already if school had not been so busy. There are still a couple things I want to test out first, but I'll probably release a new version tomorrow night.
 
Ahem, Magister ... if I just now downloaded the latest versoin, will I still have to switch lines 6587 and 6588?
 
Ahem, Magister ... if I just now downloaded the latest versoin, will I still have to switch lines 6587 and 6588?

At the time of your download the latest version posted was 3 weeks old. That change is recommended if you want to play that version without an army of Auric Ulvins.


However, I just uploaded a newer version that should not have any of the bugs so far discussed in this thread. I'd recommend just using the newer version.
 
I'd just like to say that I think its really cool that your making your dream a reality. (and sending it to the masses). Even if you had to wait as long as you did for stability of version or what not.

I myself, have some grand ideas for a mod I'd like to make (new-ish IP), and even though I barely know any coding at the moment, I'd just like to say thanks. For being a one person modding team. And for continuing regardless of pacing or setbacks.
 
I just noticed that I forgot to include the modified GlobalDefinesAlt.xml. This file was not changed since last release, so if you just installed this over that it should be no problem. Using the default file there would generate an error upon loading because SpellInfos.xml does not contain a spell to let Govannon train magic, as that is passive in my version. This is not a real problem though, and does not effect gameplay.

The real problem with lacking this file is that wonders can't require 21 different resources. I don;t quite remember if that means that The Tower of Mastery will be impossible to build, or easier.

Your heroes will also get a bit less free xp, but I think that is the only other issue with lacking the file.

I would go ahead and upload it, but that would mean upzipping, rezippsing, and reuploading and I'm feeling too lazy night now. I think I'll wait until someone finds a real bug to fix. In the mean time, I'll post the proper content of the file here for those who are downloading the mod fo rthe first time.
Spoiler :
<?xml version="1.0"?>
<!-- Created with the FfH editor by Kael -->
<!-- Sid Meier's Civilization 4 -->
<!-- Copyright Firaxis Games 2005 -->
<!-- -->
<!-- Global Defines -->
<Civ4Defines xmlns="x-schema:CIV4GlobalDefinesSchema.xml">
<Define>
<DefineName>MODS_SHOULD_OVERRIDE_GLOBAL_DEFINES_HERE</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>START_YEAR</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>BASE_RESEARCH_RATE</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>NUM_BUILDING_PREREQ_OR_BONUSES</DefineName>
<iDefineIntVal>21</iDefineIntVal>
</Define>
<Define>
<DefineName>MAX_NATIONAL_WONDERS_PER_CITY</DefineName>
<iDefineIntVal>-1</iDefineIntVal>
</Define>
<Define>
<DefineName>MAX_NATIONAL_WONDERS_PER_CITY_FOR_OCC</DefineName>
<iDefineIntVal>-1</iDefineIntVal>
</Define>
<Define>
<DefineName>INITIAL_CITY_POPULATION</DefineName>
<iDefineIntVal>2</iDefineIntVal>
</Define>
<Define>
<DefineName>MAX_TRADE_ROUTES</DefineName>
<iDefineIntVal>12</iDefineIntVal>
</Define>
<Define>
<DefineName>RIVER_ATTACK_MODIFIER</DefineName>
<iDefineIntVal>-40</iDefineIntVal>
</Define>
<Define>
<DefineName>GREAT_PEOPLE_THRESHOLD_INCREASE</DefineName>
<iDefineIntVal>100</iDefineIntVal>
</Define>
<Define>
<DefineName>GREAT_PEOPLE_THRESHOLD_INCREASE_TEAM</DefineName>
<iDefineIntVal>100</iDefineIntVal>
</Define>
<Define>
<DefineName>BASE_SPY_SABOTAGE_COST</DefineName>
<iDefineIntVal>50</iDefineIntVal>
</Define>
<Define>
<DefineName>BASE_SPY_DESTROY_COST</DefineName>
<iDefineIntVal>25</iDefineIntVal>
</Define>
<Define>
<DefineName>BASE_SPY_STEAL_PLANS_COST</DefineName>
<iDefineIntVal>25</iDefineIntVal>
</Define>
<Define>
<DefineName>ANIMAL_MAX_XP_VALUE</DefineName>
<iDefineIntVal>500</iDefineIntVal>
</Define>
<Define>
<DefineName>BARBARIAN_MAX_XP_VALUE</DefineName>
<iDefineIntVal>500</iDefineIntVal>
</Define>
<Define>
<DefineName>GOLDEN_AGE_LENGTH</DefineName>
<iDefineIntVal>12</iDefineIntVal>
</Define>
<Define>
<DefineName>TECH_COST_EXTRA_TEAM_MEMBER_MODIFIER</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>TECH_COST_TOTAL_KNOWN_TEAM_MODIFIER</DefineName>
<iDefineIntVal>10</iDefineIntVal>
</Define>
<Define>
<DefineName>MIN_REVOLUTION_TURNS</DefineName>
<iDefineIntVal>10</iDefineIntVal>
</Define>
<Define>
<DefineName>MAX_EXPERIENCE_PER_COMBAT</DefineName>
<iDefineIntVal>999</iDefineIntVal>
</Define>
<Define>
<DefineName>MAX_EXPERIENCE_AFTER_UPGRADE</DefineName>
<iDefineIntVal>999</iDefineIntVal>
</Define>
<Define>
<DefineName>BASE_UNIT_UPGRADE_COST</DefineName>
<iDefineIntVal>5</iDefineIntVal>
</Define>
<Define>
<DefineName>UNIT_UPGRADE_COST_PER_PRODUCTION</DefineName>
<iDefineIntVal>2</iDefineIntVal>
</Define>
<Define>
<DefineName>CAMERA_CITY_ZOOM_IN_DISTANCE</DefineName>
<fDefineFloatVal>4250</fDefineFloatVal>
</Define>
<Define>
<DefineName>ADVANCED_START_ALLOWS_UNITS_OUTSIDE_CITIES</DefineName>
<iDefineIntVal>1</iDefineIntVal>
</Define>
<Define>
<DefineName>ADVANCED_START_CITY_COST_INCREASE</DefineName>
<iDefineIntVal>50</iDefineIntVal>
</Define>
<Define>
<DefineName>FIRST_EVENT_DELAY_TURNS</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>NO_ESPIONAGE_CULTURE_LEVEL_MODIFIER</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_GOOD</DefineName>
<iDefineIntVal>2</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_NEUTRAL</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_EVIL</DefineName>
<iDefineIntVal>-4</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_GOOD</DefineName>
<iDefineIntVal>-2</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_NEUTRAL</DefineName>
<iDefineIntVal>0</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_EVIL</DefineName>
<iDefineIntVal>-2</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_GOOD</DefineName>
<iDefineIntVal>-2</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_NEUTRAL</DefineName>
<iDefineIntVal>-2</iDefineIntVal>
</Define>
<Define>
<DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_EVIL</DefineName>
<iDefineIntVal>2</iDefineIntVal>
</Define>
<Define>
<DefineName>APOCALYPSE_KILL_CHANCE</DefineName>
<iDefineIntVal>60</iDefineIntVal>
</Define>
<Define>
<DefineName>BARBARIAN_EXPERIENCE_MODIFIER</DefineName>
<iDefineIntVal>75</iDefineIntVal>
</Define>
<Define>
<DefineName>BONUS_MANA</DefineName>
<DefineTextVal>BONUS_MANA</DefineTextVal>
</Define>
<Define>
<DefineName>BONUSCLASS_MANA</DefineName>
<DefineTextVal>BONUSCLASS_MANA</DefineTextVal>
</Define>
<Define>
<DefineName>BONUSCLASS_MANA_RAW</DefineName>
<DefineTextVal>BONUSCLASS_RAWMANA</DefineTextVal>
</Define>
<Define>
<DefineName>BUILD_FORT</DefineName>
<DefineTextVal>BUILD_FORT</DefineTextVal>
</Define>
<Define>
<DefineName>CIVILIZATION_KHAZAD</DefineName>
<DefineTextVal>CIVILIZATION_KHAZAD</DefineTextVal>
</Define>
<Define>
<DefineName>CIVILIZATION_LANUN</DefineName>
<DefineTextVal>CIVILIZATION_LANUN</DefineTextVal>
</Define>
<Define>
<DefineName>COMBAT_APPLY_CHANCE</DefineName>
<iDefineIntVal>50</iDefineIntVal>
</Define>
<Define>
<DefineName>CRUSADE_SPAWN_CHANCE</DefineName>
<iDefineIntVal>20</iDefineIntVal>
</Define>
<Define>
<DefineName>FEATURE_REQUIRE_RESIST_AMOUNT</DefineName>
<iDefineIntVal>20</iDefineIntVal>
</Define>
<Define>
<DefineName>FEATURE_UPGRADE_CHANCE</DefineName>
<iDefineIntVal>3</iDefineIntVal>
</Define>
<Define>
<DefineName>FLAMES_EXPIRE_CHANCE</DefineName>
<iDefineIntVal>20</iDefineIntVal>
</Define>
<Define>
<DefineName>FLAMES_EXPIRE_EFFECT</DefineName>
<DefineTextVal>FEATURE_FOREST_BURNT</DefineTextVal>
</Define>
<Define>
<DefineName>FLAMES_FEATURE</DefineName>
<DefineTextVal>FEATURE_FLAMES</DefineTextVal>
</Define>
<Define>
<DefineName>FLAMES_SPREAD_CHANCE</DefineName>
<iDefineIntVal>20</iDefineIntVal>
</Define>
<Define>
<DefineName>FLAMES_SPREAD_EFFECT</DefineName>
<DefineTextVal>IMPROVEMENT_SMOKE</DefineTextVal>
</Define>
<Define>
<DefineName>FLOOD_PLAINS_FEATURE</DefineName>
<DefineTextVal>FEATURE_FLOOD_PLAINS</DefineTextVal>
</Define>
<Define>
<DefineName>FREE_XP_MAX</DefineName>
<iDefineIntVal>100</iDefineIntVal>
</Define>
<Define>
<DefineName>GLOBAL_COUNTER_LIMIT_DEFAULT</DefineName>
<iDefineIntVal>50</iDefineIntVal>
</Define>
<Define>
<DefineName>GLOBAL_COUNTER_LIMIT_PER_PLAYER</DefineName>
<iDefineIntVal>12</iDefineIntVal>
</Define>
<Define>
<DefineName>GREAT_COMMANDER_PROMOTION</DefineName>
<DefineTextVal>PROMOTION_GREAT_COMMANDER</DefineTextVal>
</Define>
<Define>
<DefineName>HELLFIRE_CHANCE</DefineName>
<iDefineIntVal>200</iDefineIntVal>
</Define>
<Define>
<DefineName>HIDDEN_NATIONALITY_PROMOTION</DefineName>
<DefineTextVal>PROMOTION_HIDDEN_NATIONALITY</DefineTextVal>
</Define>
<Define>
<DefineName>IMPROVEMENT_UNIQUE_CHANCE</DefineName>
<iDefineIntVal>30</iDefineIntVal>
</Define>
<Define>
<DefineName>INVISIBLE_TYPE</DefineName>
<DefineTextVal>INVISIBLE_LAND</DefineTextVal>
</Define>
<Define>
<DefineName>LOKI_UNREST_CHANCE</DefineName>
<iDefineIntVal>15</iDefineIntVal>
</Define>
<Define>
<DefineName>MUTATED_PROMOTION</DefineName>
<DefineTextVal>PROMOTION_MUTATED</DefineTextVal>
</Define>
<Define>
<DefineName>MUTATION_CHANCE</DefineName>
<iDefineIntVal>8</iDefineIntVal>
</Define>
<Define>
<DefineName>ORDER_SPAWN_CHANCE</DefineName>
<iDefineIntVal>75</iDefineIntVal>
</Define>
<Define>
<DefineName>PIRATE_COVE_IMPROVEMENT</DefineName>
<DefineTextVal>IMPROVEMENT_PIRATE_COVE</DefineTextVal>
</Define>
<Define>
<DefineName>PLANAR_GATE_CHANCE</DefineName>
<iDefineIntVal>600</iDefineIntVal>
</Define>
<Define>
<DefineName>POISONED_PROMOTION</DefineName>
<DefineTextVal>PROMOTION_POISONED</DefineTextVal>
</Define>
<Define>
<DefineName>PROMOTION_CHANNELING1</DefineName>
<DefineTextVal>PROMOTION_CHANNELING1</DefineTextVal>
</Define>
<Define>
<DefineName>PROMOTION_CHANNELING3</DefineName>
<DefineTextVal>PROMOTION_CHANNELING3</DefineTextVal>
</Define>
<Define>
<DefineName>RANDOM_CIVILIZATION</DefineName>
<DefineTextVal>CIVILIZATION_RANDOM</DefineTextVal>
</Define>
<Define>
<DefineName>RAZE_COST_BASE</DefineName>
<iDefineIntVal>1</iDefineIntVal>
</Define>
<Define>
<DefineName>RAZE_COST_PER_POPULATION</DefineName>
<iDefineIntVal>1</iDefineIntVal>
</Define>
<Define>
<DefineName>RAZE_COST_PER_POPULATION_OVER</DefineName>
<iDefineIntVal>5</iDefineIntVal>
</Define>
<Define>
<DefineName>RELIGION_ADOPTION_CHANCE</DefineName>
<iDefineIntVal>20</iDefineIntVal>
</Define>
<Define>
<DefineName>SLAVE_UNIT</DefineName>
<DefineTextVal>UNIT_SLAVE</DefineTextVal>
</Define>
<Define>
<DefineName>SOMNIUM_BASE_DELAY_TURNS</DefineName>
<iDefineIntVal>30</iDefineIntVal>
</Define>
<Define>
<DefineName>SPECIALUNIT_SPELL</DefineName>
<DefineTextVal>SPECIALUNIT_SPELL</DefineTextVal>
</Define>
<Define>
<DefineName>SPELL_CONVERT_CITY_RANTINE</DefineName>
<DefineTextVal>SPELL_CONVERT_CITY_RANTINE</DefineTextVal>
</Define>
<Define>
<DefineName>SPELL_DISRUPT</DefineName>
<DefineTextVal>SPELL_DISRUPT</DefineTextVal>
</Define>
<Define>
<DefineName>SPELL_FEAST</DefineName>
<DefineTextVal>SPELL_FEAST</DefineTextVal>
</Define>
<Define>
<DefineName>SPELL_HASTE</DefineName>
<DefineTextVal>SPELL_HASTE</DefineTextVal>
</Define>
<Define>
<DefineName>SPELL_RESIST_CHANCE_BASE</DefineName>
<iDefineIntVal>10</iDefineIntVal>
</Define>
<Define>
<DefineName>SPELL_RESIST_CHANCE_MAX</DefineName>
<iDefineIntVal>100</iDefineIntVal>
</Define>
<Define>
<DefineName>SPELL_RESIST_CHANCE_MIN</DefineName>
<iDefineIntVal>5</iDefineIntVal>
</Define>
<Define>
<DefineName>SPELL_TEACH_SPELLCASTING</DefineName>
<DefineTextVal>NONE</DefineTextVal>
</Define>
<Define>
<DefineName>STARTING_SETTLER_PROMOTION</DefineName>
<DefineTextVal>PROMOTION_STARTING_SETTLER</DefineTextVal>
</Define>
<Define>
<DefineName>TECH_FESTIVALS</DefineName>
<DefineTextVal>TECH_FESTIVALS</DefineTextVal>
</Define>
<Define>
<DefineName>TECH_TAXATION</DefineName>
<DefineTextVal>TECH_TAXATION</DefineTextVal>
</Define>
<Define>
<DefineName>TECH_WAY_OF_THE_EARTHMOTHER</DefineName>
<DefineTextVal>TECH_WAY_OF_THE_EARTHMOTHER</DefineTextVal>
</Define>
<Define>
<DefineName>TILES_PER_SPAWN</DefineName>
<iDefineIntVal>6</iDefineIntVal>
</Define>
<Define>
<DefineName>TREANT_SPAWN_CHANCE</DefineName>
<iDefineIntVal>5</iDefineIntVal>
</Define>
<Define>
<DefineName>UNIT_FIREBALL</DefineName>
<DefineTextVal>UNIT_FIREBALL</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_GOVANNON</DefineName>
<DefineTextVal>UNIT_GOVANNON</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_LOKI</DefineName>
<DefineTextVal>UNIT_LOKI</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_PYRE_ZOMBIE</DefineName>
<DefineTextVal>UNIT_PYRE_ZOMBIE</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_RANTINE</DefineName>
<DefineTextVal>UNIT_RANTINE</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_VAMPIRE</DefineName>
<DefineTextVal>NONE</DefineTextVal>
</Define>
<Define>
<DefineName>UNIT_VAMPIRE_LORD</DefineName>
<DefineTextVal>UNIT_VAMPIRE_LORD</DefineTextVal>
</Define>
<Define>
<DefineName>UNITCLASS_SCOUT</DefineName>
<DefineTextVal>UNITCLASS_SCOUT</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_PROMOTION_TIER1</DefineName>
<DefineTextVal>PROMOTION_BRONZE_WEAPONS</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_PROMOTION_TIER2</DefineName>
<DefineTextVal>PROMOTION_IRON_WEAPONS</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_PROMOTION_TIER3</DefineName>
<DefineTextVal>PROMOTION_MITHRIL_WEAPONS</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_REQ_BONUS_TIER1</DefineName>
<DefineTextVal>BONUS_COPPER</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_REQ_BONUS_TIER2</DefineName>
<DefineTextVal>BONUS_IRON</DefineTextVal>
</Define>
<Define>
<DefineName>WEAPON_REQ_BONUS_TIER3</DefineName>
<DefineTextVal>BONUS_MITHRIL</DefineTextVal>
</Define>
<Define>
<DefineName>WRATH_CONVERT_CHANCE</DefineName>
<iDefineIntVal>50</iDefineIntVal>
</Define>
</Civ4Defines>


I also noticed that I still have the Bazaar of Mammon as both a world and national wonder, whereas I only wanted it as a world wonder. You can change a 1 to a -1 in CIV4BuildingClassinfos.xml if you want to be able to capture the wonder.
 
I'm playing the newest version as the Sheaim, and I have summoned all of the Infernal leaders a few turns back, and now I am suddenly getting loads of messages saying Great People have been born at Duke Sallos' place. So I took a look in his city with the Ctrl+Z cheat, and it turns out his Unhealth, Unhappiness, and GP points are all somewhere in the two billion. Of course, being Infernal he couldn't care less about the Unhealth and Unhappiness, but the GPP is giving him quite a lot of Great People.
 

Attachments

  • sheaim.CivBeyondSwordSave
    299.7 KB · Views: 65
yikes ... 2 billion is a lot. Kinda like the real population of China xD
 
Happens as soon as the game starts. Seems to occur on any map.
Spoiler :
I'm still getting a bunch of those on game start or when regenerating a map.

Aeron's chosen doesn't trigger. I've commented out those lines and it immediately triggered on Auric (before I modifed CIV4EventTriggerInfos.xml to limit it to marksmen)
Code:
	iMark = gc.getInfoTypeForString('PROMOTION_MARKSMAN')
	if not pUnit.isHasPromotion(iMark):
		return False

I've also noticed that you've moved councils to WotW techs, why a sudden change in heart?
 
See if things get better if you change

Code:
        for i in range (CyMap().numPlots()):
            pPlot = CyMap().plotByIndex(i)
            pPlot.setBonusType(gc.getImprovementInfo(pPlot.getImprovementType()).getBonusConvert())
to
Code:
        for i in range (CyMap().numPlots()):
            pPlot = CyMap().plotByIndex(i)
            if not pPlot.getImprovementType() == -1:
                pPlot.setBonusType(gc.getImprovementInfo(pPlot.getImprovementType()).getBonusConvert())
I just realized that the bug may be caused by the code trying to decide what bonus the improvement on an unimproved tile gives. Checking unimproved tiles could be causing this section of code to stop before it reaches one of the unique improvements that on certain terrains/features like FloodPlanes or in scenarios with random bonuses seem to have their mana sources removed. If that does now work, this section of code can easily be deleted, as it never seems to have actually done anything anyway.



I've seen Aeron's Chosen trigger plenty of times since the last time I touched that code. Most frequently it goes to Losha Valas, as is intended. Are you sure it is not triggering, or is someone else just getting it before you can?

I don't think the xml file can limit it based on what promotions the unit has, only based on unitclass. I definately want Losha Valas, Alazkan the Assassin, and Rathus Denmora to be eligible for the event as well as Assassins, Shadows, and Marksman. I also do not think that Devouts should be eligible, as they are in vanilla FfH2 because they share a unitclass with Assassins.

I'm also considering removing the Aeron's Chosen as a unique event, and making it so that Aeron's constellation event, the Obsidian Scepter, will give out the promotion to one eligible unit if such a unit exists.


I moved the councils when I decided to make the Radiant Guards and Nightwatches require the appropriate council and abandon you if you had not adopted it. Having Deception as the prereq for the Undercouncil made it so that the initial Nightwatch would abandon you before it could spread CoE, thus making it really hard to adopt the religion at all. I may get rid of the abandonment and change the tech prereqs back though.


I'm rather busy with school now, so I won't be modding for some time.
 
Having some fun with your Mod Mod. Playing a Lanun game and laughing as I remember how unbalanced there economy is, even when not playing as Hannah.

So, comments thus far:

I like the free units. Having an adept pop right away was nice, but popping a priest might be a tad imba. I can usually get a religion around turn 75-100 (w/o philosophical). There's not much that can stop a cultist at that point in the game. Killed the poor elves and there coastal city all by himself, capturing a bunch of warriors in the process. Now off to kill the dwarves. It would help if they at least had some sort of promo that reduced strength until priesthood is released.

Free specialists are an interesting bonus to wonders, but It's a little unclear how they work at first. I had to read through my buildings a couple times before I could account for them all and determine that it is running on the fat cross and not empire wide. I am worried that this will make an altar victory too easy. I can run at max priests all the time without sacrificing any city growth or economy.

Heron Throne might be too good for it's hammer cost, now that it's an empire wide thing that also give a free specialist.

There is one thing I would like to see added. Someone made a mod that would enable a city to build more then one unit at a time if it had enough hammers. I think Sephi merged it into his mod mod. Would you be able to as well?

Also:
I was quite surprised to see bronze warriors, after all the discussion(and poll) in the forums about how important it is to balance warriors and remove their bronze weapons.

I think this stagnates the early game too much. Axemen, while worth the extra cost, take comparatively long time to build unless you've got a good amount of hammers. You need something to give early warrior attacks an edge to get over the natural defense bonus. It also let's civs which are behind a bit in tech still be able to mount a reasonable defense.


Edit:
Is this a bug? Necronomicon gives mutation to warriors when built (working as intended), but gives it again (adding more promos) when these warriors are drowned using the temple ability.
 
there's an error that pops up about the xml file Civ4SpellInfos as the mod is loading. Could you explain how to fix that?
 
Ditto on the "teach spellcasting" XML error.
 
It seems that I forgot to include a modified GlobalDefinesAlt.xml in the upload. The pop-ups are because there are defines in that file used by the AI, to teach them how to use Govanon, Vampires, etc. My modified version sets these to NONE, which disables these pop-ups. The AI code does not matter either way.

The bigger issue with the missing file is that it does not allow the Tower of Mastery to require all 21 spheres of mana in order to be built.


I'll still be way too busy for modding for at least a month, but here I copied and pasted the file from my computer.

Code:
<?xml version="1.0"?>
<!-- Created with the FfH editor by Kael -->
<!-- Sid Meier's Civilization 4 -->
<!-- Copyright Firaxis Games 2005 -->
<!-- -->
<!-- Global Defines -->
<Civ4Defines xmlns="x-schema:CIV4GlobalDefinesSchema.xml">
    <Define>
        <DefineName>MODS_SHOULD_OVERRIDE_GLOBAL_DEFINES_HERE</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>START_YEAR</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BASE_RESEARCH_RATE</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>NUM_BUILDING_PREREQ_OR_BONUSES</DefineName>
        <iDefineIntVal>21</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MAX_NATIONAL_WONDERS_PER_CITY</DefineName>
        <iDefineIntVal>-1</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MAX_NATIONAL_WONDERS_PER_CITY_FOR_OCC</DefineName>
        <iDefineIntVal>-1</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>INITIAL_CITY_POPULATION</DefineName>
        <iDefineIntVal>2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MAX_TRADE_ROUTES</DefineName>
        <iDefineIntVal>12</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>RIVER_ATTACK_MODIFIER</DefineName>
        <iDefineIntVal>-40</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GREAT_PEOPLE_THRESHOLD_INCREASE</DefineName>
        <iDefineIntVal>100</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GREAT_PEOPLE_THRESHOLD_INCREASE_TEAM</DefineName>
        <iDefineIntVal>100</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BASE_SPY_SABOTAGE_COST</DefineName>
        <iDefineIntVal>50</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BASE_SPY_DESTROY_COST</DefineName>
        <iDefineIntVal>25</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BASE_SPY_STEAL_PLANS_COST</DefineName>
        <iDefineIntVal>25</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ANIMAL_MAX_XP_VALUE</DefineName>
        <iDefineIntVal>500</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BARBARIAN_MAX_XP_VALUE</DefineName>
        <iDefineIntVal>500</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GOLDEN_AGE_LENGTH</DefineName>
        <iDefineIntVal>12</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>TECH_COST_EXTRA_TEAM_MEMBER_MODIFIER</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>TECH_COST_TOTAL_KNOWN_TEAM_MODIFIER</DefineName>
        <iDefineIntVal>10</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MIN_REVOLUTION_TURNS</DefineName>
        <iDefineIntVal>10</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MAX_EXPERIENCE_PER_COMBAT</DefineName>
        <iDefineIntVal>999</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MAX_EXPERIENCE_AFTER_UPGRADE</DefineName>
        <iDefineIntVal>999</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BASE_UNIT_UPGRADE_COST</DefineName>
        <iDefineIntVal>5</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>UNIT_UPGRADE_COST_PER_PRODUCTION</DefineName>
        <iDefineIntVal>2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>CAMERA_CITY_ZOOM_IN_DISTANCE</DefineName>
        <fDefineFloatVal>4250</fDefineFloatVal>
    </Define>
    <Define>
        <DefineName>ADVANCED_START_ALLOWS_UNITS_OUTSIDE_CITIES</DefineName>
        <iDefineIntVal>1</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ADVANCED_START_CITY_COST_INCREASE</DefineName>
        <iDefineIntVal>50</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FIRST_EVENT_DELAY_TURNS</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>NO_ESPIONAGE_CULTURE_LEVEL_MODIFIER</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_GOOD</DefineName>
        <iDefineIntVal>2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_NEUTRAL</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_GOOD_TO_EVIL</DefineName>
        <iDefineIntVal>-4</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_GOOD</DefineName>
        <iDefineIntVal>-2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_NEUTRAL</DefineName>
        <iDefineIntVal>0</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_NEUTRAL_TO_EVIL</DefineName>
        <iDefineIntVal>-2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_GOOD</DefineName>
        <iDefineIntVal>-2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_NEUTRAL</DefineName>
        <iDefineIntVal>-2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ALIGNMENT_ATTITUDE_EVIL_TO_EVIL</DefineName>
        <iDefineIntVal>2</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>APOCALYPSE_KILL_CHANCE</DefineName>
        <iDefineIntVal>60</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BARBARIAN_EXPERIENCE_MODIFIER</DefineName>
        <iDefineIntVal>75</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>BONUS_MANA</DefineName>
        <DefineTextVal>BONUS_MANA</DefineTextVal>
    </Define>
    <Define>
        <DefineName>BONUSCLASS_MANA</DefineName>
        <DefineTextVal>BONUSCLASS_MANA</DefineTextVal>
    </Define>
    <Define>
        <DefineName>BONUSCLASS_MANA_RAW</DefineName>
        <DefineTextVal>BONUSCLASS_RAWMANA</DefineTextVal>
    </Define>
    <Define>
        <DefineName>BUILD_FORT</DefineName>
        <DefineTextVal>BUILD_FORT</DefineTextVal>
    </Define>
    <Define>
        <DefineName>CIVILIZATION_KHAZAD</DefineName>
        <DefineTextVal>CIVILIZATION_KHAZAD</DefineTextVal>
    </Define>
    <Define>
        <DefineName>CIVILIZATION_LANUN</DefineName>
        <DefineTextVal>CIVILIZATION_LANUN</DefineTextVal>
    </Define>
    <Define>
        <DefineName>COMBAT_APPLY_CHANCE</DefineName>
        <iDefineIntVal>50</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>CRUSADE_SPAWN_CHANCE</DefineName>
        <iDefineIntVal>20</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FEATURE_REQUIRE_RESIST_AMOUNT</DefineName>
        <iDefineIntVal>20</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FEATURE_UPGRADE_CHANCE</DefineName>
        <iDefineIntVal>3</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FLAMES_EXPIRE_CHANCE</DefineName>
        <iDefineIntVal>20</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FLAMES_EXPIRE_EFFECT</DefineName>
        <DefineTextVal>FEATURE_FOREST_BURNT</DefineTextVal>
    </Define>
    <Define>
        <DefineName>FLAMES_FEATURE</DefineName>
        <DefineTextVal>FEATURE_FLAMES</DefineTextVal>
    </Define>
    <Define>
        <DefineName>FLAMES_SPREAD_CHANCE</DefineName>
        <iDefineIntVal>20</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>FLAMES_SPREAD_EFFECT</DefineName>
        <DefineTextVal>IMPROVEMENT_SMOKE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>FLOOD_PLAINS_FEATURE</DefineName>
        <DefineTextVal>FEATURE_FLOOD_PLAINS</DefineTextVal>
    </Define>
    <Define>
        <DefineName>FREE_XP_MAX</DefineName>
        <iDefineIntVal>100</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GLOBAL_COUNTER_LIMIT_DEFAULT</DefineName>
        <iDefineIntVal>50</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GLOBAL_COUNTER_LIMIT_PER_PLAYER</DefineName>
        <iDefineIntVal>12</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>GREAT_COMMANDER_PROMOTION</DefineName>
        <DefineTextVal>PROMOTION_GREAT_COMMANDER</DefineTextVal>
    </Define>
    <Define>
        <DefineName>HELLFIRE_CHANCE</DefineName>
        <iDefineIntVal>200</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>HIDDEN_NATIONALITY_PROMOTION</DefineName>
        <DefineTextVal>PROMOTION_HIDDEN_NATIONALITY</DefineTextVal>
    </Define>
    <Define>
        <DefineName>IMPROVEMENT_UNIQUE_CHANCE</DefineName>
        <iDefineIntVal>30</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>INVISIBLE_TYPE</DefineName>
        <DefineTextVal>INVISIBLE_LAND</DefineTextVal>
    </Define>
    <Define>
        <DefineName>LOKI_UNREST_CHANCE</DefineName>
        <iDefineIntVal>15</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>MUTATED_PROMOTION</DefineName>
        <DefineTextVal>PROMOTION_MUTATED</DefineTextVal>
    </Define>
    <Define>
        <DefineName>MUTATION_CHANCE</DefineName>
        <iDefineIntVal>8</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>ORDER_SPAWN_CHANCE</DefineName>
        <iDefineIntVal>75</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>PIRATE_COVE_IMPROVEMENT</DefineName>
        <DefineTextVal>IMPROVEMENT_PIRATE_COVE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>PLANAR_GATE_CHANCE</DefineName>
        <iDefineIntVal>600</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>POISONED_PROMOTION</DefineName>
        <DefineTextVal>PROMOTION_POISONED</DefineTextVal>
    </Define>
    <Define>
        <DefineName>PROMOTION_CHANNELING1</DefineName>
        <DefineTextVal>PROMOTION_CHANNELING1</DefineTextVal>
    </Define>
    <Define>
        <DefineName>PROMOTION_CHANNELING3</DefineName>
        <DefineTextVal>PROMOTION_CHANNELING3</DefineTextVal>
    </Define>
    <Define>
        <DefineName>RANDOM_CIVILIZATION</DefineName>
        <DefineTextVal>CIVILIZATION_RANDOM</DefineTextVal>
    </Define>
    <Define>
        <DefineName>RAZE_COST_BASE</DefineName>
        <iDefineIntVal>1</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>RAZE_COST_PER_POPULATION</DefineName>
        <iDefineIntVal>1</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>RAZE_COST_PER_POPULATION_OVER</DefineName>
        <iDefineIntVal>5</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>RELIGION_ADOPTION_CHANCE</DefineName>
        <iDefineIntVal>20</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>SLAVE_UNIT</DefineName>
        <DefineTextVal>UNIT_SLAVE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SOMNIUM_BASE_DELAY_TURNS</DefineName>
        <iDefineIntVal>30</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>SPECIALUNIT_SPELL</DefineName>
        <DefineTextVal>SPECIALUNIT_SPELL</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SPELL_CONVERT_CITY_RANTINE</DefineName>
        <DefineTextVal>SPELL_CONVERT_CITY_RANTINE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SPELL_DISRUPT</DefineName>
        <DefineTextVal>SPELL_DISRUPT</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SPELL_FEAST</DefineName>
        <DefineTextVal>SPELL_FEAST</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SPELL_HASTE</DefineName>
        <DefineTextVal>SPELL_HASTE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>SPELL_RESIST_CHANCE_BASE</DefineName>
        <iDefineIntVal>10</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>SPELL_RESIST_CHANCE_MAX</DefineName>
        <iDefineIntVal>100</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>SPELL_RESIST_CHANCE_MIN</DefineName>
        <iDefineIntVal>5</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>SPELL_TEACH_SPELLCASTING</DefineName>
        <DefineTextVal>NONE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>STARTING_SETTLER_PROMOTION</DefineName>
        <DefineTextVal>PROMOTION_STARTING_SETTLER</DefineTextVal>
    </Define>
    <Define>
        <DefineName>TECH_FESTIVALS</DefineName>
        <DefineTextVal>TECH_FESTIVALS</DefineTextVal>
    </Define>
    <Define>
        <DefineName>TECH_TAXATION</DefineName>
        <DefineTextVal>TECH_TAXATION</DefineTextVal>
    </Define>
    <Define>
        <DefineName>TECH_WAY_OF_THE_EARTHMOTHER</DefineName>
        <DefineTextVal>TECH_WAY_OF_THE_EARTHMOTHER</DefineTextVal>
    </Define>
    <Define>
        <DefineName>TILES_PER_SPAWN</DefineName>
        <iDefineIntVal>6</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>TREANT_SPAWN_CHANCE</DefineName>
        <iDefineIntVal>5</iDefineIntVal>
    </Define>
    <Define>
        <DefineName>UNIT_FIREBALL</DefineName>
        <DefineTextVal>UNIT_FIREBALL</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_GOVANNON</DefineName>
        <DefineTextVal>UNIT_GOVANNON</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_LOKI</DefineName>
        <DefineTextVal>UNIT_LOKI</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_PYRE_ZOMBIE</DefineName>
        <DefineTextVal>UNIT_PYRE_ZOMBIE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_RANTINE</DefineName>
        <DefineTextVal>UNIT_RANTINE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_VAMPIRE</DefineName>
        <DefineTextVal>NONE</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNIT_VAMPIRE_LORD</DefineName>
        <DefineTextVal>UNIT_VAMPIRE_LORD</DefineTextVal>
    </Define>
    <Define>
        <DefineName>UNITCLASS_SCOUT</DefineName>
        <DefineTextVal>UNITCLASS_SCOUT</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_PROMOTION_TIER1</DefineName>
        <DefineTextVal>PROMOTION_BRONZE_WEAPONS</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_PROMOTION_TIER2</DefineName>
        <DefineTextVal>PROMOTION_IRON_WEAPONS</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_PROMOTION_TIER3</DefineName>
        <DefineTextVal>PROMOTION_MITHRIL_WEAPONS</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_REQ_BONUS_TIER1</DefineName>
        <DefineTextVal>BONUS_COPPER</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_REQ_BONUS_TIER2</DefineName>
        <DefineTextVal>BONUS_IRON</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WEAPON_REQ_BONUS_TIER3</DefineName>
        <DefineTextVal>BONUS_MITHRIL</DefineTextVal>
    </Define>
    <Define>
        <DefineName>WRATH_CONVERT_CHANCE</DefineName>
        <iDefineIntVal>50</iDefineIntVal>
    </Define>
</Civ4Defines>
 
Sorry for being such a fool when it comes to dealing with computers, but where do I exxtract the Asset folders to?
 
Top Bottom