No longer truncate savegame version in gamelog.
Add an extended feature for changed savegame format.
This commit is contained in:
@@ -75,6 +75,7 @@ void GamelogFree(LoggedAction *gamelog_action, uint gamelog_actions)
|
|||||||
for (uint j = 0; j < la->changes; j++) {
|
for (uint j = 0; j < la->changes; j++) {
|
||||||
const LoggedChange *lc = &la->change[j];
|
const LoggedChange *lc = &la->change[j];
|
||||||
if (lc->ct == GLCT_SETTING) free(lc->setting.name);
|
if (lc->ct == GLCT_SETTING) free(lc->setting.name);
|
||||||
|
if (lc->ct == GLCT_REVISION) free(lc->revision.text);
|
||||||
}
|
}
|
||||||
free(la->change);
|
free(la->change);
|
||||||
}
|
}
|
||||||
@@ -414,8 +415,7 @@ void GamelogRevision()
|
|||||||
LoggedChange *lc = GamelogChange(GLCT_REVISION);
|
LoggedChange *lc = GamelogChange(GLCT_REVISION);
|
||||||
if (lc == NULL) return;
|
if (lc == NULL) return;
|
||||||
|
|
||||||
memset(lc->revision.text, 0, sizeof(lc->revision.text));
|
lc->revision.text = stredup(_openttd_revision);
|
||||||
strecpy(lc->revision.text, _openttd_revision, lastof(lc->revision.text), true);
|
|
||||||
lc->revision.slver = SAVEGAME_VERSION;
|
lc->revision.slver = SAVEGAME_VERSION;
|
||||||
lc->revision.modified = _openttd_revision_modified;
|
lc->revision.modified = _openttd_revision_modified;
|
||||||
lc->revision.newgrf = _openttd_newgrf_version;
|
lc->revision.newgrf = _openttd_newgrf_version;
|
||||||
|
@@ -42,7 +42,7 @@ struct LoggedChange {
|
|||||||
byte landscape; ///< landscape (temperate, arctic, ...)
|
byte landscape; ///< landscape (temperate, arctic, ...)
|
||||||
} mode;
|
} mode;
|
||||||
struct {
|
struct {
|
||||||
char text[NETWORK_REVISION_LENGTH]; ///< revision string, _openttd_revision
|
char *text; ///< revision string, _openttd_revision
|
||||||
uint32 newgrf; ///< _openttd_newgrf_version
|
uint32 newgrf; ///< _openttd_newgrf_version
|
||||||
uint16 slver; ///< _sl_version
|
uint16 slver; ///< _sl_version
|
||||||
byte modified; ///< _openttd_revision_modified
|
byte modified; ///< _openttd_revision_modified
|
||||||
|
@@ -71,6 +71,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 1, 1, "template_replacement", NULL, NULL, "TRPL,TMPL" },
|
{ XSLFI_TEMPLATE_REPLACEMENT, XSCF_NULL, 1, 1, "template_replacement", NULL, NULL, "TRPL,TMPL" },
|
||||||
{ XSLFI_MORE_RAIL_TYPES, XSCF_NULL, 1, 1, "more_rail_types", NULL, NULL, NULL },
|
{ XSLFI_MORE_RAIL_TYPES, XSCF_NULL, 1, 1, "more_rail_types", NULL, NULL, NULL },
|
||||||
{ XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 1, 1, "cargo_type_orders", NULL, NULL, "ORDX" },
|
{ XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 1, 1, "cargo_type_orders", NULL, NULL, "ORDX" },
|
||||||
|
{ XSLFI_EXTENDED_GAMELOG, XSCF_NULL, 1, 1, "extended_gamelog", NULL, NULL, NULL },
|
||||||
|
|
||||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
||||||
};
|
};
|
||||||
|
@@ -45,6 +45,7 @@ enum SlXvFeatureIndex {
|
|||||||
XSLFI_TEMPLATE_REPLACEMENT, ///< Template-based train replacement
|
XSLFI_TEMPLATE_REPLACEMENT, ///< Template-based train replacement
|
||||||
XSLFI_MORE_RAIL_TYPES, ///< Increased number of rail types
|
XSLFI_MORE_RAIL_TYPES, ///< Increased number of rail types
|
||||||
XSLFI_CARGO_TYPE_ORDERS, ///< Cargo-specific load/unload order flags
|
XSLFI_CARGO_TYPE_ORDERS, ///< Cargo-specific load/unload order flags
|
||||||
|
XSLFI_EXTENDED_GAMELOG, ///< Extended gamelog
|
||||||
|
|
||||||
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
||||||
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
||||||
|
@@ -28,8 +28,11 @@ static const SaveLoad _glog_mode_desc[] = {
|
|||||||
SLE_END()
|
SLE_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char old_revision_text[NETWORK_REVISION_LENGTH];
|
||||||
|
|
||||||
static const SaveLoad _glog_revision_desc[] = {
|
static const SaveLoad _glog_revision_desc[] = {
|
||||||
SLE_ARR(LoggedChange, revision.text, SLE_UINT8, NETWORK_REVISION_LENGTH),
|
SLEG_CONDARR_X(old_revision_text, SLE_UINT8, NETWORK_REVISION_LENGTH, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG, 0, 0)),
|
||||||
|
SLE_CONDSTR_X(LoggedChange, revision.text, SLE_STR, 0, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_EXTENDED_GAMELOG)),
|
||||||
SLE_VAR(LoggedChange, revision.newgrf, SLE_UINT32),
|
SLE_VAR(LoggedChange, revision.newgrf, SLE_UINT32),
|
||||||
SLE_VAR(LoggedChange, revision.slver, SLE_UINT16),
|
SLE_VAR(LoggedChange, revision.slver, SLE_UINT16),
|
||||||
SLE_VAR(LoggedChange, revision.modified, SLE_UINT8),
|
SLE_VAR(LoggedChange, revision.modified, SLE_UINT8),
|
||||||
@@ -132,6 +135,9 @@ static void Load_GLOG_common(LoggedAction *&gamelog_action, uint &gamelog_action
|
|||||||
assert((uint)ct < GLCT_END);
|
assert((uint)ct < GLCT_END);
|
||||||
|
|
||||||
SlObject(lc, _glog_desc[ct]);
|
SlObject(lc, _glog_desc[ct]);
|
||||||
|
if (ct == GLCT_REVISION && SlXvIsFeatureMissing(XSLFI_EXTENDED_GAMELOG)) {
|
||||||
|
lc->revision.text = stredup(old_revision_text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user