[MOD] MagisterModmod

sunbeam--

Check out this thread: http://forums.civfanatics.com/showthread.php?t=489892

All your questions are answered there. Magister, thanks for clearing up the garrisoning thing. Sunbeam, it sounds like if you turn off advanced tactics, you should have no problems at all getting to HT by turn 50 or even faster on Magister modmod if you have a decent start (some land hammers, room for 2 coves and 1 seafood). The main thing in Magister modmod is that Lanun start with fishing and can go straight to chants-->mysticism-->OO and don't have to waste 20 turns teching fishing at the beginning. That alone is HUGE.
 
Noticed a bug with Cave of the Ancestors not giving the Caswallawn promotion.

moddified the code slightly to make it work (found in CvSpellInterface.py) (green is added code)

Code:
def spellCaveTrials(pCaster):
	iX = pCaster.getX()
	iY = pCaster.getY()
	iPlayer = pCaster.getOwner()
	iName = pCaster.getName()
	if CyGame().getSorenRandNum(10, "Cave Trials") > 7:
		pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
		pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
		while pCaster.isImmortal():
			pCaster.changeImmortal(-1)
		pCaster.kill(True, iPlayer)

		CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_DEATH", (iName,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)
	else:
		pCaster.changeFreePromotionPick(1)

		CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_SUCCESS", (iName,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)

		if pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING3')):
			if CyGame().getSorenRandNum(10, "Cave Trials Complete") < 2:
				iCaswallawn = gc.getInfoTypeForString('PROMOTION_CASWALLAWN')
				pCaswallawn = -1
				for pUnit in PyPlayer(iPlayer).getUnitList():
					if pUnit.isHasPromotion(iCaswallawn):
						pCaswallawn = pUnit
						break
[COLOR="Green"]				pCaster.setHasPromotion(iCaswallawn, true)[/COLOR]
				if pCaswallawn != -1:
					if getCombatOdds(pCaster, pCaswallawn) > 500:
						pCaster.setHasPromotion(iCaswallawn, False)
						pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
						pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
						while pCaster.isImmortal():
							pCaster.changeImmortal(-1)
						pCaster.kill(True, pCaswallawn.getOwner())

						CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_NEW_CASWALLAWN", (iName,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)

					else:
						pCaswallawn.setHasPromotion(iCaswallawn, False)
						pCaswallawn.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
						pCaswallawn.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
						while pCaswallawn.isImmortal():
							pCaswallawn.changeImmortal(-1)
						pCaswallawn.kill(True, iPlayer)

						pCaster.setHasPromotion(iCaswallawn, True)
						pCaster.setName("The Caswallawn")

						CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN", (iName,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)
[COLOR="Green"]				else: 
					CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_NEW_CASWALLAWN", (iName,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)[/COLOR]
 
@Stratege:
Thanks for pointing the Caswallawn issue. I did not end up making the changes you suggest though, because I decided it could use a more complete rewrite.

I had always really intended for there to be only one Caswallawn in the whole world, but that code would allow each player to have one. I had to add a new define to PyHelpers.py, but I managed to get it to check all the units of all players instead.

Since it would be annoying to loose your Caswallawn inexplicably, I made it so that separate notifications go out to both units' owners when they are different. The messages now reveal the names of the units and their owners. The good news of gaining a Caswallawn is in Green, the bad news of loosing a unit is in Red, and the mixed news of having of of your units kill another of your units in in Grey.

