From 786893a844f62ddc1117699408c9fd6f511dae06 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 11 Apr 2025 18:53:05 +0100 Subject: [PATCH] Fix: NewGRF Global variables 0D, 0E and 1E refer to wrong GRFFile. (#13986) These variables used GrfProcessingState, which is only valid while loading GRFs, after which they always point to the last loaded GRFFile. --- src/newgrf/newgrf_act0_globalvar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/newgrf/newgrf_act0_globalvar.cpp b/src/newgrf/newgrf_act0_globalvar.cpp index d1e4f30ead..eb004161cb 100644 --- a/src/newgrf/newgrf_act0_globalvar.cpp +++ b/src/newgrf/newgrf_act0_globalvar.cpp @@ -458,11 +458,11 @@ bool GetGlobalVariable(uint8_t param, uint32_t *value, const GRFFile *grffile) } case 0x0D: // TTD Version, 00=DOS, 01=Windows - *value = _cur.grfconfig->palette & GRFP_USE_MASK; + *value = GetGRFConfig(grffile->grfid)->palette & GRFP_USE_MASK; return true; case 0x0E: // Y-offset for train sprites - *value = _cur.grffile->traininfo_vehicle_pitch; + *value = grffile->traininfo_vehicle_pitch; return true; case 0x0F: // Rail track type cost factors @@ -509,7 +509,7 @@ bool GetGlobalVariable(uint8_t param, uint32_t *value, const GRFFile *grffile) /* Add the local flags */ assert(!bits.Test(GrfMiscBit::TrainWidth32Pixels)); - if (_cur.grffile->traininfo_vehicle_width == VEHICLEINFO_FULL_VEHICLE_WIDTH) bits.Set(GrfMiscBit::TrainWidth32Pixels); + if (grffile->traininfo_vehicle_width == VEHICLEINFO_FULL_VEHICLE_WIDTH) bits.Set(GrfMiscBit::TrainWidth32Pixels); *value = bits.base(); return true;