equal
deleted
inserted
replaced
628 } else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) { |
628 } else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) { |
629 DeleteLastRoadVeh(v); |
629 DeleteLastRoadVeh(v); |
630 } |
630 } |
631 } |
631 } |
632 |
632 |
633 static void* EnumCheckRoadVehCrashTrain(Vehicle* v, void* data) |
633 static Vehicle *EnumCheckRoadVehCrashTrain(Vehicle *v, void *data) |
634 { |
634 { |
635 const Vehicle* u = (Vehicle*)data; |
635 const Vehicle *u = (Vehicle*)data; |
636 |
636 |
637 return |
637 return |
638 v->type == VEH_TRAIN && |
638 v->type == VEH_TRAIN && |
639 abs(v->z_pos - u->z_pos) <= 6 && |
639 abs(v->z_pos - u->z_pos) <= 6 && |
640 abs(v->x_pos - u->x_pos) <= 4 && |
640 abs(v->x_pos - u->x_pos) <= 4 && |
763 int y; |
763 int y; |
764 const Vehicle* veh; |
764 const Vehicle* veh; |
765 Direction dir; |
765 Direction dir; |
766 }; |
766 }; |
767 |
767 |
768 static void* EnumCheckRoadVehClose(Vehicle *v, void* data) |
768 static Vehicle *EnumCheckRoadVehClose(Vehicle *v, void *data) |
769 { |
769 { |
770 static const int8 dist_x[] = { -4, -8, -4, -1, 4, 8, 4, 1 }; |
770 static const int8 dist_x[] = { -4, -8, -4, -1, 4, 8, 4, 1 }; |
771 static const int8 dist_y[] = { -4, -1, 4, 8, 4, 1, -4, -8 }; |
771 static const int8 dist_y[] = { -4, -1, 4, 8, 4, 1, -4, -8 }; |
772 |
772 |
773 const RoadVehFindData* rvf = (RoadVehFindData*)data; |
773 const RoadVehFindData *rvf = (RoadVehFindData*)data; |
774 |
774 |
775 short x_diff = v->x_pos - rvf->x; |
775 short x_diff = v->x_pos - rvf->x; |
776 short y_diff = v->y_pos - rvf->y; |
776 short y_diff = v->y_pos - rvf->y; |
777 |
777 |
778 return |
778 return |
799 rvf.x = x; |
799 rvf.x = x; |
800 rvf.y = y; |
800 rvf.y = y; |
801 rvf.dir = dir; |
801 rvf.dir = dir; |
802 rvf.veh = v; |
802 rvf.veh = v; |
803 if (front->u.road.state == RVSB_WORMHOLE) { |
803 if (front->u.road.state == RVSB_WORMHOLE) { |
804 u = (Vehicle*)VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose); |
804 u = VehicleFromPos(v->tile, &rvf, EnumCheckRoadVehClose); |
805 if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose); |
805 if (u == NULL) u = (Vehicle*)VehicleFromPos(GetOtherTunnelBridgeEnd(v->tile), &rvf, EnumCheckRoadVehClose); |
806 } else { |
806 } else { |
807 u = (Vehicle*)VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose); |
807 u = VehicleFromPosXY(x, y, &rvf, EnumCheckRoadVehClose); |
808 } |
808 } |
809 |
809 |
810 /* This code protects a roadvehicle from being blocked for ever |
810 /* This code protects a roadvehicle from being blocked for ever |
811 * If more than 1480 / 74 days a road vehicle is blocked, it will |
811 * If more than 1480 / 74 days a road vehicle is blocked, it will |
812 * drive just through it. The ultimate backup-code of TTD. |
812 * drive just through it. The ultimate backup-code of TTD. |
911 const Vehicle* v; |
911 const Vehicle* v; |
912 TileIndex tile; |
912 TileIndex tile; |
913 Trackdir trackdir; |
913 Trackdir trackdir; |
914 }; |
914 }; |
915 |
915 |
916 static void* EnumFindVehBlockingOvertake(Vehicle* v, void* data) |
916 static Vehicle *EnumFindVehBlockingOvertake(Vehicle *v, void* data) |
917 { |
917 { |
918 const OvertakeData* od = (OvertakeData*)data; |
918 const OvertakeData* od = (OvertakeData*)data; |
919 |
919 |
920 return |
920 return |
921 v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ? |
921 v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ? |