Renaming the unit "The Caswallawn" (or trying to append that title to the existing name) made the messages read rather awkwardly. (I also realized there there is a tiny chance that the renaming could mess up the code that assures that Adventurers don't leave behind a sluagh, which could then be resurrected, when they are upgraded instead of dying.) As such, I no longer change the winner's name.


It turns out that the way it handled combats odds was exactly backwards; the unit that would have lost in ordinary combat between the two was declared the winner of the duel. (Since there is some randomness involved, I used the improved World Builder to test this in the extreme case where one unit had a base strength of 0 and the other of 999.) I fixed this.

I decided that it was wrong for the winner of the duel to emerge unscathed, so I made the spell set damage based on the odds of winning. I also made it grant a little XP.


I significantly reduced the odds of a Channeling III caster becoming The Caswallawn randomly, but made it so that the promotion (or chance to fight for it) was automatic if the caster was unable to get any benefit from a free promotion pick (i.e., if it already has all of the promotions available given its current mana supply).

I decided that it should not be possible for a unit to cast the spell if it cannot gain any benefit from it. Unless the caster has Channeling III, and is thus eligible to become Caswallawn, then the ability cannot be used once the unit has all of the promotions available to it


Spoiler :

PyHelpers.py:
Code:
	def getAllUnitList(self):
		' UnitList - All alive units of all alive players'
		lUnits = []
		for player in self.getCivPlayerList():
			for pUnit in player.getUnitList():
				lUnits.append(pUnit)
		return lUnits
CvSpellInterface.py:
Code:
def reqCaveTrials(pCaster):
	if pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CASWALLAWN')):
		return False
	if not pCaster.canAcquirePromotionAny():
		if not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING3')):
			return False
	return True

def spellCaveTrials(pCaster):
	iX = pCaster.getX()
	iY = pCaster.getY()
	iPlayer = pCaster.getOwner()

	sNameCaster = pCaster.getName()

	if CyGame().getSorenRandNum(10, "Cave Trials") > 7:
		pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
		pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
		while pCaster.isImmortal():
			pCaster.changeImmortal(-1)
		pCaster.kill(True, iPlayer)

		CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_DEATH", (sNameCaster,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)
	else:
		pCaster.changeFreePromotionPick(1)

		CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_SUCCESS", (sNameCaster,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)

		if pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING3')):
			if not pCaster.canAcquirePromotionAny() or CyGame().getSorenRandNum(100, "Cave Trials Complete") < 2:
				iCaswallawn = gc.getInfoTypeForString('PROMOTION_CASWALLAWN')
				for pUnit in PyHelpers.PyGame().getAllUnitList():
					if pUnit.isHasPromotion(iCaswallawn):
						iPlayerUnit = pUnit.getOwner()
						sNameCaswallawn = pUnit.getName()
						iOdds = getCombatOdds(pCaster, pUnit)
						if iOdds < 500:
							pCaster.setHasPromotion(iCaswallawn, False)
							pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
							pCaster.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
							while pCaster.isImmortal():
								pCaster.changeImmortal(-1)
							pCaster.kill(True, pUnit.getOwner())

							pUnit.changeExperience(1, -1, False, False, False)
							pUnit.setDamage(CyGame().getSorenRandNum(iOdds/5, "Caswallawn Dual"), iPlayer)

							if iPlayer == iPlayerUnit:
								CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_WON", ("Your", sNameCaster,"your",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(6),iX,iY,True,True)
							else:
								CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_WON", ("Your", sNameCaster,gc.getPlayer(iPlayerUnit).getName() + "'s",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)
								CyInterface().addMessage(iPlayerUnit,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_WON", (gc.getPlayer(iPlayer).getName() + "'s", sNameCaster,"your",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)
						else:
							pUnit.setHasPromotion(iCaswallawn, False)
							pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMORTAL'), False)
							pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_LIFE3'), False)
							while pUnit.isImmortal():
								pUnit.changeImmortal(-1)
							pUnit.kill(True, iPlayer)
							pCaster.setHasPromotion(iCaswallawn, True)

							pCaster.changeExperience(1, -1, False, False, False)
							pCaster.setDamage(CyGame().getSorenRandNum((iOdds - 500)/5, "Caswallawn Dual"), iPlayerUnit)

							if iPlayer == iPlayerUnit:
								CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_DEFEATED", ("Your",sNameCaster,"your",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(6),iX,iY,True,True)
							else:
								CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_DEFEATED", ("Your", sNameCaster,gc.getPlayer(iPlayerUnit).getName() + "'s",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)
								CyInterface().addMessage(iPlayerUnit,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_DEFEATED", (gc.getPlayer(iPlayer).getName() + "'s", sNameCaster,"your",sNameCaswallawn,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(7),iX,iY,True,True)
						break
				else:
					pCaster.setHasPromotion(iCaswallawn, True)
					CyInterface().addMessage(iPlayer,True,25,CyTranslator().getText("TXT_KEY_MESSAGE_CAVE_TRIALS_NEW_CASWALLAWN", (sNameCaster,)),'',1,'Art/Interface/Buttons/Buildings/Caveofancestors.dds',ColorTypes(8),iX,iY,True,True)
Magister_CIV4GameText_FFH2.xml:
Code:
	<TEXT>
		<Tag>TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_DEFEATED</Tag>
		<English>%s1 %s2 has slain %s3 %s4 in arcane combat, usurping the rank of Caswallawn</English>
		<French>%s1 %s2 has slain %s3 %s4 in arcane combat, usurping the rank of Caswallawn</French>
		<German>%s1 %s2 has slain %s3 %s4 in arcane combat, usurping the rank of Caswallawn</German>
		<Italian>%s1 %s2 has slain %s3 %s4 in arcane combat, usurping the rank of Caswallawn</Italian>
		<Spanish>%s1 %s2 has slain %s3 %s4 in arcane combat, usurping the rank of Caswallawn</Spanish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_MESSAGE_CAVE_TRIALS_OLD_CASWALLAWN_WON</Tag>
		<English>%s1 %s2 foolishly challenged %s3 %s4 for the rank of Caswallawn, and was slain for his hubris</English>
		<French>%s1 %s2 foolishly challenged %s3 %s4 for the rank of Caswallawn, and was slain for his hubris</French>
		<German>%s1 %s2 foolishly challenged %s3 %s4 for the rank of Caswallawn, and was slain for his hubris</German>
		<Italian>%s1 %s2 foolishly challenged %s3 %s4 for the rank of Caswallawn, and was slain for his hubris</Italian>
		<Spanish>%s1 %s2 foolishly challenged %s3 %s4 for the rank of Caswallawn, and was slain for his hubris</Spanish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_MESSAGE_CAVE_TRIALS_NEW_CASWALLAWN</Tag>
		<English>Your %s1 has passed every trial, and earned the rank of Caswallawn</English>
		<French>Your %s1 has passed every trial, and earned the rank of Caswallawn</French>
		<German>Your %s1 has passed every trial, and earned the rank of Caswallawn</German>
		<Italian>Your %s1 has passed every trial, and earned the rank of Caswallawn</Italian>
		<Spanish>Your %s1 has passed every trial, and earned the rank of Caswallawn</Spanish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_MESSAGE_CAVE_TRIALS_SUCCESS</Tag>
		<English>Your %s1 has passed this test, and emerged from the trial more skilled than before.</English>
		<French>Your %s1 has passed this test, and emerged from the trial more skilled than before.</French>
		<German>Your %s1 has passed this test, and emerged from the trial more skilled than before.</German>
		<Italian>Your %s1 has passed this test, and emerged from the trial more skilled than before.</Italian>
		<Spanish>Your %s1 has passed this test, and emerged from the trial more skilled than before.</Spanish>
	</TEXT>
	<TEXT>
		<Tag>TXT_KEY_MESSAGE_CAVE_TRIALS_DEATH</Tag>
		<English>When the illusions pass, you find only a corpse. Your %s1 was unprepared, overconfident, and failed the test.</English>
		<French>When the illusions pass, you find only a corpse. Your %s1 was unprepared, overconfident, and failed the test.</French>
		<German>When the illusions pass, you find only a corpse. Your %s1 was unprepared, overconfident, and failed the test.</German>
		<Italian>When the illusions pass, you find only a corpse. Your %s1 was unprepared, overconfident, and failed the test.</Italian>
		<Spanish>When the illusions pass, you find only a corpse. Your %s1 was unprepared, overconfident, and failed the test.</Spanish>
	</TEXT>
 
Great work, Magister. Your mod is my favourite. Thank you for your work. Keep up! :goodjob:

I appreciate your preference to keep the flavour, basing on lore manner of moding, more than balancing it out. The overall balance is mostly about sport and fair competition (multiplayer), but in real life there is no such conditions, there is no equity in the beginning. And player can have more easy gameplay, playing for strong civs (ljosalfar, sheaim, svartalfar, luchiurp, khazad, hippus, kuriotates, lanun ...) so as harder games by choosing weaker civs (clan of embers, doviello, bannor, calabim, malakim ...).

In my last game as Sheaim (Tebryn Arbandi) i concluded that if they didn't lose on early stages, they are getting ultimately powerful. Of course they must building many adepts and the sooner the better and no harm in having some mana nodes. As soon as i got Eaters of Dreams (with 3 death, 3 dimension and 2 spell extension promotions) and built Tower of Necromancy, even the most large and powerful empires were laid in ruins for several turns. Enough to capture one city, then eater consuming all the population until the last (for revolutions aspect it is the best solution) and summon the whole bunch of uber-strong wraiths, which almost always can capture another city, then teleporting here next eater... the same story, and further on such a scheme. And they all summoned for two turns! You can annihilate enemies by hordes of wraiths from their own population. Without army, without anybody at all, except for garrisons for new cities. In my game it happened so, that i got an adventurer in early times, then turned him in adept and when time comes to Eater of Dreams and on top of all i got for him "twincast" promotion... GAME OVER! And later when you get third spell extension promotion - well, you are godlike! In using wraiths there are only two possible problems - in Infernals and Mercurians, but with dimension promotions your Eaters can get hundreds of experience and nothing prevents you from getting level 3 fire for fire elementals.
I winned game on Emperor by dominating victory, without building wonders, without founding religions; all you need is to advance in arcane techonology line, basic defense in early game (preferably archers), founding two or three cities (mana and reagents must have), building mage guilds (very fast for Tebryn), Tower of Necromancy and of course a couple of dozen adepts... That's all.

I like the way revolutions are working. It was fun to observe how Amelanchier conquered Elohim (Ethna the White) (nearly 8 cities), created a really considerable empire (tough guy, to say the least), and was forced to struggle with rebellions sparking almost every turn in his new territories. He eliminated Ethna in total more than 10 times, as for newly emerged Thessa (he killed her nearly the same number of times). That tensions continued more than 100 turns and in the end, where earlier was only Amelnachier and Ethna, 3 cities got Ethna back, 3 cities got Thessa and 1 city got ... Captain Ostanes, and only one city left in Amelanchier's hands. Ethna formed defensive pact with Thessa, Ostanes became vassal of Amelnachier. That was a spectacle. :)
 
Some feedback, if you do not mind.
I am a new in FFH gameplay, and maybe too scrupulous... But there is some flaws, that i noticed:

1) Can cast Fair Winds (air 1) on Trojan Horse. That, i think, is not right, because... it has no sails.

2) Frigate obtained via diplmacy cannot move.

3) Text of solving for new resolution in Undercouncil (as dark magistrate) is taking from Overcouncil ("as a head-councilor you can make a proposition of new resolution for Overcouncil" - something like this). Not sure about inverse case.

