Fall Further 050 Bug Report Thread

I may have isolated one of the causes of CTD. Three times in my recent game, a "powerful enemy" was spawned from an explored lair. Once, it was my explore, and twice, my closest neighbor, Decius of the Malakim. All 3 times, when the "enemy" won a battle, I would get a CTD. Pretty sure that all three were Bhall's units - (1) axeman with orcish, woodsman 1+2, combat 1+2, (2) axeman with orcish, woodsman 1, combat 1+2, command 1, (3) ogre with combat 1+2 (possibly other promotions, not sure). I've noticed similar stretches of CTD shortly after having seen the message that Orthus has been created.

When checking with WB, it seems that the units were gaining enough XP to level. I suspect the CTD is somehow related to the leveling, perhaps due to the preexisting promotions. Since all the units I saw were combat 2, and the AI usually promotes in line, perhaps it's specific to taking combat 3? On the other hand, I've definitely seen a late game combat 5 Orthus (as an aside, giving Orthus the hero promotion is just mean).

Deleting the units in WB, changing tactics so the "enemy" died on my turn, or adding a mind 3 unit to dominate the "enemy" all prevented the CTD.
 
Would explain why turning off the lairs is drastically helping my CTD ratio.

EDIT: As are disabling Hell Terrain and the Demon faction, and disabling the Hell Terrain under Bradeline's well. Something's clearly up with barb spawning mechanisms. But we've known that for some time, I think.

EDIT2: Hmmm. Disabling Lairs doesn't do anything to make the Unique Features unexplorable, would it? That could explain some of the really random crashes I see if so.
 
Crud, I like the unique features. Even then it doesn't help, one of the AIs got an event that let them pick up a Dungeon improvement (I assume, as it popped into the game on top of my Cetratus.) I left it alone only to crash a little bit later - opening it in WB had a AI unit on the lair...
 
Not that I honestly think this is quite the killer code bit we're looking for or anything, but I did come across something in CIV4ImprovementInfos.xml when I was pulling the explorable code off the Unique Improvements (because they add too much flavor to play without!)

Regarding the Hill Giant Steading - is there a reason it has the Explorable variable twice?
<bExplorable>1</bExplorable>
<iLairCreationWeight>100</iLairCreationWeight>
<bExplorable>1</bExplorable>
 
Located Alcinus in Elven lands with the Kings Dagger guy. Used the ability to make him hostile and killed a elf mage stacked with him instead. Is this supposed to happed? I'm at peace with the elves and this event didn't cause war (thank goodness).
 
Located Alcinus in Elven lands with the Kings Dagger guy. Used the ability to make him hostile and killed a elf mage stacked with him instead. Is this supposed to happed?

Nope. Could have sworn that was working... Maybe it was never checked in a stack with a weaker target.
 
Nope. Could have sworn that was working... Maybe it was never checked in a stack with a weaker target.

Looking at it again, casting the make hostile spell effects all units within 1 tile. So, what happened is amage in Alcinus' stack got effected as well. Since the mage was weaker, it got wacked.

I need to bring more folks instead of relying on one dagger. So in hind sight, this is probably OK.
 
Grrrr... after the previous 1 turn teching bug kinda ruined that game. Started a new one as the Scions. Now got a bug where it crashes soon as I cycle the turn. First time used an auto save, but that same turn it crashes every time. Not sure what's going on. :rolleyes:

Come on now, I just want to be able to play a game from start to finish for once. :)
 
Not that I honestly think this is quite the killer code bit we're looking for or anything, but I did come across something in CIV4ImprovementInfos.xml when I was pulling the explorable code off the Unique Improvements (because they add too much flavor to play without!)

Regarding the Hill Giant Steading - is there a reason it has the Explorable variable twice?

Completely accidental, but wouldn't cause any errors mid-game, XML is only read while the game loads, then you could delete all of it and the game wouldn't care at all.
 
One thing I've noticed, whenever I have the Ljarsoval(sp) in the game with Thessa, mid to late game their turns take an awful long of time. I had dialed them out of the game but forgot on this last one, and sure enough, they drag the game way down.

Of course they are in the lead, scorewise, so they have alot of units. But there are other larges nations.
 
Hmm... Had to reinstall Civ, so I wiped all data relating to it from my computer, including content from the my games folder, so saves and trophies are gone too. Reinstalled FfH and the media pack, but didn't patch it, and installed FF. For some reason, FF is no longer crashing every time I try to reload without exiting the program... Anyone else willing to try it to see if it's just me?

