(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. ;)

This commit is contained in:
maedhros 2008-02-03 20:23:59 +00:00
parent 4a4f4b7459
commit 0cb2a7fa17

View File

@ -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;
}