changeset 4273:bf5af70f273b draft

(svn r5901) -Fix [FS#253]: Differing price calculation for tunnels depending on starting point
author Darkvater <Darkvater@openttd.org>
date Tue, 15 Aug 2006 00:14:57 +0000
parents 9ac310afc549
children 2073fdfc4d26
files tunnelbridge_cmd.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -465,8 +465,12 @@
 
 	ret = DoCommand(start_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 	if (CmdFailed(ret)) return ret;
-	cost = _price.build_tunnel + ret;
 
+	/* XXX - do NOT change 'ret' in the loop, as it is used as the price
+	 * for the clearing of the entrance of the tunnel. Assigning it to
+	 * cost before the loop will yield different costs depending on start-
+	 * position, because of increased-cost-by-length: 'cost += cost >> 3' */
+	cost = 0;
 	delta = TileOffsByDir(direction);
 	end_tile = start_tile;
 	for (;;) {
@@ -480,10 +484,13 @@
 		}
 
 		cost += _price.build_tunnel;
-		cost += cost >> 3;
+		cost += cost >> 3; // add a multiplier for longer tunnels
 		if (cost >= 400000000) cost = 400000000;
 	}
 
+	/* Add the cost of the entrance */
+	cost += _price.build_tunnel + ret;
+
 	// if the command fails from here on we want the end tile to be highlighted
 	_build_tunnel_endtile = end_tile;