Improvement Ideas: Move Troops from Borders Request

Make all "promise refusals" expire over time, like refusing to not spy, not settle nearby, not send missionaries, etc. Also do it for insults like "You'll pay for this in time."

The penalty for insults already decays over time, and I believe some of the others already do as well, but I can work on this.
 
I can remove the diplo penalty for refusing to make the promise, or put it on a timer.

Any other suggestions?

Which promise do you mean? Promise not to settle/buy tiles, or promise not to attack with the troops on the border?
 
I think the current system and penalties are mostly OK mostly, it's good that the AI isn't easy to trick. I think the trigger for them asking for me to move my troops is maybe a little be too sensitive though. They seem to be able to see my army coming from quite a distance. It's hard for me to tell when I should declare war to avoid the penalty which I assume is supposed to be for declaring war being a 'surprise'. I guess in future I should just declare war straight up if I want to avoid the penalty, but I want to at least organise my troops.

I mean, the whole thing wouldn't bother me as much if I felt I could use it in the same way. I have no idea how close I can get before incurring the penalty though, whereas it feels like the AI 'knows' where those boundaries are and can use that undersanding of the system to avoid such penalties (or at least make the most benefit of moving troops close) against other AIs.

After all, I rarely know someone is moving an army near me unless I can actually see them massing on my border. And in that case I do call them out, but usually that only gives me a turn or something because they were about to declare war anyway.

I think the things I'd like changed the most though is when I promise not to settle near someone and then I capture and liberate a nearby city-state. Like, chill, I'm not settling a city, I'm not even expanding through warfare - I just brought someone back from the dead. But it registers as settling a new city and therefore breaking the promise.
 
Btw, does "You'll pay for this..." help me any better than "Very well..."?

"You'll pay for this in time" does nothing if it's said in response to a declaration of war, but otherwise, the insulting response may prompt them to declare war on you. If they do not declare war, their approach is reset to NEUTRAL temporarily. Also, it incurs a diplomatic penalty, which is shown by the opinion modifier "Your recent diplomatic actions disappoint them."

"Very well" does not result in this.

So, if you want to provoke the other leader, you can go with "You'll pay for this in time" to goad them into declaring war, avoiding warmongering penalties for doing so yourself.

Which promise do you mean? Promise not to settle/buy tiles, or promise not to attack with the troops on the border?

The military promise - not to attack with troops on the border.

I think the current system and penalties are mostly OK mostly, it's good that the AI isn't easy to trick. I think the trigger for them asking for me to move my troops is maybe a little be too sensitive though. They seem to be able to see my army coming from quite a distance. It's hard for me to tell when I should declare war to avoid the penalty which I assume is supposed to be for declaring war being a 'surprise'. I guess in future I should just declare war straight up if I want to avoid the penalty, but I want to at least organise my troops.

I mean, the whole thing wouldn't bother me as much if I felt I could use it in the same way. I have no idea how close I can get before incurring the penalty though, whereas it feels like the AI 'knows' where those boundaries are and can use that undersanding of the system to avoid such penalties (or at least make the most benefit of moving troops close) against other AIs.

After all, I rarely know someone is moving an army near me unless I can actually see them massing on my border. And in that case I do call them out, but usually that only gives me a turn or something because they were about to declare war anyway.

I think the things I'd like changed the most though is when I promise not to settle near someone and then I capture and liberate a nearby city-state. Like, chill, I'm not settling a city, I'm not even expanding through warfare - I just brought someone back from the dead. But it registers as settling a new city and therefore breaking the promise.

The AI does receive the same diplo penalties with other AIs, including the global one if they break the promise they make to you.

Liberating a city breaking a no settle promise sounds like a bug.
 
"You'll pay for this in time" does nothing if it's said in response to a declaration of war, but otherwise, the insulting response may prompt them to declare war on you. If they do not declare war, their approach is reset to NEUTRAL temporarily. Also, it incurs a diplomatic penalty, which is shown by the opinion modifier "Your recent diplomatic actions disappoint them."

"Very well" does not result in this.
...
Thanks. Actually, I thought only of the "You'll pay for this in time" answer after a DOW. I can't remember when else I could use it. After denounciation maybe? In that case, their approach probably will not be reset to NEUTRAL?
 
The AI does receive the same diplo penalties with other AIs, including the global one if they break the promise they make to you.

Liberating a city breaking a no settle promise sounds like a bug.

Yes, I understand. I just mean the AI know where that boundary is for their troops being picked up. It's not intuitively clear to me. Like, I think I'm being stealthy but actually I get a diplo penalty for not moving away from their borders, so I should have declared war rather then letting them send a complaint.

OK, I'll keep that in mind and report it if it happens again. I think I understand why it happens though - you have to capture the city before you decide what to do with it (burn, liberate, annex etc.) and capturing cities in picked up by the no settle promise in the same way as settling them. I guess I assumed that was intended behaviour.
 
Thanks. Actually, I thought only of the "You'll pay for this in time" answer after a DOW. I can't remember when else I could use it. After denounciation maybe? In that case, their approach probably will not be reset to NEUTRAL?

It pops up when the AI denounces you or does certain other things - like when they get mad at you for stealing their CS ally.

And if they don't declare war, their approach is set to NEUTRAL until it's next updated (which usually happens during turn cycling). This includes denouncements, although you won't be able to see the change.
 
So I've seen a fair number of complaints about the current mechanics for the AI requesting that you move your troops from their borders.

I'll post the current code here, translated into plaintext. If you have any suggestions on how to improve the mechanic, I'd love to hear any replies.

