From ea272261f72189a5f1e630cb0dc8194dab81eb9d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 10 Apr 2025 17:43:47 +0100 Subject: [PATCH] Fix: NewGRF Global variables 0D, 0E and 1E refer to wrong GRFFile. 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;