You broke your promise to move your troops away from the border

Status
Not open for further replies.
But so what? Should the game only be played at King because that's where the rule are closest to even?

Is this implying a logical fallacy? I'd like to confirm what you're actually arguing before I make a point against it. It seems to me that you're suggesting this is akin to playing a higher difficulty, where the AI gets bonuses. However, that isn't the case; as even within the framework of resource/unit/output bonuses the AI generally has to follow the same rules and has the same victory conditions. This mechanic is an example of a glaring and pointless break from that.

Any mechanism that forces the human player to be more strategic improves the game experience.

Careful micro to avoid putting units near someone's border isn't strategy. It's micromanagement, and of a fussy variety where the hardest bit of "strategy" is more of a mundane game of "keep away from these hexes". All it does is straight penalize new or careless playes; once the mechanic is known it brings very little, if any, serious thought.

What you write about game design may be valid, but I don't find it particularly on point. Between (1) leaving this particular feature alone, (2) removing it, or (3) the changes you suggest -- I think (1) results in the most best (most interesting, challenging) play experience.

It's one thing to think that, but for the purposes of discussion please provide a logical reason why that is the case. "Handle this mechanic the same way in the vast majority, if not virtually all cases" is not how one would typically define strategic depth, but it is how people suggest to treat this mechanic in practice. It carries about as much weight towards "strategy" as moving a scout you already own onto a hex containing a ruin with no enemies near it. Most players will not have to engage in serious consideration as to whether that's a good move or not.

No one has provided evidence (anecdote or code inspection) that this isn't the case.

Hmm...the post a bit above didn't move the troops, but the thing had a timer on it regardless. Perhaps we should test this and settle whether it's even an issue before discussing further, since if it does drop the NAP immediately after moving away then I've nothing to argue against anymore.
 
No one has provided evidence (anecdote or code inspection) that this isn't the case.

Depends on what you accept as evidence. I know for a fact the promise expires at some point without ever moving a since troop away from the borders (I got no negative modifiers when it popped a second time and I declared at that time as I posted earlier in this thread).

And I have moved all my troops away from the borders and still gotten the penalty when I was forced to DoW due to a Defensive Pact (of course this was back when G&K came out, don't bother moving my troops away from the border anymore since that would usually leave one of my cities undefended and I don't trust the AI enough to do that... and I don't bother with DPs anymore since my AI "allies" tend to turn on each other and cause me to become a backstabber).
 
Careful micro to avoid putting units near someone's border isn't strategy. It's micromanagement, and of a fussy variety where the hardest bit of "strategy" is more of a mundane game of "keep away from these hexes". All it does is straight penalize new or careless playes; once the mechanic is known it brings very little, if any, serious thought.
If you're prepping a sneak attack, "don't get seen" is kind of a basic principle. It's about as much micromanagement as having to move units individually once the war starts. You're still playing "keep away from these hexes," but the hexes in question change around enemy units.
 
No one has provided evidence (anecdote or code inspection) that this isn't the case.

What evidence is there for proof that this IS the case beyond anecdotes? If there was solid code evidence that this was the case, then this discussion would have ended long ago, and if I missed it through the course of this very long thread then I would appreciate seeing it because I may very well have read over it.

I know I have had instances of being told to move, moved my units away to defend against a "sneak attack"(spoilers: the AI is bad at these), made peace, and then went back to attack the other person only to get ed at for breaking my promise. Did I move every single unit a sufficient distance away? I can't say for sure because I don't know what sufficient distance is.

Does this prove or disprove anything either way? Of course not. But it's the same as "evidence" that has been provided previously for the "move away and the NAP drops" theory.

If you're prepping a sneak attack, "don't get seen" is kind of a basic principle. It's about as much micromanagement as having to move units individually once the war starts. You're still playing "keep away from these hexes," but the hexes in question change around enemy units.

I have no problem with this in principle; the player should not be able to move their units and camp them wherever they want for a perfect attack(though the AI should not be able to walk their units around your borders for 15 turns for a perfect attack, either...). But it is incredibly annoying when I have a lot of units inside my own borders at what seems to me a pretty reasonable distance only for the AI to demand I move my troops farther away. Even if I don't intend to attack them, this hamstrings my future options if I do need to attack them.

Worse yet are the situations I've have detailed numerous times before, where the AI will A)Settle a new city on your borders and demand you move your troops or B)Citadel bomb you and demand you move your troops away from their borders that they just stole from you. These are particularly egregious flaws if you ask me.
 
Games are defined by their rules. The act of hiding them is not a rational outcome unto itself. That you can hide them and have rational outcomes doesn't change that reality; it means that the rules were evident through implicit factors rather than explicit ones. As long as the player understands the implications to mean what the rules actually are, that holds up decently, but it's still a needless pitfall.

As we seem to agree on the theory, its application in real world where I'll focus. If you and I were in a room discussing how to help the AI against sneak attacks we could :


Whatever conditions prompt the request are the same ones that must not be true. The simplest implementation by far (and likely sufficient) is to have the AI consistently bring this message up when the criteria is met, and drop the NAP when the criteria is no longer met. If the criteria is sufficiently strict, it would be difficult to get a true successful sneak attack, at least until air power, but you can do that right now anyway ^_^.

Do that. Which has even more implications we'd need to sort through. Or, we could just implement NAP or DOW and have it expire within N number of turns which is consistent with how we handle other game mechanics...and rather easy to implement. Which means we can finish up our bit of code in time to get donuts.

:D. This kind of behavior is par for the course in every civ iteration, including all of civ V up until now.

Ha! Good for a laugh, if only all precedents were good ones :)


