Merge branch 'tracerestrict-sx' into jgrpp
# Conflicts: # src/command.cpp # src/group_gui.cpp # src/lang/english.txt # src/saveload/extended_ver_sl.cpp # src/settings_gui.cpp # src/tracerestrict.cpp # src/tracerestrict.h # src/tracerestrict_gui.cpp # src/vehicle_gui.cpp # src/vehicle_gui_base.h # src/vehiclelist.cpp # src/window_type.h
This commit is contained in:
@@ -47,7 +47,7 @@ std::vector<uint32> _sl_xv_discardable_chunk_ids; ///< list of chunks
|
||||
static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk
|
||||
|
||||
const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_TRACE_RESTRICT, XSCF_NULL, 6, 6, "tracerestrict", NULL, NULL, "TRRM,TRRP" },
|
||||
{ XSLFI_TRACE_RESTRICT, XSCF_NULL, 7, 7, "tracerestrict", NULL, NULL, "TRRM,TRRP,TRRS" },
|
||||
{ XSLFI_TRACE_RESTRICT_OWNER, XSCF_NULL, 1, 1, "tracerestrict_owner", NULL, NULL, NULL },
|
||||
{ XSLFI_PROG_SIGS, XSCF_NULL, 1, 1, "programmable_signals", NULL, NULL, "SPRG" },
|
||||
{ XSLFI_ADJACENT_CROSSINGS, XSCF_NULL, 1, 1, "adjacent_crossings", NULL, NULL, NULL },
|
||||
@@ -178,6 +178,12 @@ void SlXvCheckSpecialSavegameVersions()
|
||||
_sl_is_faked_ext = true;
|
||||
_sl_xv_feature_versions[XSLFI_TRACE_RESTRICT] = 6;
|
||||
}
|
||||
if (_sl_version == 2002) {
|
||||
DEBUG(sl, 1, "Loading a trace restrict patch savegame version %d as version 196", _sl_version);
|
||||
_sl_version = 196;
|
||||
_sl_is_faked_ext = true;
|
||||
_sl_xv_feature_versions[XSLFI_TRACE_RESTRICT] = 6;
|
||||
}
|
||||
|
||||
if (_sl_version == 220) { /* SL_SPRING_2013_v2_0_102 */
|
||||
DEBUG(sl, 1, "Loading a SpringPP 2013 v2.0.102 savegame version %d as version 187", _sl_version);
|
||||
|
@@ -108,6 +108,65 @@ static void Save_TRRP()
|
||||
}
|
||||
}
|
||||
|
||||
/** program length save header struct */
|
||||
struct TraceRestrictSlotStub {
|
||||
uint32 length;
|
||||
};
|
||||
|
||||
static const SaveLoad _trace_restrict_slot_stub_desc[] = {
|
||||
SLE_VAR(TraceRestrictSlotStub, length, SLE_UINT32),
|
||||
SLE_END()
|
||||
};
|
||||
|
||||
static const SaveLoad _trace_restrict_slot_desc[] = {
|
||||
SLE_VAR(TraceRestrictSlot, max_occupancy, SLE_UINT32),
|
||||
SLE_STDSTR(TraceRestrictSlot, name, SLF_ALLOW_CONTROL),
|
||||
SLE_VAR(TraceRestrictSlot, owner, SLE_UINT8),
|
||||
SLE_END()
|
||||
};
|
||||
|
||||
/**
|
||||
* Load slot pool
|
||||
*/
|
||||
static void Load_TRRS()
|
||||
{
|
||||
int index;
|
||||
TraceRestrictSlotStub stub;
|
||||
while ((index = SlIterateArray()) != -1) {
|
||||
TraceRestrictSlot *slot = new (index) TraceRestrictSlot();
|
||||
SlObject(slot, _trace_restrict_slot_desc);
|
||||
SlObject(&stub, _trace_restrict_slot_stub_desc);
|
||||
slot->occupants.resize(stub.length);
|
||||
if (stub.length) SlArray(&(slot->occupants[0]), stub.length, SLE_UINT32);
|
||||
}
|
||||
TraceRestrictSlot::RebuildVehicleIndex();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a slot, used by SlAutolength
|
||||
*/
|
||||
static void RealSave_TRRS(TraceRestrictSlot *slot)
|
||||
{
|
||||
SlObject(slot, _trace_restrict_slot_desc);
|
||||
TraceRestrictSlotStub stub;
|
||||
stub.length = slot->occupants.size();
|
||||
SlObject(&stub, _trace_restrict_slot_stub_desc);
|
||||
if (stub.length) SlArray(&(slot->occupants[0]), stub.length, SLE_UINT32);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save slot pool
|
||||
*/
|
||||
static void Save_TRRS()
|
||||
{
|
||||
TraceRestrictSlot *slot;
|
||||
|
||||
FOR_ALL_TRACE_RESTRICT_SLOTS(slot) {
|
||||
SlSetArrayIndex(slot->index);
|
||||
SlAutolength((AutolengthProc*) RealSave_TRRS, slot);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update program reference counts from just-loaded mapping
|
||||
*/
|
||||
@@ -121,5 +180,6 @@ void AfterLoadTraceRestrict()
|
||||
|
||||
extern const ChunkHandler _trace_restrict_chunk_handlers[] = {
|
||||
{ 'TRRM', Save_TRRM, Load_TRRM, NULL, NULL, CH_SPARSE_ARRAY}, // Trace Restrict Mapping chunk
|
||||
{ 'TRRP', Save_TRRP, Load_TRRP, NULL, NULL, CH_ARRAY | CH_LAST}, // Trace Restrict Mapping Program Pool chunk
|
||||
{ 'TRRP', Save_TRRP, Load_TRRP, NULL, NULL, CH_ARRAY}, // Trace Restrict Mapping Program Pool chunk
|
||||
{ 'TRRS', Save_TRRS, Load_TRRS, NULL, NULL, CH_ARRAY | CH_LAST}, // Trace Restrict Slot Pool chunk
|
||||
};
|
||||
|
Reference in New Issue
Block a user