diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index dc7ff694c9..42c7806bee 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3437,11 +3437,6 @@ static void SetVehicleCrashed(Vehicle *v) for (const Vehicle *u = v; u != NULL; u = u->Next()) { ClearPathReservation(u->tile, GetVehicleTrackdir(u)); } - /* Try to reserve all tiles directly under the train, but not the whole - * railway station platform or both tunnel/bridge ends. */ - for (const Vehicle *u = v; u != NULL; u = u->Next()) { - TryReserveRailTrack(u->tile, TrackdirToTrack(GetVehicleTrackdir(u))); - } } /* we may need to update crossing we were approaching */ @@ -3511,6 +3506,15 @@ static Vehicle *FindTrainCollideEnum(Vehicle *v, void *data) tcc->num += 2 + CountPassengersInTrain(coll); SetVehicleCrashed(coll); } + + /* Try to reserve all tiles directly under the crashed trains. + * As there might be more than two trains involved, we have to do that for all vehicles */ + const Vehicle *u; + FOR_ALL_VEHICLES(u) { + if (u->type == VEH_TRAIN && HASBITS(u->vehstatus, VS_CRASHED)) { + TryReserveRailTrack(u->tile, TrackBitsToTrack(u->u.rail.track)); + } + } } return NULL;