Repository navigation
Units shouldn't route through rival cities #371
Description
Activity
You can add another walker, which checks that tile hasn't enemy city.
https://github.com/C7-Game/Prototype/blob/Development/C7Engine/AI/Pathing/EdgeWalker.cs
This walker could be passed to DijkstraAlgorithm here: https://github.com/C7-Game/Prototype/blob/Development/C7Engine/AI/Pathing/DijkstrasAlgorithm.cs#L23Reacted by QuintillusWhat actually happens when the AI tries to do this? Does the unit lose/waste its MP? Is the AI waiting for the path to clear?
What actually happens when the AI tries to do this? Does the unit lose/waste its MP? Is the AI waiting for the path to clear?
It gets the city tile as the next tile on its path, and tries to move there, but can't, so it stays where it is.
I believe that the next turn it gets the tile after the city on its path, which it also can't move to because it doesn't neighbor that tile, so it stays put.
There will be future enhancements required too, around paths becoming invalid after they are assigned. #213 is related to that problem.
I've an easy way to reproduce this issue, we can modify the default save to put an enemy city right next to our start, and give ourselves a warrior.
If you start the game via "new game", wait one turn, and then try to walk to the other side of the American city, we try to path right through the city.
https://github.com/C7-Game/Prototype/compare/twrner/patch-for-non-defending-units?expand=1
Verified this is fixed by the intent-based movement refactor: a rival city tile is rejected as an intermediate path node for human and AI units, at peace and at war, while remaining targetable as an attack destination. Non-combat units can never enter rival cities at all.
Added 7 regression tests in PR #1002 locking in the behavior. I recommend closing this as fixed once the PR merges.
- linked a pull request that will close this issueSettler re-picks a destination when its chosen spot becomes unreachable (#213) #1002
on Sep 28, 2026 - removed a link to a pull requestSettler re-picks a destination when its chosen spot becomes unreachable (#213) #1002
on Oct 4, 2026
While play-testing another change, I noticed an AI-controlled Carthaginian settler trying to go through Athens.
From the console output I can tell that it is trying to reach the tile indicated with the purple star. It's been stuck at the same tile for a few turns and the obvious conclusion is that it is trying to go north through Athens.
We should exclude rival cities from our routing calculations, likely by setting the distance to infinite (unless there's a future option enable to allow passage through friendly cities, like in Civ4. We could add that check in at this point so things are flexible, even if it always returns false for now).
This is a small incremental step towards better routing. I've listed it as a bug since the settler gets permanently stuck (well, unless the city gets destroyed perhaps), though I expect many of those improvements (e.g. respecting lack of right of passage once we have borders) will be improvements.
There are also a few other non-related units-getting-stuck issues, many of which I suspect are due to the unit's goal no longer being achievable, rather than pathing.
This may optionally be added to Carthage, or done later for Dutch.