# HG changeset patch # Parent bfc72e06fc3af0923a86a7f123df9ee877c216aa Add: Action14 support for minimum required NewGRF version diff --git a/src/lang/english.txt b/src/lang/english.txt --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2400,6 +2400,7 @@ STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Filename: {SILVER}{RAW_STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{RAW_STRING} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: {SILVER}{NUM} +STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. compatible version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{RAW_STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{RAW_STRING} STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING1} diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6331,6 +6331,25 @@ return true; } +/** Callback function for 'INFO'->'MINV' to the minimum compatible version of the NewGRF. */ +static bool ChangeGRFMinVersion(size_t len, ByteReader *buf) +{ + if (len != 4) { + grfmsg(2, "StaticGRFInfo: expected 4 bytes for 'INFO'->'MINV' but got " PRINTF_SIZE ", ignoring this field", len); + buf->Skip(len); + } else { + _cur_grfconfig->min_loadable_version = buf->ReadDWord(); + if (_cur_grfconfig->version == 0) { + grfmsg(2, "StaticGRFInfo: 'MINV' defined before 'VRSN' or 'VRSN' set to 0, ignoring this field"); + _cur_grfconfig->min_loadable_version = 0; + } + if (_cur_grfconfig->version < _cur_grfconfig->min_loadable_version) { + grfmsg(2, "StaticGRFInfo: 'MINV' defined as %d, limiting it to 'VRSN'", _cur_grfconfig->min_loadable_version); + _cur_grfconfig->min_loadable_version = _cur_grfconfig->version; + } + } + return true; +} static GRFParameterInfo *_cur_parameter; ///< The parameter which info is currently changed by the newgrf. @@ -6583,6 +6602,7 @@ AllowedSubtags('NPAR', ChangeGRFNumUsedParams), AllowedSubtags('PALS', ChangeGRFPalette), AllowedSubtags('VRSN', ChangeGRFVersion), + AllowedSubtags('MINV', ChangeGRFMinVersion), AllowedSubtags('PARA', HandleParameterInfo), AllowedSubtags() }; diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -40,6 +40,7 @@ ZeroedMemoryAllocator(), ident(config.ident), version(config.version), + min_loadable_version(config.min_loadable_version), flags(config.flags & ~GCF_COPY), status(config.status), grf_bugs(config.grf_bugs), diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -85,6 +85,10 @@ SetDParam(0, c->version); y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_VERSION); } + if (_settings_client.gui.newgrf_show_old_versions && c->min_loadable_version != 0) { + SetDParam(0, c->min_loadable_version); + y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_MIN_VERSION); + } /* Prepare and draw MD5 sum */ md5sumToString(buff, lastof(buff), c->ident.md5sum);