FfH2 0.33 Bug Thread

As a suggestion, if you have RoK, you could use a Soldier of Kilmorph, and then rather than disband a unit for no benefit you can use the function to convert the unit to hammers.
Eh, personally I prefer to just hand it to a hawk. They're cheap and you can move the hammers around quickly.
 
I just made a post about inflation, and noted that inflation for the AI is modified by era at higher difficulty levels (in other words, higher eras have a reduction in inflation for the AI). Since you use Eras primarily for religions, this means that at higher difficulty levels, the AI will experience less inflation for religions later in the era list (ERA_COUN) than ones that are earlier (ERA_RUNE). Furthermore, this is a disadvantage to any non-religious AI, since the non-religion eras are earlier than than religious ones.

I'd either order the eras for this effect (since iAIPerEraModifier changes production, support, supply, inflation, war weariness anger, upkeep, threshold, and upgrade price), or consider zeroing out the iAIPerEraModifier fields, while possibly improving some other AI modifiers to compensate.

Alternate suggestion:

Replace modifying by the era index by a modifier based on the game speed * the current turn (say +1/100 turns on standard speed). This should approximate the original purpose. If you like this suggestion, I'll be happy to post code to this thread (although it may be a week or two).
 
I got the event to make peace with my enemy while I was Crusading as the Bannor. And I don't think the Infernal would be nice to my wounded anyway....
 
Are barbarian ecclesiastics supposed to spawn?

I brought this up as a bug before. It is always strange seeing them ambling around the map. It's not like they are going to waltz into your civ's border to spread Empyrean!;)
 
Not really a bug per se, but might as well be one. I'm playing Sidar and even though we're both neutral Dain the Amurite can't see to help going to war with me. So we've been slugging it out off and on throughout the game. I'm playing on the tectonics map so their are these valley areas that are sort of hard to get into and in one of them there are about 4 Amurite cities as well as Zbolub where Acheron lives.

Any time there is peace, Dain builds lots of units and they all hang out outside this city. I've seen the AI do this time and time again yet I don't recall ever seeing an AI player take out the Dragon. (I'm not saying it hasn't happened, just I don't ever recall it so it's been pretty rare.)

So beyond the fact the AI can't seem to figure out that A) It needs Spirt mana to defeat Acheron, the AI also doesn't seem to be good at recognizing real threats versus potential threats. After Dain attacked me for the third time, I decided that I had enough power so I moved into that valley and laid wasted to 4 cities and took over a fifth. One wing of my army had enough Champions that I thought, "Well lets go get some Dragon Gold" but when I got close, I found two large stacks hanging out by Zbolub! Together, there was about 15+ units that seemed quite content to let me rampage through their territory and destroying their cities. I would think that there needs to be something changed on how the AI deals with Acheron.

I mean I've been able to use an old tactic from Civ II & III where you place a unit or two neat the border of a potential enemy; then the AI would mass forces to meet this potential threat and then you'd either marine land somewhere else or just attack across the border away from the there. With Acheron there, I know that my Enemy can't seem to help but to build units and deploy them there, even though they do diddly squat.
 
this is in .32 still, but not sure if it was fixed...

As Khazad, sometimes when I settle my first city the brewery is not available to build, and never becomes available. Pretty big deal since it gives +2 xp to units...
 
In the description for the Adept, sometimes there is in red letters
"Requires: NONE"

Probably instead there should be "Requires: Mage Guild"
0.33f
 
this is in .32 still, but not sure if it was fixed...

As Khazad, sometimes when I settle my first city the brewery is not available to build, and never becomes available. Pretty big deal since it gives +2 xp to units...

Yeah, it did not get "fixed", I also noticed this on 0.33f, but it seems actually a documentation issue, because the brewery actually seems to require a river.
 
Playing a mostly water map I managed to completely crush the AI with a small stack consisting of a few Stygian Guards, a few Speakers, and Hemah. It did not seem to understand how to fight back, as my army never actually set foot on land (except to capture or raze a city, but my units usually used their second movement point to return to the sea). The AI did build some boats, but not nearly enough to stop my small army, magical army (especially an army guarded by krakens). Although to give the AI some credit, I don't know how well a human would have resisted either.
 
OO is stong near water, that's intended ;). The tactic vanishes the moment you try to take inland cities
Still, a stack like that would require 10+ frigate+ ships to take out, quite a large fleet.
 
I think it has been reported that captured elven workers can chop without bronze working. In fact also normal elven workers for elven civ can chop forest. Well, I did not actually test, if the forest would really disappear, but the icon for chopping is enabled.
 
Playing a mostly water map I managed to completely crush the AI with a small stack consisting of a few Stygian Guards, a few Speakers, and Hemah. It did not seem to understand how to fight back, as my army never actually set foot on land (except to capture or raze a city, but my units usually used their second movement point to return to the sea). The AI did build some boats, but not nearly enough to stop my small army, magical army (especially an army guarded by krakens). Although to give the AI some credit, I don't know how well a human would have resisted either.

