From 704844ed432a6096369de9e11ed54895c4ce1787 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 7 Sep 2007 22:06:52 +0000 Subject: (svn r11057) -Fix [FS#1215]: loading TTD savegames went into an infinite loop due to not yet properly set next and previous pointers. --- src/oldloader.cpp | 4 ++-- src/vehicle.h | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/oldloader.cpp b/src/oldloader.cpp index b43011cf4..e6227d9a4 100644 --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -1175,7 +1175,7 @@ static const OldChunks vehicle_chunk[] = { OCL_END() }; -static bool LoadOldVehicle(LoadgameState *ls, int num) +bool LoadOldVehicle(LoadgameState *ls, int num) { uint i; @@ -1206,7 +1206,7 @@ static bool LoadOldVehicle(LoadgameState *ls, int num) default: v->spritenum >>= 1; break; } - if (_old_next_ptr != 0xFFFF) v->SetNext(GetVehicle(_old_next_ptr)); + if (_old_next_ptr != 0xFFFF) v->next = GetVehicle(_old_next_ptr); v->string_id = RemapOldStringID(_old_string_id); diff --git a/src/vehicle.h b/src/vehicle.h index 1526c5c9f..c9a805593 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -218,9 +218,12 @@ struct VehicleShip { struct Vehicle; DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125) +/* Some declarations of functions, so we can make them friendly */ struct SaveLoad; -const SaveLoad *GetVehicleDescription(VehicleType vt); -void AfterLoadVehicles(); +extern const SaveLoad *GetVehicleDescription(VehicleType vt); +extern void AfterLoadVehicles(); +struct LoadgameState; +extern bool LoadOldVehicle(LoadgameState *ls, int num); struct Vehicle : PoolItem { VehicleTypeByte type; ///< Type of vehicle @@ -232,7 +235,8 @@ private: Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain public: friend const SaveLoad *GetVehicleDescription(VehicleType vt); // So we can use private/protected variables in the saveload code - friend void AfterLoadVehicles(); + friend void AfterLoadVehicles(); // So we can set the previous and first pointers while loading + friend bool LoadOldVehicle(LoadgameState *ls, int num); // So we can set the proper next pointer while loading Vehicle *depot_list; // NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace -- cgit v1.2.3-70-g09d2