diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index 650d607f03..4ffec72007 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -42,6 +42,7 @@ static const SpriteID * const _landscape_spriteindexes[] = { /** file index of first user-added GRF file */ int _first_user_grf_file_index; +int _opengfx_grf_file_index; /** * Load an old fashioned GRF file. @@ -228,6 +229,16 @@ static void LoadSpriteTables() LoadNewGRF(SPR_NEWGRFS_BASE, i); _first_user_grf_file_index = i + 1; + _opengfx_grf_file_index = -1; + uint index = i; + for (GRFConfig *c = master; c != NULL; c = c->next, index++) { + if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND || HasBit(c->flags, GCF_INIT_ONLY)) continue; + if (c->ident.grfid == BSWAP32(0xFF4F4701)) { + /* Detect OpenGFX GRF ID */ + _opengfx_grf_file_index = index; + break; + } + } /* Free and remove the top element. */ delete master; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index b363da0858..46a07e641a 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1871,8 +1871,11 @@ static void DrawSingleSignal(TileIndex tile, const RailtypeInfo *rti, Track trac sprite = (type == SIGTYPE_NORMAL && variant == SIG_ELECTRIC) ? SPR_ORIGINAL_SIGNALS_BASE : SPR_SIGNALS_BASE - 16; sprite += type * 16 + variant * 64 + image * 2 + condition + (type > SIGTYPE_LAST_NOPBS ? 64 : 0); } + + uint origin_slot = GetOriginFileSlot(sprite); extern uint _first_user_grf_file_index; - if (!is_custom_sprite) is_custom_sprite = (GetOriginFileSlot(sprite) >= _first_user_grf_file_index); + extern uint _opengfx_grf_file_index; + if (!is_custom_sprite) is_custom_sprite = origin_slot != _opengfx_grf_file_index && (origin_slot >= _first_user_grf_file_index); if (!is_custom_sprite && variant == SIG_ELECTRIC && IsRestrictedSignal(tile) && GetExistingTraceRestrictProgram(tile, track) != NULL) { if (type == SIGTYPE_PBS || type == SIGTYPE_PBS_ONEWAY) {