Index: train_cmd.cpp =================================================================== --- train_cmd.cpp (revision 10348) +++ train_cmd.cpp (working copy) @@ -320,17 +320,17 @@ numcurve++; sum += pos - lastpos; if (pos - lastpos == 1) { - max_speed = 88; + max_speed = 80 + (v->u.rail.cached_max_speed >> 4); // speed based on max. train speed } } lastpos = pos; } } - /*if we have a 90 degree turn, fix the speed limit to 60 */ + /* if we have a 90 degree turn, fix the speed limit to 60+ (depends on max. train speed) */ if (_curve_neighbours90[dir][0] == ndir || _curve_neighbours90[dir][1] == ndir) { - max_speed = 61; + max_speed = 60 + (v->u.rail.cached_max_speed >> 5); // speed based on max. train speed } } @@ -353,13 +353,13 @@ int station_length = GetStationByTile(v->tile)->GetPlatformLength(v->tile, DirToDiagDir(v->direction)); int delta_v; - max_speed = 120; + max_speed = 100 + (v->u.rail.cached_max_speed >> 3); delta_v = v->cur_speed / (station_length + 1); if (v->max_speed > (v->cur_speed - delta_v)) - max_speed = v->cur_speed - (delta_v / 10); + max_speed = v->cur_speed - (delta_v >> 1); - max_speed = max(max_speed, 25 * station_length); + max_speed = max(max_speed, (25 + (v->u.rail.cached_max_speed >> 4)) * station_length); // smoother station entering } } @@ -374,7 +374,7 @@ num++; drag_coeff += 3; - if (u->u.rail.track == TRACK_BIT_DEPOT) max_speed = min(max_speed, 61); + if (u->u.rail.track == TRACK_BIT_DEPOT) max_speed = 60 + (v->u.rail.cached_max_speed >> 3); // depot entering speed if (HASBIT(u->u.rail.flags, VRF_GOINGUP)) { incl += u->u.rail.cached_veh_weight * 60; //3% slope, quite a bit actually