From d3ccc7c1948e9a4b91c97bf8a430be19ffba1c43 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 28 Jun 2013 18:09:07 +0000 Subject: (svn r25495) -Fix [FS#5553]: when addings bits to a (train) station, the train trying to stop there could overshoot the (new) stop location and not stop at all --- src/station_cmd.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'src/station_cmd.cpp') diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 4b3daba5b..c57e4382d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3124,7 +3124,7 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i * begin of the platform to the stop location is longer than the length * of the platform. Station ahead 'includes' the current tile where the * vehicle is on, so we need to subtract that. */ - if (!IsInsideBS(stop + station_ahead, station_length, TILE_SIZE)) return VETSB_CONTINUE; + if (stop + station_ahead - (int)TILE_SIZE >= station_length) return VETSB_CONTINUE; DiagDirection dir = DirToDiagDir(v->direction); @@ -3136,14 +3136,11 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i if (dir != DIAGDIR_SE && dir != DIAGDIR_SW) x = TILE_SIZE - 1 - x; stop &= TILE_SIZE - 1; - if (x == stop) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station - if (x < stop) { - uint16 spd; + if (x >= stop) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station - v->vehstatus |= VS_TRAIN_SLOWING; - spd = max(0, (stop - x) * 20 - 15); - if (spd < v->cur_speed) v->cur_speed = spd; - } + v->vehstatus |= VS_TRAIN_SLOWING; + uint16 spd = max(0, (stop - x) * 20 - 15); + if (spd < v->cur_speed) v->cur_speed = spd; } } else if (v->type == VEH_ROAD) { RoadVehicle *rv = RoadVehicle::From(v); -- cgit v1.2.3-70-g09d2