So, I was noticing something strange. . .
I was Friendly with another empire, yet they refused to make deals with me in many many areas. What was going on?
Well, I figured it out. CvTeamAI::AI_getAttitude!
See, I had defeated a number of nations. And the team attitude calculates the average attitude between the two teams -- including any vassals!
What is worse is that it doesn't average the attitude value -- it averages the attitude level.
What is worse is that this measurement is asymmetric. It iterates over each member of this team, sums their attitude with each member of the other team and any vassals of that other team, and then divides by the number of such pairs.
This quickly makes forming any non-forced diplomatic deal nearly impossible. Especially after you take out and force capitulation on any enemy of an empire.
Similarly, forming a colony makes forming an alliance ridiculously hard: I believe the new colony starts out at neutral with every other empire. And, because the UI only gives player-to-player attitude, it is really confusing when a friendly empire refuses a deal because "we don't like you enough": when it turns out the problem that they don't like the 5 city rump-colony you built centuries ago.
Thoughts on how to fix this issue:
1> Average the attitude Value of each participant.
2> Weigh the totals by Population of each player.
3> Count vassals as significantly less important than members of the team.
...
Another approach might be to try to give a newly formed colony the same base diplomatic status that you have -- then let it diverge from there. This prevents some of the "my ally made a colony, who decided I am it's worst enemy out of sheer randomness", or "I made a deal with a newly formed colony of a friend, which turned out to be (out of nowhere) the worst enemy of another friend".
(File in question: CvTeamAI.cpp, around line 4082).
I was Friendly with another empire, yet they refused to make deals with me in many many areas. What was going on?
Well, I figured it out. CvTeamAI::AI_getAttitude!
See, I had defeated a number of nations. And the team attitude calculates the average attitude between the two teams -- including any vassals!
Code:
if (eTeamLoop == eTeam || GET_TEAM(eTeamLoop).isVassal(eTeam) || GET_TEAM(eTeam).isVassal(eTeamLoop))
What is worse is that it doesn't average the attitude value -- it averages the attitude level.
What is worse is that this measurement is asymmetric. It iterates over each member of this team, sums their attitude with each member of the other team and any vassals of that other team, and then divides by the number of such pairs.
This quickly makes forming any non-forced diplomatic deal nearly impossible. Especially after you take out and force capitulation on any enemy of an empire.
Similarly, forming a colony makes forming an alliance ridiculously hard: I believe the new colony starts out at neutral with every other empire. And, because the UI only gives player-to-player attitude, it is really confusing when a friendly empire refuses a deal because "we don't like you enough": when it turns out the problem that they don't like the 5 city rump-colony you built centuries ago.
Thoughts on how to fix this issue:
1> Average the attitude Value of each participant.
2> Weigh the totals by Population of each player.
3> Count vassals as significantly less important than members of the team.
...
Another approach might be to try to give a newly formed colony the same base diplomatic status that you have -- then let it diverge from there. This prevents some of the "my ally made a colony, who decided I am it's worst enemy out of sheer randomness", or "I made a deal with a newly formed colony of a friend, which turned out to be (out of nowhere) the worst enemy of another friend".
(File in question: CvTeamAI.cpp, around line 4082).