4) In World Builder: when trying to manually assign the production of Acheron or Tumtum in barbarian city - boom in OS (CTD).

5) Diplomacy texts can be more individual and diverse.

6) Civilopedia texts: there is mistake in descrption of dimension mana (all sheaim arcane units gain dimension 1 (not air 1); and in the description of mind mana - typo in the same place. And it would be better if there was the description for "evangelist" promotion (for what purpose it can be used).

7) Can you include lfgr's Events Enhanced 1.6 in your modmod, as in his modmod (thanks to ostar)? It will be so better...

8) What do you think about lfgr's "some thoughts on revolutions", in particular: "...The Revolution mod is actually "wasting" leaders; almost every revolt gets a leader, even if it consist of two warriors and is put down next turn. It's good to have minor leaders for this, but I think less powerful revolutions should only gererate (potential non-orc) barbarians...".
I too agree, that it is a bit annoying as so many leaders appearing from revolts outside cities with several units for only to be eliminated on next turn.

9) One cosmetic remark: when i started a new game with two civilizations of Ljosalfar (with two different leaders) and two civilizations of Sheaim (the same), there was that one of Ljosalfars and Clan of Embers gained the same color (orange) in result. Even their borders are merged when they meet. Is that normal? (From start there were 16 civs in game).

10) AI's diplomatic course of actions are awful. They can get considerably more from diplomacy (resources, technologies, wars), than they have now... And AI's is too willingly declare new wars, when they have one or even more at their hands already. And more, AI's somehow won't make peace even if they can, when they wage wars on several fronts. (In my last game Malakim waged wars with almost the whole world and through diplmacy window i saw, that they could make peace with anyone, but... they didn't do that, and lose cities one by one... Stupid Varn Gosam).
As i think, AI's should strive to maintain one war at a time, max - two, with weaker pray ("strategy of lion") or even stronger pray when it wage wars with other civs ("strategy of jackal"), in all other cases they must seeking ways for making peace. And that is a politics for evil and neutrals civs (predators); for Good civs... well, they must always be seeking peace with everybody (except maybe Bannor and against Ashen Veil-adopted civs). IMHO

11) In your modmod temples of different religions have happiness\unhappiness effect depending on overcouncil\undercouncil. In one of my games Arendel (Ljosalfar) became neutral, adopted Undercouncil, but when Empyrean spread in her cities she without second thought built temples of empyrean... Strange choice, i say.

