OpenTTD Source  20240917-master-g9ab0a47812
saveload.h File Reference
#include "saveload_error.hpp"
#include "../fileio_type.h"
#include "../fios.h"

Go to the source code of this file.

Data Structures

struct  FileToSaveLoad
 Deals with the type of the savegame, independent of extension. More...
 
struct  ChunkHandler
 Handlers and description of chunk. More...
 
class  SaveLoadHandler
 Handler for saving/loading an object to/from disk. More...
 
class  DefaultSaveLoadHandler< TImpl, TObject >
 Default handler for saving/loading an object to/from disk. More...
 
struct  SaveLoad
 SaveLoad type struct. More...
 
struct  SaveLoadCompat
 SaveLoad information for backwards compatibility. More...
 

Macros

#define SLE_GENERAL_NAME(cmd, name, base, variable, type, length, from, to, extra)
 Storage of simple variables, references (pointers), and arrays. More...
 
#define SLE_GENERAL(cmd, base, variable, type, length, from, to, extra)   SLE_GENERAL_NAME(cmd, #variable, base, variable, type, length, from, to, extra)
 Storage of simple variables, references (pointers), and arrays with a custom name. More...
 
#define SLE_CONDVAR(base, variable, type, from, to)   SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to, 0)
 Storage of a variable in some savegame versions. More...
 
#define SLE_CONDVARNAME(base, variable, name, type, from, to)   SLE_GENERAL_NAME(SL_VAR, name, base, variable, type, 0, from, to, 0)
 Storage of a variable in some savegame versions. More...
 
#define SLE_CONDREF(base, variable, type, from, to)   SLE_GENERAL(SL_REF, base, variable, type, 0, from, to, 0)
 Storage of a reference in some savegame versions. More...
 
#define SLE_CONDARR(base, variable, type, length, from, to)   SLE_GENERAL(SL_ARR, base, variable, type, length, from, to, 0)
 Storage of a fixed-size array of SL_VAR elements in some savegame versions. More...
 
#define SLE_CONDARRNAME(base, variable, name, type, length, from, to)   SLE_GENERAL_NAME(SL_ARR, name, base, variable, type, length, from, to, 0)
 Storage of a fixed-size array of SL_VAR elements in some savegame versions. More...
 
#define SLE_CONDSTR(base, variable, type, length, from, to)   SLE_GENERAL(SL_STR, base, variable, type, length, from, to, 0)
 Storage of a string in some savegame versions. More...
 
#define SLE_CONDSSTR(base, variable, type, from, to)   SLE_GENERAL(SL_STDSTR, base, variable, type, 0, from, to, 0)
 Storage of a std::string in some savegame versions. More...
 
#define SLE_CONDSSTRNAME(base, variable, name, type, from, to)   SLE_GENERAL_NAME(SL_STDSTR, name, base, variable, type, 0, from, to, 0)
 Storage of a std::string in some savegame versions. More...
 
#define SLE_CONDREFLIST(base, variable, type, from, to)   SLE_GENERAL(SL_REFLIST, base, variable, type, 0, from, to, 0)
 Storage of a list of SL_REF elements in some savegame versions. More...
 
#define SLE_CONDDEQUE(base, variable, type, from, to)   SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to, 0)
 Storage of a deque of SL_VAR elements in some savegame versions. More...
 
#define SLE_CONDVECTOR(base, variable, type, from, to)   SLE_GENERAL(SL_VECTOR, base, variable, type, 0, from, to, 0)
 Storage of a vector of SL_VAR elements in some savegame versions. More...
 
#define SLE_VAR(base, variable, type)   SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a variable in every version of a savegame. More...
 
#define SLE_VARNAME(base, variable, name, type)   SLE_CONDVARNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a variable in every version of a savegame. More...
 
#define SLE_REF(base, variable, type)   SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a reference in every version of a savegame. More...
 
#define SLE_ARR(base, variable, type, length)   SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of fixed-size array of SL_VAR elements in every version of a savegame. More...
 
#define SLE_ARRNAME(base, variable, name, type, length)   SLE_CONDARRNAME(base, variable, name, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of fixed-size array of SL_VAR elements in every version of a savegame. More...
 
#define SLE_SSTR(base, variable, type)   SLE_CONDSSTR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a std::string in every savegame version. More...
 
#define SLE_SSTRNAME(base, variable, name, type)   SLE_CONDSSTRNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a std::string in every savegame version. More...
 
#define SLE_REFLIST(base, variable, type)   SLE_CONDREFLIST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a list of SL_REF elements in every savegame version. More...
 
#define SLE_SAVEBYTE(base, variable)   SLE_GENERAL(SL_SAVEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, 0)
 Only write byte during saving; never read it during loading. More...
 
#define SLEG_GENERAL(name, cmd, variable, type, length, from, to, extra)
 Storage of global simple variables, references (pointers), and arrays. More...
 
#define SLEG_CONDVAR(name, variable, type, from, to)   SLEG_GENERAL(name, SL_VAR, variable, type, 0, from, to, 0)
 Storage of a global variable in some savegame versions. More...
 
#define SLEG_CONDREF(name, variable, type, from, to)   SLEG_GENERAL(name, SL_REF, variable, type, 0, from, to, 0)
 Storage of a global reference in some savegame versions. More...
 
#define SLEG_CONDARR(name, variable, type, length, from, to)   SLEG_GENERAL(name, SL_ARR, variable, type, length, from, to, 0)
 Storage of a global fixed-size array of SL_VAR elements in some savegame versions. More...
 
#define SLEG_CONDSSTR(name, variable, type, from, to)   SLEG_GENERAL(name, SL_STDSTR, variable, type, 0, from, to, 0)
 Storage of a global std::string in some savegame versions. More...
 
#define SLEG_CONDSTRUCT(name, handler, from, to)   SaveLoad {name, SL_STRUCT, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}
 Storage of a structs in some savegame versions. More...
 
#define SLEG_CONDREFLIST(name, variable, type, from, to)   SLEG_GENERAL(name, SL_REFLIST, variable, type, 0, from, to, 0)
 Storage of a global reference list in some savegame versions. More...
 
#define SLEG_CONDVECTOR(name, variable, type, from, to)   SLEG_GENERAL(name, SL_VECTOR, variable, type, 0, from, to, 0)
 Storage of a global vector of SL_VAR elements in some savegame versions. More...
 
#define SLEG_CONDSTRUCTLIST(name, handler, from, to)   SaveLoad {name, SL_STRUCTLIST, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}
 Storage of a list of structs in some savegame versions. More...
 
#define SLEG_VAR(name, variable, type)   SLEG_CONDVAR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global variable in every savegame version. More...
 
#define SLEG_REF(name, variable, type)   SLEG_CONDREF(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global reference in every savegame version. More...
 
#define SLEG_ARR(name, variable, type)   SLEG_CONDARR(name, variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global fixed-size array of SL_VAR elements in every savegame version. More...
 
#define SLEG_SSTR(name, variable, type)   SLEG_CONDSSTR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global std::string in every savegame version. More...
 
#define SLEG_STRUCT(name, handler)   SLEG_CONDSTRUCT(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a structs in every savegame version. More...
 
#define SLEG_REFLIST(name, variable, type)   SLEG_CONDREFLIST(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global reference list in every savegame version. More...
 
#define SLEG_VECTOR(name, variable, type)   SLEG_CONDVECTOR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a global vector of SL_VAR elements in every savegame version. More...
 
#define SLEG_STRUCTLIST(name, handler)   SLEG_CONDSTRUCTLIST(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)
 Storage of a list of structs in every savegame version. More...
 
#define SLC_VAR(name)   {name, SLE_FILE_U8, 0, SL_MIN_VERSION, SL_MAX_VERSION}
 Field name where the real SaveLoad can be located. More...
 
#define SLC_NULL(length, from, to)   {{}, SLE_FILE_U8, length, from, to}
 Empty space in every savegame version. More...
 
#define SLC_NULL_STR(length, from, to)   {{}, SLE_FILE_STRING, length, from, to}
 Empty space in every savegame version that was filled with a string. More...
 
#define SLC_END()   {{}, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION}
 End marker of compat variables save or load.
 

Typedefs

typedef void AutolengthProc(int)
 
using ChunkHandlerRef = std::reference_wrapper< const ChunkHandler >
 A reference to ChunkHandler.
 
using ChunkHandlerTable = std::span< const ChunkHandlerRef >
 A table of ChunkHandler entries.
 
using SaveLoadTable = std::span< const struct SaveLoad >
 A table of SaveLoad entries.
 
using SaveLoadCompatTable = std::span< const struct SaveLoadCompat >
 A table of SaveLoadCompat entries.
 
typedef uint32_t VarType
 
typedef void * SaveLoadAddrProc(void *base, size_t extra)
 

Enumerations

