shouldn't that be switched to death mana?
The scions just don't scale very well with the map size or to be more precise with the settable land.
If you want to fix them, I will merge/add the needed code.Some notes and a question:
I just struck me that since the python and XML are still present the Horned Dread's situation may be the same as the Breach's was. If I can get it fixed up would you want the HD in Wild Mana, Stephi?
I honestly have no idea what Horned Dread's are supposed to do.
with this changes you can play a more economic build instead of early aggression and you would be forced to build/research the spawn rate increasing buildings.
it would also mitigate the fact that scions have a more linear city growth while with other civs it is exponential.
warmongering as of now is too much rewarding compared to an economic/ peaceful play style, especially when you go against high population civilizations like the elves
. i would however let the city population stay if you play with the usurper trait (xivian) since he is evil can't run a priest economy and the captured cities produce units/buildings of their former civilization. it would also make you want to play aggressive with this evil leader.
# scions start - Gives Reborn when razing cities. The function reducing the population of Scion conquests kicks in first. Currently Reborn given = that population -1. Requires Sorc. and Priestood. It's been suggested that be changed to requiring the civic "Glory."
iReborn = gc.getInfoTypeForString('UNIT_REBORN')
eTeam = gc.getTeam(pPlayer.getTeam())
if gc.getPlayer(city.getOwner()).getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
if (eTeam.isHasTech(gc.getInfoTypeForString('TECH_SORCERY')) and eTeam.isHasTech(gc.getInfoTypeForString('TECH_PRIESTHOOD'))):
if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) != gc.getInfoTypeForString('CIVIC_GOD_KING'):
if (city.getPopulation() - 1) >= 1:
CyInterface().addMessage(city.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_REBORN_SPAWNED_RAZED", ()),'',1,'Art/Interface/Buttons/Units/Scions/reborn.dds',ColorTypes(8),city.getX(),city.getY(),True,True)
for i in range((city.getPopulation()) - 1):
spawnUnit = pPlayer.initUnit(iReborn, city.getX(), city.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_GOD_KING'):
if (city.getPopulation() - 1) >= 1:
CyInterface().addMessage(city.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_REBORN_SPAWNED_RAZED", ()),'',1,'Art/Interface/Buttons/Units/Scions/reborn.dds',ColorTypes(8),city.getX(),city.getY(),True,True)
for i in range((city.getPopulation()) - 1):
spawnUnit = pPlayer.initUnit(iReborn, city.getX(), city.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
# scions end
Ranson awoke to see a stunningly gorgeous woman tightening a bandage on his leg. There was a dull ache from is thigh, but he felt fine otherwise. The gnawing hole in his leg, in his spirit, had lingered for weeks. Both seemed gone.
The beauty noticed he was awake. "The worst is over," the she reassured him.
"What happened? The last thing I remember is the headless one's charge. We were hurt. We'd all been sick for weeks. We couldn't hold... I'm surprised to be alive to tell the truth. Let alone healthy."
"Well of course you're healthy," the woman smiled. "But not, however, alive."
Is there a thread for player-made modules?
sounds good to me. I will try to pick up the other scion changes as well.Only one full game, but I'm again (and for real this time) endorsing the idea of reducing city pop. on capture. Or, at least, I'll put the code in my game here and see how it goes.
I am currently implementing Epic Adventures, they are kind of like Civ-specific Victory conditions. Any idea what goals would lore/gameplay wise fit the Scions?
pPlayer.setFeatAccomplished(FeatTypes.FEAT_UNIT_SPY, True)
iGhostwalkerClass = gc.getInfoTypeForString('UNITCLASS_RANGER')
iHauntClass = gc.getInfoTypeForString('UNITCLASS_HAUNT')
iEligibleNum = (pPlayer.getUnitClassCount(iGhostwalkerClass) + pPlayer.getUnitClassCount(iHauntClass))
if iEligibleNum < 1:
pPlayer.setFeatAccomplished(FeatTypes.FEAT_UNITCOMBAT_HELICOPTER, False)
def reqManifestHornedDread(caster):
iGhostwalker = gc.getInfoTypeForString('UNIT_GHOSTWALKER')
iHornedDreadPromo = gc.getInfoTypeForString('PROMOTION_HORNED_DREAD')
pPlayer = gc.getPlayer(caster.getOwner())
if pPlayer.isFeatAccomplished(FeatTypes.FEAT_UNIT_SPY) == false:
return False
if pPlayer.isFeatAccomplished(FeatTypes.FEAT_UNITCOMBAT_HELICOPTER) == false:
return False
if caster.isHasPromotion(iHornedDreadPromo):
return False
return True
def spellManifestHornedDread(caster):
pPlayer = gc.getPlayer(caster.getOwner())
py = PyPlayer(caster.getOwner())
pPlayer.setFeatAccomplished(FeatTypes.FEAT_UNIT_SPY, false)
iGhostwalker = gc.getInfoTypeForString('UNIT_GHOSTWALKER')
iHornedDreadPromo = gc.getInfoTypeForString('PROMOTION_HORNED_DREAD')
for pUnit in py.getUnitList():
if pUnit.getUnitType() == iGhostwalker:
if pUnit.isHasPromotion(iHornedDreadPromo):
pUnit.setHasPromotion(iHornedDreadPromo, false)
# pUnit.setUnitArtStyleType(gc.getInfoTypeForString('UNIT_ARTSTYLE_GHOSTWALKER'))
newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_GHOSTWALKER'), pUnit.getX(), pUnit.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
for i in range(gc.getNumPromotionInfos()):
if gc.getPromotionInfo(i).isEquipment() == False:
newUnit.setHasPromotion(i, pUnit.isHasPromotion(i))
newUnit.setDamage(caster.getDamage(), pUnit.getOwner())
newUnit.setLevel(caster.getLevel())
newUnit.setExperience(caster.getExperience(), -1)
pUnit.kill(True, 0)
caster.setHasPromotion(iHornedDreadPromo, true)
def reqManifestFirstHornedDread(caster):
pPlayer = gc.getPlayer(caster.getOwner())
if pPlayer.isFeatAccomplished(FeatTypes.FEAT_UNITCOMBAT_HELICOPTER) == true:
return False
return True
def spellManifestFirstHornedDread(caster):
pPlayer = gc.getPlayer(caster.getOwner())
pPlayer.setFeatAccomplished(FeatTypes.FEAT_UNITCOMBAT_HELICOPTER, true)
iGhostwalker = gc.getInfoTypeForString('UNIT_GHOSTWALKER')
iHornedDreadPromo = gc.getInfoTypeForString('PROMOTION_HORNED_DREAD')
caster.setHasPromotion(iHornedDreadPromo, true)
<PromotionInfo> <!-- Horned Dread -->
<Type>PROMOTION_HORNED_DREAD</Type>
<Description>TXT_KEY_PROMOTION_HORNED_DREAD</Description>
<Help>TXT_KEY_PROMOTION_HORNED_DREAD_HELP</Help>
<TechPrereq>TECH_NEVER</TechPrereq>
<iMovesChange>1</iMovesChange>
<UnitCombats>
<UnitCombat>
<UnitCombatType>UNITCOMBAT_RECON</UnitCombatType>
<bUnitCombat>1</bUnitCombat>
</UnitCombat>
</UnitCombats>
<Button>Art/Interface/Buttons/Promotions/HornedDread.dds</Button>
<iExtraCombatStr>6</iExtraCombatStr>
<iExtraCombatDefense>6</iExtraCombatDefense>
<bFear>1</bFear>
<iMinLevel>-1</iMinLevel>
<iGroupSize>1</iGroupSize>
<UnitArtStyleType>UNIT_ARTSTYLE_HORNED_DREAD</UnitArtStyleType>
<DamageTypeCombats>
<DamageTypeCombat>
<DamageType>DAMAGE_POISON</DamageType>
<iCombat>2</iCombat>
</DamageTypeCombat>
</DamageTypeCombats>
</PromotionInfo>
<SpellInfo> <!-- Manifest First Horned Dread -->
<Type>SPELL_MANIFEST_FIRST_HORNED_DREAD</Type>
<Description>TXT_KEY_SPELL_MANIFEST_FIRST_HORNED_DREAD</Description>
<Help>TXT_KEY_SPELL_MANIFEST_FIRST_HORNED_DREAD_HELP</Help>
<TechPrereq>TECH_ANIMAL_MASTERY</TechPrereq>
<UnitPrereq>UNIT_GHOSTWALKER</UnitPrereq>
<bAllowAI>1</bAllowAI>
<iAIWeight>80</iAIWeight>
<iCasterMinLevel>6</iCasterMinLevel>
<iCost>200</iCost>
<Effect>EFFECT_SPELL1</Effect>
<PyResult>__import__('scions').spellManifestFirstHornedDread(pCaster)</PyResult>
<PyRequirement>__import__('scions').reqManifestFirstHornedDread(pCaster)</PyRequirement>
<Sound>AS3D_SPELL_CONSUME_SOUL</Sound>
<Button>Art/Interface/Buttons/Promotions/HornedDread.dds</Button>
</SpellInfo>
<SpellInfo> <!-- Manifest Horned Dread -->
<Type>SPELL_MANIFEST_HORNED_DREAD</Type>
<Description>TXT_KEY_SPELL_MANIFEST_HORNED_DREAD</Description>
<Help>TXT_KEY_SPELL_MANIFEST_HORNED_DREAD_HELP</Help>
<TechPrereq>TECH_ANIMAL_MASTERY</TechPrereq>
<UnitPrereq>UNIT_GHOSTWALKER</UnitPrereq>
<bAllowAI>1</bAllowAI>
<bDisplayWhenDisabled>1</bDisplayWhenDisabled>
<Effect>EFFECT_SPELL1</Effect>
<PyResult>__import__('scions').spellManifestHornedDread(pCaster)</PyResult>
<PyRequirement>__import__('scions').reqManifestHornedDread(pCaster)</PyRequirement>
<Sound>AS3D_SPELL_CONSUME_SOUL</Sound>
<Button>Art/Interface/Buttons/Promotions/HornedDread.dds</Button>
</SpellInfo>
FEAT_MANIFEST_HORNED_DREAD,
FEAT_MANIFEST_FIRST_HORNED_DREAD,
.value("FEAT_MANIFEST_HORNED_DREAD", FEAT_MANIFEST_HORNED_DREAD)
.value("FEAT_MANIFEST_FIRST_HORNED_DREAD", FEAT_MANIFEST_FIRST_HORNED_DREAD)
(i would also make him very weak once settled)
An other question: since you are familiar with python may i "employ" you in some future projects?
Posted for feedback, and so I don't forget, here's how I'm going to change Korrina in my next game:
Protector:
Melee rather than Arcane. (So no Potency, and some Arcane-type xml removed from the unit.)
No +12% "spellecaster xp" from Defender of the Empire
+1 defense.
The Red:
No +25% vs. Warriors.
Bronze Weapons rather than Iron.