vehicle.c
changeset 817 4f9377b7fd2b
parent 812 79c99885ad00
child 826 0e2b569b737b
equal deleted inserted replaced
816:e1c4b6f5742e 817:4f9377b7fd2b
   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;