The AI will send a request that you move your troops from their borders if the following conditions are met:
Code:
CvDiplomacyAI::DoAggressiveMilitaryStatement

(note: Player = the player whose troops are near the AI's borders)

Check if *one* of these two conditions are true:
- Player has a military aggressive posture of HIGH this turn and they didn't last turn
- Player has a military aggressive posture of MEDIUM this turn, and last turn they had a posture of NONE

If either condition is true, then send the statement, unless one of these is true:
- Player is already at war with this AI;
- Player is not able to declare war on this AI;
- Player resurrected this AI;
- Player and this AI have a Declaration of Friendship;
- AI has given this player Open Borders in AI's lands;
- Player and this AI are at war with any common foe;
- Player is at war with any of this AI's neighbors (player proximity NEIGHBORS);
- AI has already sent this message within the past 40 turns.

If none of the above conditions are true, the message is sent.

Military aggressive posture is determined by the following function:
Code:
CvDiplomacyAI::DoUpdateOnePlayerMilitaryAggressivePosture

1. Don't run this function for teammates, unmet players, dead players, players with 0 cities, and Barbarians.

2. Don't run this function for players that AI has a Declaration of Friendship with or has given Open Borders to.

3. Store the military aggressive posture last turn, before we update it for this turn.

4. Loop through all of this player's units.

4a. If the unit is a non-combat or scouting unit, ignore it.
4b. If the unit is on a plot that we can't see, ignore it.
4c. Assume the unit has 2 movement. If it can't reach any of our cities within 4 turns of movement, ignore it.
4d. Assume the unit has 2 movement. If the player who owns the unit is at war with another player, AND this unit could reach one of that player's cities within 4 turns of movement, AND that other player is alive, then ignore it.

5. If we got here, then the unit is threatening to us. Add 10 threat value.

6. If the unit is within the player's own borders, halve the threat value to 5 (since they may just be defending their own lands).

7. If threat value is...
80 or higher: Aggressive posture is INCREDIBLE.
50-75: Aggressive posture is HIGH.
30-45: Aggressive posture is MEDIUM.
10-25: Aggressive posture is LOW.
0-5: Aggressive posture is NONE.

NOTES
- You are supposed to be able to request that the AI move their troops if you are not at war with them, you have not requested this within the past 30 turns, and the AI's aggressive posture towards you is at least MEDIUM.

- If aggressive posture towards the AI is at least LOW, you will see the opinion modifier "Your military deployment is threatening."

- If it is at least HIGH, you will see the opinion modifier "Your military deployment is extremely threatening."

Rather than the AI asking you to move your troops at threat MEDIUM, it should instead begin immediately building melee and ranged units for 10 turns... then ask you if you plan on attacking.
 
(The AI should only ask if the threat level is still MEDUIM or higher after the 10 turns)
 
Rather than the AI asking you to move your troops at threat MEDIUM, it should instead begin immediately building melee and ranged units for 10 turns... then ask you if you plan on attacking.

This is essentially the suggestion I put forward. Once they feel threatened, begin appropriate preparations (moving units, building new ones, etc) and/or switch the "Move or Declare" prompt with a simple warning ("I see your army. I suggest you reconsider any ill intentions you might have.") so that the player knows they've triggered it.
 
Rather than the AI asking you to move your troops at threat MEDIUM, it should instead begin immediately building melee and ranged units for 10 turns... then ask you if you plan on attacking.

This is essentially the suggestion I put forward. Once they feel threatened, begin appropriate preparations (moving units, building new ones, etc) and/or switch the "Move or Declare" prompt with a simple warning ("I see your army. I suggest you reconsider any ill intentions you might have.") so that the player knows they've triggered it.

Defensive preparations are handled by the military/tactical AI, not the diplo AI; while they can overlap, it's a complicated process and would require new memory values - and I'd be reluctant to step into ilteroi's domain. The AI already readies itself if it notices war preparations nearby, I believe.

Also, 10 turns is too long a time to wait; when an AI arrives on your borders with an army, you generally only have a turn or two before war is declared.

After seeing the feedback here, what I plan on doing to address the military promise issue is:
- Remove the penalty for refusing to move your troops (war already carries enough penalties, a permanent penalty is unjustified, the player is not warned about it, and putting it on a timer is not very useful since Opinion is irrelevant while at war).

- Put the penalties for breaking the promise on a timer rather than having them be permanent.

- Treat the global penalty for breaking the promise as a backstabbing penalty, which will be addressed in my rework of those (for instance, a surprise war with an AI will not trigger a penalty with that AI's mortal enemies).

- Reduce the AI's sensitivity to lower the likelihood of accidental triggers. I'm thinking of using the unit's CS (since currently, the presence of five Warriors would threaten an AI even if they had Giant Death Robots; conversely, one Giant Death Robot wouldn't threaten an AI who had a single city and no units), making the AI less sensitive to units that are farther from its lands, and trying to tune it to respond to clusters of units more than lone wolves.

Hopefully this rework will fix the issues people have had with the mechanic.

On the topic of borders, would it be possible to pay 1gpt for open borders with a neutral CS? I'm tired of them getting mad at me.

Probably, but that's outside the scope of my expertise, sorry. :)

Maybe try posting on Github about it.
 
Last edited:
@Recursive

Spoiler :

noHCXma.jpg

N72mqrR.jpg

 
Ah. How long were those troops there for?

I took that screen a turn or two after they moved into position. She later asked ME to move my units after a CS-granted unit spawned nearby, and then declared a few turns later.
 
Last edited:
Back
Top Bottom