play balancing the civs

I've started a game with this mod twice now. BTW, I love the idea and execution. I was totally digging it but then the same thing happened to me twice. Both times the game started me out as Tleilaxu. Everything was going along fine until Stilgar declared war on me and showed up a few turns later with 11 strength Fremen raiders and friggin annihilates me. Maybe I'm doing something wrong but this hasn't turned out to be much fun yet.
 
Thanks for the feedback! What difficulty level did you play on, and what dificulty do you usually play vanilla civ on? Sometimes when I play a new mod, I drop to a lower difficulty level to learn more. Also, you may find it's fun to play as Fremen and raid the other guys!

In each of the last few versions, we have made a number of changes to each civilization to make sure they each have a unique play style. It is also possible Fremen are too strong. Which exact version and patch are you playing?
 
Everything was going along fine until Stilgar declared war on me and showed up a few turns later with 11 strength Fremen raiders and friggin annihilates me. Maybe I'm doing something wrong but this hasn't turned out to be much fun yet.

The Raider seems incredibly powerful for Desert Rovers which is still quite an early tech. It has strength 11 while the Quad also enabled by that tech only has strength 5. The Raider also gets Sandrider and 25% withdraw chance so although I haven't tried it I imagine that it is pretty easy to beeline Desert Rovers and blitz everybody very quickly. I would think that a strength of at most 6 would be more appropriate for the stage of the game it appears at. Even on paper it looks over-powered...
 
The Raider seems incredibly powerful for Desert Rovers which is still quite an early tech.

The raider is at Desert Rovers? Are you sure? That would be a major bug; it was supposed to be a Roller replacement, and so at minimum at Desert Industry.

But even at Desert industry, the raider is slightly overpowered, and its current implementation is not the design intention.

The raider was supposed to be a *weaker* alternative to the roller. Lower strength, but higher withdraw chance. Maybe strength 9 40% withdraw chance.

We might also move it to a different tech (not desert industry) (which could let it be a bit stronger).

But this is partly also an issue with the Roller and Desert industry. The roller (strength 11) is the first tier2 combat unit (it comes well before heavy trooper, shield trooper, etc) but can easily kill any lower tier unit.
So potentially we should also consider weakening the Roller or increasing its tech cost.
 
The raider is at Desert Rovers? Are you sure? That would be a major bug; it was supposed to be a Roller replacement, and so at minimum at Desert Industry.

Yes, it is at Desert Rovers so that's a bug. It certainly makes the Fremen challenging in the early game! We should fix this for the next patch.

How about 9 strength for the Roller and 8 strength for the Raider? If we settle a design then I can implement the changes.
 
I think the chemical trooper (strength 4 but 100% against melee =8 without promotions ) is actually less powerful than the grenade trooper (strength 6 but 50% against melee = 9). Why is the chemical trooper not strength 5? (which would make sense for a tottal strength of 10 against melee but slightly less power against others)
 
Please note the chemical trooper also does collateral damage, so strength 4 may be ok.

Should we have two Fremen units, one to replace the quad and one to replace the roller? One is called the raider. What should we call the other?
 
How about 9 strength for the Roller and 8 strength for the Raider? If we settle a design then I can implement the changes.
That sounds reasonable for the Roller, and maybe slightly increase the withdraw chance on the roller too.
Perhaps though we should leave the Raider at strength 10, but increase its tech tier slightly, so it is basically a substitute for both the Roller and the light scorpion.
A strength 8 raider is going to be instantly obsolete as soon as a heavy trooper or shield trooper or Naib's chosen is buildable.

The idea is to have a skirmisher unit that has a different role, and that remains useful for a while This should be a genuine tier2 unit (tier2 = heavy trooper, missile trooper, shield trooper).
Whereas the roller could be tier 1.75 (hardened bladesmen = tier1.5) and the light scorpion could be ~tier 2.25.

Should we have two Fremen units, one to replace the quad and one to replace the roller? One is called the raider. What should we call the other?

I see no reason for a Quad replacement. They have the Crysknife fighter early game.
 
Here's a one file patch to update the Raider and Roller:

+ Raider, reduced to strength 10, moved to Desert Industry (I couldn't find a suitably slightly later tech), renamed to Razzia Raider for a bit of flavour.
+ Roller, reduced to strength 9, withdraw chance upped to 25%

This is compatible with patches 1.7.0.5 and 1.7.0.6 only.
 
The existing civs seem to be fairly reasonably balanced. But as this mod has relatively fewer factions (sometimes leading to duplication in larger games) I'd like to eventually see another Civ or two.. I missed having the Spacing Guild as a playable civ from earlier versions of this mod, do you think they or another faction could eventually be added in?
 
I have found the cause of the infinite loop bug which has delayed the release of 1.7.1. I have not fixed it yet, but I expect it will be another day or two.

Meanwhile, I have done a run of the nine "pick your leader challenge" games using 1.7.1 and the results are ... interesting. Please see posts #67 and #75 in this thread for the method. Basically, nine autoplay runs on the same map, with each civ in a different start location each time. Add a handicap factor for certain rich or poor start locations, and we should see which civilizations are weaker or stronger when played by the AI.

The answer is: Ix is way too strong, and I have no idea why. Corrino is too strong, and we suspect this is because their leaders have the imperialist trait which allows REXing. Atreides is way too weak, in fact in half the games they get killed, and I have no idea why.

Once 1.7.1 is released, I would really appreciate one or two playtests of Ix and Atreides in particular, to understand what we should change. A technique Ahriman has used is to play one of these positions himself; then play the same map again as some other player, while watching the AI play the position he just played. If the AI is completely overlooking something or doing something very stupid, this should make it obvious. We successfully improved Tleilaxu AI play with this feedback.

I have attached the spreadsheet and some other data. In file pyl1-171.xls, you can see the scores. The top part shows the summary of who won the games. The middle part shows the score at turn 250, halfway. The bottom part, especially the bottom right column, shows the average final score of each civ. Ix is highest, followed by Corrino, with Atreides in last by a good margin.
 

Attachments

  • pyl-171-results.zip
    184.8 KB · Views: 49
I think the fact that the Atreides don't want to OB readily might be the reason for their stagnation, while Ixian Skunkworks (which I have observed the AI build many times) and spiders are too strong. The Tarantula needs to be more expensive (probably 1.5 times as much as a Kindjal Soldier) given its strength and lack of predators, figuratively speaking.
 
I think the fact that the Atreides don't want to OB readily might be the reason for their stagnation

Excellent (and fast) feedback! Ahriman is not available right now due to travel, but I am surprised to learn that his design for the AI makes Atreides resist OB. He has suggested many times that part of the Atreides theme should be diplomacy bonuses, which would seem to contradict resistance to OB.

Is the fix as simple as bumping up some of the AI values in the leaderhead file?

while Ixian Skunkworks (which I have observed the AI build many times) and spiders are too strong. The Tarantula needs to be more expensive

The skunkworks gives +10% research and +10% hammers, plus -50% upgrade cost. To me, none of these appear too powerful. Perhaps there is some synergy I overlooked. Which part do you think should be adjusted?

If I make the tarantula more expensive, are the rest of the mech units OK?
 
I think the theme for Atreides is "loyalty." Once you have friendly relations with them, you can really count on them to be good allies, but to get to that point half the game is over already, and late-game tech trades are useless.
Ixian Skunkworks aren't really overpowered, it's the way that the AI uses them that puts them at an advantage. (-50% upgrade cost is a big deal of money for the AI, whereas for the human player who doesn't upgrade it's not as much) I would make it a -25% upgrade cost.
The Spider should be a little less powerful (may just strength 13) since it has an advantage against melee.

I'm surprised that you haven't found the Harkonnens to be low in score (in most of my games they are usually bottom).
Have you thought about including harsh conditioning as a prereq for later techs?
 
I think the theme for Atreides is "loyalty."

OK. What can we do to keep them from getting left behind early on? Even at the 250 turn (halfway) mark they are usually in last place.

Ixian Skunkworks ... I would make it a -25% upgrade cost ... The Spider should be a little less powerful (may just strength 13)

I will do both of those.

I'm surprised that you haven't found the Harkonnens to be low in score (in most of my games they are usually bottom).

Are you using 1.7.0.4 or later? This unfortunately has a hang bug, but it has the improved colony placement. Harkonnen prefer slavery and they may over-use whip. With 1.7.0.4 and later the population growth is much higher and perhaps this is why they are not at the bottom in my runs.

There are some ideas for Harkonnen units or abilities in this post. Is there something you can suggest to raise them up? I think their abilities are among the least interesting so far.

Have you thought about including harsh conditioning as a prereq for later techs?

Apart from moving one mech unit to a different tech, I have not touched the tech tree for 1.7.1. My next step is to get my cumulative cost program working for vanilla so we have a side by side comparison, but I am hoping Ahriman will contribute to the redesign when he comes back.
 
Harks cities are already smaller since they are typically backstabbers and tend to whip a lot, and not too many health resources for their smaller empires. I would give them an economic advantage rather than more production (e.g. more gold with spice, less disappearance of spice within their territory, etc).
 
Perhaps a mine with higher output, but there is a 1% chance per turn that it destroys the underlying resource if any?

EDIT: d'oh ... read more carefully. you suggested a *non* hammer benefit. I will think about that.
 
You have changed the Skunkworks upgrade cost reduction from -50% to -25% so this isn't quite as relevant but...

In regular BtS the AI gets reduced cost upgrades at every difficulty level. In fact, it gets a reduction to 50% of the normal cost at every difficulty level. The (somewhat older) version of Dune Wars I have has this same characteristic. How does the Skunkworks' upgrade cost reduction stack with this? If it works like a lot of other things in the game, it would combine such that the old -50% and the difficulty setting (from CIV4HandicapInfo.xml, the iAIUnitUpgradePercent value) would give -100% upgrade cost = free upgrades. This would explain how Ix ends up very powerful - once it builds some of these things, most of its units that are not out wandering around will always be the most modern unit of its type at no cost (or very little cost if the two factors are calculated separately, resulting in a 25% final cost).

So how does the new -25% combine with the existing -50% the AI gets? Is it -50% + -25% for a total of -75%, or is it 50% * 75% for 37.5%?

On the other hand, if the upgrade cost is being overridden and the difficulty level related upgrade cost reduction for the AI is not included in the calculation, then none of this really applies - but if this is the case then the AI is not getting one of the advantages it used to get.
 
So how does the new -25% combine with the existing -50% the AI gets? Is it -50% + -25% for a total of -75%, or is it 50% * 75% for 37.5%?

That is a good question, and one which is surprisingly hard for me to answer. The code for the skunkworks is inspired by tsentom1's Leonardo's Workshop python wonder. The original code is exceptionally hard to read. I am about to modify it by changing all the ".../2" to "3*.../4". Does the following code help answer your question?
Code:
	def getUpgradePriceOverride(self, iPlayer, iUnitID, iUnitUpgradeType):
		self.Initialize()
		pPlayer = gc.getPlayer(iPlayer)
		pUnit = pPlayer.getUnit(iUnitID)
		if not pUnit.plot().isCity(): return -1
		pCity = pUnit.plot().getPlotCity()
		if pCity.getNumRealBuilding(self.iBSkunk) == 0: return -1
		# In a city with a skunkworks; compute cost
		# Inspired by Leonardo's Workshop wonder by tsentom1
		iPrice = ((gc.getDefineINT("BASE_UNIT_UPGRADE_COST"))/2)
		iPrice += (((max(0, (pPlayer.getUnitProductionNeeded(iUnitUpgradeType) - pPlayer.getUnitProductionNeeded(pUnit.getUnitType()))) * gc.getDefineINT("UNIT_UPGRADE_COST_PER_PRODUCTION")))/2)
		if ((not pPlayer.isHuman()) and (not pPlayer.isBarbarian())):
			pHandicapInfo = gc.getHandicapInfo(gc.getGame().getHandicapType())
			iPrice = ((iPrice * pHandicapInfo.getAIUnitUpgradePercent() / 100)/2)
			iPrice = ((iPrice * max(0, ((pHandicapInfo.getAIPerEraModifier() * pPlayer.getCurrentEra()) + 100)) / 100)/2)

			iPrice = ((iPrice - ((iPrice * pUnit.getUpgradeDiscount()) / 100))/2)
		return iPrice
 
My interpretation of the above code...
You are dividing both the base cost (fixed number) and the per hammer cost by 2. (This is already doing the full half cost adjustment - nothing more was needed.)
Then, if the player is an AI:
The handicap related modifier is applied (50%) and then you divide by 2 again.
Then the AI's per era modifier is applied and you divide by 2 yet again.
Then the unit's own upgrade discount (which, as far as I know is only a 100% discount for units lead by Great Generals - I don't remember any other) is applied and you divide by 2 one more time.

