summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2010-10-17 12:14:49 +0000
committerfrosch <frosch@openttd.org>2010-10-17 12:14:49 +0000
commit38c350fad589148ceb8f02a1df815a9555ef0f2e (patch)
tree6d0cd91cb277587c31d552ea0230e230eadc9368 /src
parent8a0685494392e83ca967f133a2d55f8a4baed5c1 (diff)
downloadopenttd-38c350fad589148ceb8f02a1df815a9555ef0f2e.tar.xz
(svn r20960) -Add: Allow setting 'minimal compatible version' via Action14. (planetmaker)
Note: Setting 'VRSN' also sets 'MINV' resulting in the Grf being only compatible to the same version. Set 'MINV' after 'VRSN' if your Grf is compatible to older versions.
Diffstat (limited to 'src')
-rw-r--r--src/lang/english.txt1
-rw-r--r--src/newgrf.cpp23
-rw-r--r--src/newgrf_config.cpp1
-rw-r--r--src/newgrf_gui.cpp4
4 files changed, 28 insertions, 1 deletions
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 1c853a695..2dd0d8d76 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2400,6 +2400,7 @@ STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Check wh
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
index a63696ba1..44ec6e3db 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -6326,11 +6326,31 @@ static bool ChangeGRFVersion(size_t len, ByteReader *buf)
grfmsg(2, "StaticGRFInfo: expected 4 bytes for 'INFO'->'VRSN' but got " PRINTF_SIZE ", ignoring this field", len);
buf->Skip(len);
} else {
- _cur_grfconfig->version = buf->ReadDWord();
+ /* Set min_loadable_version as well (default to minimal compatibility) */
+ _cur_grfconfig->version = _cur_grfconfig->min_loadable_version = buf->ReadDWord();
}
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 +6603,7 @@ AllowedSubtags _tags_info[] = {
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
index b951ebfe2..763941e20 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -40,6 +40,7 @@ GRFConfig::GRFConfig(const GRFConfig &config) :
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
index 5169feb57..d97a852ea 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -85,6 +85,10 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint
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);