changeset 19371:7228b4f998ab draft

(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.
author frosch <frosch@openttd.org>
date Fri, 25 May 2012 16:52:18 +0000
parents a0b8c2e24c35
children de7c7a37c465
files src/newgrf.cpp
diffstat 1 files changed, 32 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -2442,11 +2442,22 @@
 				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);
-				break;
+			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<CargoLabel>(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 @@
 				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);
-				break;
+			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<RailTypeLabel>(numinfo);
+				}
+
+				RailTypeLabel rtl = buf->ReadDWord();
+				_cur.grffile->railtype_list[i] = BSWAP32(rtl);
+				break;
+			}
 
 			case 0x13:   // Gender translation table
 			case 0x14:   // Case translation table