Then again, maybe a force in a heightened threat due to military on its borders should refuse war bribes ;). I'm not sure if Firaxis wants the headache of selective stabbing penalties, but in the case of a DoF dogpile it would make sense if your allies didn't mind your lie while anybody who isn't involved in this war did.

Bolded bit is the key. Is there a better way ? Without question. Is the better way easier to implement ? I truly doubt it. So its a matter of priorities, in which case for me its not a terribly high one. If they can do some of the things mentioned in this thread I'd be all for it, its just a question of what I'd be willing to do without.

For the record my initial response when getting the DOW or NAP from an AI was "Oh you smart bastard". I was rather pleased with the "smartness" of the AI. Even more pleased when I decided I could live with a lie and told him I wouldn't attack. Then smugly attacked, only to watch the smugness turn into horror as I noticed the negative modifier pop up. In an odd way I enjoyed it. Never did it turn into rage or disgust with the mechanic.
 
Do that. Which has even more implications we'd need to sort through.

Please state them. I'm suggesting using the existing mechanic as an on/off switch. What are these nasty implications, aside from what boils down to "much shorter NAP"?

Or, we could just implement NAP or DOW and have it expire within N number of turns which is consistent with how we handle other game mechanics...and rather easy to implement. Which means we can finish up our bit of code in time to get donuts.

??? Right now, the game is obviously checking for the presence of units near borders. What code is different exactly? Are you telling me an on/off switch is somehow harder than a stored, longer NAP? I'd be interested to hear how that works.

Ha! Good for a laugh, if only all precedents were good ones

Indeed. I could do without the "grinds the game into the mud with excessive use of processing on low yield calculations and still moves terribly" precedent that got carried over from civ IV, among a number of other things. But, AI abuse can be fun, and it is certainly the standard even today.

Bolded bit is the key. Is there a better way ? Without question. Is the better way easier to implement ? I truly doubt it.

They implemented this junk in the first place. There's no reason they couldn't just make it decay over, say, 5 turns instead of a huge amount of time (and immediately reprompt if units are still there, since we have been presented evidence that the game is already capable of that). That's likely around the level of an XML number switch...except for some reason this one isn't clearly defined in the XML. So much for nice, easy coding.

I'm not going to bite on how one's personal reaction to a broken mechanic on the facts is relevant in any way ;).
 
Please state them. I'm suggesting using the existing mechanic as an on/off switch. What are these nasty implications, aside from what boils down to "much shorter NAP"?

Suppose it depends on what the trigger is...number of units, and how it defines the territory as well as how often you get notified. Notification for each offense would get tedious if you were truly "just passing through" what we consider today as neutral territory.


Indeed. I could do without the "grinds the game into the mud with excessive use of processing on low yield calculations and still moves terribly" precedent that got carried over from civ IV, among a number of other things. But, AI abuse can be fun, and it is certainly the standard even today.

