From f8d65b486597b713dd829fafe98aa7bd3713eab7 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Fri, 16 Jan 2009 19:53:52 +0000 Subject: (svn r15114) -Codechange: Add support for 8 byte action7/9 data, used as a mask for GRFID checks. --- src/newgrf.cpp | 3 ++- src/newgrf_config.cpp | 4 ++-- src/newgrf_config.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e30e670ab..8245262f7 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3963,6 +3963,7 @@ static void SkipIf(byte *buf, size_t len) } switch (paramsize) { + case 8: cond_val = grf_load_dword(&buf); mask = grf_load_dword(&buf); break; case 4: cond_val = grf_load_dword(&buf); mask = 0xFFFFFFFF; break; case 2: cond_val = grf_load_word(&buf); mask = 0x0000FFFF; break; case 1: cond_val = grf_load_byte(&buf); mask = 0x000000FF; break; @@ -3988,7 +3989,7 @@ static void SkipIf(byte *buf, size_t len) if (param == 0x88 && condtype != 0x0B && condtype != 0x0C) { /* GRF ID checks */ - GRFConfig *c = GetGRFConfig(cond_val); + GRFConfig *c = GetGRFConfig(cond_val, mask); if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur_grfconfig->flags, GCF_STATIC) && c->status != GCS_DISABLED && _networking) { DisableStaticNewGRFInfluencingNonStaticNewGRFs(c); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index b579e5e98..6902fcdb5 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -456,12 +456,12 @@ char *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) /* Retrieve a NewGRF from the current config by its grfid */ -GRFConfig *GetGRFConfig(uint32 grfid) +GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask) { GRFConfig *c; for (c = _grfconfig; c != NULL; c = c->next) { - if (c->grfid == grfid) return c; + if ((c->grfid & mask) == (grfid & mask)) return c; } return NULL; diff --git a/src/newgrf_config.h b/src/newgrf_config.h index fcd97f0a2..4dedd5b29 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -82,7 +82,7 @@ extern GRFConfig *_grfconfig_static; ///< First item in list of static GRF set void ScanNewGRFFiles(); const GRFConfig *FindGRFConfig(uint32 grfid, const uint8 *md5sum = NULL); -GRFConfig *GetGRFConfig(uint32 grfid); +GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask = 0xFFFFFFFF); GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only); void AppendStaticGRFConfigs(GRFConfig **dst); void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el); -- cgit v1.2.3-70-g09d2