Net result:
For the player you are dividing by 2 once giving half cost.
For the AI you are dividing by 2 a total of 4 times for a net result of 1/16 due to the skunkworks, which is multiplied by the AI's discount of 50% (and any era related discount, which are normally none for Noble or lower difficulties, and 1 to 5% per era for higher) for a total of 1/32 (or lower, on difficulties with per era reductions). Thus, the skunkworks was not giving a 50% reduction, but a 93.75% (15/16) reduction resulting a total upgrade cost reduction of 96.875% (31/32) for the AI (excluding possible additional per Era discounts at high difficulty levels).

That's some discount. Almost, but not quite, free. For every 1 unit the AI could normally upgrade (sans skunkworks) it could upgrade 16 for the same cost where it has a skunkworks. A human with the skunkworks could only upgrade 2 in the same situation (or just 1 for the same cost the AI would pay for all 16, due to the AI's additional 50% discount).

How about either just before the "return iPrice", or just before the "if" (after the base price is set), you just do an "iPrice = (iPrice * 3) / 4" at the same indent level as the return to get the new 25% reduction (resulting in a final 63.5% reduction the AI when it's 50% reduction is also applied, so it pays 37.5% of what a human without skunkworks pays) instead of making multiple changes to the price that have a cumulative effect?

Fewer changes = less to go wrong.

By the way, I think that next to last line should be indented 1 level less so it is out of the if-block because the human players should also get the unit's upgrade discount. As it is, the human would stop getting free upgrades for units lead by great generals when they are located in a city with a skunkworks.
 
Top Bottom