12) In my opinion, angels of Basium and Infernal demons must be much more aggresive, after all they arrive on Erebus to conquer and to eliminate their eternal enemies, and they care not about diplomacy games or even well-being of the world of mortals. And what is the most important, that it is their nature, so they can't willingly change their alignment or ideology... My suggestion: Infernals automatically declare wars on every non Ashen Veil civ and Basium in the same way - to every evil civ. And Basium religion strict to Order and Infernals - to Ashen Veil, and there is no change for them. IMHO
Note: There is need to consider a teamplay, when one team composed of evil and non-evil civs. When non-evil build Mercurian Gates and summon Basium there must be choice for exclude from team or Mercurians themselves, or every other evil members. Otherwise it turns out rubbish.

I know, that some moments i mentioned above must be addressed not to you, but to Tholal... Maybe you can tell him.
Thanks.
 
Some feedback, if you do not mind.
I am a new in FFH gameplay, and maybe too scrupulous... But there is some flaws, that i noticed:

1) Can cast Fair Winds (air 1) on Trojan Horse. That, i think, is not right, because... it has no sails.
The xml-only spell applies it to all units of the appropriate UNITCOMBAT types, in this case only UNITCOMBAT_NAVAL.

The Trojan Horse (and Water Elementals) are both UNITCOMBAT_NAVAL, because that is the only way that they can get promotions like Expanded Hull and Skeleton Crew in order to boost their cargo capacity.

