summaryrefslogtreecommitdiff
path: root/src/newgrf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/newgrf.cpp')
-rw-r--r--src/newgrf.cpp38
1 files 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<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 @@ 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<RailTypeLabel>(numinfo);
+ }
+
+ RailTypeLabel rtl = buf->ReadDWord();
+ _cur.grffile->railtype_list[i] = BSWAP32(rtl);
break;
+ }
case 0x13: // Gender translation table
case 0x14: // Case translation table