Final Fixes Reborn

Mimic script could still use a spruce-up to deal with the thousand-and-one temporary/placeholder/mechanical promotions RIFE added. Especially leashes. I will paste you my full update if you want, would save me resetting it every update.

Brass Drakes still can't build their Chained Drake building.

Werewolf animals can build their associated building, but cannot cast their blood spell or use Hunter's Prize. Entities with Subdue Animal and Lycanthropy can double-capture, gaining a werewolf and subdued animal together. Possibly Command allows for triple-captures, I don't know.

Pegasi are still the worst and still seem to have 100% withdrawal. Blitz-hunters can kill them, or if you happen to have a bunch of units in the general area.

Many upgraded animals have lowercase text keys. Pretty minor but pretty annoying.

The mechanic that causes dwarven mines to be forts and pop fort commanders has a ton of problems. For one thing, you almost never want this to actually happen as actual dwarves because the income drain is just totally unsustainable until relatively late. If you're getting access through RoK, the One True Religion of Erebus, you MIGHT be okay with one or two commanders if you have mage-commanders or you're the Austrin or something, but probably you'll still kill most or all of them. Except that doesn't solve anyone's problem, since killing the commanders creates a problem with dwarven mines still counting as forts, which means enemies (and open-border allies) will capture them.

Ideally dwarven mines would be not-forts and instead spawn a held dwarven defensive unit - or even just work like Ancient Forests do but with a 100% spawn chance that gives you a temporary dwarven militia.
 
Mimic script could still use a spruce-up to deal with the thousand-and-one temporary/placeholder/mechanical promotions RIFE added. Especially leashes. I will paste you my full update if you want, would save me resetting it every update.
i'll take it
Brass Drakes still can't build their Chained Drake building.
noted
Werewolf animals can build their associated building, but cannot cast their blood spell or use Hunter's Prize. Entities with Subdue Animal and Lycanthropy can double-capture, gaining a werewolf and subdued animal together. Possibly Command allows for triple-captures, I don't know.
known, working on trying to prevent it without breaking too many things ^^
Pegasi are still the worst and still seem to have 100% withdrawal. Blitz-hunters can kill them, or if you happen to have a bunch of units in the general area.
will check that
Many upgraded animals have lowercase text keys. Pretty minor but pretty annoying.
noted
The mechanic that causes dwarven mines to be forts and pop fort commanders has a ton of problems. For one thing, you almost never want this to actually happen as actual dwarves because the income drain is just totally unsustainable until relatively late. If you're getting access through RoK, the One True Religion of Erebus, you MIGHT be okay with one or two commanders if you have mage-commanders or you're the Austrin or something, but probably you'll still kill most or all of them. Except that doesn't solve anyone's problem, since killing the commanders creates a problem with dwarven mines still counting as forts, which means enemies (and open-border allies) will capture them.

Ideally dwarven mines would be not-forts and instead spawn a held dwarven defensive unit - or even just work like Ancient Forests do but with a 100% spawn chance that gives you a temporary dwarven militia.

i remember doing some testing on that and encountering several issues with the defensive unit spawning, i don't remember what it was exactly, i'll check
 
Curious to know what this means when I try to update the SVN of Ashes of Erebus
(See attachment) it says something about not being able to establish to "Create a pristine install stream". Does that mean nothing is to be updated?
 

Attachments

  • SVN.PNG
    SVN.PNG
    10.2 KB · Views: 129
