mirror of https://github.com/OpenTTD/OpenTTD
(svn r11057) -Fix [FS#1215]: loading TTD savegames went into an infinite loop due to not yet properly set next and previous pointers.
parent
c25655d4ae
commit
4eef590b15
|
@ -1175,7 +1175,7 @@ static const OldChunks vehicle_chunk[] = {
|
||||||
OCL_END()
|
OCL_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool LoadOldVehicle(LoadgameState *ls, int num)
|
bool LoadOldVehicle(LoadgameState *ls, int num)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
|
|
||||||
|
@ -1206,7 +1206,7 @@ static bool LoadOldVehicle(LoadgameState *ls, int num)
|
||||||
default: v->spritenum >>= 1; break;
|
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);
|
v->string_id = RemapOldStringID(_old_string_id);
|
||||||
|
|
||||||
|
|
|
@ -218,9 +218,12 @@ struct VehicleShip {
|
||||||
struct Vehicle;
|
struct Vehicle;
|
||||||
DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
|
DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
|
||||||
|
|
||||||
|
/* Some declarations of functions, so we can make them friendly */
|
||||||
struct SaveLoad;
|
struct SaveLoad;
|
||||||
const SaveLoad *GetVehicleDescription(VehicleType vt);
|
extern const SaveLoad *GetVehicleDescription(VehicleType vt);
|
||||||
void AfterLoadVehicles();
|
extern void AfterLoadVehicles();
|
||||||
|
struct LoadgameState;
|
||||||
|
extern bool LoadOldVehicle(LoadgameState *ls, int num);
|
||||||
|
|
||||||
struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool> {
|
struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool> {
|
||||||
VehicleTypeByte type; ///< Type of vehicle
|
VehicleTypeByte type; ///< Type of vehicle
|
||||||
|
@ -232,7 +235,8 @@ private:
|
||||||
Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain
|
Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain
|
||||||
public:
|
public:
|
||||||
friend const SaveLoad *GetVehicleDescription(VehicleType vt); // So we can use private/protected variables in the saveload code
|
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
|
Vehicle *depot_list; // NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue