diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -496,6 +496,24 @@ void AfterLoadVehicles(bool part_of_load UpdateAircraftCache(Aircraft::From(v), true); } break; + + case VEH_DISASTER: { + auto *dv = DisasterVehicle::From(v); + if (dv->subtype == ST_SMALL_UFO && dv->state != 0) { + RoadVehicle *u = RoadVehicle::GetIfValid(v->dest_tile.base()); + if (u != nullptr && u->IsFrontEngine()) { + /* Delete UFO targetting a vehicle which is already a target. */ + if (u->disaster_vehicle != INVALID_VEHICLE) { + delete v; + continue; + } else { + u->disaster_vehicle = dv->index; + } + } + } + break; + } + default: break; }