I'm all for leaving bits of AI abuse in game.


They implemented this junk in the first place. There's no reason they couldn't just make it decay over, say, 5 turns instead of a huge amount of time (and immediately reprompt if units are still there, since we have been presented evidence that the game is already capable of that). That's likely around the level of an XML number switch...except for some reason this one isn't clearly defined in the XML. So much for nice, easy coding.

I'm not against increasing the rate of decay. Quick and easy fix.


I'm not going to bite on how one's personal reaction to a broken mechanic on the facts is relevant in any way ;).

Good, I'd like to continue to pretend my reaction is relevant! If for nothing else than to highlight that so much of this comes down to personal preference, which makes points that derive from game design theorem rather irrelevant.
 
For the record my initial response when getting the DOW or NAP from an AI was "Oh you smart bastard". I was rather pleased with the "smartness" of the AI. Even more pleased when I decided I could live with a lie and told him I wouldn't attack. Then smugly attacked, only to watch the smugness turn into horror as I noticed the negative modifier pop up. In an odd way I enjoyed it. Never did it turn into rage or disgust with the mechanic.

This was my experience exactly. Thank you for articulating it so well.
 
Suppose it depends on what the trigger is...number of units, and how it defines the territory as well as how often you get notified. Notification for each offense would get tedious if you were truly "just passing through" what we consider today as neutral territory.

It seems like right now the AI just checks the #units within a certain number of hexes from its borders, and if that number is past a certain small amount, you get the demand.

which makes points that derive from game design theorem rather irrelevant.

