Minor Leaders as Major Leaders - Scenarios Unaffected

Verily

Prince
Joined
Feb 27, 2007
Messages
551
I've added in most of the minor leaders into the epic game without changing the scenarios (by creating two separate identities for each, the basic one checked by the scenarios and an epic game version checked by the epic game). This allowed me to change their traits without changing the scenarios.

Not every leader is implemented. Some of the more boring or tedious ones were omitted. It shouldn't be too difficult to add the leader of your choice if this annoys you, however. Also, Baron Duin Halfmorn wasn't implemented because, flavor-wise, he would require extra edits to the epic game. The Infernal leaders are omitted because adding them wouldn't do anything; the Infernal leader is set as Hyborem when they're summoned.

Below are listed the leaders and their traits. Many of the ideas were taken from notque's thread, but I wanted to keep the implementation simple and make sure it didn't interfere with scenarios. I didn't modify any existing leaders, but I was tempted to make Magic Resistant a Civilization trait for the Bannor and Clan of Embers. It would definitely be flavorful, and it would make the Bannor a bit better.

Tethira (Good) - Bannor
Industrious/Organized/Magic Resistant

Thessalonica (Good) - Elohim
Defender/Organized/Tolerant

Captain Uldanor (Neutral) - Hippus
Defender/Financial

Captain Ostanes (Neutral) - Hippus
Ingenuity/Industrious

Tya Kiri (Neutral) - Amurites
Arcane/Ingenuity

Kane (Neutral) - Malakim
Spiritual/Defender/Barbarian

Shekinah (Neutral) - Sidar
Defender/Philosophical

Weevil, Pickle and Hyde (Evil) - Balseraphs
Adaptive/Ingenuity/Creative
[The formula for Adaptive is a mystery to me, so it may be applied to Ingenuity or to Creative.]

Furia the Mad (Evil) - Balseraphs
Creative/Charismatic

Braeden the Laconic (Evil) - Illians
Agnostic/Defender/Raiders/Barbarian

Mahon the Butcher (Evil) - Calabim
Aggressive/Expansive

Hafgan the Purger (Evil) - Clan of Embers
Aggressive/Magic Resistant/Barbarian

Volanna (Evil) - Svartalfar
Aggressive/Raiders

