488 if (v->type != 0 && v->schedule_ptr != NULL) { |
488 if (v->type != 0 && v->schedule_ptr != NULL) { |
489 Order *sched; |
489 Order *sched; |
490 |
490 |
491 // clear last station visited |
491 // clear last station visited |
492 if (v->last_station_visited == cmd.station && cmd.type == OT_GOTO_STATION) |
492 if (v->last_station_visited == cmd.station && cmd.type == OT_GOTO_STATION) |
493 v->last_station_visited = 0xFF; |
493 v->last_station_visited = 0xFFFF; |
494 |
494 |
495 // check the next order |
495 // check the next order |
496 if (v->current_order.type == cmd.type && |
496 if (v->current_order.type == cmd.type && |
497 v->current_order.station == cmd.station) { |
497 v->current_order.station == cmd.station) { |
498 v->current_order.type = OT_DUMMY; |
498 v->current_order.type = OT_DUMMY; |
1653 SLE_VAR(Vehicle,subspeed, SLE_UINT8), |
1653 SLE_VAR(Vehicle,subspeed, SLE_UINT8), |
1654 SLE_VAR(Vehicle,acceleration, SLE_UINT8), |
1654 SLE_VAR(Vehicle,acceleration, SLE_UINT8), |
1655 SLE_VAR(Vehicle,progress, SLE_UINT8), |
1655 SLE_VAR(Vehicle,progress, SLE_UINT8), |
1656 |
1656 |
1657 SLE_VAR(Vehicle,vehstatus, SLE_UINT8), |
1657 SLE_VAR(Vehicle,vehstatus, SLE_UINT8), |
1658 SLE_VAR(Vehicle,last_station_visited,SLE_UINT8), |
1658 SLE_CONDVAR(Vehicle,last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), |
|
1659 SLE_CONDVAR(Vehicle,last_station_visited, SLE_UINT16, 5, 255), |
1659 |
1660 |
1660 SLE_VAR(Vehicle,cargo_type, SLE_UINT8), |
1661 SLE_VAR(Vehicle,cargo_type, SLE_UINT8), |
1661 SLE_VAR(Vehicle,cargo_days, SLE_UINT8), |
1662 SLE_VAR(Vehicle,cargo_days, SLE_UINT8), |
1662 SLE_VAR(Vehicle,cargo_source, SLE_UINT8), |
1663 SLE_VAR(Vehicle,cargo_source, SLE_UINT8), |
1663 SLE_VAR(Vehicle,cargo_cap, SLE_UINT16), |
1664 SLE_VAR(Vehicle,cargo_cap, SLE_UINT16), |
1754 static const byte _aircraft_desc[] = { |
1755 static const byte _aircraft_desc[] = { |
1755 SLE_WRITEBYTE(Vehicle,type,VEH_Aircraft, 3), // Aircraft type. VEH_Aircraft in mem, 3 in file. |
1756 SLE_WRITEBYTE(Vehicle,type,VEH_Aircraft, 3), // Aircraft type. VEH_Aircraft in mem, 3 in file. |
1756 SLE_INCLUDEX(0, INC_VEHICLE_COMMON), |
1757 SLE_INCLUDEX(0, INC_VEHICLE_COMMON), |
1757 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,crashed_counter), SLE_UINT16), |
1758 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,crashed_counter), SLE_UINT16), |
1758 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,pos), SLE_UINT8), |
1759 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,pos), SLE_UINT8), |
1759 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport), SLE_UINT8), |
1760 |
|
1761 SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport), SLE_FILE_U8 | SLE_VAR_U16, 0, 4), |
|
1762 SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport), SLE_UINT16, 5, 255), |
|
1763 |
1760 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,state), SLE_UINT8), |
1764 SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,state), SLE_UINT8), |
1761 |
1765 |
1762 SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,previous_pos), SLE_UINT8, 2, 255), |
1766 SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,previous_pos), SLE_UINT8, 2, 255), |
1763 |
1767 |
1764 // reserve extra space in savegame here. (currently 15 bytes) |
1768 // reserve extra space in savegame here. (currently 15 bytes) |
1852 { |
1856 { |
1853 Vehicle *v; |
1857 Vehicle *v; |
1854 // Write the vehicles |
1858 // Write the vehicles |
1855 FOR_ALL_VEHICLES(v) { |
1859 FOR_ALL_VEHICLES(v) { |
1856 if (v->type != 0) { |
1860 if (v->type != 0) { |
|
1861 /* XXX - Here for now, because we did not bump the savegame to version 5 yet */ |
|
1862 if (_sl.version < 5 && v->last_station_visited == 0xFFFF) |
|
1863 v->last_station_visited = 0xFF; |
|
1864 |
1857 SlSetArrayIndex(v->index); |
1865 SlSetArrayIndex(v->index); |
1858 v->next_in_chain_old = v->next ? v->next->index : INVALID_VEHICLE; |
1866 v->next_in_chain_old = v->next ? v->next->index : INVALID_VEHICLE; |
1859 SlObject(v, _veh_descs[v->type - 0x10]); |
1867 SlObject(v, _veh_descs[v->type - 0x10]); |
1860 } |
1868 } |
1861 } |
1869 } |
1872 v->next_in_chain_old = INVALID_VEHICLE; |
1880 v->next_in_chain_old = INVALID_VEHICLE; |
1873 SlObject(v, _veh_descs[SlReadByte()]); |
1881 SlObject(v, _veh_descs[SlReadByte()]); |
1874 v->next = v->next_in_chain_old == INVALID_VEHICLE ? NULL : &_vehicles[v->next_in_chain_old]; |
1882 v->next = v->next_in_chain_old == INVALID_VEHICLE ? NULL : &_vehicles[v->next_in_chain_old]; |
1875 if (v->type == VEH_Train) |
1883 if (v->type == VEH_Train) |
1876 v->u.rail.first_engine = 0xffff; |
1884 v->u.rail.first_engine = 0xffff; |
|
1885 |
|
1886 /* Old savegames used 'last_station_visited = 0xFF', should be 0xFFFF */ |
|
1887 if (_sl.version < 5 && v->last_station_visited == 0xFF) |
|
1888 v->last_station_visited = 0xFFFF; |
1877 } |
1889 } |
1878 |
1890 |
1879 // Iterate through trains and set first_engine appropriately. |
1891 // Iterate through trains and set first_engine appropriately. |
1880 FOR_ALL_VEHICLES(v) { |
1892 FOR_ALL_VEHICLES(v) { |
1881 Vehicle *w; |
1893 Vehicle *w; |