(svn r11057) -Fix [FS#1215]: loading TTD savegames went into an infinite loop due to not yet properly set next and previous pointers.

pull/155/head
rubidium 17 years ago
parent 88133a97b5
commit 704844ed43

@ -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);

@ -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<Vehicle, VehicleID, &_Vehicle_pool> {
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

Loading…
Cancel
Save