BLIGHT Still Broken?

Sarisin

Deity
Joined
May 15, 2006
Messages
2,796
Location
NJ
OK, I finally got Blight in my 7th game of 1.3 and it definitely looks to be still broken to me. I have attached three screenshots from my game. I am playing as Charadon/Doviello.

In the first shot, Blight, I am showing that my neighbor, the Hippus are unaffected by the Blight.

In the second shot, Blight1, I am showing my cities already starving.

In the third shot I am showing how my city is affected. I have a population of 8, and Blight of 25. Add to that the 2 per pop normal unhealthy and my city of 8 has a whopping unhealthy of 41!!!

There is no doubt that I will lose pop until I am down to 1 and stay there a long time.

There are two game-breaking problems that were carried over from 1.23 (surprised testing didn't reveal this):

1. Blight is not being calculated correctly. Three per pop is just too much, especially with the health situation it is in 1.30.

2. Even more significant, and this has been brought up before, Blight is affecting the human player (perhaps doubly or triply so) while not affecting AI players.

IMO, the last is a reason to throw up your hands and start a new game. ;)

Really, you will not notice this problem in all your games - I didn't see it until my 7th game, but when you get it, it is clearly broken.

Suggestions:

1. Have Blight affect ALL players.

2. Only one Blight per pop, please!
 

Attachments

  • Blight.jpg
    Blight.jpg
    381.9 KB · Views: 163
  • Blight1.jpg
    Blight1.jpg
    344.5 KB · Views: 177
  • Blight2.jpg
    Blight2.jpg
    323 KB · Views: 180
The severity of the blight and its effect on individual players/cities depends on a lot of things.
It may be that you just failed to get a lot of health resources, kept your cities close to the unhealth cap and other such things and it compounded into a gamebreaking effect.

I clearly see some Hippus cities that are blight struk and the only ones not hit are smaller than your cities are.
 
Blight *should* be crippling, IMO. 1 per pop is trivial especially when a non-blight situation is 2 per pop. It should definitely impact all living civs equally though.
 
The severity of the blight and its effect on individual players/cities depends on a lot of things.
It may be that you just failed to get a lot of health resources, kept your cities close to the unhealth cap and other such things and it compounded into a gamebreaking effect.

I clearly see some Hippus cities that are blight struk and the only ones not hit are smaller than your cities are.

Which cities are you talking about? Two with pop of 10 do not show any starvation indicating Blight is affecting them. One city is pop of 6. That should have have at least 30 unhealthy and yet doesn't show any.

I not only have health resources in my cities (Bison, Deer, Banana, Fish, Clam, etc.), but each city has TWO Healers.

I stand by my original that Blight is not calculating correctly and is affecting the human player, but not AI players.
 
I have to agree that blight is a little off at the mo. Often a blight will take my capital and other similar sized cities down to 1 pop for some time despite health resources and buildings. I notice that my score massively drops after a blight due to loss in pop whereas this just doesn't happen for the AI.