Yeah, AI's really don't know how to handle this. And a lot of other complicated but effective strategies.
 
Balseraph Puppets can cast Split Commander, giving a bountiful supply of commanders.

Possibly equipment too.
 
I'm getting multiple asserts and a defect when a player obtains a tech goody before having a city. The specific instance I got was the Barbarian player getting a tech goody via the spell in the Graveyard.

The reason is that canResearch Fails if no city has been founded in the below code, so it results in NO_TECH. This causes a defect in the setNoTradeTech call.

Spoiler :
Code:
	if (GC.getGoodyInfo(eGoody).isTech())
	{
		iBestValue = 0;
		eBestTech = NO_TECH;

		for (iI = 0; iI < GC.getNumTechInfos(); iI++)
		{
			if (GC.getTechInfo((TechTypes) iI).isGoodyTech())
			{
				if (canResearch((TechTypes)iI))
				{
					iValue = (1 + GC.getGameINLINE().getSorenRandNum(10000, "Goody Tech"));

					if (iValue > iBestValue)
					{
						iBestValue = iValue;
						eBestTech = ((TechTypes)iI);
					}
				}
			}
		}

		FAssertMsg(eBestTech != NO_TECH, "BestTech is not assigned a valid value");

		GET_TEAM(getTeam()).setHasTech(eBestTech, true, getID(), true, true);
		GET_TEAM(getTeam()).setNoTradeTech(eBestTech, true);
	}

The problem is that CyPlayer::canReceiveGoody isn't called prior to
CyPlayer::receiveGoody. I think this will work, although I'm not certain that I'm choosing the same fix you would:

Spoiler :
Code:
def spellRobGrave(caster):
	bHaveGoody = false # Wiser Orcs - Rob Grave fix
	CyGame().changeGlobalCounter(1)
	pPlot = caster.plot()
	pPlot.setImprovementType(-1)
	pPlayer = gc.getPlayer(caster.getOwner())
	iRnd = CyGame().getSorenRandNum(100, "Rob Grave")
	if iRnd < 20:
		# Wiser Orcs start - Rob Grave fix
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_LOW_GOLD'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_LOW_GOLD'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 40:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_HIGH_GOLD'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_HIGH_GOLD'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 60:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_TECH'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_TECH'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 80:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SKELETONS'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SKELETONS'), caster)
			bHaveGoody = true
	if bHaveGoody == false:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SPECTRE'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SPECTRE'), caster)
			bHaveGoody = true
	# Wiser Orcs end
Note that the above code can result in nothing, if the player has 0 cities, or 1 city, and this is close to that city. If something is always desired, I'd switch GOODY_GRAVE_SPECTRE with one of the gold goodies.
 
xanaqui is right on that one, it happened to me and it was pretty annoying to see all those wasted beakers :D

back on topic, well not really a bug but worth mentioning: random events affecting mountain plots. although I have no problem with shrooms on peaks, I had the random event that spawns frostlings on a peak plot near my capital. they couldn't go anywhere of course, but obviously at the start of each turn I'd get the drum beat and alert that "enemies are near" . after a while I just entered WB and deleted them manually. so this could need some help. same with the goblin dump affecting city plots: it doesn't make sense and it can really ruin a game from the very start. I'm pretty sure both are gonna be fixed in 0.34 :)
 
I use XP so I don't get the CtD for the flames, but they really slow my framerate down, is there any way round this problem?

P.S. This is a really fantastic mod guys, kudos to all who created it.
 
Woa, I read something wrong and am gonna double check before I go off the handle./
 
Spoiler :
Code:
def spellRobGrave(caster):
	bHaveGoody = false # Wiser Orcs - Rob Grave fix
	CyGame().changeGlobalCounter(1)
	pPlot = caster.plot()
	pPlot.setImprovementType(-1)
	pPlayer = gc.getPlayer(caster.getOwner())
	iRnd = CyGame().getSorenRandNum(100, "Rob Grave")
	if iRnd < 20:
		# Wiser Orcs start - Rob Grave fix
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_LOW_GOLD'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_LOW_GOLD'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 40:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_HIGH_GOLD'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_HIGH_GOLD'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 60:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_TECH'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_TECH'), caster)
			bHaveGoody = true
	if bHaveGoody == false and iRnd < 80:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SKELETONS'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SKELETONS'), caster)
			bHaveGoody = true
	if bHaveGoody == false:
		if (pPlayer.canReceiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SPECTRE'), caster)):
			pPlayer.receiveGoody(pPlot, gc.getInfoTypeForString('GOODY_GRAVE_SPECTRE'), caster)
			bHaveGoody = true
	# Wiser Orcs end

A much better resolution would be to mod iRnd after it gets it's random value, floor if necessary, won't make a difference.

Then simply create a switch, and when you get to the part where you were setting your 'bHaveGoody' to true, just break. No need for more variables, and heck, a switch is a bit easier to read anyway. If I was sure I could get the syntax for python right off the top of my head, I'd give you an example, but I don't work in the language regularly enough to do that ;P.
 
Back
Top Bottom