That depends which aspects of theorem one discusses. Controls/bugs/running on specs/functional features are pretty non-negotiable regardless of preference (it's just a matter of how much priority they get, but these each require non-zero priority).

For an equal game experience, players should have the same rules...there are lots of ways to give one side a handicap without altering the rules, many of which are in place already.
 
You can have any number of units in your territory adjacent to his border.

I don't this this is exactly true either. I am doing a late game war, took an okay peace offer after taking a couple AI cities. You know how they build with only 3 hexes between cities, so I had four rocket artillery within range of one of his cities, but in my territory. I had no units in his lands, and no units in neutral territory (precious little of that anyway). Sure enough, a few turns after the peace deal expired, I got the pop-up.
 
Not sure exactly what you are debating, but the Non-attack promise lasts for 20 turns regardless of game speed:

Code:
// Military Promise
	if(IsPlayerMadeMilitaryPromise(eLoopPlayer))
	{
		ChangePlayerMilitaryPromiseCounter(eLoopPlayer, 1);

		// Expired?
		if(GetPlayerMilitaryPromiseCounter(eLoopPlayer) > 20)
			{
			SetPlayerMadeMilitaryPromise(eLoopPlayer, false);
			SetPlayerMilitaryPromiseCounter(eLoopPlayer, -1);
			}
	}

CvDiplomacyAI.cpp: line 20199
 
Not sure exactly what you are debating, but the Non-attack promise lasts for 20 turns regardless of game speed

I was under the impression that one of the various settings on GameSpeed affected that (at least it seemed to while I was tweaking my mods - unintentionally so I haven't narrowed down between DealDuration, OpinionDurationPercent or RelationshipDuration).
 
It seems like right now the AI just checks the #units within a certain number of hexes from its borders, and if that number is past a certain small amount, you get the demand.

My primary problem with this is really a problem with the troop movement game mechanic. You know, where when you are moving your army about, and you pick some distant tile and tell your guy to go there -- and then he chooses the stupidest possible route.

Yes maybe I should micromanage every single movement every single time, but that would make the game boring and not fun to play. When I'm not at war and there's no need to get there in an exact number of moves, I let the AI choose its dumb routes.

However, this sometimes means that it sends a whole lot of units skirting the border of another civ. Maybe a civ I was going to attack, often it is. Maybe someone else. And I get this demand when it would have been super easy to pick a route to the destination that would NOT have massed troops on a border.

I think the real solution is to implement waypointing for movements, where instead of just picking a destination, I can pick a path, "first go here, then go there, then go to the destination" -- and hopefully have it be intelligent and/or just wake up when it runs into a problem.

If I could do that, then without much bother I could set up a route that steers clear of enemy borders and then I should be able to avoid ever getting this demand by accident.
 
My primary problem with this is really a problem with the troop movement game mechanic. You know, where when you are moving your army about, and you pick some distant tile and tell your guy to go there -- and then he chooses the stupidest possible route.

Yes maybe I should micromanage every single movement every single time, but that would make the game boring and not fun to play. When I'm not at war and there's no need to get there in an exact number of moves, I let the AI choose its dumb routes.

However, this sometimes means that it sends a whole lot of units skirting the border of another civ. Maybe a civ I was going to attack, often it is. Maybe someone else. And I get this demand when it would have been super easy to pick a route to the destination that would NOT have massed troops on a border.

I think the real solution is to implement waypointing for movements, where instead of just picking a destination, I can pick a path, "first go here, then go there, then go to the destination" -- and hopefully have it be intelligent and/or just wake up when it runs into a problem.

If I could do that, then without much bother I could set up a route that steers clear of enemy borders and then I should be able to avoid ever getting this demand by accident.

Sounds liek to me you chose the route poorly not the AI.
You can set up waypoints, you just have to do it yourself.
You're like eh, send it halfway around the world with no detours set up U lazy boy u.

I'm like, I set up two rally points, Send all the soldiers to south america then after all the units done pathfinding their way there. Then I tell them to move to south africa.

And after they done pathfinding.

I tell them to go up north to egypt to kill ramesses for wonder hogging. ;)

Successful Ambushes is successful.

Being lazy doesn't result in successful ambushes.

Think! I play on huge maps all the time.
Before u get all upset.. check this thread out. http://forums.civfanatics.com/showthread.php?t=503954
Just small taste of what I usually do.
 
I was under the impression that one of the various settings on GameSpeed affected that (at least it seemed to while I was tweaking my mods - unintentionally so I haven't narrowed down between DealDuration, OpinionDurationPercent or RelationshipDuration).

Code does not lie.

It's semi-hard coded inside the CvDiplomacyAI.cpp code file that is part of the dll. To modify, we have to change the dll.

They will probably export the variable to xml in a future patch. Right now, it's 20 turns at any speed.

Better than the mythical "50 turns" that is plain wrong.
 
Code does not lie.

It's semi-hard coded inside the CvDiplomacyAI.cpp code file that is part of the dll. To modify, we have to change the dll.

They will probably export the variable to xml in a future patch. Right now, it's 20 turns at any speed.

Better than the mythical "50 turns" that is plain wrong.

Are you sure there's no multiplier applied to this anywhere? Or are things like trade agreements etc. hardcoded for each difficulty?

This is a genuine question, you're far more familiar with the code than I am if you're willing to dig through all the gigantic C++ files :p

Either way, great find.
 
Code does not lie.

It's semi-hard coded inside the CvDiplomacyAI.cpp code file that is part of the dll. To modify, we have to change the dll.

They will probably export the variable to xml in a future patch. Right now, it's 20 turns at any speed.

Better than the mythical "50 turns" that is plain wrong.

Find the code in that file for other agreements and see if it has a fixed number or a variable. If it doesn't list a variable, then there's somewhere else in the code that a multiplier is applied to those numbers.

Is this in GlobalDefines.xml? I can't seem to find it there.

That's in GlobalDiplomacyAIDefines.xml under the AI subdirectory, I believe.
 
Find the code in that file for other agreements and see if it has a fixed number or a variable. If it doesn't list a variable, then there's somewhere else in the code that a multiplier is applied to those numbers.

Nope.

That piece of code is what checks for the timing of the Non-attack promise (called military promise inside the code). If the counter goes over 20, it resets the counter and the Boolean that flags the player as having promised not to attack. There is no other multiplier or test; that IS the test.

Therefore, it lasts 20 turns. They may have changed the number in the last patches, I don't have older files, but right now it's 20 turns.

Regarding other agreements, yes, there are some multipliers. In fact, they misused their own multipliers for the new DoF and Denouncement counters, creating a little bug for game speeds different than standard (check the Bug reports and the Global Relations mod where it has been fixed). All the diplo checks are inside CvDiplomacyAI.cpp... in fact, if you really want to "understand" the diplo AI, this file reading is a must (and fun).
 
Status
Not open for further replies.
Top Bottom