Scions of Patria?

there was some CTD related to the Breach so I disabled it. Haven't gotten around it to fix it. Feel free to take a look at it :)

well, the big thing I haven't gotton to is to write an AI for them. A special UNITAI for the Awakened, Reborn, etc. a calculation what building when to build. Probably the first step would be to move a few things from python to the dll, like the awakened increase effect of buildings (so the AI can be tought easily to value these buildings more and helptext can be generated automatically)

Glad you like the new Thaumaturge's Keep :)
 
there was some CTD related to the Breach so I disabled it. Haven't gotten around it to fix it. Feel free to take a look at it :)

I'll poke it this week. Hopefully it's a XML/art-related error...
 
I think I figured out the CTD with the Breach.

The following version didn't give any errors or CTDs. (Test: All techs (including "Never" - I didn't change the req. back to "Sorcery"), went 4 turns with no problem, 4 times.) I replaced the FF-only promos with others, removed FF-only techs, and where a tech was giving only an FF-only unit I gave it an Awakened.

Spoiler :

Code:
def spellSpiralGate(argslist):
	if isinstance( argslist, tuple ):
		makeHelpText = True
		eSpell, caster = argslist
	else:
		caster = argslist
		makeHelpText=False
	iPlayer = caster.getOwner()
	pPlayer = gc.getPlayer(iPlayer)
	eTeam = gc.getTeam(pPlayer.getTeam())
	
	bonusCategory = dict()
	bonusCategory['false laroth'] = dict()
	bonusCategory['archer'] = dict()
	bonusCategory['adept'] = dict()
	bonusCategory['melee'] = dict()
	bonusCategory['recon'] = dict()
	bonusCategory['mounted'] = dict()
	bonusCategory['supplies'] = dict()
	bonusCategory['population'] = dict()
	unitUpgrades = dict()
    
    # A list of units to be given
    # Each unit is described with a tuple
    # ( unitString, bonusCategoryName, promotionList, name)
	giveUnits = []
	giveUnits.append( ( 'UNIT_NECROMANCER', 'false laroth', ['PROMOTION_DEATH1', 'PROMOTION_DEATH2', 'PROMOTION_SPIRIT1', 'PROMOTION_SPIRIT2', 'PROMOTION_SHADOW1', 'PROMOTION_SHADOW2', 'PROMOTION_COMBAT1', 'PROMOTION_COMBAT2', 'PROMOTION_HIDDEN', 'PROMOTION_IMPLACABLE', ], CyTranslator().getText('TXT_KEY_UNIT_FALSE_LAROTH',() ) ) )
	bonusCategory['false laroth']['xp'] = 10
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ARCHERY') ):
		giveUnits.append( ( 'UNIT_ARCHER', 'archer', ['PROMOTION_IMPLACABLE', ],  'Anyon' ) )
		giveUnits.append( ( 'UNIT_ARCHER', 'archer', ['PROMOTION_IMPLACABLE', ],  'Lann' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_BRONZE_WORKING') ):
		giveUnits.append( ( 'UNIT_HONORED_BAND', 'melee', ['PROMOTION_IMPLACABLE', ],  'Medb' ) )
		giveUnits.append( ( 'UNIT_HONORED_BAND', 'melee', ['PROMOTION_IMPLACABLE', ],  'Aife' ) )
		bonusCategory['melee']['weapons'] = 'PROMOTION_BRONZE_WEAPONS'
		bonusCategory['false laroth']['weapons'] = 'PROMOTION_BRONZE_WEAPONS'
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_IRON_WORKING') ):
		giveUnits.append( ( 'UNIT_PRINCIPES', 'melee', ['PROMOTION_IMPLACABLE', ],  'Scathach' ) )
		giveUnits.append( ( 'UNIT_PRINCIPES', 'melee', ['PROMOTION_IMPLACABLE', ],  'Voadica' ) )
		giveUnits.append( ( 'UNIT_HONORED_BAND', 'melee', [],  '' ) )
		bonusCategory['melee']['weapons'] = 'PROMOTION_IRON_WEAPONS'
		bonusCategory['false laroth']['weapons'] = 'PROMOTION_IRON_WEAPONS'
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_TRADE')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_STIRRUPS')):
		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', [],  '' ) )
		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_WARHORSES')):
		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', [],  '' ) )
		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', [],  '' ) )
		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
