(svn r9093) -Codechange: variable scope / type

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
peter1138 18 years ago
parent e83e9b9e44
commit f662e0f996

@ -100,14 +100,14 @@ enum grfspec_feature {
typedef void (*SpecialSpriteHandler)(byte *buf, int len); typedef void (*SpecialSpriteHandler)(byte *buf, int len);
static const int _vehcounts[4] = { static const uint _vehcounts[4] = {
/* GSF_TRAIN */ NUM_TRAIN_ENGINES, /* GSF_TRAIN */ NUM_TRAIN_ENGINES,
/* GSF_ROAD */ NUM_ROAD_ENGINES, /* GSF_ROAD */ NUM_ROAD_ENGINES,
/* GSF_SHIP */ NUM_SHIP_ENGINES, /* GSF_SHIP */ NUM_SHIP_ENGINES,
/* GSF_AIRCRAFT */ NUM_AIRCRAFT_ENGINES /* GSF_AIRCRAFT */ NUM_AIRCRAFT_ENGINES
}; };
static const int _vehshifts[4] = { static const uint _vehshifts[4] = {
/* GSF_TRAIN */ 0, /* GSF_TRAIN */ 0,
/* GSF_ROAD */ ROAD_ENGINES_INDEX, /* GSF_ROAD */ ROAD_ENGINES_INDEX,
/* GSF_SHIP */ SHIP_ENGINES_INDEX, /* GSF_SHIP */ SHIP_ENGINES_INDEX,
@ -881,13 +881,11 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
switch (prop) { switch (prop) {
case 0x08: /* Class ID */ case 0x08: /* Class ID */
FOR_EACH_OBJECT { FOR_EACH_OBJECT {
uint32 classid;
/* Property 0x08 is special; it is where the station is allocated */ /* Property 0x08 is special; it is where the station is allocated */
if (statspec[i] == NULL) statspec[i] = CallocT<StationSpec>(1); if (statspec[i] == NULL) statspec[i] = CallocT<StationSpec>(1);
/* Swap classid because we read it in BE meaning WAYP or DFLT */ /* Swap classid because we read it in BE meaning WAYP or DFLT */
classid = grf_load_dword(&buf); uint32 classid = grf_load_dword(&buf);
statspec[i]->sclass = AllocateStationClass(BSWAP32(classid)); statspec[i]->sclass = AllocateStationClass(BSWAP32(classid));
} }
break; break;
@ -895,13 +893,12 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
case 0x09: /* Define sprite layout */ case 0x09: /* Define sprite layout */
FOR_EACH_OBJECT { FOR_EACH_OBJECT {
StationSpec *statspec = _cur_grffile->stations[stid + i]; StationSpec *statspec = _cur_grffile->stations[stid + i];
uint t;
statspec->tiles = grf_load_extended(&buf); statspec->tiles = grf_load_extended(&buf);
statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles); statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles);
statspec->copied_renderdata = false; statspec->copied_renderdata = false;
for (t = 0; t < statspec->tiles; t++) { for (uint t = 0; t < statspec->tiles; t++) {
DrawTileSprites *dts = &statspec->renderdata[t]; DrawTileSprites *dts = &statspec->renderdata[t];
uint seq_count = 0; uint seq_count = 0;
@ -1127,11 +1124,9 @@ static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int
} }
for (; numtables-- != 0; tableid++) { for (; numtables-- != 0; tableid++) {
byte sprite;
if (tableid >= 7) { // skip invalid data if (tableid >= 7) { // skip invalid data
grfmsg(1, "BridgeChangeInfo: Table %d >= 7, skipping", tableid); grfmsg(1, "BridgeChangeInfo: Table %d >= 7, skipping", tableid);
for (sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf); for (byte sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf);
continue; continue;
} }
@ -1139,7 +1134,7 @@ static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int
bridge->sprite_table[tableid] = MallocT<PalSpriteID>(32); bridge->sprite_table[tableid] = MallocT<PalSpriteID>(32);
} }
for (sprite = 0; sprite < 32; sprite++) { for (byte sprite = 0; sprite < 32; sprite++) {
SpriteID image = grf_load_word(&buf); SpriteID image = grf_load_word(&buf);
SpriteID pal = grf_load_word(&buf); SpriteID pal = grf_load_word(&buf);
@ -1388,10 +1383,6 @@ static void FeatureChangeInfo(byte *buf, int len)
/* GSF_SOUNDFX */ SoundEffectChangeInfo, /* GSF_SOUNDFX */ SoundEffectChangeInfo,
}; };
uint8 feature;
uint8 numprops;
uint8 numinfo;
byte engine;
EngineInfo *ei = NULL; EngineInfo *ei = NULL;
if (len == 1) { if (len == 1) {
@ -1401,10 +1392,10 @@ static void FeatureChangeInfo(byte *buf, int len)
if (!check_length(len, 6, "FeatureChangeInfo")) return; if (!check_length(len, 6, "FeatureChangeInfo")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
numprops = grf_load_byte(&buf); uint8 numprops = grf_load_byte(&buf);
numinfo = grf_load_byte(&buf); uint8 numinfo = grf_load_byte(&buf);
engine = grf_load_byte(&buf); uint8 engine = grf_load_byte(&buf);
grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d", grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d",
feature, numprops, engine, numinfo); feature, numprops, engine, numinfo);
@ -1461,15 +1452,17 @@ static void FeatureChangeInfo(byte *buf, int len)
break; break;
default: default:
if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
ignoring = true; ignoring = true;
}
break; break;
} }
break; break;
default: default:
if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
ignoring = true; ignoring = true;
}
break; break;
} }
@ -1480,11 +1473,6 @@ static void FeatureChangeInfo(byte *buf, int len)
/* Action 0x00 (GLS_SAFETYSCAN) */ /* Action 0x00 (GLS_SAFETYSCAN) */
static void SafeChangeInfo(byte *buf, int len) static void SafeChangeInfo(byte *buf, int len)
{ {
uint8 feature;
uint8 numprops;
uint8 numinfo;
uint8 index;
if (len == 1) { if (len == 1) {
grfmsg(8, "Silently ignoring one-byte special sprite 0x00"); grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
return; return;
@ -1492,10 +1480,10 @@ static void SafeChangeInfo(byte *buf, int len)
if (!check_length(len, 6, "SafeChangeInfo")) return; if (!check_length(len, 6, "SafeChangeInfo")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
numprops = grf_load_byte(&buf); uint8 numprops = grf_load_byte(&buf);
numinfo = grf_load_byte(&buf); grf_load_byte(&buf);
index = grf_load_byte(&buf); grf_load_byte(&buf);
if (feature == GSF_BRIDGE && numprops == 1) { if (feature == GSF_BRIDGE && numprops == 1) {
uint8 prop = grf_load_byte(&buf); uint8 prop = grf_load_byte(&buf);
@ -1514,10 +1502,6 @@ static void SafeChangeInfo(byte *buf, int len)
static void InitChangeInfo(byte *buf, int len) static void InitChangeInfo(byte *buf, int len)
{ {
byte *bufend = buf + len; byte *bufend = buf + len;
uint8 feature;
uint8 numprops;
uint8 numinfo;
uint8 index;
if (len == 1) { if (len == 1) {
grfmsg(8, "Silently ignoring one-byte special sprite 0x00"); grfmsg(8, "Silently ignoring one-byte special sprite 0x00");
@ -1526,10 +1510,10 @@ static void InitChangeInfo(byte *buf, int len)
if (!check_length(len, 6, "InitChangeInfo")) return; if (!check_length(len, 6, "InitChangeInfo")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
numprops = grf_load_byte(&buf); uint8 numprops = grf_load_byte(&buf);
numinfo = grf_load_byte(&buf); uint8 numinfo = grf_load_byte(&buf);
index = grf_load_byte(&buf); uint8 index = grf_load_byte(&buf);
while (numprops-- && buf < bufend) { while (numprops-- && buf < bufend) {
uint8 prop = grf_load_byte(&buf); uint8 prop = grf_load_byte(&buf);
@ -1613,19 +1597,13 @@ static void NewSpriteSet(byte *buf, int len)
* vehicle directions in each sprite set * vehicle directions in each sprite set
* Set num-dirs=8, unless your sprites are symmetric. * Set num-dirs=8, unless your sprites are symmetric.
* In that case, use num-dirs=4. * In that case, use num-dirs=4.
* For stations, must be 12 (hex) for the eighteen */
* different sprites that make up a station */
/* TODO: No stations support. */
uint8 feature;
uint num_sets;
uint num_ents;
uint i;
if (!check_length(len, 4, "NewSpriteSet")) return; if (!check_length(len, 4, "NewSpriteSet")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
num_sets = grf_load_byte(&buf); uint8 num_sets = grf_load_byte(&buf);
num_ents = grf_load_extended(&buf); uint16 num_ents = grf_load_extended(&buf);
_cur_grffile->spriteset_start = _cur_spriteid; _cur_grffile->spriteset_start = _cur_spriteid;
_cur_grffile->spriteset_feature = feature; _cur_grffile->spriteset_feature = feature;
@ -1636,7 +1614,7 @@ static void NewSpriteSet(byte *buf, int len)
_cur_spriteid, feature, num_sets, num_ents, num_sets * num_ents _cur_spriteid, feature, num_sets, num_ents, num_sets * num_ents
); );
for (i = 0; i < num_sets * num_ents; i++) { for (uint i = 0; i < num_sets * num_ents; i++) {
LoadNextSprite(_cur_spriteid++, _file_index); LoadNextSprite(_cur_spriteid++, _file_index);
_nfo_line++; _nfo_line++;
} }
@ -1699,18 +1677,15 @@ static void NewSpriteGroup(byte *buf, int len)
* otherwise it specifies a number of entries, the exact * otherwise it specifies a number of entries, the exact
* meaning depends on the feature * meaning depends on the feature
* V feature-specific-data (huge mess, don't even look it up --pasky) */ * V feature-specific-data (huge mess, don't even look it up --pasky) */
uint8 feature;
uint8 setid;
uint8 type;
SpriteGroup *group = NULL; SpriteGroup *group = NULL;
byte *bufend = buf + len; byte *bufend = buf + len;
if (!check_length(len, 5, "NewSpriteGroup")) return; if (!check_length(len, 5, "NewSpriteGroup")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
setid = grf_load_byte(&buf); uint8 setid = grf_load_byte(&buf);
type = grf_load_byte(&buf); uint8 type = grf_load_byte(&buf);
if (setid >= _cur_grffile->spritegroups_count) { if (setid >= _cur_grffile->spritegroups_count) {
// Allocate memory for new sprite group references. // Allocate memory for new sprite group references.
@ -1731,7 +1706,6 @@ static void NewSpriteGroup(byte *buf, int len)
{ {
byte varadjust; byte varadjust;
byte varsize; byte varsize;
uint i;
/* Check we can load the var size parameter */ /* Check we can load the var size parameter */
if (!check_length(bufend - buf, 1, "NewSpriteGroup (Deterministic) (1)")) return; if (!check_length(bufend - buf, 1, "NewSpriteGroup (Deterministic) (1)")) return;
@ -1794,7 +1768,7 @@ static void NewSpriteGroup(byte *buf, int len)
if (!check_length(bufend - buf, 2 + (2 + 2 * varsize) * group->g.determ.num_ranges, "NewSpriteGroup (Deterministic)")) return; if (!check_length(bufend - buf, 2 + (2 + 2 * varsize) * group->g.determ.num_ranges, "NewSpriteGroup (Deterministic)")) return;
for (i = 0; i < group->g.determ.num_ranges; i++) { for (uint i = 0; i < group->g.determ.num_ranges; i++) {
group->g.determ.ranges[i].group = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); group->g.determ.ranges[i].group = GetGroupFromGroupID(setid, type, grf_load_word(&buf));
group->g.determ.ranges[i].low = grf_load_var(varsize, &buf); group->g.determ.ranges[i].low = grf_load_var(varsize, &buf);
group->g.determ.ranges[i].high = grf_load_var(varsize, &buf); group->g.determ.ranges[i].high = grf_load_var(varsize, &buf);
@ -1808,16 +1782,13 @@ static void NewSpriteGroup(byte *buf, int len)
case 0x80: // Self scope case 0x80: // Self scope
case 0x83: // Parent scope case 0x83: // Parent scope
{ {
byte triggers;
uint i;
if (!check_length(bufend - buf, 7, "NewSpriteGroup (Randomized) (1)")) return; if (!check_length(bufend - buf, 7, "NewSpriteGroup (Randomized) (1)")) return;
group = AllocateSpriteGroup(); group = AllocateSpriteGroup();
group->type = SGT_RANDOMIZED; group->type = SGT_RANDOMIZED;
group->g.random.var_scope = HASBIT(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF; group->g.random.var_scope = HASBIT(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
triggers = grf_load_byte(&buf); uint8 triggers = grf_load_byte(&buf);
group->g.random.triggers = GB(triggers, 0, 7); group->g.random.triggers = GB(triggers, 0, 7);
group->g.random.cmp_mode = HASBIT(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY; group->g.random.cmp_mode = HASBIT(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY;
group->g.random.lowest_randbit = grf_load_byte(&buf); group->g.random.lowest_randbit = grf_load_byte(&buf);
@ -1826,7 +1797,7 @@ static void NewSpriteGroup(byte *buf, int len)
if (!check_length(bufend - buf, 2 * group->g.random.num_groups, "NewSpriteGroup (Randomized) (2)")) return; if (!check_length(bufend - buf, 2 * group->g.random.num_groups, "NewSpriteGroup (Randomized) (2)")) return;
for (i = 0; i < group->g.random.num_groups; i++) { for (uint i = 0; i < group->g.random.num_groups; i++) {
group->g.random.groups[i] = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); group->g.random.groups[i] = GetGroupFromGroupID(setid, type, grf_load_word(&buf));
} }
@ -1848,7 +1819,6 @@ static void NewSpriteGroup(byte *buf, int len)
byte sprites = _cur_grffile->spriteset_numents; byte sprites = _cur_grffile->spriteset_numents;
byte num_loaded = type; byte num_loaded = type;
byte num_loading = grf_load_byte(&buf); byte num_loading = grf_load_byte(&buf);
uint i;
if (_cur_grffile->spriteset_start == 0) { if (_cur_grffile->spriteset_start == 0) {
grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping"); grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping");
@ -1868,13 +1838,13 @@ static void NewSpriteGroup(byte *buf, int len)
grfmsg(6, "NewSpriteGroup: New SpriteGroup 0x%02X, %u views, %u loaded, %u loading", grfmsg(6, "NewSpriteGroup: New SpriteGroup 0x%02X, %u views, %u loaded, %u loading",
setid, sprites, num_loaded, num_loading); setid, sprites, num_loaded, num_loading);
for (i = 0; i < num_loaded; i++) { for (uint i = 0; i < num_loaded; i++) {
uint16 spriteid = grf_load_word(&buf); uint16 spriteid = grf_load_word(&buf);
group->g.real.loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); group->g.real.loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
grfmsg(8, "NewSpriteGroup: + rg->loaded[%i] = subset %u", i, spriteid); grfmsg(8, "NewSpriteGroup: + rg->loaded[%i] = subset %u", i, spriteid);
} }
for (i = 0; i < num_loading; i++) { for (uint i = 0; i < num_loading; i++) {
uint16 spriteid = grf_load_word(&buf); uint16 spriteid = grf_load_word(&buf);
group->g.real.loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); group->g.real.loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites);
grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid); grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid);
@ -1943,26 +1913,22 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
static byte *last_engines; static byte *last_engines;
static int last_engines_count; static int last_engines_count;
uint8 feature;
uint8 idcount;
bool wagover;
uint8 cidcount;
int c, i;
if (!check_length(len, 6, "FeatureMapSpriteGroup")) return; if (!check_length(len, 6, "FeatureMapSpriteGroup")) return;
feature = buf[1];
idcount = buf[2] & 0x7F; uint8 feature = buf[1];
wagover = (buf[2] & 0x80) == 0x80; uint8 idcount = buf[2] & 0x7F;
bool wagover = (buf[2] & 0x80) == 0x80;
if (!check_length(len, 3 + idcount, "FeatureMapSpriteGroup")) return; if (!check_length(len, 3 + idcount, "FeatureMapSpriteGroup")) return;
/* If ``n-id'' (or ``idcount'') is zero, this is a ``feature /* If idcount is zero, this is a feature callback */
* callback''. */
if (idcount == 0) { if (idcount == 0) {
grfmsg(2, "FeatureMapSpriteGroup: Feature callbacks not implemented yet"); grfmsg(2, "FeatureMapSpriteGroup: Feature callbacks not implemented yet");
return; return;
} }
cidcount = buf[3 + idcount]; uint8 cidcount = buf[3 + idcount];
if (!check_length(len, 4 + idcount + cidcount * 3, "FeatureMapSpriteGroup")) return; if (!check_length(len, 4 + idcount + cidcount * 3, "FeatureMapSpriteGroup")) return;
grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids, %d cids, wagon override %d", grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids, %d cids, wagon override %d",
@ -1977,12 +1943,12 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
if (feature == GSF_STATION) { if (feature == GSF_STATION) {
// We do things differently for stations. // We do things differently for stations.
for (i = 0; i < idcount; i++) { for (uint i = 0; i < idcount; i++) {
uint8 stid = buf[3 + i]; uint8 stid = buf[3 + i];
StationSpec *statspec = _cur_grffile->stations[stid]; StationSpec *statspec = _cur_grffile->stations[stid];
byte *bp = &buf[4 + idcount]; byte *bp = &buf[4 + idcount];
for (c = 0; c < cidcount; c++) { for (uint c = 0; c < cidcount; c++) {
uint8 ctype = grf_load_byte(&bp); uint8 ctype = grf_load_byte(&bp);
uint16 groupid = grf_load_word(&bp); uint16 groupid = grf_load_word(&bp);
@ -2009,7 +1975,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
return; return;
} }
for (i = 0; i < idcount; i++) { for (uint i = 0; i < idcount; i++) {
uint8 stid = buf[3 + i]; uint8 stid = buf[3 + i];
StationSpec *statspec = _cur_grffile->stations[stid]; StationSpec *statspec = _cur_grffile->stations[stid];
@ -2046,7 +2012,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
} }
for (i = 0; i < idcount; i++) { for (uint i = 0; i < idcount; i++) {
uint8 engine_id = buf[3 + i]; uint8 engine_id = buf[3 + i];
uint8 engine = engine_id + _vehshifts[feature]; uint8 engine = engine_id + _vehshifts[feature];
byte *bp = &buf[4 + idcount]; byte *bp = &buf[4 + idcount];
@ -2058,7 +2024,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
grfmsg(7, "FeatureMapSpriteGroup: [%d] Engine %d...", i, engine); grfmsg(7, "FeatureMapSpriteGroup: [%d] Engine %d...", i, engine);
for (c = 0; c < cidcount; c++) { for (uint c = 0; c < cidcount; c++) {
uint8 ctype = grf_load_byte(&bp); uint8 ctype = grf_load_byte(&bp);
uint16 groupid = grf_load_word(&bp); uint16 groupid = grf_load_word(&bp);
@ -2087,7 +2053,7 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
grfmsg(8, "-- Default group id 0x%04X", groupid); grfmsg(8, "-- Default group id 0x%04X", groupid);
for (i = 0; i < idcount; i++) { for (uint i = 0; i < idcount; i++) {
uint8 engine = buf[3 + i] + _vehshifts[feature]; uint8 engine = buf[3 + i] + _vehshifts[feature];
// Don't tell me you don't love duplicated code! // Don't tell me you don't love duplicated code!
@ -2132,35 +2098,23 @@ static void FeatureNewName(byte *buf, int len)
* Word : ID of string to change/add * Word : ID of string to change/add
* S data new texts, each of them zero-terminated, after * S data new texts, each of them zero-terminated, after
* which the next name begins. */ * which the next name begins. */
/* TODO: No support for changing non-vehicle text. Perhaps we shouldn't
* implement it at all, but it could be useful for some "modpacks"
* (completely new scenarios changing all graphics and logically also
* factory names etc). We should then also support all languages (by
* name), not only the original four ones. --pasky
* All of the above are coming. In Time. Some sooner than others :)*/
uint8 feature;
uint8 lang;
uint8 num;
uint16 id;
uint16 endid;
bool new_scheme = _cur_grffile->grf_version >= 7; bool new_scheme = _cur_grffile->grf_version >= 7;
bool generic;
if (!check_length(len, 6, "FeatureNewName")) return; if (!check_length(len, 6, "FeatureNewName")) return;
buf++; buf++;
feature = grf_load_byte(&buf); uint8 feature = grf_load_byte(&buf);
lang = grf_load_byte(&buf); uint8 lang = grf_load_byte(&buf);
num = grf_load_byte(&buf); uint8 num = grf_load_byte(&buf);
generic = HASBIT(lang, 7); bool generic = HASBIT(lang, 7);
id = generic ? grf_load_word(&buf) : grf_load_byte(&buf); uint16 id = generic ? grf_load_word(&buf) : grf_load_byte(&buf);
CLRBIT(lang, 7); CLRBIT(lang, 7);
if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) { if (feature <= GSF_AIRCRAFT && id < _vehcounts[feature]) {
id += _vehshifts[feature]; id += _vehshifts[feature];
} }
endid = id + num; uint16 endid = id + num;
grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature %d) in language 0x%02X", grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature %d) in language 0x%02X",
id, endid, feature, lang); id, endid, feature, lang);
@ -2260,14 +2214,12 @@ static void GraphicsNew(byte *buf, int len)
* V other data Graphics type specific data. Currently unused. */ * V other data Graphics type specific data. Currently unused. */
/* TODO */ /* TODO */
uint8 type;
uint16 num;
SpriteID replace = 0; SpriteID replace = 0;
if (!check_length(len, 2, "GraphicsNew")) return; if (!check_length(len, 2, "GraphicsNew")) return;
buf++; buf++;
type = grf_load_byte(&buf); uint8 type = grf_load_byte(&buf);
num = grf_load_extended(&buf); uint16 num = grf_load_extended(&buf);
switch (type) { switch (type) {
case 0x04: /* Signal graphics */ case 0x04: /* Signal graphics */
@ -2484,22 +2436,15 @@ static void SkipIf(byte *buf, int len)
* V value * V value
* B num-sprites */ * B num-sprites */
/* TODO: More params. More condition types. */ /* TODO: More params. More condition types. */
uint8 param;
uint8 paramsize;
uint8 condtype;
uint8 numsprites;
uint32 param_val = 0;
uint32 cond_val = 0; uint32 cond_val = 0;
uint32 mask = 0; uint32 mask = 0;
bool result; bool result;
GRFLabel *label;
GRFLabel *choice = NULL;
if (!check_length(len, 6, "SkipIf")) return; if (!check_length(len, 6, "SkipIf")) return;
buf++; buf++;
param = grf_load_byte(&buf); uint8 param = grf_load_byte(&buf);
paramsize = grf_load_byte(&buf); uint8 paramsize = grf_load_byte(&buf);
condtype = grf_load_byte(&buf); uint8 condtype = grf_load_byte(&buf);
if (condtype < 2) { if (condtype < 2) {
/* Always 1 for bit tests, the given value should be ignored. */ /* Always 1 for bit tests, the given value should be ignored. */
@ -2518,7 +2463,7 @@ static void SkipIf(byte *buf, int len)
return; return;
} }
param_val = GetParamVal(param, &cond_val); uint32 param_val = GetParamVal(param, &cond_val);
grfmsg(7, "Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val); grfmsg(7, "Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
@ -2582,13 +2527,14 @@ static void SkipIf(byte *buf, int len)
return; return;
} }
numsprites = grf_load_byte(&buf); uint8 numsprites = grf_load_byte(&buf);
/* numsprites can be a GOTO label if it has been defined in the GRF /* numsprites can be a GOTO label if it has been defined in the GRF
* file. The jump will always be the first matching label that follows * file. The jump will always be the first matching label that follows
* the current nfo_line. If no matching label is found, the first matching * the current nfo_line. If no matching label is found, the first matching
* label in the file is used. */ * label in the file is used. */
for (label = _cur_grffile->label; label != NULL; label = label->next) { GRFLabel *choice = NULL;
for (GRFLabel *label = _cur_grffile->label; label != NULL; label = label->next) {
if (label->label != numsprites) continue; if (label->label != numsprites) continue;
/* Remember a goto before the current line */ /* Remember a goto before the current line */
@ -2624,14 +2570,10 @@ static void SkipIf(byte *buf, int len)
/* Action 0x08 (GLS_FILESCAN) */ /* Action 0x08 (GLS_FILESCAN) */
static void ScanInfo(byte *buf, int len) static void ScanInfo(byte *buf, int len)
{ {
uint8 version; if (!check_length(len, 8, "Info")) return;
uint32 grfid; buf++;
const char *name; grf_load_byte(&buf);
const char *info; uint32 grfid = grf_load_dword(&buf);
if (!check_length(len, 8, "Info")) return; buf++;
version = grf_load_byte(&buf);
grfid = grf_load_dword(&buf);
_cur_grfconfig->grfid = grfid; _cur_grfconfig->grfid = grfid;
@ -2639,12 +2581,12 @@ static void ScanInfo(byte *buf, int len)
if (GB(grfid, 24, 8) == 0xFF) SETBIT(_cur_grfconfig->flags, GCF_SYSTEM); if (GB(grfid, 24, 8) == 0xFF) SETBIT(_cur_grfconfig->flags, GCF_SYSTEM);
len -= 6; len -= 6;
name = grf_load_string(&buf, len); const char *name = grf_load_string(&buf, len);
_cur_grfconfig->name = TranslateTTDPatchCodes(name); _cur_grfconfig->name = TranslateTTDPatchCodes(name);
len -= strlen(name) + 1; len -= strlen(name) + 1;
if (len > 0) { if (len > 0) {
info = grf_load_string(&buf, len); const char *info = grf_load_string(&buf, len);
_cur_grfconfig->info = TranslateTTDPatchCodes(info); _cur_grfconfig->info = TranslateTTDPatchCodes(info);
} }
@ -2661,15 +2603,12 @@ static void GRFInfo(byte *buf, int len)
* 4*B grf-id globally unique ID of this .grf file * 4*B grf-id globally unique ID of this .grf file
* S name name of this .grf set * S name name of this .grf set
* S info string describing the set, and e.g. author and copyright */ * S info string describing the set, and e.g. author and copyright */
/* TODO: Check version. (We should have own versioning done somehow.) */
uint8 version;
uint32 grfid;
const char *name;
if (!check_length(len, 8, "GRFInfo")) return; buf++; if (!check_length(len, 8, "GRFInfo")) return;
version = grf_load_byte(&buf); buf++;
grfid = grf_load_dword(&buf); uint8 version = grf_load_byte(&buf);
name = grf_load_string(&buf, len - 6); uint32 grfid = grf_load_dword(&buf);
const char *name = grf_load_string(&buf, len - 6);
_cur_grffile->grfid = grfid; _cur_grffile->grfid = grfid;
_cur_grffile->grf_version = version; _cur_grffile->grf_version = version;
@ -2689,22 +2628,19 @@ static void SpriteReplace(byte *buf, int len)
* Each set: * Each set:
* B num-sprites How many sprites are in this set * B num-sprites How many sprites are in this set
* W first-sprite First sprite number to replace */ * W first-sprite First sprite number to replace */
uint8 num_sets;
uint i;
buf++; /* skip action byte */ buf++; /* skip action byte */
num_sets = grf_load_byte(&buf); uint8 num_sets = grf_load_byte(&buf);
for (i = 0; i < num_sets; i++) { for (uint i = 0; i < num_sets; i++) {
uint8 num_sprites = grf_load_byte(&buf); uint8 num_sprites = grf_load_byte(&buf);
uint16 first_sprite = grf_load_word(&buf); uint16 first_sprite = grf_load_word(&buf);
uint j;
grfmsg(2, "SpriteReplace: [Set %d] Changing %d sprites, beginning with %d", grfmsg(2, "SpriteReplace: [Set %d] Changing %d sprites, beginning with %d",
i, num_sprites, first_sprite i, num_sprites, first_sprite
); );
for (j = 0; j < num_sprites; j++) { for (uint j = 0; j < num_sprites; j++) {
LoadNextSprite(first_sprite + j, _file_index); // XXX LoadNextSprite(first_sprite + j, _file_index); // XXX
_nfo_line++; _nfo_line++;
} }
@ -2844,11 +2780,9 @@ static void GRFComment(byte *buf, int len)
/* Action 0x0D (GLS_SAFETYSCAN) */ /* Action 0x0D (GLS_SAFETYSCAN) */
static void SafeParamSet(byte *buf, int len) static void SafeParamSet(byte *buf, int len)
{ {
uint8 target;
if (!check_length(len, 5, "SafeParamSet")) return; if (!check_length(len, 5, "SafeParamSet")) return;
buf++; buf++;
target = grf_load_byte(&buf); uint8 target = grf_load_byte(&buf);
/* Only writing GRF parameters is considered safe */ /* Only writing GRF parameters is considered safe */
if (target < 0x80) return; if (target < 0x80) return;
@ -2889,20 +2823,14 @@ static void ParamSet(byte *buf, int len)
* (source2 like in 05, and source1 as well) * (source2 like in 05, and source1 as well)
*/ */
byte target;
byte oper;
uint32 src1;
uint32 src2;
uint32 data = 0;
uint32 res;
if (!check_length(len, 5, "ParamSet")) return; if (!check_length(len, 5, "ParamSet")) return;
buf++; buf++;
target = grf_load_byte(&buf); uint8 target = grf_load_byte(&buf);
oper = grf_load_byte(&buf); uint8 oper = grf_load_byte(&buf);
src1 = grf_load_byte(&buf); uint32 src1 = grf_load_byte(&buf);
src2 = grf_load_byte(&buf); uint32 src2 = grf_load_byte(&buf);
uint32 data = 0;
if (len >= 8) data = grf_load_dword(&buf); if (len >= 8) data = grf_load_dword(&buf);
/* You can add 80 to the operation to make it apply only if the target /* You can add 80 to the operation to make it apply only if the target
@ -2911,13 +2839,13 @@ static void ParamSet(byte *buf, int len)
* - it has been set to any value in the newgrf(w).cfg parameter list * - it has been set to any value in the newgrf(w).cfg parameter list
* - it OR A PARAMETER WITH HIGHER NUMBER has been set to any value by * - it OR A PARAMETER WITH HIGHER NUMBER has been set to any value by
* an earlier action D */ * an earlier action D */
if (oper & 0x80) { if (HASBIT(oper, 7)) {
if (target < 0x80 && target < _cur_grffile->param_end) { if (target < 0x80 && target < _cur_grffile->param_end) {
grfmsg(7, "Param %u already defined, skipping", target); grfmsg(7, "Param %u already defined, skipping", target);
return; return;
} }
oper &= 0x7F; oper = GB(oper, 0, 7);
} }
if (src2 == 0xFE) { if (src2 == 0xFE) {
@ -2945,7 +2873,6 @@ static void ParamSet(byte *buf, int len)
uint start = 0; uint start = 0;
uint size = 0; uint size = 0;
uint shift = _vehshifts[feature]; uint shift = _vehshifts[feature];
int i;
if (op == 6) { if (op == 6) {
/* Return GRFID of set that reserved ID */ /* Return GRFID of set that reserved ID */
@ -2956,7 +2883,7 @@ static void ParamSet(byte *buf, int len)
/* With an operation of 2 or 3, we want to reserve a specific block of IDs */ /* With an operation of 2 or 3, we want to reserve a specific block of IDs */
if (op == 2 || op == 3) start = _cur_grffile->param[target]; if (op == 2 || op == 3) start = _cur_grffile->param[target];
for (i = start; i < _vehcounts[feature]; i++) { for (uint i = start; i < _vehcounts[feature]; i++) {
if (_grm_engines[shift + i] == 0) { if (_grm_engines[shift + i] == 0) {
size++; size++;
} else { } else {
@ -2972,7 +2899,7 @@ static void ParamSet(byte *buf, int len)
/* Got the slot... */ /* Got the slot... */
if (op == 0 || op == 3) { if (op == 0 || op == 3) {
grfmsg(2, "GRM: Reserving %d vehicles at %d", count, start); grfmsg(2, "GRM: Reserving %d vehicles at %d", count, start);
for (i = 0; i < count; i++) _grm_engines[shift + start + i] = _cur_grffile->grfid; for (uint i = 0; i < count; i++) _grm_engines[shift + start + i] = _cur_grffile->grfid;
} }
src1 = start; src1 = start;
} else { } else {
@ -3048,6 +2975,7 @@ static void ParamSet(byte *buf, int len)
* cannot be found, a value of 0 is used for the parameter value * cannot be found, a value of 0 is used for the parameter value
* instead. */ * instead. */
uint32 res;
switch (oper) { switch (oper) {
case 0x00: case 0x00:
res = src1; res = src1;
@ -3169,15 +3097,12 @@ static void SafeGRFInhibit(byte *buf, int len)
* B num Number of GRFIDs that follow * B num Number of GRFIDs that follow
* D grfids GRFIDs of the files to deactivate */ * D grfids GRFIDs of the files to deactivate */
byte num; if (!check_length(len, 2, "GRFInhibit")) return;
int i; buf++;
uint8 num = grf_load_byte(&buf);
if (!check_length(len, 1, "GRFInhibit")) return; if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return;
buf++, len--;
num = grf_load_byte(&buf); len--;
if (!check_length(len, 4 * num, "GRFInhibit")) return;
for (i = 0; i < num; i++) { for (uint i = 0; i < num; i++) {
uint32 grfid = grf_load_dword(&buf); uint32 grfid = grf_load_dword(&buf);
/* GRF is unsafe it if tries to deactivate other GRFs */ /* GRF is unsafe it if tries to deactivate other GRFs */
@ -3200,15 +3125,12 @@ static void GRFInhibit(byte *buf, int len)
* B num Number of GRFIDs that follow * B num Number of GRFIDs that follow
* D grfids GRFIDs of the files to deactivate */ * D grfids GRFIDs of the files to deactivate */
byte num; if (!check_length(len, 2, "GRFInhibit")) return;
int i; buf++;
uint8 num = grf_load_byte(&buf);
if (!check_length(len, 1, "GRFInhibit")) return; if (!check_length(len, 2 + 4 * num, "GRFInhibit")) return;
buf++, len--;
num = grf_load_byte(&buf); len--;
if (!check_length(len, 4 * num, "GRFInhibit")) return;
for (i = 0; i < num; i++) { for (uint i = 0; i < num; i++) {
uint32 grfid = grf_load_dword(&buf); uint32 grfid = grf_load_dword(&buf);
GRFConfig *file = GetGRFConfig(grfid); GRFConfig *file = GetGRFConfig(grfid);
@ -3228,12 +3150,10 @@ static void DefineGotoLabel(byte *buf, int len)
* B label The label to define * B label The label to define
* V comment Optional comment - ignored */ * V comment Optional comment - ignored */
GRFLabel *label;
if (!check_length(len, 1, "DefineGotoLabel")) return; if (!check_length(len, 1, "DefineGotoLabel")) return;
buf++; len--; buf++; len--;
label = MallocT<GRFLabel>(1); GRFLabel *label = MallocT<GRFLabel>(1);
label->label = grf_load_byte(&buf); label->label = grf_load_byte(&buf);
label->nfo_line = _nfo_line; label->nfo_line = _nfo_line;
label->pos = FioGetPos(); label->pos = FioGetPos();
@ -3259,11 +3179,9 @@ static void GRFSound(byte *buf, int len)
* *
* W num Number of sound files that follow */ * W num Number of sound files that follow */
uint16 num;
if (!check_length(len, 1, "GRFSound")) return; if (!check_length(len, 1, "GRFSound")) return;
buf++; buf++;
num = grf_load_word(&buf); uint16 num = grf_load_word(&buf);
_grf_data_blocks = num; _grf_data_blocks = num;
_grf_data_type = GDT_SOUND; _grf_data_type = GDT_SOUND;
@ -3325,11 +3243,10 @@ static void GRFImportBlock(byte *buf, int len)
static void LoadGRFSound(byte *buf, int len) static void LoadGRFSound(byte *buf, int len)
{ {
byte *buf_start = buf; byte *buf_start = buf;
FileEntry *se;
/* Allocate a sound entry. This is done even if the data is not loaded /* Allocate a sound entry. This is done even if the data is not loaded
* so that the indices used elsewhere are still correct. */ * so that the indices used elsewhere are still correct. */
se = AllocateFileEntry(); FileEntry *se = AllocateFileEntry();
if (grf_load_dword(&buf) != BSWAP32('RIFF')) { if (grf_load_dword(&buf) != BSWAP32('RIFF')) {
grfmsg(1, "LoadGRFSound: Missing RIFF header"); grfmsg(1, "LoadGRFSound: Missing RIFF header");
@ -3394,25 +3311,21 @@ static void LoadFontGlyph(byte *buf, int len)
* B num_char Number of consecutive glyphs * B num_char Number of consecutive glyphs
* W base_char First character index */ * W base_char First character index */
uint8 num_def;
uint i;
buf++; len--; buf++; len--;
if (!check_length(len, 1, "LoadFontGlyph")) return; if (!check_length(len, 1, "LoadFontGlyph")) return;
num_def = grf_load_byte(&buf); uint8 num_def = grf_load_byte(&buf);
if (!check_length(len, 1 + num_def * 4, "LoadFontGlyph")) return; if (!check_length(len, 1 + num_def * 4, "LoadFontGlyph")) return;
for (i = 0; i < num_def; i++) { for (uint i = 0; i < num_def; i++) {
FontSize size = (FontSize)grf_load_byte(&buf); FontSize size = (FontSize)grf_load_byte(&buf);
uint8 num_char = grf_load_byte(&buf); uint8 num_char = grf_load_byte(&buf);
uint16 base_char = grf_load_word(&buf); uint16 base_char = grf_load_word(&buf);
uint c;
grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size); grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size);
for (c = 0; c < num_char; c++) { for (uint c = 0; c < num_char; c++) {
SetUnicodeGlyph(size, base_char + c, _cur_spriteid); SetUnicodeGlyph(size, base_char + c, _cur_spriteid);
LoadNextSprite(_cur_spriteid++, _file_index); LoadNextSprite(_cur_spriteid++, _file_index);
_nfo_line++; _nfo_line++;
@ -3489,17 +3402,14 @@ static void TranslateGRFStrings(byte *buf, int len)
/* 'Action 0xFF' */ /* 'Action 0xFF' */
static void GRFDataBlock(byte *buf, int len) static void GRFDataBlock(byte *buf, int len)
{ {
byte name_len;
const char *name;
if (_grf_data_blocks == 0) { if (_grf_data_blocks == 0) {
grfmsg(2, "GRFDataBlock: unexpected data block, skipping"); grfmsg(2, "GRFDataBlock: unexpected data block, skipping");
return; return;
} }
buf++; buf++;
name_len = grf_load_byte(&buf); uint8 name_len = grf_load_byte(&buf);
name = (const char *)buf; const char *name = (const char *)buf;
buf += name_len + 1; buf += name_len + 1;
grfmsg(2, "GRFDataBlock: block name '%s'...", name); grfmsg(2, "GRFDataBlock: block name '%s'...", name);
@ -3604,20 +3514,15 @@ static void InitializeGRFSpecial()
static void ResetCustomStations() static void ResetCustomStations()
{ {
StationSpec *statspec; for (GRFFile *file = _first_grffile; file != NULL; file = file->next) {
GRFFile *file;
uint i;
uint t;
for (file = _first_grffile; file != NULL; file = file->next) {
if (file->stations == NULL) continue; if (file->stations == NULL) continue;
for (i = 0; i < MAX_STATIONS; i++) { for (uint i = 0; i < MAX_STATIONS; i++) {
if (file->stations[i] == NULL) continue; if (file->stations[i] == NULL) continue;
statspec = file->stations[i]; StationSpec *statspec = file->stations[i];
/* Release renderdata, if it wasn't copied from another custom station spec */ /* Release renderdata, if it wasn't copied from another custom station spec */
if (!statspec->copied_renderdata) { if (!statspec->copied_renderdata) {
for (t = 0; t < statspec->tiles; t++) { for (uint t = 0; t < statspec->tiles; t++) {
free((void*)statspec->renderdata[t].seq); free((void*)statspec->renderdata[t].seq);
} }
free(statspec->renderdata); free(statspec->renderdata);
@ -3625,9 +3530,8 @@ static void ResetCustomStations()
/* Release platforms and layouts */ /* Release platforms and layouts */
if (!statspec->copied_layouts) { if (!statspec->copied_layouts) {
uint l, p; for (uint l = 0; l < statspec->lengths; l++) {
for (l = 0; l < statspec->lengths; l++) { for (uint p = 0; p < statspec->platforms[l]; p++) {
for (p = 0; p < statspec->platforms[l]; p++) {
free(statspec->layouts[l][p]); free(statspec->layouts[l][p]);
} }
free(statspec->layouts[l]); free(statspec->layouts[l]);
@ -3648,9 +3552,9 @@ static void ResetCustomStations()
static void ResetNewGRF() static void ResetNewGRF()
{ {
GRFFile *f, *next; GRFFile *next;
for (f = _first_grffile; f != NULL; f = next) { for (GRFFile *f = _first_grffile; f != NULL; f = next) {
next = f->next; next = f->next;
free(f->filename); free(f->filename);
@ -3667,8 +3571,6 @@ static void ResetNewGRF()
*/ */
static void ResetNewGRFData() static void ResetNewGRFData()
{ {
uint i;
CleanUpStrings(); CleanUpStrings();
// Copy/reset original engine info data // Copy/reset original engine info data
@ -3680,11 +3582,9 @@ static void ResetNewGRFData()
// Copy/reset original bridge info data // Copy/reset original bridge info data
// First, free sprite table data // First, free sprite table data
for (i = 0; i < MAX_BRIDGES; i++) { for (uint i = 0; i < MAX_BRIDGES; i++) {
if (_bridge[i].sprite_table != NULL) { if (_bridge[i].sprite_table != NULL) {
uint j; for (uint j = 0; j < 7; j++) free(_bridge[i].sprite_table[j]);
for (j = 0; j < 7; j++) free(_bridge[i].sprite_table[j]);
free(_bridge[i].sprite_table); free(_bridge[i].sprite_table);
} }
} }
@ -3746,8 +3646,7 @@ static void ResetNewGRFData()
static void ClearTemporaryNewGRFData() static void ClearTemporaryNewGRFData()
{ {
/* Clear the GOTO labels used for GRF processing */ /* Clear the GOTO labels used for GRF processing */
GRFLabel *l; for (GRFLabel *l = _cur_grffile->label; l != NULL;) {
for (l = _cur_grffile->label; l != NULL;) {
GRFLabel *l2 = l->next; GRFLabel *l2 = l->next;
free(l); free(l);
l = l2; l = l2;
@ -3785,9 +3684,7 @@ static void BuildCargoTranslationMap()
static void InitNewGRFFile(const GRFConfig *config, int sprite_offset) static void InitNewGRFFile(const GRFConfig *config, int sprite_offset)
{ {
GRFFile *newfile; GRFFile *newfile = GetFileByFilename(config->filename);
newfile = GetFileByFilename(config->filename);
if (newfile != NULL) { if (newfile != NULL) {
/* We already loaded it once. */ /* We already loaded it once. */
newfile->sprite_offset = sprite_offset; newfile->sprite_offset = sprite_offset;
@ -3854,17 +3751,14 @@ static const CargoLabel *_default_refitmasks[] = {
*/ */
static void CalculateRefitMasks() static void CalculateRefitMasks()
{ {
EngineID engine; for (EngineID engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
uint32 mask = 0; uint32 mask = 0;
uint32 not_mask = 0; uint32 not_mask = 0;
uint32 xor_mask = _engine_info[engine].refit_mask; uint32 xor_mask = _engine_info[engine].refit_mask;
byte i;
if (cargo_allowed[engine] != 0) { if (cargo_allowed[engine] != 0) {
// Build up the list of cargo types from the set cargo classes. // Build up the list of cargo types from the set cargo classes.
for (i = 0; i < NUM_CARGO; i++) { for (CargoID i = 0; i < NUM_CARGO; i++) {
const CargoSpec *cs = GetCargo(i); const CargoSpec *cs = GetCargo(i);
if (cargo_allowed[engine] & cs->classes) SETBIT(mask, i); if (cargo_allowed[engine] & cs->classes) SETBIT(mask, i);
if (cargo_disallowed[engine] & cs->classes) SETBIT(not_mask, i); if (cargo_disallowed[engine] & cs->classes) SETBIT(not_mask, i);
@ -3958,7 +3852,6 @@ static void DecodeSpecialSprite(uint num, GrfLoadingStage stage)
}; };
byte* buf; byte* buf;
byte action;
if (_preload_sprite == NULL) { if (_preload_sprite == NULL) {
/* No preloaded sprite to work with; allocate and read the /* No preloaded sprite to work with; allocate and read the
@ -3976,7 +3869,7 @@ static void DecodeSpecialSprite(uint num, GrfLoadingStage stage)
FioSeekTo(num, SEEK_CUR); FioSeekTo(num, SEEK_CUR);
} }
action = buf[0]; byte action = buf[0];
if (action == 0xFF) { if (action == 0xFF) {
grfmsg(7, "Handling data block in stage %d", stage); grfmsg(7, "Handling data block in stage %d", stage);
@ -4082,8 +3975,6 @@ void InitDepotWindowBlockSizes();
void LoadNewGRF(uint load_index, uint file_index) void LoadNewGRF(uint load_index, uint file_index)
{ {
GrfLoadingStage stage;
InitializeGRFSpecial(); InitializeGRFSpecial();
ResetNewGRFData(); ResetNewGRFData();
@ -4091,13 +3982,12 @@ void LoadNewGRF(uint load_index, uint file_index)
/* Load newgrf sprites /* Load newgrf sprites
* in each loading stage, (try to) open each file specified in the config * in each loading stage, (try to) open each file specified in the config
* and load information from it. */ * and load information from it. */
for (stage = GLS_LABELSCAN; stage <= GLS_ACTIVATION; stage++) { for (GrfLoadingStage stage = GLS_LABELSCAN; stage <= GLS_ACTIVATION; stage++) {
uint slot = file_index; uint slot = file_index;
GRFConfig *c;
_cur_stage = stage; _cur_stage = stage;
_cur_spriteid = load_index; _cur_spriteid = load_index;
for (c = _grfconfig; c != NULL; c = c->next) { for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue; if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
// TODO usererror() // TODO usererror()
@ -4119,8 +4009,3 @@ void LoadNewGRF(uint load_index, uint file_index)
/* Set the block size in the depot windows based on vehicle sprite sizes */ /* Set the block size in the depot windows based on vehicle sprite sizes */
InitDepotWindowBlockSizes(); InitDepotWindowBlockSizes();
} }

Loading…
Cancel
Save