In order to deny them Fair Winds, I'd have to either change their unitcombat type or else make the spell work through python, which would be much less efficient.
2) Frigate obtained via diplmacy cannot move.
This is as Tholal intended it. (I have nothing to do with this.) Units traded through diplomacy are set as immobile for the first several turns. Eventually their immobility will run out and they will be able to move again.
3) Text of solving for new resolution in Undercouncil (as dark magistrate) is taking from Overcouncil ("as a head-councilor you can make a proposition of new resolution for Overcouncil" - something like this). Not sure about inverse case.
I think this was a Tholal issue. I just now added a different TXT_KEY to have the Undercouncil position called Dark Magistrate instead.

4) In World Builder: when trying to manually assign the production of Acheron or Tumtum in barbarian city - boom in OS (CTD).
I just tested this and had no problem whatsoever.

(I did have to assign the other barbarian city that was already worming on Acheron to switch to something else first before it would let me assign the red dragon to another city, and had to give the barbarians Tumtum's tech prereq.)
5) Diplomacy texts can be more individual and diverse.
Yeah. I'm not an expert on these, but I think I can see how it works well enough to give more options to specific leaders or players. It is not a high priority though.

Too bad there is not a way to make the diplomacy texts depend on the other player too, so they could convey some info about the personal relationships between two leaders.

