@@ -134,6 +134,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_BUILD_OBJECT_RATE_LIMIT,XSCF_NULL, 1, 1, "build_object_rate_limit", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_LOCAL_COMPANY, XSCF_IGNORABLE_ALL, 1, 1, "local_company", saveLC, loadLC, nullptr },
|
||||
{ XSLFI_THROUGH_TRAIN_DEPOT, XSCF_NULL, 1, 1, "drive_through_train_depot", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_MORE_VEHICLE_ORDERS, XSCF_NULL, 1, 1, "more_veh_orders", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker
|
||||
};
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_BUILD_OBJECT_RATE_LIMIT, ///< Build object rate limit
|
||||
XSLFI_LOCAL_COMPANY, ///< Local company ID
|
||||
XSLFI_THROUGH_TRAIN_DEPOT, ///< Drive-through train depots
|
||||
XSLFI_MORE_VEHICLE_ORDERS, ///< More vehicle orders - VehicleOrderID is 16 bits instead of 8
|
||||
|
||||
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
||||
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
||||
|
||||
@@ -1131,7 +1131,7 @@ static const OldChunks vehicle_chunk[] = {
|
||||
OCL_VAR ( OC_UINT16, 1, &_old_order ),
|
||||
|
||||
OCL_NULL ( 1 ), ///< num_orders, now calculated
|
||||
OCL_SVAR( OC_UINT8, Vehicle, cur_implicit_order_index ),
|
||||
OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, cur_implicit_order_index ),
|
||||
OCL_SVAR( OC_TILE, Vehicle, dest_tile ),
|
||||
OCL_SVAR( OC_UINT16, Vehicle, load_unload_ticks ),
|
||||
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, date_of_last_service ),
|
||||
@@ -1243,6 +1243,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num)
|
||||
if (!LoadChunk(ls, v, vehicle_chunk)) return false;
|
||||
if (v == nullptr) continue;
|
||||
v->refit_cap = v->cargo_cap;
|
||||
if (v->cur_implicit_order_index == 0xFF) v->cur_implicit_order_index == INVALID_VEH_ORDER_ID;
|
||||
|
||||
SpriteID sprite = v->sprite_seq.seq[0].sprite;
|
||||
/* no need to override other sprites */
|
||||
@@ -1321,6 +1322,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num)
|
||||
|
||||
if (!LoadChunk(ls, v, vehicle_chunk)) return false;
|
||||
if (v == nullptr) continue;
|
||||
if (v->cur_implicit_order_index == 0xFF) v->cur_implicit_order_index == INVALID_VEH_ORDER_ID;
|
||||
|
||||
_old_vehicle_names[_current_vehicle_id] = RemapOldStringID(_old_string_id);
|
||||
|
||||
|
||||
@@ -305,9 +305,9 @@ const SaveLoad *GetOrderBackupDescription()
|
||||
SLE_STR(OrderBackup, name, SLE_STR, 0),
|
||||
SLE_CONDNULL(2, SL_MIN_VERSION, SLV_192), // clone (2 bytes of pointer, i.e. garbage)
|
||||
SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, SLV_192, SL_MAX_VERSION),
|
||||
SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8),
|
||||
SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, SLV_176, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(OrderBackup, cur_timetable_order_index, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
||||
SLE_VAR(OrderBackup, cur_real_order_index, SLE_VEHORDERID),
|
||||
SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_VEHORDERID, SLV_176, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(OrderBackup, cur_timetable_order_index, SLE_VEHORDERID, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
||||
SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, SLV_176, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, SLV_176, SL_MAX_VERSION),
|
||||
SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, SLV_176, SL_MAX_VERSION),
|
||||
|
||||
@@ -920,6 +920,7 @@ static void SlSaveLoadConvGeneric(void *ptr, VarType conv)
|
||||
case SLE_FILE_U8: assert(x >= 0 && x <= 255); SlWriteByte(x);break;
|
||||
case SLE_FILE_I16:assert(x >= -32768 && x <= 32767); SlWriteUint16(x);break;
|
||||
case SLE_FILE_STRINGID:
|
||||
case SLE_FILE_VEHORDERID:
|
||||
case SLE_FILE_U16:assert(x >= 0 && x <= 65535); SlWriteUint16(x);break;
|
||||
case SLE_FILE_I32:
|
||||
case SLE_FILE_U32: SlWriteUint32((uint32)x);break;
|
||||
@@ -943,6 +944,14 @@ static void SlSaveLoadConvGeneric(void *ptr, VarType conv)
|
||||
case SLE_FILE_I64: x = (int64 )SlReadUint64(); break;
|
||||
case SLE_FILE_U64: x = (uint64)SlReadUint64(); break;
|
||||
case SLE_FILE_STRINGID: x = RemapOldStringID((uint16)SlReadUint16()); break;
|
||||
case SLE_FILE_VEHORDERID:
|
||||
if (SlXvIsFeaturePresent(XSLFI_MORE_VEHICLE_ORDERS)) {
|
||||
x = (uint16)SlReadUint16();
|
||||
} else {
|
||||
VehicleOrderID id = (byte)SlReadByte();
|
||||
x = (id == 0xFF) ? INVALID_VEH_ORDER_ID : id;
|
||||
}
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
|
||||
|
||||
@@ -449,7 +449,8 @@ enum VarTypes {
|
||||
SLE_FILE_U64 = 7,
|
||||
SLE_FILE_STRINGID = 8, ///< StringID offset into strings-array
|
||||
SLE_FILE_STRING = 9,
|
||||
/* 6 more possible file-primitives */
|
||||
SLE_FILE_VEHORDERID = 10,
|
||||
/* 5 more possible file-primitives */
|
||||
|
||||
/* 4 bits allocated a maximum of 16 types for NumberType */
|
||||
SLE_VAR_BL = 0 << 4,
|
||||
@@ -493,6 +494,7 @@ enum VarTypes {
|
||||
SLE_STRINGQUOTE = SLE_FILE_STRING | SLE_VAR_STRQ,
|
||||
SLE_NAME = SLE_FILE_STRINGID | SLE_VAR_NAME,
|
||||
SLE_CNAME = SLE_FILE_STRINGID | SLE_VAR_CNAME,
|
||||
SLE_VEHORDERID = SLE_FILE_VEHORDERID | SLE_VAR_U16,
|
||||
|
||||
/* Shortcut values */
|
||||
SLE_UINT = SLE_UINT32,
|
||||
|
||||
@@ -680,9 +680,9 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
|
||||
return version_in_range && (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 2) || SlXvIsFeaturePresent(XSLFI_JOKERPP) || SlXvIsFeaturePresent(XSLFI_CHILLPP) || SlXvIsFeaturePresent(XSLFI_VARIABLE_DAY_LENGTH, 2));
|
||||
})),
|
||||
|
||||
SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8),
|
||||
SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, SLV_158, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(Vehicle, cur_timetable_order_index, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
||||
SLE_VAR(Vehicle, cur_implicit_order_index, SLE_VEHORDERID),
|
||||
SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_VEHORDERID, SLV_158, SL_MAX_VERSION),
|
||||
SLE_CONDVAR_X(Vehicle, cur_timetable_order_index, SLE_VEHORDERID, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
||||
/* num_orders is now part of OrderList and is not saved but counted */
|
||||
SLE_CONDNULL(1, SL_MIN_VERSION, SLV_105),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user