At any rate 30AC is a bit early for city pop annihilation (I know it's not a permanent effect, but it does last quite a while when unhealth is in the 40s), I sort of figured that comes near the end of the line...

Maybe this just needs balancing, I'd be more in favour of a flat extra unhealth rate per pop as sarisin stated above than having all these 'other factors' which leave me with some ridiculous unhealth number.

Luckily 30AC+ only happens when I cause it, given the underperformance of the infernals/sheaim. If the AC hit 30 more often this would probably be a more well noticed problem.
 
I think it does effect the AI, but it might be not so evident, since the AI is absolutely scared of unhealth, and does everything it can to prevent it. (Hence the great amount of Great healers through the game, I think)...

In another point of the blight: I've noticed that It damages units with death damage (Also workers). Why not, instead of some damage, units could be given with a Plagued promotion that last for 10 turns or so?. Wouldn't be more interesting?
 
It does not effect the AI the same.. this has been brought up several times already.. Also in order to stop 25 unhealth the computer would need to assign 8 healers (the total population of the city if blight gives 3x unhealth) which means it would be gauranteed to shrink. Even at +10 unhealth it is unlikely the city would get by without shrinking.

Even before the unhealth changes came in, when my cities were all in perfect health, the blight crippled my cities while leaving the AI untouched. Of course the why of this happening is beyond me..

Erm.. this probably belongs in the bug thread though.
 
Are you sure? The last time I played Scions, when Blight struck Erebus, Pelemoc has guaranteed Gift of... spell (that spell that need unhealtiness, don't remember it's name) in almost every AI city.
 
It might give some unhealthiness to the AI, but nowhere near on the scale it hits the player. I think it's more inequality in calculating the blight effect on the player than the AI just preparing well for unhealthiness, but I could be wrong :)
 
Blight effects all players equally (aside from the Infernals, of course).

There is absolutely nothing in the Blight code which checks for AI control.

If you do not believe me, this is the sum total of all Blight code!

Code:
def doArmageddonBlight(argsList):
	kTriggeredData = argsList[0]
	iPlayer = argsList[1]
	pPlayer = gc.getPlayer(iPlayer)
	if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
		for pyCity in PyPlayer(iPlayer).getCityList() :
			pCity = pyCity.GetCy()
			[COLOR="Red"]i = CyGame().getSorenRandNum(15, CvUtil.convertToStr("Blight for %s - Turn %d" % (pCity.getName(), CyGame().getGameTurn())))[/COLOR]
			i += pCity.getPopulation()
			i -= pCity.totalGoodBuildingHealth()
			pCity.changeEspionageHealthCounter(i)
	py = PyPlayer(iPlayer)
	for pUnit in py.getUnitList():
		if pUnit.isAlive() and not pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMUNE_DISEASE')):
			pUnit.doDamageNoCaster(25, 100, gc.getInfoTypeForString('DAMAGE_DEATH'), False)

Just for clarity: The line in red is just a random number. The complex bit with the city's name and game turn is just for logging purposes, tells you want the random number was generated for.

So the entire effect boils down to this: Random value between 0 and 14, plus population, minus health from buildings. That is IT. It is added to all non-Infernal cities.


The only possible way it could hit a player harder is if it fires multiple times, but I have seen nothing in the code (and believe me, I have looked) that would lend credence to that theory.

My own belief? Your cities are larger, and you focus less on Health buildings than the AI. This automatically causes your cities to be hit harder... And that is completely within the bounds of the system. Hell, it's even intended that way.
 
Blight effects all players equally (aside from the Infernals, of course).

There is absolutely nothing in the Blight code which checks for AI control.

If you do not believe me, this is the sum total of all Blight code!

Just for clarity: The line in red is just a random number. The complex bit with the city's name and game turn is just for logging purposes, tells you want the random number was generated for.

So the entire effect boils down to this: Random value between 0 and 14, plus population, minus health from buildings. That is IT. It is added to all non-Infernal cities.

The only possible way it could hit a player harder is if it fires multiple times, but I have seen nothing in the code (and believe me, I have looked) that would lend credence to that theory.

My own belief? Your cities are larger, and you focus less on Health buildings than the AI. This automatically causes your cities to be hit harder... And that is completely within the bounds of the system. Hell, it's even intended that way.

Just to check: is the blight unhealth added in addition to the unhealth currently present in the city? so for a 10 pop (20 unhealth) city, you'd be adding between 10-24 unhealth? The top end of the RNG would definitely hit the 40s in unhealth, but this was actually happening before the health changes. Does the code depend on health gained from buildings due to resources, or health buildings that give multiple health points, or does each building count as just 1? What buildings currently count as health ones?
As far as I can tell it would be the granary, smokehouse, herbalist, aquaduct, sewer and well.
 
Just to check: is the blight unhealth added in addition to the unhealth currently present in the city? so for a 10 pop (20 unhealth) city, you'd be adding between 10-24 unhealth? The top end of the RNG would definitely hit the 40s in unhealth, but this was actually happening before the health changes. Does the code depend on health gained from buildings due to resources, or health buildings that give multiple health points, or does each building count as just 1? What buildings currently count as health ones?
As far as I can tell it would be the granary, smokehouse, herbalist, aquaduct, sewer and well.

Yes, added in addition (hence the use of espionagehealthcounter; It wears off over time). And yes, that is exactly what is possible.

From a cursory glance at the code, the totalGoodBuildingHealth() returns all health from buildings, including that granted by resources, or if a building grants multiple health points.
 
Yes, added in addition (hence the use of espionagehealthcounter; It wears off over time). And yes, that is exactly what is possible.

From a cursory glance at the code, the totalGoodBuildingHealth() returns all health from buildings, including that granted by resources, or if a building grants multiple health points.

Ok cheers for the info, I'll try inducing a few blights in the next few games to check the numbers are all matching up :)
 
Blight effects all players equally (aside from the Infernals, of course).

There is absolutely nothing in the Blight code which checks for AI control.

If you do not believe me, this is the sum total of all Blight code!

Code:
def doArmageddonBlight(argsList):
	kTriggeredData = argsList[0]
	iPlayer = argsList[1]
	pPlayer = gc.getPlayer(iPlayer)
	if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
		for pyCity in PyPlayer(iPlayer).getCityList() :
			pCity = pyCity.GetCy()
			[COLOR="Red"]i = CyGame().getSorenRandNum(15, CvUtil.convertToStr("Blight for %s - Turn %d" % (pCity.getName(), CyGame().getGameTurn())))[/COLOR]
			i += pCity.getPopulation()
			i -= pCity.totalGoodBuildingHealth()
			pCity.changeEspionageHealthCounter(i)
	py = PyPlayer(iPlayer)
	for pUnit in py.getUnitList():
		if pUnit.isAlive() and not pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMUNE_DISEASE')):
			pUnit.doDamageNoCaster(25, 100, gc.getInfoTypeForString('DAMAGE_DEATH'), False)

Just for clarity: The line in red is just a random number. The complex bit with the city's name and game turn is just for logging purposes, tells you want the random number was generated for.

So the entire effect boils down to this: Random value between 0 and 14, plus population, minus health from buildings. That is IT. It is added to all non-Infernal cities.


The only possible way it could hit a player harder is if it fires multiple times, but I have seen nothing in the code (and believe me, I have looked) that would lend credence to that theory.

My own belief? Your cities are larger, and you focus less on Health buildings than the AI. This automatically causes your cities to be hit harder... And that is completely within the bounds of the system. Hell, it's even intended that way.


I appreciate your code (and don't understand it, of course:p), however, look at the example I have posted. My two cities have pop of 8 and 9 and show immediate starvation and (next turn) pop decrease. The three Hippus cities shown have two pops with 10 and one with 6. Two are larger cities than mine. None of them show any starvation or pop shrinkage. I had plenty of health resources/buildings - I would wager more than the Hippus.

Again, I don't understand the code and can only post what happens in an actual game.

I continued to play, and, as predicted, my two cities did shrink down to a pop of 1 while the Hippus cities grew slightly to 11 and 12. My score dropped 150 pts while Hippus went up 200+. Yes, other things may have been involved there, but the point is you cannot do much of anything with civs having a pop of 1 while your opponent has 11 and 12. No growth, no new techs, no GPs, etc.

But, after a while, my cities did grow back to their original size before Blight. I never recovered from the drop in pts and Hippus were way ahead of me...until I crushed them with my army and had a Conquest Victory.

Another point on this I mentioned elsewhere: Turn 326 they had Horse Archers and were building Magnidine when I started dismantling their empire.

So, on Blight, you really have to do your best to avoid it. Otherwise be prepared for what I pointed out in my game as an example.
 
The AI is terrified of unhealth.
Furthermore, they also tend to trade a lot more with each other.

The result is that they tend to have more health resources and this, combined with the fact that the AI puts extreme priority on building health buildings makes the effects of the blight be much weaker on the AI.


Coincidentally, this is quite similar to my own playing style and I have newer been crippled by a blight, ever.

Code translated to english:
Code:
def doArmageddonBlight(argsList):
[COLOR="Red"]Function name (list of parameters, like the player in question)[/COLOR]

[COLOR="red"]Section of code dealing with cities.[/COLOR]
	kTriggeredData = argsList[0]
	iPlayer = argsList[1]
	pPlayer = gc.getPlayer(iPlayer)
[COLOR="red"]	See what player it is so that you know who to effect.[/COLOR]

	if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
[COLOR="Red"]	Check if the player is not the Infernal.
	If he is, skip that section, if no to the next row.[/COLOR]

		for pyCity in PyPlayer(iPlayer).getCityList() :
[COLOR="red"]		Cycle through all the player's cities and do the fallowing.[/COLOR]

			pCity = pyCity.GetCy()
[COLOR="red"]			See what city it is currently at so that you know what city to effect.[/COLOR]

			i = CyGame().getSorenRandNum(15, CvUtil.convertToStr("Blight for %s - Turn %d" % (pCity.getName(), CyGame().getGameTurn())))
[COLOR="Red"]			Create a new variable called "i". Set the value of that variable to be a random number between 0 and 15. (not including 1 and 15) Than display a message saying: "Blight for [City Name] - Turn [Current Game Turn]"[/COLOR]

			i += pCity.getPopulation()
[COLOR="red"]			Increse the value of the variable "i" by the population of the current city.[/COLOR]

			i -= pCity.totalGoodBuildingHealth()
[COLOR="red"]			Decrease the value of the variable "i" by the total health gained from all health buildings in the current city.[/COLOR]

			pCity.changeEspionageHealthCounter(i)
[COLOR="red"]			Create a counter to let it wear off over time..[/COLOR]

[COLOR="red"]Section of code dealing with units.[/COLOR]

	py = PyPlayer(iPlayer)
	for pUnit in py.getUnitList():
[COLOR="red"]		Cycle through all the player's units and do the fallowing.[/COLOR]
		if pUnit.isAlive() and not pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_IMMUNE_DISEASE')):
[COLOR="Red"]	Check if the unit is alive (not elemental, undead, demonic etc.) and if it is not immune to disease.
	If he is, skip that section, if no to the next row.[/COLOR]

			pUnit.doDamageNoCaster(25, 100, gc.getInfoTypeForString('DAMAGE_DEATH'), False)
[COLOR="red"]		Deal a random number of betwen 25% and 100% "death" damage to the unit.[/COLOR]

So you see, there is no check to see if the player is human or not.
 
So the entire effect boils down to this: Random value between 0 and 14, plus population, minus health from buildings. That is IT. It is added to all non-Infernal cities.


The only possible way it could hit a player harder is if it fires multiple times, but I have seen nothing in the code (and believe me, I have looked) that would lend credence to that theory.

My own belief? Your cities are larger, and you focus less on Health buildings than the AI. This automatically causes your cities to be hit harder... And that is completely within the bounds of the system. Hell, it's even intended that way.

Although I hate to doubt you on this, given the amount of research you have done on the problem, I am not convinced that your research matches what happens in the game.

When I have a size 15 city end up with 50 blight, while my enemies with size 20 cities end up with only 10, at most 20, it is hard to believe that things are working properly. Even two recently captured cities, size ~8, have 40+ blight. In the worst case scenario you've described (14 + 8 - 0 health from buildings) they should have had maximum 22 - even before you account for the health resources I've got hooked up. Even my largest city, at 18, had I built 0 health buildings (and it had an herbalist and hunting lodge with deer), should get only 32.

Although I find it difficult to believe that the blight code is working correctly (perhaps it is ignoring player health bonuses in some cases, or counting more in the case of the AI somehow?), perhaps Blight should get some mitigation until the new health mechanics are worked out and balanced. At the least, if possible, increase the amount of Blight unhealth lost per turn.
 
I commented the code for you so that you can understand.
What ever it is that you are getting in your game has to match the code.

If it does not, than you are wrongin your observations since the code is absolute.
 
Then please explain for me how a size 8 city can get 40 blight unhealth. Apparently I fail at math.

Meh. The issue is that it hits multiple times while the counter hovers around 30. I had blight hit at turn 229 and then again at turn 230.

... But I only got the flavor text about it once, after the second hit at 230. Maybe Blight hits at the end of your turn and then the beginning of the next? [Edit] Yes, I think that is definitely what happens. I destroyed the Elohim on turn 229, razing their final city, so the counter hit 30 during that turn. The damage to my units occurred after I had done a few other things (in this case, summoned some ice elementals), still on turn 229, but then hit again on turn 230, after which I got the popup flavortext about Blight.
 
The only possible way it could hit a player harder is if it fires multiple times, but I have seen nothing in the code (and believe me, I have looked) that would lend credence to that theory.
If you look at the screenshot from the first post, the 25 unhealth from blight in a 8 pop city shouldn't be possible according to the code. The fact that we're usually hitting the top end of the RNG or above that on most blights sort of indicates that it's hitting multiple times :)
 
Again, I really appreciate the developers taking the time to post and explain the code.

As a player (only) of the mod, I can only report how Blight is affecting my game during gameplay itself.

If the intention is to bring the human player down while largely unaffecting the AI civs, simply state that in the description of Blight. Just like the AI being able to see the whole map, this would be one more 'bonus' the human player has to accept and expect in his games. Adjust accordingly.

However, if you want an even playing field when it comes to Blight, it is clear that the human player is getting more than his share and this should be addressed and fixed.

One problem is that you don't always see Blight in your games. It took me 7 games of 1.3 to get it and discover it is exactly the same thing as from 1.23. Still, I am a little surprised that the mod testers never ran into this during their gameplay prior to the release of the mod.

Whether it is a bug or a balance issue, the way Blight is now there is quite an impact on the human player.
 
Top Bottom