6) Civilopedia texts: there is mistake in descrption of dimension mana (all sheaim arcane units gain dimension 1 (not air 1); and in the description of mind mana - typo in the same place. And it would be better if there was the description for "evangelist" promotion (for what purpose it can be used).
I just now fixed the mana inscriptions. (I thought I'd caught them all before, but I guess those 2 got away.)

There already was a Help TXT_KEY for the Evangelist promotion defined in MagisterCIV4GameText_FFH2.xml, but I forgot to make the promotion refer to it.

Currently it just says "Allows the unit to spread its religion without sacrificing itself." I should probably change this to be more clear that it allows the Evangelize to City abilities to let it spread its religion to a city without sacrificing itself, and also allows the Evangelize to Units ability to allow it to convert other units to its religion.

7) Can you include lfgr's Events Enhanced 1.6 in your modmod, as in his modmod (thanks to ostar)? It will be so better...
I'm not familiar with it. When I looked it up it seems to be based on MNAI v2.42. Does it work with v2.5 too?

It looks like it has a custom DLL, which would mean that it is not v2.5 compatible.

From the change-log it appears that almost half the new events were borrowed from MagisterModmod anyway.

It seems to include Xienwolf's great person mod, which has some very non-canon lore fluff which I would not wish to include.

I'm hesitant to add something that would add popups which could slow the game down and would require including enough art to make the download significantly larger.


8) What do you think about lfgr's "some thoughts on revolutions", in particular: "...The Revolution mod is actually "wasting" leaders; almost every revolt gets a leader, even if it consist of two warriors and is put down next turn. It's good to have minor leaders for this, but I think less powerful revolutions should only gererate (potential non-orc) barbarians...".
I too agree, that it is a bit annoying as so many leaders appearing from revolts outside cities with several units for only to be eliminated on next turn.
It makes sense. Does he have actual code I could borrow yet though. I have made some changes to revolutions on my own (mostly related to stopping the new civs from adopting religions they would otherwise be unable to adopt), but I'm not sure I understand it well enough to try to implement it like this on my own.
9) One cosmetic remark: when i started a new game with two civilizations of Ljosalfar (with two different leaders) and two civilizations of Sheaim (the same), there was that one of Ljosalfars and Clan of Embers gained the same color (orange) in result. Even their borders are merged when they meet. Is that normal? (From start there were 16 civs in game).
If two players use the same color scheme then their borders will merge like that.

You can have colors that look identical but are considered different color schemes and so will not merge.

I'm afraid that do not know how to control what colors the game engine will assign to a player once its default color scheme is taken. I only know how to change it in scenario world builder save files.

(If I was shown a way to change it in python, then I think I'd want each of the Demon Lords to use the same color scheme in regular games as I gave them in The Lord of the Balors.)
10) AI's diplomatic course of actions are awful. They can get considerably more from diplomacy (resources, technologies, wars), than they have now... And AI's is too willingly declare new wars, when they have one or even more at their hands already. And more, AI's somehow won't make peace even if they can, when they wage wars on several fronts. (In my last game Malakim waged wars with almost the whole world and through diplmacy window i saw, that they could make peace with anyone, but... they didn't do that, and lose cities one by one... Stupid Varn Gosam).
As i think, AI's should strive to maintain one war at a time, max - two, with weaker pray ("strategy of lion") or even stronger pray when it wage wars with other civs ("strategy of jackal"), in all other cases they must seeking ways for making peace. And that is a politics for evil and neutrals civs (predators); for Good civs... well, they must always be seeking peace with everybody (except maybe Bannor and against Ashen Veil-adopted civs). IMHO
The AI is really an issue for Tholal.

11) In your modmod temples of different religions have happiness\unhappiness effect depending on overcouncil\undercouncil. In one of my games Arendel (Ljosalfar) became neutral, adopted Undercouncil, but when Empyrean spread in her cities she without second thought built temples of empyrean... Strange choice, i say.
Yeah, it is a bit odd. Maybe she had enough happiness and valued the research and GPP boost more?
12) In my opinion, angels of Basium and Infernal demons must be much more aggresive, after all they arrive on Erebus to conquer and to eliminate their eternal enemies, and they care not about diplomacy games or even well-being of the world of mortals. And what is the most important, that it is their nature, so they can't willingly change their alignment or ideology... My suggestion: Infernals automatically declare wars on every non Ashen Veil civ and Basium in the same way - to every evil civ. And Basium religion strict to Order and Infernals - to Ashen Veil, and there is no change for them. IMHO
Note: There is need to consider a teamplay, when one team composed of evil and non-evil civs. When non-evil build Mercurian Gates and summon Basium there must be choice for exclude from team or Mercurians themselves, or every other evil members. Otherwise it turns out rubbish.
I don't really like forced wars.

