From f3e550e9bd8cdaa31e18e05208cdecc642cea55f Mon Sep 17 00:00:00 2001 From: smatz Date: Wed, 2 Feb 2011 23:06:38 +0000 Subject: (svn r21949) -Change: randomize the vehicle a small UFO targets, do not use the one with lowest index --- src/disaster_cmd.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src/disaster_cmd.cpp') diff --git a/src/disaster_cmd.cpp b/src/disaster_cmd.cpp index 38c366ed5..a0998a55d 100644 --- a/src/disaster_cmd.cpp +++ b/src/disaster_cmd.cpp @@ -307,17 +307,28 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) } v->current_order.SetDestination(1); + uint n = 0; // Total number of targetable road vehicles. RoadVehicle *u; FOR_ALL_ROADVEHICLES(u) { - if (u->IsFrontEngine()) { - v->dest_tile = u->index; - v->age = 0; - return true; - } + if (u->IsFrontEngine()) n++; } - delete v; - return false; + if (n == 0) { + /* If there are no targetable road vehicles, destroy the UFO. */ + delete v; + return false; + } + + n = RandomRange(n); // Choose one of them. + FOR_ALL_ROADVEHICLES(u) { + /* Find (n+1)-th road vehicle. */ + if (u->IsFrontEngine() && (n-- == 0)) break; + } + + /* Target it. */ + v->dest_tile = u->index; + v->age = 0; + return true; } else { /* Target a vehicle */ RoadVehicle *u = RoadVehicle::Get(v->dest_tile); -- cgit v1.2.3-54-g00ecf