summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaedhros <maedhros@openttd.org>2008-02-03 20:23:59 +0000
committermaedhros <maedhros@openttd.org>2008-02-03 20:23:59 +0000
commit2588879c6d266741b1a9f6a38593d8a3a717a760 (patch)
tree90a4827b2ca27b373e800038225a86cf4c935d46 /src
parent20e9abed479e8ddf90765c79fe344d4a4aad52be (diff)
downloadopenttd-2588879c6d266741b1a9f6a38593d8a3a717a760.tar.xz
(svn r12052) -Fix [FS#1737] (r11494): The cargo translation table was loaded at the right time, but all the other global variables were now loaded too early. ;)
Diffstat (limited to 'src')
-rw-r--r--src/newgrf.cpp42
1 files changed, 24 insertions, 18 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 99aad12b7..454aa3f44 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1488,21 +1488,11 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i
}
} break;
- case 0x09: { // Cargo translation table
- if (gvid != 0) {
- if (i == 0) grfmsg(1, "InitChangeInfo: Cargo translation table must start at zero");
- /* Skip data */
- buf += 4;
- break;
- }
- if (i == 0) {
- free(_cur_grffile->cargo_list);
- _cur_grffile->cargo_max = numinfo;
- _cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo);
- }
- CargoLabel cl = grf_load_dword(&buf);
- _cur_grffile->cargo_list[i] = BSWAP32(cl);
- } break;
+ case 0x09: // Cargo translation table
+ /* This is loaded during the reservation stage, so just skip it here. */
+ /* Each entry is 4 bytes. */
+ buf += 4;
+ break;
case 0x0A: { // Currency display names
uint curidx = GetNewgrfCurrencyIdConverted(gvid + i);
@@ -2167,7 +2157,7 @@ static void FeatureChangeInfo(byte *buf, int len)
/* GSF_CANAL */ CanalChangeInfo,
/* GSF_BRIDGE */ BridgeChangeInfo,
/* GSF_TOWNHOUSE */ TownHouseChangeInfo,
- /* GSF_GLOBALVAR */ NULL, /* Global variables are handled during reservation */
+ /* GSF_GLOBALVAR */ GlobalVarChangeInfo,
/* GSF_INDUSTRYTILES */IndustrytilesChangeInfo,
/* GSF_INDUSTRIES */ IndustriesChangeInfo,
/* GSF_CARGOS */ NULL, /* Cargo is handled during reservation */
@@ -2287,7 +2277,7 @@ static void ReserveChangeInfo(byte *buf, int len)
{
byte *bufend = buf + len;
- if (!check_length(len, 6, "InitChangeInfo")) return;
+ if (!check_length(len, 6, "ReserveChangeInfo")) return;
buf++;
uint8 feature = grf_load_byte(&buf);
@@ -2307,7 +2297,23 @@ static void ReserveChangeInfo(byte *buf, int len)
ignoring = CargoChangeInfo(index, numinfo, prop, &buf, bufend - buf);
break;
case GSF_GLOBALVAR:
- ignoring = GlobalVarChangeInfo(index, numinfo, prop, &buf, bufend - buf);
+ switch (prop) {
+ case 0x09: // Cargo Translation Table
+ if (index != 0) {
+ grfmsg(1, "ReserveChangeInfo: Cargo translation table must start at zero");
+ return;
+ }
+
+ free(_cur_grffile->cargo_list);
+ _cur_grffile->cargo_max = numinfo;
+ _cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo);
+
+ for (uint i = 0; i < numinfo; i++) {
+ CargoLabel cl = grf_load_dword(&buf);
+ _cur_grffile->cargo_list[i] = BSWAP32(cl);
+ }
+ break;
+ }
break;
}