There is actually a fair bit of canonical lore about negotiating with demons. The Infernal very much prefer to use diplomacy in order to corrupt mortals before attacking them outright.


Basium has no real connection to The Order. He is more Chaotic-Good. Capria even warns us in the Radiant Guard scenario that Sabathiel has warned her that Basium cannot be trusted. ("But beware for faithful Sabathiel told of stories of Basium, and he is unbound by mortal virtues.")

Basium sees religion as a tool, and would use any tool (other than demon-worship, of course) in his war against the Infernal. In my modmod I block him from using The Ashen Veil and the Octopus Overlords, but do not actually have a problem with him using The Council of Esus.

It is actually canon that Esus does not care much for demons. He prefers to have his hell inhabited by living beings who think they are still on Erebus. He hates the barrenness of the lower hells and of the Dead Lands enough that he actually plotted against Ceridwen and Hastur in order to help Falamar stop Tebryn Arbandi from destroying the world.

I don't have a big problem with Basium siding with The White Hand either, as it is known that Basium despises Sucellus.


In Base FfH2, Basium is forced into war with Ashen Veil players. I found that rather annoying. In my modmod, he instead gets a diplomatic penalty towards anyone who creates a unit with the Demon or Unholy Taint promotions.

I know, that some moments i mentioned above must be addressed not to you, but to Tholal... Maybe you can tell him.
Thanks.
 
Whoever made the scenarios really seemed to like Falamar as a character.

A shame to me, I'm not real keen on what I've gathered of his backstory (women love him, men want to be him), and the Lanun definitely aren't one of my favorite civs.

Come to think of it, I just looked through most of the scenarios, at least to see who was playable. I seldom play any of those civs in your mod. It would have been nice to see other civs explored more.
 
Privateer ships have circularity bug.
<UnitInfo>
<Class>UNITCLASS_PRIVATEER</Class>
<Type>UNIT_PRIVATEER</Type>
...
<bSuicide>0</bSuicide>
<bHiddenNationality>0</bHiddenNationality>
<bAlwaysHostile>1</bAlwaysHostile>
<UnitClassUpgrades>
</UnitClassUpgrades>
...
(from CIV4UnitInfos.xml)
 
I killed Hyborem in the LotB scenario, and about half a million Gela's spawned (upon the death text, not the death itself).
 
Well, thanks for reply, Magister.
It seems that both Basium and Demon Lords are more humanlike than i thought.

Additional moments:
The Tower of Eyes didn't create automatically Dungeons in teammate's cities. Is that intended?
I suspect, that the wonder of City of the Thousand Slums has no effect for AI's cities, but still it was constructed... I think it is a waste of time for AI. Am i right?
When my unit died atacking enemy priest with Command 3 promotion there was message that he now serving the Infernals after his death and still he survived and was captured by enemy priest and then recaptured back by my priest. That's the story.

May i ask a lore-question out of curiosity? What is it - Heron Throne?
 
Hello.

Who are playing this mod in multiplayer ? Is this mod is intented to be a balancing mod in competitive multiplayer ?
 
it is very unbalanced - fun as hell in single player :crazyeye::goodjob:

I play with all terrain features turned on. So far I've found that terrain features and the unique land features play a big role in who does well.

I play with a map script that is uncommon I think (Erebus). When I start a game the first thing I do is fire up World Builder and see who is in the game, and where they are.

If nothing is around to stop them, the Khazad and Ljolsalfar sprawl into unstoppable, unconquerable (unless you have a ton of patience) empires.

