Index: src/saveload/saveload.cpp =================================================================== --- src/saveload/saveload.cpp (revision 27142) +++ src/saveload/saveload.cpp (working copy) @@ -2723,6 +2723,18 @@ } else { /* Load chunks and resolve references */ SlLoadChunks(); + + if (IsSavegameVersionBefore(105)) { + /* + * Before 105 there was no order for shared orders, thus it messed up horribly and + * should be fixed before processing chunks + */ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + v->InitShared(); + } + } + SlFixPointers(); } Index: src/vehicle_base.h =================================================================== --- src/vehicle_base.h (revision 27142) +++ src/vehicle_base.h (working copy) @@ -611,8 +611,8 @@ inline Vehicle *PreviousShared() const { return this->previous_shared; } /** - * Get the first vehicle of this vehicle chain. - * @return the first vehicle of the chain. + * Get the first vehicle of the shared vehicle chain. + * @return the first vehicle of the shared orders chain. */ inline Vehicle *FirstShared() const { return (this->orders.list == NULL) ? this->First() : this->orders.list->GetFirstSharedVehicle(); } @@ -623,6 +623,11 @@ inline bool IsOrderListShared() const { return this->orders.list != NULL && this->orders.list->IsShared(); } /** + * Set next_shared and previous_shared to NULL (neccesary when loading older savegame) + */ + void InitShared() { this->next_shared=this->previous_shared=NULL; } + + /** * Get the number of orders this vehicle has. * @return the number of orders this vehicle has. */