# HG changeset patch # User rubidium # Date 1260231315 0 # Node ID e05224459a9f90459c3bf9beec0d9d058fe28ba7 # Parent a12398584dcfc2f1d6e1dc3e3981bbaf46320b6f (svn r18428) -Fix: if lots of road vehicles are leaving a depot and the first in the hash linked list is basically the last of the vehicles to leave the depot then due to the 'jam prevention' code all vehicles would fairly quickly increase the blocked counter and drive off all simultaniously diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -680,7 +680,7 @@ return NULL; } -static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction dir) +static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr = true) { RoadVehFindData rvf; RoadVehicle *front = v->First(); @@ -709,7 +709,7 @@ return NULL; } - if (++front->blocked_ctr > 1480) return NULL; + if (update_blocked_ctr && ++front->blocked_ctr > 1480) return NULL; return RoadVehicle::From(rvf.best); } @@ -1047,7 +1047,7 @@ int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF); if (first) { - if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return true; + if (RoadVehFindCloseTo(v, x, y, v->direction, false) != NULL) return true; VehicleServiceInDepot(v);