"We couldn't betray people we actually don't care about!"

TheMeInTeam

If A implies B...
Joined
Jan 26, 2008
Messages
27,995
Joao is cautious with mao. Joao does not plot war at pleased, but HE ISN'T PLEASED WITH MAO.

Yet, an attempt to bribe him shows that he couldn't betray a close friend...not that he doesn't like me enough.

View attachment TMIT AD-0001.CivBeyondSwordSave
 
Hidden modifiers, maybe? Something to do with peaceweight?

AFAIK hidden modifiers, while not displayed (obviously), DO impact the displayed disposition. That's why you see AIs that are pleased at +0 or friendly at +8.

That's not what's going on here. Joao is willing to DoW at cautious normally AFAIK but is refusing to do so here (note that in a couple turns from now, not only is this message gone, but Joao is in fact plotting war, and Mao is in fact the target without any interference from me).
 
CvTeamAI.cpp said:
for (iI = 0; iI < MAX_PLAYERS; iI++)
{
if (GET_PLAYER((PlayerTypes)iI).isAlive())
{
if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
{
if (eAttitude <= GC.getLeaderHeadInfo(GET_PLAYER((PlayerTypes)iI).getPersonalityType()).getDeclareWarRefuseAttitudeThreshold())
{
return DENIAL_ATTITUDE;
}
}
}
}

eAttitudeThem = AI_getAttitude(eWarTeam);

for (iI = 0; iI < MAX_PLAYERS; iI++)
{
if (GET_PLAYER((PlayerTypes)iI).isAlive())
{
if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
{
if (eAttitudeThem > GC.getLeaderHeadInfo(GET_PLAYER((PlayerTypes)iI).getPersonalityType()).getDeclareWarThemRefuseAttitudeThreshold())
{
return DENIAL_ATTITUDE_THEM;

unless I am much mistaken it returns DENIAL_ATTITUDE_THEM if current attitude towards the target is better than DeclareWarThemRefuseAttitudeThreshold. Joao has that set to Annoyed - so he needs to be Annoyed or Furious to be bribed into a war based on relation towards the target. He also has DeclareWarRefuseAttitudeThreshold set to Cautious which has a lower than or equal in that same code so he needs to be Cautious, Pleased or Friendly towards you so that he doesn't return DENIAL_ATTITUDE before checking his relation with the target.

Esentially its working as designed - He does not start plotting a war at pleased by himself, doesn't talk to you about being bribed into a war against someone else unless he is at least cautious towards you and will not accept being bribed into war with someone he is not at least annoyed furious with.
 
This is a very old Civ IV issue : the fact that some LH are coded in a way that they will not acept be bribed to war a target they would DOW by their own. This is not a bug , just poor implementation.
 
I guess my eyes bugged ori, because it is your spreadsheet I use X_X. I'm happy with it too (even mentioned it in one of the polycast episodes). Sorry. I must have whiffed on a line somehow.
 
unless I am much mistaken it returns DENIAL_ATTITUDE_THEM if current attitude towards the target is better than DeclareWarThemRefuseAttitudeThreshold. Joao has that set to Annoyed - so he needs to be Annoyed or Furious to be bribed into a war based on relation towards the target. He also has DeclareWarRefuseAttitudeThreshold set to Cautious which has a lower than or equal in that same code so he needs to be Cautious, Pleased or Friendly towards you so that he doesn't return DENIAL_ATTITUDE before checking his relation with the target.

Esentially its working as designed - He does not start plotting a war at pleased by himself, doesn't talk to you about being bribed into a war against someone else unless he is at least cautious towards you and will not accept being bribed into war with someone he is not at least annoyed furious with.
I think the confusion comes from how some comparisons are "greater than" and others are "greater or equal". We (the people who use the chart) can't know if it is > or >= unless we check the code... which is not possible...

It would be helpful if you changed the values in the excel file so they are either all of > (or <) type, or of >= (or <=) type (in this case changing ANNOYED to FURIOUS) to remove all confusion. Either that or put the sign near the variable name like so :

DeclareWarRefuseAttitudeThreshold > ANNOYED CAUTIOUS PLEASED
DeclareWarThemRefuseAttitudeThreshold >= PLEASED CAUTIOUS CAUTIOUS

Not for every single variable in the file, just the important / frequently used ones. And actually the second possibility (adding a > near the variable names) is a better solution because it will be easy to see which variables are precise and which other are not clear yet.
 
Esentially its working as designed - He does not start plotting a war at pleased by himself, doesn't talk to you about being bribed into a war against someone else unless he is at least cautious towards you and will not accept being bribed into war with someone he is not at least annoyed furious with.
He may accept a war proposal if he is annoyed. The denial (not acceptance) happens only it he is above that value specified (his case below).
<DeclareWarThemRefuseAttitudeThreshold>ATTITUDE_ANNOYED</DeclareWarThemRefuseAttitudeThreshold>

I thought it was known that Joao cannot be bribed at cautious.
 
He may accept a war proposal if he is annoyed. The denial (not acceptance) happens only it he is above that value specified (his case below).
<DeclareWarThemRefuseAttitudeThreshold>ATTITUDE_ANNOYED</DeclareWarThemRefuseAttitudeThreshold>
:hmm: so I was right originally and then corrected myself to include an error - thanks :)
 
Back
Top Bottom