OpenTTD Source
20240919-master-gdf0233f4c2
|
Go to the documentation of this file.
10 #include "../stdafx.h"
15 #include "../gamelog_internal.h"
17 #include "../string_func.h"
19 #include "../safeguards.h"
24 inline static const SaveLoad description[] = {
42 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
47 static const size_t GAMELOG_REVISION_LENGTH = 15;
48 static char revision_text[GAMELOG_REVISION_LENGTH];
50 inline static const SaveLoad description[] = {
71 static_cast<LoggedChangeRevision *
>(lc)->text =
StrMakeValid(std::string_view(std::begin(SlGamelogRevision::revision_text), std::end(SlGamelogRevision::revision_text)));
75 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
78 char SlGamelogRevision::revision_text[GAMELOG_REVISION_LENGTH];
82 inline static const SaveLoad description[] = {
100 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
105 inline static const SaveLoad description[] = {
124 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
129 inline static const SaveLoad description[] = {
147 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
152 inline static const SaveLoad description[] = {
169 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
174 inline static const SaveLoad description[] = {
192 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
197 inline static const SaveLoad description[] = {
214 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
219 inline static const SaveLoad description[] = {
237 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
242 inline static const SaveLoad description[] = {
261 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
264 static bool _is_emergency_save =
true;
269 inline static const SaveLoad description[] = {
278 _is_emergency_save =
true;
289 void LoadCheck(
LoggedChange *lc)
const override { this->Load(lc); }
295 case GLCT_MODE:
return std::make_unique<LoggedChangeMode>();
296 case GLCT_REVISION:
return std::make_unique<LoggedChangeRevision>();
297 case GLCT_OLDVER:
return std::make_unique<LoggedChangeOldVersion>();
298 case GLCT_SETTING:
return std::make_unique<LoggedChangeSettingChanged>();
299 case GLCT_GRFADD:
return std::make_unique<LoggedChangeGRFAdd>();
300 case GLCT_GRFREM:
return std::make_unique<LoggedChangeGRFRemoved>();
301 case GLCT_GRFCOMPAT:
return std::make_unique<LoggedChangeGRFChanged>();
302 case GLCT_GRFPARAM:
return std::make_unique<LoggedChangeGRFParameterChanged>();
303 case GLCT_GRFMOVE:
return std::make_unique<LoggedChangeGRFMoved>();
304 case GLCT_GRFBUG:
return std::make_unique<LoggedChangeGRFBug>();
305 case GLCT_EMERGENCY:
return std::make_unique<LoggedChangeEmergencySave>();
315 inline static const SaveLoad description[] = {
335 for (
auto &lc : la->
change) {
337 SlObject(lc.get(), this->GetDescription());
343 std::unique_ptr<LoggedChange> lc = MakeLoggedChange(type);
344 SlObject(lc.get(), this->GetLoadDescription());
345 la->
change.push_back(std::move(lc));
360 la->
change.reserve(length);
362 for (
size_t i = 0; i < length; i++) {
367 void LoadCheck(
LoggedAction *la)
const override { this->Load(la); }
370 static const SaveLoad _gamelog_desc[] = {
380 void LoadCommon(
Gamelog &gamelog)
const
382 assert(gamelog.data->action.empty());
410 SlSetArrayIndex(i++);
Default handler for saving/loading an object to/from disk.
void LoadCheck(size_t) const override
Load the chunk for game preview.
const SaveLoadCompat _gamelog_grfmove_sl_compat[]
Original field order for SlGamelogGrfmove.
const SaveLoadCompat _gamelog_grfadd_sl_compat[]
Original field order for SlGamelogGrfadd.
@ SLV_U64_TICK_COUNTER
300 PR#10035 Make tick counter 64bit to avoid wrapping.
const SaveLoadCompat _gamelog_action_sl_compat[]
Original field order for SlGamelogAction.
GamelogChangeType
Type of logged change.
#define SLE_CONDSSTRNAME(base, variable, name, type, from, to)
Storage of a std::string in some savegame versions.
@ GLCT_GRFBUG
GRF bug triggered.
Gamelog _gamelog
Gamelog instance.
std::reference_wrapper< const ChunkHandler > ChunkHandlerRef
A reference to ChunkHandler.
@ SL_MIN_VERSION
First savegame version.
LoadCheckData _load_check_data
Data loaded from save during SL_LOAD_CHECK.
#define SLE_CONDVAR(base, variable, type, from, to)
Storage of a variable in some savegame versions.
void SlErrorCorrupt(const std::string &msg)
Error handler for corrupt savegames.
static void StrMakeValid(T &dst, const char *str, const char *last, StringValidationSettings settings)
Copies the valid (UTF-8) characters from str up to last to the dst.
SaveLoadTable GetLoadDescription() const
Get the description for how to load the chunk.
void Load() const override
Load the chunk.
ChunkType type
Type of the chunk.
std::span< const struct SaveLoadCompat > SaveLoadCompatTable
A table of SaveLoadCompat entries.
GamelogActionType at
Type of action.
Handlers and description of chunk.
@ GLCT_OLDVER
Loaded from savegame without logged data.
@ GLCT_GRFADD
Removed GRF.
const SaveLoadCompat _gamelog_mode_sl_compat[]
Original field order for SlGamelogMode.
@ GLCT_NONE
In savegames, end of list.
@ GLCT_GRFCOMPAT
Loading compatible GRF.
const SaveLoadCompat _gamelog_grfbug_sl_compat[]
Original field order for SlGamelogGrfbug.
#define SLE_SAVEBYTE(base, variable)
Only write byte during saving; never read it during loading.
@ GLCT_GRFPARAM
GRF parameter changed.
const SaveLoadCompat _gamelog_emergency_sl_compat[]
Original field order for SlGamelogEmergency.
@ SLV_RIFF_TO_ARRAY
294 PR#9375 Changed many CH_RIFF chunks to CH_ARRAY chunks.
@ SL_MAX_VERSION
Highest possible saveload version.
const SaveLoadCompat _gamelog_sl_compat[]
Original field order for _gamelog_desc.
const SaveLoadCompat _gamelog_grfcompat_sl_compat[]
Original field order for SlGamelogGrfcompat.
@ GLCT_EMERGENCY
Emergency savegame.
@ GLCT_GRFMOVE
GRF order changed.
size_t SlGetStructListLength(size_t limit)
Get the length of this list; if it exceeds the limit, error out.
const SaveLoadCompat _gamelog_setting_sl_compat[]
Original field order for SlGamelogSetting.
@ GLCT_END
So we know how many GLCTs are there.
@ GLCT_REVISION
Changed game revision string.
const SaveLoadCompat _gamelog_oldver_sl_compat[]
Original field order for SlGamelogOldver.
const SaveLoadCompat _gamelog_revision_sl_compat[]
Original field order for SlGamelogRevision.
#define SLEG_CONDVAR(name, variable, type, from, to)
Storage of a global variable in some savegame versions.
uint8_t SlReadByte()
Wrapper for reading a byte from the buffer.
@ GLCT_SETTING
Non-networksafe setting value changed.
#define SLEG_CONDARR(name, variable, type, length, from, to)
Storage of a global fixed-size array of SL_VAR elements in some savegame versions.
SaveLoadTable GetDescription() const override
#define SLE_ARRNAME(base, variable, name, type, length)
Storage of fixed-size array of SL_VAR elements in every version of a savegame.
std::span< const ChunkHandlerRef > ChunkHandlerTable
A table of ChunkHandler entries.
@ SLV_STRING_GAMELOG
314 PR#10801 Use std::string in gamelog.
#define SLE_SSTRNAME(base, variable, name, type)
Storage of a std::string in every savegame version.
Gamelog gamelog
Gamelog actions.
GamelogActionType
The actions we log.
@ GLCT_MODE
Scenario editor x Game, different landscape.
std::vector< SaveLoad > SlCompatTableHeader(const SaveLoadTable &slt, const SaveLoadCompatTable &slct)
Load a table header in a savegame compatible way.
void Save() const override
Save the chunk.
@ GLAT_NONE
No logging active; in savegames, end of list.
const SaveLoadCompat _gamelog_grfparam_sl_compat[]
Original field order for SlGamelogGrfparam.
void SlObject(void *object, const SaveLoadTable &slt)
Main SaveLoad function.
bool IsSavegameVersionBefore(SaveLoadVersion major, uint8_t minor=0)
Checks whether the savegame is below major.
std::vector< SaveLoad > SlTableHeader(const SaveLoadTable &slt)
Save or Load a table header.
void SlSetStructListLength(size_t length)
Set the length of this list.
@ GLAT_END
So we know how many GLATs are there.
#define SLE_VARNAME(base, variable, name, type)
Storage of a variable in every version of a savegame.
const SaveLoadCompat _gamelog_grfrem_sl_compat[]
Original field order for SlGamelogGrfrem.
int SlIterateArray()
Iterate through the elements of an array and read the whole thing.
Contains information about one logged action that caused at least one logged change.
std::vector< std::unique_ptr< LoggedChange > > change
Logged changes in this action.
#define SLEG_STRUCTLIST(name, handler)
Storage of a list of structs in every savegame version.
#define SLEG_STRUCT(name, handler)
Storage of a structs in every savegame version.