Code:
def postCombatMimic(pCaster, pOpponent):
	gc 				= CyGlobalContext()
	iBronze 		= getInfoType('PROMOTION_BRONZE_WEAPONS')
	iDivine 		= getInfoType('PROMOTION_DIVINE')
	iGreatCommander = getInfoType('PROMOTION_GREAT_COMMANDER')
	iIron 			= getInfoType('PROMOTION_IRON_WEAPONS')
	iMithril	 	= getInfoType('PROMOTION_MITHRIL_WEAPONS')
	iUndead 		= getInfoType('PROMOTION_UNDEAD')
	iLeashAch = getInfoType('PROMOTION_ACHERON_LEASHED')	
	iLeashCommand	= getInfoType('PROMOTION_INFLUENCE')
	iLeashMana = getInfoType('PROMOTION_MANA_GUARDIAN')
	iLeashMin1 = getInfoType('PROMOTION_MINOTAUR_LEASH1')
	iLeashMin2 = getInfoType('PROMOTION_MINOTAUR_LEASH2')
	iLeashMin3 = getInfoType('PROMOTION_MINOTAUR_LEASH3')
	iLeashMin4	 = getInfoType('PROMOTION_MINOTAUR_LEASH4')
	iLeashPristin = getInfoType('PROMOTION_PRISTIN_LEASH')
	iLeash0	 = getInfoType('PROMOTION_LEASH_0')	
	iLeash1	 = getInfoType('PROMOTION_LEASH_1')	
	iLeashLich = getInfoType('PROMOTION_LICH_DURATION')
	iHaste 		= getInfoType('PROMOTION_HASTED')
	iFatigue 		= getInfoType('PROMOTION_FATIGUED')
	iObscured		= getInfoType('PROMOTION_OBSCURED_LOS')
	iWaaagh 		= getInfoType('PROMOTION_WAAAGH')
	iSlow 		= getInfoType('PROMOTION_SLOW')
	iSpooked 		= getInfoType('PROMOTION_SPOOKED')
	iLost 		= getInfoType('PROMOTION_LOST')
	iHauntStalk 		= getInfoType('PROMOTION_HAUNTSTALK')
	iFortCaptain 		= getInfoType('PROMOTION_FORTCAPTAIN')
	iBlur 		= getInfoType('PROMOTION_BLUR')
	iDance 		= getInfoType('PROMOTION_DANCE_OF_BLADES')
	iLoyalty 		= getInfoType('PROMOTION_LOYALTY')
	iDesertStealth 		= getInfoType('PROMOTION_DESERT_STEALTH')
	iHeld		= getInfoType('PROMOTION_HELD')
	iWalls 		= getInfoType('PROMOTION_WALL_DEFENDER')
	iFreelancer 		= getInfoType('PROMOTION_FREELANCER')
	iCreeper 		= getInfoType('PROMOTION_FOREST_CREEPER_TIMER')
	iNewborn 		= getInfoType('PROMOTION_NEWBORN')
	iFrostling		= getInfoType('PROMOTION_SUSTAIN_FROSTLING')
	listProms = []
	iCount = 0
	for iProm in range(gc.getNumPromotionInfos()):
		if pCaster.isHasPromotion(iProm):
			iCount += 1
		else:
			if (pOpponent.isHasPromotion(iProm)):
				if gc.getPromotionInfo(iProm).isEquipment() == False:
					if (iProm != iUndead and iProm != iDivine and iProm != iBronze and iProm != iIron and iProm != iMithril and iProm != iGreatCommander and iProm != iLeashAch and iProm != iLeashCommand and iProm != iLeashMana and iProm != iLeashMin1 and iProm != iLeashMin2 and iProm != iLeashMin3 and iProm != iLeashMin4 and iProm != iLeashPristin and iProm != iLeash0 and iProm != iLeash1 and iProm != iLeashLich and iProm != iHaste and iProm != iFatigue and iProm != iObscured and iProm != iWaaagh and iProm != iSlow and iProm != iSpooked and iProm != iLost and iProm != iHauntStalk and iProm != iFortCaptain and iProm != iBlur and iProm != iDance and iProm != iLoyalty and iProm != iDesertStealth and iProm != iHeld and iProm != iWalls and iProm != iFreelancer and iProm != iCreeper and iProm != iNewborn  and iProm != iFrostling):
						if gc.getPromotionInfo(iProm).isRace() == False:
							if gc.getPromotionInfo(iProm).isEffectProm() == False:
								listProms.append(iProm)
	if len(listProms) > 0:
		iCount += 1
		iRnd = CyGame().getSorenRandNum(len(listProms), "Mimic")
		pCaster.setHasPromotion(listProms[iRnd], True)
		CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_PROMOTION_STOLEN", ()),'',1,gc.getPromotionInfo(listProms[iRnd]).getButton(),ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
	if iCount >= 20:
		pPlayer = gc.getPlayer(pCaster.getOwner())
		if pPlayer.isHuman():
			t = "TROPHY_FEAT_MIMIC_20"
			if not CyGame().isHasTrophy(t):
				CyGame().changeTrophyValue(t, 1)

Fixed it up a bit. This is, however, nowhere near exhaustive of things that shouldn't be transferring for one reason or another.

There HAS to be a better way than manual addition; if there's a way you can auto-exclude promotions with an iExpireChance or iPromotionDuration of greater than 0, any PrereqTerrain, Mechanos in the name (seriously), or Effect in the name, that'd be like 90% of the work done.