#	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ARMORED_CAVALRY')):
#		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', ['PROMOTION_COMBAT1', ],  '' ) )
#		giveUnits.append( ( 'UNIT_HORSE_ARCHER', 'mounted', ['PROMOTION_COMBAT1', ],  '' ) )
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
#		bonusCategory['mounted']['xp'] = 10
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ANIMAL_HANDLING')):
		giveUnits.append( ( 'UNIT_CETRATUS', 'recon', [],  '' ) )
		giveUnits.append( ( 'UNIT_CETRATUS', 'recon', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_FERAL_BOND')):
		giveUnits.append( ( 'UNIT_GHOSTWALKER', 'recon', [],  '' ) )
		giveUnits.append( ( 'UNIT_GHOSTWALKER', 'recon', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ANIMAL_MASTERY')):
		giveUnits.append( ( 'UNIT_GHOSTWALKER', 'recon', ['PROMOTION_IMPLACABLE', ],  'Gurith' ) )
		giveUnits.append( ( 'UNIT_GHOSTWALKER', 'recon', ['PROMOTION_IMPLACABLE', 'PROMOTION_COMBAT1', 'PROMOTION_COMBAT2', ],  'Fathen' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_SMELTING')):
		giveUnits.append( ( 'UNIT_HONORED_BAND', 'melee', [],  '' ) )
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_SANITATION')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MEDICINE')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MITHRIL_WORKING')):
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_PHALANX', 'melee', [ ],  '' ) )
		giveUnits.append( ( 'UNIT_PHALANX', 'melee', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		bonusCategory['melee'].setdefault( 'promotions', [] ).append( 'PROMOTION_ENCHANTED_BLADE' )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ASTRONOMY')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_BOWYERS')):
		giveUnits.append( ( 'UNIT_LONGBOWMAN', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_LONGBOWMAN', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_LONGBOWMAN', 'archer', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_PRECISION')):
		giveUnits.append( ( 'UNIT_LONGBOWMAN', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_LONGBOWMAN', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_MARKSMAN', 'archer', ['PROMOTION_IMPLACABLE', ],  'Tadc' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_TAXATION')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_GUILDS')):
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MERCANTILISM')):
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MILITARY_STRATEGY')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		bonusCategory['melee']['xp'] = 6
		bonusCategory['archer']['xp'] = 6
		bonusCategory['recon']['xp'] = 6
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ENGINEERING')):
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_CATAPULT', 'supplies', ['PROMOTION_ACCURACY', ],  '' ) )
		giveUnits.append( ( 'UNIT_CATAPULT', 'supplies', ['PROMOTION_BARRAGE1', ],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_BLASTING_POWDER')):
		giveUnits.append( ( 'UNIT_BONE_HORDE', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_BONE_HORDE', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_BONE_HORDE', 'archer', [],  '' ) )
		giveUnits.append( ( 'UNIT_BONE_HORDE', 'archer', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_SORCERY')):
		unitUpgrades['UNIT_ADEPT'] = 'UNIT_NECROMANCER'
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ARCANE_LORE')):
		giveUnits.append( ( 'UNIT_NECROMANCER', 'adept', ['PROMOTION_DEATH1', 'PROMOTION_DEATH2', ], '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_STRENGTH_OF_WILL')):
		giveUnits.append( ( 'UNIT_NECROMANCER', 'adept', ['PROMOTION_DEATH1', 'PROMOTION_DEATH2', 'PROMOTION_COMBAT1', ], '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_PASS_THROUGH_THE_ETHER')):
		giveUnits.append( ( 'UNIT_NECROMANCER', 'adept', ['PROMOTION_DEATH1', 'PROMOTION_COMBAT2', 'PROMOTION_COMBAT1', ], '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MACHINERY')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_CATAPULT', 'supplies', [],  '' ) )
		giveUnits.append( ( 'UNIT_CATAPULT', 'supplies', [],  '' ) )
#		giveUnits.append( ( 'UNIT_SPIRAL_SUPPLIES', 'supplies', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_OMNISCIENCE')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_NECROMANCER', 'adept', ['PROMOTION_DEATH1', 'PROMOTION_DEATH2', 'PROMOTION_COMBAT1', 'PROMOTION_COMBAT2', 'PROMOTION_COMBAT3', ], '' ) )
		giveUnits.append( ( 'UNIT_NECROMANCER', 'adept', ['PROMOTION_DEATH1', 'PROMOTION_DEATH2', 'PROMOTION_COMBAT1', 'PROMOTION_FIRE1', 'PROMOTION_FIRE2', 'PROMOTION_IMPLACABLE', ], 'Tetricues' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_DIVINATION')):
		bonusCategory['adept']['xp'] = bonusCategory['adept'].get('xp', 0 ) +2		
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ALTERATION')):
		giveUnits.append( ( 'UNIT_GHOSTWALKER', 'recon', ['PROMOTION_ILLUSION', 'PROMOTION_IMPLACABLE', ],  'Otal the Faded' ) )
		bonusCategory['adept']['xp'] = bonusCategory['adept'].get('xp', 0 ) +2		
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_NECROMANCY')):
		bonusCategory['adept']['xp'] = bonusCategory['adept'].get('xp', 0 ) +2
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_ELEMENTALISM')):
		bonusCategory['archer'].setdefault( 'promotions', [] ).append( 'PROMOTION_FLAMING_ARROWS' )
		bonusCategory['adept']['xp'] = bonusCategory['adept'].get('xp', 0 ) +2        
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_RELIGIOUS_LAW')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_THEOLOGY')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_COMMUNE_WITH_NATURE')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_FANATICISM')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_REVENANT', 'melee', ['PROMOTION_INQUISITOR', ],  'Rasaec the Hollow' ) ) # Revenants are disciples, but very melee like disciples
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_MALEVOLENT_DESIGNS')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_RIGHTEOUSNESS')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
	if eTeam.isHasTech(gc.getInfoTypeForString('TECH_DIVINE_ESSENCE')):
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_AWAKENED', 'population', [],  '' ) )
		giveUnits.append( ( 'UNIT_ABOMINATION', 'melee', [],  '' ) )

	if not makeHelpText:
		pCapital = pPlayer.getCapitalCity()
		capitalX = pCapital.getX()
		capitalY = pCapital.getY()
		bestPlotGoodness = -1
		iBestPlot = None
		for i in xrange (CyMap().numPlots()):
			pPlot = CyMap().plotByIndex(i)
			plotGoodness = -1
			if ( pPlot.getOwner() != iPlayer 
				and not pPlot.isWater() 
				and pPlot.getNumUnits() == 0 
				and not pPlot.isCity()
				and not pPlot.isImpassable() ):
					plotGoodness = CyGame().getSorenRandNum(500, "Place Spiral Gate")
					# I'm placing a limit on the added goodness.
					# This makes final goodness a bit less map dependant and less predictable.
					# The limits will need finetuning.
					# With a limit of 250, all continents with at least 175 tiles are equally good.
					plotGoodness += min( pPlot.area().getNumTiles() * 2, 100 )
					# With a limit of 500, all continents with at least 100 unclaimed tiles are equally good.
					plotGoodness += min( pPlot.area().getNumUnownedTiles() * 5, 400 )
					# Distance to capital is squared, since area is squared
					# With a limit of 450, all tiles further away than 450**.5 or 21 squares are equally good
					plotGoodness += min( ( (pPlot.getX()-capitalX)**2 + (pPlot.getY()-capitalY)**2 ), 750)
					if not pPlot.isOwned():
						plotGoodness += 300
			if plotGoodness > bestPlotGoodness:
				bestPlotGoodness = plotGoodness
				pBestPlot = pPlot
		if pBestPlot is None: 
			# It's a world spell, it shouldn't fail just because. Probably won't anyway
			# but just to be sure.
			pBestPlot = pCapital.plot()
		
		pBestPlot.setFeatureType(gc.getInfoTypeForString('FEATURE_HAUNTED_LANDS'),0)
		
		commonInitUnitArgs = ( pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH )
		for unitString, bonusCategoryName, promotionList, name in giveUnits:
			while unitString in unitUpgrades:
				unitString = unitUpgrades[unitString]
			newUnit = pPlayer.initUnit(gc.getInfoTypeForString(unitString), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)	
#			newUnit = pPlayer.initUnit( gc.getInfoTypeForString(unitString), *commonInitUnitArgs )
			for promotionString in promotionList:
				newUnit.setHasPromotion( gc.getInfoTypeForString( promotionString ), True)
			if 'promotions' in bonusCategory[bonusCategoryName]:
				for promotionString in bonusCategory[bonusCategoryName]['promotions']:
					newUnit.setHasPromotion( gc.getInfoTypeForString( promotionString ), True)
			if 'weapons' in bonusCategory[bonusCategoryName]:
				newUnit.setHasPromotion( gc.getInfoTypeForString( bonusCategory[bonusCategoryName]['weapons'] ), True)
			if 'xp' in bonusCategory[bonusCategoryName]:
				newUnit.setExperience(bonusCategory[bonusCategoryName]['xp'], -1)
			if name:
				newUnit.setName(name)
				
	else:
		counts = dict( (key,0) for key in [ 'false laroth', 'archer', 'adept', 'melee', 'recon', 'mounted', 'supplies', 'population' ])
		for unitString, bonusCategoryName, promotionList, name in giveUnits:
			counts[unitString] = counts.get( unitString, 0) +1
			counts[bonusCategoryName] += 1
		counts['military'] = sum( c for key, c in counts.iteritems() if key in set( [ 'false laroth', 'archer', 'adept', 'melee', 'recon', 'mounted', ] ) )
		templateHelpString = 'Treachery in the Land of the Dead.  A false Laroth steals away additional subjects for the Scions.  Currently casting this spell will give %(military)i military units, %(supplies)i supplies, and %(population)i Awakened.  The units will appear in a random, probably distant, location.'
		return templateHelpString % counts


EDIT:
I was looking at making the Breach the World Spell. Under the req. for Dark Council an "if greater than zero" building count for the DC building is commented out. I'm guessing it was redundant with the DC marked as a World Spell? I wonder chiefly because the FF version lacks the building count and wasn't a WS: I wonder if the FF version is bugged. I guess I can try it.
 
Hey Tarq,

Always loved the Scions. They're unique and lots of fun (especially when your capital starts growing in size.) I haven't tried them yet in Wildmana but I'm sure it will be good times. If you're going to be tinkering with them in WM I'll try not to get too excited. :goodjob:
 
thanks, changed it to the code posted by you and enabled sorcery as prereq again.

it's been a while, I don't remember details on the DC python req.

Do you think any balance changes are necessary for the Scions in WM?
 
Do you think any balance changes are necessary for the Scions in WM?

I'll have to play quite a bit more before I answer that.
If I'm lucky I'll have played "quite a bit" by next weekend. :shifty:

I wonder what it'll be like to have Alcinus the whole game... I was always kinda glad to see the back of him. I don't know if it's a "pro" or "con" for the Scions. (Same thing with the new Palace/Keep, come to think of it. I'm eager to see how that plays out.)

If you're going to be tinkering with them in WM I'll try not to get too excited. :goodjob:

I better play more before I tinker, too. ;)
Hmm... I can see doing a module* adding the Horned Dread back. I had a hoot with the switch/teleport bit.

*May not work as a module. A Feat might need to be :borg:ed.
 
it's a bug. Alcinus should never permanently die. I'll see to get it fixed next patch.

When this happened to me I felt perfectly entitled to use the world builder to get him back. (After building the dagger and finding her useless.)
 
Ok, a couple of things:

I do indeed like the new Keep, but I wonder if the new, less-mad Alcinus - when combined with the Keep - is a problem. Since he's Immortal he can mine the keep indefinitely. You only lose him temporarily, where other units are likely to get themselves killed.

Though you can lose him quite awhile, and having him hang around the Keep picking up odd magics and occasionally going berserk is interesting.

Maybe if he starts with "Estranged"? I think that'd mean he'd have it again whenever resurrected. Makes parking him at the Keep a bit riskier, and *might* lead to a more-or-less permanent loss if he turns Barbarian and goes camping with a horde of Frostlings or something... OTOH, you could still go track him down.

So it's a bit more like the old Alcinus, though without nearly as much risk or special dll/python functions.


The other thing is the population of captured cities. A reduction in population to any captured city is a very good balance move for the Scions, given that a limited population is the chief thing holding the Scions back.

The relevant code from FF's CvEventManger.py's "OnCityAcquired" function is below.


Spoiler :

Code:
#Scions Start - extra reduction of Scions-acquired cities.  Use of a decimal seems to break it.
		pPlayer = gc.getPlayer(iNewOwner)
		if (gc.getPlayer(pCity.getOwner()).getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SCIONS') and gc.getPlayer(pCity.getOwner()).getLeaderType() != gc.getInfoTypeForString('LEADER_KOUN')):
			if gc.getPlayer(pCity.getOwner()).getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_GOD_KING'):
				iBCPop = pCity.getPopulation() * 10
				iBCMod = iBCPop / 16
				pCity.changePopulation(-iBCMod)
			else:
				iBCPop = pCity.getPopulation() * 10
				iBCMod = iBCPop / 12
				pCity.changePopulation(-iBCMod)


		if gc.getPlayer(pCity.getPreviousOwner()).getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SCIONS'):
			iBCPop = pCity.getPopulation() * 10
			iBCMod = iBCPop / 12
			pCity.changePopulation(-iBCMod)
#Scions End



Hey, Headless archers! :)

...

Hey, how did you make them Headless?
EDIT: Never mind, just found "ScionUnitCreated."

.... I was going to make a pun about a lack of Headless horsemen, but I think I'll skip it.

The shift toward defense is interesting, though I wonder if it pushes the civ a too much toward archery (really high Defense) and cavalry (No "nerfed" Attack)? OTOH, given that those are often under-utilized that may not be a bad thing.
 
i played quite a few games with them and they are very strong in the early game while in later stages they just can not keep up.

in the early game you get some awakened here and there and their city growth is usually higher then other civs, however even when you have most of spawn rate increasing buildings in all cities it is just not nearly enough to compete in the mid game.
in the late game they really fall apprt even if i have 3 cities producing awakened (1 capital and two cities with cathedral of rebirth) it is not even close to other civs that just can spam settlers and outgrowth you by far.

their units, income and research is fine it is just that on larger maps they have no change to compete in later stages of the game, like i said 3 cities producing citizens nonstop and 2 other cities producing units, still not enough (and a lot of minor cities). imho the hammer cost of the awakened should be dropped based on how far the game progresses mabye give each city a resource that decreases the cost (cumulative) of the awakened.
 
i played quite a few games with them and they are very strong in the early game while in later stages they just can not keep up.

That's a common experience... Was this in WM?

I'm curious primarily with regard to conquered city population. Early-ish Scion runaway was certainly a big problem before the conquest pop. reduction, but maybe the WM early game is sufficiently different for that not to be a problem.

I suspect they'll need a mid-to-late game boost. I don't think they were ever popular - or maybe even tolerated - but I got quite a bit of use out of the Creepers. With them gone the late game problems may be even worse.

:rolleyes: I guess I should really see how WM's no-conquest-penalty works out.
I need to play more! :wallbash:

imho the hammer cost of the awakened should be dropped based on how far the game progresses mabye give each city a resource that decreases the cost (cumulative) of the awakened.

I can see that working.
There might be a number of interesting ways to modify the Awakened and/or Reborn costs. (Maybe just boost the Resource-based cost discount Reborn already get?)
 
In wildmana there are no creepers as far as i know, haunted land only spreads by itself.

wildmana has also made a formula for the awakening spawn rate: it is percentage based spawn per turn and decreases the more population you have, however you can mitigate that diminishing return effect a bit by building certain buildings.

(i think the original scions just stop spawning after a set number of awakened has spawned)


at the start i usually have around 10% spawn rate and i get i up to maybe 15%-17% in the mid game with my capital having godking and a lot of hammers producing citizens nonstop and still i can't keep up. an other idea would be to change the the awakened completely:

as soon as you have a cathedral of rebirth you can build a repeatable ritual (like elegy of the sheaim) that increases all population in all cities by 1 (or maybe just in cities below 8 population)
 
wildmana has also made a formula for the awakening spawn rate: it is percentage based spawn per turn and decreases the more population you have, however you can mitigate that diminishing return effect a bit by building certain buildings.
His name his Tarquelne, not wildmana :p I know you want to point out the differences, just funny considering Tarquelne wrote like 98% of the code you talk about.:lol:

When I played the Scions in FF I remember that the best way lategame was to use the Priests and their postcombat ability to generate reborn. Combat V, lots of first strikes and cannibalize and a Priest could create a lot of Reborn ;)

edit: added the Estranged promotion to Alcinus. I could also add the oncityacquired python but probably not necessary?
 
In wildmana there are no creepers as far as i know, haunted land only spreads by itself.

Another possibility for a module. Probably something more like the original creepers - they were just a hawk replacement, and a way to flesh out the Haunted Lands some more.

(i think the original scions just stop spawning after a set number of awakened has spawned)

Yep - it had a completely linear reduction in the rate, and the spawning just stopped at a certain total population based on map size. I wanted to make people completely shift their focus. I like that, but it's the only "pro" and obviously it's quite subjective.

with my capital having godking and a lot of hammers producing citizens nonstop

Do you ever shift from Godking? I thought Godking underutilized when I made the Scions, but playing them I pick it up ASAP and never shift from it.

Anybody think making another gov. civic more attractive to the Scions (either through a change to the civic or a change to the Scions) would be a good idea? Though Godking being so beneficial might make it impractical.

Making it impossible to build Awakened after a certain point might do it, but I suspect not.

as soon as you have a cathedral of rebirth you can build a repeatable ritual (like elegy of the sheaim) that increases all population in all cities by 1 (or maybe just in cities below 8 population)

That's a neat idea. Maybe connect it to open borders or something, to show how eager people are to join the Scions?

I had a rather clunky system to make Reborn cheaper as you gained more open borders. I like linking open borders (or general diplomatic success) to gaining Reborn, but I'm sure there are better ways to do it.

When I played the Scions in FF I remember that the best way lategame was to use the Priests and their postcombat ability to generate reborn. Combat V, lots of first strikes and cannibalize and a Priest could create a lot of Reborn ;)

Yeah, I like how that worked out. :) Though I had to tone-down the original function after Valk's feedback. That happened a lot. I'd make something new and he'd come back a few days later and point out the exploits.

edit: added the Estranged promotion to Alcinus.

Cool!

I could also add the oncityacquired python but probably not necessary?

I really should have played more before advising it - don't change it now on my account.

I'll try going on a rampage and see what happens. It feels "wrong" to have a total population of 20 and then capture two pop. 10 cities, but the Scions may need it. And we'll see if I can actually bag some large-pop cities at that point. (I only played one short game yesterday: The Calabim's neighbors did *not* contribute to the game and keep them in check. @&*&*% elves.)

Re: AI -

I should have said something before: I think making the AI a high priority for the civ excellent idea. I'm afraid I won't be of any help with coding it, however.
 
Yeah, I like how that worked out. :) Though I had to tone-down the original function after Valk's feedback. That happened a lot. I'd make something new and he'd come back a few days later and point out the exploits.

Yes. Yes it did. :p

The Scions were what got me into modding in the first place, actually. So all that followed is your fault. :mischief:


Speaking of the Scions, we're setting up a rather in-depth wiki for RifE. Our Scions are virtually identical to FF's (slight flavorstart preference for desert, opposition to the Malakim and D'tesh, and they start with a few creepers rather than a scout), so if you feel like writing strategy text we would certainly use it. :goodjob:

It's also extremely easy to add pages, as we're using templates... And Grey Fox has created a custom theme for it. We're pretty happy with it as a whole. :lol: I'll PM the address to you (not publicly available yet). ;)
 
hm what would be better imho is that haunted land would spread by itself within the borders of the scions like desert for the malakim or ice for the illians. one could even link it to a certain building like the necropolis (from the sorcery tech).

this would eliminate the micromanagement of creepers

(i just spam ideas that come to mind)


edit:

Do you ever shift from Godking? I thought Godking underutilized when I made the Scions, but playing them I pick it up ASAP and never shift from it.

it is always the same, after the next reborn i switch from godking... no after the next i switch .... in the end i never switch :D
 
hm what would be better imho is that haunted land would spread by itself within the borders of the scions

IIRC WM has a slightly-modified version of the code that does just that. It's based on the # of HL-associated units you have, plus nature mana. (Is the mana part new?)

Checking... Yep, there it is.

Looking at it I'm not sure if it spreads it outside Scion lands or not. (Ah... It's part of doScionsTurn: It'll grow HL in any plot Owned by the current player, but it's only run on a Scion turn?)

EDIT: I looks like the open border bonus for Reborn is still in the code - I forgot what to look for and where.
 
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 had Alcinus become Enraged as soon as he spawned and it took for-freakin'-ever to provide him with a nearly-dead target to sate his bloodlust. The nut.
That was fun.

I'm a little worried that Korrina the Red is over-powered... maybe just in comparison to the Black? Too many eggs in one basket? Though this isn't just a Wild Mana thing. Anybody else? This could easily just be me needing to play more. :)

It occurred to me that making the spawning bonus from patrian artifacts lower than the bonus from other Resources would encourage trade. I don't know whether it'd be better to lower the PA bonus or raise others. Or if trade should be encouraged.

Some other boni are already higher, come to think of it.
 
Perhaps you should consider some haunted lands bonuses for black-- just as a haunt. For example, an invisibility spell or really fast movement through haunted lands for her. Since the haunt cannot actually kill iirc, it would be cool if Korrina could attack almost anywhere you have a continuous chain of haunted lands.
 
Quote:Originally Posted by tesb
hm what would be better imho is that haunted land would spread by itself within the borders of the scions

IIRC WM has a slightly-modified version of the code that does just that. It's based on the # of HL-associated units you have, plus nature mana. (Is the mana part new?)


shouldn't that be switched to death mana?
 
I played an other game with the scions with patch 8.10:

In the early game they are really powerful, i managed to get every single wonder there is. They can outproduce/outech most of the other races.

I also have to correct myself they can be very powerful in the mid to late-game, but only on small maps. The scions just don't scale very well with the map size or to be more precise with the settable land.

If there is enough room to expand almost every other civilization will overtake the scions.
In the late game you get 1 city producing awakened for every 4 cities and a awakened will take ~6-10 turns depending on the city and available recourses, so each city will growth in ~24-40 turns.
And this is with 1 out of 4 cities just producing citizens, it can't be used for anything else.

compare that to a regular civ which will have its cities growth much faster and produce other things as well and you can easily see where the scions fall short.
 
Back
Top Bottom