diff options
-rw-r--r-- | src/station_cmd.cpp | 2 | ||||
-rw-r--r-- | src/train_cmd.cpp | 17 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 563c440a9..91a7c73f0 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2681,7 +2681,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 substract that. */ - if (station_length <= stop + station_ahead - TILE_SIZE) return VETSB_CONTINUE; + if (!IsInsideBS(stop + station_ahead, station_length, TILE_SIZE)) return VETSB_CONTINUE; DiagDirection dir = DirToDiagDir(v->direction); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 484d0c5c1..87d716627 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -474,15 +474,18 @@ static int GetTrainAcceleration(Vehicle *v, bool mode) /* The distance to go is whatever is still ahead of the train minus the * distance from the train's stop location to the end of the platform */ int distance_to_go = station_ahead / TILE_SIZE - (station_length - stop_at) / TILE_SIZE; - int st_max_speed = 120; - int delta_v = v->cur_speed / (distance_to_go + 1); - if (v->max_speed > (v->cur_speed - delta_v)) { - st_max_speed = v->cur_speed - (delta_v / 10); - } + if (distance_to_go > 0) { + int st_max_speed = 120; + + int delta_v = v->cur_speed / (distance_to_go + 1); + if (v->max_speed > (v->cur_speed - delta_v)) { + st_max_speed = v->cur_speed - (delta_v / 10); + } - st_max_speed = max(st_max_speed, 25 * distance_to_go); - max_speed = min(max_speed, st_max_speed); + st_max_speed = max(st_max_speed, 25 * distance_to_go); + max_speed = min(max_speed, st_max_speed); + } } } |