I've also attached a save exhibiting a problem with Pristin Pass. Combining the Triforce seems to transform that Highlander into a Falconer regardless if the Pass is claimed or unclaimed or already has a Falconer on the tile. The Triforce is much better in pieces anyway, but it's obviously unintended behavior.

Also, the AI barbarians sometimes claim the Pristin Pass. I am pretty sure that when their commander becomes a city, it will automatically destroy the pass, but I am not positive, I've never voluntarily allowed it to occur.

If Mana Guardians are on, there is a small chance that a civ's starting settler will be somehow overwritten by a Lich.

I suspect it may be related to an epic lair problem, but sometimes I've found a barbarian Wraith completely wrecking an AI civ.
 

Attachments

  • Pristin Pass Glitch.CivBeyondSwordSave
    587.5 KB · Views: 43
I've noticed in the civilopedia that the unit model block is far too big forcing the history and one other text block to be unreadable. Is that on purpose?
 
Turn 263, no compression error. Will continue testing and see if I can pinpoint when it pops.

i got mine on turn 468. on trying to load the save i get 'failed to uncompress game data'. after about 750 turns of play that's a real pain :(

btw, once you get one 'failed to compress..' msg, you get it on every autosave attempt.
 
can you get me the last save that worked, so that i can see if i can replicate the issue or not.


Code:
def postCombatMimic(pCaster, pOpponent):
	gc 				= CyGlobalContext()
	iBronze 		= getInfoType('PROMOTION_BRONZE_WEAPONS')
	iDivine 		= getInfoType('PROMOTION_DIVINE')
	iGreatCommander = getInfoType('PROMOTION_GREAT_COMMANDER')
	iIron 			= getInfoType('PROMOTION_IRON_WEAPONS')
	iMithril	 	= getInfoType('PROMOTION_MITHRIL_WEAPONS')
	iUndead 		= getInfoType('PROMOTION_UNDEAD')
	iLeashAch = getInfoType('PROMOTION_ACHERON_LEASHED')	
	iLeashCommand	= getInfoType('PROMOTION_INFLUENCE')
	iLeashMana = getInfoType('PROMOTION_MANA_GUARDIAN')
	iLeashMin1 = getInfoType('PROMOTION_MINOTAUR_LEASH1')
	iLeashMin2 = getInfoType('PROMOTION_MINOTAUR_LEASH2')
	iLeashMin3 = getInfoType('PROMOTION_MINOTAUR_LEASH3')
	iLeashMin4	 = getInfoType('PROMOTION_MINOTAUR_LEASH4')
	iLeashPristin = getInfoType('PROMOTION_PRISTIN_LEASH')
	iLeash0	 = getInfoType('PROMOTION_LEASH_0')	
	iLeash1	 = getInfoType('PROMOTION_LEASH_1')	
	iLeashLich = getInfoType('PROMOTION_LICH_DURATION')
	iHaste 		= getInfoType('PROMOTION_HASTED')
	iFatigue 		= getInfoType('PROMOTION_FATIGUED')
	iObscured		= getInfoType('PROMOTION_OBSCURED_LOS')
	iWaaagh 		= getInfoType('PROMOTION_WAAAGH')
	iSlow 		= getInfoType('PROMOTION_SLOW')
	iSpooked 		= getInfoType('PROMOTION_SPOOKED')
	iLost 		= getInfoType('PROMOTION_LOST')
	iHauntStalk 		= getInfoType('PROMOTION_HAUNTSTALK')
	iFortCaptain 		= getInfoType('PROMOTION_FORTCAPTAIN')
	iBlur 		= getInfoType('PROMOTION_BLUR')
	iDance 		= getInfoType('PROMOTION_DANCE_OF_BLADES')
	iLoyalty 		= getInfoType('PROMOTION_LOYALTY')
	iDesertStealth 		= getInfoType('PROMOTION_DESERT_STEALTH')
	iHeld		= getInfoType('PROMOTION_HELD')
	iWalls 		= getInfoType('PROMOTION_WALL_DEFENDER')
	iFreelancer 		= getInfoType('PROMOTION_FREELANCER')
	iCreeper 		= getInfoType('PROMOTION_FOREST_CREEPER_TIMER')
	iNewborn 		= getInfoType('PROMOTION_NEWBORN')
	iFrostling		= getInfoType('PROMOTION_SUSTAIN_FROSTLING')
	listProms = []
	iCount = 0
	for iProm in range(gc.getNumPromotionInfos()):
		if pCaster.isHasPromotion(iProm):
			iCount += 1
		else:
			if (pOpponent.isHasPromotion(iProm)):
				if gc.getPromotionInfo(iProm).isEquipment() == False:
					if (iProm != iUndead and iProm != iDivine and iProm != iBronze and iProm != iIron and iProm != iMithril and iProm != iGreatCommander and iProm != iLeashAch and iProm != iLeashCommand and iProm != iLeashMana and iProm != iLeashMin1 and iProm != iLeashMin2 and iProm != iLeashMin3 and iProm != iLeashMin4 and iProm != iLeashPristin and iProm != iLeash0 and iProm != iLeash1 and iProm != iLeashLich and iProm != iHaste and iProm != iFatigue and iProm != iObscured and iProm != iWaaagh and iProm != iSlow and iProm != iSpooked and iProm != iLost and iProm != iHauntStalk and iProm != iFortCaptain and iProm != iBlur and iProm != iDance and iProm != iLoyalty and iProm != iDesertStealth and iProm != iHeld and iProm != iWalls and iProm != iFreelancer and iProm != iCreeper and iProm != iNewborn  and iProm != iFrostling):
						if gc.getPromotionInfo(iProm).isRace() == False:
							if gc.getPromotionInfo(iProm).isEffectProm() == False:
								listProms.append(iProm)
	if len(listProms) > 0:
		iCount += 1
		iRnd = CyGame().getSorenRandNum(len(listProms), "Mimic")
		pCaster.setHasPromotion(listProms[iRnd], True)
		CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_PROMOTION_STOLEN", ()),'',1,gc.getPromotionInfo(listProms[iRnd]).getButton(),ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
	if iCount >= 20:
		pPlayer = gc.getPlayer(pCaster.getOwner())
		if pPlayer.isHuman():
			t = "TROPHY_FEAT_MIMIC_20"
			if not CyGame().isHasTrophy(t):
				CyGame().changeTrophyValue(t, 1)

