diff options
author | frosch <frosch@openttd.org> | 2009-03-14 19:38:19 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2009-03-14 19:38:19 +0000 |
commit | e0dd907cab34ffa9afea3a2b80d12161fefb0844 (patch) | |
tree | 14cad5398d23b448213aed37ccab9b971c4024fd /src | |
parent | 40ddc49764a78ba2f1ebc9318132d10fe2635b4f (diff) | |
download | openttd-e0dd907cab34ffa9afea3a2b80d12161fefb0844.tar.xz |
(svn r15713) -Feature(ette): Allow static newgrfs to set 'GRF ID engine overrides', if the source GRF is static.
Diffstat (limited to 'src')
-rw-r--r-- | src/newgrf.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp index fd46c74c1..3023beddf 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2520,7 +2520,7 @@ static void SafeChangeInfo(byte *buf, size_t len) buf++; uint8 feature = grf_load_byte(&buf); uint8 numprops = grf_load_byte(&buf); - grf_load_byte(&buf); // num-info + uint numinfo = grf_load_byte(&buf); grf_load_extended(&buf); // id if (feature == GSF_BRIDGE && numprops == 1) { @@ -2528,6 +2528,22 @@ static void SafeChangeInfo(byte *buf, size_t len) /* Bridge property 0x0D is redefinition of sprite layout tables, which * is considered safe. */ if (prop == 0x0D) return; + } else if (feature == GSF_GLOBALVAR && numprops == 1) { + uint8 prop = grf_load_byte(&buf); + /* Engine ID Mappings are safe, if the source is static */ + if (prop == 0x11) { + bool is_safe = true; + for (uint i = 0; i < numinfo; i++) { + uint32 s = grf_load_dword(&buf); + grf_load_dword(&buf); // dest + const GRFConfig *grfconfig = GetGRFConfig(s); + if (grfconfig != NULL && !HasBit(grfconfig->flags, GCF_STATIC)) { + is_safe = false; + break; + } + } + if (is_safe) return; + } } SetBit(_cur_grfconfig->flags, GCF_UNSAFE); |