summaryrefslogtreecommitdiff
path: root/train_cmd.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2005-04-12 09:17:51 +0000
committertron <tron@openttd.org>2005-04-12 09:17:51 +0000
commit2b0c6b6acc53f654749676cee26979b7058d3f89 (patch)
tree3d7f62a64432a523513efd68165aa533664befb3 /train_cmd.c
parent35e5844be3541ecb42310713bb67894a25bf7e64 (diff)
downloadopenttd-2b0c6b6acc53f654749676cee26979b7058d3f89.tar.xz
(svn r2187) Implement a slightly better workaround than r1588 did. (Joint effort with Celestar)
Diffstat (limited to 'train_cmd.c')
-rw-r--r--train_cmd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/train_cmd.c b/train_cmd.c
index 55563530a..7168a2912 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -182,12 +182,10 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
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 @@ static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
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);
}
}