summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ai.h2
-rw-r--r--ai_pathfinder.c10
2 files changed, 11 insertions, 1 deletions
diff --git a/ai.h b/ai.h
index 8d60de149..479fd27aa 100644
--- a/ai.h
+++ b/ai.h
@@ -37,6 +37,8 @@
#define AI_PATHFINDER_PENALTY 150
// The penalty given to a tile that is going up
#define AI_PATHFINDER_TILE_GOES_UP_PENALTY 450
+// The penalty given to a tile which would have to use fundation
+#define AI_PATHFINDER_FOUNDATION_PENALTY 100
// Changing direction is a penalty, to prevent curved ways (with that: slow ways)
#define AI_PATHFINDER_DIRECTION_CHANGE_PENALTY 200
// Same penalty, only for when road already exists
diff --git a/ai_pathfinder.c b/ai_pathfinder.c
index fe8c4d5ca..33fdba928 100644
--- a/ai_pathfinder.c
+++ b/ai_pathfinder.c
@@ -394,7 +394,11 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
}
// We should give a penalty when the tile is going up or down.. this is one way to do so!
- // Too bad we have to count it from the parent.. but that is not so bad
+ // Too bad we have to count it from the parent.. but that is not so bad.
+ // We also dislike long routes on slopes, since they do not look too realistic
+ // when there is a flat land all around, they are more expensive to build, and
+ // especially they essentially block the ability to connect or cross the road
+ // from one side.
if (parent_ti.tileh != 0 && parent->path.parent != NULL) {
// Skip if the tile was from a bridge or tunnel
if (parent->path.node.user_data[0] == 0 && current->user_data[0] == 0) {
@@ -403,12 +407,16 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
// Maybe is BRIDGE_NO_FOUNDATION a bit strange here, but it contains just the right information..
if (r >= 15 || (r == 0 && (BRIDGE_NO_FOUNDATION & (1 << ti.tileh)))) {
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
+ } else {
+ res += AI_PATHFINDER_FOUNDATION_PENALTY;
}
} else {
if (!(IsRoad(parent->path.node.tile) && IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE))) {
r = GetRoadFoundation(parent_ti.tileh, AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
if (r >= 15 || r == 0)
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
+ else
+ res += AI_PATHFINDER_FOUNDATION_PENALTY;
}
}
}