Fixed it up a bit. This is, however, nowhere near exhaustive of things that shouldn't be transferring for one reason or another.

There HAS to be a better way than manual addition; if there's a way you can auto-exclude promotions with an iExpireChance or iPromotionDuration of greater than 0, any PrereqTerrain, Mechanos in the name (seriously), or Effect in the name, that'd be like 90% of the work done.

I've also attached a save exhibiting a problem with Pristin Pass. Combining the Triforce seems to transform that Highlander into a Falconer regardless if the Pass is claimed or unclaimed or already has a Falconer on the tile. The Triforce is much better in pieces anyway, but it's obviously unintended behavior.

Also, the AI barbarians sometimes claim the Pristin Pass. I am pretty sure that when their commander becomes a city, it will automatically destroy the pass, but I am not positive, I've never voluntarily allowed it to occur.

If Mana Guardians are on, there is a small chance that a civ's starting settler will be somehow overwritten by a Lich.

I suspect it may be related to an epic lair problem, but sometimes I've found a barbarian Wraith completely wrecking an AI civ.
Apart from the "Mechanos in the name" one, that should be doable, i'll work on it.
will check the pristin pass thing too.

I've noticed in the civilopedia that the unit model block is far too big forcing the history and one other text block to be unreadable. Is that on purpose?

by default, the pedia is set up for high resolution screens, that may be your issue. there are files in the download (the archive file in the Assets/python folder) to get the low resolution pedia back.
 
Here is one of my savegames where the "fail to compress" bogeyman rears his ugly head. It is turn 478. End turn, and the next turn the game is unsaveable. Hoping having this helps.
 

Attachments

  • ral58 Turn_0478sxssx.CivBeyondSwordSave
    849.9 KB · Views: 51
I may be forced back to fall further, sad day.
 

Attachments

  • ral58 Turn_0464b4.CivBeyondSwordSave
    757.2 KB · Views: 60
It immediately crashes when I try to load the save game. Anyone else have this problem?

Cheers:)
 

Attachments

  • Ross Turn_0484.CivBeyondSwordSave
    918.8 KB · Views: 64
It's a new game
Here is the error message I get occasionally when it crashes if that helps:
 

Attachments

  • Error message.png
    Error message.png
    9.4 KB · Views: 73
Top Bottom