vehicle.c
changeset 4344 7e123fec5b0b
parent 4326 2e2c9d21ed96
child 4346 66105d4f6e83
equal deleted inserted replaced
4343:ca99d5b3f42d 4344:7e123fec5b0b
  1098 
  1098 
  1099 #define MK(x, y, z, i) { x, y, z, i }
  1099 #define MK(x, y, z, i) { x, y, z, i }
  1100 #define ME(i) { i, 4, 0, 0 }
  1100 #define ME(i) { i, 4, 0, 0 }
  1101 
  1101 
  1102 static const BubbleMovement _bubble_float_sw[] = {
  1102 static const BubbleMovement _bubble_float_sw[] = {
  1103 	MK(0,0,1,0),
  1103 	MK(0, 0, 1, 0),
  1104 	MK(1,0,1,1),
  1104 	MK(1, 0, 1, 1),
  1105 	MK(0,0,1,0),
  1105 	MK(0, 0, 1, 0),
  1106 	MK(1,0,1,2),
  1106 	MK(1, 0, 1, 2),
  1107 	ME(1)
  1107 	ME(1)
  1108 };
  1108 };
  1109 
  1109 
  1110 
  1110 
  1111 static const BubbleMovement _bubble_float_ne[] = {
  1111 static const BubbleMovement _bubble_float_ne[] = {
  1112 	MK(0,0,1,0),
  1112 	MK( 0, 0, 1, 0),
  1113 	MK(-1,0,1,1),
  1113 	MK(-1, 0, 1, 1),
  1114 	MK(0,0,1,0),
  1114 	MK( 0, 0, 1, 0),
  1115 	MK(-1,0,1,2),
  1115 	MK(-1, 0, 1, 2),
  1116 	ME(1)
  1116 	ME(1)
  1117 };
  1117 };
  1118 
  1118 
  1119 static const BubbleMovement _bubble_float_se[] = {
  1119 static const BubbleMovement _bubble_float_se[] = {
  1120 	MK(0,0,1,0),
  1120 	MK(0, 0, 1, 0),
  1121 	MK(0,1,1,1),
  1121 	MK(0, 1, 1, 1),
  1122 	MK(0,0,1,0),
  1122 	MK(0, 0, 1, 0),
  1123 	MK(0,1,1,2),
  1123 	MK(0, 1, 1, 2),
  1124 	ME(1)
  1124 	ME(1)
  1125 };
  1125 };
  1126 
  1126 
  1127 static const BubbleMovement _bubble_float_nw[] = {
  1127 static const BubbleMovement _bubble_float_nw[] = {
  1128 	MK(0,0,1,0),
  1128 	MK(0,  0, 1, 0),
  1129 	MK(0,-1,1,1),
  1129 	MK(0, -1, 1, 1),
  1130 	MK(0,0,1,0),
  1130 	MK(0,  0, 1, 0),
  1131 	MK(0,-1,1,2),
  1131 	MK(0, -1, 1, 2),
  1132 	ME(1)
  1132 	ME(1)
  1133 };
  1133 };
  1134 
  1134 
  1135 static const BubbleMovement _bubble_burst[] = {
  1135 static const BubbleMovement _bubble_burst[] = {
  1136 	MK(0,0,1,2),
  1136 	MK(0, 0, 1, 2),
  1137 	MK(0,0,1,7),
  1137 	MK(0, 0, 1, 7),
  1138 	MK(0,0,1,8),
  1138 	MK(0, 0, 1, 8),
  1139 	MK(0,0,1,9),
  1139 	MK(0, 0, 1, 9),
  1140 	ME(0)
  1140 	ME(0)
  1141 };
  1141 };
  1142 
  1142 
  1143 static const BubbleMovement _bubble_absorb[] = {
  1143 static const BubbleMovement _bubble_absorb[] = {
  1144 	MK(0,0,1,0),
  1144 	MK(0, 0, 1, 0),
  1145 	MK(0,0,1,1),
  1145 	MK(0, 0, 1, 1),
  1146 	MK(0,0,1,0),
  1146 	MK(0, 0, 1, 0),
  1147 	MK(0,0,1,2),
  1147 	MK(0, 0, 1, 2),
  1148 	MK(0,0,1,0),
  1148 	MK(0, 0, 1, 0),
  1149 	MK(0,0,1,1),
  1149 	MK(0, 0, 1, 1),
  1150 	MK(0,0,1,0),
  1150 	MK(0, 0, 1, 0),
  1151 	MK(0,0,1,2),
  1151 	MK(0, 0, 1, 2),
  1152 	MK(0,0,1,0),
  1152 	MK(0, 0, 1, 0),
  1153 	MK(0,0,1,1),
  1153 	MK(0, 0, 1, 1),
  1154 	MK(0,0,1,0),
  1154 	MK(0, 0, 1, 0),
  1155 	MK(0,0,1,2),
  1155 	MK(0, 0, 1, 2),
  1156 	MK(0,0,1,0),
  1156 	MK(0, 0, 1, 0),
  1157 	MK(0,0,1,1),
  1157 	MK(0, 0, 1, 1),
  1158 	MK(0,0,1,0),
  1158 	MK(0, 0, 1, 0),
  1159 	MK(0,0,1,2),
  1159 	MK(0, 0, 1, 2),
  1160 	MK(0,0,1,0),
  1160 	MK(0, 0, 1, 0),
  1161 	MK(0,0,1,1),
  1161 	MK(0, 0, 1, 1),
  1162 	MK(0,0,1,0),
  1162 	MK(0, 0, 1, 0),
  1163 	MK(0,0,1,2),
  1163 	MK(0, 0, 1, 2),
  1164 	MK(0,0,1,0),
  1164 	MK(0, 0, 1, 0),
  1165 	MK(0,0,1,1),
  1165 	MK(0, 0, 1, 1),
  1166 	MK(0,0,1,0),
  1166 	MK(0, 0, 1, 0),
  1167 	MK(0,0,1,2),
  1167 	MK(0, 0, 1, 2),
  1168 	MK(0,0,1,0),
  1168 	MK(0, 0, 1, 0),
  1169 	MK(0,0,1,1),
  1169 	MK(0, 0, 1, 1),
  1170 	MK(0,0,1,0),
  1170 	MK(0, 0, 1, 0),
  1171 	MK(0,0,1,2),
  1171 	MK(0, 0, 1, 2),
  1172 	MK(0,0,1,0),
  1172 	MK(0, 0, 1, 0),
  1173 	MK(0,0,1,1),
  1173 	MK(0, 0, 1, 1),
  1174 	MK(0,0,1,0),
  1174 	MK(0, 0, 1, 0),
  1175 	MK(0,0,1,2),
  1175 	MK(0, 0, 1, 2),
  1176 	MK(0,0,1,0),
  1176 	MK(0, 0, 1, 0),
  1177 	MK(0,0,1,1),
  1177 	MK(0, 0, 1, 1),
  1178 	MK(0,0,1,0),
  1178 	MK(0, 0, 1, 0),
  1179 	MK(0,0,1,2),
  1179 	MK(0, 0, 1, 2),
  1180 	MK(0,0,1,0),
  1180 	MK(0, 0, 1, 0),
  1181 	MK(0,0,1,1),
  1181 	MK(0, 0, 1, 1),
  1182 	MK(0,0,1,0),
  1182 	MK(0, 0, 1, 0),
  1183 	MK(0,0,1,2),
  1183 	MK(0, 0, 1, 2),
  1184 	MK(0,0,1,0),
  1184 	MK(0, 0, 1, 0),
  1185 	MK(0,0,1,1),
  1185 	MK(0, 0, 1, 1),
  1186 	MK(0,0,1,0),
  1186 	MK(0, 0, 1, 0),
  1187 	MK(0,0,1,2),
  1187 	MK(0, 0, 1, 2),
  1188 	MK(0,0,1,0),
  1188 	MK(0, 0, 1, 0),
  1189 	MK(0,0,1,1),
  1189 	MK(0, 0, 1, 1),
  1190 	MK(0,0,1,0),
  1190 	MK(0, 0, 1, 0),
  1191 	MK(0,0,1,2),
  1191 	MK(0, 0, 1, 2),
  1192 	MK(0,0,1,0),
  1192 	MK(0, 0, 1, 0),
  1193 	MK(0,0,1,1),
  1193 	MK(0, 0, 1, 1),
  1194 	MK(0,0,1,0),
  1194 	MK(0, 0, 1, 0),
  1195 	MK(0,0,1,2),
  1195 	MK(0, 0, 1, 2),
  1196 	MK(0,0,1,0),
  1196 	MK(0, 0, 1, 0),
  1197 	MK(0,0,1,1),
  1197 	MK(0, 0, 1, 1),
  1198 	MK(0,0,1,0),
  1198 	MK(0, 0, 1, 0),
  1199 	MK(0,0,1,2),
  1199 	MK(0, 0, 1, 2),
  1200 	MK(0,0,1,0),
  1200 	MK(0, 0, 1, 0),
  1201 	MK(0,0,1,1),
  1201 	MK(0, 0, 1, 1),
  1202 	MK(0,0,1,0),
  1202 	MK(0, 0, 1, 0),
  1203 	MK(0,0,1,2),
  1203 	MK(0, 0, 1, 2),
  1204 	MK(0,0,1,0),
  1204 	MK(0, 0, 1, 0),
  1205 	MK(0,0,1,1),
  1205 	MK(0, 0, 1, 1),
  1206 	MK(2,1,3,0),
  1206 	MK(2, 1, 3, 0),
  1207 	MK(1,1,3,1),
  1207 	MK(1, 1, 3, 1),
  1208 	MK(2,1,3,0),
  1208 	MK(2, 1, 3, 0),
  1209 	MK(1,1,3,2),
  1209 	MK(1, 1, 3, 2),
  1210 	MK(2,1,3,0),
  1210 	MK(2, 1, 3, 0),
  1211 	MK(1,1,3,1),
  1211 	MK(1, 1, 3, 1),
  1212 	MK(2,1,3,0),
  1212 	MK(2, 1, 3, 0),
  1213 	MK(1,0,1,2),
  1213 	MK(1, 0, 1, 2),
  1214 	MK(0,0,1,0),
  1214 	MK(0, 0, 1, 0),
  1215 	MK(1,0,1,1),
  1215 	MK(1, 0, 1, 1),
  1216 	MK(0,0,1,0),
  1216 	MK(0, 0, 1, 0),
  1217 	MK(1,0,1,2),
  1217 	MK(1, 0, 1, 2),
  1218 	MK(0,0,1,0),
  1218 	MK(0, 0, 1, 0),
  1219 	MK(1,0,1,1),
  1219 	MK(1, 0, 1, 1),
  1220 	MK(0,0,1,0),
  1220 	MK(0, 0, 1, 0),
  1221 	MK(1,0,1,2),
  1221 	MK(1, 0, 1, 2),
  1222 	ME(2),
  1222 	ME(2),
  1223 	MK(0,0,0,0xA),
  1223 	MK(0, 0, 0, 0xA),
  1224 	MK(0,0,0,0xB),
  1224 	MK(0, 0, 0, 0xB),
  1225 	MK(0,0,0,0xC),
  1225 	MK(0, 0, 0, 0xC),
  1226 	MK(0,0,0,0xD),
  1226 	MK(0, 0, 0, 0xD),
  1227 	MK(0,0,0,0xE),
  1227 	MK(0, 0, 0, 0xE),
  1228 	ME(0)
  1228 	ME(0)
  1229 };
  1229 };
  1230 #undef ME
  1230 #undef ME
  1231 #undef MK
  1231 #undef MK
  1232 
  1232 
  1420 	v->value -= v->value >> 8;
  1420 	v->value -= v->value >> 8;
  1421 	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
  1421 	InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
  1422 }
  1422 }
  1423 
  1423 
  1424 static const byte _breakdown_chance[64] = {
  1424 static const byte _breakdown_chance[64] = {
  1425 	3, 3, 3, 3, 3, 3, 3, 3,
  1425 	  3,   3,   3,   3,   3,   3,   3,   3,
  1426 	4, 4, 5, 5, 6, 6, 7, 7,
  1426 	  4,   4,   5,   5,   6,   6,   7,   7,
  1427 	8, 8, 9, 9, 10, 10, 11, 11,
  1427 	  8,   8,   9,   9,  10,  10,  11,  11,
  1428 	12, 13, 13, 13, 13, 14, 15, 16,
  1428 	 12,  13,  13,  13,  13,  14,  15,  16,
  1429 	17, 19, 21, 25, 28, 31, 34, 37,
  1429 	 17,  19,  21,  25,  28,  31,  34,  37,
  1430 	40, 44, 48, 52, 56, 60, 64, 68,
  1430 	 40,  44,  48,  52,  56,  60,  64,  68,
  1431 	72, 80, 90, 100, 110, 120, 130, 140,
  1431 	 72,  80,  90, 100, 110, 120, 130, 140,
  1432 	150, 170, 190, 210, 230, 250, 250, 250,
  1432 	150, 170, 190, 210, 230, 250, 250, 250,
  1433 };
  1433 };
  1434 
  1434 
  1435 void CheckVehicleBreakdown(Vehicle *v)
  1435 void CheckVehicleBreakdown(Vehicle *v)
  1436 {
  1436 {
  2136 	return GetEngineColourMap(v->engine_type, v->owner);
  2136 	return GetEngineColourMap(v->engine_type, v->owner);
  2137 }
  2137 }
  2138 
  2138 
  2139 // Save and load of vehicles
  2139 // Save and load of vehicles
  2140 const SaveLoad _common_veh_desc[] = {
  2140 const SaveLoad _common_veh_desc[] = {
  2141 	SLE_VAR(Vehicle,subtype,					SLE_UINT8),
  2141 	    SLE_VAR(Vehicle, subtype,              SLE_UINT8),
  2142 
  2142 
  2143 	SLE_REF(Vehicle,next,							REF_VEHICLE_OLD),
  2143 	    SLE_REF(Vehicle, next,                 REF_VEHICLE_OLD),
  2144 	SLE_VAR(Vehicle,string_id,				SLE_STRINGID),
  2144 	    SLE_VAR(Vehicle, string_id,            SLE_STRINGID),
  2145 	SLE_CONDVAR(Vehicle,unitnumber,				SLE_FILE_U8 | SLE_VAR_U16, 0, 7),
  2145 	SLE_CONDVAR(Vehicle, unitnumber,           SLE_FILE_U8  | SLE_VAR_U16,  0, 7),
  2146 	SLE_CONDVAR(Vehicle,unitnumber,				SLE_UINT16, 8, SL_MAX_VERSION),
  2146 	SLE_CONDVAR(Vehicle, unitnumber,           SLE_UINT16,                  8, SL_MAX_VERSION),
  2147 	SLE_VAR(Vehicle,owner,						SLE_UINT8),
  2147 	    SLE_VAR(Vehicle, owner,                SLE_UINT8),
  2148 	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
  2148 	SLE_CONDVAR(Vehicle, tile,                 SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2149 	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, SL_MAX_VERSION),
  2149 	SLE_CONDVAR(Vehicle, tile,                 SLE_UINT32,                  6, SL_MAX_VERSION),
  2150 	SLE_CONDVAR(Vehicle,dest_tile,		SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
  2150 	SLE_CONDVAR(Vehicle, dest_tile,            SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2151 	SLE_CONDVAR(Vehicle,dest_tile,		SLE_UINT32, 6, SL_MAX_VERSION),
  2151 	SLE_CONDVAR(Vehicle, dest_tile,            SLE_UINT32,                  6, SL_MAX_VERSION),
  2152 
  2152 
  2153 	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
  2153 	SLE_CONDVAR(Vehicle, x_pos,                SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2154 	SLE_CONDVAR(Vehicle,x_pos,				SLE_UINT32, 6, SL_MAX_VERSION),
  2154 	SLE_CONDVAR(Vehicle, x_pos,                SLE_UINT32,                  6, SL_MAX_VERSION),
  2155 	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
  2155 	SLE_CONDVAR(Vehicle, y_pos,                SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2156 	SLE_CONDVAR(Vehicle,y_pos,				SLE_UINT32, 6, SL_MAX_VERSION),
  2156 	SLE_CONDVAR(Vehicle, y_pos,                SLE_UINT32,                  6, SL_MAX_VERSION),
  2157 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
  2157 	    SLE_VAR(Vehicle, z_pos,                SLE_UINT8),
  2158 	SLE_VAR(Vehicle,direction,				SLE_UINT8),
  2158 	    SLE_VAR(Vehicle, direction,            SLE_UINT8),
  2159 
  2159 
  2160 	SLE_VAR(Vehicle,cur_image,				SLE_UINT16),
  2160 	    SLE_VAR(Vehicle, cur_image,            SLE_UINT16),
  2161 	SLE_VAR(Vehicle,spritenum,				SLE_UINT8),
  2161 	    SLE_VAR(Vehicle, spritenum,            SLE_UINT8),
  2162 	SLE_VAR(Vehicle,sprite_width,			SLE_UINT8),
  2162 	    SLE_VAR(Vehicle, sprite_width,         SLE_UINT8),
  2163 	SLE_VAR(Vehicle,sprite_height,		SLE_UINT8),
  2163 	    SLE_VAR(Vehicle, sprite_height,        SLE_UINT8),
  2164 	SLE_VAR(Vehicle,z_height,					SLE_UINT8),
  2164 	    SLE_VAR(Vehicle, z_height,             SLE_UINT8),
  2165 	SLE_VAR(Vehicle,x_offs,						SLE_INT8),
  2165 	    SLE_VAR(Vehicle, x_offs,               SLE_INT8),
  2166 	SLE_VAR(Vehicle,y_offs,						SLE_INT8),
  2166 	    SLE_VAR(Vehicle, y_offs,               SLE_INT8),
  2167 	SLE_VAR(Vehicle,engine_type,			SLE_UINT16),
  2167 	    SLE_VAR(Vehicle, engine_type,          SLE_UINT16),
  2168 
  2168 
  2169 	SLE_VAR(Vehicle,max_speed,				SLE_UINT16),
  2169 	    SLE_VAR(Vehicle, max_speed,            SLE_UINT16),
  2170 	SLE_VAR(Vehicle,cur_speed,				SLE_UINT16),
  2170 	    SLE_VAR(Vehicle, cur_speed,            SLE_UINT16),
  2171 	SLE_VAR(Vehicle,subspeed,					SLE_UINT8),
  2171 	    SLE_VAR(Vehicle, subspeed,             SLE_UINT8),
  2172 	SLE_VAR(Vehicle,acceleration,			SLE_UINT8),
  2172 	    SLE_VAR(Vehicle, acceleration,         SLE_UINT8),
  2173 	SLE_VAR(Vehicle,progress,					SLE_UINT8),
  2173 	    SLE_VAR(Vehicle, progress,             SLE_UINT8),
  2174 
  2174 
  2175 	SLE_VAR(Vehicle,vehstatus,				SLE_UINT8),
  2175 	    SLE_VAR(Vehicle, vehstatus,            SLE_UINT8),
  2176 	SLE_CONDVAR(Vehicle,last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  2176 	SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8  | SLE_VAR_U16,  0, 4),
  2177 	SLE_CONDVAR(Vehicle,last_station_visited, SLE_UINT16, 5, SL_MAX_VERSION),
  2177 	SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16,                  5, SL_MAX_VERSION),
  2178 
  2178 
  2179 	SLE_VAR(Vehicle,cargo_type,				SLE_UINT8),
  2179 	    SLE_VAR(Vehicle, cargo_type,           SLE_UINT8),
  2180 	SLE_VAR(Vehicle,cargo_days,				SLE_UINT8),
  2180 	    SLE_VAR(Vehicle, cargo_days,           SLE_UINT8),
  2181 	SLE_CONDVAR(Vehicle,cargo_source,			SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
  2181 	SLE_CONDVAR(Vehicle, cargo_source,         SLE_FILE_U8  | SLE_VAR_U16,  0, 6),
  2182 	SLE_CONDVAR(Vehicle,cargo_source,			SLE_UINT16, 7, SL_MAX_VERSION),
  2182 	SLE_CONDVAR(Vehicle, cargo_source,         SLE_UINT16,                  7, SL_MAX_VERSION),
  2183 	SLE_VAR(Vehicle,cargo_cap,				SLE_UINT16),
  2183 	    SLE_VAR(Vehicle, cargo_cap,            SLE_UINT16),
  2184 	SLE_VAR(Vehicle,cargo_count,			SLE_UINT16),
  2184 	    SLE_VAR(Vehicle, cargo_count,          SLE_UINT16),
  2185 
  2185 
  2186 	SLE_VAR(Vehicle,day_counter,			SLE_UINT8),
  2186 	    SLE_VAR(Vehicle, day_counter,          SLE_UINT8),
  2187 	SLE_VAR(Vehicle,tick_counter,			SLE_UINT8),
  2187 	    SLE_VAR(Vehicle, tick_counter,         SLE_UINT8),
  2188 
  2188 
  2189 	SLE_VAR(Vehicle,cur_order_index,	SLE_UINT8),
  2189 	    SLE_VAR(Vehicle, cur_order_index,      SLE_UINT8),
  2190 	SLE_VAR(Vehicle,num_orders,				SLE_UINT8),
  2190 	    SLE_VAR(Vehicle, num_orders,           SLE_UINT8),
  2191 
  2191 
  2192 	/* This next line is for version 4 and prior compatibility.. it temporarily reads
  2192 	/* This next line is for version 4 and prior compatibility.. it temporarily reads
  2193 	    type and flags (which were both 4 bits) into type. Later on this is
  2193 	    type and flags (which were both 4 bits) into type. Later on this is
  2194 	    converted correctly */
  2194 	    converted correctly */
  2195 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),    SLE_UINT8,  0, 4),
  2195 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),    SLE_UINT8,                 0, 4),
  2196 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  2196 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  2197 
  2197 
  2198 	/* Orders for version 5 and on */
  2198 	/* Orders for version 5 and on */
  2199 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),    SLE_UINT8,  5, SL_MAX_VERSION),
  2199 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, type),    SLE_UINT8,                 5, SL_MAX_VERSION),
  2200 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, flags),   SLE_UINT8,  5, SL_MAX_VERSION),
  2200 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, flags),   SLE_UINT8,                 5, SL_MAX_VERSION),
  2201 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_UINT16, 5, SL_MAX_VERSION),
  2201 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_UINT16,                5, SL_MAX_VERSION),
  2202 
  2202 
  2203 	SLE_REF(Vehicle,orders,						REF_ORDER),
  2203 	    SLE_REF(Vehicle, orders,               REF_ORDER),
  2204 
  2204 
  2205 	SLE_CONDVAR(Vehicle,age,					SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
  2205 	SLE_CONDVAR(Vehicle, age,                  SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
  2206 	SLE_CONDVAR(Vehicle,age,					SLE_INT32, 31, SL_MAX_VERSION),
  2206 	SLE_CONDVAR(Vehicle, age,                  SLE_INT32,                  31, SL_MAX_VERSION),
  2207 	SLE_CONDVAR(Vehicle,max_age,			SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
  2207 	SLE_CONDVAR(Vehicle, max_age,              SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
  2208 	SLE_CONDVAR(Vehicle,max_age,			SLE_INT32, 31, SL_MAX_VERSION),
  2208 	SLE_CONDVAR(Vehicle, max_age,              SLE_INT32,                  31, SL_MAX_VERSION),
  2209 	SLE_CONDVAR(Vehicle,date_of_last_service,	SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
  2209 	SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
  2210 	SLE_CONDVAR(Vehicle,date_of_last_service,	SLE_INT32, 31, SL_MAX_VERSION),
  2210 	SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32,                  31, SL_MAX_VERSION),
  2211 	SLE_CONDVAR(Vehicle,service_interval,			SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
  2211 	SLE_CONDVAR(Vehicle, service_interval,     SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
  2212 	SLE_CONDVAR(Vehicle,service_interval,			SLE_INT32, 31, SL_MAX_VERSION),
  2212 	SLE_CONDVAR(Vehicle, service_interval,     SLE_INT32,                  31, SL_MAX_VERSION),
  2213 	SLE_VAR(Vehicle,reliability,			SLE_UINT16),
  2213 	    SLE_VAR(Vehicle, reliability,          SLE_UINT16),
  2214 	SLE_VAR(Vehicle,reliability_spd_dec,SLE_UINT16),
  2214 	    SLE_VAR(Vehicle, reliability_spd_dec,  SLE_UINT16),
  2215 	SLE_VAR(Vehicle,breakdown_ctr,		SLE_UINT8),
  2215 	    SLE_VAR(Vehicle, breakdown_ctr,        SLE_UINT8),
  2216 	SLE_VAR(Vehicle,breakdown_delay,	SLE_UINT8),
  2216 	    SLE_VAR(Vehicle, breakdown_delay,      SLE_UINT8),
  2217 	SLE_VAR(Vehicle,breakdowns_since_last_service,	SLE_UINT8),
  2217 	    SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8),
  2218 	SLE_VAR(Vehicle,breakdown_chance,	SLE_UINT8),
  2218 	    SLE_VAR(Vehicle, breakdown_chance,     SLE_UINT8),
  2219 	SLE_CONDVAR(Vehicle,build_year,		SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
  2219 	SLE_CONDVAR(Vehicle, build_year,           SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
  2220 	SLE_CONDVAR(Vehicle,build_year,		SLE_INT32, 31, SL_MAX_VERSION),
  2220 	SLE_CONDVAR(Vehicle, build_year,           SLE_INT32,                 31, SL_MAX_VERSION),
  2221 
  2221 
  2222 	SLE_VAR(Vehicle,load_unload_time_rem,	SLE_UINT16),
  2222 	    SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
  2223 
  2223 
  2224 	SLE_VAR(Vehicle,profit_this_year,	SLE_INT32),
  2224 	    SLE_VAR(Vehicle, profit_this_year,     SLE_INT32),
  2225 	SLE_VAR(Vehicle,profit_last_year,	SLE_INT32),
  2225 	    SLE_VAR(Vehicle, profit_last_year,     SLE_INT32),
  2226 	SLE_VAR(Vehicle,value,						SLE_UINT32),
  2226 	    SLE_VAR(Vehicle, value,                SLE_UINT32),
  2227 
  2227 
  2228 	SLE_VAR(Vehicle,random_bits,       SLE_UINT8),
  2228 	    SLE_VAR(Vehicle, random_bits,          SLE_UINT8),
  2229 	SLE_VAR(Vehicle,waiting_triggers,  SLE_UINT8),
  2229 	    SLE_VAR(Vehicle, waiting_triggers,     SLE_UINT8),
  2230 
  2230 
  2231 	SLE_REF(Vehicle,next_shared,				REF_VEHICLE),
  2231 	    SLE_REF(Vehicle, next_shared,          REF_VEHICLE),
  2232 	SLE_REF(Vehicle,prev_shared,				REF_VEHICLE),
  2232 	    SLE_REF(Vehicle, prev_shared,          REF_VEHICLE),
  2233 
  2233 
  2234 	// reserve extra space in savegame here. (currently 10 bytes)
  2234 	// reserve extra space in savegame here. (currently 10 bytes)
  2235 	SLE_CONDNULL(10, 2, SL_MAX_VERSION),
  2235 	SLE_CONDNULL(10,                                                       2, SL_MAX_VERSION),
  2236 
  2236 
  2237 	SLE_END()
  2237 	SLE_END()
  2238 };
  2238 };
  2239 
  2239 
  2240 
  2240 
  2241 static const SaveLoad _train_desc[] = {
  2241 static const SaveLoad _train_desc[] = {
  2242 	SLE_WRITEBYTE(Vehicle,type,VEH_Train, 0), // Train type. VEH_Train in mem, 0 in file.
  2242 	SLE_WRITEBYTE(Vehicle, type, VEH_Train, 0), // Train type. VEH_Train in mem, 0 in file.
  2243 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2243 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2244 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRail,crash_anim_pos), SLE_UINT16),
  2244 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, crash_anim_pos),         SLE_UINT16),
  2245 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRail,force_proceed), SLE_UINT8),
  2245 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, force_proceed),          SLE_UINT8),
  2246 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRail,railtype), SLE_UINT8),
  2246 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, railtype),               SLE_UINT8),
  2247 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRail,track), SLE_UINT8),
  2247 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRail, track),                  SLE_UINT8),
  2248 
  2248 
  2249 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleRail,flags), SLE_UINT8, 2, SL_MAX_VERSION),
  2249 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, flags),                  SLE_UINT8,  2, SL_MAX_VERSION),
  2250 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleRail,days_since_order_progr), SLE_UINT16, 2, SL_MAX_VERSION),
  2250 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRail, days_since_order_progr), SLE_UINT16, 2, SL_MAX_VERSION),
  2251 
  2251 
  2252 	SLE_CONDNULL(2, 2, 19),
  2252 	SLE_CONDNULL(2, 2, 19),
  2253 	// reserve extra space in savegame here. (currently 11 bytes)
  2253 	// reserve extra space in savegame here. (currently 11 bytes)
  2254 	SLE_CONDNULL(11, 2, SL_MAX_VERSION),
  2254 	SLE_CONDNULL(11, 2, SL_MAX_VERSION),
  2255 
  2255 
  2256 	SLE_END()
  2256 	SLE_END()
  2257 };
  2257 };
  2258 
  2258 
  2259 static const SaveLoad _roadveh_desc[] = {
  2259 static const SaveLoad _roadveh_desc[] = {
  2260 	SLE_WRITEBYTE(Vehicle,type,VEH_Road, 1), // Road type. VEH_Road in mem, 1 in file.
  2260 	SLE_WRITEBYTE(Vehicle, type, VEH_Road, 1), // Road type. VEH_Road in mem, 1 in file.
  2261 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2261 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2262 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,state),					SLE_UINT8),
  2262 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, state),          SLE_UINT8),
  2263 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,frame),					SLE_UINT8),
  2263 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, frame),          SLE_UINT8),
  2264 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,blocked_ctr),		SLE_UINT16),
  2264 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, blocked_ctr),    SLE_UINT16),
  2265 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,overtaking),		SLE_UINT8),
  2265 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, overtaking),     SLE_UINT8),
  2266 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,overtaking_ctr),SLE_UINT8),
  2266 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, overtaking_ctr), SLE_UINT8),
  2267 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,crashed_ctr),		SLE_UINT16),
  2267 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, crashed_ctr),    SLE_UINT16),
  2268 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,reverse_ctr),			SLE_UINT8),
  2268 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, reverse_ctr),    SLE_UINT8),
  2269 
  2269 
  2270 	SLE_CONDREFX(offsetof(Vehicle,u)+offsetof(VehicleRoad,slot), REF_ROADSTOPS, 6, SL_MAX_VERSION),
  2270 	SLE_CONDREFX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot),     REF_ROADSTOPS, 6, SL_MAX_VERSION),
  2271 	SLE_CONDNULL(1, 6, SL_MAX_VERSION),
  2271 	SLE_CONDNULL(1,                                                                     6, SL_MAX_VERSION),
  2272 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleRoad,slot_age), SLE_UINT8, 6, SL_MAX_VERSION),
  2272 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleRoad, slot_age), SLE_UINT8,     6, SL_MAX_VERSION),
       
  2273 	// reserve extra space in savegame here. (currently 16 bytes)
       
  2274 	SLE_CONDNULL(16,                                                                    2, SL_MAX_VERSION),
       
  2275 
       
  2276 	SLE_END()
       
  2277 };
       
  2278 
       
  2279 static const SaveLoad _ship_desc[] = {
       
  2280 	SLE_WRITEBYTE(Vehicle, type, VEH_Ship, 2), // Ship type. VEH_Ship in mem, 2 in file.
       
  2281 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
       
  2282 	SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleShip, state), SLE_UINT8),
       
  2283 
  2273 	// reserve extra space in savegame here. (currently 16 bytes)
  2284 	// reserve extra space in savegame here. (currently 16 bytes)
  2274 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
  2285 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
  2275 
  2286 
  2276 	SLE_END()
  2287 	SLE_END()
  2277 };
  2288 };
  2278 
  2289 
  2279 static const SaveLoad _ship_desc[] = {
  2290 static const SaveLoad _aircraft_desc[] = {
  2280 	SLE_WRITEBYTE(Vehicle,type,VEH_Ship, 2), // Ship type. VEH_Ship in mem, 2 in file.
  2291 	SLE_WRITEBYTE(Vehicle, type, VEH_Aircraft, 3), // Aircraft type. VEH_Aircraft in mem, 3 in file.
  2281 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2292 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2282 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleShip,state),				SLE_UINT8),
  2293 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, crashed_counter), SLE_UINT16),
       
  2294 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, pos),             SLE_UINT8),
       
  2295 
       
  2296 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, targetairport),   SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
       
  2297 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, targetairport),   SLE_UINT16,                5, SL_MAX_VERSION),
       
  2298 
       
  2299 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleAir, state),           SLE_UINT8),
       
  2300 
       
  2301 	SLE_CONDVARX(offsetof(Vehicle, u) + offsetof(VehicleAir, previous_pos),    SLE_UINT8,                 2, SL_MAX_VERSION),
       
  2302 
       
  2303 	// reserve extra space in savegame here. (currently 15 bytes)
       
  2304 	SLE_CONDNULL(15,                                                                                      2, SL_MAX_VERSION),
       
  2305 
       
  2306 	SLE_END()
       
  2307 };
       
  2308 
       
  2309 static const SaveLoad _special_desc[] = {
       
  2310 	SLE_WRITEBYTE(Vehicle,type,VEH_Special, 4),
       
  2311 
       
  2312 	    SLE_VAR(Vehicle, subtype,       SLE_UINT8),
       
  2313 
       
  2314 	SLE_CONDVAR(Vehicle, tile,          SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
       
  2315 	SLE_CONDVAR(Vehicle, tile,          SLE_UINT32,                 6, SL_MAX_VERSION),
       
  2316 
       
  2317 	SLE_CONDVAR(Vehicle, x_pos,         SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
       
  2318 	SLE_CONDVAR(Vehicle, x_pos,         SLE_INT32,                  6, SL_MAX_VERSION),
       
  2319 	SLE_CONDVAR(Vehicle, y_pos,         SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
       
  2320 	SLE_CONDVAR(Vehicle, y_pos,         SLE_INT32,                  6, SL_MAX_VERSION),
       
  2321 	    SLE_VAR(Vehicle, z_pos,         SLE_UINT8),
       
  2322 
       
  2323 	    SLE_VAR(Vehicle, cur_image,     SLE_UINT16),
       
  2324 	    SLE_VAR(Vehicle, sprite_width,  SLE_UINT8),
       
  2325 	    SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
       
  2326 	    SLE_VAR(Vehicle, z_height,      SLE_UINT8),
       
  2327 	    SLE_VAR(Vehicle, x_offs,        SLE_INT8),
       
  2328 	    SLE_VAR(Vehicle, y_offs,        SLE_INT8),
       
  2329 	    SLE_VAR(Vehicle, progress,      SLE_UINT8),
       
  2330 	    SLE_VAR(Vehicle, vehstatus,     SLE_UINT8),
       
  2331 
       
  2332 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk0), SLE_UINT16),
       
  2333 	    SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleSpecial, unk2), SLE_UINT8),
  2283 
  2334 
  2284 	// reserve extra space in savegame here. (currently 16 bytes)
  2335 	// reserve extra space in savegame here. (currently 16 bytes)
  2285 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
  2336 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
  2286 
  2337 
  2287 	SLE_END()
  2338 	SLE_END()
  2288 };
  2339 };
  2289 
  2340 
  2290 static const SaveLoad _aircraft_desc[] = {
  2341 static const SaveLoad _disaster_desc[] = {
  2291 	SLE_WRITEBYTE(Vehicle,type,VEH_Aircraft, 3), // Aircraft type. VEH_Aircraft in mem, 3 in file.
  2342 	SLE_WRITEBYTE(Vehicle, type, VEH_Disaster, 5),
  2292 	SLE_INCLUDEX(0, INC_VEHICLE_COMMON),
  2343 
  2293 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,crashed_counter),	SLE_UINT16),
  2344 	    SLE_REF(Vehicle, next,          REF_VEHICLE_OLD),
  2294 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,pos),							SLE_UINT8),
  2345 
  2295 
  2346 	    SLE_VAR(Vehicle, subtype,       SLE_UINT8),
  2296 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport),		SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  2347 	SLE_CONDVAR(Vehicle, tile,          SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2297 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,targetairport),		SLE_UINT16, 5, SL_MAX_VERSION),
  2348 	SLE_CONDVAR(Vehicle, tile,          SLE_UINT32,                  6, SL_MAX_VERSION),
  2298 
  2349 	SLE_CONDVAR(Vehicle, dest_tile,     SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
  2299 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleAir,state),						SLE_UINT8),
  2350 	SLE_CONDVAR(Vehicle, dest_tile,     SLE_UINT32,                  6, SL_MAX_VERSION),
  2300 
  2351 
  2301 	SLE_CONDVARX(offsetof(Vehicle,u)+offsetof(VehicleAir,previous_pos),			SLE_UINT8, 2, SL_MAX_VERSION),
  2352 	SLE_CONDVAR(Vehicle, x_pos,         SLE_FILE_I16 | SLE_VAR_I32,  0, 5),
  2302 
  2353 	SLE_CONDVAR(Vehicle, x_pos,         SLE_INT32,                   6, SL_MAX_VERSION),
  2303 	// reserve extra space in savegame here. (currently 15 bytes)
  2354 	SLE_CONDVAR(Vehicle, y_pos,         SLE_FILE_I16 | SLE_VAR_I32,  0, 5),
  2304 	SLE_CONDNULL(15, 2, SL_MAX_VERSION),
  2355 	SLE_CONDVAR(Vehicle, y_pos,         SLE_INT32,                   6, SL_MAX_VERSION),
  2305 
  2356 	    SLE_VAR(Vehicle, z_pos,         SLE_UINT8),
  2306 	SLE_END()
  2357 	    SLE_VAR(Vehicle, direction,     SLE_UINT8),
  2307 };
  2358 
  2308 
  2359 	    SLE_VAR(Vehicle, x_offs,        SLE_INT8),
  2309 static const SaveLoad _special_desc[] = {
  2360 	    SLE_VAR(Vehicle, y_offs,        SLE_INT8),
  2310 	SLE_WRITEBYTE(Vehicle,type,VEH_Special, 4),
  2361 	    SLE_VAR(Vehicle, sprite_width,  SLE_UINT8),
  2311 
  2362 	    SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
  2312 	SLE_VAR(Vehicle,subtype,					SLE_UINT8),
  2363 	    SLE_VAR(Vehicle, z_height,      SLE_UINT8),
  2313 
  2364 	    SLE_VAR(Vehicle, owner,         SLE_UINT8),
  2314 	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
  2365 	    SLE_VAR(Vehicle, vehstatus,     SLE_UINT8),
  2315 	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, SL_MAX_VERSION),
  2366 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station),     SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  2316 
  2367 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station),     SLE_UINT16,                5, SL_MAX_VERSION),
  2317 	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
  2368 
  2318 	SLE_CONDVAR(Vehicle,x_pos,				SLE_INT32, 6, SL_MAX_VERSION),
  2369 	    SLE_VAR(Vehicle, cur_image,     SLE_UINT16),
  2319 	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
  2370 	SLE_CONDVAR(Vehicle, age,           SLE_FILE_U16 | SLE_VAR_I32,  0, 30),
  2320 	SLE_CONDVAR(Vehicle,y_pos,				SLE_INT32, 6, SL_MAX_VERSION),
  2371 	SLE_CONDVAR(Vehicle, age,           SLE_INT32,                  31, SL_MAX_VERSION),
  2321 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
  2372 	    SLE_VAR(Vehicle, tick_counter,  SLE_UINT8),
  2322 
  2373 
  2323 	SLE_VAR(Vehicle,cur_image,				SLE_UINT16),
  2374 	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, image_override), SLE_UINT16),
  2324 	SLE_VAR(Vehicle,sprite_width,			SLE_UINT8),
  2375 	   SLE_VARX(offsetof(Vehicle, u) + offsetof(VehicleDisaster, unk2),           SLE_UINT16),
  2325 	SLE_VAR(Vehicle,sprite_height,		SLE_UINT8),
       
  2326 	SLE_VAR(Vehicle,z_height,					SLE_UINT8),
       
  2327 	SLE_VAR(Vehicle,x_offs,						SLE_INT8),
       
  2328 	SLE_VAR(Vehicle,y_offs,						SLE_INT8),
       
  2329 	SLE_VAR(Vehicle,progress,					SLE_UINT8),
       
  2330 	SLE_VAR(Vehicle,vehstatus,				SLE_UINT8),
       
  2331 
       
  2332 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleSpecial,unk0),	SLE_UINT16),
       
  2333 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleSpecial,unk2),	SLE_UINT8),
       
  2334 
  2376 
  2335 	// reserve extra space in savegame here. (currently 16 bytes)
  2377 	// reserve extra space in savegame here. (currently 16 bytes)
  2336 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
  2378 	SLE_CONDNULL(16,                                                 2, SL_MAX_VERSION),
  2337 
       
  2338 	SLE_END()
       
  2339 };
       
  2340 
       
  2341 static const SaveLoad _disaster_desc[] = {
       
  2342 	SLE_WRITEBYTE(Vehicle,type,VEH_Disaster, 5),
       
  2343 
       
  2344 	SLE_REF(Vehicle,next,							REF_VEHICLE_OLD),
       
  2345 
       
  2346 	SLE_VAR(Vehicle,subtype,					SLE_UINT8),
       
  2347 	SLE_CONDVAR(Vehicle,tile,					SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
       
  2348 	SLE_CONDVAR(Vehicle,tile,					SLE_UINT32, 6, SL_MAX_VERSION),
       
  2349 	SLE_CONDVAR(Vehicle,dest_tile,		SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
       
  2350 	SLE_CONDVAR(Vehicle,dest_tile,		SLE_UINT32, 6, SL_MAX_VERSION),
       
  2351 
       
  2352 	SLE_CONDVAR(Vehicle,x_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
       
  2353 	SLE_CONDVAR(Vehicle,x_pos,				SLE_INT32, 6, SL_MAX_VERSION),
       
  2354 	SLE_CONDVAR(Vehicle,y_pos,				SLE_FILE_I16 | SLE_VAR_I32, 0, 5),
       
  2355 	SLE_CONDVAR(Vehicle,y_pos,				SLE_INT32, 6, SL_MAX_VERSION),
       
  2356 	SLE_VAR(Vehicle,z_pos,						SLE_UINT8),
       
  2357 	SLE_VAR(Vehicle,direction,				SLE_UINT8),
       
  2358 
       
  2359 	SLE_VAR(Vehicle,x_offs,						SLE_INT8),
       
  2360 	SLE_VAR(Vehicle,y_offs,						SLE_INT8),
       
  2361 	SLE_VAR(Vehicle,sprite_width,			SLE_UINT8),
       
  2362 	SLE_VAR(Vehicle,sprite_height,		SLE_UINT8),
       
  2363 	SLE_VAR(Vehicle,z_height,					SLE_UINT8),
       
  2364 	SLE_VAR(Vehicle,owner,						SLE_UINT8),
       
  2365 	SLE_VAR(Vehicle,vehstatus,				SLE_UINT8),
       
  2366 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
       
  2367 	SLE_CONDVARX(offsetof(Vehicle, current_order) + offsetof(Order, station), SLE_UINT16, 5, SL_MAX_VERSION),
       
  2368 
       
  2369 	SLE_VAR(Vehicle,cur_image,				SLE_UINT16),
       
  2370 	SLE_CONDVAR(Vehicle,age,					SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
       
  2371 	SLE_CONDVAR(Vehicle,age,					SLE_INT32, 31, SL_MAX_VERSION),
       
  2372 	SLE_VAR(Vehicle,tick_counter,			SLE_UINT8),
       
  2373 
       
  2374 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleDisaster,image_override),	SLE_UINT16),
       
  2375 	SLE_VARX(offsetof(Vehicle,u)+offsetof(VehicleDisaster,unk2),						SLE_UINT16),
       
  2376 
       
  2377 	// reserve extra space in savegame here. (currently 16 bytes)
       
  2378 	SLE_CONDNULL(16, 2, SL_MAX_VERSION),
       
  2379 
  2379 
  2380 	SLE_END()
  2380 	SLE_END()
  2381 };
  2381 };
  2382 
  2382 
  2383 
  2383