enum  SaveLoadVersion : uint16_t {
  SL_MIN_VERSION, SLV_1, SLV_2, SLV_3,
  SLV_4, SLV_5, SLV_6, SLV_7,
  SLV_8, SLV_9, SLV_10, SLV_11,
  SLV_12, SLV_13, SLV_14, SLV_15,
  SLV_16, SLV_17, SLV_18, SLV_19,
  SLV_20, SLV_21, SLV_22, SLV_23,
  SLV_24, SLV_25, SLV_26, SLV_27,
  SLV_28, SLV_29, SLV_30, SLV_31,
  SLV_32, SLV_33, SLV_34, SLV_35,
  SLV_36, SLV_37, SLV_38, SLV_39,
  SLV_40, SLV_41, SLV_42, SLV_43,
  SLV_44, SLV_45, SLV_46, SLV_47,
  SLV_48, SLV_49, SLV_50, SLV_51,
  SLV_52, SLV_53, SLV_54, SLV_55,
  SLV_56, SLV_57, SLV_58, SLV_59,
  SLV_60, SLV_61, SLV_62, SLV_63,
  SLV_64, SLV_65, SLV_66, SLV_67,
  SLV_68, SLV_69, SLV_70, SLV_71,
  SLV_72, SLV_73, SLV_74, SLV_75,
  SLV_76, SLV_77, SLV_78, SLV_79,
  SLV_80, SLV_81, SLV_82, SLV_83,
  SLV_84, SLV_85, SLV_86, SLV_87,
  SLV_88, SLV_89, SLV_90, SLV_91,
  SLV_92, SLV_93, SLV_94, SLV_95,
  SLV_96, SLV_97, SLV_98, SLV_99,
  SLV_100, SLV_101, SLV_102, SLV_103,
  SLV_104, SLV_105, SLV_106, SLV_107,
  SLV_108, SLV_109, SLV_110, SLV_111,
  SLV_112, SLV_113, SLV_114, SLV_115,
  SLV_116, SLV_117, SLV_118, SLV_119,
  SLV_120, SLV_121, SLV_122, SLV_123,
  SLV_124, SLV_125, SLV_126, SLV_127,
  SLV_128, SLV_129, SLV_130, SLV_131,
  SLV_132, SLV_133, SLV_134, SLV_135,
  SLV_136, SLV_137, SLV_138, SLV_139,
  SLV_140, SLV_141, SLV_142, SLV_143,
  SLV_144, SLV_145, SLV_146, SLV_147,
  SLV_148, SLV_149, SLV_150, SLV_151,
  SLV_152, SLV_153, SLV_154, SLV_155,
  SLV_156, SLV_157, SLV_158, SLV_159,
  SLV_160, SLV_161, SLV_162, SLV_163,
  SLV_164, SLV_165, SLV_166, SLV_167,
  SLV_168, SLV_169, SLV_170, SLV_171,
  SLV_172, SLV_173, SLV_174, SLV_175,
  SLV_176, SLV_177, SLV_178, SLV_179,
  SLV_180, SLV_181, SLV_182, SLV_183,
  SLV_184, SLV_185, SLV_186, SLV_187,
  SLV_188, SLV_189, SLV_190, SLV_191,
  SLV_192, SLV_193, SLV_194, SLV_195,
  SLV_196, SLV_197, SLV_198, SLV_EXTEND_CARGOTYPES,
  SLV_EXTEND_RAILTYPES, SLV_EXTEND_PERSISTENT_STORAGE, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SLV_SHIP_PATH_CACHE,
  SLV_SHIP_ROTATION, SLV_GROUP_LIVERIES, SLV_SHIPS_STOP_IN_LOCKS, SLV_FIX_CARGO_MONITOR,
  SLV_TOWN_CARGOGEN, SLV_SHIP_CURVE_PENALTY, SLV_SERVE_NEUTRAL_INDUSTRIES, SLV_ROADVEH_PATH_CACHE,
  SLV_REMOVE_OPF, SLV_TREES_WATER_CLASS, SLV_ROAD_TYPES, SLV_SCRIPT_MEMLIMIT,
  SLV_MULTITILE_DOCKS, SLV_TRADING_AGE, SLV_ENDING_YEAR, SLV_REMOVE_TOWN_CARGO_CACHE,
  SLV_START_PATCHPACKS, SLV_END_PATCHPACKS = 286, SLV_GS_INDUSTRY_CONTROL, SLV_VEH_MOTION_COUNTER,
  SLV_INDUSTRY_TEXT, SLV_MAPGEN_SETTINGS_REVAMP, SLV_GROUP_REPLACE_WAGON_REMOVAL, SLV_CUSTOM_SUBSIDY_DURATION,
  SLV_SAVELOAD_LIST_LENGTH, SLV_RIFF_TO_ARRAY, SLV_TABLE_CHUNKS, SLV_SCRIPT_INT64,
  SLV_LINKGRAPH_TRAVEL_TIME, SLV_DOCK_DOCKINGTILES, SLV_REPAIR_OBJECT_DOCKING_TILES, SLV_U64_TICK_COUNTER,
  SLV_LAST_LOADING_TICK, SLV_MULTITRACK_LEVEL_CROSSINGS, SLV_NEWGRF_ROAD_STOPS, SLV_LINKGRAPH_EDGES,
  SLV_VELOCITY_NAUTICAL, SLV_CONSISTENT_PARTIAL_Z, SLV_MORE_CARGO_AGE, SLV_LINKGRAPH_SECONDS,
  SLV_AI_START_DATE, SLV_EXTEND_VEHICLE_RANDOM, SLV_EXTEND_ENTITY_MAPPING, SLV_DISASTER_VEH_STATE,
  SLV_SAVEGAME_ID, SLV_STRING_GAMELOG, SLV_INDUSTRY_CARGO_REORGANISE, SLV_PERIODS_IN_TRANSIT_RENAME,
  SLV_NEWGRF_LAST_SERVICE, SLV_REMOVE_LOADED_AT_XY, SLV_CARGO_TRAVELLED, SLV_STATION_RATING_CHEAT,
  SLV_TIMETABLE_START_TICKS, SLV_TIMETABLE_START_TICKS_FIX, SLV_TIMETABLE_TICKS_TYPE, SLV_WATER_REGIONS,
  SLV_WATER_REGION_EVAL_SIMPLIFIED, SLV_ECONOMY_DATE, SLV_ECONOMY_MODE_TIMEKEEPING_UNITS, SLV_CALENDAR_SUB_DATE_FRACT,
  SLV_SHIP_ACCELERATION, SLV_MAX_LOAN_FOR_COMPANY, SLV_DEPOT_UNBUNCHING, SLV_AI_LOCAL_CONFIG,
  SLV_SCRIPT_RANDOMIZER, SLV_VEHICLE_ECONOMY_AGE, SLV_COMPANY_ALLOW_LIST, SLV_GROUP_NUMBERS,
  SLV_INCREASE_STATION_TYPE_FIELD_SIZE, SLV_ROAD_WAYPOINTS, SLV_COMPANY_INAUGURATED_PERIOD, SLV_ROAD_STOP_TILE_DATA,
  SLV_COMPANY_ALLOW_LIST_V2, SL_MAX_VERSION
}
 SaveLoad versions Previous savegame versions, the trunk revision where they were introduced and the released version that had that particular savegame version. More...
 
enum  SaveOrLoadResult { SL_OK = 0, SL_ERROR = 1, SL_REINIT = 2 }
 Save or load result codes. More...
 
enum  SavegameType {
  SGT_TTD, SGT_TTDP1, SGT_TTDP2, SGT_OTTD,
  SGT_TTO, SGT_INVALID = 0xFF
}
 Types of save games. More...
 
enum  ChunkType {
  CH_RIFF = 0, CH_ARRAY = 1, CH_SPARSE_ARRAY = 2, CH_TABLE = 3,
  CH_SPARSE_TABLE = 4, CH_TYPE_MASK = 0xf, CH_READONLY
}
 Type of a chunk. More...
 
enum  SLRefType {
  REF_ORDER = 0, REF_VEHICLE = 1, REF_STATION = 2, REF_TOWN = 3,
  REF_VEHICLE_OLD = 4, REF_ROADSTOPS = 5, REF_ENGINE_RENEWS = 6, REF_CARGO_PACKET = 7,
  REF_ORDERLIST = 8, REF_STORAGE = 9, REF_LINK_GRAPH = 10, REF_LINK_GRAPH_JOB = 11
}
 Type of reference (SLE_REF, SLE_CONDREF). More...
 
enum  VarTypes {
  SLE_FILE_END = 0, SLE_FILE_I8 = 1, SLE_FILE_U8 = 2, SLE_FILE_I16 = 3,
  SLE_FILE_U16 = 4, SLE_FILE_I32 = 5, SLE_FILE_U32 = 6, SLE_FILE_I64 = 7,
  SLE_FILE_U64 = 8, SLE_FILE_STRINGID = 9, SLE_FILE_STRING = 10, SLE_FILE_STRUCT = 11,
  SLE_FILE_TYPE_MASK = 0xf, SLE_FILE_HAS_LENGTH_FIELD = 1 << 4, SLE_VAR_BL = 0 << 4, SLE_VAR_I8 = 1 << 4,
  SLE_VAR_U8 = 2 << 4, SLE_VAR_I16 = 3 << 4, SLE_VAR_U16 = 4 << 4, SLE_VAR_I32 = 5 << 4,
  SLE_VAR_U32 = 6 << 4, SLE_VAR_I64 = 7 << 4, SLE_VAR_U64 = 8 << 4, SLE_VAR_NULL = 9 << 4,
  SLE_VAR_STR = 12 << 4, SLE_VAR_STRQ = 13 << 4, SLE_VAR_NAME = 14 << 4, SLE_VAR_CHAR = SLE_VAR_I8,
  SLE_BOOL = SLE_FILE_I8 | SLE_VAR_BL, SLE_INT8 = SLE_FILE_I8 | SLE_VAR_I8, SLE_UINT8 = SLE_FILE_U8 | SLE_VAR_U8, SLE_INT16 = SLE_FILE_I16 | SLE_VAR_I16,
  SLE_UINT16 = SLE_FILE_U16 | SLE_VAR_U16, SLE_INT32 = SLE_FILE_I32 | SLE_VAR_I32, SLE_UINT32 = SLE_FILE_U32 | SLE_VAR_U32, SLE_INT64 = SLE_FILE_I64 | SLE_VAR_I64,
  SLE_UINT64 = SLE_FILE_U64 | SLE_VAR_U64, SLE_CHAR = SLE_FILE_I8 | SLE_VAR_CHAR, SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U32, SLE_STRING = SLE_FILE_STRING | SLE_VAR_STR,
  SLE_STRINGQUOTE = SLE_FILE_STRING | SLE_VAR_STRQ, SLE_NAME = SLE_FILE_STRINGID | SLE_VAR_NAME, SLE_UINT = SLE_UINT32, SLE_INT = SLE_INT32,
  SLE_STR = SLE_STRING, SLE_STRQ = SLE_STRINGQUOTE, SLF_ALLOW_CONTROL = 1 << 8, SLF_ALLOW_NEWLINE = 1 << 9
}
 VarTypes is the general bitmasked magic type that tells us certain characteristics about the variable it refers to. More...
 
