diff options
author | rubidium <rubidium@openttd.org> | 2007-06-07 12:37:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-06-07 12:37:48 +0000 |
commit | 622a4d10b92e5ab843a9f9989cc36b8e2705e492 (patch) | |
tree | ead0e50ca3c1bb5247c4dfc6369a2016562e7867 /src/vehicle.cpp | |
parent | 9a81f009a0171de66dcd4e7fb8e177d48b00b2b2 (diff) | |
download | openttd-622a4d10b92e5ab843a9f9989cc36b8e2705e492.tar.xz |
(svn r10056) -Revert (r10049): removing SLE_WRITEBYTE didn't work as expected :(. Somehow SlIterateArray and SlObject depend on eachother and adding a some arbitrary data before the SlObject makes it go crazy.
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r-- | src/vehicle.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 66d0ac6a0..83550c226 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2714,6 +2714,7 @@ extern const SaveLoad _common_veh_desc[] = { static const SaveLoad _train_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN), SLE_INCLUDEX(0, INC_VEHICLE_COMMON), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, crash_anim_pos), SLE_UINT16), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRail, force_proceed), SLE_UINT8), @@ -2731,6 +2732,7 @@ static const SaveLoad _train_desc[] = { }; static const SaveLoad _roadveh_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_ROAD), SLE_INCLUDEX(0, INC_VEHICLE_COMMON), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, state), SLE_UINT8), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleRoad, frame), SLE_UINT8), @@ -2750,6 +2752,7 @@ static const SaveLoad _roadveh_desc[] = { }; static const SaveLoad _ship_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_SHIP), SLE_INCLUDEX(0, INC_VEHICLE_COMMON), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleShip, state), SLE_UINT8), @@ -2760,6 +2763,7 @@ static const SaveLoad _ship_desc[] = { }; static const SaveLoad _aircraft_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT), SLE_INCLUDEX(0, INC_VEHICLE_COMMON), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, crashed_counter), SLE_UINT16), SLE_VARX(cpp_offsetof(Vehicle, u) + cpp_offsetof(VehicleAir, pos), SLE_UINT8), @@ -2778,6 +2782,8 @@ static const SaveLoad _aircraft_desc[] = { }; static const SaveLoad _special_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_SPECIAL), + SLE_VAR(Vehicle, subtype, SLE_UINT8), SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), @@ -2804,6 +2810,8 @@ static const SaveLoad _special_desc[] = { }; static const SaveLoad _disaster_desc[] = { + SLE_WRITEBYTE(Vehicle, type, VEH_DISASTER), + SLE_REF(Vehicle, next, REF_VEHICLE_OLD), SLE_VAR(Vehicle, subtype, SLE_UINT8), @@ -2856,7 +2864,6 @@ static void Save_VEHS() /* Write the vehicles */ FOR_ALL_VEHICLES(v) { SlSetArrayIndex(v->index); - SlWriteByte(v->type); SlObject(v, (SaveLoad*)_veh_descs[v->type]); } } @@ -2874,8 +2881,8 @@ static void Load_VEHS() error("Vehicles: failed loading savegame: too many vehicles"); v = GetVehicle(index); - v->type = (VehicleType)SlReadByte(); - SlObject(v, (SaveLoad*)_veh_descs[v->type]); + VehicleType vtype = (VehicleType)SlReadByte(); + SlObject(v, (SaveLoad*)_veh_descs[vtype]); switch (v->type) { case VEH_TRAIN: v = new (v) Train(); break; |