black_imperator
Deity
- Joined
- Dec 4, 2005
- Messages
- 2,014
Dispel and fair winds clear mist ( i'll see about adding a code for clearing it)
i'll take itMimic 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.
notedBrass Drakes still can't build their Chained Drake building.
known, working on trying to prevent it without breaking too many things ^^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.
will check thatPegasi 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.
notedMany 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.
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)
Turn 263, no compression error. Will continue testing and see if I can pinpoint when it pops.
Apart from the "Mechanos in the name" one, that should be doable, i'll work on it.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.
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?
I may be forced back to fall further, sad day.