|
|
|
@@ -9,74 +9,79 @@
|
|
|
|
|
|
|
|
|
|
#include "saveload.h"
|
|
|
|
|
|
|
|
|
|
const SaveLoadTable GTD() {
|
|
|
|
|
|
|
|
|
|
static const SaveLoad _template_veh_desc[] = {
|
|
|
|
|
SLE_REF(TemplateVehicle, next, REF_TEMPLATE_VEHICLE),
|
|
|
|
|
NamedSaveLoadTable GetTemplateVehicleDesc() {
|
|
|
|
|
static const NamedSaveLoad _template_veh_desc[] = {
|
|
|
|
|
NSL("next", SLE_REF(TemplateVehicle, next, REF_TEMPLATE_VEHICLE)),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, reuse_depot_vehicles, SLE_UINT8),
|
|
|
|
|
SLE_VAR(TemplateVehicle, keep_remaining_vehicles, SLE_UINT8),
|
|
|
|
|
SLE_VAR(TemplateVehicle, refit_as_template, SLE_UINT8),
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, replace_old_only, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 5)),
|
|
|
|
|
NSL("reuse_depot_vehicles", SLE_VAR(TemplateVehicle, reuse_depot_vehicles, SLE_UINT8)),
|
|
|
|
|
NSL("keep_remaining_vehicles", SLE_VAR(TemplateVehicle, keep_remaining_vehicles, SLE_UINT8)),
|
|
|
|
|
NSL("refit_as_template", SLE_VAR(TemplateVehicle, refit_as_template, SLE_UINT8)),
|
|
|
|
|
NSL("replace_old_only", SLE_CONDVAR_X(TemplateVehicle, replace_old_only, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 5))),
|
|
|
|
|
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, owner, SLE_VAR_U8 | SLE_FILE_U32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, owner, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 4)),
|
|
|
|
|
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
|
|
|
|
|
NSL("owner", SLE_CONDVAR_X(TemplateVehicle, owner, SLE_VAR_U8 | SLE_FILE_U32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3))),
|
|
|
|
|
NSL("owner", SLE_CONDVAR_X(TemplateVehicle, owner, SLE_UINT8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 4))),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3))),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, engine_type, SLE_UINT16),
|
|
|
|
|
SLE_VAR(TemplateVehicle, cargo_type, SLE_UINT8),
|
|
|
|
|
SLE_VAR(TemplateVehicle, cargo_cap, SLE_UINT16),
|
|
|
|
|
SLE_VAR(TemplateVehicle, cargo_subtype, SLE_UINT8),
|
|
|
|
|
NSL("engine_type", SLE_VAR(TemplateVehicle, engine_type, SLE_UINT16)),
|
|
|
|
|
NSL("cargo_type", SLE_VAR(TemplateVehicle, cargo_type, SLE_UINT8)),
|
|
|
|
|
NSL("cargo_capacity", SLE_VAR(TemplateVehicle, cargo_cap, SLE_UINT16)),
|
|
|
|
|
NSL("cargo_subtype", SLE_VAR(TemplateVehicle, cargo_subtype, SLE_UINT8)),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, subtype, SLE_UINT8),
|
|
|
|
|
SLE_VAR(TemplateVehicle, railtype, SLE_UINT8),
|
|
|
|
|
NSL("subtype", SLE_VAR(TemplateVehicle, subtype, SLE_UINT8)),
|
|
|
|
|
NSL("railtype", SLE_VAR(TemplateVehicle, railtype, SLE_UINT8)),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, index, SLE_UINT32),
|
|
|
|
|
NSL("", SLE_VAR(TemplateVehicle, index, SLE_UINT32)),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, real_consist_length, SLE_UINT16),
|
|
|
|
|
NSL("real_consist_length", SLE_VAR(TemplateVehicle, real_consist_length, SLE_UINT16)),
|
|
|
|
|
|
|
|
|
|
SLE_VAR(TemplateVehicle, max_speed, SLE_UINT16),
|
|
|
|
|
SLE_VAR(TemplateVehicle, power, SLE_UINT32),
|
|
|
|
|
SLE_VAR(TemplateVehicle, empty_weight, SLE_UINT32),
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, full_weight, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 6)),
|
|
|
|
|
SLE_VAR(TemplateVehicle, max_te, SLE_UINT32),
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, air_drag, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 8)),
|
|
|
|
|
NSL("max_speed", SLE_VAR(TemplateVehicle, max_speed, SLE_UINT16)),
|
|
|
|
|
NSL("power", SLE_VAR(TemplateVehicle, power, SLE_UINT32)),
|
|
|
|
|
NSL("empty_weight", SLE_VAR(TemplateVehicle, empty_weight, SLE_UINT32)),
|
|
|
|
|
NSL("full_weight", SLE_CONDVAR_X(TemplateVehicle, full_weight, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 6))),
|
|
|
|
|
NSL("max_te", SLE_VAR(TemplateVehicle, max_te, SLE_UINT32)),
|
|
|
|
|
NSL("air_drag", SLE_CONDVAR_X(TemplateVehicle, air_drag, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 8))),
|
|
|
|
|
|
|
|
|
|
SLE_CONDVAR_X(TemplateVehicle, ctrl_flags, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 7)),
|
|
|
|
|
SLE_CONDSSTR_X(TemplateVehicle, name, SLE_STR | SLF_ALLOW_CONTROL, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 9)),
|
|
|
|
|
NSL("ctrl_flags", SLE_CONDVAR_X(TemplateVehicle, ctrl_flags, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 7))),
|
|
|
|
|
NSL("name", SLE_CONDSSTR_X(TemplateVehicle, name, SLE_STR | SLF_ALLOW_CONTROL, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 9))),
|
|
|
|
|
|
|
|
|
|
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
|
|
|
|
|
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 1)),
|
|
|
|
|
SLE_CONDNULL_X(36, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2, 3)),
|
|
|
|
|
SLE_CONDNULL_X(36, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)),
|
|
|
|
|
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3)),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3))),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 1))),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(36, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 2, 3))),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(36, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP))),
|
|
|
|
|
NSL("", SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TEMPLATE_REPLACEMENT, 0, 3))),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return _template_veh_desc;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static void Save_TMPLS()
|
|
|
|
|
{
|
|
|
|
|
SaveLoadTableData slt = SlTableHeader(GetTemplateVehicleDesc());
|
|
|
|
|
|
|
|
|
|
for (TemplateVehicle *tv : TemplateVehicle::Iterate()) {
|
|
|
|
|
SlSetArrayIndex(tv->index);
|
|
|
|
|
SlObject(tv, GTD());
|
|
|
|
|
SlObjectSaveFiltered(tv, slt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void Load_TMPLS()
|
|
|
|
|
{
|
|
|
|
|
int index;
|
|
|
|
|
SaveLoadTableData slt = SlTableHeaderOrRiff(GetTemplateVehicleDesc());
|
|
|
|
|
|
|
|
|
|
int index;
|
|
|
|
|
while ((index = SlIterateArray()) != -1) {
|
|
|
|
|
TemplateVehicle *tv = new (index) TemplateVehicle();
|
|
|
|
|
SlObject(tv, GTD());
|
|
|
|
|
SlObjectLoadFiltered(tv, slt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void Ptrs_TMPLS()
|
|
|
|
|
{
|
|
|
|
|
SaveLoadTableData slt = SlPrepareNamedSaveLoadTableForPtrOrNull(GetTemplateVehicleDesc());
|
|
|
|
|
|
|
|
|
|
for (TemplateVehicle *tv : TemplateVehicle::Iterate()) {
|
|
|
|
|
SlObject(tv, GTD());
|
|
|
|
|
SlObjectPtrOrNullFiltered(tv, slt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -153,7 +158,7 @@ void AfterLoadTemplateVehiclesUpdateProperties()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern const ChunkHandler template_vehicle_chunk_handlers[] = {
|
|
|
|
|
{ 'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, nullptr, CH_ARRAY },
|
|
|
|
|
{ 'TMPL', Save_TMPLS, Load_TMPLS, Ptrs_TMPLS, nullptr, CH_TABLE },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern const ChunkHandlerTable _template_vehicle_chunk_handlers(template_vehicle_chunk_handlers);
|
|
|
|
|