enum  SaveLoadType : uint8_t {
  SL_VAR = 0, SL_REF = 1, SL_STRUCT = 2, SL_STDSTR = 4,
  SL_ARR = 5, SL_DEQUE = 6, SL_VECTOR = 7, SL_REFLIST = 8,
  SL_STRUCTLIST = 9, SL_SAVEBYTE = 10, SL_NULL = 11
}
 Type of data saved. More...
 

Functions

std::string GenerateDefaultSaveName ()
 Get the default name for a savegame or screenshot.
 
void SetSaveLoadError (StringID str)
 Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friends)
 
StringID GetSaveLoadErrorType ()
 Return the appropriate initial string for an error depending on whether we are saving or loading.
 
StringID GetSaveLoadErrorMessage ()
 Return the description of the error.
 
SaveOrLoadResult SaveOrLoad (const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded=true)
 Main Save or Load function where the high-level saveload functions are handled. More...
 
void WaitTillSaved ()
 
void ProcessAsyncSaveFinish ()
 Handle async save finishes.
 
void DoExitSave ()
 Do a save when exiting the game (_settings_client.gui.autosave_on_exit)
 
void DoAutoOrNetsave (FiosNumberedSaveName &counter)
 Create an autosave or netsave. More...
 
SaveOrLoadResult SaveWithFilter (std::shared_ptr< struct SaveFilter > writer, bool threaded)
 
SaveOrLoadResult LoadWithFilter (std::shared_ptr< struct LoadFilter > reader)
 
constexpr VarType GetVarMemType (VarType type)
 Get the NumberType of a setting. More...
 
constexpr VarType GetVarFileType (VarType type)
 Get the FileType of a setting. More...
 
constexpr bool IsNumericType (VarType conv)
 Check if the given saveload type is a numeric type. More...
 
constexpr size_t SlVarSize (VarType type)
 Return expect size in bytes of a VarType. More...
 
constexpr bool SlCheckVarSize (SaveLoadType cmd, VarType type, size_t length, size_t size)
 Check if a saveload cmd/type/length entry matches the size of the variable. More...
 
bool IsSavegameVersionBefore (SaveLoadVersion major, uint8_t minor=0)
 Checks whether the savegame is below major. More...
 
bool IsSavegameVersionBeforeOrAt (SaveLoadVersion major)
 Checks whether the savegame is below or at major. More...
 
bool SlIsObjectCurrentlyValid (SaveLoadVersion version_from, SaveLoadVersion version_to)
 Checks if some version from/to combination falls within the range of the active savegame version. More...
 
void * GetVariableAddress (const void *object, const SaveLoad &sld)
 Get the address of the variable. More...
 
int64_t ReadValue (const void *ptr, VarType conv)
 Return a signed-long version of the value of a setting. More...
 
void WriteValue (void *ptr, VarType conv, int64_t val)
 Write the value of a setting. More...
 
void SlSetArrayIndex (uint index)
 
int SlIterateArray ()
 Iterate through the elements of an array and read the whole thing. More...
 
void SlSetStructListLength (size_t length)
 Set the length of this list. More...
 
size_t SlGetStructListLength (size_t limit)
 Get the length of this list; if it exceeds the limit, error out. More...
 
void SlAutolength (AutolengthProc *proc, int arg)
 Do something of which I have no idea what it is :P. More...
 
size_t SlGetFieldLength ()
 Get the length of the current object.
 
void SlSetLength (size_t length)
 Sets the length of either a RIFF object or the number of items in an array. More...
 
size_t SlCalcObjMemberLength (const void *object, const SaveLoad &sld)
 
size_t SlCalcObjLength (const void *object, const SaveLoadTable &slt)
 Calculate the size of an object. More...
 
uint8_t SlReadByte ()
 Wrapper for reading a byte from the buffer. More...
 
void SlWriteByte (uint8_t b)
 Wrapper for writing a byte to the dumper. More...
 
void SlGlobList (const SaveLoadTable &slt)
 Save or Load (a list of) global variables. More...
 
void SlCopy (void *object, size_t length, VarType conv)
 Copy a list of SL_VARs to/from a savegame. More...
 
std::vector< SaveLoadSlTableHeader (const SaveLoadTable &slt)
 Save or Load a table header. More...
 
std::vector< SaveLoadSlCompatTableHeader (const SaveLoadTable &slt, const SaveLoadCompatTable &slct)
 Load a table header in a savegame compatible way. More...
 
void SlObject (void *object, const SaveLoadTable &slt)
 Main SaveLoad function. More...
 
bool SaveloadCrashWithMissingNewGRFs ()
 Did loading the savegame cause a crash? If so, were NewGRFs missing? More...
 
void SlSkipBytes (size_t length)
 Read in bytes from the file/data structure but don't do anything with them, discarding them in effect. More...
 

Variables

FileToSaveLoad _file_to_saveload
 File to save or load in the openttd loop.
 
std::string _savegame_format
 how to compress savegames
 
bool _do_autosave
 are we doing an autosave at the moment?
 

Detailed Description

Functions/types related to saving and loading games.

Functions/types related to errors from savegames.

Definition in file saveload.h.

Macro Definition Documentation

◆ SLC_NULL

#define SLC_NULL (   length,
  from,
  to 
)    {{}, SLE_FILE_U8, length, from, to}

Empty space in every savegame version.

Parameters
lengthLength of the empty space in bytes.
fromFirst savegame version that has the empty space.
toLast savegame version that has the empty space.

Definition at line 1215 of file saveload.h.

◆ SLC_NULL_STR

#define SLC_NULL_STR (   length,
  from,
  to 
)    {{}, SLE_FILE_STRING, length, from, to}

Empty space in every savegame version that was filled with a string.

Parameters
lengthNumber of strings in the empty space.
fromFirst savegame version that has the empty space.
toLast savegame version that has the empty space.

Definition at line 1223 of file saveload.h.

◆ SLC_VAR

#define SLC_VAR (   name)    {name, SLE_FILE_U8, 0, SL_MIN_VERSION, SL_MAX_VERSION}

Field name where the real SaveLoad can be located.

Parameters
nameThe name of the field.

Definition at line 1207 of file saveload.h.

◆ SLE_ARR

#define SLE_ARR (   base,
  variable,
  type,
  length 
)    SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of fixed-size array of SL_VAR elements in every version of a savegame.

Parameters
baseName of the class or struct containing the array.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.

Definition at line 997 of file saveload.h.

◆ SLE_ARRNAME

#define SLE_ARRNAME (   base,
  variable,
  name,
  type,
  length 
)    SLE_CONDARRNAME(base, variable, name, type, length, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of fixed-size array of SL_VAR elements in every version of a savegame.

Parameters
baseName of the class or struct containing the array.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.

Definition at line 1007 of file saveload.h.

◆ SLE_CONDARR

#define SLE_CONDARR (   base,
  variable,
  type,
  length,
  from,
  to 
)    SLE_GENERAL(SL_ARR, base, variable, type, length, from, to, 0)

Storage of a fixed-size array of SL_VAR elements in some savegame versions.

Parameters
baseName of the class or struct containing the array.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.
fromFirst savegame version that has the array.
toLast savegame version that has the array.

Definition at line 889 of file saveload.h.

◆ SLE_CONDARRNAME

#define SLE_CONDARRNAME (   base,
  variable,
  name,
  type,
  length,
  from,
  to 
)    SLE_GENERAL_NAME(SL_ARR, name, base, variable, type, length, from, to, 0)

Storage of a fixed-size array of SL_VAR elements in some savegame versions.

Parameters
baseName of the class or struct containing the array.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.
fromFirst savegame version that has the array.
toLast savegame version that has the array.

Definition at line 901 of file saveload.h.

◆ SLE_CONDDEQUE

#define SLE_CONDDEQUE (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to, 0)

Storage of a deque of SL_VAR elements in some savegame versions.

Parameters
baseName of the class or struct containing the list.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 953 of file saveload.h.

◆ SLE_CONDREF

#define SLE_CONDREF (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_REF, base, variable, type, 0, from, to, 0)

Storage of a reference in some savegame versions.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeType of the reference, a value from SLRefType.
fromFirst savegame version that has the field.
toLast savegame version that has the field.

Definition at line 878 of file saveload.h.

◆ SLE_CONDREFLIST

#define SLE_CONDREFLIST (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_REFLIST, base, variable, type, 0, from, to, 0)

Storage of a list of SL_REF elements in some savegame versions.

Parameters
baseName of the class or struct containing the list.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 943 of file saveload.h.

◆ SLE_CONDSSTR

#define SLE_CONDSSTR (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_STDSTR, base, variable, type, 0, from, to, 0)

Storage of a std::string in some savegame versions.

Parameters
baseName of the class or struct containing the string.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the string.
toLast savegame version that has the string.

Definition at line 922 of file saveload.h.

◆ SLE_CONDSSTRNAME

#define SLE_CONDSSTRNAME (   base,
  variable,
  name,
  type,
  from,
  to 
)    SLE_GENERAL_NAME(SL_STDSTR, name, base, variable, type, 0, from, to, 0)