Rivanna the Wraith Lord (Evil) - Svartalfar
Organized/Arcane [Yes, the same as Valledia; I'm pondering this one right now.]

Instructions: Extract the below to the "...\Fall from Heaven 2\Assets\XML\Civilizations" folder. You may want to back up CIV4CivilizationInfos.xml and CIV4LeaderHeadInfos.xml first. Also note that this will mess up the leaderheads in any ongoing games (although they'll be fine in new games). This should only be concerning if you're worried about seeing the Thessalonica image for Garrim Gyr, for example.
 
I just got to thinking, would it be too much to make it so that players who are not the first to research Infernal Pact summon a different Infernal civ under a different leader? Or how about making it so that just researching the tech doesn't summon Hyborem, but instead allows a repeatable Demonic Pact Ritual that lets you keep summoning different demon lords? It might also be nice to add different Hero units for each Infernal Leader.
 
I just got to thinking, would it be too much to make it so that players who are not the first to research Infernal Pact summon a different Infernal civ under a different leader? Or how about making it so that just researching the tech doesn't summon Hyborem, but instead allows a repeatable Demonic Pact Ritual that lets you keep summoning different demon lords? It might also be nice to add different Hero units for each Infernal Leader.

I've looked into it. It's hardcoded, so it's not simple. Either way, it's something I plan on doing after I've gotten the Minor leader traits working and finished.
 
Might be interesting to tie this into the scenarios as a reward. Beat Scenario X and you can choose them as a leader in the main game. OTOH, I suspect that's quite a recode.
 
I've looked into it. It's hardcoded, so it's not simple. Either way, it's something I plan on doing after I've gotten the Minor leader traits working and finished.

It is hardcoded in Python, which I could probably change to work in either way I suggested with less than an hour's work.


I'm pretty sure I would have no problems tying it to Trophies either, although I have let to figure out how to make trophies of my own.
 
After a few test games, Volanna is ridiculously broken as implemented. The combination of Aggressive, Raiders and Sinister is just too much, and she can overrun everyone with a rush of Hunters. Although the idea of having a leader with only one trait seems a little strange to me, Volanna might be more balanced with just Aggressive, no Raiders.

I still can't think of any good replacement for Rivanna's traits to distinguish her from Valledia. I would like to give her Summoning instead of Arcane, but Summoning is too strong with the Svartalfar illusions. I suppose she could lose Organized for a different trait, but most of the decent combinations with Arcane are already taken. And "The Wraith Lord" means she has to have either Arcane or Summoner. Rivanna and Valledia do play very differently since Rivanna has all of the unique elven and Svartalfar mechanics to play with and Valledia has... well... not much because the Amurites are weak, but different things.

What do people think of Magic Resistant as a Bannor and Clan of Embers Civilization trait?

If I do another release, I'll also bundle Tolerant as an Elohim Civilization trait and Agnostic as an Illian Civilization trait, as they should be.

I also had a recent flash of inspiration on how to implement Tolerant for the Kuriotates, where it was originally intended, but I don't have the programming ability to do so. Anyone interested in hearing the idea and trying to program it? I know it's not too hard because something very similar is done in Rhye's mod.
 
I just got to thinking, would it be too much to make it so that players who are not the first to research Infernal Pact summon a different Infernal civ under a different leader? Or how about making it so that just researching the tech doesn't summon Hyborem, but instead allows a repeatable Demonic Pact Ritual that lets you keep summoning different demon lords? It might also be nice to add different Hero units for each Infernal Leader.

You could make the program place new infernals each time someone researches Infernal Pact, but the catch would be that if you don't block the new infernal civ from gaining Infernal Pact because the summoner knows it then it means you summon all possible infernals instantly upon first researching the pact (since Hybo appears, copies your techs, so thus learns Infernal Pact, summons another civ, who copies HIS techs, and thus learns....)
 
Yeah, well, I was already leaning towards making summoning them be a ritual anyway.

I just decided to implement it like this, although I haven't tested it yet:

Code:
in CvGameUtils.py, under def cannotCreate(self,argsList):


		if eProject == gc.getInfoTypeForString('PROJECT_DEMONIC_PACT'):
			if pPlayer.getStateReligion() != gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL'):
				return True


-------------------

in CvEventManager.py, under def onProjectBuilt(self, argsList):





		if not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_HYBOREM_OR_BASIUM):
			if (iProjectType == gc.getInfoTypeForString('PROJECT_DEMONIC_PACT') and iPlayer != -1):
				demonList = []
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_HYBOREM')):
					demonList.append(gc.getInfoTypeForString('LEADER_HYBOREM'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_JUDECCA')):
					demonList.append(gc.getInfoTypeForString('LEADER_JUDECCA'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_SALLOS')):
					demonList.append(gc.getInfoTypeForString('LEADER_SALLOS'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_OUZZA')):
					demonList.append(gc.getInfoTypeForString('LEADER_OUZZA'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_MERESIN')):
					demonList.append(gc.getInfoTypeForString('LEADER_MERESIN'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_STATIUS')):
					demonList.append(gc.getInfoTypeForString('LEADER_STATIUS'))
				if not CyGame().isLeaderEverActive(gc.getInfoTypeForString('LEADER_LETHE')):
					demonList.append(gc.getInfoTypeForString('LEADER_LETHE'))
				iDemonLord = demonList[CyGame().getSorenRandNum(len(demonList), "Infernal Pact")]
				
				
				iInfernalPlayer = cf.getOpenPlayer()
				pBestPlot = -1
				iBestPlot = -1
				for i in range (CyMap().numPlots()):
					pPlot = CyMap().plotByIndex(i)
					iPlot = -1
					if pPlot.isWater() == False:
						if pPlot.getNumUnits() == 0:
							if pPlot.isCity() == False:
								if pPlot.isImpassable() == False:
									iPlot = CyGame().getSorenRandNum(500, "Place Hyborem")
									iPlot = iPlot + (pPlot.area().getNumTiles() * 2)
									iPlot = iPlot + (pPlot.area().getNumUnownedTiles() * 10)
									if pPlot.isOwned() == False:
										iPlot = iPlot + 500
									if pPlot.getOwner() == iPlayer:
										iPlot = iPlot + 200
					if iPlot > iBestPlot:
						iBestPlot = iPlot
						pBestPlot = pPlot
				if (iInfernalPlayer != -1 and pBestPlot != -1):
					CyGame().addPlayerAdvanced(iInfernalPlayer, -1, iDemonLord, gc.getInfoTypeForString('CIVILIZATION_INFERNAL'))
					iFounderTeam = gc.getPlayer(iPlayer).getTeam()
					eFounderTeam = gc.getTeam(gc.getPlayer(iPlayer).getTeam())
					iInfernalTeam = gc.getPlayer(iInfernalPlayer).getTeam()
					eInfernalTeam = gc.getTeam(iInfernalTeam)
					for iTech in range(gc.getNumTechInfos()):
						if eFounderTeam.isHasTech(iTech):
							eInfernalTeam.setHasTech(iTech, true, iInfernalPlayer, true, false)
					eFounderTeam.signOpenBorders(iFounderTeam)
					eInfernalTeam.signOpenBorders(iInfernalTeam)
					iBarbTeam = gc.getPlayer(gc.getBARBARIAN_PLAYER()).getTeam()
					eInfernalTeam.makePeace(iBarbTeam)
					for iTeam in range(gc.getMAX_TEAMS()):
						if iTeam != iBarbTeam:
							eTeam = gc.getTeam(iTeam)
							if eTeam.isAlive():
								if eFounderTeam.isAtWar(iTeam):
									eInfernalTeam.declareWar(iTeam, false, WarPlanTypes.WARPLAN_LIMITED)
					pInfernalPlayer = gc.getPlayer(iInfernalPlayer)
					pInfernalPlayer.AI_changeAttitudeExtra(iPlayer,4)
					
					if iDemonLord ==gc.getInfoTypeForString('LEADER_HYBOREM'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_HYBOREM'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), true)
						newUnit1.setHasCasted(true)
						
					if iDemonLord ==gc.getInfoTypeForString('LEADER_JUDECCA'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_JUDECCA'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					if iDemonLord ==gc.getInfoTypeForString('LEADER_SALLOS'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_SALLOS'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					if iDemonLord ==gc.getInfoTypeForString('LEADER_OUZZA'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_OUZZA'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					if iDemonLord ==gc.getInfoTypeForString('LEADER_MERESIN'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_MERESIN'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					if iDemonLord ==gc.getInfoTypeForString('LEADER_STATIUS'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_STATIUS'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					if iDemonLord ==gc.getInfoTypeForString('LEADER_LETHE'):
						newUnit1 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_LETHE'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
						newUnit1.setHasCasted(true)
					
					newUnit2 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_LONGBOWMAN'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit2.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), true)
					newUnit3 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_LONGBOWMAN'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit3.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), true)
					newUnit4 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_CHAMPION'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit4.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IRON_WEAPONS'), true)
					newUnit4.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), true)
					newUnit5 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_CHAMPION'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit5.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IRON_WEAPONS'), true)
					newUnit5.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), true)
					newUnit6 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_WORKER'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit6.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEMON'), true)
					newUnit7 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_IMP'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit7.setHasPromotion(gc.getInfoTypeForString('PROMOTION_MOBILITY1'), true)
					newUnit8 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_MANES'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit9 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_MANES'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit10 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_MANES'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit11 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_SETTLER'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit11.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STARTING_SETTLER'), true)
					newUnit11.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEMON'), true)
					newUnit12 = pInfernalPlayer.initUnit(gc.getInfoTypeForString('UNIT_SETTLER'), pBestPlot.getX(), pBestPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_NORTH)
					newUnit12.setHasPromotion(gc.getInfoTypeForString('PROMOTION_STARTING_SETTLER'), true)
					newUnit12.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEMON'), true)
					if gc.getPlayer(iPlayer).isHuman():
						popupInfo = CyPopupInfo()
						popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
						popupInfo.setText(CyTranslator().getText("TXT_KEY_POPUP_CONTROL_INFERNAL",()))
						popupInfo.setData1(iPlayer)
						popupInfo.setData2(iInfernalPlayer)
						popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_YES", ()), "")
						popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_NO", ()), "")
						popupInfo.setOnClickedPythonCallback("reassignPlayer")
						popupInfo.addPopup(iPlayer)


---------------

in CvEventManager.py, delete all the current Infernal-placing code from def onTechAcquired(self, argsList): 
---------------

in CIV4ProjectInfos.xml:


		<ProjectInfo>
			<Type>PROJECT_DEMONIC_PACT</Type>
			<Description>TXT_KEY_PROJECT_BANE_DIVINE</Description>
			
		<ProjectInfo>
			<Type>PROJECT_DEMONIC_PACT</Type>
			<Description>TXT_KEY_PROJECT_DEMONIC_PACT</Description>
			<Civilopedia>TXT_KEY_PROJECT_BANE_DIVINE_STRATEGY</Civilopedia>
			<Strategy>TXT_KEY_PROJECT_BANE_DIVINE_STRATEGY</Strategy>
			<VictoryPrereq>NONE</VictoryPrereq>
			<TechPrereq>TECH_INFERNAL_PACT</TechPrereq>
			<AnyonePrereqProject>NONE</AnyonePrereqProject>
			<iMaxGlobalInstances>7</iMaxGlobalInstances>
			<iMaxTeamInstances>1</iMaxTeamInstances>
			<iCost>216</iCost>
			<iNukeInterception>0</iNukeInterception>
			<iTechShare>0</iTechShare>
			<EveryoneSpecialUnit>NONE</EveryoneSpecialUnit>
			<EveryoneSpecialBuilding>NONE</EveryoneSpecialBuilding>
			<bSpaceship>0</bSpaceship>
			<bAllowsNukes>0</bAllowsNukes>
			<Button>Art/Interface/Buttons/Projects/Bane Divine.dds</Button>
			<PrereqProjects/>
			<VictoryThresholds/>
			<VictoryMinThresholds/>
			<iVictoryDelayPercent>0</iVictoryDelayPercent>
			<iSuccessRate>0</iSuccessRate>
			<BonusProductionModifiers>
				<BonusProductionModifier>
					<BonusType>BONUS_MANA_ENTROPY</BonusType>
					<iProductonModifier>100</iProductonModifier>
				</BonusProductionModifier>
			</BonusProductionModifiers>
			<CreateSound/>
			<MovieDefineTag/>
			<iAIWeight>300</iAIWeight>
			<iPrereqGlobalCounter>0</iPrereqGlobalCounter>
		</ProjectInfo>

-----------------

in CIV4UnitInfos.xml I added 6 heroes (all of the same unitclass as Hyborem), which so far are basically a half strength Hyborem without the Gela. I'll probably make them more unique eventually.

Edit: after fixing a few stupid errors, the updated version works perfectly.
 
Yeah, well, I was already leaning towards making summoning them be a ritual anyway.

I just decided to implement it like this, although I haven't tested it yet:

Code:
in CvGameUtils.py, under def cannotCreate(self,argsList):


		if eProject == gc.getInfoTypeForString('PROJECT_DEMONIC_PACT'):
			if pPlayer.getStateReligion() == gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL'):
				return True


[/QUOTE]

Shouldn't it be if pPlayer.getStateReligion() != rather than ==? At the moment, it's blocking AV civs from performing it, but allowing everyone else.
 
Yeah, you are both right (expect actually using all caps in leader would mess it up, of course)

I also didn't mean for the Demonic Pact ritual to have an AC requirement.
 
Yeah, you are both right (expect actually using all caps in leader would mess it up, of course)

I also didn't mean for the Demonic Pact ritual to have an AC requirement.

You should probably mention you wrote new entries into the gametext file as well. :p

For the heroes, perhaps give them all a unique piece of equipment or something?
 
Well, I wouldn't want to lie about it. So far all I have are textkeys.

I also shouldn't give Judecca a Judecca unit twice.


I wasn't really thinking that they should start with Equipment. No Demon lord should be nearly as strong as Hyborem. I was thinking that each leader would have a unique spell, as the current Infernal World Spell requires the Hyborem Unit.


I've tested it now, and it seems to work fine. I have gotten a couple crashes, but I don't think they were related to this change as I had already made a lot of other changes in this version earlier. The first time I thought that the crash might have happened when Ouzza tried to summon another demon lord, but I don't think that is it. I removed the limit of 1 demonic pact per team and tried again, and built it twice in my next game. Hyborem also decided to build it 4 times and Sallos once, so it didn't take long for all 7 to show up. I then got to thinking that I should probably block the Infernals from summoning more Infernals.


I'm thinking it would be nice for being the first to Infernal Pact should still give some bonus. I'll probably make it give a free tech or a free Infernal Grimorie.



Hmmm...do you think this ritual should perhaps also give the builder peace with the barbarians?
 
As far as Rivanna goes, how about Charismatic/Arcane? :king:

Broken beyond belief. I considered Charismatic/Arcane/Weak for Tya Kiri before deciding that I didn't like having Weak in the epic game (and it creates a pathetic AI). Charismatic/Arcane by itself would obsolete all other spellcasting leaders in the game.

Anyway, MagisterCultuum, having Infernals summoning more Infernals seems very IC to me. Once one Infernal leader arrives, they all begin pouring in. Of course, it would make a human player playing the Infernals a cakewalk, and you'd need something with the Mercurians to give at least a semblance of a level playing field.


I'll just lay out my idea for Tolerant for the Kuriotates. I want to create a new UB for the Kuriotates, or rather a series of UBs. Available at Trade, each UB is a "Quarter" of the other civs in the game. As long as you have contact with a civ, you can build their Quarter--an Elohim Quarter, a Calabim Quarter, a Hippus Quarter, etc. These represent areas of the Kuriotate megacities in which the majority of the population is from that society. The Quarters would allow the Kuriotates to build UUs and UBs of that civ in that city.

This borrows a bit from RFC, in which you can only build Embassies while you have contact with someone. (In RFC you can lose contact if you don't have an Embassy.) Quarters would work in a similar fashion to Embassies, except instead of establishing permanent contact, they unlock the other civ's UUs and UBs. Since contact is required, civs which aren't in a particular game will not have their UUs available to the Kuriotates.

If Quarters seem too powerful to allow all of them in every megacity, you could limit it to one Quarter per civ, one Quarter per city, or both. (I'm leaning towards the last, so you have to be careful about which Quarters you build and where.)

Admittedly, Tolerant has become something of an Elohim flavor now, and it would require something to replace it among the Elohim. I'm still brainstorming in that regard. I want something to encourage the Elohim to be peaceful and isolationist, not the Tolerant trait which encourages warfare.
 
I still can't think of any good replacement for Rivanna's traits to distinguish her from Valledia. I would like to give her Summoning instead of Arcane, but Summoning is too strong with the Svartalfar illusions.

How about *just* Summoning.
 
One issue which will arise with multiple Infernal Civilizaitons is how to handle Manes spawning. I am relatively certain that how it works now will result in either a ton of Manes (everyone can get one) or an unbalanced Infernal life (only one of them ever gets any, same one each time).
 
Top Bottom