since you mentioned you like the look of minas thirith, ithought you may wan to try out a recoloring of the bannor cities?
wow, those screenshots look really nice![]()
if iBuildingType == gc.getInfoTypeForString('BUILDING_TOWER_OF_NECROMANCY'):
iUndead = gc.getInfoTypeForString('PROMOTION_UNDEAD')
iStrong = gc.getInfoTypeForString('PROMOTION_STRONG')
#scions start
iBH = gc.getInfoTypeForString('UNIT_BONE_HORDE')
iSkeleton = gc.getInfoTypeForString('UNIT_SKELETON')
iDiseased = gc.getInfoTypeForString('UNIT_DISEASED_CORPSE')
iScions = gc.getInfoTypeForString('CIVILIZATION_SCIONS')
#scions end
apUnitList = PyPlayer(player).getUnitList()
for pUnit in apUnitList:
#scions start - All Undead units from non-Scions civs get the benefits of the Tower of N.
if pPlayer.getCivilizationType() != iScions:
#scions end
if pUnit.isHasPromotion(iUndead):
pUnit.setHasPromotion(iStrong, True)
#scions start - Only certain Scions units get the benefits. (A balance measure)
else:
if pUnit.getUnitType() == iBH:
pUnit.setHasPromotion(iStrong, True)
if pUnit.getUnitType() == iDiseased:
pUnit.setHasPromotion(iStrong, True)
if pUnit.getUnitType() == iSkeleton:
pUnit.setHasPromotion(iStrong, True)
if unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_UNDEAD')):
if pPlayer.getNumBuilding(gc.getInfoTypeForString('BUILDING_TOWER_OF_NECROMANCY')) > 0:
#scions start - Same purpose and rationale as other Tower of N code above.
if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
#scions end - make sure next line is tabbed properly
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
#scions start
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_SKELETON'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_SPECTRE'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_WRAITH'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_DISEASED_CORPSE'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_BONE_HORDE'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STRONG'), True)
#scions end
<UnitInfo> <!-- Korrina (Unshackled) -->
<Class>UNITCLASS_KORRINA</Class>
<Type>UNIT_KORRINA_PROTECTOR</Type>
<Combat>UNITCOMBAT_MELEE</Combat>
<Domain>DOMAIN_LAND</Domain>
<DefaultUnitAI>UNITAI_CITY_DEFENSE</DefaultUnitAI>
<Description>TXT_KEY_UNIT_KORRINA_PROTECTOR</Description>
<Civilopedia>TXT_KEY_UNIT_KORRINA_PROTECTOR_PEDIA</Civilopedia>
<Strategy>TXT_KEY_UNIT_KORRINA_PROTECTOR_STRATEGY</Strategy>
<Advisor>ADVISOR_MILITARY</Advisor>
<bMilitaryHappiness>1</bMilitaryHappiness>
<bMilitarySupport>1</bMilitarySupport>
<bMilitaryProduction>1</bMilitaryProduction>
<bPillage>1</bPillage>
<UnitClassUpgrades>
<UnitClassUpgrade>
<UnitClassUpgradeType>UNITCLASS_KORRINA_BLACK_LADY</UnitClassUpgradeType>
<bUnitClassUpgrade>1</bUnitClassUpgrade>
</UnitClassUpgrade>
<UnitClassUpgrade>
<UnitClassUpgradeType>UNITCLASS_KORRINA_RED_LADY</UnitClassUpgradeType>
<bUnitClassUpgrade>1</bUnitClassUpgrade>
</UnitClassUpgrade>
</UnitClassUpgrades>
<UnitAIs>
<UnitAI>
<UnitAIType>UNITAI_RESERVE</UnitAIType>
<bUnitAI>1</bUnitAI>
</UnitAI>
</UnitAIs>
<PrereqTech>TECH_NEVER</PrereqTech>
<Flavors>
<Flavor>
<FlavorType>FLAVOR_SCIENCE</FlavorType>
<iFlavor>8</iFlavor>
</Flavor>
</Flavors>
<iAIWeight>4</iAIWeight>
<iCost>-1</iCost>
<iAdvancedStartCost>100</iAdvancedStartCost>
<iMoves>1</iMoves>
<iCombat>3</iCombat>
<iCultureGarrison>3</iCultureGarrison>
<iAsset>2</iAsset>
<iPower>2</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_ALEXI_START</EarlyArtDefineTag>
</UnitMeshGroup>
</UnitMeshGroups>
<FormationType>FORMATION_TYPE_DEFAULT</FormationType>
<FreePromotions>
<FreePromotion>
<PromotionType>PROMOTION_DEFENDER_OF_THE_EMPIRE</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
<FreePromotion>
<PromotionType>PROMOTION_ALIVE</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
<FreePromotion>
<PromotionType>PROMOTION_SHACKLED</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
</FreePromotions>
<iCombatDefense>4</iCombatDefense>
<iTier>2</iTier>
<PrereqCiv>CIVILIZATION_SCIONS</PrereqCiv>
</UnitInfo>
if iAreThereScionsHere:
if pPlot.isOwned() and (not pPlot.isWater()) and (not pPlot.isPeak()):
pPlayer = gc.getPlayer(pPlot.getOwner())
iGameTurn = CyGame().getGameTurn()
iGameSpeed = gc.getGameSpeedInfo(gc.getGame().getGameSpeedType()).getTrainPercent()
iGameSpeedMod = iGameSpeed / 5
if pPlayer.getCivilizationType() == iScionCiv:
if iFeature != iHauntedLands:
iNatureMana = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_NATURE'))
iManaMod = 1 + (iNatureMana * 0.1)
iGhostwalkerClass = gc.getInfoTypeForString('UNITCLASS_RANGER')
iHauntClass = gc.getInfoTypeForString('UNITCLASS_HAUNT')
iRedactorClass = gc.getInfoTypeForString('UNITCLASS_DRUID')
iBlackLadyClass = gc.getInfoTypeForString('UNITCLASS_KORRINA_BLACK_LADY')
iGhostwalkerFactor = pPlayer.getUnitClassCount(iGhostwalkerClass)
iHauntFactor = pPlayer.getUnitClassCount(iHauntClass) * 2
iRedactorFactor = pPlayer.getUnitClassCount(iRedactorClass) * 4
iBlackLadyFactor = pPlayer.getUnitClassCount(iBlackLadyClass) + 1
iHLSeed = (iGhostwalkerFactor + iHauntFactor + iRedactorFactor) * iBlackLadyFactor * iManaMod
iDesert = gc.getInfoTypeForString('TERRAIN_DESERT')
iFloodPlains = gc.getInfoTypeForString('FEATURE_FLOOD_PLAINS')
if iHLSeed > 0:
iChance = iHLSeed
if CyGame().getSorenRandNum(1100, "Chance for HL in unwooded tile") < iChance :
pPlot.setFeatureType(iHauntedLands, 0)
iNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_BODY'))
if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
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)
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
if iNum > 1:
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CORPUS1'), True)
if (iNum > 2 and unit.isHasPromotion(iChanneling2)):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CORPUS2'), True)
if (iNum > 3 and unit.isHasPromotion(iChanneling3)):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CORPUS3'), True)
i am summoning the wildmana gods. take my offering! later i shall spill the blood of a goat in your name, grant me thy blessings.tesb's first offering
Do you or tesb have a modified plotsystem file? That would make merging a lot easierI'm glad you like 'em. I hope you include my revision to tesb's first offering. If not I'll have to make a module. And for that I'll have to figure out the plotsystem!![]()
I have weakened Dark Empathy rather than completly removed it (less things to change). net effect should be equal.Korrina the Black: Remove the "Dark Empathy" promo and make "Feral Bond" the tech prereq for her "Become Haunt" spell.
(Net effect: No mid/late-game +2 strength boost.)
if you write that Python, I will add it.Perhaps: Starts with "Masterwork Weapon" (+20% strength. As the Emperor's chosen she's very well equipped.) and upgrading to the Dagger requires 3 levels rather than 2.
Hmm... rather than always getting a +20%, 1-3 random pieces of appropriate Gear would be fun. If you like that, Stephi, I can write up the python.
don't worry, all non AI python together from all effects takes like 2% time from game turn, probably much less. but moved the calculation before the loop, can't hurt.Would it be better to have it determine the value of iHLSeed right after it's determined that Scions are present? I'm not sure how python works, and I'm afraid it's re-tallying the Scion units with each and every plot.
Do you want to write some python for it?OTOH, while I've come to like the like the removal of the undead and defense strength boni, I do think there should be a little more "bite" to Haunted Lands tiles.
In addition to or replacing the current result, how about a chance to receive "Confused", "Desperation", "Poisoned", or "Dusted"? Or, ideally, one at random from that list.
Or even "Undead" if the unit is damaged? (IMO the HL's ability to turn living units Undead one of the more fun and interesting bits of lore.)
Do you or tesb have a modified plotsystem file? That would make merging a lot easier. If not I will add it when I get to it.
I have weakened Dark Empathy rather than completly removed it (less things to change). net effect should be equal.
if you write that Python, I will add it.
don't worry, all non AI python together from all effects takes like 2% time from game turn, probably much less.
Do you want to write some python for it?
#Haunted Lands Effect
iHauntedLands = gc.getInfoTypeForString('FEATURE_HAUNTED_LANDS')
iChance = 15
if CyGame().getSorenRandNum(100, "Chance for negative HL Effect") < iChance:
for i in range (CyMap().numPlots()):
pPlot = CyMap().plotByIndex(i)
if pPlot.getFeatureType()==iHauntedLands:
for i in range(pPlot.getNumUnits()):
if pPlot.getUnit(i).isAlive() and pPlot.getUnit(i).getUnitType()!=gc.getInfoTypeForString('UNIT_KORRINA_RED_LADY'):
if pPlot.getUnit(i).getExperience()>0:
pPlot.getUnit(i).setExperience(pPlot.getUnit(i).getExperience()-1,99999)
if pPlot.getUnit(i).getExperience()<5 and CyGame().getSorenRandNum(17, "Chance for HL effect Desperation") < 4:
pPlot.getUnit(i).setHasPromotion(gc.getInfoTypeForString('PROMOTION_DESPERATION'), true)
lPromoList = []
lPromoList = lPromoList + ['PROMOTION_CONFUSED', 'PROMOTION_DUSTED', 'PROMOTION_POISONED']
sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
pPlot.getUnit(i).setHasPromotion(gc.getInfoTypeForString(sPromo), True)
if pPlot.getUnit(i).getDamage() >= 20 and CyGame().getSorenRandNum(11, "Chance for HL effect Undead") < 4:
pPlot.getUnit(i).setHasPromotion(gc.getInfoTypeForString('PROMOTION_UNDEAD'), true)
pPlot.getUnit(i).setHasPromotion(gc.getInfoTypeForString('PROMOTION_ESTRANGED'), true)
#Haunted Lands Effect
if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_KEEP_MAIN')) == 1:
plot=pCity.plot()
for ii in range(plot.getNumUnits()):
pUnit=plot.getUnit(ii)
if pUnit.getUnitCombatType()==gc.getInfoTypeForString('UNITCOMBAT_ADEPT'):
if CyGame().getSorenRandNum(100, "Madness")<3:
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENRAGED'),true)
CyInterface().addMessage(pUnit.getOwner(),True,25,CyTranslator().getText("A mage at the Keep as gone mad.", ()),'',1,'Art/Interface/Buttons/Promotions/Enraged.dds',ColorTypes(8),pUnit.getX(),pUnit.getY(),True,True)
if CyGame().getSorenRandNum(100, "Learn new Spell")<3:
lPromoList = []
lPromoList = lPromoList + ['PROMOTION_AIR1', 'PROMOTION_AIR2']
lPromoList = lPromoList + ['PROMOTION_BODY1', 'PROMOTION_BODY2']
lPromoList = lPromoList + ['PROMOTION_CHAOS1', 'PROMOTION_CHAOS2']
lPromoList = lPromoList + ['PROMOTION_DEATH1', 'PROMOTION_DEATH2']
lPromoList = lPromoList + ['PROMOTION_EARTH1', 'PROMOTION_EARTH2']
lPromoList = lPromoList + ['PROMOTION_ENCHANTMENT1', 'PROMOTION_ENCHANTMENT2']
lPromoList = lPromoList + ['PROMOTION_ENTROPY1', 'PROMOTION_ENTROPY2']
lPromoList = lPromoList + ['PROMOTION_FIRE1', 'PROMOTION_FIRE2']
lPromoList = lPromoList + ['PROMOTION_ICE1', 'PROMOTION_ICE2']
lPromoList = lPromoList + ['PROMOTION_LAW1', 'PROMOTION_LAW2']
lPromoList = lPromoList + ['PROMOTION_LIFE1', 'PROMOTION_LIFE2']
lPromoList = lPromoList + ['PROMOTION_METAMAGIC1', 'PROMOTION_METAMAGIC2']
lPromoList = lPromoList + ['PROMOTION_MIND1', 'PROMOTION_MIND2']
lPromoList = lPromoList + ['PROMOTION_NATURE1', 'PROMOTION_NATURE2']
lPromoList = lPromoList + ['PROMOTION_SHADOW1', 'PROMOTION_SHADOW2']
lPromoList = lPromoList + ['PROMOTION_SPIRIT1', 'PROMOTION_SPIRIT2']
lPromoList = lPromoList + ['PROMOTION_SUN1', 'PROMOTION_SUN2']
lPromoList = lPromoList + ['PROMOTION_WATER1', 'PROMOTION_WATER2']
lPromoList = lPromoList + ['PROMOTION_CREATION1', 'PROMOTION_CREATION2']
lPromoList = lPromoList + ['PROMOTION_FORCE1', 'PROMOTION_FORCE2']
sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
pUnit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
CyInterface().addMessage(pUnit.getOwner(),True,25,CyTranslator().getText("Study and calcification have yeilded results!", ()),'',1,'Art/Interface/Buttons/Promotions/Channeling1.dds',ColorTypes(8),pUnit.getX(),pUnit.getY(),True,True)
for pUnit in py.getUnitList():
if pUnit.getUnitType() == gc.getInfoTypeForString('UNIT_KORRINA_BLACK_LADY'):
if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_FERAL_BOND')):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DARK_EMPATHY'),true)
if pUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_MAGE'):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_NECROMANCER'),true)
if pUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_KORRINA_BLACK_LADY'):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ALIVE'),false)
if pUnit.getUnitClassType() == gc.getInfoTypeForString('UNITCLASS_KORRINA_RED_LADY'):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING1'),false)
if pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_HEADLESS')):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_UNDEAD'),true)
if pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_UNRELIABLE')):
if not pUnit.getUnitType() == gc.getInfoTypeForString('UNIT_CENTENI'):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_UNRELIABLE'),false)
if pUnit.getUnitType() == iAlcinus or pUnit.getUnitType() == iAlcinusUpgrade or pUnit.getUnitType() == iAlcinusArchmage:
if not pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENRAGED')):
if CyGame().getSorenRandNum(100, "Madness")<3:
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ENRAGED'),True)
CyInterface().addMessage(pUnit.getOwner(),True,25,CyTranslator().getText("Alcinus has again gone mad.", ()),'',1,'Art/Interface/Buttons/Promotions/Enraged.dds',ColorTypes(8),pUnit.getX(),pUnit.getY(),True,True)
if unit.getUnitType() == gc.getInfoTypeForString('UNIT_EMPERORS_DAGGER'):
lPromoList = []
lPromoList = lPromoList + ['PROMOTION_MARCH_WINE_RECON', 'PROMOTION_NIGHT_GEAR_RECON', 'PROMOTION_WOODS_GEAR_RECON', 'PROMOTION_DESERT_GEAR_RECON', 'PROMOTION_SUPERIOR_KET_RECON', 'PROMOTION_HIGH_QUALITY_MITHRIL_MELEE', 'PROMOTION_DEADLY_TRAPS_RECON']
sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
unit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
unit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
unit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
if iUnitType==gc.getInfoTypeForString('UNIT_MARTYR_OF_PATRIA'):
if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_POISONS')):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_POISON_DRENCHED'),true)
if iUnitType==gc.getInfoTypeForString('UNIT_MARTYR_OF_PATRIA'):
if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_POISONS')):
pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_POISON_DRENCHED'),true)
<UnitInfo> <!-- Praetorian -->
<Class>UNITCLASS_ROYAL_GUARD</Class>
<Type>UNIT_PRAETORIAN</Type>
<Combat>UNITCOMBAT_DISCIPLE</Combat>
<Domain>DOMAIN_LAND</Domain>
<DefaultUnitAI>UNITAI_CITY_DEFENSE</DefaultUnitAI>
<Description>TXT_KEY_UNIT_PRAETORIAN</Description>
<Civilopedia>TXT_KEY_UNIT_PRAETORIAN_PEDIA</Civilopedia>
<Strategy></Strategy>
<Advisor>ADVISOR_MILITARY</Advisor>
<bMilitaryHappiness>1</bMilitaryHappiness>
<bMilitarySupport>1</bMilitarySupport>
<bMilitaryProduction>1</bMilitaryProduction>
<bPillage>1</bPillage>
<UnitAIs>
<UnitAI>
<UnitAIType>UNITAI_ATTACK</UnitAIType>
<bUnitAI>1</bUnitAI>
</UnitAI>
<UnitAI>
<UnitAIType>UNITAI_PILLAGE</UnitAIType>
<bUnitAI>1</bUnitAI>
</UnitAI>
</UnitAIs>
<PrereqTech>TECH_FEUDALISM</PrereqTech>
<iCost>216</iCost>
<iAdvancedStartCost>-1</iAdvancedStartCost>
<iMoves>1</iMoves>
<iCombat>5</iCombat>
<BonusProductionModifiers>
<BonusProductionModifier>
<BonusType>BONUS_SILK</BonusType>
<iProductonModifier>10</iProductonModifier>
</BonusProductionModifier>
<BonusProductionModifier>
<BonusType>BONUS_IVORY</BonusType>
<iProductonModifier>10</iProductonModifier>
</BonusProductionModifier>
</BonusProductionModifiers>
<iCultureGarrison>4</iCultureGarrison>
<iAsset>9</iAsset>
<iPower>14</iPower>
<UnitMeshGroups>
<iGroupSize>2</iGroupSize>
<fMaxSpeed>1.75</fMaxSpeed>
<fPadTime>1</fPadTime>
<iMeleeWaveSize>2</iMeleeWaveSize>
<iRangedWaveSize>0</iRangedWaveSize>
<UnitMeshGroup>
<iRequired>2</iRequired>
<EarlyArtDefineTag>ART_DEF_UNIT_PRAETORIAN</EarlyArtDefineTag>
</UnitMeshGroup>
</UnitMeshGroups>
<FormationType>FORMATION_TYPE_DEFAULT</FormationType>
<FreePromotions>
<FreePromotion>
<PromotionType>PROMOTION_GUARDSMAN</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
<FreePromotion>
<PromotionType>PROMOTION_SCOURGE</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
<FreePromotion>
<PromotionType>PROMOTION_HEAVY_FORMATION</PromotionType>
<bFreePromotion>1</bFreePromotion>
</FreePromotion>
</FreePromotions>
<bAbandon>1</bAbandon>
<iCombatDefense>8</iCombatDefense>
<iTier>3</iTier>
<iWeaponTier>2</iWeaponTier>
<PrereqCivic>CIVIC_GOD_KING</PrereqCivic>
</UnitInfo>
if iUnitType==gc.getInfoTypeForString('UNIT_PRAETORIAN'):
unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HEADLESS'),true)
<SpellInfo> <!-- Emperor's Hand -->
<Type>SPELL_EMPERORS_HAND</Type>
<Description>TXT_KEY_SPELL_EMPERORS_HAND</Description>
<Civilopedia>TXT_KEY_SPELL_EMPERORS_HAND_PEDIA</Civilopedia>
<Help></Help>
<CivilizationPrereq>CIVILIZATION_SCIONS</CivilizationPrereq>
<UnitPrereq>UNIT_PRAETORIAN</UnitPrereq>
<bAllowAI>1</bAllowAI>
<bInBordersOnly>1</bInBordersOnly>
<bInCityOnly>1</bInCityOnly>
<iAIWeight>50</iAIWeight>
<bDisplayWhenDisabled>1</bDisplayWhenDisabled>
<bHasCasted>1</bHasCasted>
<CreateBuildingType>BUILDING_EMPERORS_HAND</CreateBuildingType>
<PyRequirement>__import__('scions').reqEmperorshand(pCaster)</PyRequirement>
<Effect>EFFECT_SPELL1</Effect>
<Sound>AS3D_SPELL_CHARM_PERSON</Sound>
<Button>Modules/NormalModules/ScionSpell/emperorshand.dds</Button>
</SpellInfo>
<SpellInfo> <!-- Emperor's Fist -->
<Type>SPELL_EMPERORS_FIST</Type>
<Description>TXT_KEY_SPELL_EMPERORS_FIST</Description>
<Civilopedia>TXT_KEY_SPELL_EMPERORS_FIST_PEDIA</Civilopedia>
<Help></Help>
<CivilizationPrereq>CIVILIZATION_SCIONS</CivilizationPrereq>
<UnitPrereq>UNIT_PRAETORIAN</UnitPrereq>
<bAllowAI>1</bAllowAI>
<bInBordersOnly>1</bInBordersOnly>
<bInCityOnly>1</bInCityOnly>
<iAIWeight>0</iAIWeight>
<iCasterMinLevel>5</iCasterMinLevel>
<bDisplayWhenDisabled>1</bDisplayWhenDisabled>
<bHasCasted>1</bHasCasted>
<CreateBuildingType>BUILDING_EMPERORS_FIST</CreateBuildingType>
<iChangePopulation>-3</iChangePopulation>
<PyResult>__import__('scions').spellEmperorsfist(pCaster)</PyResult>
<Effect>EFFECT_SPELL1</Effect>
<Sound>AS3D_SPELL_CHARM_PERSON</Sound>
<Button>Modules/NormalModules/ScionSpell/emperorsfist.dds</Button>
</SpellInfo>
<BuildingInfo>
<BuildingClass>BUILDINGCLASS_EMPERORS_HAND</BuildingClass>
<Type>BUILDING_EMPERORS_HAND</Type>
<SpecialBuildingType>NONE</SpecialBuildingType>
<Description>TXT_KEY_BUILDING_EMPERORS_HAND</Description>
<Advisor>ADVISOR_MILITARY</Advisor>
<ArtDefineTag>ART_DEF_BUILDING_HOPE</ArtDefineTag>
<bNeverCapture>1</bNeverCapture>
<bCenterInCity>0</bCenterInCity>
<iAIWeight>0</iAIWeight>
<iCost>-1</iCost>
<iMinAreaSize>-1</iMinAreaSize>
<iConquestProb>0</iConquestProb>
<iMinLatitude>0</iMinLatitude>
<iMaxLatitude>90</iMaxLatitude>
<iMaintenanceModifier>-20</iMaintenanceModifier>
<iWarWearinessModifier>-20</iWarWearinessModifier>
<iHappiness>2</iHappiness>
<iForeignTradeRouteModifier>-50</iForeignTradeRouteModifier>
<iAsset>2</iAsset>
<iPower>1</iPower>
<fVisibilityPriority>1</fVisibilityPriority>
<ObsoleteSafeCommerceChanges>
<iCommerce>0</iCommerce>
<iCommerce>0</iCommerce>
<iCommerce>-1</iCommerce>
</ObsoleteSafeCommerceChanges>
<CommerceModifiers>
<iCommerce>0</iCommerce>
<iCommerce>0</iCommerce>
<iCommerce>-20</iCommerce>
</CommerceModifiers>
<Flavors>
<Flavor>
<FlavorType>FLAVOR_SCIENCE</FlavorType>
<iFlavor>10</iFlavor>
</Flavor>
</Flavors>
<bRequiresCaster>1</bRequiresCaster>
<iCrime>-10</iCrime>
<iMistDensity>38</iMistDensity>
</BuildingInfo>
<BuildingInfo>
<BuildingClass>BUILDINGCLASS_EMPERORS_FIST</BuildingClass>
<Type>BUILDING_EMPERORS_FIST</Type>
<SpecialBuildingType>NONE</SpecialBuildingType>
<Description>TXT_KEY_BUILDING_EMPERORS_FIST</Description>
<Advisor>ADVISOR_MILITARY</Advisor>
<ArtDefineTag>ART_DEF_BUILDING_HOPE</ArtDefineTag>
<bNeverCapture>1</bNeverCapture>
<bCenterInCity>0</bCenterInCity>
<iAIWeight>0</iAIWeight>
<iCost>-1</iCost>
<iMinAreaSize>-1</iMinAreaSize>
<iConquestProb>0</iConquestProb>
<iMinLatitude>0</iMinLatitude>
<iMaxLatitude>90</iMaxLatitude>
<iMaintenanceModifier>-20</iMaintenanceModifier>
<iHappiness>5</iHappiness>
<iTradeRouteModifier>-25</iTradeRouteModifier>
<iForeignTradeRouteModifier>-100</iForeignTradeRouteModifier>
<iAsset>2</iAsset>
<iPower>1</iPower>
<fVisibilityPriority>1</fVisibilityPriority>
<ObsoleteSafeCommerceChanges>
<iCommerce>0</iCommerce>
<iCommerce>0</iCommerce>
<iCommerce>-3</iCommerce>
</ObsoleteSafeCommerceChanges>
<CommerceModifiers>
<iCommerce>0</iCommerce>
<iCommerce>0</iCommerce>
<iCommerce>-30</iCommerce>
</CommerceModifiers>
<Flavors>
<Flavor>
<FlavorType>FLAVOR_SCIENCE</FlavorType>
<iFlavor>10</iFlavor>
</Flavor>
</Flavors>
<bRequiresCaster>1</bRequiresCaster>
<iCrime>-15</iCrime>
<iMistDensity>76</iMistDensity>
</BuildingInfo>
<BuildingClassInfo>
<Type>BUILDINGCLASS_EMPERORS_HAND</Type>
<Description>TXT_KEY_BUILDING_EMPERORS_HAND</Description>
<iMaxGlobalInstances>-1</iMaxGlobalInstances>
<iMaxTeamInstances>-1</iMaxTeamInstances>
<iMaxPlayerInstances>-1</iMaxPlayerInstances>
<iExtraPlayerInstances>0</iExtraPlayerInstances>
<bNoLimit>0</bNoLimit>
<bMonument>0</bMonument>
<DefaultBuilding>BUILDING_EMPERORS_HAND</DefaultBuilding>
<VictoryThresholds/>
</BuildingClassInfo>
<BuildingClassInfo>
<Type>BUILDINGCLASS_EMPERORS_FIST</Type>
<Description>TXT_KEY_BUILDING_EMPERORS_FIST</Description>
<iMaxGlobalInstances>-1</iMaxGlobalInstances>
<iMaxTeamInstances>-1</iMaxTeamInstances>
<iMaxPlayerInstances>-1</iMaxPlayerInstances>
<iExtraPlayerInstances>0</iExtraPlayerInstances>
<bNoLimit>0</bNoLimit>
<bMonument>0</bMonument>
<DefaultBuilding>BUILDING_EMPERORS_FIST</DefaultBuilding>
<VictoryThresholds/>
</BuildingClassInfo>
<TEXT>
<Tag>TXT_KEY_SPELL_EMPERORS_HAND</Tag>
<English>Emperor's Hand</English>
<French>Emperor's Hand</French>
<German>Emperor's Hand</German>
<Italian>Emperor's Hand</Italian>
<Spanish>Emperor's Hand</Spanish>
</TEXT>
<TEXT>
<Tag>TXT_KEY_SPELL_EMPERORS_HAND_PEDIA</Tag>
<English>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</English>
<French>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</French>
<German>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</German>
<Italian>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</Italian>
<Spanish>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</Spanish>
</TEXT>
<TEXT>
<Tag>TXT_KEY_SPELL_EMPERORS_FIST</Tag>
<English>Emperor's Fist</English>
<French>Emperor's Fist</French>
<German>Emperor's Fist</German>
<Italian>Emperor's Fist</Italian>
<Spanish>Emperor's Fist</Spanish>
</TEXT>
<TEXT>
<Tag>TXT_KEY_SPELL_EMPERORS_FIST_PEDIA</Tag>
<English>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</English>
<French>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</French>
<German>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</German>
<Italian>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</Italian>
<Spanish>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</Spanish>
</TEXT>
<TEXT>
<Tag>TXT_KEY_BUILDING_EMPERORS_HAND</Tag>
<English>Emperor's Hand</English>
<French>Emperor's Hand</French>
<German>Emperor's Hand</German>
<Italian>Emperor's Hand</Italian>
<Spanish>Emperor's Hand</Spanish>
</TEXT>
<TEXT>
<Tag>TXT_KEY_BUILDING_EMPERORS_FIST</Tag>
<English>Emperor's Fist</English>
<French>Emperor's Fist</French>
<German>Emperor's Fist</German>
<Italian>Emperor's Fist</Italian>
<Spanish>Emperor's Fist</Spanish>
</TEXT>
def reqEmperorsFist(caster):
pPlot = pCaster.plot()
pCity = pPlot.getPlotCity()
if pCity.getPopulation() > 3:
return True
return False
def spellEmperorsfist(caster):
pPlot = caster.plot()
pCity = pPlot.getPlotCity()
pCity.changeHurryAngerTimer(20)
if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_FIST')) > 0:
pCity.setNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_HAND'), 0)
def reqEmperorshand(caster):
pPlot = caster.plot()
pCity = pPlot.getPlotCity()
if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_FIST')) > 0:
return False
return True
unless I made a mistake it is all merged now![]()
After the orgy of non-work related stuff I did yesterday I was supposed to buckle-down today.
What I did instead was give the Praetorian an overhaul.
This needs a little python and a change to a unit that can't be overwritten in a module, so I'm hoping it'll be included directly into the WM Scions module. The changed or additional code is all below.
Sephi, please include it!
Sometime. No hurry.
Changes:
Make the unit "Disciple" rather than "Melee". Remove "Spirit II" free promo, remove "Headless". This pushes the Praetorian warrior-priest quite a bit more in the priest direction, which fits the lore-stuff, and lowers a very, very high defense a little.
DONE BY GW
Unit info:
Spoiler :Code:<UnitInfo> <!-- Praetorian --> <Class>UNITCLASS_ROYAL_GUARD</Class> <Type>UNIT_PRAETORIAN</Type> <Combat>UNITCOMBAT_DISCIPLE</Combat> <Domain>DOMAIN_LAND</Domain> <DefaultUnitAI>UNITAI_CITY_DEFENSE</DefaultUnitAI> <Description>TXT_KEY_UNIT_PRAETORIAN</Description> <Civilopedia>TXT_KEY_UNIT_PRAETORIAN_PEDIA</Civilopedia> <Strategy></Strategy> <Advisor>ADVISOR_MILITARY</Advisor> <bMilitaryHappiness>1</bMilitaryHappiness> <bMilitarySupport>1</bMilitarySupport> <bMilitaryProduction>1</bMilitaryProduction> <bPillage>1</bPillage> <UnitAIs> <UnitAI> <UnitAIType>UNITAI_ATTACK</UnitAIType> <bUnitAI>1</bUnitAI> </UnitAI> <UnitAI> <UnitAIType>UNITAI_PILLAGE</UnitAIType> <bUnitAI>1</bUnitAI> </UnitAI> </UnitAIs> <PrereqTech>TECH_FEUDALISM</PrereqTech> <iCost>216</iCost> <iAdvancedStartCost>-1</iAdvancedStartCost> <iMoves>1</iMoves> <iCombat>5</iCombat> <BonusProductionModifiers> <BonusProductionModifier> <BonusType>BONUS_SILK</BonusType> <iProductonModifier>10</iProductonModifier> </BonusProductionModifier> <BonusProductionModifier> <BonusType>BONUS_IVORY</BonusType> <iProductonModifier>10</iProductonModifier> </BonusProductionModifier> </BonusProductionModifiers> <iCultureGarrison>4</iCultureGarrison> <iAsset>9</iAsset> <iPower>14</iPower> <UnitMeshGroups> <iGroupSize>2</iGroupSize> <fMaxSpeed>1.75</fMaxSpeed> <fPadTime>1</fPadTime> <iMeleeWaveSize>2</iMeleeWaveSize> <iRangedWaveSize>0</iRangedWaveSize> <UnitMeshGroup> <iRequired>2</iRequired> <EarlyArtDefineTag>ART_DEF_UNIT_PRAETORIAN</EarlyArtDefineTag> </UnitMeshGroup> </UnitMeshGroups> <FormationType>FORMATION_TYPE_DEFAULT</FormationType> <FreePromotions> <FreePromotion> <PromotionType>PROMOTION_GUARDSMAN</PromotionType> <bFreePromotion>1</bFreePromotion> </FreePromotion> <FreePromotion> <PromotionType>PROMOTION_SCOURGE</PromotionType> <bFreePromotion>1</bFreePromotion> </FreePromotion> <FreePromotion> <PromotionType>PROMOTION_HEAVY_FORMATION</PromotionType> <bFreePromotion>1</bFreePromotion> </FreePromotion> </FreePromotions> <bAbandon>1</bAbandon> <iCombatDefense>8</iCombatDefense> <iTier>3</iTier> <iWeaponTier>2</iWeaponTier> <PrereqCivic>CIVIC_GOD_KING</PrereqCivic> </UnitInfo>
DONE BY GW
This needs to be removed from around 2237 of CvFFHPLUS
Spoiler :Code:if iUnitType==gc.getInfoTypeForString('UNIT_PRAETORIAN'): unit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_HEADLESS'),true)
Taking away Spirit II removes "Hope". But I've got a nice flavorful set of replacements.
Emperor's Hand:
MADE Spell_Strategy_Tag by GW
Spoiler :Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.
Mostly minor benefits, but the main thing is use of the MistDensity mechanic: 15% to block level 1 units, 3% by level 4.
Emperor's Fist:
MADE Spell_Strategy_Tag by GW
Spoiler :As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.
Requires a 5th level Praetorian.
Good happiness, but a big hit to the "HurryAngerTimer" and other significant penalties. The biggest being -3 population in the city. Which is pretty nasty for Scions. The big benefit is a double the Hand's MistDensity rating. (The spells/buildings are, however, mutually exclusive: The Fist over-rides the Hand.) Both spells end if no unit capable of casting it is in the city.
DONE BY GW
Spellinfos:
Spoiler :Code:<SpellInfo> <!-- Emperor's Hand --> <Type>SPELL_EMPERORS_HAND</Type> <Description>TXT_KEY_SPELL_EMPERORS_HAND</Description> <Civilopedia>TXT_KEY_SPELL_EMPERORS_HAND_PEDIA</Civilopedia> <Help></Help> <CivilizationPrereq>CIVILIZATION_SCIONS</CivilizationPrereq> <UnitPrereq>UNIT_PRAETORIAN</UnitPrereq> <bAllowAI>1</bAllowAI> <bInBordersOnly>1</bInBordersOnly> <bInCityOnly>1</bInCityOnly> <iAIWeight>50</iAIWeight> <bDisplayWhenDisabled>1</bDisplayWhenDisabled> <bHasCasted>1</bHasCasted> <CreateBuildingType>BUILDING_EMPERORS_HAND</CreateBuildingType> <PyRequirement>__import__('scions').reqEmperorshand(pCaster)</PyRequirement> <Effect>EFFECT_SPELL1</Effect> <Sound>AS3D_SPELL_CHARM_PERSON</Sound> <Button>Modules/NormalModules/ScionSpell/emperorshand.dds</Button> </SpellInfo> <SpellInfo> <!-- Emperor's Fist --> <Type>SPELL_EMPERORS_FIST</Type> <Description>TXT_KEY_SPELL_EMPERORS_FIST</Description> <Civilopedia>TXT_KEY_SPELL_EMPERORS_FIST_PEDIA</Civilopedia> <Help></Help> <CivilizationPrereq>CIVILIZATION_SCIONS</CivilizationPrereq> <UnitPrereq>UNIT_PRAETORIAN</UnitPrereq> <bAllowAI>1</bAllowAI> <bInBordersOnly>1</bInBordersOnly> <bInCityOnly>1</bInCityOnly> <iAIWeight>0</iAIWeight> <iCasterMinLevel>5</iCasterMinLevel> <bDisplayWhenDisabled>1</bDisplayWhenDisabled> <bHasCasted>1</bHasCasted> <CreateBuildingType>BUILDING_EMPERORS_FIST</CreateBuildingType> <iChangePopulation>-3</iChangePopulation> <PyResult>__import__('scions').spellEmperorsfist(pCaster)</PyResult> <Effect>EFFECT_SPELL1</Effect> <Sound>AS3D_SPELL_CHARM_PERSON</Sound> <Button>Modules/NormalModules/ScionSpell/emperorsfist.dds</Button> </SpellInfo>
Buildinginfos:
DONE BY GW
Spoiler :Code:<BuildingInfo> <BuildingClass>BUILDINGCLASS_EMPERORS_HAND</BuildingClass> <Type>BUILDING_EMPERORS_HAND</Type> <SpecialBuildingType>NONE</SpecialBuildingType> <Description>TXT_KEY_BUILDING_EMPERORS_HAND</Description> <Advisor>ADVISOR_MILITARY</Advisor> <ArtDefineTag>ART_DEF_BUILDING_HOPE</ArtDefineTag> <bNeverCapture>1</bNeverCapture> <bCenterInCity>0</bCenterInCity> <iAIWeight>0</iAIWeight> <iCost>-1</iCost> <iMinAreaSize>-1</iMinAreaSize> <iConquestProb>0</iConquestProb> <iMinLatitude>0</iMinLatitude> <iMaxLatitude>90</iMaxLatitude> <iMaintenanceModifier>-20</iMaintenanceModifier> <iWarWearinessModifier>-20</iWarWearinessModifier> <iHappiness>2</iHappiness> <iForeignTradeRouteModifier>-50</iForeignTradeRouteModifier> <iAsset>2</iAsset> <iPower>1</iPower> <fVisibilityPriority>1</fVisibilityPriority> <ObsoleteSafeCommerceChanges> <iCommerce>0</iCommerce> <iCommerce>0</iCommerce> <iCommerce>-1</iCommerce> </ObsoleteSafeCommerceChanges> <CommerceModifiers> <iCommerce>0</iCommerce> <iCommerce>0</iCommerce> <iCommerce>-20</iCommerce> </CommerceModifiers> <Flavors> <Flavor> <FlavorType>FLAVOR_SCIENCE</FlavorType> <iFlavor>10</iFlavor> </Flavor> </Flavors> <bRequiresCaster>1</bRequiresCaster> <iCrime>-10</iCrime> <iMistDensity>38</iMistDensity> </BuildingInfo> <BuildingInfo> <BuildingClass>BUILDINGCLASS_EMPERORS_FIST</BuildingClass> <Type>BUILDING_EMPERORS_FIST</Type> <SpecialBuildingType>NONE</SpecialBuildingType> <Description>TXT_KEY_BUILDING_EMPERORS_FIST</Description> <Advisor>ADVISOR_MILITARY</Advisor> <ArtDefineTag>ART_DEF_BUILDING_HOPE</ArtDefineTag> <bNeverCapture>1</bNeverCapture> <bCenterInCity>0</bCenterInCity> <iAIWeight>0</iAIWeight> <iCost>-1</iCost> <iMinAreaSize>-1</iMinAreaSize> <iConquestProb>0</iConquestProb> <iMinLatitude>0</iMinLatitude> <iMaxLatitude>90</iMaxLatitude> <iMaintenanceModifier>-20</iMaintenanceModifier> <iHappiness>5</iHappiness> <iTradeRouteModifier>-25</iTradeRouteModifier> <iForeignTradeRouteModifier>-100</iForeignTradeRouteModifier> <iAsset>2</iAsset> <iPower>1</iPower> <fVisibilityPriority>1</fVisibilityPriority> <ObsoleteSafeCommerceChanges> <iCommerce>0</iCommerce> <iCommerce>0</iCommerce> <iCommerce>-3</iCommerce> </ObsoleteSafeCommerceChanges> <CommerceModifiers> <iCommerce>0</iCommerce> <iCommerce>0</iCommerce> <iCommerce>-30</iCommerce> </CommerceModifiers> <Flavors> <Flavor> <FlavorType>FLAVOR_SCIENCE</FlavorType> <iFlavor>10</iFlavor> </Flavor> </Flavors> <bRequiresCaster>1</bRequiresCaster> <iCrime>-15</iCrime> <iMistDensity>76</iMistDensity> </BuildingInfo>
EDIT: Forgot the Building Class infos.
DONE BY GW
Spoiler :Code:<BuildingClassInfo> <Type>BUILDINGCLASS_EMPERORS_HAND</Type> <Description>TXT_KEY_BUILDING_EMPERORS_HAND</Description> <iMaxGlobalInstances>-1</iMaxGlobalInstances> <iMaxTeamInstances>-1</iMaxTeamInstances> <iMaxPlayerInstances>-1</iMaxPlayerInstances> <iExtraPlayerInstances>0</iExtraPlayerInstances> <bNoLimit>0</bNoLimit> <bMonument>0</bMonument> <DefaultBuilding>BUILDING_EMPERORS_HAND</DefaultBuilding> <VictoryThresholds/> </BuildingClassInfo> <BuildingClassInfo> <Type>BUILDINGCLASS_EMPERORS_FIST</Type> <Description>TXT_KEY_BUILDING_EMPERORS_FIST</Description> <iMaxGlobalInstances>-1</iMaxGlobalInstances> <iMaxTeamInstances>-1</iMaxTeamInstances> <iMaxPlayerInstances>-1</iMaxPlayerInstances> <iExtraPlayerInstances>0</iExtraPlayerInstances> <bNoLimit>0</bNoLimit> <bMonument>0</bMonument> <DefaultBuilding>BUILDING_EMPERORS_FIST</DefaultBuilding> <VictoryThresholds/> </BuildingClassInfo>
Text:
DONE BY GW
Spoiler :Code:<TEXT> <Tag>TXT_KEY_SPELL_EMPERORS_HAND</Tag> <English>Emperor's Hand</English> <French>Emperor's Hand</French> <German>Emperor's Hand</German> <Italian>Emperor's Hand</Italian> <Spanish>Emperor's Hand</Spanish> </TEXT> <TEXT> <Tag>TXT_KEY_SPELL_EMPERORS_HAND_PEDIA</Tag> <English>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</English> <French>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</French> <German>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</German> <Italian>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</Italian> <Spanish>Praetorian warrior-priests put the city in the Emperor's Hand. All good citizen's rejoice as threads of fate draw around the city and shield it from crime, disorder, and chaos. Disloyalty to the Empire becomes not just psychologically deviant, but physically difficult.</Spanish> </TEXT> <TEXT> <Tag>TXT_KEY_SPELL_EMPERORS_FIST</Tag> <English>Emperor's Fist</English> <French>Emperor's Fist</French> <German>Emperor's Fist</German> <Italian>Emperor's Fist</Italian> <Spanish>Emperor's Fist</Spanish> </TEXT> <TEXT> <Tag>TXT_KEY_SPELL_EMPERORS_FIST_PEDIA</Tag> <English>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</English> <French>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</French> <German>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</German> <Italian>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</Italian> <Spanish>As with "Emperor's Hand," Praetorian warrior-priests draw threads of fate around the city and shield it from crime, disorder, and chaos. But this time the threads are drawn so tight as to throttle the city. Enemies of Patria often cannot even enter. But even they city's citizens find the restrictions oppressive. The difference between devotion to the Empire and obsessive insanity becomes small. The difference between treason and the True Death, nonexistent.</Spanish> </TEXT> <TEXT> <Tag>TXT_KEY_BUILDING_EMPERORS_HAND</Tag> <English>Emperor's Hand</English> <French>Emperor's Hand</French> <German>Emperor's Hand</German> <Italian>Emperor's Hand</Italian> <Spanish>Emperor's Hand</Spanish> </TEXT> <TEXT> <Tag>TXT_KEY_BUILDING_EMPERORS_FIST</Tag> <English>Emperor's Fist</English> <French>Emperor's Fist</French> <German>Emperor's Fist</German> <Italian>Emperor's Fist</Italian> <Spanish>Emperor's Fist</Spanish> </TEXT>
NOT DONE BY GW
Python (for Scions.py):
Spoiler :Code:def reqEmperorsFist(caster): pPlot = pCaster.plot() pCity = pPlot.getPlotCity() if pCity.getPopulation() > 3: return True return False def spellEmperorsfist(caster): pPlot = caster.plot() pCity = pPlot.getPlotCity() pCity.changeHurryAngerTimer(20) if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_FIST')) > 0: pCity.setNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_HAND'), 0) def reqEmperorshand(caster): pPlot = caster.plot() pCity = pPlot.getPlotCity() if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_EMPERORS_FIST')) > 0: return False return True
NOT DONE BY GW
EDIT:
Whoops. You'll need the buttons. I've put the module-version files in, too.
Spoiler :TXT_KEY_SPELL_EMPERORS_HAND_HELP
Spoiler :TXT_KEY_SPELL_EMPERORS_FIST_HELP
Spoiler :TXT_KEY_BUILDING_EMPERORS_FIST_HELP
<PromotionInfo> <!-- Haunt -->
<Type>PROMOTION_HAUNT</Type>
<Description>TXT_KEY_PROMOTION_HAUNT</Description>
<Sound>AS2D_IF_LEVELUP</Sound>
<bAlwaysHeal>1</bAlwaysHeal>
<FeatureAttacks>
<FeatureAttack>
<FeatureType>FEATURE_HAUNTED_LANDS</FeatureType>
<iFeatureAttack>30</iFeatureAttack>
</FeatureAttack>
</FeatureAttacks>
<FeatureDefenses>
<FeatureDefense>
<FeatureType>FEATURE_HAUNTED_LANDS</FeatureType>
<iFeatureDefense>30</iFeatureDefense>
</FeatureDefense>
</FeatureDefenses>
<UnitCombats>
<UnitCombat>
<UnitCombatType>UNITCOMBAT_RECON</UnitCombatType>
<bUnitCombat>1</bUnitCombat>
</UnitCombat>
</UnitCombats>
<Button>Art/Interface/Buttons/Promotions/haunt.dds</Button>
<iBetrayalChance>5</iBetrayalChance>
<iMinLevel>-1</iMinLevel>
<PyPerTurn>__import__('scions').checkHaunt(pCaster)</PyPerTurn>
<PromotionImmune1>PROMOTION_LOYALTY</PromotionImmune1>
</PromotionInfo>
<PromotionInfo> <!-- Grand Ward -->
<Type>PROMOTION_GRAND_WARD</Type>
<Description>TXT_KEY_PROMOTION_GRAND_WARD</Description>
<Sound>AS2D_IF_LEVELUP</Sound>
<iMovesChange>-1</iMovesChange>
<Button>Art/Interface/Buttons/Spells/corpus3.dds</Button>
<bDispellable>1</bDispellable>
<iExpireChance>10</iExpireChance> <!-- <PyPerTurn>effectUPush(pCaster)</PyPerTurn> -->
<PyPerTurn>__import__('scions').effectUPush(pCaster)</PyPerTurn>
</PromotionInfo>
@Sephi,
The last two items on Tarquelnes list I did not do. I will check for XML/Python load errors on the one python file effected below. If it fails, I will indicate so with a post.
GW
Emperor's Hand: Can block first to third level units.
Block spells from spell casters or other type of attack?
Emperor's Fist: Can block up to sixth level units.
Block spells from spell casters or other type of attack?
I think those are good for either spell or building.
Ya know, maybe that iMistDensity should be 64 rather than 76. That'd be first to 5th.
You lost me here?
****
I found a couple of things in the Scion promotions file.
In FF the python check was based on the unit rather than the promotion. To get Haunts changing (sometimes) back to Ghostwalkers based on promo pyperturn, here's a Promo info that has the pyperturn line.
Leaving this for Sephi.
Spoiler :
Code:<PromotionInfo> <!-- Haunt --> <Type>PROMOTION_HAUNT</Type> <Description>TXT_KEY_PROMOTION_HAUNT</Description> <Sound>AS2D_IF_LEVELUP</Sound> <bAlwaysHeal>1</bAlwaysHeal> <FeatureAttacks> <FeatureAttack> <FeatureType>FEATURE_HAUNTED_LANDS</FeatureType> <iFeatureAttack>30</iFeatureAttack> </FeatureAttack> </FeatureAttacks> <FeatureDefenses> <FeatureDefense> <FeatureType>FEATURE_HAUNTED_LANDS</FeatureType> <iFeatureDefense>30</iFeatureDefense> </FeatureDefense> </FeatureDefenses> <UnitCombats> <UnitCombat> <UnitCombatType>UNITCOMBAT_RECON</UnitCombatType> <bUnitCombat>1</bUnitCombat> </UnitCombat> </UnitCombats> <Button>Art/Interface/Buttons/Promotions/haunt.dds</Button> <iBetrayalChance>5</iBetrayalChance> <iMinLevel>-1</iMinLevel> <PyPerTurn>__import__('scions').checkHaunt(pCaster)</PyPerTurn> <PromotionImmune1>PROMOTION_LOYALTY</PromotionImmune1> </PromotionInfo>
(The python is already in Scion.py.)
Same thing for "Grand Ward." The spell doesn't actually work - repulsing living units - without this.
Leaving this for Sephi.
Spoiler :Code:<PromotionInfo> <!-- Grand Ward --> <Type>PROMOTION_GRAND_WARD</Type> <Description>TXT_KEY_PROMOTION_GRAND_WARD</Description> <Sound>AS2D_IF_LEVELUP</Sound> <iMovesChange>-1</iMovesChange> <Button>Art/Interface/Buttons/Spells/corpus3.dds</Button> <bDispellable>1</bDispellable> <iExpireChance>10</iExpireChance> <!-- <PyPerTurn>effectUPush(pCaster)</PyPerTurn> --> <PyPerTurn>__import__('scions').effectUPush(pCaster)</PyPerTurn> </PromotionInfo>
If want these features, but using doTurnScions rather than promotions pyperturn, I can whip something up.
Ya know, maybe that iMistDensity should be 64 rather than 76. That'd be first to 5th.
Graywarden, can you please redo your changes? As I said before in post 92, I already merged all changes before (not uploaded to the SVN) and I do not want to check for compatibility which would be very time consuming
The SVN software should have a function to revert to an older revision.
If you want to merge something in the future I gladly help you with it but since I already merged this I do not want to do it again.