From 9522dbb1a9636fca4b67b8ff7fed873baca3fee1 Mon Sep 17 00:00:00 2001 From: frosch Date: Fri, 25 May 2012 16:52:18 +0000 Subject: (svn r24272) -Fix: [NewGRF] Load cargo- and railtype-translation during both reservation and activation stage. That way they can be selected using Action7 depending on present cargo- or railtypes. --- src/newgrf.cpp | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e0aee7029..bdba01dcd 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2442,11 +2442,22 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By break; } - case 0x09: // Cargo translation table - /* This is loaded during the reservation stage, so just skip it here. */ - /* Each entry is 4 bytes. */ - buf->Skip(4); + case 0x09: { // Cargo Translation Table; loading during both reservation and activation stage (in case it is selected depending on defined cargos) + if (i == 0) { + if (gvid != 0) { + grfmsg(1, "GlobalVarChangeInfo: Cargo translation table must start at zero"); + return CIR_INVALID_ID; + } + + free(_cur.grffile->cargo_list); + _cur.grffile->cargo_max = numinfo; + _cur.grffile->cargo_list = MallocT(numinfo); + } + + CargoLabel cl = buf->ReadDWord(); + _cur.grffile->cargo_list[i] = BSWAP32(cl); break; + } case 0x0A: { // Currency display names uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); @@ -2560,11 +2571,22 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By buf->Skip(8); break; - case 0x12: // Rail type translation table - /* This is loaded during the reservation stage, so just skip it here. */ - /* Each entry is 4 bytes. */ - buf->Skip(4); + case 0x12: { // Rail type translation table; loading during both reservation and activation stage (in case it is selected depending on defined railtypes) + if (i == 0) { + if (gvid != 0) { + grfmsg(1, "GlobalVarChangeInfo: Rail type translation table must start at zero"); + return CIR_INVALID_ID; + } + + free(_cur.grffile->railtype_list); + _cur.grffile->railtype_max = numinfo; + _cur.grffile->railtype_list = MallocT(numinfo); + } + + RailTypeLabel rtl = buf->ReadDWord(); + _cur.grffile->railtype_list[i] = BSWAP32(rtl); break; + } case 0x13: // Gender translation table case 0x14: // Case translation table -- cgit v1.2.3-54-g00ecf