(svn r2187) Implement a slightly better workaround than r1588 did. (Joint effort with Celestar)
authortron
Tue, 12 Apr 2005 09:17:51 +0000
changeset 1683 2248e6615517
parent 1682 6c465f1472de
child 1684 d09bc0beec4c
(svn r2187) Implement a slightly better workaround than r1588 did. (Joint effort with Celestar)
train_cmd.c
--- a/train_cmd.c	Tue Apr 12 07:29:37 2005 +0000
+++ b/train_cmd.c	Tue Apr 12 09:17:51 2005 +0000
@@ -182,12 +182,10 @@
 		vmass += (_cargoc.weights[u->cargo_type] * u->cargo_count) / 16;
 		mass += vmass; //[t]
 
-		if (!IsTileType(u->tile, MP_TUNNELBRIDGE)) {
-			if (HASBIT(u->u.rail.flags, VRF_GOINGUP)) {
-				incl += vmass * 60;		//3% slope, quite a bit actually
-			} else if (HASBIT(u->u.rail.flags, VRF_GOINGDOWN)) {
-				incl -= vmass * 60;
-			}
+		if (HASBIT(u->u.rail.flags, VRF_GOINGUP)) {
+			incl += vmass * 60;		//3% slope, quite a bit actually
+		} else if (HASBIT(u->u.rail.flags, VRF_GOINGDOWN)) {
+			incl -= vmass * 60;
 		}
 	}
 
@@ -2099,7 +2097,11 @@
 		CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
 
 		if (new_z != old_z) {
-			SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
+			TileIndex tile = TILE_FROM_XY(v->x_pos, v->y_pos);
+
+			// XXX workaround, whole UP/DOWN detection needs overhaul
+			if (!IsTileType(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0x80) != 0)
+				SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
 		}
 	}