Storage of a std::string in some savegame versions.

Parameters
baseName of the class or struct containing the string.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the string.
toLast savegame version that has the string.

Definition at line 933 of file saveload.h.

◆ SLE_CONDSTR

#define SLE_CONDSTR (   base,
  variable,
  type,
  length,
  from,
  to 
)    SLE_GENERAL(SL_STR, base, variable, type, length, from, to, 0)

Storage of a string in some savegame versions.

Parameters
baseName of the class or struct containing the string.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the string (only used for fixed size buffers).
fromFirst savegame version that has the string.
toLast savegame version that has the string.

Definition at line 912 of file saveload.h.

◆ SLE_CONDVAR

#define SLE_CONDVAR (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to, 0)

Storage of a variable in some savegame versions.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the field.
toLast savegame version that has the field.

Definition at line 857 of file saveload.h.

◆ SLE_CONDVARNAME

#define SLE_CONDVARNAME (   base,
  variable,
  name,
  type,
  from,
  to 
)    SLE_GENERAL_NAME(SL_VAR, name, base, variable, type, 0, from, to, 0)

Storage of a variable in some savegame versions.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the field.
toLast savegame version that has the field.

Definition at line 868 of file saveload.h.

◆ SLE_CONDVECTOR

#define SLE_CONDVECTOR (   base,
  variable,
  type,
  from,
  to 
)    SLE_GENERAL(SL_VECTOR, base, variable, type, 0, from, to, 0)

Storage of a vector of SL_VAR elements in some savegame versions.

Parameters
baseName of the class or struct containing the list.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 963 of file saveload.h.

◆ SLE_GENERAL

#define SLE_GENERAL (   cmd,
  base,
  variable,
  type,
  length,
  from,
  to,
  extra 
)    SLE_GENERAL_NAME(cmd, #variable, base, variable, type, length, from, to, extra)

Storage of simple variables, references (pointers), and arrays with a custom name.

Parameters
cmdLoad/save type.
See also
SaveLoadType
Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.
fromFirst savegame version that has the field.
toLast savegame version that has the field.
extraExtra data to pass to the address callback function.
Note
In general, it is better to use one of the SLE_* macros below.

Definition at line 847 of file saveload.h.

◆ SLE_GENERAL_NAME

#define SLE_GENERAL_NAME (   cmd,
  name,
  base,
  variable,
  type,
  length,
  from,
  to,
  extra 
)
Value:
SaveLoad {name, cmd, type, length, from, to, [] (void *b, size_t) -> void * { \
static_assert(SlCheckVarSize(cmd, type, length, sizeof(static_cast<base *>(b)->variable))); \
assert(b != nullptr); \
return const_cast<void *>(static_cast<const void *>(std::addressof(static_cast<base *>(b)->variable))); \
}, extra, nullptr}

Storage of simple variables, references (pointers), and arrays.

Parameters
cmdLoad/save type.
See also
SaveLoadType
Parameters
nameField name for table chunks.
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.
fromFirst savegame version that has the field.
toLast savegame version that has the field.
extraExtra data to pass to the address callback function.
Note
In general, it is better to use one of the SLE_* macros below.

Definition at line 828 of file saveload.h.

◆ SLE_REF

#define SLE_REF (   base,
  variable,
  type 
)    SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a reference in every version of a savegame.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeType of the reference, a value from SLRefType.

Definition at line 988 of file saveload.h.

◆ SLE_REFLIST

#define SLE_REFLIST (   base,
  variable,
  type 
)    SLE_CONDREFLIST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a list of SL_REF elements in every savegame version.

Parameters
baseName of the class or struct containing the list.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.

Definition at line 1032 of file saveload.h.

◆ SLE_SAVEBYTE

#define SLE_SAVEBYTE (   base,
  variable 
)    SLE_GENERAL(SL_SAVEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, 0)

Only write byte during saving; never read it during loading.

When using SLE_SAVEBYTE you will have to read this byte before the table this is in is read. This also means SLE_SAVEBYTE can only be used at the top of a chunk. This is intended to be used to indicate what type of entry this is in a list of entries.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.

Definition at line 1044 of file saveload.h.

◆ SLE_SSTR

#define SLE_SSTR (   base,
  variable,
  type 
)    SLE_CONDSSTR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a std::string in every savegame version.

Parameters
baseName of the class or struct containing the string.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.

Definition at line 1015 of file saveload.h.

◆ SLE_SSTRNAME

#define SLE_SSTRNAME (   base,
  variable,
  name,
  type 
)    SLE_CONDSSTRNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a std::string in every savegame version.

Parameters
baseName of the class or struct containing the string.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.

Definition at line 1024 of file saveload.h.

◆ SLE_VAR

#define SLE_VAR (   base,
  variable,
  type 
)    SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a variable in every version of a savegame.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
typeStorage of the data in memory and in the savegame.

Definition at line 971 of file saveload.h.

◆ SLE_VARNAME

#define SLE_VARNAME (   base,
  variable,
  name,
  type 
)    SLE_CONDVARNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a variable in every version of a savegame.

Parameters
baseName of the class or struct containing the variable.
variableName of the variable in the class or struct referenced by base.
nameField name for table chunks.
typeStorage of the data in memory and in the savegame.

Definition at line 980 of file saveload.h.

◆ SLEG_ARR

#define SLEG_ARR (   name,
  variable,
  type 
)    SLEG_CONDARR(name, variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global fixed-size array of SL_VAR elements in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1163 of file saveload.h.

◆ SLEG_CONDARR

#define SLEG_CONDARR (   name,
  variable,
  type,
  length,
  from,
  to 
)    SLEG_GENERAL(name, SL_ARR, variable, type, length, from, to, 0)

Storage of a global fixed-size array of SL_VAR elements in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
lengthNumber of elements in the array.
fromFirst savegame version that has the array.
toLast savegame version that has the array.

Definition at line 1091 of file saveload.h.

◆ SLEG_CONDREF

#define SLEG_CONDREF (   name,
  variable,
  type,
  from,
  to 
)    SLEG_GENERAL(name, SL_REF, variable, type, 0, from, to, 0)

Storage of a global reference in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the field.
toLast savegame version that has the field.

Definition at line 1080 of file saveload.h.

◆ SLEG_CONDREFLIST

#define SLEG_CONDREFLIST (   name,
  variable,
  type,
  from,
  to 
)    SLEG_GENERAL(name, SL_REFLIST, variable, type, 0, from, to, 0)

Storage of a global reference list in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 1120 of file saveload.h.

◆ SLEG_CONDSSTR

#define SLEG_CONDSSTR (   name,
  variable,
  type,
  from,
  to 
)    SLEG_GENERAL(name, SL_STDSTR, variable, type, 0, from, to, 0)

Storage of a global std::string in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the string.
toLast savegame version that has the string.

Definition at line 1101 of file saveload.h.

◆ SLEG_CONDSTRUCT

#define SLEG_CONDSTRUCT (   name,
  handler,
  from,
  to 
)    SaveLoad {name, SL_STRUCT, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}

Storage of a structs in some savegame versions.

Parameters
nameThe name of the field.
handlerSaveLoadHandler for the structs.
fromFirst savegame version that has the struct.
toLast savegame version that has the struct.

Definition at line 1110 of file saveload.h.

◆ SLEG_CONDSTRUCTLIST

#define SLEG_CONDSTRUCTLIST (   name,
  handler,
  from,
  to 
)    SaveLoad {name, SL_STRUCTLIST, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}

Storage of a list of structs in some savegame versions.

Parameters
nameThe name of the field.
handlerSaveLoadHandler for the list of structs.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 1139 of file saveload.h.

◆ SLEG_CONDVAR

#define SLEG_CONDVAR (   name,
  variable,
  type,
  from,
  to 
)    SLEG_GENERAL(name, SL_VAR, variable, type, 0, from, to, 0)

Storage of a global variable in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the field.
toLast savegame version that has the field.

Definition at line 1070 of file saveload.h.

◆ SLEG_CONDVECTOR

#define SLEG_CONDVECTOR (   name,
  variable,
  type,
  from,
  to 
)    SLEG_GENERAL(name, SL_VECTOR, variable, type, 0, from, to, 0)

Storage of a global vector of SL_VAR elements in some savegame versions.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the list.
toLast savegame version that has the list.

Definition at line 1130 of file saveload.h.

◆ SLEG_GENERAL

#define SLEG_GENERAL (   name,
  cmd,
  variable,
  type,
  length,
  from,
  to,
  extra 
)
Value:
SaveLoad {name, cmd, type, length, from, to, [] (void *, size_t) -> void * { \
static_assert(SlCheckVarSize(cmd, type, length, sizeof(variable))); \
return static_cast<void *>(std::addressof(variable)); }, extra, nullptr}

Storage of global simple variables, references (pointers), and arrays.

Parameters
nameThe name of the field.
cmdLoad/save type.
See also
SaveLoadType
Parameters
variableName of the global variable.
typeStorage of the data in memory and in the savegame.
fromFirst savegame version that has the field.
toLast savegame version that has the field.
extraExtra data to pass to the address callback function.
Note
In general, it is better to use one of the SLEG_* macros below.

Definition at line 1057 of file saveload.h.

◆ SLEG_REF

#define SLEG_REF (   name,
  variable,
  type 
)    SLEG_CONDREF(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global reference in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1155 of file saveload.h.

◆ SLEG_REFLIST

#define SLEG_REFLIST (   name,
  variable,
  type 
)    SLEG_CONDREFLIST(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global reference list in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1186 of file saveload.h.

◆ SLEG_SSTR

#define SLEG_SSTR (   name,
  variable,
  type 
)    SLEG_CONDSSTR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global std::string in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1171 of file saveload.h.

