mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
Saveload: Use table format for station/waypoint chunk
This commit is contained in:
parent
a192485ce9
commit
f724853985
@ -582,7 +582,7 @@ public:
|
||||
/** The super class ought to know what it's doing. */
|
||||
friend class CargoList<StationCargoList, StationCargoPacketMap>;
|
||||
/** The stations, via GoodsEntry, have a CargoList. */
|
||||
friend SaveLoadTable GetGoodsDesc();
|
||||
friend NamedSaveLoadTable GetGoodsDesc();
|
||||
friend upstream_sl::SlStationGoods;
|
||||
|
||||
friend class CargoLoad;
|
||||
|
@ -219,6 +219,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_TABLE_SCRIPT_SL, XSCF_NULL, 1, 1, "table_script_sl", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_TABLE_NEWGRF_SL, XSCF_NULL, 2, 2, "table_newgrf_sl", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_TABLE_INDUSTRY_SL, XSCF_NULL, 2, 2, "table_industry_sl", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_TABLE_STATION_SL, XSCF_NULL, 1, 1, "table_station_sl", nullptr, nullptr, nullptr },
|
||||
|
||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr }, // This is the end marker
|
||||
};
|
||||
|
@ -174,6 +174,8 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_TABLE_INDUSTRY_SL, ///< Use table format for industry chunks:
|
||||
///< v1: IBLD, ITBL
|
||||
///< v2: INDY
|
||||
XSLFI_TABLE_STATION_SL, ///< Use table format for station chunks:
|
||||
///< v1: STNN
|
||||
|
||||
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
|
||||
|
@ -1898,7 +1898,6 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld)
|
||||
break;
|
||||
case SL_WRITEBYTE: return 1; // a uint8_t is logically of size 1
|
||||
case SL_VEH_INCLUDE: return SlCalcObjLength(object, GetVehicleDescription(VEH_END));
|
||||
case SL_ST_INCLUDE: return SlCalcObjLength(object, GetBaseStationDescription());
|
||||
|
||||
case SL_STRUCT:
|
||||
case SL_STRUCTLIST:
|
||||
@ -1968,8 +1967,8 @@ static void SlFilterObjectMember(const SaveLoad &sld, std::vector<SaveLoad> &sav
|
||||
SlFilterObject(GetVehicleDescription(VEH_END), save);
|
||||
break;
|
||||
|
||||
case SL_ST_INCLUDE:
|
||||
SlFilterObject(GetBaseStationDescription(), save);
|
||||
case SL_INCLUDE:
|
||||
sld.include_functor(save);
|
||||
break;
|
||||
|
||||
default: NOT_REACHED();
|
||||
@ -2133,10 +2132,6 @@ bool SlObjectMemberGeneric(void *object, const SaveLoad &sld)
|
||||
SlObject(ptr, GetVehicleDescription(VEH_END));
|
||||
break;
|
||||
|
||||
case SL_ST_INCLUDE:
|
||||
SlObject(ptr, GetBaseStationDescription());
|
||||
break;
|
||||
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
return true;
|
||||
|
@ -719,7 +719,9 @@ inline constexpr void *SlVarWrapper(void* ptr)
|
||||
#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION)
|
||||
|
||||
#define SLE_VEH_INCLUDE() SaveLoad { false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, SLTAG_DEFAULT, { nullptr }, SlXvFeatureTest()}
|
||||
#define SLE_ST_INCLUDE() SaveLoad { false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, SLTAG_DEFAULT, { nullptr }, SlXvFeatureTest()}
|
||||
|
||||
/** SaveLoad include, for non-table use with SlFilterObject/SlFilterNamedSaveLoadTable. */
|
||||
#define SLE_INCLUDE(inc_functor) SaveLoad { false, SL_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, SLTAG_DEFAULT, { .include_functor = inc_functor }, SlXvFeatureTest()}
|
||||
|
||||
/**
|
||||
* Storage of global simple variables, references (pointers), and arrays.
|
||||
@ -987,6 +989,7 @@ size_t SlCalcObjLength(const void *object, const SaveLoadTable &slt);
|
||||
uint SlReadSimpleGamma();
|
||||
void SlWriteSimpleGamma(size_t i);
|
||||
uint SlGetGammaLength(size_t i);
|
||||
constexpr uint SlGetMaxGammaLength() { return 5; }
|
||||
|
||||
/**
|
||||
* Run proc, automatically prepending the written length
|
||||
@ -1084,6 +1087,7 @@ void SlObject(void *object, const SaveLoadTable &slt);
|
||||
bool SlObjectMember(void *object, const SaveLoad &sld);
|
||||
|
||||
std::vector<SaveLoad> SlFilterObject(const SaveLoadTable &slt);
|
||||
void SlFilterNamedSaveLoadTable(const NamedSaveLoadTable &nslt, std::vector<SaveLoad> &save);
|
||||
std::vector<SaveLoad> SlFilterNamedSaveLoadTable(const NamedSaveLoadTable &nslt);
|
||||
void SlObjectSaveFiltered(void *object, const SaveLoadTable &slt);
|
||||
void SlObjectLoadFiltered(void *object, const SaveLoadTable &slt);
|
||||
|
@ -23,7 +23,6 @@ void ResetOldNames();
|
||||
void ResetOldWaypoints();
|
||||
void MoveBuoysToWaypoints();
|
||||
void MoveWaypointsToBaseStations();
|
||||
SaveLoadTable GetBaseStationDescription();
|
||||
|
||||
void AfterLoadVehiclesPhase1(bool part_of_load);
|
||||
void AfterLoadVehiclesPhase2(bool part_of_load);
|
||||
|
@ -120,12 +120,13 @@ enum SaveLoadTypes {
|
||||
/* non-normal save-load types */
|
||||
SL_WRITEBYTE,
|
||||
SL_VEH_INCLUDE,
|
||||
SL_ST_INCLUDE,
|
||||
SL_INCLUDE,
|
||||
};
|
||||
|
||||
typedef uint8_t SaveLoadType; ///< Save/load type. @see SaveLoadTypes
|
||||
|
||||
using SaveLoadStructHandlerFactory = std::unique_ptr<class SaveLoadStructHandler> (*)();
|
||||
using SaveLoadIncludeFunctor = void (*)(std::vector<struct SaveLoad> &);
|
||||
|
||||
/** SaveLoad type struct. Do NOT use this directly but use the SLE_ macros defined just below! */
|
||||
struct SaveLoad {
|
||||
@ -144,6 +145,7 @@ struct SaveLoad {
|
||||
* that is called to save it. address: global=true, offset: global=false */
|
||||
void *address; ///< address of variable OR offset of variable in the struct (max offset is 65536)
|
||||
SaveLoadStructHandlerFactory struct_handler_factory; ///< factory function pointer for SaveLoadStructHandler
|
||||
SaveLoadIncludeFunctor include_functor; ///< include functor for SL_INCLUDE
|
||||
};
|
||||
|
||||
SlXvFeatureTest ext_feature_test; ///< extended feature test
|
||||
@ -162,6 +164,7 @@ enum SaveLoadTags {
|
||||
SLTAG_CUSTOM_START,
|
||||
SLTAG_CUSTOM_0 = SLTAG_CUSTOM_START,
|
||||
SLTAG_CUSTOM_1,
|
||||
SLTAG_CUSTOM_2,
|
||||
};
|
||||
|
||||
enum NamedSaveLoadFlags : uint8_t {
|
||||
@ -215,6 +218,12 @@ inline constexpr NamedSaveLoad NSLT_STRUCTLIST(const char *name, SaveLoadVersion
|
||||
return NSLT_STRUCTLIST(name, factory, from, to, extver);
|
||||
}
|
||||
|
||||
inline constexpr NamedSaveLoad NSLTAG(uint16_t label_tag, NamedSaveLoad nsl)
|
||||
{
|
||||
nsl.save_load.label_tag = label_tag;
|
||||
return nsl;
|
||||
}
|
||||
|
||||
struct SaveLoadTableData : public std::vector<SaveLoad> {
|
||||
std::vector<std::unique_ptr<class SaveLoadStructHandler>> struct_handlers;
|
||||
};
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user