But the biggest thing I've seen so far is Fruit of Yggdrasil, then to a lesser extent the Remnants of Patria, then to a still lesser extent the Pool of Tears.

Too much food to start out with, the first city grows quickly and sends out a ton of settlers to start the sprawl.

That said, the AI has a lot of trouble playing some of the civs. The weak sisters I've seen so far are the Luchiurp, Svartalfar, and Sidar in particular. For some reason the AI has trouble turning these civs into a contender.

Doviello used to be awful, but they started making noise with this past revision to the mod. The Elohim usually don't do too well, but they aren't as bad as the the three I mentioned above. The Elohim are strange though. I've seen them with one city in the rounds between 150 and 200, building Reliquaries and Chauncels when they should have been pumping out settlers.

The Lanun would be better, but I play with Advanced Tactics turned on, and they don't seem to do too well till the late game.

This mod may be based on More Naval AI, but that really doesn't work too much better than the base still.

Civs on an island, or isolated from the rest of the world don't seem to prioritize Sailing and Optics. A human playing understands he has to get those galleys going and put settlers anywhere he can to start sprawling before the world fills up.

The AI will do it, but it is usually too late in the game for it to make a difference. And a seaborne invasion in the late game is almost always doomed against an established opponent.
 
@sunbeam: your AI description suits practicallty to everywhere. In the light of good elves I do not understand why AI cannot handle bad elves (practically the same game mechanic), but this is not discussion for this mod mod.
 
Okay, why do some of these great prophets seem to want to construct Altars of the Luonnatar without my doing anything?

Once or twice I'd say I misclicked, but this has happened numerous times. That thing is pretty useless in the early game.
 
Does the race promotion "werewolf" give units the ability to spawn ravenous werewolves or is it just the units that are werewolves that can create ravenous werewolves upon combat victory? Say if I added the werewolf promotion to a random unit or hero, would they be able to spawn werewolves?

Also, how would I change the unit strength of a certain kind of unit? I think that crossbowmen are too strong and want to reduce their combat strength. How does one edit that in the XML files or whatnot?
 
The Werewolf promotion does not actually do anything. I think it may have handled the spread of lycanthopy in early versions of the FfH2, but has certainly been pointless since the move to BtS. (Frankly, I'm not sure why I haven't removed the promotion yet, or tried to change how it works.)

The creation of new werewolves is handled in the unit defines, by the lines <UnitCreateFromCombat>UNIT_RAVENOUS_WEREWOLF</UnitCreateFromCombat>
<iUnitCreateFromCombatChance>75</iUnitCreateFromCombatChance>


Promotions can have a PyPerTurn effect, but only units can have PythonPostCombatWon> or <PythonPostCombatLost>. (I personally think it would make more sense the other way around.) I can however run python code that checks for the promotion under CvEventManager.py's def onCombatResult(self, argsList):.


I could change it so that lycnthropy is instead spread by the promotion. (Having it spread both ways would not make much sense.) That would also allow the ravenous werewolves created to keep their racial promotions, having their strength based on the former strength, etc. The chance of it spreading could differ based on various factors. I could be based on combat odds or levels. It could be harder to spread to flying units or ranged units like archers than to melee units. Immunity to disease could include immunity to lycanthropy.

Using python could make the game slower though.



You can edit XML files with practically any text editor. It is better to use Notepad than Microsoft Word or Works, as those can reformat things. I personally prefer Notepad++, but tend to use PyScripter when I'm editing Python files at the same time and want to be able to use its debugger.

To change the base strength of a unit type, you edit Assets\XML\Units\CIV4UnitInfos.xml. You would scroll down to under <Type>UNIT_CROSSBOWMAN</Type>, and then change the number in <iCombat>8</iCombat> and <iCombatDefense>12</iCombatDefense>. Once you save the file, you are done.
 
Just a quick question. Haven't play this mod for a while, and with the latest version I have noticed a very large increase in turn times. I am playing with revolutions on, could this be the reason for the large increase in turn times? (As opposed to fast turns in previous versions-from memory that is).

Thanks
 
Back
Top Bottom