◆ SLEG_STRUCT

#define SLEG_STRUCT (   name,
  handler 
)    SLEG_CONDSTRUCT(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a structs in every savegame version.

Parameters
nameThe name of the field.
handlerSaveLoadHandler for the structs.

Definition at line 1178 of file saveload.h.

◆ SLEG_STRUCTLIST

#define SLEG_STRUCTLIST (   name,
  handler 
)    SLEG_CONDSTRUCTLIST(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a list of structs in every savegame version.

Parameters
nameThe name of the field.
handlerSaveLoadHandler for the list of structs.

Definition at line 1201 of file saveload.h.

◆ SLEG_VAR

#define SLEG_VAR (   name,
  variable,
  type 
)    SLEG_CONDVAR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global variable in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1147 of file saveload.h.

◆ SLEG_VECTOR

#define SLEG_VECTOR (   name,
  variable,
  type 
)    SLEG_CONDVECTOR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)

Storage of a global vector of SL_VAR elements in every savegame version.

Parameters
nameThe name of the field.
variableName of the global variable.
typeStorage of the data in memory and in the savegame.

Definition at line 1194 of file saveload.h.

Enumeration Type Documentation

◆ ChunkType

enum ChunkType

Type of a chunk.

Enumerator
CH_TYPE_MASK 

All ChunkType values have to be within this mask.

CH_READONLY 

Chunk is never saved.

Definition at line 443 of file saveload.h.

◆ SavegameType

Types of save games.

Enumerator
SGT_TTD 

TTD savegame (can be detected incorrectly)

SGT_TTDP1 

