diff options
-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); |