OpenTTD Source  20240917-master-g9ab0a47812
saveload.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef SAVELOAD_H
11 #define SAVELOAD_H
12 
13 #include "saveload_error.hpp"
14 #include "../fileio_type.h"
15 #include "../fios.h"
16 
30 enum SaveLoadVersion : uint16_t {
32 
51 
58 
66 
72 
78 
84 
90 
96 
102 
108 
114 
120 
126 
132 
138 
144 
150 
156 
162 
168 
174 
180 
186 
192 
198 
204 
210 
216 
222 
228 
234 
240 
246 
252 
258 
264 
270 
273  SLV_192,
277 
283 
289 
295 
301 
307 
308  /* Patchpacks for a while considered it a good idea to jump a few versions
309  * above our version for their savegames. But as time continued, this gap
310  * has been closing, up to the point we would start to reuse versions from
311  * their patchpacks. This is not a problem from our perspective: the
312  * savegame will simply fail to load because they all contain chunks we
313  * cannot digest. But, this gives for ugly errors. As we have plenty of
314  * versions anyway, we simply skip the versions we know belong to
315  * patchpacks. This way we can present the user with a clean error
316  * indicate they are loading a savegame from a patchpack.
317  * For future patchpack creators: please follow a system like JGRPP, where
318  * the version is masked with 0x8000, and the true version is stored in
319  * its own chunk with feature toggles.
320  */
323 
327 
333 
339 
345 
351 
357 
363 
369 
375 
381 
387 
390 
392 };
393 
396  SL_OK = 0,
397  SL_ERROR = 1,
398  SL_REINIT = 2,
399 };
400 
406  std::string name;
407  std::string title;
408 
409  void SetMode(FiosType ft);
411  void Set(const FiosItem &item);
412 };
413 
421  SGT_INVALID = 0xFF,
422 };
423 
425 
426 std::string GenerateDefaultSaveName();
427 void SetSaveLoadError(StringID str);
430 SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded = true);
431 void WaitTillSaved();
433 void DoExitSave();
434 
436 
437 SaveOrLoadResult SaveWithFilter(std::shared_ptr<struct SaveFilter> writer, bool threaded);
438 SaveOrLoadResult LoadWithFilter(std::shared_ptr<struct LoadFilter> reader);
439 
440 typedef void AutolengthProc(int);
441 
443 enum ChunkType {
444  CH_RIFF = 0,
445  CH_ARRAY = 1,
446  CH_SPARSE_ARRAY = 2,
447  CH_TABLE = 3,
448  CH_SPARSE_TABLE = 4,
449 
450  CH_TYPE_MASK = 0xf,
452 };
453 
455 struct ChunkHandler {
456  uint32_t id;
458 
459  ChunkHandler(uint32_t id, ChunkType type) : id(id), type(type) {}
460 
461  virtual ~ChunkHandler() = default;
462 
467  virtual void Save() const { NOT_REACHED(); }
468 
473  virtual void Load() const = 0;
474 
481  virtual void FixPointers() const {}
482 
488  virtual void LoadCheck(size_t len = 0) const;
489 
490  std::string GetName() const
491  {
492  return std::string()
493  + static_cast<char>(this->id >> 24)
494  + static_cast<char>(this->id >> 16)
495  + static_cast<char>(this->id >> 8)
496  + static_cast<char>(this->id);
497  }
498 };
499 
501 using ChunkHandlerRef = std::reference_wrapper<const ChunkHandler>;
502 
504 using ChunkHandlerTable = std::span<const ChunkHandlerRef>;
505 
507 using SaveLoadTable = std::span<const struct SaveLoad>;
508 
510 using SaveLoadCompatTable = std::span<const struct SaveLoadCompat>;
511 
514 public:
515  std::optional<std::vector<SaveLoad>> load_description;
516 
517  virtual ~SaveLoadHandler() = default;
518 
523  virtual void Save([[maybe_unused]] void *object) const {}
524 
529  virtual void Load([[maybe_unused]] void *object) const {}
530 
535  virtual void LoadCheck([[maybe_unused]] void *object) const {}
536 
541  virtual void FixPointers([[maybe_unused]] void *object) const {}
542 
546  virtual SaveLoadTable GetDescription() const = 0;
547 
551  virtual SaveLoadCompatTable GetCompatDescription() const = 0;
552 
559 };
560 
572 template <class TImpl, class TObject>
574 public:
575  SaveLoadTable GetDescription() const override { return static_cast<const TImpl *>(this)->description; }
576  SaveLoadCompatTable GetCompatDescription() const override { return static_cast<const TImpl *>(this)->compat_description; }
577 
578  virtual void Save([[maybe_unused]] TObject *object) const {}
579  void Save(void *object) const override { this->Save(static_cast<TObject *>(object)); }
580 
581  virtual void Load([[maybe_unused]] TObject *object) const {}
582  void Load(void *object) const override { this->Load(static_cast<TObject *>(object)); }
583 
584  virtual void LoadCheck([[maybe_unused]] TObject *object) const {}
585  void LoadCheck(void *object) const override { this->LoadCheck(static_cast<TObject *>(object)); }
586 
587  virtual void FixPointers([[maybe_unused]] TObject *object) const {}
588  void FixPointers(void *object) const override { this->FixPointers(static_cast<TObject *>(object)); }
589 };
590 
592 enum SLRefType {
593  REF_ORDER = 0,
596  REF_TOWN = 3,
605 };
606 
615 enum VarTypes {
616  /* 4 bits allocated a maximum of 16 types for NumberType.
617  * NOTE: the SLE_FILE_NNN values are stored in the savegame! */
619  SLE_FILE_I8 = 1,
620  SLE_FILE_U8 = 2,
621  SLE_FILE_I16 = 3,
622  SLE_FILE_U16 = 4,
623  SLE_FILE_I32 = 5,
624  SLE_FILE_U32 = 6,
625  SLE_FILE_I64 = 7,
626  SLE_FILE_U64 = 8,
628  SLE_FILE_STRING = 10,
629  SLE_FILE_STRUCT = 11,
630  /* 4 more possible file-primitives */
631 
634 
635  /* 4 bits allocated a maximum of 16 types for NumberType */
636  SLE_VAR_BL = 0 << 4,
637  SLE_VAR_I8 = 1 << 4,
638  SLE_VAR_U8 = 2 << 4,
639  SLE_VAR_I16 = 3 << 4,
640  SLE_VAR_U16 = 4 << 4,
641  SLE_VAR_I32 = 5 << 4,
642  SLE_VAR_U32 = 6 << 4,
643  SLE_VAR_I64 = 7 << 4,
644  SLE_VAR_U64 = 8 << 4,
645  SLE_VAR_NULL = 9 << 4,
646  SLE_VAR_STR = 12 << 4,
647  SLE_VAR_STRQ = 13 << 4,
648  SLE_VAR_NAME = 14 << 4,
649  /* 1 more possible memory-primitives */
650 
651  /* Shortcut values */
652  SLE_VAR_CHAR = SLE_VAR_I8,
653 
654  /* Default combinations of variables. As savegames change, so can variables
655  * and thus it is possible that the saved value and internal size do not
656  * match and you need to specify custom combo. The defaults are listed here */
657  SLE_BOOL = SLE_FILE_I8 | SLE_VAR_BL,
658  SLE_INT8 = SLE_FILE_I8 | SLE_VAR_I8,
659  SLE_UINT8 = SLE_FILE_U8 | SLE_VAR_U8,
660  SLE_INT16 = SLE_FILE_I16 | SLE_VAR_I16,
661  SLE_UINT16 = SLE_FILE_U16 | SLE_VAR_U16,
662  SLE_INT32 = SLE_FILE_I32 | SLE_VAR_I32,
663  SLE_UINT32 = SLE_FILE_U32 | SLE_VAR_U32,
664  SLE_INT64 = SLE_FILE_I64 | SLE_VAR_I64,
665  SLE_UINT64 = SLE_FILE_U64 | SLE_VAR_U64,
666  SLE_CHAR = SLE_FILE_I8 | SLE_VAR_CHAR,
667  SLE_STRINGID = SLE_FILE_STRINGID | SLE_VAR_U32,
668  SLE_STRING = SLE_FILE_STRING | SLE_VAR_STR,
669  SLE_STRINGQUOTE = SLE_FILE_STRING | SLE_VAR_STRQ,
670  SLE_NAME = SLE_FILE_STRINGID | SLE_VAR_NAME,
671 
672  /* Shortcut values */
673  SLE_UINT = SLE_UINT32,
674  SLE_INT = SLE_INT32,
675  SLE_STR = SLE_STRING,
676  SLE_STRQ = SLE_STRINGQUOTE,
677 
678  /* 8 bits allocated for a maximum of 8 flags
679  * Flags directing saving/loading of a variable */
680  SLF_ALLOW_CONTROL = 1 << 8,
681  SLF_ALLOW_NEWLINE = 1 << 9,
682 };
683 
684 typedef uint32_t VarType;
685 
687 enum SaveLoadType : uint8_t {
688  SL_VAR = 0,
689  SL_REF = 1,
690  SL_STRUCT = 2,
691 
692  SL_STDSTR = 4,
693 
694  SL_ARR = 5,
695  SL_DEQUE = 6,
696  SL_VECTOR = 7,
699 
700  SL_SAVEBYTE = 10,
701  SL_NULL = 11,
702 };
703 
704 typedef void *SaveLoadAddrProc(void *base, size_t extra);
705 
707 struct SaveLoad {
708  std::string name;
710  VarType conv;
711  uint16_t length;
714  SaveLoadAddrProc *address_proc;
715  size_t extra_data;
716  std::shared_ptr<SaveLoadHandler> handler;
717 };
718 
728  std::string name;
730  uint16_t null_length;
733 };
734 
741 inline constexpr VarType GetVarMemType(VarType type)
742 {
743  return GB(type, 4, 4) << 4;
744 }
745 
752 inline constexpr VarType GetVarFileType(VarType type)
753 {
754  return GB(type, 0, 4);
755 }
756 
762 inline constexpr bool IsNumericType(VarType conv)
763 {
764  return GetVarMemType(conv) <= SLE_VAR_U64;
765 }
766 
772 inline constexpr size_t SlVarSize(VarType type)
773 {
774  switch (GetVarMemType(type)) {
775  case SLE_VAR_BL: return sizeof(bool);
776  case SLE_VAR_I8: return sizeof(int8_t);
777  case SLE_VAR_U8: return sizeof(uint8_t);
778  case SLE_VAR_I16: return sizeof(int16_t);
779  case SLE_VAR_U16: return sizeof(uint16_t);
780  case SLE_VAR_I32: return sizeof(int32_t);
781  case SLE_VAR_U32: return sizeof(uint32_t);
782  case SLE_VAR_I64: return sizeof(int64_t);
783  case SLE_VAR_U64: return sizeof(uint64_t);
784  case SLE_VAR_NULL: return sizeof(void *);
785  case SLE_VAR_STR: return sizeof(std::string);
786  case SLE_VAR_STRQ: return sizeof(std::string);
787  case SLE_VAR_NAME: return sizeof(std::string);
788  default: NOT_REACHED();
789  }
790 }
791 
800 inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t length, size_t size)
801 {
802  switch (cmd) {
803  case SL_VAR: return SlVarSize(type) == size;
804  case SL_REF: return sizeof(void *) == size;
805  case SL_STDSTR: return SlVarSize(type) == size;
806  case SL_ARR: return SlVarSize(type) * length <= size; // Partial load of array is permitted.
807  case SL_DEQUE: return sizeof(std::deque<void *>) == size;
808  case SL_VECTOR: return sizeof(std::vector<void *>) == size;
809  case SL_REFLIST: return sizeof(std::list<void *>) == size;
810  case SL_SAVEBYTE: return true;
811  default: NOT_REACHED();
812  }
813 }
814 
828 #define SLE_GENERAL_NAME(cmd, name, base, variable, type, length, from, to, extra) \
829  SaveLoad {name, cmd, type, length, from, to, [] (void *b, size_t) -> void * { \
830  static_assert(SlCheckVarSize(cmd, type, length, sizeof(static_cast<base *>(b)->variable))); \
831  assert(b != nullptr); \
832  return const_cast<void *>(static_cast<const void *>(std::addressof(static_cast<base *>(b)->variable))); \
833  }, extra, nullptr}
834 
847 #define SLE_GENERAL(cmd, base, variable, type, length, from, to, extra) SLE_GENERAL_NAME(cmd, #variable, base, variable, type, length, from, to, extra)
848 
857 #define SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to, 0)
858 
868 #define SLE_CONDVARNAME(base, variable, name, type, from, to) SLE_GENERAL_NAME(SL_VAR, name, base, variable, type, 0, from, to, 0)
869 
878 #define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to, 0)
879 
889 #define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to, 0)
890 
901 #define SLE_CONDARRNAME(base, variable, name, type, length, from, to) SLE_GENERAL_NAME(SL_ARR, name, base, variable, type, length, from, to, 0)
902 
912 #define SLE_CONDSTR(base, variable, type, length, from, to) SLE_GENERAL(SL_STR, base, variable, type, length, from, to, 0)
913 
922 #define SLE_CONDSSTR(base, variable, type, from, to) SLE_GENERAL(SL_STDSTR, base, variable, type, 0, from, to, 0)
923 
933 #define SLE_CONDSSTRNAME(base, variable, name, type, from, to) SLE_GENERAL_NAME(SL_STDSTR, name, base, variable, type, 0, from, to, 0)
934 
943 #define SLE_CONDREFLIST(base, variable, type, from, to) SLE_GENERAL(SL_REFLIST, base, variable, type, 0, from, to, 0)
944 
953 #define SLE_CONDDEQUE(base, variable, type, from, to) SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to, 0)
954 
963 #define SLE_CONDVECTOR(base, variable, type, from, to) SLE_GENERAL(SL_VECTOR, base, variable, type, 0, from, to, 0)
964 
971 #define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
972 
980 #define SLE_VARNAME(base, variable, name, type) SLE_CONDVARNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)
981 
988 #define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
989 
997 #define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
998 
1007 #define SLE_ARRNAME(base, variable, name, type, length) SLE_CONDARRNAME(base, variable, name, type, length, SL_MIN_VERSION, SL_MAX_VERSION)
1008 
1015 #define SLE_SSTR(base, variable, type) SLE_CONDSSTR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1016 
1024 #define SLE_SSTRNAME(base, variable, name, type) SLE_CONDSSTRNAME(base, variable, name, type, SL_MIN_VERSION, SL_MAX_VERSION)
1025 
1032 #define SLE_REFLIST(base, variable, type) SLE_CONDREFLIST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1033 
1044 #define SLE_SAVEBYTE(base, variable) SLE_GENERAL(SL_SAVEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, 0)
1045 
1057 #define SLEG_GENERAL(name, cmd, variable, type, length, from, to, extra) \
1058  SaveLoad {name, cmd, type, length, from, to, [] (void *, size_t) -> void * { \
1059  static_assert(SlCheckVarSize(cmd, type, length, sizeof(variable))); \
1060  return static_cast<void *>(std::addressof(variable)); }, extra, nullptr}
1061 
1070 #define SLEG_CONDVAR(name, variable, type, from, to) SLEG_GENERAL(name, SL_VAR, variable, type, 0, from, to, 0)
1071 
1080 #define SLEG_CONDREF(name, variable, type, from, to) SLEG_GENERAL(name, SL_REF, variable, type, 0, from, to, 0)
1081 
1091 #define SLEG_CONDARR(name, variable, type, length, from, to) SLEG_GENERAL(name, SL_ARR, variable, type, length, from, to, 0)
1092 
1101 #define SLEG_CONDSSTR(name, variable, type, from, to) SLEG_GENERAL(name, SL_STDSTR, variable, type, 0, from, to, 0)
1102 
1110 #define SLEG_CONDSTRUCT(name, handler, from, to) SaveLoad {name, SL_STRUCT, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}
1111 
1120 #define SLEG_CONDREFLIST(name, variable, type, from, to) SLEG_GENERAL(name, SL_REFLIST, variable, type, 0, from, to, 0)
1121 
1130 #define SLEG_CONDVECTOR(name, variable, type, from, to) SLEG_GENERAL(name, SL_VECTOR, variable, type, 0, from, to, 0)
1131 
1139 #define SLEG_CONDSTRUCTLIST(name, handler, from, to) SaveLoad {name, SL_STRUCTLIST, 0, 0, from, to, nullptr, 0, std::make_shared<handler>()}
1140 
1147 #define SLEG_VAR(name, variable, type) SLEG_CONDVAR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1148 
1155 #define SLEG_REF(name, variable, type) SLEG_CONDREF(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1156 
1163 #define SLEG_ARR(name, variable, type) SLEG_CONDARR(name, variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION)
1164 
1171 #define SLEG_SSTR(name, variable, type) SLEG_CONDSSTR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1172 
1178 #define SLEG_STRUCT(name, handler) SLEG_CONDSTRUCT(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)
1179 
1186 #define SLEG_REFLIST(name, variable, type) SLEG_CONDREFLIST(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1187 
1194 #define SLEG_VECTOR(name, variable, type) SLEG_CONDVECTOR(name, variable, type, SL_MIN_VERSION, SL_MAX_VERSION)
1195 
1201 #define SLEG_STRUCTLIST(name, handler) SLEG_CONDSTRUCTLIST(name, handler, SL_MIN_VERSION, SL_MAX_VERSION)
1202 
1207 #define SLC_VAR(name) {name, SLE_FILE_U8, 0, SL_MIN_VERSION, SL_MAX_VERSION}
1208 
1215 #define SLC_NULL(length, from, to) {{}, SLE_FILE_U8, length, from, to}
1216 
1223 #define SLC_NULL_STR(length, from, to) {{}, SLE_FILE_STRING, length, from, to}
1224 
1226 #define SLC_END() {{}, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION}
1227 
1234 inline bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor = 0)
1235 {
1237  extern uint8_t _sl_minor_version;
1238  return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor);
1239 }
1240 
1249 {
1251  return _sl_version <= major;
1252 }
1253 
1261 inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to)
1262 {
1263  extern const SaveLoadVersion SAVEGAME_VERSION;
1264  return version_from <= SAVEGAME_VERSION && SAVEGAME_VERSION < version_to;
1265 }
1266 
1272 inline void *GetVariableAddress(const void *object, const SaveLoad &sld)
1273 {
1274  /* Entry is a null-variable, mostly used to read old savegames etc. */
1275  if (GetVarMemType(sld.conv) == SLE_VAR_NULL) {
1276  assert(sld.address_proc == nullptr);
1277  return nullptr;
1278  }
1279 
1280  /* Everything else should be a non-null pointer. */
1281  assert(sld.address_proc != nullptr);
1282  return sld.address_proc(const_cast<void *>(object), sld.extra_data);
1283 }
1284 
1285 int64_t ReadValue(const void *ptr, VarType conv);
1286 void WriteValue(void *ptr, VarType conv, int64_t val);
1287 
1288 void SlSetArrayIndex(uint index);
1289 int SlIterateArray();
1290 
1291 void SlSetStructListLength(size_t length);
1292 size_t SlGetStructListLength(size_t limit);
1293 
1294 void SlAutolength(AutolengthProc *proc, int arg);
1295 size_t SlGetFieldLength();
1296 void SlSetLength(size_t length);
1297 size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld);
1298 size_t SlCalcObjLength(const void *object, const SaveLoadTable &slt);
1299 
1300 uint8_t SlReadByte();
1301 void SlWriteByte(uint8_t b);
1302 
1303 void SlGlobList(const SaveLoadTable &slt);
1304 void SlCopy(void *object, size_t length, VarType conv);
1305 std::vector<SaveLoad> SlTableHeader(const SaveLoadTable &slt);
1306 std::vector<SaveLoad> SlCompatTableHeader(const SaveLoadTable &slt, const SaveLoadCompatTable &slct);
1307 void SlObject(void *object, const SaveLoadTable &slt);
1308 
1310 
1316 inline void SlSkipBytes(size_t length)
1317 {
1318  for (; length != 0; length--) SlReadByte();
1319 }
1320 
1321 extern std::string _savegame_format;
1322 extern bool _do_autosave;
1323 
1324 #endif /* SAVELOAD_H */
SLV_38
@ SLV_38
38 7195
Definition: saveload.h:88
SGT_INVALID
@ SGT_INVALID
broken savegame (used internally)
Definition: saveload.h:421
SaveLoadVersion
SaveLoadVersion
SaveLoad versions Previous savegame versions, the trunk revision where they were introduced and the r...
Definition: saveload.h:30
SaveLoad::version_to
SaveLoadVersion version_to
Save/load the variable before this savegame version.
Definition: saveload.h:713
SLV_REMOVE_OPF
@ SLV_REMOVE_OPF
212 PR#7245 Remove OPF.
Definition: saveload.h:298
SLV_74
@ SLV_74
74 11030
Definition: saveload.h:131
SL_VAR
@ SL_VAR
Save/load a variable.
Definition: saveload.h:688
REF_ORDER
@ REF_ORDER
Load/save a reference to an order.
Definition: saveload.h:593
SaveLoadHandler::Save
virtual void Save([[maybe_unused]] void *object) const
Save the object to disk.
Definition: saveload.h:523
DefaultSaveLoadHandler
Default handler for saving/loading an object to/from disk.
Definition: saveload.h:573
SLV_5
@ SLV_5
5.0 1429 5.1 1440 5.2 1525 0.3.6
Definition: saveload.h:43
SL_NULL
@ SL_NULL
Save null-bytes and load to nowhere.
Definition: saveload.h:701
SLV_COMPANY_ALLOW_LIST_V2
@ SLV_COMPANY_ALLOW_LIST_V2
341 PR#12908 Fixed savegame format for saving of list of client keys that are allowed to join this co...
Definition: saveload.h:389
SGT_OTTD
@ SGT_OTTD
OTTD savegame.
Definition: saveload.h:419
SLV_GROUP_REPLACE_WAGON_REMOVAL
@ SLV_GROUP_REPLACE_WAGON_REMOVAL
291 PR#7441 Per-group wagon removal flag.
Definition: saveload.h:329
SLV_137
@ SLV_137
137 18912
Definition: saveload.h:207
SLV_73
@ SLV_73
73 10903
Definition: saveload.h:130
SLV_60
@ SLV_60
60 9874
Definition: saveload.h:115
SLV_77
@ SLV_77
77 11172
Definition: saveload.h:135
SLE_VAR_STR
@ SLE_VAR_STR
string pointer
Definition: saveload.h:646
SLV_123
@ SLV_123
123 16909
Definition: saveload.h:190
SLV_32
@ SLV_32
32 6001
Definition: saveload.h:81
SLV_70
@ SLV_70
70 10541
Definition: saveload.h:127
SLV_GROUP_NUMBERS
@ SLV_GROUP_NUMBERS
336 PR#12297 Add per-company group numbers.
Definition: saveload.h:383
SLV_49
@ SLV_49
49 8969
Definition: saveload.h:101
SLV_86
@ SLV_86
86 12042
Definition: saveload.h:146
SaveLoadTable
std::span< const struct SaveLoad > SaveLoadTable
A table of SaveLoad entries.
Definition: saveload.h:507
SLV_191
@ SLV_191
191 26636 FS#6026 Fix disaster vehicle storage (No bump) 191 26646 FS#6041 Linkgraph - store location...
Definition: saveload.h:272
SLV_REMOVE_LOADED_AT_XY
@ SLV_REMOVE_LOADED_AT_XY
318 PR#11276 Remove loaded_at_xy variable from CargoPacket.
Definition: saveload.h:361
REF_TOWN
@ REF_TOWN
Load/save a reference to a town.
Definition: saveload.h:596
SL_REF
@ SL_REF
Save/load a reference.
Definition: saveload.h:689
SLV_63
@ SLV_63
63 9956
Definition: saveload.h:118
SLV_U64_TICK_COUNTER
@ SLV_U64_TICK_COUNTER
300 PR#10035 Make tick counter 64bit to avoid wrapping.
Definition: saveload.h:340
SLV_28
@ SLV_28
28 4987
Definition: saveload.h:76
SLV_NEWGRF_ROAD_STOPS
@ SLV_NEWGRF_ROAD_STOPS
303 PR#10144 NewGRF road stops.
Definition: saveload.h:343
SLV_11
@ SLV_11
11.0 2033 11.1 2041
Definition: saveload.h:53
ProcessAsyncSaveFinish
void ProcessAsyncSaveFinish()
Handle async save finishes.
Definition: saveload.cpp:376
REF_ROADSTOPS
@ REF_ROADSTOPS
Load/save a reference to a bus/truck stop.
Definition: saveload.h:598
SLV_30
@ SLV_30
30 5946
Definition: saveload.h:79
FileToSaveLoad::title
std::string title
Internal name of the game.
Definition: saveload.h:407
SL_STDSTR
@ SL_STDSTR
Save/load a std::string.
Definition: saveload.h:692
SLV_93
@ SLV_93
93 12648
Definition: saveload.h:154
SLV_SCRIPT_MEMLIMIT
@ SLV_SCRIPT_MEMLIMIT
215 PR#7516 Limit on AI/GS memory consumption.
Definition: saveload.h:302
SLE_FILE_END
@ SLE_FILE_END
Used to mark end-of-header in tables.
Definition: saveload.h:618
SLV_87
@ SLV_87
87 12129
Definition: saveload.h:147
ChunkHandlerRef
std::reference_wrapper< const ChunkHandler > ChunkHandlerRef
A reference to ChunkHandler.
Definition: saveload.h:501
SLV_99
@ SLV_99
99 13838
Definition: saveload.h:161
_sl_minor_version
uint8_t _sl_minor_version
the minor savegame version, DO NOT USE!
Definition: saveload.cpp:64
SLV_185
@ SLV_185
185 25620 Storybooks
Definition: saveload.h:265
SLV_113
@ SLV_113
113 15340
Definition: saveload.h:178
SLV_152
@ SLV_152
152 21171
Definition: saveload.h:225
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
SL_MIN_VERSION
@ SL_MIN_VERSION
First savegame version.
Definition: saveload.h:31
SLV_194
@ SLV_194
194 26881 v1.5
Definition: saveload.h:276
SaveLoadOperation
SaveLoadOperation
Operation performed on the file.
Definition: fileio_type.h:53
FileToSaveLoad::name
std::string name
Name of the file.
Definition: saveload.h:406
SL_ARR
@ SL_ARR
Save/load a fixed-size array of SL_VAR elements.
Definition: saveload.h:694
SLV_133
@ SLV_133
133 18674
Definition: saveload.h:202
_do_autosave
bool _do_autosave
are we doing an autosave at the moment?
Definition: saveload.cpp:66
GB
constexpr static debug_inline uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
Definition: bitmath_func.hpp:32
SLV_105
@ SLV_105
105 14803
Definition: saveload.h:169
SLV_189
@ SLV_189
189 26450 Hierarchical vehicle subgroups
Definition: saveload.h:269
SlWriteByte
void SlWriteByte(uint8_t b)
Wrapper for writing a byte to the dumper.
Definition: saveload.cpp:401
SLV_39
@ SLV_39
39 7269
Definition: saveload.h:89
SLF_ALLOW_NEWLINE
@ SLF_ALLOW_NEWLINE
Allow new lines in the strings.
Definition: saveload.h:681
SLV_EXTEND_VEHICLE_RANDOM
@ SLV_EXTEND_VEHICLE_RANDOM
310 PR#10701 Extend vehicle random bits.
Definition: saveload.h:352
SLV_80
@ SLV_80
80 11228
Definition: saveload.h:139
GenerateDefaultSaveName
std::string GenerateDefaultSaveName()
Get the default name for a savegame or screenshot.
Definition: saveload.cpp:3209
SLV_END_PATCHPACKS
@ SLV_END_PATCHPACKS
286 Last known patchpack to use a version just above ours.
Definition: saveload.h:322
SLV_51
@ SLV_51
51 8978
Definition: saveload.h:104
SLV_ECONOMY_DATE
@ SLV_ECONOMY_DATE
326 PR#10700 Split calendar and economy timers and dates.
Definition: saveload.h:371
SLV_83
@ SLV_83
83 11589
Definition: saveload.h:142
GetSaveLoadErrorMessage
StringID GetSaveLoadErrorMessage()
Return the description of the error.
Definition: saveload.cpp:2806
SLV_198
@ SLV_198
198 PR#6763 Switch town growth rate and counter to actual game ticks
Definition: saveload.h:281
SLV_184
@ SLV_184
184 25508 Unit localisation split
Definition: saveload.h:263
SLV_96
@ SLV_96
96 13226
Definition: saveload.h:158
SGT_TTDP1
@ SGT_TTDP1
TTDP savegame ( -//- ) (data at NW border)
Definition: saveload.h:417
FileToSaveLoad
Deals with the type of the savegame, independent of extension.
Definition: saveload.h:402
SLE_VAR_NULL
@ SLE_VAR_NULL
useful to write zeros in savegame.
Definition: saveload.h:645
SaveOrLoad
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.
Definition: saveload.cpp:3092
SlTableHeader
std::vector< SaveLoad > SlTableHeader(const SaveLoadTable &slt)
Save or Load a table header.
Definition: saveload.cpp:1750
SLV_154
@ SLV_154
154 21426
Definition: saveload.h:227
SLV_ROAD_TYPES
@ SLV_ROAD_TYPES
214 PR#6811 NewGRF road types.
Definition: saveload.h:300
SLV_67
@ SLV_67
67 10236
Definition: saveload.h:123
SaveLoadHandler::GetLoadDescription
SaveLoadTable GetLoadDescription() const
Get the description for how to load the chunk.
Definition: saveload.cpp:3288
SLV_47
@ SLV_47
47 8735
Definition: saveload.h:99
SLV_109
@ SLV_109
109 15075
Definition: saveload.h:173
SLV_187
@ SLV_187
187 25899 Linkgraph - restricted flows
Definition: saveload.h:267
ChunkHandler::type
ChunkType type
Type of the chunk.
Definition: saveload.h:457
SLV_138
@ SLV_138
138 18942 1.0.x
Definition: saveload.h:208
SLV_131
@ SLV_131
131 18481
Definition: saveload.h:200
SLV_155
@ SLV_155
155 21453
Definition: saveload.h:229
SaveLoadCompatTable
std::span< const struct SaveLoadCompat > SaveLoadCompatTable
A table of SaveLoadCompat entries.
Definition: saveload.h:510
SLV_192
@ SLV_192
192 26700 FS#6066 Fix saving of order backups
Definition: saveload.h:274
SlVarSize
constexpr size_t SlVarSize(VarType type)
Return expect size in bytes of a VarType.
Definition: saveload.h:772
SlGlobList
void SlGlobList(const SaveLoadTable &slt)
Save or Load (a list of) global variables.
Definition: saveload.cpp:1942
SAVEGAME_VERSION
const SaveLoadVersion SAVEGAME_VERSION
current savegame version
SLV_COMPANY_ALLOW_LIST
@ SLV_COMPANY_ALLOW_LIST
335 PR#12337 Saving of list of client keys that are allowed to join this company.
Definition: saveload.h:382
SLV_SERVE_NEUTRAL_INDUSTRIES
@ SLV_SERVE_NEUTRAL_INDUSTRIES
210 PR#7234 Company stations can serve industries with attached neutral stations.
Definition: saveload.h:296
SLV_8
@ SLV_8
8.0 1786
Definition: saveload.h:49
ChunkHandler
Handlers and description of chunk.
Definition: saveload.h:455
SaveLoad::conv
VarType conv
Type of the variable to be saved; this field combines both FileVarType and MemVarType.
Definition: saveload.h:710
SLV_36
@ SLV_36
36 6624
Definition: saveload.h:86
SLV_LAST_LOADING_TICK
@ SLV_LAST_LOADING_TICK
301 PR#9693 Store tick of last loading for vehicles.
Definition: saveload.h:341
SL_DEQUE
@ SL_DEQUE
Save/load a deque of SL_VAR elements.
Definition: saveload.h:695
SlSetStructListLength
void SlSetStructListLength(size_t length)
Set the length of this list.
Definition: saveload.cpp:1668
SLV_25
@ SLV_25
25 4259
Definition: saveload.h:73
SL_SAVEBYTE
@ SL_SAVEBYTE
Save (but not load) a byte.
Definition: saveload.h:700
SLV_37
@ SLV_37
37 7182
Definition: saveload.h:87
SLV_167
@ SLV_167
167 23504
Definition: saveload.h:243
SLV_143
@ SLV_143
143 20048
Definition: saveload.h:214
SaveLoadHandler
Handler for saving/loading an object to/from disk.
Definition: saveload.h:513
SLV_169
@ SLV_169
169 23816
Definition: saveload.h:245
SLV_EXTEND_PERSISTENT_STORAGE
@ SLV_EXTEND_PERSISTENT_STORAGE
201 PR#6885 Extend NewGRF persistent storages.
Definition: saveload.h:285
SlGetStructListLength
size_t SlGetStructListLength(size_t limit)
Get the length of this list; if it exceeds the limit, error out.
Definition: saveload.cpp:1684
SLV_174
@ SLV_174
174 23973 1.2.x
Definition: saveload.h:251
SaveLoadCompat::name
std::string name
Name of the field.
Definition: saveload.h:728
SLV_118
@ SLV_118
118 16129
Definition: saveload.h:184
SLE_FILE_TYPE_MASK
@ SLE_FILE_TYPE_MASK
Mask to get the file-type (and not any flags).
Definition: saveload.h:632
SLV_16
@ SLV_16
16.0 2817 16.1 3155
Definition: saveload.h:60
SLV_27
@ SLV_27
27 4757
Definition: saveload.h:75
SLV_SHIPS_STOP_IN_LOCKS
@ SLV_SHIPS_STOP_IN_LOCKS
206 PR#7150 Ship/lock movement changes.
Definition: saveload.h:291
SLV_6
@ SLV_6
6.0 1721 6.1 1768
Definition: saveload.h:46
SlIterateArray
int SlIterateArray()
Iterate through the elements of an array and read the whole thing.
Definition: saveload.cpp:658
SLV_CALENDAR_SUB_DATE_FRACT
@ SLV_CALENDAR_SUB_DATE_FRACT
328 PR#11428 Add sub_date_fract to measure calendar days.
Definition: saveload.h:373
SLV_ROAD_WAYPOINTS
@ SLV_ROAD_WAYPOINTS
338 PR#12572 Road waypoints
Definition: saveload.h:385
REF_STATION
@ REF_STATION
Load/save a reference to a station.
Definition: saveload.h:595
SLV_102
@ SLV_102
102 14332
Definition: saveload.h:165
SLV_69
@ SLV_69
69 10319
Definition: saveload.h:125
SLV_115
@ SLV_115
115 15695
Definition: saveload.h:181
AbstractFileType
AbstractFileType
The different abstract types of files that the system knows about.
Definition: fileio_type.h:16
SLV_CUSTOM_SUBSIDY_DURATION
@ SLV_CUSTOM_SUBSIDY_DURATION
292 PR#9081 Configurable subsidy duration.
Definition: saveload.h:330
SLV_WATER_REGIONS
@ SLV_WATER_REGIONS
324 PR#10543 Water Regions for ship pathfinder.
Definition: saveload.h:368
FileToSaveLoad::abstract_ftype
AbstractFileType abstract_ftype
Abstract type of file (scenario, heightmap, etc).
Definition: saveload.h:405
SLV_119
@ SLV_119
119 16242
Definition: saveload.h:185
SLV_VELOCITY_NAUTICAL
@ SLV_VELOCITY_NAUTICAL
305 PR#10594 Separation of land and nautical velocity (knots!)
Definition: saveload.h:346
SLV_89
@ SLV_89
89 12160
Definition: saveload.h:149
SlSetLength
void SlSetLength(size_t length)
Sets the length of either a RIFF object or the number of items in an array.
Definition: saveload.cpp:712
SLV_26
@ SLV_26
26 4466
Definition: saveload.h:74
SLV_114
@ SLV_114
114 15601
Definition: saveload.h:179
SLV_142
@ SLV_142
142 20003
Definition: saveload.h:213
SLV_188
@ SLV_188
188 26169 v1.4 FS#5831 Unify RV travel time
Definition: saveload.h:268
SLV_REPAIR_OBJECT_DOCKING_TILES
@ SLV_REPAIR_OBJECT_DOCKING_TILES
299 PR#9594 v12.0 Fixing issue with docking tiles overlapping objects.
Definition: saveload.h:338
GetVarMemType
constexpr VarType GetVarMemType(VarType type)
Get the NumberType of a setting.
Definition: saveload.h:741
SLV_172
@ SLV_172
172 23947
Definition: saveload.h:249
SLF_ALLOW_CONTROL
@ SLF_ALLOW_CONTROL
Allow control codes in the strings.
Definition: saveload.h:680
SlAutolength
void SlAutolength(AutolengthProc *proc, int arg)
Do something of which I have no idea what it is :P.
Definition: saveload.cpp:1952
SLE_FILE_HAS_LENGTH_FIELD
@ SLE_FILE_HAS_LENGTH_FIELD
Bit stored in savegame to indicate field has a length field for each entry.
Definition: saveload.h:633
SLV_TIMETABLE_TICKS_TYPE
@ SLV_TIMETABLE_TICKS_TYPE
323 PR#11435 Convert timetable current order time to ticks.
Definition: saveload.h:367
SLV_180
@ SLV_180
180 24998 1.3.x
Definition: saveload.h:259
SLV_14
@ SLV_14
14.0 2441
Definition: saveload.h:57
SLV_124
@ SLV_124
124 16993
Definition: saveload.h:191
SavegameType
SavegameType
Types of save games.
Definition: saveload.h:415
SLV_98
@ SLV_98
98 13375
Definition: saveload.h:160
SLV_159
@ SLV_159
159 21962
Definition: saveload.h:233
IsNumericType
constexpr bool IsNumericType(VarType conv)
Check if the given saveload type is a numeric type.
Definition: saveload.h:762
SLV_125
@ SLV_125
125 17113
Definition: saveload.h:193
SLV_162
@ SLV_162
162 22713
Definition: saveload.h:237
SLV_SHIP_PATH_CACHE
@ SLV_SHIP_PATH_CACHE
203 PR#7072 Add path cache for ships
Definition: saveload.h:287
SLV_41
@ SLV_41
41 7348 0.5.x
Definition: saveload.h:92
SLV_148
@ SLV_148
148 20659
Definition: saveload.h:220
CH_TYPE_MASK
@ CH_TYPE_MASK
All ChunkType values have to be within this mask.
Definition: saveload.h:450
ReadValue
int64_t ReadValue(const void *ptr, VarType conv)
Return a signed-long version of the value of a setting.
Definition: saveload.cpp:793
ChunkHandler::Save
virtual void Save() const
Save the chunk.
Definition: saveload.h:467
CH_READONLY
@ CH_READONLY
Chunk is never saved.
Definition: saveload.h:451
SGT_TTO
@ SGT_TTO
TTO savegame.
Definition: saveload.h:420
SLV_CONSISTENT_PARTIAL_Z
@ SLV_CONSISTENT_PARTIAL_Z
306 PR#10570 Conversion from an inconsistent partial Z calculation for slopes, to one that is (more) ...
Definition: saveload.h:347
SLV_56
@ SLV_56
56 9667
Definition: saveload.h:110
SLV_85
@ SLV_85
85 11874
Definition: saveload.h:145
SetSaveLoadError
void SetSaveLoadError(StringID str)
Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friend...
Definition: saveload.cpp:2794
SLV_EXTEND_INDUSTRY_CARGO_SLOTS
@ SLV_EXTEND_INDUSTRY_CARGO_SLOTS
202 PR#6867 Increase industry cargo slots to 16 in, 16 out
Definition: saveload.h:286
SLV_171
@ SLV_171
171 23835
Definition: saveload.h:248
SLV_111
@ SLV_111
111 15190
Definition: saveload.h:176
SaveloadCrashWithMissingNewGRFs
bool SaveloadCrashWithMissingNewGRFs()
Did loading the savegame cause a crash? If so, were NewGRFs missing?
Definition: afterload.cpp:351
SaveLoadType
SaveLoadType
Type of data saved.
Definition: saveload.h:687
SLV_135
@ SLV_135
135 18719
Definition: saveload.h:205
WriteValue
void WriteValue(void *ptr, VarType conv, int64_t val)
Write the value of a setting.
Definition: saveload.cpp:817
SLV_TIMETABLE_START_TICKS
@ SLV_TIMETABLE_START_TICKS
321 PR#11468 Convert timetable start from a date to ticks.
Definition: saveload.h:365
SLV_132
@ SLV_132
132 18522
Definition: saveload.h:201
SLV_166
@ SLV_166
166 23415
Definition: saveload.h:242
SLV_81
@ SLV_81
81 11244
Definition: saveload.h:140
SaveLoad::extra_data
size_t extra_data
Extra data for the callback proc.
Definition: saveload.h:715
SLV_LINKGRAPH_TRAVEL_TIME
@ SLV_LINKGRAPH_TRAVEL_TIME
297 PR#9457 v12.0-RC1 Store travel time in the linkgraph.
Definition: saveload.h:336
SLV_150
@ SLV_150
150 20857
Definition: saveload.h:223
SLV_STATION_RATING_CHEAT
@ SLV_STATION_RATING_CHEAT
320 PR#11346 Add cheat to fix station ratings at 100%.
Definition: saveload.h:364
SLV_58
@ SLV_58
58 9762
Definition: saveload.h:112
SL_REINIT
@ SL_REINIT
error that was caught in the middle of updating game state, need to clear it. (can only happen during...
Definition: saveload.h:398
SaveLoad::cmd
SaveLoadType cmd
The action to take with the saved/loaded type, All types need different action.
Definition: saveload.h:709
FiosItem
Deals with finding savegames.
Definition: fios.h:79
SLRefType
SLRefType
Type of reference (SLE_REF, SLE_CONDREF).
Definition: saveload.h:592
SLV_PERIODS_IN_TRANSIT_RENAME
@ SLV_PERIODS_IN_TRANSIT_RENAME
316 PR#11112 Rename days in transit to (cargo) periods in transit.
Definition: saveload.h:359
SLV_GS_INDUSTRY_CONTROL
@ SLV_GS_INDUSTRY_CONTROL
287 PR#7912 and PR#8115 GS industry control.
Definition: saveload.h:324
SLV_MULTITILE_DOCKS
@ SLV_MULTITILE_DOCKS
216 PR#7380 Multiple docks per station.
Definition: saveload.h:303
GetVariableAddress
void * GetVariableAddress(const void *object, const SaveLoad &sld)
Get the address of the variable.
Definition: saveload.h:1272
SLV_55
@ SLV_55
55 9638
Definition: saveload.h:109
SLV_91
@ SLV_91
91 12347
Definition: saveload.h:152
SLV_VEHICLE_ECONOMY_AGE
@ SLV_VEHICLE_ECONOMY_AGE
334 PR#12141 v14.0 Add vehicle age in economy year, for profit stats minimum age
Definition: saveload.h:380
SLV_182
@ SLV_182
182 25115 FS#5492, r25259, r25296 Goal status
Definition: saveload.h:261
SLV_EXTEND_RAILTYPES
@ SLV_EXTEND_RAILTYPES
200 PR#6805 Extend railtypes to 64, adding uint16_t to map array.
Definition: saveload.h:284
SLV_163
@ SLV_163
163 22767
Definition: saveload.h:238
SLV_INDUSTRY_TEXT
@ SLV_INDUSTRY_TEXT
289 PR#8576 v1.11.0-RC1 Additional GS text for industries.
Definition: saveload.h:326
SLV_165
@ SLV_165
165 23304
Definition: saveload.h:241
IsSavegameVersionBeforeOrAt
bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major)
Checks whether the savegame is below or at major.
Definition: saveload.h:1248
SLV_SAVELOAD_LIST_LENGTH
@ SLV_SAVELOAD_LIST_LENGTH
293 PR#9374 Consistency in list length with SL_STRUCT / SL_STRUCTLIST / SL_DEQUE / SL_REFLIST.
Definition: saveload.h:331
SLE_FILE_STRINGID
@ SLE_FILE_STRINGID
StringID offset into strings-array.
Definition: saveload.h:627
SLV_65
@ SLV_65
65 10210
Definition: saveload.h:121
REF_STORAGE
@ REF_STORAGE
Load/save a reference to a persistent storage.
Definition: saveload.h:602
SLV_64
@ SLV_64
64 10006
Definition: saveload.h:119
SLV_53
@ SLV_53
53 9316
Definition: saveload.h:106
SLV_31
@ SLV_31
31 5999
Definition: saveload.h:80
SLV_146
@ SLV_146
146 20446
Definition: saveload.h:218
SLV_116
@ SLV_116
116 15893 0.7.x
Definition: saveload.h:182
SLV_ROAD_STOP_TILE_DATA
@ SLV_ROAD_STOP_TILE_DATA
340 PR#12883 Move storage of road stop tile data, also save for road waypoints.
Definition: saveload.h:388
SLV_RIFF_TO_ARRAY
@ SLV_RIFF_TO_ARRAY
294 PR#9375 Changed many CH_RIFF chunks to CH_ARRAY chunks.
Definition: saveload.h:332
SL_MAX_VERSION
@ SL_MAX_VERSION
Highest possible saveload version.
Definition: saveload.h:391
REF_ENGINE_RENEWS
@ REF_ENGINE_RENEWS
Load/save a reference to an engine renewal (autoreplace).
Definition: saveload.h:599
SL_VECTOR
@ SL_VECTOR
Save/load a vector of SL_VAR elements.
Definition: saveload.h:696
SLV_VEH_MOTION_COUNTER
@ SLV_VEH_MOTION_COUNTER
288 PR#8591 Desync safe motion counter
Definition: saveload.h:325
SLV_164
@ SLV_164
164 23290
Definition: saveload.h:239
REF_VEHICLE
@ REF_VEHICLE
Load/save a reference to a vehicle.
Definition: saveload.h:594
SLV_54
@ SLV_54
54 9613
Definition: saveload.h:107
SLV_ECONOMY_MODE_TIMEKEEPING_UNITS
@ SLV_ECONOMY_MODE_TIMEKEEPING_UNITS
327 PR#11341 Mode to display economy measurements in wallclock units.
Definition: saveload.h:372
SLV_4
@ 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
Definition: saveload.h:37
SLV_178
@ SLV_178
178 24789
Definition: saveload.h:256
REF_CARGO_PACKET
@ REF_CARGO_PACKET
Load/save a reference to a cargo packet.
Definition: saveload.h:600
SLV_103
@ SLV_103
103 14598
Definition: saveload.h:166
SLV_92
@ SLV_92
92 12381 0.6.x
Definition: saveload.h:153
SLV_DISASTER_VEH_STATE
@ SLV_DISASTER_VEH_STATE
312 PR#10798 Explicit storage of disaster vehicle state.
Definition: saveload.h:354
_file_to_saveload
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
Definition: saveload.cpp:60
REF_VEHICLE_OLD
@ REF_VEHICLE_OLD
Load/save an old-style reference to a vehicle (for pre-4.4 savegames).
Definition: saveload.h:597
SLV_29
@ SLV_29
29 5070
Definition: saveload.h:77
SLV_175
@ SLV_175
175 24136
Definition: saveload.h:253
SLV_66
@ SLV_66
66 10211
Definition: saveload.h:122
ChunkHandler::Load
virtual void Load() const =0
Load the chunk.
_savegame_format
std::string _savegame_format
how to compress savegames
Definition: saveload.cpp:65
DoExitSave
void DoExitSave()
Do a save when exiting the game (_settings_client.gui.autosave_on_exit)
Definition: saveload.cpp:3201
SLV_170
@ SLV_170
170 23826
Definition: saveload.h:247
ChunkHandler::FixPointers
virtual void FixPointers() const
Fix the pointers.
Definition: saveload.h:481
SaveLoad::handler
std::shared_ptr< SaveLoadHandler > handler
Custom handler for Save/Load procs.
Definition: saveload.h:716
SLV_181
@ SLV_181
181 25012
Definition: saveload.h:260
SLV_110
@ SLV_110
110 15148
Definition: saveload.h:175
SLV_173
@ SLV_173
173 23967 1.2.0-RC1
Definition: saveload.h:250
SLV_GROUP_LIVERIES
@ SLV_GROUP_LIVERIES
205 PR#7108 Livery storage change and group liveries.
Definition: saveload.h:290
SLV_84
@ SLV_84
84 11822
Definition: saveload.h:143
SLV_INCREASE_STATION_TYPE_FIELD_SIZE
@ SLV_INCREASE_STATION_TYPE_FIELD_SIZE
337 PR#12572 Increase size of StationType field in map array
Definition: saveload.h:384
SaveLoadCompat::version_to
SaveLoadVersion version_to
Save/load the variable before this savegame version.
Definition: saveload.h:732
REF_LINK_GRAPH_JOB
@ REF_LINK_GRAPH_JOB
Load/save a reference to a link graph job.
Definition: saveload.h:604
SLV_120
@ SLV_120
120 16439
Definition: saveload.h:187
SlIsObjectCurrentlyValid
bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to)
Checks if some version from/to combination falls within the range of the active savegame version.
Definition: saveload.h:1261
SLV_193
@ SLV_193
193 26802
Definition: saveload.h:275
SLV_48
@ SLV_48
48 8935
Definition: saveload.h:100
SaveLoadHandler::GetDescription
virtual SaveLoadTable GetDescription() const =0
Get the description of the fields in the savegame.
SaveLoadHandler::FixPointers
virtual void FixPointers([[maybe_unused]] void *object) const
A post-load callback to fix SL_REF integers into pointers.
Definition: saveload.h:541
SGT_TTD
@ SGT_TTD
TTD savegame (can be detected incorrectly)
Definition: saveload.h:416
SLV_134
@ SLV_134
134 18703
Definition: saveload.h:203
SLV_46
@ SLV_46
46 8705
Definition: saveload.h:98
SLV_94
@ SLV_94
94 12816
Definition: saveload.h:155
SLV_35
@ SLV_35
35 6602
Definition: saveload.h:85
SLV_75
@ SLV_75
75 11107
Definition: saveload.h:133
SLV_45
@ SLV_45
45 8501
Definition: saveload.h:97
SLV_34
@ SLV_34
34 6455
Definition: saveload.h:83
SLV_10
@ SLV_10
10.0 2030
Definition: saveload.h:52
SLV_71
@ SLV_71
71 10567
Definition: saveload.h:128
SaveLoadCompat
SaveLoad information for backwards compatibility.
Definition: saveload.h:727
DoAutoOrNetsave
void DoAutoOrNetsave(FiosNumberedSaveName &counter)
Create an autosave or netsave.
Definition: saveload.cpp:3183
SaveWithFilter
SaveOrLoadResult SaveWithFilter(std::shared_ptr< SaveFilter > writer, bool threaded)
Save the game using a (writer) filter.
Definition: saveload.cpp:2912
FiosNumberedSaveName
A savegame name automatically numbered.
Definition: fios.h:130
REF_ORDERLIST
@ REF_ORDERLIST
Load/save a reference to an orderlist.
Definition: saveload.h:601
SLV_ROADVEH_PATH_CACHE
@ SLV_ROADVEH_PATH_CACHE
211 PR#7261 Add path cache for road vehicles.
Definition: saveload.h:297
DetailedFileType
DetailedFileType
Kinds of files in each AbstractFileType.
Definition: fileio_type.h:29
SaveLoadCompat::null_length
uint16_t null_length
Length of the NULL field.
Definition: saveload.h:730
SLV_FIX_CARGO_MONITOR
@ SLV_FIX_CARGO_MONITOR
207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes.
Definition: saveload.h:292
SLV_3
@ SLV_3
3.x lost
Definition: saveload.h:36
SLV_CARGO_TRAVELLED
@ SLV_CARGO_TRAVELLED
319 PR#11283 CargoPacket now tracks how far it travelled inside a vehicle.
Definition: saveload.h:362
SLV_SCRIPT_INT64
@ SLV_SCRIPT_INT64
296 PR#9415 SQInteger is 64bit but was saved as 32bit.
Definition: saveload.h:335
SLV_59
@ SLV_59
59 9779
Definition: saveload.h:113
SLV_24
@ SLV_24
24 4150
Definition: saveload.h:71
SLV_START_PATCHPACKS
@ SLV_START_PATCHPACKS
220 First known patchpack to use a version just above ours.
Definition: saveload.h:321
VarTypes
VarTypes
VarTypes is the general bitmasked magic type that tells us certain characteristics about the variable...
Definition: saveload.h:615
SLV_106
@ SLV_106
106 14919
Definition: saveload.h:170
FileToSaveLoad::Set
void Set(const FiosItem &item)
Set the title of the file.
Definition: saveload.cpp:3281
SLV_149
@ SLV_149
149 20832
Definition: saveload.h:221
SLV_50
@ SLV_50
50 8973
Definition: saveload.h:103
SLV_107
@ SLV_107
107 15027
Definition: saveload.h:171
SLV_1
@ SLV_1
1.0 0.1.x, 0.2.x
Definition: saveload.h:33
SLV_78
@ SLV_78
78 11176
Definition: saveload.h:136
SLV_SHIP_ACCELERATION
@ SLV_SHIP_ACCELERATION
329 PR#10734 Start using Vehicle's acceleration field for ships too.
Definition: saveload.h:374
DefaultSaveLoadHandler::GetDescription
SaveLoadTable GetDescription() const override
Get the description of the fields in the savegame.
Definition: saveload.h:575
SLV_157
@ SLV_157
157 21862
Definition: saveload.h:231
SLV_SHIP_CURVE_PENALTY
@ SLV_SHIP_CURVE_PENALTY
209 PR#7289 Configurable ship curve penalties.
Definition: saveload.h:294
SLV_97
@ SLV_97
97 13256
Definition: saveload.h:159
SLV_139
@ SLV_139
139 19346
Definition: saveload.h:209
SLV_128
@ SLV_128
128 18281
Definition: saveload.h:196
SLV_90
@ SLV_90
90 12293
Definition: saveload.h:151
SLV_136
@ SLV_136
136 18764
Definition: saveload.h:206
SLV_140
@ SLV_140
140 19382
Definition: saveload.h:211
SLV_TOWN_CARGOGEN
@ SLV_TOWN_CARGOGEN
208 PR#6965 New algorithms for town building cargo generation.
Definition: saveload.h:293
SLV_144
@ SLV_144
144 20334
Definition: saveload.h:215
SLV_2
@ SLV_2
2.0 0.3.0 2.1 0.3.1, 0.3.2
Definition: saveload.h:34
SLV_23
@ SLV_23
23 3915
Definition: saveload.h:70
SLV_21
@ SLV_21
21 3472 0.4.x
Definition: saveload.h:68
SLV_42
@ SLV_42
42 7573
Definition: saveload.h:93
SLV_43
@ SLV_43
43 7642
Definition: saveload.h:94
SLV_108
@ SLV_108
108 15045
Definition: saveload.h:172
DefaultSaveLoadHandler::GetCompatDescription
SaveLoadCompatTable GetCompatDescription() const override
Get the pre-header description of the fields in the savegame.
Definition: saveload.h:576
SLV_22
@ SLV_22
22 3726
Definition: saveload.h:69
SLV_18
@ SLV_18
18 3227
Definition: saveload.h:64
SLV_177
@ SLV_177
177 24619
Definition: saveload.h:255
ChunkHandlerTable
std::span< const ChunkHandlerRef > ChunkHandlerTable
A table of ChunkHandler entries.
Definition: saveload.h:504
SLV_62
@ SLV_62
62 9905
Definition: saveload.h:117
SlSkipBytes
void SlSkipBytes(size_t length)
Read in bytes from the file/data structure but don't do anything with them, discarding them in effect...
Definition: saveload.h:1316
Subdirectory
Subdirectory
The different kinds of subdirectories OpenTTD uses.
Definition: fileio_type.h:115
SLV_13
@ SLV_13
13.1 2080 0.4.0, 0.4.0.1
Definition: saveload.h:56
SLV_82
@ SLV_82
82 11410
Definition: saveload.h:141
SLV_7
@ SLV_7
7.0 1770
Definition: saveload.h:48
SaveLoad::version_from
SaveLoadVersion version_from
Save/load the variable starting from this savegame version.
Definition: saveload.h:712
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
SaveLoadHandler::LoadCheck
virtual void LoadCheck([[maybe_unused]] void *object) const
Similar to load, but used only to validate savegames.
Definition: saveload.h:535
SLV_153
@ SLV_153
153 21263
Definition: saveload.h:226
SlReadByte
uint8_t SlReadByte()
Wrapper for reading a byte from the buffer.
Definition: saveload.cpp:392
SaveOrLoadResult
SaveOrLoadResult
Save or load result codes.
Definition: saveload.h:395
SLV_183
@ SLV_183
183 25363 Cargodist
Definition: saveload.h:262
SLV_40
@ SLV_40
40 7326
Definition: saveload.h:91
SLV_AI_START_DATE
@ SLV_AI_START_DATE
309 PR#10653 Removal of individual AI start dates and added a generic one.
Definition: saveload.h:350
SLV_147
@ SLV_147
147 20621
Definition: saveload.h:219
FiosType
FiosType
Elements of a file system that are recognized.
Definition: fileio_type.h:73
SLV_STRING_GAMELOG
@ SLV_STRING_GAMELOG
314 PR#10801 Use std::string in gamelog.
Definition: saveload.h:356
SLE_VAR_STRQ
@ SLE_VAR_STRQ
string pointer enclosed in quotes
Definition: saveload.h:647
SaveLoadCompat::null_type
VarTypes null_type
The type associated with the NULL field; defaults to SLE_FILE_U8 to just count bytes.
Definition: saveload.h:729
ChunkType
ChunkType
Type of a chunk.
Definition: saveload.h:443
SLV_SHIP_ROTATION
@ SLV_SHIP_ROTATION
204 PR#7065 Add extra rotation stages for ships.
Definition: saveload.h:288
SLV_130
@ SLV_130
130 18404
Definition: saveload.h:199
SLV_121
@ SLV_121
121 16694
Definition: saveload.h:188
SlGetFieldLength
size_t SlGetFieldLength()
Get the length of the current object.
Definition: saveload.cpp:781
REF_LINK_GRAPH
@ REF_LINK_GRAPH
Load/save a reference to a link graph.
Definition: saveload.h:603
SLV_REMOVE_TOWN_CARGO_CACHE
@ SLV_REMOVE_TOWN_CARGO_CACHE
219 PR#8258 Remove town cargo acceptance and production caches.
Definition: saveload.h:306
SLV_179
@ SLV_179
179 24810
Definition: saveload.h:257
SLV_104
@ SLV_104
104 14735
Definition: saveload.h:167
SLV_145
@ SLV_145
145 20376
Definition: saveload.h:217
SLV_127
@ SLV_127
127 17439
Definition: saveload.h:195
SLV_ENDING_YEAR
@ SLV_ENDING_YEAR
218 PR#7747 v1.10 Configurable ending year.
Definition: saveload.h:305
SLV_197
@ SLV_197
197 27978 v1.8
Definition: saveload.h:280
SLV_9
@ SLV_9
9.0 1909
Definition: saveload.h:50
LoadWithFilter
SaveOrLoadResult LoadWithFilter(std::shared_ptr< LoadFilter > reader)
Load the game using a (reader) filter.
Definition: saveload.cpp:3072
ChunkHandler::id
uint32_t id
Unique ID (4 letters).
Definition: saveload.h:456
SLV_195
@ SLV_195
195 27572 v1.6.1
Definition: saveload.h:278
SLV_151
@ SLV_151
151 20918
Definition: saveload.h:224
SLV_WATER_REGION_EVAL_SIMPLIFIED
@ SLV_WATER_REGION_EVAL_SIMPLIFIED
325 PR#11750 Simplified Water Region evaluation.
Definition: saveload.h:370
SLV_DOCK_DOCKINGTILES
@ SLV_DOCK_DOCKINGTILES
298 PR#9578 All tiles around docks may be docking tiles.
Definition: saveload.h:337
SLV_15
@ SLV_15
15.0 2499
Definition: saveload.h:59
SLV_12
@ SLV_12
12.1 2046
Definition: saveload.h:55
SLV_LINKGRAPH_SECONDS
@ SLV_LINKGRAPH_SECONDS
308 PR#10610 Store linkgraph update intervals in seconds instead of days.
Definition: saveload.h:349
SLV_20
@ SLV_20
20 3403
Definition: saveload.h:67
SLV_EXTEND_ENTITY_MAPPING
@ SLV_EXTEND_ENTITY_MAPPING
311 PR#10672 Extend entity mapping range.
Definition: saveload.h:353
SLV_NEWGRF_LAST_SERVICE
@ SLV_NEWGRF_LAST_SERVICE
317 PR#11124 Added stable date_of_last_service to avoid NewGRF trouble.
Definition: saveload.h:360
SlCopy
void SlCopy(void *object, size_t length, VarType conv)
Copy a list of SL_VARs to/from a savegame.
Definition: saveload.cpp:1029
SLV_EXTEND_CARGOTYPES
@ SLV_EXTEND_CARGOTYPES
199 PR#6802 Extend cargotypes to 64
Definition: saveload.h:282
SLV_68
@ SLV_68
68 10266
Definition: saveload.h:124
SLV_95
@ SLV_95
95 12924
Definition: saveload.h:157
SLV_161
@ SLV_161
161 22567
Definition: saveload.h:236
SLV_MULTITRACK_LEVEL_CROSSINGS
@ SLV_MULTITRACK_LEVEL_CROSSINGS
302 PR#9931 v13.0 Multi-track level crossings.
Definition: saveload.h:342
SLV_17
@ SLV_17
17.0 3212 17.1 3218
Definition: saveload.h:62
SLV_129
@ SLV_129
129 18292
Definition: saveload.h:197
SL_REFLIST
@ SL_REFLIST
Save/load a list of SL_REF elements.
Definition: saveload.h:697
SLV_176
@ SLV_176
176 24446
Definition: saveload.h:254
SlCompatTableHeader
std::vector< SaveLoad > SlCompatTableHeader(const SaveLoadTable &slt, const SaveLoadCompatTable &slct)
Load a table header in a savegame compatible way.
Definition: saveload.cpp:1888
SLV_156
@ SLV_156
156 21728
Definition: saveload.h:230
SLV_SAVEGAME_ID
@ SLV_SAVEGAME_ID
313 PR#10719 Add an unique ID to every savegame (used to deduplicate surveys).
Definition: saveload.h:355
SLV_76
@ SLV_76
76 11139
Definition: saveload.h:134
SL_ERROR
@ SL_ERROR
error that was caught before internal structures were modified
Definition: saveload.h:397
FileToSaveLoad::detail_ftype
DetailedFileType detail_ftype
Concrete file type (PNG, BMP, old save, etc).
Definition: saveload.h:404
SLV_126
@ SLV_126
126 17433
Definition: saveload.h:194
SaveLoad::length
uint16_t length
(Conditional) length of the variable (eg. arrays) (max array size is 65536 elements).
Definition: saveload.h:711
SLV_33
@ SLV_33
33 6440
Definition: saveload.h:82
SLV_19
@ SLV_19
19 3396
Definition: saveload.h:65
SLV_TREES_WATER_CLASS
@ SLV_TREES_WATER_CLASS
213 PR#7405 WaterClass update for tree tiles.
Definition: saveload.h:299
SaveLoad::address_proc
SaveLoadAddrProc * address_proc
Callback proc the get the actual variable address in memory.
Definition: saveload.h:714
GetSaveLoadErrorType
StringID GetSaveLoadErrorType()
Return the appropriate initial string for an error depending on whether we are saving or loading.
Definition: saveload.cpp:2800
SLV_SCRIPT_RANDOMIZER
@ SLV_SCRIPT_RANDOMIZER
333 PR#12063 v14.0-RC1 Save script randomizers.
Definition: saveload.h:379
SLV_61
@ SLV_61
61 9892
Definition: saveload.h:116
SaveLoad::name
std::string name
Name of this field (optional, used for tables).
Definition: saveload.h:708
IsSavegameVersionBefore
bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor=0)
Checks whether the savegame is below major.
Definition: saveload.h:1234
ChunkHandler::LoadCheck
virtual void LoadCheck(size_t len=0) const
Load the chunk for game preview.
Definition: saveload.cpp:1976
SaveLoadHandler::GetCompatDescription
virtual SaveLoadCompatTable GetCompatDescription() const =0
Get the pre-header description of the fields in the savegame.
SLV_TRADING_AGE
@ SLV_TRADING_AGE
217 PR#7780 Configurable company trading age.
Definition: saveload.h:304
SLV_MORE_CARGO_AGE
@ SLV_MORE_CARGO_AGE
307 PR#10596 Track cargo age for a longer period.
Definition: saveload.h:348
SLV_160
@ SLV_160
160 21974 1.1.x
Definition: saveload.h:235
SL_STRUCTLIST
@ SL_STRUCTLIST
Save/load a list of structs.
Definition: saveload.h:698
SLV_190
@ SLV_190
190 26547 Separate order travel and wait times
Definition: saveload.h:271
SLV_LINKGRAPH_EDGES
@ SLV_LINKGRAPH_EDGES
304 PR#10314 Explicitly store link graph edges destination, PR#10471 int64_t instead of uint64_t leag...
Definition: saveload.h:344
FileToSaveLoad::SetMode
void SetMode(FiosType ft)
Set the mode and file type of the file to save or load based on the type of file entry at the file sy...
Definition: saveload.cpp:3252
SaveLoad
SaveLoad type struct.
Definition: saveload.h:707
SLV_168
@ SLV_168
168 23637
Definition: saveload.h:244
SLV_112
@ SLV_112
112 15290
Definition: saveload.h:177
SLV_101
@ SLV_101
101 14233
Definition: saveload.h:164
SLV_57
@ SLV_57
57 9691
Definition: saveload.h:111
SLV_TABLE_CHUNKS
@ SLV_TABLE_CHUNKS
295 PR#9322 Introduction of CH_TABLE and CH_SPARSE_TABLE.
Definition: saveload.h:334
SLV_100
@ SLV_100
100 13952
Definition: saveload.h:163
SL_OK
@ SL_OK
completed successfully
Definition: saveload.h:396
SLV_COMPANY_INAUGURATED_PERIOD
@ SLV_COMPANY_INAUGURATED_PERIOD
339 PR#12798 Companies show the period inaugurated in wallclock mode.
Definition: saveload.h:386
SLV_88
@ SLV_88
88 12134
Definition: saveload.h:148
SLV_72
@ SLV_72
72 10601
Definition: saveload.h:129
SaveLoadCompat::version_from
SaveLoadVersion version_from
Save/load the variable starting from this savegame version.
Definition: saveload.h:731
SGT_TTDP2
@ SGT_TTDP2
TTDP savegame in new format (data at SE border)
Definition: saveload.h:418
SLV_DEPOT_UNBUNCHING
@ SLV_DEPOT_UNBUNCHING
331 PR#11945 Allow unbunching shared order vehicles at a depot.
Definition: saveload.h:377
SLV_52
@ SLV_52
52 9066
Definition: saveload.h:105
SLV_MAX_LOAN_FOR_COMPANY
@ SLV_MAX_LOAN_FOR_COMPANY
330 PR#11224 Separate max loan for each company.
Definition: saveload.h:376
_sl_version
SaveLoadVersion _sl_version
the major savegame version identifier
Definition: saveload.cpp:63
SlObject
void SlObject(void *object, const SaveLoadTable &slt)
Main SaveLoad function.
Definition: saveload.cpp:1697
SLV_141
@ SLV_141
141 19799
Definition: saveload.h:212
SLE_VAR_NAME
@ SLE_VAR_NAME
old custom name to be converted to a char pointer
Definition: saveload.h:648
SLV_44
@ SLV_44
44 8144
Definition: saveload.h:95
SLV_122
@ SLV_122
122 16855
Definition: saveload.h:189
SL_STRUCT
@ SL_STRUCT
Save/load a struct.
Definition: saveload.h:690
SLV_158
@ SLV_158
158 21933
Definition: saveload.h:232
SlCalcObjLength
size_t SlCalcObjLength(const void *object, const SaveLoadTable &slt)
Calculate the size of an object.
Definition: saveload.cpp:1506
SLV_79
@ SLV_79
79 11188
Definition: saveload.h:137
SLV_MAPGEN_SETTINGS_REVAMP
@ SLV_MAPGEN_SETTINGS_REVAMP
290 PR#8891 v1.11 Revamp of some mapgen settings (snow coverage, desert coverage, heightmap height,...
Definition: saveload.h:328
SLV_INDUSTRY_CARGO_REORGANISE
@ SLV_INDUSTRY_CARGO_REORGANISE
315 PR#10853 Industry accepts/produced data reorganised.
Definition: saveload.h:358
FileToSaveLoad::file_op
SaveLoadOperation file_op
File operation to perform.
Definition: saveload.h:403
SLV_117
@ SLV_117
117 16037
Definition: saveload.h:183
SLV_196
@ SLV_196
196 27778 v1.7
Definition: saveload.h:279
GetVarFileType
constexpr VarType GetVarFileType(VarType type)
Get the FileType of a setting.
Definition: saveload.h:752
SaveLoadHandler::Load
virtual void Load([[maybe_unused]] void *object) const
Load the object from disk.
Definition: saveload.h:529
SLV_TIMETABLE_START_TICKS_FIX
@ SLV_TIMETABLE_START_TICKS_FIX
322 PR#11557 Fix for missing convert timetable start from a date to ticks.
Definition: saveload.h:366
SLV_186
@ SLV_186
186 25833 Objects storage
Definition: saveload.h:266
SLV_AI_LOCAL_CONFIG
@ SLV_AI_LOCAL_CONFIG
332 PR#12003 Config of running AI is stored inside Company.
Definition: saveload.h:378