From d112a7f0897be76ef6879f36d88ddb3ccfb6feff Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 11 Feb 2024 18:35:05 +0000 Subject: [PATCH] Change: Small UFOs no longer target a vehicle which is already a target. --- src/disaster_vehicle.cpp | 5 +++++ src/saveload/vehicle_sl.cpp | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index a2a97a279f..60b93eaf11 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -348,6 +348,11 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) for (RoadVehicle *u : RoadVehicle::Iterate()) { /* Find (n+1)-th road vehicle. */ if (u->IsFrontEngine() && (n-- == 0)) { + if (u->crashed_ctr != 0 || u->disaster_vehicle != INVALID_VEHICLE) { + /* Targetted vehicle is crashed or already a target, destroy the UFO. */ + delete v; + return false; + } /* Target it. */ v->dest_tile = u->index; v->age = 0; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 04ad699284..449c8c44f1 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -501,7 +501,15 @@ void AfterLoadVehicles(bool part_of_load) 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()) u->disaster_vehicle = dv->index; + 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; }