TTDP savegame ( -//- ) (data at NW border)

SGT_TTDP2 

TTDP savegame in new format (data at SE border)

SGT_OTTD 

OTTD savegame.

SGT_TTO 

TTO savegame.

SGT_INVALID 

broken savegame (used internally)

Definition at line 415 of file saveload.h.

◆ SaveLoadType

enum SaveLoadType : uint8_t

Type of data saved.

Enumerator
SL_VAR 

Save/load a variable.

SL_REF 

Save/load a reference.

SL_STRUCT 

Save/load a struct.

SL_STDSTR 

Save/load a std::string.

SL_ARR 

Save/load a fixed-size array of SL_VAR elements.

SL_DEQUE 

Save/load a deque of SL_VAR elements.

SL_VECTOR 

Save/load a vector of SL_VAR elements.

SL_REFLIST 

Save/load a list of SL_REF elements.

SL_STRUCTLIST 

Save/load a list of structs.

SL_SAVEBYTE 

Save (but not load) a byte.

SL_NULL 

Save null-bytes and load to nowhere.

Definition at line 687 of file saveload.h.

◆ SaveLoadVersion

enum SaveLoadVersion : uint16_t

SaveLoad versions Previous savegame versions, the trunk revision where they were introduced and the released version that had that particular savegame version.

Up to savegame version 18 there is a minor version as well.

Older entries keep their original numbering.

Newer entries should use a descriptive labels, numeric version and PR can be added to comment.

Note that this list must not be reordered.

Enumerator
SL_MIN_VERSION 

First savegame version.

SLV_1 

1.0 0.1.x, 0.2.x

SLV_2 

2.0 0.3.0 2.1 0.3.1, 0.3.2

SLV_3 

3.x lost

SLV_4 

4.0 1 4.1 122 0.3.3, 0.3.4 4.2 1222 0.3.5 4.3 1417 4.4 1426

SLV_5 

5.0 1429 5.1 1440 5.2 1525 0.3.6

SLV_6 

6.0 1721 6.1 1768

SLV_7 

7.0 1770

SLV_8 

8.0 1786

SLV_9 

9.0 1909

SLV_10 

10.0 2030

SLV_11 

11.0 2033 11.1 2041

SLV_12 

12.1 2046

SLV_13 

13.1 2080 0.4.0, 0.4.0.1

SLV_14 

14.0 2441

SLV_15 

15.0 2499

SLV_16 

16.0 2817 16.1 3155

SLV_17 

17.0 3212 17.1 3218

SLV_18 

18 3227

SLV_19 

19 3396

SLV_20 

20 3403

SLV_21 

21 3472 0.4.x

SLV_22 

22 3726

SLV_23 

23 3915

SLV_24 

24 4150

SLV_25 

25 4259

SLV_26 

26 4466

SLV_27 

27 4757

SLV_28 

28 4987

SLV_29 

29 5070

SLV_30 

30 5946

SLV_31 

31 5999

SLV_32 

32 6001

SLV_33 

33 6440

SLV_34 

34 6455

SLV_35 

35 6602

SLV_36 

36 6624

SLV_37 

37 7182

SLV_38 

38 7195

SLV_39 

39 7269

SLV_40 

40 7326

SLV_41 

41 7348 0.5.x

SLV_42 

42 7573

SLV_43 

43 7642

SLV_44 

44 8144

SLV_45 

45 8501

SLV_46 

46 8705

SLV_47 

47 8735

SLV_48 

48 8935

SLV_49 

49 8969

SLV_50 

50 8973

SLV_51 

51 8978

SLV_52 

52 9066

SLV_53 

53 9316

SLV_54 

54 9613

SLV_55 

55 9638

SLV_56 

56 9667

SLV_57 

57 9691

SLV_58 

58 9762

SLV_59 

59 9779

SLV_60 

60 9874

SLV_61 

61 9892

SLV_62 

62 9905

SLV_63 

63 9956

SLV_64 

64 10006

SLV_65 

65 10210

SLV_66 

66 10211

SLV_67 

67 10236

SLV_68 

68 10266

SLV_69 

69 10319

SLV_70 

70 10541

SLV_71 

71 10567

SLV_72 

72 10601

SLV_73 

73 10903

SLV_74 

74 11030

SLV_75 

75 11107

SLV_76 

76 11139

SLV_77 

77 11172

SLV_78 

78 11176

SLV_79 

79 11188

SLV_80 

80 11228

SLV_81 

81 11244

SLV_82 

82 11410

SLV_83 

83 11589

SLV_84 

84 11822

SLV_85 

85 11874

SLV_86 

86 12042

SLV_87 

87 12129

SLV_88 

88 12134

SLV_89 

89 12160

SLV_90 

90 12293

SLV_91 

91 12347

SLV_92 

92 12381 0.6.x

SLV_93 

93 12648

SLV_94 

94 12816

SLV_95 

95 12924

SLV_96 

96 13226

SLV_97 

97 13256

SLV_98 

98 13375

SLV_99 

99 13838

SLV_100 

100 13952

SLV_101 

101 14233

SLV_102 

102 14332

SLV_103 

103 14598

SLV_104 

104 14735

SLV_105 

105 14803

SLV_106 

106 14919

SLV_107 

107 15027

SLV_108 

108 15045

SLV_109 

109 15075

SLV_110 

110 15148

SLV_111 

111 15190

SLV_112 

112 15290

SLV_113 

113 15340

SLV_114 

114 15601

SLV_115 

115 15695

SLV_116 

116 15893 0.7.x

SLV_117 

117 16037

SLV_118 

118 16129

SLV_119 

119 16242

SLV_120 

120 16439

SLV_121 

121 16694

SLV_122 

122 16855

SLV_123 

123 16909

SLV_124 

124 16993

SLV_125 

125 17113

SLV_126 

126 17433

SLV_127 

127 17439

SLV_128 

128 18281

SLV_129 

129 18292

SLV_130 

130 18404

SLV_131 

131 18481

SLV_132 

132 18522

SLV_133 

133 18674

SLV_134 

134 18703

SLV_135 

135 18719

SLV_136 

136 18764

SLV_137 

137 18912

SLV_138 

138 18942 1.0.x

SLV_139 

139 19346

SLV_140 

140 19382

SLV_141 

141 19799

SLV_142 

142 20003

SLV_143 

143 20048

SLV_144 

144 20334

SLV_145 

145 20376

SLV_146 

146 20446

SLV_147 

147 20621

SLV_148 

148 20659

SLV_149 

149 20832

SLV_150 

150 20857

SLV_151 

151 20918

SLV_152 

152 21171

SLV_153 

153 21263

SLV_154 

154 21426

SLV_155 

155 21453

SLV_156 

156 21728

SLV_157 

157 21862

SLV_158 

158 21933

SLV_159 

159 21962

SLV_160 

160 21974 1.1.x

SLV_161 

161 22567

SLV_162 

162 22713

SLV_163 

163 22767

SLV_164 

164 23290

SLV_165 

165 23304

SLV_166 

166 23415

SLV_167 

167 23504

SLV_168 

168 23637

SLV_169 

169 23816

SLV_170 

170 23826

SLV_171 

171 23835

SLV_172 

172 23947

SLV_173 

173 23967 1.2.0-RC1

SLV_174 

174 23973 1.2.x

SLV_175 

175 24136

SLV_176 

176 24446

SLV_177 

177 24619

SLV_178 

178 24789

SLV_179 

179 24810

SLV_180 

180 24998 1.3.x

SLV_181 

181 25012

SLV_182 

182 25115 FS#5492, r25259, r25296 Goal status

SLV_183 

183 25363 Cargodist

SLV_184 

184 25508 Unit localisation split

SLV_185 

185 25620 Storybooks

SLV_186 

186 25833 Objects storage

SLV_187 

187 25899 Linkgraph - restricted flows

SLV_188 

188 26169 v1.4 FS#5831 Unify RV travel time

SLV_189 

189 26450 Hierarchical vehicle subgroups

SLV_190 

190 26547 Separate order travel and wait times

SLV_191 

191 26636 FS#6026 Fix disaster vehicle storage (No bump) 191 26646 FS#6041 Linkgraph - store locations

SLV_192 

192 26700 FS#6066 Fix saving of order backups

SLV_193 

193 26802

SLV_194 

194 26881 v1.5

SLV_195 

195 27572 v1.6.1

SLV_196 

196 27778 v1.7

SLV_197 

197 27978 v1.8

SLV_198 

198 PR#6763 Switch town growth rate and counter to actual game ticks

SLV_EXTEND_CARGOTYPES 

199 PR#6802 Extend cargotypes to 64

SLV_EXTEND_RAILTYPES 

200 PR#6805 Extend railtypes to 64, adding uint16_t to map array.

SLV_EXTEND_PERSISTENT_STORAGE 

201 PR#6885 Extend NewGRF persistent storages.

SLV_EXTEND_INDUSTRY_CARGO_SLOTS 

202 PR#6867 Increase industry cargo slots to 16 in, 16 out

SLV_SHIP_PATH_CACHE 

203 PR#7072 Add path cache for ships

SLV_SHIP_ROTATION 

204 PR#7065 Add extra rotation stages for ships.

SLV_GROUP_LIVERIES 

205 PR#7108 Livery storage change and group liveries.

SLV_SHIPS_STOP_IN_LOCKS 

206 PR#7150 Ship/lock movement changes.

SLV_FIX_CARGO_MONITOR 

207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes.

SLV_TOWN_CARGOGEN 

208 PR#6965 New algorithms for town building cargo generation.

SLV_SHIP_CURVE_PENALTY 

209 PR#7289 Configurable ship curve penalties.

SLV_SERVE_NEUTRAL_INDUSTRIES 

210 PR#7234 Company stations can serve industries with attached neutral stations.

SLV_ROADVEH_PATH_CACHE 

211 PR#7261 Add path cache for road vehicles.

SLV_REMOVE_OPF 

212 PR#7245 Remove OPF.

SLV_TREES_WATER_CLASS 

213 PR#7405 WaterClass update for tree tiles.

SLV_ROAD_TYPES 

214 PR#6811 NewGRF road types.

SLV_SCRIPT_MEMLIMIT 

215 PR#7516 Limit on AI/GS memory consumption.

SLV_MULTITILE_DOCKS 

216 PR#7380 Multiple docks per station.

SLV_TRADING_AGE 

217 PR#7780 Configurable company trading age.

SLV_ENDING_YEAR 

218 PR#7747 v1.10 Configurable ending year.

SLV_REMOVE_TOWN_CARGO_CACHE 

219 PR#8258 Remove town cargo acceptance and production caches.

SLV_START_PATCHPACKS 

220 First known patchpack to use a version just above ours.

SLV_END_PATCHPACKS 

286 Last known patchpack to use a version just above ours.

SLV_GS_INDUSTRY_CONTROL 

287 PR#7912 and PR#8115 GS industry control.

SLV_VEH_MOTION_COUNTER 

288 PR#8591 Desync safe motion counter

SLV_INDUSTRY_TEXT 

289 PR#8576 v1.11.0-RC1 Additional GS text for industries.

SLV_MAPGEN_SETTINGS_REVAMP 

290 PR#8891 v1.11 Revamp of some mapgen settings (snow coverage, desert coverage, heightmap height, custom terrain type).

SLV_GROUP_REPLACE_WAGON_REMOVAL 

291 PR#7441 Per-group wagon removal flag.

SLV_CUSTOM_SUBSIDY_DURATION 

292 PR#9081 Configurable subsidy duration.

SLV_SAVELOAD_LIST_LENGTH 

293 PR#9374 Consistency in list length with SL_STRUCT / SL_STRUCTLIST / SL_DEQUE / SL_REFLIST.

SLV_RIFF_TO_ARRAY 

294 PR#9375 Changed many CH_RIFF chunks to CH_ARRAY chunks.

SLV_TABLE_CHUNKS 

295 PR#9322 Introduction of CH_TABLE and CH_SPARSE_TABLE.

SLV_SCRIPT_INT64 

296 PR#9415 SQInteger is 64bit but was saved as 32bit.

SLV_LINKGRAPH_TRAVEL_TIME 

297 PR#9457 v12.0-RC1 Store travel time in the linkgraph.

SLV_DOCK_DOCKINGTILES 

298 PR#9578 All tiles around docks may be docking tiles.

SLV_REPAIR_OBJECT_DOCKING_TILES 

299 PR#9594 v12.0 Fixing issue with docking tiles overlapping objects.

SLV_U64_TICK_COUNTER 

300 PR#10035 Make tick counter 64bit to avoid wrapping.

SLV_LAST_LOADING_TICK 

301 PR#9693 Store tick of last loading for vehicles.

SLV_MULTITRACK_LEVEL_CROSSINGS 

302 PR#9931 v13.0 Multi-track level crossings.

SLV_NEWGRF_ROAD_STOPS 

303 PR#10144 NewGRF road stops.

SLV_LINKGRAPH_EDGES 

304 PR#10314 Explicitly store link graph edges destination, PR#10471 int64_t instead of uint64_t league rating

SLV_VELOCITY_NAUTICAL 

305 PR#10594 Separation of land and nautical velocity (knots!)

SLV_CONSISTENT_PARTIAL_Z 

306 PR#10570 Conversion from an inconsistent partial Z calculation for slopes, to one that is (more) consistent.

SLV_MORE_CARGO_AGE 

307 PR#10596 Track cargo age for a longer period.

SLV_LINKGRAPH_SECONDS 

308 PR#10610 Store linkgraph update intervals in seconds instead of days.

SLV_AI_START_DATE 

309 PR#10653 Removal of individual AI start dates and added a generic one.

SLV_EXTEND_VEHICLE_RANDOM 

310 PR#10701 Extend vehicle random bits.

SLV_EXTEND_ENTITY_MAPPING 

311 PR#10672 Extend entity mapping range.

SLV_DISASTER_VEH_STATE 

312 PR#10798 Explicit storage of disaster vehicle state.

SLV_SAVEGAME_ID 

313 PR#10719 Add an unique ID to every savegame (used to deduplicate surveys).

SLV_STRING_GAMELOG 

314 PR#10801 Use std::string in gamelog.

SLV_INDUSTRY_CARGO_REORGANISE 

315 PR#10853 Industry accepts/produced data reorganised.

SLV_PERIODS_IN_TRANSIT_RENAME 

316 PR#11112 Rename days in transit to (cargo) periods in transit.

SLV_NEWGRF_LAST_SERVICE 

317 PR#11124 Added stable date_of_last_service to avoid NewGRF trouble.

SLV_REMOVE_LOADED_AT_XY 

318 PR#11276 Remove loaded_at_xy variable from CargoPacket.

SLV_CARGO_TRAVELLED 

319 PR#11283 CargoPacket now tracks how far it travelled inside a vehicle.

SLV_STATION_RATING_CHEAT 

320 PR#11346 Add cheat to fix station ratings at 100%.

SLV_TIMETABLE_START_TICKS 

321 PR#11468 Convert timetable start from a date to ticks.

SLV_TIMETABLE_START_TICKS_FIX 

322 PR#11557 Fix for missing convert timetable start from a date to ticks.

SLV_TIMETABLE_TICKS_TYPE 

323 PR#11435 Convert timetable current order time to ticks.

SLV_WATER_REGIONS 

324 PR#10543 Water Regions for ship pathfinder.

SLV_WATER_REGION_EVAL_SIMPLIFIED 

325 PR#11750 Simplified Water Region evaluation.

SLV_ECONOMY_DATE 

326 PR#10700 Split calendar and economy timers and dates.

SLV_ECONOMY_MODE_TIMEKEEPING_UNITS 

327 PR#11341 Mode to display economy measurements in wallclock units.

SLV_CALENDAR_SUB_DATE_FRACT 

328 PR#11428 Add sub_date_fract to measure calendar days.

SLV_SHIP_ACCELERATION 

329 PR#10734 Start using Vehicle's acceleration field for ships too.

SLV_MAX_LOAN_FOR_COMPANY 

330 PR#11224 Separate max loan for each company.

SLV_DEPOT_UNBUNCHING 

331 PR#11945 Allow unbunching shared order vehicles at a depot.

SLV_AI_LOCAL_CONFIG 

332 PR#12003 Config of running AI is stored inside Company.

SLV_SCRIPT_RANDOMIZER 

333 PR#12063 v14.0-RC1 Save script randomizers.

SLV_VEHICLE_ECONOMY_AGE 

334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age

SLV_COMPANY_ALLOW_LIST 

335 PR#12337 Saving of list of client keys that are allowed to join this company.

SLV_GROUP_NUMBERS 

336 PR#12297 Add per-company group numbers.

SLV_INCREASE_STATION_TYPE_FIELD_SIZE 

337 PR#12572 Increase size of StationType field in map array

SLV_ROAD_WAYPOINTS 

338 PR#12572 Road waypoints

SLV_COMPANY_INAUGURATED_PERIOD 

339 PR#12798 Companies show the period inaugurated in wallclock mode.

SLV_ROAD_STOP_TILE_DATA 

340 PR#12883 Move storage of road stop tile data, also save for road waypoints.

SLV_COMPANY_ALLOW_LIST_V2 

341 PR#12908 Fixed savegame format for saving of list of client keys that are allowed to join this company.

SL_MAX_VERSION 

Highest possible saveload version.

Definition at line 30 of file saveload.h.

◆ SaveOrLoadResult

Save or load result codes.

Enumerator
SL_OK 

completed successfully

SL_ERROR 

error that was caught before internal structures were modified

SL_REINIT 

error that was caught in the middle of updating game state, need to clear it. (can only happen during load)

Definition at line 395 of file saveload.h.

◆ SLRefType

enum SLRefType

Type of reference (SLE_REF, SLE_CONDREF).

Enumerator
REF_ORDER 

Load/save a reference to an order.

REF_VEHICLE 

Load/save a reference to a vehicle.

REF_STATION 

Load/save a reference to a station.

REF_TOWN 

Load/save a reference to a town.

REF_VEHICLE_OLD 

Load/save an old-style reference to a vehicle (for pre-4.4 savegames).

REF_ROADSTOPS 

Load/save a reference to a bus/truck stop.

REF_ENGINE_RENEWS 

Load/save a reference to an engine renewal (autoreplace).

REF_CARGO_PACKET 

Load/save a reference to a cargo packet.

REF_ORDERLIST 

Load/save a reference to an orderlist.

REF_STORAGE 

Load/save a reference to a persistent storage.

REF_LINK_GRAPH 

Load/save a reference to a link graph.

REF_LINK_GRAPH_JOB 

Load/save a reference to a link graph job.

Definition at line 592 of file saveload.h.

◆ VarTypes

enum VarTypes

VarTypes is the general bitmasked magic type that tells us certain characteristics about the variable it refers to.

For example SLE_FILE_* gives the size(type) as it would be in the savegame and SLE_VAR_* the size(type) as it is in memory during runtime. These are the first 8 bits (0-3 SLE_FILE, 4-7 SLE_VAR). Bits 8-15 are reserved for various flags as explained below

Enumerator
SLE_FILE_END 

Used to mark end-of-header in tables.

SLE_FILE_STRINGID 

StringID offset into strings-array.

SLE_FILE_TYPE_MASK 

Mask to get the file-type (and not any flags).

SLE_FILE_HAS_LENGTH_FIELD 

Bit stored in savegame to indicate field has a length field for each entry.

SLE_VAR_NULL 

useful to write zeros in savegame.

SLE_VAR_STR 

string pointer

SLE_VAR_STRQ 

string pointer enclosed in quotes

SLE_VAR_NAME 

old custom name to be converted to a char pointer

SLF_ALLOW_CONTROL 

Allow control codes in the strings.

SLF_ALLOW_NEWLINE 

Allow new lines in the strings.

Definition at line 615 of file saveload.h.

Function Documentation

◆ DoAutoOrNetsave()

void DoAutoOrNetsave ( FiosNumberedSaveName counter)

Create an autosave or netsave.

Parameters
counterA reference to the counter variable to be used for rotating the file name.
netsaveIndicates if this is a regular autosave or a netsave.

Definition at line 3183 of file saveload.cpp.

References _settings_client, AUTOSAVE_DIR, Debug, DFT_GAME_FILE, FiosNumberedSaveName::Extension(), FiosNumberedSaveName::Filename(), GenerateDefaultSaveName(), ClientSettings::gui, INVALID_STRING_ID, GUISettings::keep_all_autosave, SaveOrLoad(), ShowErrorMessage(), SL_OK, SLO_SAVE, and WL_ERROR.

Referenced by ClientNetworkEmergencySave().

◆ GetVarFileType()

constexpr VarType GetVarFileType ( VarType  type)
inlineconstexpr

Get the FileType of a setting.

This describes the integer type as it is represented in a savegame/file

Parameters
typeVarType holding information about the file-type
Returns
the SLE_FILE_* part of a variable-type description

Definition at line 752 of file saveload.h.

References GB().

Referenced by GetSavegameFileType(), GetSettingsDesc(), and SlCalcConvFileLen().

◆ GetVariableAddress()

void* GetVariableAddress ( const void *  object,
const SaveLoad sld 
)
inline

Get the address of the variable.

Null-variables don't have an address, everything else has a callback function that returns the address based on the saveload data and the current object for non-globals.

Definition at line 1272 of file saveload.h.

References SaveLoad::address_proc, SaveLoad::conv, SaveLoad::extra_data, GetVarMemType(), and SLE_VAR_NULL.

Referenced by ListSettingDesc::FormatValue(), ListSettingDesc::ParseValue(), IntSettingDesc::Read(), StringSettingDesc::Read(), IntSettingDesc::Write(), and StringSettingDesc::Write().

◆ GetVarMemType()

constexpr VarType GetVarMemType ( VarType  type)
inlineconstexpr

Get the NumberType of a setting.

This describes the integer type as it is represented in memory

Parameters
typeVarType holding information about the variable-type
Returns
the SLE_VAR_* part of a variable-type description

Definition at line 741 of file saveload.h.

References GB().

Referenced by StringSettingDesc::FormatValue(), GetVariableAddress(), IsNumericType(), StringSettingDesc::IsSameValue(), IntSettingDesc::MakeValueValid(), ListSettingDesc::ParseValue(), ReadValue(), SetSettingValue(), SlCalcConvMemLen(), SlCalcDequeLen(), SlCalcVectorLen(), SlCopyInternal(), SlDeque(), SlVarSize(), SlVector(), and WriteValue().

◆ IsNumericType()

constexpr bool IsNumericType ( VarType  conv)
inlineconstexpr

Check if the given saveload type is a numeric type.

Parameters
convthe type to check
Returns
True if it's a numeric type.

Definition at line 762 of file saveload.h.

References GetVarMemType().

◆ IsSavegameVersionBefore()

◆ IsSavegameVersionBeforeOrAt()

bool IsSavegameVersionBeforeOrAt ( SaveLoadVersion  major)
inline

Checks whether the savegame is below or at major.

This should be used to repair data from existing savegames which is no longer corrupted in new savegames, but for which otherwise no savegame bump is required.

Parameters
majorMajor number of the version to check against.
Returns
Savegame version is at most the specified version.

Definition at line 1248 of file saveload.h.

References _sl_version.

◆ ReadValue()

int64_t ReadValue ( const void *  ptr,
VarType  conv 
)

Return a signed-long version of the value of a setting.

Parameters
ptrpointer to the variable
convtype of variable, can be a non-clean type, eg one with other flags because it is parsed
Returns
returns the value of the pointer-setting

Definition at line 793 of file saveload.cpp.

References GetVarMemType().

Referenced by IntSettingDesc::Read().

◆ SaveloadCrashWithMissingNewGRFs()

bool SaveloadCrashWithMissingNewGRFs ( )

Did loading the savegame cause a crash? If so, were NewGRFs missing?

Returns
when the saveload crashed due to missing NewGRFs.

Definition at line 351 of file afterload.cpp.

References _saveload_crash_with_missing_newgrfs.

Referenced by HandleCrash().

◆ SaveOrLoad()

SaveOrLoadResult SaveOrLoad ( const std::string &  filename,
SaveLoadOperation  fop,
DetailedFileType  dft,
Subdirectory  sb,
bool  threaded 
)

Main Save or Load function where the high-level saveload functions are handled.

It opens the savegame, selects format and checks versions

Parameters
filenameThe name of the savegame being created/loaded
fopSave or load mode. Load can also be a TTD(Patch) game.
sbThe sub directory to save the savegame in
threadedTrue when threaded saving is allowed
Returns
Return the result of the action. SL_OK, SL_ERROR, or SL_REINIT ("unload" the game)

Definition at line 3092 of file saveload.cpp.

References _do_autosave, _sl, DFT_GAME_FILE, INVALID_STRING_ID, SaveLoadParams::saveinprogress, ShowErrorMessage(), SL_OK, SLO_SAVE, and WL_ERROR.

Referenced by DEF_CONSOLE_CMD(), DoAutoOrNetsave(), DoExitSave(), and CrashLog::WriteSavegame().

◆ SlAutolength()

void SlAutolength ( AutolengthProc *  proc,
int  arg 
)

Do something of which I have no idea what it is :P.

Parameters
procThe callback procedure that is called
argThe variable that will be used for the callback procedure

Definition at line 1952 of file saveload.cpp.

◆ SlCalcObjLength()

size_t SlCalcObjLength ( const void *  object,
const SaveLoadTable slt 
)

Calculate the size of an object.

Parameters
objectto be measured.
sltThe SaveLoad table with objects to save/load.
Returns
size of given object.

Definition at line 1506 of file saveload.cpp.

Referenced by SlObject().

◆ SlCheckVarSize()

constexpr bool SlCheckVarSize ( SaveLoadType  cmd,
VarType  type,
size_t  length,
size_t  size 
)
inlineconstexpr

Check if a saveload cmd/type/length entry matches the size of the variable.

Parameters
cmdSaveLoadType of entry.
typeVarType of entry.
lengthArray length of entry.
sizeActual size of variable.
Returns
true iff the sizes match.

Definition at line 800 of file saveload.h.

References SL_ARR, SL_DEQUE, SL_REF, SL_REFLIST, SL_SAVEBYTE, SL_STDSTR, SL_VAR, SL_VECTOR, and SlVarSize().

◆ SlCompatTableHeader()

std::vector<SaveLoad> SlCompatTableHeader ( const SaveLoadTable slt,
const SaveLoadCompatTable slct 
)

Load a table header in a savegame compatible way.

If the savegame was made before table headers were added, it will fall back to the SaveLoadCompatTable for the order of fields while loading.

Note
You only have to call this function if the chunk existed as a non-table type before converting it to a table. New chunks created as table can call SlTableHeader() directly.
Parameters
sltThe SaveLoad table with objects to save/load.
slctThe SaveLoadCompat table the original order of the fields.
Returns
When loading, the ordered SaveLoad array to use; otherwise an empty list.

Definition at line 1888 of file saveload.cpp.

References _sl, SaveLoadParams::action, SaveLoadParams::block_mode, SLA_LOAD, and SLA_LOAD_CHECK.

Referenced by NewGRFMappingChunkHandler::Load(), PSACChunkHandler::Load(), GOALChunkHandler::Load(), ERNWChunkHandler::Load(), MAPSChunkHandler::Load(), DEPTChunkHandler::Load(), SUBSChunkHandler::Load(), GRPSChunkHandler::Load(), SIGNChunkHandler::Load(), OBJSChunkHandler::Load(), CHTSChunkHandler::Load(), STPEChunkHandler::Load(), GSDTChunkHandler::Load(), CMDLChunkHandler::Load(), ECMYChunkHandler::Load(), AIPLChunkHandler::Load(), ENGNChunkHandler::Load(), STPAChunkHandler::Load(), CAPYChunkHandler::Load(), CMPUChunkHandler::Load(), RAILChunkHandler::Load(), CAPAChunkHandler::Load(), GSTRChunkHandler::Load(), VIEWChunkHandler::Load(), EIDSChunkHandler::Load(), ORDLChunkHandler::Load(), INDYChunkHandler::Load(), LGRPChunkHandler::Load(), BKORChunkHandler::Load(), CITYChunkHandler::Load(), LGRJChunkHandler::Load(), IBLDChunkHandler::Load(), LGRSChunkHandler::Load(), ITBLChunkHandler::Load(), STNSChunkHandler::Load(), PLYRChunkHandler::Load(), STNNChunkHandler::Load(), ROADChunkHandler::Load(), VEHSChunkHandler::Load(), MAPSChunkHandler::LoadCheck(), PLYRChunkHandler::LoadCheck(), and LoadSettings().

◆ SlCopy()

void SlCopy ( void *  object,
size_t  length,
VarType  conv 
)

Copy a list of SL_VARs to/from a savegame.

These entries are copied as-is, and you as caller have to make sure things like length-fields are calculated correctly.

Parameters
objectThe object being manipulated.
lengthThe length of the object in elements
convVarType type of the items.

Definition at line 1029 of file saveload.cpp.

References _sl, SaveLoadParams::action, SaveLoadParams::need_length, NL_CALCLENGTH, NL_NONE, SLA_NULL, SLA_PTRS, SlCalcConvFileLen(), SlCopyInternal(), and SlSetLength().

Referenced by ANITChunkHandler::Load(), MAPTChunkHandler::Load(), MAPHChunkHandler::Load(), NAMEChunkHandler::Load(), MAPOChunkHandler::Load(), MAP2ChunkHandler::Load(), ENGSChunkHandler::Load(), M3LOChunkHandler::Load(), M3HIChunkHandler::Load(), MAP5ChunkHandler::Load(), MAPEChunkHandler::Load(), MAP7ChunkHandler::Load(), MAP8ChunkHandler::Load(), ScriptInstance::LoadObjects(), and ScriptInstance::SaveObject().

◆ SlGetStructListLength()

size_t SlGetStructListLength ( size_t  limit)

Get the length of this list; if it exceeds the limit, error out.

Parameters
limitThe maximum size the list can be.
Returns
The length of the list.

Definition at line 1684 of file saveload.cpp.

Referenced by SlTownSupplied::GetNumCargo(), and SlStationGoods::GetNumCargo().

◆ SlGlobList()

void SlGlobList ( const SaveLoadTable slt)

Save or Load (a list of) global variables.

Parameters
sltThe SaveLoad table with objects to save/load.

Definition at line 1942 of file saveload.cpp.

References SlObject().

Referenced by IBLDChunkHandler::Load().

◆ SlIsObjectCurrentlyValid()

bool SlIsObjectCurrentlyValid ( SaveLoadVersion  version_from,
SaveLoadVersion  version_to 
)
inline

Checks if some version from/to combination falls within the range of the active savegame version.

Parameters
version_fromInclusive savegame version lower bound.
version_toExclusive savegame version upper bound. SL_MAX_VERSION if no upper bound.
Returns
Active savegame version falls within the given range.

Definition at line 1261 of file saveload.h.

References SAVEGAME_VERSION.

Referenced by CmdChangeSetting(), GetSaveLoadFromSettingTable(), GetSettingFromName(), IniLoadSettings(), IniSaveSettings(), LoadSettings(), and SurveySettingsTable().

◆ SlIterateArray()

int SlIterateArray ( )

◆ SlObject()

◆ SlReadByte()

uint8_t SlReadByte ( )

Wrapper for reading a byte from the buffer.

Returns
The read byte.

Definition at line 392 of file saveload.cpp.

References _sl, and SaveLoadParams::reader.

Referenced by SlCopyBytes(), SlLoadCheckChunk(), SlLoadChunk(), SlReadSimpleGamma(), and SlSkipBytes().

◆ SlSetLength()

void SlSetLength ( size_t  length)

Sets the length of either a RIFF object or the number of items in an array.

This lets us load an object or an array of arbitrary size

Parameters
lengthThe length of the sought object/array

Definition at line 712 of file saveload.cpp.

References _sl, SaveLoadParams::action, SaveLoadParams::block_mode, SaveLoadParams::need_length, NL_NONE, NL_WANTLENGTH, and SLA_SAVE.

Referenced by MAPTChunkHandler::Save(), MAPHChunkHandler::Save(), MAPOChunkHandler::Save(), MAP2ChunkHandler::Save(), M3LOChunkHandler::Save(), M3HIChunkHandler::Save(), MAP5ChunkHandler::Save(), MAPEChunkHandler::Save(), MAP7ChunkHandler::Save(), MAP8ChunkHandler::Save(), SlCopy(), SlObject(), SlRefList(), and SlSetStructListLength().

◆ SlSetStructListLength()

void SlSetStructListLength ( size_t  length)

Set the length of this list.

Parameters
Thelength of the list.

Definition at line 1668 of file saveload.cpp.

References _sl, SaveLoadParams::need_length, NL_NONE, and SlSetLength().

◆ SlSkipBytes()

void SlSkipBytes ( size_t  length)
inline

Read in bytes from the file/data structure but don't do anything with them, discarding them in effect.

Parameters
lengthThe amount of bytes that is being treated this way

Definition at line 1316 of file saveload.h.

References SlReadByte().

Referenced by SlCopyInternal(), and SlSkipArray().

◆ SlTableHeader()

std::vector<SaveLoad> SlTableHeader ( const SaveLoadTable slt)

Save or Load a table header.

Note
a table-header can never contain more than 65535 fields.
Parameters
sltThe SaveLoad table with objects to save/load.
Returns
When loading, the ordered SaveLoad array to use; otherwise an empty list.

Definition at line 1750 of file saveload.cpp.

References _sl, and SaveLoadParams::block_mode.

Referenced by WaterRegionChunkHandler::Load(), SRNDChunkHandler::Load(), LEAEChunkHandler::Load(), LEATChunkHandler::Load(), NewGRFMappingChunkHandler::Save(), SRNDChunkHandler::Save(), ANITChunkHandler::Save(), GOALChunkHandler::Save(), ERNWChunkHandler::Save(), LEAEChunkHandler::Save(), MAPSChunkHandler::Save(), DEPTChunkHandler::Save(), OBJSChunkHandler::Save(), GRPSChunkHandler::Save(), SUBSChunkHandler::Save(), SIGNChunkHandler::Save(), PSACChunkHandler::Save(), STPEChunkHandler::Save(), CHTSChunkHandler::Save(), CMDLChunkHandler::Save(), ECMYChunkHandler::Save(), LEATChunkHandler::Save(), NGRFChunkHandler::Save(), ENGNChunkHandler::Save(), STPAChunkHandler::Save(), CMPUChunkHandler::Save(), CAPYChunkHandler::Save(), RAILChunkHandler::Save(), GSDTChunkHandler::Save(), DATEChunkHandler::Save(), CAPAChunkHandler::Save(), AIPLChunkHandler::Save(), VIEWChunkHandler::Save(), GSTRChunkHandler::Save(), EIDSChunkHandler::Save(), INDYChunkHandler::Save(), LGRPChunkHandler::Save(), CITYChunkHandler::Save(), LGRJChunkHandler::Save(), IBLDChunkHandler::Save(), LGRSChunkHandler::Save(), ITBLChunkHandler::Save(), GLOGChunkHandler::Save(), PLYRChunkHandler::Save(), STNNChunkHandler::Save(), ROADChunkHandler::Save(), VEHSChunkHandler::Save(), and SaveSettings().

◆ SlVarSize()

constexpr size_t SlVarSize ( VarType  type)
inlineconstexpr

Return expect size in bytes of a VarType.

Parameters
typeVarType to get size of.
Returns
size of type in bytes.

Definition at line 772 of file saveload.h.

References GetVarMemType().

Referenced by LoadIntList(), and SlCheckVarSize().

◆ SlWriteByte()

void SlWriteByte ( uint8_t  b)

Wrapper for writing a byte to the dumper.

Parameters
bThe byte to write.

Definition at line 401 of file saveload.cpp.

References _sl, and SaveLoadParams::dumper.

Referenced by SlCopyBytes(), and SlWriteSimpleGamma().

◆ WriteValue()

void WriteValue ( void *  ptr,
VarType  conv,
int64_t  val 
)

Write the value of a setting.

Parameters
ptrpointer to the variable
convtype of variable, can be a non-clean type, eg with other flags. It is parsed upon read
valthe new value being given to the variable

Definition at line 817 of file saveload.cpp.

References GetVarMemType().

Referenced by LoadIntList(), and IntSettingDesc::Write().

SlCheckVarSize
constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t length, size_t size)
Check if a saveload cmd/type/length entry matches the size of the variable.
Definition: saveload.h:800
SaveLoad
SaveLoad type struct.
Definition: saveload.h:707