Yep, finally crashing for me again. It looks to me like it's something to do with the My Games folders.... The more data that builds up in there, the more often it crashes.
 
Yeah... Also, after clearing the explorable function out of the unique lairs I've had two crashes on the way up to a whopping turn 430.

The AIs are aren't allowed to build stacks of Scouts - though that didn't stop Perpentach from building about 200 Freaks. I took care of that :D
 
More comments: Had a crash, repeatable, in that game at turn 441. Finally gave up after three tries and went into WorldBuilder - a dungeon-type lair spawned after I looked over the world for a bit. Deleted that lair, closed WB and then turn swapped to the next without a hitch.

Some of this may just be evidence piling on but I wanted to make you aware.
 
Since it seems pretty likely that it is the dungeon exploration causing some issues, I'd request that you take a different approach to the testing. Enable all dungeons and exploration of them again, but this time, modify the spell which does the exploration.

Change:
Code:
def spellMarnokDungeoneer(caster):
	iPlayer = caster.getOwner()
	pPlot = caster.plot()
	pPlayer = gc.getPlayer(caster.getOwner())
	iRnd = CyGame().getSorenRandNum(100, "Primary Dungeon Result List")
	iRnd += caster.getNoBadExplore()/2
	iDestroyLair=100
	
	#iRnd = 79   ### Testing
	
	if iRnd < 21:
		iDestroyLair = MarnokDungeoneerBadRandom(caster)
	elif iRnd >= 21 and iRnd < 30:
		iDestroyLair = MarnokDungeoneerBigBad(caster)
	elif iRnd >= 30 and iRnd < 50:
		iDestroyLair = MarnokDungeoneerMonster(caster)
	elif iRnd >= 50 and iRnd < 60:
		iDestroyLair = MarnokDungeoneerRandomStuff(caster)
	elif iRnd >= 60 and iRnd < 65:
		iDestroyLair = MarnokDungeoneerCivSpecific(caster)
	elif iRnd >= 65 and iRnd < 70:
		iDestroyLair = MarnokDungeoneerAlignSpecific(caster)
	elif iRnd >= 70 and iRnd < 75:
		iDestroyLair = MarnokDungeoneerReligionSpecific(caster)
	elif iRnd >= 75 and iRnd < 90:
		iDestroyLair = MarnokDungeoneerGood(caster)
	elif iRnd >= 90:
		iDestroyLair = MarnokDungeoneerBigGood(caster)
	# Destroy the Lair, or not:
	iRnd = CyGame().getSorenRandNum(100, "Lair Destuction")
	if iRnd <= iDestroyLair:
		pPlot.setImprovementType(-1)
		CyInterface().addMessage(caster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_LAIR_DESTROYED", ()),'AS2D_POSITIVE_DINK',1,'Art/Interface/Buttons/Spells/Rob Grave.dds',ColorTypes(8),pPlot.getX(),pPlot.getY(),True,True)
		return True
	else:
		CyInterface().addMessage(caster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_LAIR_NOT_DESTROYED", ()),'AS2D_DEAL_CANCELLED',1,'Art/Interface/Buttons/Spells/Rob Grave.dds',ColorTypes(7),pPlot.getX(),pPlot.getY(),True,True)
		return False

To:
Code:
def spellMarnokDungeoneer(caster):
	iPlayer = caster.getOwner()
	pPlot = caster.plot()
	pPlayer = gc.getPlayer(caster.getOwner())
	pPlot.setImprovementType(-1)
	CyInterface().addMessage(caster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_LAIR_DESTROYED", ()),'AS2D_POSITIVE_DINK',1,'Art/Interface/Buttons/Spells/Rob Grave.dds',ColorTypes(8),pPlot.getX(),pPlot.getY(),True,True)
	return True

And run your game for a while. This should mean you can cast Explore Dungeon, but it won't actually do anything except delete the lair (well, epic lairs and shipwrecks will still work, they are run through a seperate function, def spellExploreLairEpic(caster): and def spellExploreLair(caster): respectively, so block them the same way)



If running a game like that for a while is still crash free, then the next step in debugging would be to re-enable the results 1 at a time until you start to see crashes happening again. Then we are finally narrowing it down to a specific exploration result which is causing the issues.
 
Top Bottom